mirror of
https://github.com/discourse/discourse.git
synced 2025-05-23 23:21:11 +08:00
FEATURE: Plugin support for transpiling regular .js
files (#9398)
This adds support for a new piece of metadata to your plugin.rb files. If you add: ``` transpile_js: true ``` Then Discourse will support transpilation of assets in your `assets/javascripts` directory. Previously they had to be named `.js.es6` but now regular `.js` will work. Note this is opt-in because some plugins currently have `.js` files in app/assets that are not meant to be transpiled. Going forward all plugins should migrate to this setting as they are comfortable able to do so.
This commit is contained in:
@ -66,6 +66,13 @@ class Plugin::Instance
|
||||
}
|
||||
end
|
||||
|
||||
# If plugins provide `transpile_js: true` in their metadata we will
|
||||
# transpile regular JS files in the assets folders. Going forward,
|
||||
# all plugins should do this.
|
||||
def transpile_js
|
||||
metadata.try(:transpile_js) == "true"
|
||||
end
|
||||
|
||||
def seed_data
|
||||
@seed_data ||= HashWithIndifferentAccess.new({})
|
||||
end
|
||||
@ -511,16 +518,22 @@ class Plugin::Instance
|
||||
def activate!
|
||||
|
||||
if @path
|
||||
root_dir_name = File.dirname(@path)
|
||||
|
||||
# Automatically include all ES6 JS and hbs files
|
||||
root_path = "#{File.dirname(@path)}/assets/javascripts"
|
||||
root_path = "#{root_dir_name}/assets/javascripts"
|
||||
DiscoursePluginRegistry.register_glob(root_path, 'js.es6')
|
||||
DiscoursePluginRegistry.register_glob(root_path, 'hbs')
|
||||
DiscoursePluginRegistry.register_glob(root_path, 'hbr')
|
||||
|
||||
admin_path = "#{File.dirname(@path)}/admin/assets/javascripts"
|
||||
admin_path = "#{root_dir_name}/admin/assets/javascripts"
|
||||
DiscoursePluginRegistry.register_glob(admin_path, 'js.es6', admin: true)
|
||||
DiscoursePluginRegistry.register_glob(admin_path, 'hbs', admin: true)
|
||||
DiscoursePluginRegistry.register_glob(admin_path, 'hbr', admin: true)
|
||||
|
||||
if transpile_js
|
||||
DiscourseJsProcessor.plugin_transpile_paths << root_path.sub(Rails.root.to_s, '').sub(/^\/*/, '')
|
||||
end
|
||||
end
|
||||
|
||||
self.instance_eval File.read(path), path
|
||||
@ -663,9 +676,12 @@ class Plugin::Instance
|
||||
root_path = "#{File.dirname(@path)}/assets/javascripts"
|
||||
|
||||
Dir.glob("#{root_path}/**/*") do |f|
|
||||
f_str = f.to_s
|
||||
if File.directory?(f)
|
||||
yield [f, true]
|
||||
elsif f.to_s.ends_with?(".js.es6") || f.to_s.ends_with?(".hbs") || f.to_s.ends_with?(".hbr")
|
||||
elsif f_str.ends_with?(".js.es6") || f_str.ends_with?(".hbs") || f_str.ends_with?(".hbr")
|
||||
yield [f, false]
|
||||
elsif transpile_js && f_str.ends_with?(".js")
|
||||
yield [f, false]
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user