Class: Markawesome::LayoutTransformer

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

Overview

Transforms layout syntax into CSS layout utility containers

Primary syntax: ::::type params?ncontentn::
Alternative syntax: ::::wa-type params?ncontentn::

Supported types: grid, stack, cluster, split, flank, frame

Common attributes (all layouts):

gap:SIZE - wa-gap-{SIZE} class (0, 3xs, 2xs, xs, s, m, l, xl, 2xl, 3xl)
align:VALUE - wa-align-items-{VALUE} class (start, end, center, stretch, baseline)
justify:VALUE - wa-justify-content-{VALUE} class (start, end, center, space-between, space-around, space-evenly)

Grid-specific: min:CSS_VALUE - sets –min-column-size style Split-specific: row, column modifiers Flank-specific: start, end modifiers; size:CSS_VALUE, content:PCT Frame-specific: landscape, portrait, square modifiers; radius:SIZE

Constant Summary collapse

VALID_GAPS =
%w[0 3xs 2xs xs s m l xl 2xl 3xl].freeze
VALID_ALIGNS =
%w[start end center stretch baseline].freeze
VALID_JUSTIFIES =
%w[start end center space-between space-around space-evenly].freeze
VALID_RADII =
%w[s m l pill circle square].freeze
KEYWORD_MODIFIERS =
{
  split: %w[row column],
  flank: %w[start end],
  frame: %w[landscape portrait square]
}.freeze
COMMON_KEY_CLASS_MAP =
{
  'gap' => ->(v) { "wa-gap-#{v}" if VALID_GAPS.include?(v) },
  'align' => ->(v) { "wa-align-items-#{v}" if VALID_ALIGNS.include?(v) },
  'justify' => ->(v) { "wa-justify-content-#{v}" if VALID_JUSTIFIES.include?(v) }
}.freeze

Class Method Summary collapse

Class Method Details

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



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/markawesome/transformers/layout_transformer.rb', line 51

def self.render_as_markdown(content, _options = {})
  primary_regex = /^::::(grid|stack|cluster|split|flank|frame)[ \t]*([^\n]*)\n(.*?)\n::::/m
  alternative_regex = /^::::wa-(grid|stack|cluster|split|flank|frame)[ \t]*([^\n]*)\n(.*?)\n::::/m

  transform_proc = proc do |_type, _params_string, inner_content|
    inner_content.to_s
  end

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

.transform(content) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/markawesome/transformers/layout_transformer.rb', line 38

def self.transform(content)
  primary_regex = /^::::(grid|stack|cluster|split|flank|frame)[ \t]*([^\n]*)\n(.*?)\n::::/m
  alternative_regex = /^::::wa-(grid|stack|cluster|split|flank|frame)[ \t]*([^\n]*)\n(.*?)\n::::/m

  transform_proc = proc do |type, params_string, inner_content|
    classes, styles = build_attributes(type, params_string)
    build_html(classes, styles, inner_content)
  end

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