discourse/lib/highlight_js.rb
David Taylor 5783f231f8
DEV: Introduce DISCOURSE_ASSET_URL_SALT (#24596)
This value is included when generating static asset URLs. Updating the value will allow site operators to invalidate all asset urls to recover from configuration issues which may have been cached by CDNs/browsers.
2023-11-28 11:28:40 +00:00

50 lines
1.2 KiB
Ruby

# frozen_string_literal: true
module HighlightJs
HIGHLIGHTJS_DIR ||= "#{Rails.root}/app/assets/javascripts/node_modules/@highlightjs/cdn-assets/"
def self.languages
langs = Dir.glob(HIGHLIGHTJS_DIR + "languages/*.js").map { |path| File.basename(path)[0..-8] }
langs.sort
end
def self.bundle(langs)
lang_js =
langs.filter_map do |lang|
File.read(HIGHLIGHTJS_DIR + "languages/#{lang}.min.js")
rescue Errno::ENOENT
# no file, don't care
end
<<~JS
export default function registerLanguages(hljs) {
#{lang_js.join("\n")}
}
JS
end
def self.cache
@lang_string_cache ||= {}
end
def self.version(lang_string)
cache_info = cache[RailsMultisite::ConnectionManagement.current_db]
return cache_info[:digest] if cache_info&.[](:lang_string) == lang_string
cache_info = {
lang_string: lang_string,
digest:
Digest::SHA1.hexdigest(bundle(lang_string.split("|")) + "|#{GlobalSetting.asset_url_salt}"),
}
cache[RailsMultisite::ConnectionManagement.current_db] = cache_info
cache_info[:digest]
end
def self.path
"/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
end