/** A plugin outlet is an extension point for templates where other templates can be inserted by plugins. ## Usage If your handlebars template has: ```handlebars {{plugin-outlet "evil-trout"}} ``` Then any handlebars files you create in the `connectors/evil-trout` directory will automatically be appended. For example: plugins/hello/assets/javascripts/discourse/templates/connectors/evil-trout/hello.hbs With the contents: ```handlebars Hello World ``` Will insert Hello World at that point in the template. Optionally you can also define a view class for the outlet as: plugins/hello/assets/javascripts/discourse/views/connectors/evil-trout/hello.js.es6 And it will be wired up automatically. ## The block form If you use the block form of the outlet, its contents will be displayed if no connectors are found. Example: ```handlebars {{#plugin-outlet "hello-world"}} Nobody says hello :'( {{/plugin-outlet}} ``` ## Disabling If a plugin returns a disabled status, the outlets will not be wired up for it. The list of disabled plugins is returned via the `Site` singleton. **/ // TODO: Add all plugin-outlet names dynamically const rewireableOutlets = [ 'hamburger-admin' ]; const _rewires = {}; let _connectorCache, _rawCache; function findOutlets(collection, callback) { const disabledPlugins = Discourse.Site.currentProp('disabled_plugins') || []; Ember.keys(collection).forEach(function(res) { if (res.indexOf("/connectors/") !== -1) { // Skip any disabled plugins for (let i=0; i 1) ? Ember.ContainerView : childViews[0]; const newHash = $.extend({}, viewInjections(env.data.view.container)); if (hash.tagName) { newHash.tagName = hash.tagName; } delete options.fn; // we don't need the default template since we have a connector env.helpers.view.helperFunction.call(this, [viewClass], newHash, options, env); const cvs = env.data.view._childViews; if (childViews.length > 1 && cvs && cvs.length) { const inserted = cvs[cvs.length-1]; if (inserted) { childViews.forEach(function(cv) { inserted.pushObject(cv.create()); }); } } } }); // Allow plugins to rewire outlets to new outlets if they exist. For example, the akismet // plugin will use `hamburger-admin` if it exists, otherwise `site-menu-links` export function rewire(uniqueName, outlet, wantedOutlet) { if (rewireableOutlets.indexOf(wantedOutlet) !== -1) { _rewires[outlet] = _rewires[outlet] || {}; _rewires[outlet][uniqueName] = wantedOutlet; } }