From 281538ae61d6b147efecac66ff571cb372add40b Mon Sep 17 00:00:00 2001 From: OsamaSayegh <asooomaasoooma90@gmail.com> Date: Wed, 18 Jul 2018 08:13:47 +0300 Subject: [PATCH] FIX: theme JS should only run when needed global objects exist (#6098) --- app/models/theme_field.rb | 6 ++++++ spec/models/theme_spec.rb | 20 ++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/models/theme_field.rb b/app/models/theme_field.rb index da1ab9d2a29..92d7fd2d172 100644 --- a/app/models/theme_field.rb +++ b/app/models/theme_field.rb @@ -44,10 +44,12 @@ class ThemeField < ActiveRecord::Base def transpile(es6_source, version) template = Tilt::ES6ModuleTranspilerTemplate.new {} wrapped = <<PLUGIN_API_JS +if ('Discourse' in window) { Discourse._registerPluginCode('#{version}', api => { #{settings(es6_source)} #{es6_source} }); +} PLUGIN_API_JS template.babel_transpile(wrapped) @@ -73,7 +75,9 @@ PLUGIN_API_JS node.replace <<COMPILED <script> (function() { + if ('Discourse' in window) { Discourse.RAW_TEMPLATES[#{name.sub(/\.raw$/, '').inspect}] = #{template}; + } })(); </script> COMPILED @@ -82,7 +86,9 @@ COMPILED node.replace <<COMPILED <script> (function() { + if ('Em' in window) { Ember.TEMPLATES[#{name.inspect}] = #{template}; + } })(); </script> COMPILED diff --git a/spec/models/theme_spec.rb b/spec/models/theme_spec.rb index 5802de76120..d12e0fd10a0 100644 --- a/spec/models/theme_spec.rb +++ b/spec/models/theme_spec.rb @@ -233,10 +233,12 @@ HTML theme.save! transpiled = <<~HTML - <script>Discourse._registerPluginCode('1.0', function (api) { - var settings = { "name": "bob" }; - alert(settings.name);var a = function a() {}; - });</script> + <script>if ('Discourse' in window) { + Discourse._registerPluginCode('1.0', function (api) { + var settings = { "name": "bob" }; + alert(settings.name);var a = function a() {}; + }); + }</script> HTML expect(Theme.lookup_field(theme.id, :desktop, :after_header)).to eq(transpiled.strip) @@ -245,10 +247,12 @@ HTML setting.value = 'bill' transpiled = <<~HTML - <script>Discourse._registerPluginCode('1.0', function (api) { - var settings = { "name": "bill" }; - alert(settings.name);var a = function a() {}; - });</script> + <script>if ('Discourse' in window) { + Discourse._registerPluginCode('1.0', function (api) { + var settings = { "name": "bill" }; + alert(settings.name);var a = function a() {}; + }); + }</script> HTML expect(Theme.lookup_field(theme.id, :desktop, :after_header)).to eq(transpiled.strip)