Skip to content

Commit

Permalink
fix: Renders youtube and vimeo links within blank lines as embeds (#7422
Browse files Browse the repository at this point in the history
)

Within the article we are now rendering every link for youtube and vimeo as embeds. This isn't a good solution, as users might need to have plain links as well. This fix will render only links within two blank lines as embeds.

Co-authored-by: Sojan Jose <sojan@pepalo.com>
  • Loading branch information
nithindavid and sojan-official committed Sep 21, 2023
1 parent 27fc243 commit 53dc38e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
21 changes: 20 additions & 1 deletion lib/custom_markdown_renderer.rb
Expand Up @@ -15,11 +15,30 @@ def text(node)
end

def link(node)
render_embedded_content(node) || super
return if surrounded_by_empty_lines?(node) && render_embedded_content(node)

# If it's not YouTube or Vimeo link, render normally
super
end

private

def surrounded_by_empty_lines?(node)
prev_node_empty?(node.previous) && next_node_empty?(node.next)
end

def prev_node_empty?(prev_node)
prev_node.nil? || node_empty?(prev_node)
end

def next_node_empty?(next_node)
next_node.nil? || node_empty?(next_node)
end

def node_empty?(node)
(node.type == :text && node.string_content.strip.empty?) || (node.type != :text)
end

def render_embedded_content(node)
link_url = node.url

Expand Down
14 changes: 12 additions & 2 deletions spec/lib/custom_markdown_renderer_spec.rb
Expand Up @@ -104,14 +104,24 @@ def render_markdown_link(link)
end

context 'when multiple links are present' do
it 'renders all links' do
markdown = '[youtube](https://www.youtube.com/watch?v=VIDEO_ID) [vimeo](https://vimeo.com/1234567) ^ hello ^ [normal](https://example.com)'
it 'renders all links when present between empty lines' do
markdown = "\n[youtube](https://www.youtube.com/watch?v=VIDEO_ID)\n\n[vimeo](https://vimeo.com/1234567)\n^ hello ^ [normal](https://example.com)"
output = render_markdown(markdown)
expect(output).to include('src="https://www.youtube.com/embed/VIDEO_ID"')
expect(output).to include('src="https://player.vimeo.com/video/1234567"')
expect(output).to include('<a href="https://example.com">')
expect(output).to include('<sup> hello </sup>')
end
end

context 'when links within text are present' do
it 'renders only text within blank lines as embeds' do
markdown = "\n[youtube](https://www.youtube.com/watch?v=VIDEO_ID)\nthis is such an amazing [vimeo](https://vimeo.com/1234567)\n[vimeo](https://vimeo.com/1234567)"
output = render_markdown(markdown)
expect(output).to include('src="https://www.youtube.com/embed/VIDEO_ID"')
expect(output).to include('href="https://vimeo.com/1234567"')
expect(output).to include('src="https://player.vimeo.com/video/1234567"')
end
end
end
end

0 comments on commit 53dc38e

Please sign in to comment.