Module: Metanorma::Html::Concerns::MetadataExtraction

Included in:
BaseRenderer
Defined in:
lib/metanorma/html/concerns/metadata_extraction.rb

Overview

Document metadata extraction from bibdata, mixed into BaseRenderer: page language, HTML title, and the primary document identifier used in the header.

Instance Method Summary collapse

Instance Method Details

#extract_display_title(bibdata) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/metanorma/html/concerns/metadata_extraction.rb', line 27

def extract_display_title(bibdata)
  return nil unless bibdata

  title = bibdata.title_for("en") if bibdata.is_a?(Metanorma::Document::Components::BibData::BibData)
  return title.to_s if title && !title.to_s.empty?

  titles = safe_attr(bibdata, :title)
  return nil unless titles && !titles.is_a?(String) && !titles.empty?

  en = titles.find { |t| safe_attr(t, :language) == "en" }
  found = en || titles.first
  extract_text_value(found).to_s
end

#extract_primary_doc_idObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/metanorma/html/concerns/metadata_extraction.rb', line 41

def extract_primary_doc_id
  bibdata = @document.bibdata
  return nil unless bibdata

  identifiers = bibdata.doc_identifier
  return nil unless identifiers && !identifiers.empty?

  first_id = identifiers.first
  text = if first_id.is_a?(String)
           first_id
         elsif first_id.is_a?(Lutaml::Model::Serializable)
           Array(first_id.value).join
         else
           first_id.to_s
         end
  text.strip.empty? ? nil : text.strip
end

#html_titleObject



23
24
25
# File 'lib/metanorma/html/concerns/metadata_extraction.rb', line 23

def html_title
  extract_display_title(@document.bibdata) || "Document"
end

#languageObject



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/metanorma/html/concerns/metadata_extraction.rb', line 10

def language
  bibdata = @document.bibdata
  return "en" unless bibdata

  langs = bibdata.language
  if langs && !langs.empty?
    lang = langs.find { |l| l.current == "true" } || langs.first
    lang.value || lang.to_s
  else
    "en"
  end
end