mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 08:43:25 +08:00
5783f231f8
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.
50 lines
1.2 KiB
Ruby
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
|