From 45f657336ecfaf7313917541d815f7945e72cda5 Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Tue, 10 Apr 2018 08:37:16 +0200 Subject: [PATCH] FEATURE: adds support for loading existing core asset in pretty text --- lib/discourse_plugin_registry.rb | 15 +++++++++++++++ lib/plugin/instance.rb | 8 +++++++- lib/pretty_text.rb | 4 ++++ spec/components/discourse_plugin_registry_spec.rb | 7 +++++++ spec/components/plugin/instance_spec.rb | 9 +++++++++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/discourse_plugin_registry.rb b/lib/discourse_plugin_registry.rb index e46cf891fd8..4ec176b8d09 100644 --- a/lib/discourse_plugin_registry.rb +++ b/lib/discourse_plugin_registry.rb @@ -82,6 +82,9 @@ class DiscoursePluginRegistry @vendored_pretty_text ||= Set.new end + def vendored_core_pretty_text + @vendored_core_pretty_text ||= Set.new + end end def register_js(filename, options = {}) @@ -136,6 +139,8 @@ class DiscoursePluginRegistry self.admin_javascripts << asset elsif opts == :vendored_pretty_text self.vendored_pretty_text << asset + elsif opts == :vendored_core_pretty_text + self.vendored_core_pretty_text << asset else self.javascripts << asset end @@ -180,6 +185,15 @@ class DiscoursePluginRegistry result.uniq end + VENDORED_CORE_PRETTY_TEXT_MAP = { + "moment.js" => "lib/javascripts/moment.js" + } + def self.core_asset_for_name(name) + asset = VENDORED_CORE_PRETTY_TEXT_MAP[name] + raise KeyError, "Asset #{name} not found in #{VENDORED_CORE_PRETTY_TEXT_MAP}" unless asset + asset + end + def locales self.class.locales end @@ -235,6 +249,7 @@ class DiscoursePluginRegistry asset_globs.clear html_builders.clear vendored_pretty_text.clear + vendored_core_pretty_text.clear seed_path_builders.clear locales.clear end diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb index 91953a10747..c2d41e2c3fa 100644 --- a/lib/plugin/instance.rb +++ b/lib/plugin/instance.rb @@ -338,7 +338,12 @@ class Plugin::Instance end def register_asset(file, opts = nil) - full_path = File.dirname(path) << "/assets/" << file + if opts && opts == :vendored_core_pretty_text + full_path = DiscoursePluginRegistry.core_asset_for_name(file) + else + full_path = File.dirname(path) << "/assets/" << file + end + assets << [full_path, opts] end @@ -506,6 +511,7 @@ JS def javascript_includes assets.map do |asset, opts| + next if opts == :vendored_core_pretty_text next if opts == :admin next unless asset =~ DiscoursePluginRegistry::JS_REGEX asset diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index 4e2fc4e81e3..082835eb919 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -101,6 +101,10 @@ module PrettyText end end + DiscoursePluginRegistry.vendored_core_pretty_text.each do |vpt| + ctx.eval(File.read(vpt)) + end + DiscoursePluginRegistry.vendored_pretty_text.each do |vpt| ctx.eval(File.read(vpt)) end diff --git a/spec/components/discourse_plugin_registry_spec.rb b/spec/components/discourse_plugin_registry_spec.rb index b6b00018e65..82ecbbe680b 100644 --- a/spec/components/discourse_plugin_registry_spec.rb +++ b/spec/components/discourse_plugin_registry_spec.rb @@ -168,6 +168,13 @@ describe DiscoursePluginRegistry do expect(registry.admin_javascripts.count).to eq(1) expect(registry.javascripts.count).to eq(0) end + + it "registers vendored_core_pretty_text properly" do + registry.register_asset("my_lib.js", :vendored_core_pretty_text) + + expect(registry.vendored_core_pretty_text.count).to eq(1) + expect(registry.javascripts.count).to eq(0) + end end context '#register_seed_data' do diff --git a/spec/components/plugin/instance_spec.rb b/spec/components/plugin/instance_spec.rb index 82e9cb3a2bd..de6641218ac 100644 --- a/spec/components/plugin/instance_spec.rb +++ b/spec/components/plugin/instance_spec.rb @@ -93,6 +93,15 @@ describe Plugin::Instance do expect(DiscoursePluginRegistry.mobile_stylesheets.count).to eq(0) expect(DiscoursePluginRegistry.stylesheets.count).to eq(2) end + + it "remaps vendored_core_pretty_text asset" do + plugin = Plugin::Instance.new nil, "/tmp/test.rb" + plugin.register_asset("moment.js", :vendored_core_pretty_text) + + plugin.send :register_assets! + + expect(DiscoursePluginRegistry.vendored_core_pretty_text.first).to eq("lib/javascripts/moment.js") + end end context "register service worker" do