mirror of
https://github.com/discourse/discourse.git
synced 2025-03-08 04:09:53 +00:00
FIX: theme JS should only run when needed global objects exist (#6098)
This commit is contained in:
parent
0c159f17b7
commit
281538ae61
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user