Class: Markawesome::CarouselTransformer

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

Overview

Transforms carousel syntax into wa-carousel elements Primary syntax: ~~~~~~paramsn~~~ slide1ncontentn~~~n~~~ slide2ncontentn~~~n~~~~~~

Alternative syntax: :::wa-carousel paramsn~~~ slide1ncontentn~~~n~~~ slide2ncontentn~~~n:

Params can include: numbers (slides-per-page, slides-per-move), keywords (loop, navigation, pagination, autoplay, mouse-dragging, vertical), key-value pairs (autoplay-interval:value), and CSS properties (scroll-hint:value, aspect-ratio:value, slide-gap:value)

Constant Summary collapse

COMPONENT_ATTRIBUTES =
{
  loop: %w[loop],
  navigation: %w[navigation],
  pagination: %w[pagination],
  autoplay: %w[autoplay],
  'mouse-dragging': %w[mouse-dragging],
  vertical: %w[vertical]
}.freeze

Class Method Summary collapse

Class Method Details

.render_as_markdown(content, _options = {}) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/markawesome/transformers/carousel_transformer.rb', line 47

def self.render_as_markdown(content, _options = {})
  primary_regex = /^~{6}([^\n]*)\n((?:~~~\n(?:.*?\n)?~~~\n?)+)~{6}/m
  alternative_regex = /^:::wa-carousel\s*([^\n]*)\n((?:~~~\n(?:.*?\n)?~~~\n?)+):::/m

  transform_proc = proc do |_params, slides_block, _third|
    slides = extract_slides(slides_block)
    slides.reject(&:empty?).join("\n\n")
  end

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

.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
45
# File 'lib/markawesome/transformers/carousel_transformer.rb', line 23

def self.transform(content)
  # Define both regex patterns
  # Match: ~~~~~~params (optional)
  #        ~~~
  #        content (can be empty)
  #        ~~~
  #        (repeat slides)
  #        ~~~~~~
  primary_regex = /^~{6}([^\n]*)\n((?:~~~\n(?:.*?\n)?~~~\n?)+)~{6}/m
  alternative_regex = /^:::wa-carousel\s*([^\n]*)\n((?:~~~\n(?:.*?\n)?~~~\n?)+):::/m

  # Define shared transformation logic
  transform_proc = proc do |params, slides_block, _third_capture|
    parsed_params = parse_params(params)
    slides = extract_slides(slides_block)

    build_carousel_html(slides, parsed_params)
  end

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