Class: Markawesome::PopoverTransformer

Inherits:
BaseTransformer show all
Defined in:
lib/markawesome/transformers/popover_transformer.rb

Overview

Transforms popover syntax into wa-popover elements with trigger buttons Primary syntax: &&&paramsntrigger textn>>>ncontentn&&&

Alternative syntax: :::wa-popover paramsntrigger textn>>>ncontentn:

Params: space-separated tokens (order doesn’t matter) Placement: top (default), bottom, left, right Flags: without-arrow Distance: distance:N (e.g., distance:10)

Constant Summary collapse

POPOVER_ATTRIBUTES =
{
  placement: %w[top bottom left right],
  without_arrow: %w[without-arrow],
  trigger_style: %w[link]
}.freeze

Class Method Summary collapse

Class Method Details

.transform(content) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/markawesome/transformers/popover_transformer.rb', line 23

def self.transform(content)
  primary_regex = /^&&&([^\n]*)$\n(.*?)\n^>>>$\n(.*?)\n^&&&$/m
  alternative_regex = /^:::wa-popover([^\n]*)$\n(.*?)\n^>>>$\n(.*?)\n^:::$/m

  transform_proc = proc do |params_string, trigger_text, popover_content|
    trigger_text = trigger_text.strip
    popover_content = popover_content.strip

    placement, without_arrow, distance, link_style = parse_parameters(params_string)

    popover_id = generate_popover_id(trigger_text, popover_content)

    content_html = markdown_to_html(popover_content)

    build_popover_html(popover_id, trigger_text, content_html,
                       { placement: placement, without_arrow: without_arrow,
                         distance: distance, link_style: link_style })
  end

  patterns = dual_syntax_patterns(primary_regex, alternative_regex, transform_proc)
  apply_multiple_patterns(content, patterns)
end