Do not load javascripts for disabled plugins (#5103)

* Do not load javascript for disabled plugins

* Appease rubocop
This commit is contained in:
David Taylor 2017-09-06 09:06:47 +01:00 committed by Régis Hanol
parent 8463b676df
commit a14ab48829
3 changed files with 55 additions and 0 deletions

View File

@ -1,7 +1,9 @@
import { buildResolver } from 'discourse-common/resolver';
import { default as computed, observes } from 'ember-addons/ember-computed-decorators';
import PreloadStore from 'preload-store';
const _pluginCallbacks = [];
const _pluginDefinitions = {};
const Discourse = Ember.Application.extend({
rootElement: '#main',
@ -101,6 +103,16 @@ const Discourse = Ember.Application.extend({
$('noscript').remove();
// Load plugin definions.
const disabledPlugins = PreloadStore.get('site').disabled_plugins;
Object.keys(_pluginDefinitions).forEach((key) => {
if(!(disabledPlugins.includes(key))){ // Not disabled, so load it
_pluginDefinitions[key].forEach((func) => {
func();
});
}
});
Object.keys(requirejs._eak_seen).forEach(function(key) {
if (/\/pre\-initializers\//.test(key)) {
const module = requirejs(key, null, null, true);
@ -154,6 +166,13 @@ const Discourse = Ember.Application.extend({
_pluginCallbacks.push({ version, code });
},
_registerPluginScriptDefinition(pluginName, definition) {
if(!(pluginName in _pluginDefinitions)){
_pluginDefinitions[pluginName] = [];
}
_pluginDefinitions[pluginName].push(definition);
},
assetVersion: Ember.computed({
get() {
return this.get("currentAssetVersion");

View File

@ -0,0 +1,5 @@
require 'discourse_wrap_plugin_js'
Rails.application.config.assets.configure do |env|
env.register_preprocessor('application/javascript', DiscourseWrapPluginJS)
end

View File

@ -0,0 +1,31 @@
class DiscourseWrapPluginJS
def initialize(options = {}, &block)
end
def self.instance
@instance ||= new
end
def self.call(input)
instance.call(input)
end
# Add stuff around javascript
def call(input)
path = input[:environment].context_class.new(input).pathname.to_s
data = input[:data]
# Only apply to plugin paths
return data unless (path =~ /\/plugins\//)
# Find the folder name of the plugin
folder_name = path[/\/plugins\/(\S+?)\//, 1]
# Lookup plugin name
plugin = Discourse.plugins.find { |p| p.path =~ /\/plugins\/#{folder_name}\// }
plugin_name = plugin.name
"Discourse._registerPluginScriptDefinition('#{plugin_name}', function(){#{data}}); \n"
end
end