Module: Asciidoctor::Html::Tabs
- Defined in:
- lib/asciidoctor/html/tabs.rb
Overview
Helpers for the tabs conversion
Class Method Summary collapse
Class Method Details
.convert_tabs(node) ⇒ Object
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 |
# File 'lib/asciidoctor/html/tabs.rb', line 9 def self.convert_tabs(node) tabs_id = node.attr "tabs-id" nav = [%(<div class="nav nav-tabs" role="tablist">)] panes = [%(<div class="tab-content">)] pane_number = 1 node.items.each do |terms, dd| return %(<p class="text-danger">Definition is required.</p>) unless dd active = pane_number == 1 tab_id = "tab-#{tabs_id}-#{pane_number}" pane_id = "#{tab_id}-pane" terms.each do |dt| class_attr = %( class="nav-link#{" active" if active}") target_attr = %( data-bs-target="##{pane_id}") selected_attr = %( aria-selected="#{active ? "true" : "false"}") other_attrs = %( data-bs-toggle="tab" type="button" role="tab" aria-controls="#{pane_id}") id_attr = %( id="#{tab_id}") nav << %(<button#{id_attr}#{class_attr}#{target_attr}#{other_attrs}#{selected_attr}>#{dt.text}</button>) end class_attr = %( class="tab-pane#{" show active" if active}") id_attr = %( id="#{pane_id}") other_attrs = %( role="tabpanel" aria-labelledby="#{tab_id}" tabindex="0") panes << %(<div#{id_attr}#{class_attr}#{other_attrs}>) panes << %(<p>#{dd.text}</p>) if dd.text? panes << dd.content if dd.blocks? panes << "</div>" pane_number += 1 end nav << "</div> <!-- .nav.nav-tabs -->\n" panes << "</div> <!-- .tab-content -->\n" content = %(<div class="tabs">\n#{nav.join("\n")}#{panes.join("\n")}</div> <!-- .tabs -->\n) Utils.wrap_id_classes_with_title(content, node, node.id, "tabs-wrapper") end |