mirror of
https://github.com/discourse/discourse.git
synced 2025-05-28 01:56:58 +08:00
Do not load javascripts for disabled plugins (#5103)
* Do not load javascript for disabled plugins * Appease rubocop
This commit is contained in:

committed by
Régis Hanol

parent
8463b676df
commit
a14ab48829
@ -1,7 +1,9 @@
|
|||||||
import { buildResolver } from 'discourse-common/resolver';
|
import { buildResolver } from 'discourse-common/resolver';
|
||||||
import { default as computed, observes } from 'ember-addons/ember-computed-decorators';
|
import { default as computed, observes } from 'ember-addons/ember-computed-decorators';
|
||||||
|
import PreloadStore from 'preload-store';
|
||||||
|
|
||||||
const _pluginCallbacks = [];
|
const _pluginCallbacks = [];
|
||||||
|
const _pluginDefinitions = {};
|
||||||
|
|
||||||
const Discourse = Ember.Application.extend({
|
const Discourse = Ember.Application.extend({
|
||||||
rootElement: '#main',
|
rootElement: '#main',
|
||||||
@ -101,6 +103,16 @@ const Discourse = Ember.Application.extend({
|
|||||||
|
|
||||||
$('noscript').remove();
|
$('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) {
|
Object.keys(requirejs._eak_seen).forEach(function(key) {
|
||||||
if (/\/pre\-initializers\//.test(key)) {
|
if (/\/pre\-initializers\//.test(key)) {
|
||||||
const module = requirejs(key, null, null, true);
|
const module = requirejs(key, null, null, true);
|
||||||
@ -154,6 +166,13 @@ const Discourse = Ember.Application.extend({
|
|||||||
_pluginCallbacks.push({ version, code });
|
_pluginCallbacks.push({ version, code });
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_registerPluginScriptDefinition(pluginName, definition) {
|
||||||
|
if(!(pluginName in _pluginDefinitions)){
|
||||||
|
_pluginDefinitions[pluginName] = [];
|
||||||
|
}
|
||||||
|
_pluginDefinitions[pluginName].push(definition);
|
||||||
|
},
|
||||||
|
|
||||||
assetVersion: Ember.computed({
|
assetVersion: Ember.computed({
|
||||||
get() {
|
get() {
|
||||||
return this.get("currentAssetVersion");
|
return this.get("currentAssetVersion");
|
||||||
|
5
config/initializers/014-wrap_plugin_js.rb
Normal file
5
config/initializers/014-wrap_plugin_js.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
require 'discourse_wrap_plugin_js'
|
||||||
|
|
||||||
|
Rails.application.config.assets.configure do |env|
|
||||||
|
env.register_preprocessor('application/javascript', DiscourseWrapPluginJS)
|
||||||
|
end
|
31
lib/discourse_wrap_plugin_js.rb
Normal file
31
lib/discourse_wrap_plugin_js.rb
Normal 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
|
Reference in New Issue
Block a user