From 7eb32be4def71900a4356e3ac5595d0a0cd261c6 Mon Sep 17 00:00:00 2001 From: Robin Ward <robin.ward@gmail.com> Date: Mon, 17 Aug 2015 15:03:55 -0400 Subject: [PATCH] Add support for plugins to declare ES6 in the admin bundle --- app/assets/javascripts/admin.js.erb | 8 ++++++++ app/assets/javascripts/application.js.erb | 14 +++++--------- lib/discourse_plugin_registry.rb | 18 ++++++++++++++++-- lib/plugin/instance.rb | 5 +++++ 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/app/assets/javascripts/admin.js.erb b/app/assets/javascripts/admin.js.erb index ce47046a21c..41f0315debb 100644 --- a/app/assets/javascripts/admin.js.erb +++ b/app/assets/javascripts/admin.js.erb @@ -2,4 +2,12 @@ require_asset("main_include_admin.js") DiscoursePluginRegistry.admin_javascripts.each { |js| require_asset(js) } + +DiscoursePluginRegistry.each_globbed_asset(admin: true) do |f, ext| + if File.directory?(f) + depend_on(f) + elsif f.to_s.end_with?(".#{ext}") + require_asset(f) + end +end %> diff --git a/app/assets/javascripts/application.js.erb b/app/assets/javascripts/application.js.erb index 64a1f7dd398..4b040e3bd65 100644 --- a/app/assets/javascripts/application.js.erb +++ b/app/assets/javascripts/application.js.erb @@ -6,15 +6,11 @@ require_asset ("./main_include.js") DiscoursePluginRegistry.javascripts.each { |js| require_asset(js) } DiscoursePluginRegistry.handlebars.each { |hb| require_asset(hb) } -# Load any glob dependencies -DiscoursePluginRegistry.asset_globs.each do |g| - root, extension = *g - Dir.glob("#{root}/**/*") do |f| - if File.directory?(f) - depend_on(f) - elsif f.to_s.end_with?(".#{extension}") - require_asset(f) - end +DiscoursePluginRegistry.each_globbed_asset do |f, ext| + if File.directory?(f) + depend_on(f) + elsif f.to_s.end_with?(".#{ext}") + require_asset(f) end end diff --git a/lib/discourse_plugin_registry.rb b/lib/discourse_plugin_registry.rb index 8875807f5ad..f3003c4e333 100644 --- a/lib/discourse_plugin_registry.rb +++ b/lib/discourse_plugin_registry.rb @@ -77,8 +77,22 @@ class DiscoursePluginRegistry Archetype.register(name, options) end - def self.register_glob(root, extension) - self.asset_globs << [root, extension] + def self.register_glob(root, extension, options=nil) + self.asset_globs << [root, extension, options || {}] + end + + def self.each_globbed_asset(each_options=nil) + each_options ||= {} + + self.asset_globs.each do |g| + root, ext, options = *g + + next if options[:admin] && !each_options[:admin] + + Dir.glob("#{root}/**/*") do |f| + yield f, ext + end + end end def self.register_asset(asset, opts=nil) diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb index b0f7c37db10..caa406ec243 100644 --- a/lib/plugin/instance.rb +++ b/lib/plugin/instance.rb @@ -223,6 +223,10 @@ class Plugin::Instance root_path = "#{File.dirname(@path)}/assets/javascripts" DiscoursePluginRegistry.register_glob(root_path, 'js.es6') DiscoursePluginRegistry.register_glob(root_path, 'hbs') + + admin_path = "#{File.dirname(@path)}/admin/assets/javascripts" + DiscoursePluginRegistry.register_glob(admin_path, 'js.es6', admin: true) + DiscoursePluginRegistry.register_glob(admin_path, 'hbs', admin: true) end self.instance_eval File.read(path), path @@ -241,6 +245,7 @@ class Plugin::Instance # Automatically include assets Rails.configuration.assets.paths << auto_generated_path Rails.configuration.assets.paths << File.dirname(path) + "/assets" + Rails.configuration.assets.paths << File.dirname(path) + "/admin/assets" # Automatically include rake tasks Rake.add_rakelib(File.dirname(path) + "/lib/tasks")