Sha256: cb26983b23ade4c97ea25523508b294b85be3260abbbfd45d97dc4aaa7f454e2

Contents?: true

Size: 1.44 KB

Versions: 11

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module Kitchen::Directions::BakeFootnotes
  class V1

    def bake(book:, number_format: :arabic)
      # Footnotes are numbered either within their top-level pages (preface,
      # appendices, etc) or within chapters. Tackle each case separately

      book.body.element_children.only(Kitchen::PageElement,
                                      Kitchen::CompositePageElement,
                                      Kitchen::CompositeChapterElement).each do |page|
        bake_footnotes_within(page, number_format: number_format)
      end

      book.chapters.each do |chapter|
        bake_footnotes_within(chapter, number_format: number_format)
      end
    end

    def bake_footnotes_within(container, number_format:)
      footnote_count = 0
      aside_id_to_footnote_number = {}

      container.search("a[role='doc-noteref']").each do |anchor|
        footnote_count += 1
        footnote_number = footnote_count.to_format(number_format)
        anchor.replace_children(with: footnote_number)
        aside_id = anchor[:href][1..-1]
        aside_id_to_footnote_number[aside_id] = footnote_number
        anchor.parent.add_class('has-noteref') if anchor.parent.name == 'p'
      end

      container.search('aside').each do |aside|
        footnote_number = aside_id_to_footnote_number[aside.id]
        aside.prepend(child: "<div data-type='footnote-number'>#{footnote_number}</div>")
      end

      footnote_count
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
openstax_kitchen-11.1.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-11.0.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-10.0.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-9.2.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-9.1.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-9.0.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-8.0.1 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-8.0.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-7.0.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-6.1.0 lib/kitchen/directions/bake_footnotes/v1.rb
openstax_kitchen-6.0.0 lib/kitchen/directions/bake_footnotes/v1.rb