resources/asciidoctor/lib/docbook_compat/convert_admonition.rb (52 lines of code) (raw):

# frozen_string_literal: true module DocbookCompat ## # Methods to convert admonitions. module ConvertAdmonition def convert_admonition(node) [ %(<div class="#{node.attr 'name'} admon">), %(<div class="icon"></div>), %(<div class="admon_content">), node.converter.convert(node, 'admonition_title_id'), node.blocks.empty? ? "<p>#{node.content}</p>" : node.content, '</div>', '</div>', ].compact.join "\n" end def convert_admonition_title_id(node) return node.id ? %(<a id="#{node.id}"></a>) : nil unless node.title [ '<p class="admon_title">', node.title, node.id ? %(<a id="#{node.id}"></a>) : nil, '</p>', ].compact.join end def convert_inline_admonition(node) return '' if skip_inline_admonition node convert_inline_admonition_for_real node end ## # If the parent is a section and it doesn't yet have an id then we're # being invoked during the parse phase to generate an id for that section. # We don't want to include the admonition in the id so we convert as # empty string. ClearCachedTitles will make sure we get reconverted # when we're rendered. def skip_inline_admonition(node) return false unless (parent = node.parent) return false if parent.id case parent.context when :section # the first level 0 heading doesn't ever auto-generate an id so we # need to render the docs. parent.level != 0 || parent.index != 0 when :floating_title true else false end end def convert_inline_admonition_for_real(node) title_classes = "Admonishment-#{node.attr 'title_type'} #{node.attr 'title_class'}" [ %(<span class="Admonishment Admonishment--#{node.type}">), %([<span class="#{title_classes}">#{node.attr 'title'}</span>]), '<span class="Admonishment-detail">', node.text, '</span>', '</span>', ].join "\n" end end end