discourse/app/helpers/splash_screen_helper.rb
David Taylor 0f8e4d7acc
DEV: Compile splash screen JS with ember-cli before inlining (#18150)
This lets us use all our normal JS tooling like prettier, esline and babel on the splash screen JS. At runtime the JS file is read and inlined into the HTML. This commit also switches us to use a CSP hash rather than a nonce for the splash screen.
2022-09-01 09:58:48 +01:00

39 lines
868 B
Ruby

# frozen_string_literal: true
module SplashScreenHelper
def self.inline_splash_screen_script
<<~HTML.html_safe
<script>#{raw_js}</script>
HTML
end
def self.fingerprint
if Rails.env.development?
calculate_fingerprint
else
@fingerprint ||= calculate_fingerprint
end
end
private
def self.load_js
File.read("#{Rails.root}/app/assets/javascripts/discourse/dist/assets/splash-screen.js").sub("//# sourceMappingURL=splash-screen.map\n", "")
rescue Errno::ENOENT
Rails.logger.error("Unable to load splash screen JS") if Rails.env.production?
"console.log('Unable to load splash screen JS')"
end
def self.raw_js
if Rails.env.development?
load_js
else
@loaded_js ||= load_js
end
end
def self.calculate_fingerprint
"sha256-#{Digest::SHA256.base64digest(raw_js)}"
end
end