Module: HighlightJs

Defined in:
lib/highlight_js.rb

Constant Summary collapse

HIGHLIGHTJS_DIR =
"#{Rails.root}/app/assets/javascripts/discourse/node_modules/@highlightjs/cdn-assets/"
VERSION =

bump to invalidate caches following core changes

1

Class Method Summary collapse

Class Method Details

.bundle(langs) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/highlight_js.rb', line 14

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

.cacheObject



29
30
31
# File 'lib/highlight_js.rb', line 29

def self.cache
  @lang_string_cache ||= {}
end

.languagesObject



8
9
10
11
12
# File 'lib/highlight_js.rb', line 8

def self.languages
  langs = Dir.glob(HIGHLIGHTJS_DIR + "languages/*.js").map { |path| File.basename(path)[0..-8] }

  langs.sort
end

.pathObject



50
51
52
# File 'lib/highlight_js.rb', line 50

def self.path
  "/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end

.version(lang_string) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/highlight_js.rb', line 33

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