# frozen_string_literal: true # # Adapted from the admonition code on http://nanoc.ws/ class AdmonitionFilter < Nanoc::Filter identifier :admonition BOOTSTRAP_MAPPING = { 'note' => 'note', 'warning' => 'warning', 'flag' => 'flag', 'info' => 'info', 'disclaimer' => 'disclaimer' }.freeze GITLAB_SVGS_MAPPING = { 'note' => 'information-o', 'warning' => 'warning', 'flag' => 'flag', 'info' => 'tanuki', 'disclaimer' => 'review-warning' }.freeze def run(content, params = {}) # `#dup` is necessary because `.fragment` modifies the incoming string. Ew! # See https://github.com/sparklemotion/nokogiri/issues/1077 doc = Nokogiri::HTML.fragment(content.dup) doc.css('p').each do |para| content = para.inner_html match = content.match(%r{\A(?NOTE|WARNING|FLAG|INFO|DISCLAIMER):\s?(?.*)\Z}m) next unless match new_content = generate(match[:type].downcase, match[:content]) para.replace(new_content) end doc.to_s end def generate(kind, content) %(
) + %(
) + %(
#{icon(GITLAB_SVGS_MAPPING[kind], 16, 'alert-icon')}
#{content}
) end end