From a3bf753f4c75b0143ac8426ccd975b90afa3a882 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 22 May 2025 19:09:03 +0530 Subject: [PATCH] feat: add embed for wistia (#11547) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- lib/custom_markdown_renderer.rb | 61 ++++------------ lib/embed_renderer.rb | 87 +++++++++++++++++++++++ spec/lib/custom_markdown_renderer_spec.rb | 11 +++ 3 files changed, 111 insertions(+), 48 deletions(-) create mode 100644 lib/embed_renderer.rb diff --git a/lib/custom_markdown_renderer.rb b/lib/custom_markdown_renderer.rb index 16bb4e024..75dc43700 100644 --- a/lib/custom_markdown_renderer.rb +++ b/lib/custom_markdown_renderer.rb @@ -6,6 +6,7 @@ class CustomMarkdownRenderer < CommonMarker::HtmlRenderer VIMEO_REGEX = %r{https?://(?:www\.)?vimeo\.com/(\d+)} MP4_REGEX = %r{https?://(?:www\.)?.+\.(mp4)} ARCADE_REGEX = %r{https?://(?:www\.)?app\.arcade\.software/share/([^&/]+)} + WISTIA_REGEX = %r{https?://(?:www\.)?([^/]+)\.wistia\.com/medias/([^&/]+)} def text(node) content = node.string_content @@ -50,7 +51,8 @@ class CustomMarkdownRenderer < CommonMarker::HtmlRenderer VIMEO_REGEX => :make_vimeo_embed, MP4_REGEX => :make_video_embed, LOOM_REGEX => :make_loom_embed, - ARCADE_REGEX => :make_arcade_embed + ARCADE_REGEX => :make_arcade_embed, + WISTIA_REGEX => :make_wistia_embed } embedding_methods.each do |regex, method| @@ -76,67 +78,30 @@ class CustomMarkdownRenderer < CommonMarker::HtmlRenderer def make_youtube_embed(youtube_match) video_id = youtube_match[1] - %( -
- -
- ) + EmbedRenderer.youtube(video_id) end def make_loom_embed(loom_match) video_id = loom_match[1] - %( -
- -
- ) + EmbedRenderer.loom(video_id) end def make_vimeo_embed(vimeo_match) video_id = vimeo_match[1] - %( -
- -
- ) + EmbedRenderer.vimeo(video_id) end def make_video_embed(link_url) - %( - - ) + EmbedRenderer.video(link_url) + end + + def make_wistia_embed(wistia_match) + video_id = wistia_match[2] + EmbedRenderer.wistia(video_id) end def make_arcade_embed(arcade_match) video_id = arcade_match[1] - %( -
- -
- ) + EmbedRenderer.arcade(video_id) end end diff --git a/lib/embed_renderer.rb b/lib/embed_renderer.rb new file mode 100644 index 000000000..0a747bbb3 --- /dev/null +++ b/lib/embed_renderer.rb @@ -0,0 +1,87 @@ +module EmbedRenderer + def self.youtube(video_id) + %( +
+ +
+ ) + end + + def self.loom(video_id) + %( +
+ +
+ ) + end + + def self.vimeo(video_id) + %( +
+ +
+ ) + end + + def self.video(link_url) + %( + + ) + end + + # Generates an HTML embed for a Wistia video. + # @param wistia_match [MatchData] A match object from the WISTIA_REGEX regex, where wistia_match[2] contains the video ID. + def self.wistia(video_id) + %( +
+ + + + + +
+ ) + end + + def self.arcade(video_id) + %( +
+ +
+ ) + end +end diff --git a/spec/lib/custom_markdown_renderer_spec.rb b/spec/lib/custom_markdown_renderer_spec.rb index 550e7b637..939965e91 100644 --- a/spec/lib/custom_markdown_renderer_spec.rb +++ b/spec/lib/custom_markdown_renderer_spec.rb @@ -143,6 +143,17 @@ describe CustomMarkdownRenderer do end end + context 'when link is a wistia URL' do + let(:wistia_url) { 'https://chatwoot.wistia.com/medias/kjwjeq6f9i' } + + it 'renders a custom element with Wistia embed code' do + output = render_markdown_link(wistia_url) + expect(output).to include('') + expect(output).to include('