Add support for plugins to declare ES6 in the admin bundle

This commit is contained in:
Robin Ward 2015-08-17 15:03:55 -04:00
parent 2d4729782e
commit 7eb32be4de
4 changed files with 34 additions and 11 deletions

View file

@ -2,4 +2,12 @@
require_asset("main_include_admin.js") require_asset("main_include_admin.js")
DiscoursePluginRegistry.admin_javascripts.each { |js| require_asset(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
%> %>

View file

@ -6,15 +6,11 @@ require_asset ("./main_include.js")
DiscoursePluginRegistry.javascripts.each { |js| require_asset(js) } DiscoursePluginRegistry.javascripts.each { |js| require_asset(js) }
DiscoursePluginRegistry.handlebars.each { |hb| require_asset(hb) } DiscoursePluginRegistry.handlebars.each { |hb| require_asset(hb) }
# Load any glob dependencies DiscoursePluginRegistry.each_globbed_asset do |f, ext|
DiscoursePluginRegistry.asset_globs.each do |g| if File.directory?(f)
root, extension = *g depend_on(f)
Dir.glob("#{root}/**/*") do |f| elsif f.to_s.end_with?(".#{ext}")
if File.directory?(f) require_asset(f)
depend_on(f)
elsif f.to_s.end_with?(".#{extension}")
require_asset(f)
end
end end
end end

View file

@ -77,8 +77,22 @@ class DiscoursePluginRegistry
Archetype.register(name, options) Archetype.register(name, options)
end end
def self.register_glob(root, extension) def self.register_glob(root, extension, options=nil)
self.asset_globs << [root, extension] 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 end
def self.register_asset(asset, opts=nil) def self.register_asset(asset, opts=nil)

View file

@ -223,6 +223,10 @@ class Plugin::Instance
root_path = "#{File.dirname(@path)}/assets/javascripts" root_path = "#{File.dirname(@path)}/assets/javascripts"
DiscoursePluginRegistry.register_glob(root_path, 'js.es6') DiscoursePluginRegistry.register_glob(root_path, 'js.es6')
DiscoursePluginRegistry.register_glob(root_path, 'hbs') 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 end
self.instance_eval File.read(path), path self.instance_eval File.read(path), path
@ -241,6 +245,7 @@ class Plugin::Instance
# Automatically include assets # Automatically include assets
Rails.configuration.assets.paths << auto_generated_path Rails.configuration.assets.paths << auto_generated_path
Rails.configuration.assets.paths << File.dirname(path) + "/assets" Rails.configuration.assets.paths << File.dirname(path) + "/assets"
Rails.configuration.assets.paths << File.dirname(path) + "/admin/assets"
# Automatically include rake tasks # Automatically include rake tasks
Rake.add_rakelib(File.dirname(path) + "/lib/tasks") Rake.add_rakelib(File.dirname(path) + "/lib/tasks")