discourse/app/helpers/defer_script_helper.rb

27 lines
635 B
Ruby

# frozen_string_literal: true
# Helper to render a no-op inline script tag to work around a safari bug
# which causes `defer` scripts to be run before stylesheets are loaded.
# https://bugs.webkit.org/show_bug.cgi?id=209261
module DeferScriptHelper
def self.safari_workaround_script
<<~HTML.html_safe
<script>#{raw_js}</script>
HTML
end
def self.fingerprint
@fingerprint ||= calculate_fingerprint
end
private
def self.raw_js
"/* Workaround for https://bugs.webkit.org/show_bug.cgi?id=209261 */"
end
def self.calculate_fingerprint
"sha256-#{Digest::SHA256.base64digest(raw_js)}"
end
end