class Kitchen::Directions::BakeIndex::V1

Bake directions for eob index

Public Instance Methods

add_term_to_index(term_element, page_title) click to toggle source
# File lib/kitchen/directions/bake_index/v1.rb, line 153
def add_term_to_index(term_element, page_title)
  type =
    if !term_element.key?('index')
      'term'
    elsif term_element['cxlxt:index'] == 'name'
      'name'
    elsif term_element['cxlxt:index'] == 'foreign'
      'foreign'
    end

  if term_element.key?('reference')
    term_reference = term_element['cmlnle:reference']
    group_by = term_reference[0]
    content = term_reference
  else
    group_by = I18n.transliterate(term_element.text.strip[0])
    content = term_element.text
  end

  group_by = I18n.t(:eob_index_symbols_group) unless group_by.match?(/[[:alpha:]]/)
  term_element['group-by'] = group_by

  # Add it to our index object
  @indexes[type].add_term(
    Term.new(
      text: content,
      id: term_element.id,
      group_by: group_by,
      page_title: page_title.gsub(/\n/, '')
    )
  )
end
bake(book:, types: %w[main], uuid_prefix: '') click to toggle source
# File lib/kitchen/directions/bake_index/v1.rb, line 115
def bake(book:, types: %w[main], uuid_prefix: '')
  @metadata_elements = book.metadata.children_to_keep.copy
  @uuid_prefix = uuid_prefix
  @indexes = types.each.with_object({}) do |type, hash|
    index_name = type == 'main' ? 'term' : type
    hash[index_name] = Index.new
  end

  # Numbering of IDs doesn't depend on term type

  book.pages.terms.each do |term_element|
    page = term_element.ancestor(:page)
    term_element.id = "auto_#{page.id}_term#{term_element.count_in(:book)}"
    page_title = page.title.text
    add_term_to_index(term_element, page_title)
  end

  book.chapters.composite_pages.terms.each do |term_element|
    page = term_element.ancestor(:composite_page)
    chapter = term_element.ancestor(:chapter)
    term_element.id = "auto_composite_page_term#{term_element.count_in(:book)}"
    chapter_number = chapter.count_in(:book)
    page_title = "#{chapter_number} #{page.title.text.strip}".strip
    add_term_to_index(term_element, page_title)
  end

  types.each do |type|
    @container_class = "os-index#{"-#{type}" unless type == 'main'}-container"
    @uuid_key = "#{uuid_prefix}index#{"-#{type}" unless type == 'main'}"
    @title = I18n.t("index.#{type}")

    index_name = type == 'main' ? 'term' : type
    @index = @indexes[index_name]

    book.first('body').append(child: render(file: 'v1.xhtml.erb'))
  end
end