let _connectorCache; let _rawConnectorCache; let _extraConnectorClasses = {}; let _classPaths; export function resetExtraClasses() { _extraConnectorClasses = {}; _classPaths = undefined; } // Note: In plugins, define a class by path and it will be wired up automatically // eg: discourse/connectors//.js.es6 export function extraConnectorClass(name, obj) { _extraConnectorClasses[name] = obj; } const DefaultConnectorClass = { actions: {}, shouldRender: () => true, setupComponent() { } }; function findOutlets(collection, callback) { const disabledPlugins = Discourse.Site.currentProp('disabled_plugins') || []; Object.keys(collection).forEach(function(res) { if (res.indexOf("/connectors/") !== -1) { // Skip any disabled plugins for (let i=0; i { _classPaths[`${outlet}/${un}`] = require(res).default; }); } const id = `${outletName}/${uniqueName}`; let foundClass = _extraConnectorClasses[id] || _classPaths[id]; return foundClass ? jQuery.extend({}, DefaultConnectorClass, foundClass) : DefaultConnectorClass; } function buildConnectorCache() { _connectorCache = {}; findOutlets(Ember.TEMPLATES, (outletName, resource, uniqueName) => { _connectorCache[outletName] = _connectorCache[outletName] || []; _connectorCache[outletName].push({ templateName: resource.replace('javascripts/', ''), template: Ember.TEMPLATES[resource], classNames: `${outletName}-outlet ${uniqueName}`, connectorClass: findClass(outletName, uniqueName) }); }); } function buildRawConnectorCache() { _rawConnectorCache = {}; findOutlets(Discourse.RAW_TEMPLATES, (outletName, resource) => { _rawConnectorCache[outletName] = _rawConnectorCache[outletName] || []; _rawConnectorCache[outletName].push({ template: Discourse.RAW_TEMPLATES[resource] }); }); } export function connectorsFor(outletName) { if (!_connectorCache) { buildConnectorCache(); } return _connectorCache[outletName] || []; } export function rawConnectorsFor(outletName) { if (!_rawConnectorCache) { buildRawConnectorCache(); } return _rawConnectorCache[outletName] || []; }