/** 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. ## 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. **/ import { registerHelper } from 'discourse-common/lib/helpers'; let _connectorCache, _rawCache; 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 1) ? Ember.ContainerView : childViews[0]; // TODO: Figure out how to do this without a container view if (env) { const newHash = $.extend({}, viewInjections(env.data.view.container)); if (hash.tagName) { newHash.tagName = hash.tagName; } // we don't need the default template since we have a connector delete options.fn; delete options.template; 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()); }); } } } } }); // No longer used export function rewire() { }