Class: Markawesome::CopyButtonTransformer
- Inherits:
-
BaseTransformer
- Object
- BaseTransformer
- Markawesome::CopyButtonTransformer
- Defined in:
- lib/markawesome/transformers/copy_button_transformer.rb
Overview
Transforms copy button syntax into wa-copy-button elements Primary syntax: <<<params?ncontentn<<<
- Alternative syntax: :::wa-copy-button params?ncontentn:
-
Params: space-separated tokens, any order (rightmost-wins for conflicts) Placement: top, right, bottom, left Tooltip mode: tooltip:full|copy|none (when the built-in tooltip appears) Duration: numeric value (feedback-duration in milliseconds) Flags: disabled Labels: copy-label=“text”, success-label=“text”, error-label=“text” From: from=“element-id” (copy from another element)
Usage: <<< This text will be copied to clipboard <<<
<<<disabled top 2000 Disabled copy button with top tooltip and 2s feedback <<<
<<<copy-label=“Click to copy” success-label=“Copied!” Custom labels <<<
:::wa-copy-button right from=“my-element” Copy from element with ID “my-element”
- :
Constant Summary collapse
- COPY_BUTTON_ATTRIBUTES =
{ placement: %w[top right bottom left], disabled: %w[disabled] }.freeze
- TOOLTIP_MODES =
%w[full copy none].freeze
Class Method Summary collapse
Class Method Details
.render_as_markdown(content, _options = {}) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/markawesome/transformers/copy_button_transformer.rb', line 76 def self.render_as_markdown(content, = {}) primary_regex = /^<<<(.*?)\n(.*?)\n<<</m alternative_regex = /^:::wa-copy-button\s*(.*?)\n(.*?)\n:::/m transform_proc = proc do |_params_string, copy_content| copy_content.to_s.strip end patterns = dual_syntax_patterns(primary_regex, alternative_regex, transform_proc) apply_multiple_patterns(content, patterns) end |
.transform(content) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/markawesome/transformers/copy_button_transformer.rb', line 43 def self.transform(content) # Define both regex patterns - capture params as a single string primary_regex = /^<<<(.*?)\n(.*?)\n<<</m alternative_regex = /^:::wa-copy-button\s*(.*?)\n(.*?)\n:::/m # Define shared transformation logic transform_proc = proc do |params_string, copy_content| copy_content = copy_content.strip # Parse space-separated parameters attributes = AttributeParser.parse(params_string, COPY_BUTTON_ATTRIBUTES) # Extract quoted labels and from attribute attributes[:copy_label] = extract_quoted_attribute(params_string, 'copy-label') attributes[:success_label] = extract_quoted_attribute(params_string, 'success-label') attributes[:error_label] = extract_quoted_attribute(params_string, 'error-label') attributes[:from] = extract_quoted_attribute(params_string, 'from') # Extract numeric feedback-duration attributes[:feedback_duration] = ::Regexp.last_match(1) if params_string =~ /\b(\d+)\b/ # Extract tooltip mode (enum-anchored: invalid values simply don't match and are dropped) tooltip_mode_regex = /\btooltip:(#{TOOLTIP_MODES.join('|')})\b/ attributes[:tooltip] = ::Regexp.last_match(1) if params_string =~ tooltip_mode_regex (copy_content, attributes) end # Apply both patterns patterns = dual_syntax_patterns(primary_regex, alternative_regex, transform_proc) apply_multiple_patterns(content, patterns) end |