Class: Markawesome::ButtonTransformer
- Inherits:
-
BaseTransformer
- Object
- BaseTransformer
- Markawesome::ButtonTransformer
- Defined in:
- lib/markawesome/transformers/button_transformer.rb
Overview
Transforms button syntax into wa-button elements Primary syntax: %%%attributes?ncontentn%%%
- Alternative syntax: :::wa-button attributes?ncontentn:
-
Attributes:
-
variant: brand, success, neutral, warning, danger
-
appearance: accent, filled, outlined, filled-outlined, plain
-
size: small, medium, large
-
pill: pill (rounded edges)
-
caret: caret (dropdown indicator)
-
loading: loading (loading state)
-
disabled: disabled (disabled state)
Link buttons: %%%brandn(url)n%%% Regular buttons: %%%brand large pillnTextn%%%
-
Constant Summary collapse
- BUTTON_ATTRIBUTES =
Define the schema for button attributes
{ variant: %w[brand success neutral warning danger], appearance: %w[accent filled outlined filled-outlined plain], size: %w[small medium large], pill: %w[pill], caret: %w[caret], loading: %w[loading], disabled: %w[disabled] }.freeze
- ICON_SLOTS =
{ default: 'start', slots: %w[start end] }.freeze
Class Method Summary collapse
Class Method Details
.render_as_markdown(content, _options = {}) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/markawesome/transformers/button_transformer.rb', line 58 def self.render_as_markdown(content, = {}) primary_regex = /^%%%([^\n]*)\n(.*?)\n%%%/m alternative_regex = /^:::wa-button\s*([^\n]*)\n(.*?)\n:::/m transform_proc = proc do |_params_string, | text = .to_s.strip if (link_match = text.match(/^\[([^\]]+)\]\(([^)]+)\)$/)) "[#{link_match[1]}](#{link_match[2]})" else text.empty? ? '' : "**#{text}**" end end patterns = dual_syntax_patterns(primary_regex, alternative_regex, transform_proc) apply_multiple_patterns(content, patterns) end |
.transform(content) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/markawesome/transformers/button_transformer.rb', line 37 def self.transform(content) # Define both regex patterns - capture all space-separated parameters primary_regex = /^%%%([^\n]*)\n(.*?)\n%%%/m alternative_regex = /^:::wa-button\s*([^\n]*)\n(.*?)\n:::/m # Define shared transformation logic transform_proc = proc do |params_string, | = .strip # Parse icon tokens first, then pass remaining to AttributeParser icon_result = IconSlotParser.parse(params_string, ICON_SLOTS) attributes = AttributeParser.parse(icon_result[:remaining], BUTTON_ATTRIBUTES) (, attributes, icon_result[:icons]) end # Apply both patterns patterns = dual_syntax_patterns(primary_regex, alternative_regex, transform_proc) apply_multiple_patterns(content, patterns) end |