diff --git a/app/assets/javascripts/preload-application-data.js b/app/assets/javascripts/preload-application-data.js index 58b138f6709..1716847f893 100644 --- a/app/assets/javascripts/preload-application-data.js +++ b/app/assets/javascripts/preload-application-data.js @@ -1,12 +1,42 @@ (function() { + var ps = require("preload-store").default; var preloadedDataElement = document.getElementById("data-preloaded"); if (preloadedDataElement) { - var ps = require("preload-store").default; var preloaded = JSON.parse(preloadedDataElement.dataset.preloaded); Object.keys(preloaded).forEach(function(key) { ps.store(key, JSON.parse(preloaded[key])); }); } + + var setupData = document.getElementById("data-discourse-setup").dataset; + + Discourse.CDN = setupData.cdn; + Discourse.BaseUrl = setupData.baseUrl; + Discourse.BaseUri = setupData.baseUri; + Discourse.Environment = setupData.environment; + Discourse.SiteSettings = ps.get("siteSettings"); + Discourse.ThemeSettings = ps.get("themeSettings"); + Discourse.LetterAvatarVersion = setupData.letterAvatarVersion; + Discourse.MarkdownItURL = setupData.markdownItUrl; + Discourse.ServiceWorkerURL = setupData.serviceWorkerUrl; + I18n.defaultLocale = setupData.defaultLocale; + Discourse.start(); + Discourse.set("assetVersion", setupData.assetVersion); + Discourse.Session.currentProp( + "disableCustomCSS", + setupData.disableCustomCss === "true" + ); + + if (setupData.safeMode) { + Discourse.Session.currentProp("safe_mode", setupData.safeMode); + } + + Discourse.HighlightJSPath = setupData.highlightJsPath; + + if (setupData.S3BaseUrl) { + Discourse.S3CDN = setupData.s3Cdn; + Discourse.S3BaseUrl = setupData.s3BaseUrl; + } })(); diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 071e6bf2509..5a6998c6e3f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -307,13 +307,13 @@ module ApplicationHelper end def normalized_safe_mode - safe_mode = nil - (safe_mode ||= []) << ApplicationController::NO_CUSTOM if customization_disabled? - (safe_mode ||= []) << ApplicationController::NO_PLUGINS if !allow_plugins? - (safe_mode ||= []) << ApplicationController::ONLY_OFFICIAL if !allow_third_party_plugins? - if safe_mode - safe_mode.join(",").html_safe - end + safe_mode = [] + + safe_mode << ApplicationController::NO_CUSTOM if customization_disabled? + safe_mode << ApplicationController::NO_PLUGINS if !allow_plugins? + safe_mode << ApplicationController::ONLY_OFFICIAL if !allow_third_party_plugins? + + safe_mode.join(",") end def loading_admin? @@ -406,4 +406,34 @@ module ApplicationHelper return '{}' if @preloaded.blank? @preloaded.transform_values { |value| escape_unicode(value) }.to_json end + + def client_side_setup_data + service_worker_url = Rails.env.development? ? 'service-worker.js' : Rails.application.assets_manifest.assets['service-worker.js'] + current_hostname_without_port = RailsMultisite::ConnectionManagement.current_hostname.sub(/:[\d]*$/, '') + + setup_data = { + cdn: Rails.configuration.action_controller.asset_host, + base_url: current_hostname_without_port, + base_uri: Discourse::base_uri, + environment: Rails.env, + letter_avatar_version: LetterAvatar.version, + markdown_it_url: asset_url('markdown-it-bundle.js'), + service_worker_url: service_worker_url, + default_locale: SiteSetting.default_locale, + asset_version: Discourse.assets_digest, + disable_custom_css: loading_admin?, + highlight_js_path: HighlightJs.path, + } + + if guardian.can_enable_safe_mode? && params["safe_mode"] + setup_data[:safe_mode] = normalized_safe_mode + end + + if SiteSetting.Upload.enable_s3_uploads + setup_data[:s3_cdn] = SiteSetting.Upload.s3_cdn_url.presence + setup_data[:s3_base_url] = SiteSetting.Upload.s3_base_url + end + + setup_data + end end diff --git a/app/views/common/_discourse_javascript.html.erb b/app/views/common/_discourse_javascript.html.erb index 8a4f64b1091..98f63940d14 100644 --- a/app/views/common/_discourse_javascript.html.erb +++ b/app/views/common/_discourse_javascript.html.erb @@ -33,34 +33,6 @@ } }); <%- end %> - - (function() { - var ps = require('preload-store').default; - - Discourse.CDN = '<%= Rails.configuration.action_controller.asset_host %>'; - Discourse.BaseUrl = '<%= RailsMultisite::ConnectionManagement.current_hostname %>'.replace(/:[\d]*$/,""); - Discourse.BaseUri = '<%= Discourse::base_uri %>'; - Discourse.Environment = '<%= Rails.env %>'; - Discourse.SiteSettings = ps.get('siteSettings'); - Discourse.ThemeSettings = ps.get('themeSettings'); - Discourse.LetterAvatarVersion = '<%= LetterAvatar.version %>'; - Discourse.MarkdownItURL = '<%= asset_url('markdown-it-bundle.js') %>'; - Discourse.ServiceWorkerURL = Discourse.Environment != "development" ? '<%= Rails.application.assets_manifest.assets['service-worker.js'] %>' : 'service-worker.js'; - I18n.defaultLocale = '<%= SiteSetting.default_locale %>'; - Discourse.start(); - Discourse.set('assetVersion','<%= Discourse.assets_digest %>'); - Discourse.Session.currentProp("disableCustomCSS", <%= loading_admin? %>); - <%- if guardian.can_enable_safe_mode? && params["safe_mode"] %> - Discourse.Session.currentProp("safe_mode", <%= normalized_safe_mode.inspect.html_safe %>); - <%- end %> - Discourse.HighlightJSPath = <%= HighlightJs.path.inspect.html_safe %>; - <%- if SiteSetting.Upload.enable_s3_uploads %> - <%- if SiteSetting.Upload.s3_cdn_url.present? %> - Discourse.S3CDN = '<%= SiteSetting.Upload.s3_cdn_url %>'; - <%- end %> - Discourse.S3BaseUrl = '<%= SiteSetting.Upload.s3_base_url %>'; - <%- end %> - })(); <%= preload_script 'browser-update' %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 14a3f6d90b6..140c1b9ac97 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -17,11 +17,6 @@ <%- end %> - - <%= preload_script "locales/#{I18n.locale}" %> <%= preload_script "ember_jquery" %> <%= preload_script "preload-store" %> @@ -58,6 +53,8 @@ <%= yield :head %> <%= build_plugin_html 'server:before-head-close' %> + + <%= tag.meta id: 'data-discourse-setup', data: client_side_setup_data %>