Class: Markawesome::AccordionTransformer
- Inherits:
-
BaseTransformer
- Object
- BaseTransformer
- Markawesome::AccordionTransformer
- Defined in:
- lib/markawesome/transformers/accordion_transformer.rb
Overview
Transforms accordion syntax into wa-accordion / wa-accordion-item elements Primary syntax:
//////appearance? mode? icon-placement? heading:N?
/// [expanded] [disabled] [icon:name] Label text
item body markdown
///
//////
- Alternative syntax: :::wa-accordion …same items… :
-
Container attributes (bare, order-independent, rightmost-wins):
- appearance: outlined (default), filled, filled-outlined, plain - mode: multiple (default), single, single-collapsible - icon-placement: start, end (default emitted only when given) - heading:N -> heading-level="N" where N is 1-6 or "none"Item tokens (leading flags, then the rest of the line is the label):
- expanded -> expanded; disabled -> disabled - icon:name -> <wa-icon slot="icon" name="name"></wa-icon> as first childwa-accordion is experimental in Web Awesome (added 3.7). expanded/disabled and the mode/appearance/icon-placement attributes are all static-safe.
Constant Summary collapse
- CONTAINER_ATTRIBUTES =
{ appearance: %w[outlined filled filled-outlined plain], mode: %w[multiple single single-collapsible], icon_placement: %w[start end] }.freeze
- ICON_SLOTS =
{ default: 'icon', slots: %w[icon], slot_map: { 'icon' => 'icon' } }.freeze
- ITEM_FLAGS =
%w[expanded disabled].freeze
- PRIMARY_REGEX =
%r{^/{6}([^\n]*)\n((?:/{3} [^\n]+\n.*?\n/{3}\n?)+)/{6}}m- ALTERNATIVE_REGEX =
%r{^:::wa-accordion\s*([^\n]*)\n((?:/{3} [^\n]+\n.*?\n/{3}\n?)+):::}m- ITEM_REGEX =
%r{^/{3} ([^\n]+)\n(.*?)\n/{3}}m
Class Method Summary collapse
Class Method Details
.render_as_markdown(content, _options = {}) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/markawesome/transformers/accordion_transformer.rb', line 64 def self.render_as_markdown(content, = {}) transform_proc = proc do |_params_string, items_block, _third| items_block.scan(ITEM_REGEX).map do |header, body| _flags, label = parse_item_flags_and_label(IconSlotParser.parse(header, ICON_SLOTS)[:remaining]) "### #{label}\n\n#{body.strip}" end.join("\n\n") end patterns = dual_syntax_patterns(PRIMARY_REGEX, ALTERNATIVE_REGEX, transform_proc) apply_multiple_patterns(content, patterns) end |
.transform(content) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/markawesome/transformers/accordion_transformer.rb', line 47 def self.transform(content) transform_proc = proc do |params_string, items_block, _third| attributes = AttributeParser.parse(params_string.to_s.strip, CONTAINER_ATTRIBUTES) heading_level = extract_heading_level(params_string) attr_parts = ["appearance=\"#{normalize_appearance(attributes[:appearance])}\""] attr_parts << "mode=\"#{attributes[:mode]}\"" if attributes[:mode] attr_parts << "icon-placement=\"#{attributes[:icon_placement]}\"" if attributes[:icon_placement] attr_parts << "heading-level=\"#{heading_level}\"" if heading_level "<wa-accordion #{attr_parts.join(' ')}>#{build_items(items_block)}</wa-accordion>" end patterns = dual_syntax_patterns(PRIMARY_REGEX, ALTERNATIVE_REGEX, transform_proc) apply_multiple_patterns(content, patterns) end |