Class: Markawesome::VideoTransformer
- Inherits:
-
BaseTransformer
- Object
- BaseTransformer
- Markawesome::VideoTransformer
- Defined in:
- lib/markawesome/transformers/video_transformer.rb
Overview
Transforms video syntax into Web Awesome's two media components:
<wa-video> — a single embedded video with custom controls
<wa-video-playlist> — a playlist wrapping multiple <wa-video> children
Single video
Primary: ;;;tokens\nTitle\n\n;;;
Alternative: :::wa-video tokens\n…\n:::
Playlist (a ;;;;;; container wrapping bare ;;; items, mirroring carousel) Primary: ;;;;;;tokens\n;;;\nTitle\n;;;\n…\n;;;;;; Alternative: :::wa-video-playlist tokens\n;;;\n…\n;;;\n:::
Body: the first markdown link [text](url) supplies title/src; the first
markdown image  supplies poster. A block with no link (no
src) is left untransformed.
Tokens: controls:none|standard|full and preload:auto|metadata|none
(enum-validated, invalid values dropped) plus the boolean flags
autoplay, autoplay-muted, autoplay-on-visible, loop, muted.
Playlist children omit controls (the container forwards it to each child).
Constant Summary collapse
- VIDEO_FLAGS =
Boolean flags, matched as whole tokens so
autoplay-mutednever triggersautoplay. Parsed via AttributeParser (rightmost-wins, order-independent). { autoplay: %w[autoplay], 'autoplay-muted': %w[autoplay-muted], 'autoplay-on-visible': %w[autoplay-on-visible], loop: %w[loop], muted: %w[muted] }.freeze
- FLAG_ORDER =
Deterministic emission order for the boolean flags.
%w[autoplay autoplay-muted autoplay-on-visible loop muted].freeze
- CONTROLS_VALUES =
%w[none standard full].freeze
- PRELOAD_VALUES =
%w[auto metadata none].freeze
- PLAYLIST_PRIMARY =
Playlist consumes its inner ;;; items first; the bare
;;;\nitem open (no params) is load-bearing — it stops the closing;;;;;;from being mis-read as another item (mirrors carousel's~~~/~~~~~~trick). /^;{6}([^\n]*)\n((?:;;;\n(?:.*?\n)?;;;\n?)+);{6}/m- PLAYLIST_ALT =
/^:::wa-video-playlist\s*([^\n]*)\n(.*?)\n:::/m- SINGLE_PRIMARY =
(?!;)keeps the single open from matching a leftover;;;;;;fence. /^;;;(?!;)([^\n]*)\n(.*?)\n^;;;$/m- SINGLE_ALT =
/^:::wa-video\s*([^\n]*)\n(.*?)\n:::/m- ITEM_REGEX =
/;;;\n(.*?);;;(?:\n|$)/m- LINK_REGEX =
First markdown link that is not the
![…]()of an image (negative lookbehind on!) → title + src. /(?<!!)\[([^\]]+)\]\(([^)]+)\)/- IMAGE_REGEX =
First markdown image → poster.
/!\[([^\]]*)\]\(([^)]+)\)/
Class Method Summary collapse
Class Method Details
.render_as_markdown(content, _options = {}) ⇒ Object
70 71 72 73 74 75 76 77 78 |
# File 'lib/markawesome/transformers/video_transformer.rb', line 70 def self.render_as_markdown(content, = {}) patterns = [ { regex: PLAYLIST_PRIMARY, block: proc { |_m, md| render_playlist_markdown(md[2]) } }, { regex: PLAYLIST_ALT, block: proc { |_m, md| render_playlist_markdown(md[2]) } }, { regex: SINGLE_PRIMARY, block: proc { |m, md| render_single_markdown(md[2]) || m } }, { regex: SINGLE_ALT, block: proc { |m, md| render_single_markdown(md[2]) || m } } ] apply_multiple_patterns(content, patterns) end |
.transform(content) ⇒ Object
60 61 62 63 64 65 66 67 68 |
# File 'lib/markawesome/transformers/video_transformer.rb', line 60 def self.transform(content) patterns = [ { regex: PLAYLIST_PRIMARY, block: proc { |_m, md| build_playlist(md[1], md[2]) } }, { regex: PLAYLIST_ALT, block: proc { |_m, md| build_playlist(md[1], md[2]) } }, { regex: SINGLE_PRIMARY, block: proc { |m, md| build_single(md[1], md[2]) || m } }, { regex: SINGLE_ALT, block: proc { |m, md| build_single(md[1], md[2]) || m } } ] apply_multiple_patterns(content, patterns) end |