forked from discourse/discourse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhighlight_js.rb
52 lines (41 loc) · 1.3 KB
/
highlight_js.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# frozen_string_literal: true
module HighlightJs
HIGHLIGHTJS_DIR ||= "#{Rails.root}/node_modules/@highlightjs/cdn-assets/"
VERSION ||= 1 # bump to invalidate caches following core changes
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("|")) + "|#{VERSION}|#{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