mirror of
https://github.com/discourse/discourse.git
synced 2024-12-19 15:25:59 +08:00
44cabc3569
It doesn't make much sense to have the content of a `<details>` in an excerpt so I replaced them with "▶ summary" instead. That way, they can't be (ab)used in user cards for example. Reference - https://meta.discourse.org/t/335094
156 lines
7.3 KiB
Ruby
156 lines
7.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "excerpt_parser"
|
|
|
|
RSpec.describe ExcerptParser do
|
|
it "handles nested <details> blocks" do
|
|
html = <<~HTML.strip
|
|
<details>
|
|
<summary>FOO</summary>
|
|
<details>
|
|
<summary>BAR</summary>
|
|
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
|
|
</details>
|
|
</details>
|
|
HTML
|
|
|
|
expect(ExcerptParser.get_excerpt(html, 50, {})).to match_html "▶ FOO"
|
|
expect(ExcerptParser.get_excerpt(html, 6, {})).to match_html "▶ FOO"
|
|
expect(ExcerptParser.get_excerpt(html, 3, {})).to match_html "▶ FOO"
|
|
expect(ExcerptParser.get_excerpt(html, 2, {})).to match_html "▶ FO…"
|
|
end
|
|
|
|
it "allows <svg> with <use> inside for icons when keep_svg is true" do
|
|
html = '<svg class="fa d-icon d-icon-folder svg-icon svg-node"><use href="#folder"></use></svg>'
|
|
expect(ExcerptParser.get_excerpt(html, 100, { keep_svg: true })).to match_html(
|
|
'<svg class="fa d-icon d-icon-folder svg-icon svg-node"><use href="#folder"></use></svg>',
|
|
)
|
|
expect(ExcerptParser.get_excerpt(html, 100, {})).to match_html("")
|
|
|
|
html = '<svg class="blah"><use href="#folder"></use></svg>'
|
|
expect(ExcerptParser.get_excerpt(html, 100, { keep_svg: true })).to match_html("")
|
|
|
|
html = '<svg><use href="#folder"></use></svg>'
|
|
expect(ExcerptParser.get_excerpt(html, 100, { keep_svg: true })).to match_html("")
|
|
|
|
html =
|
|
'<use href="#user"></use><svg class="fa d-icon d-icon-folder svg-icon svg-node"><use href="#folder"></use></svg>'
|
|
expect(ExcerptParser.get_excerpt(html, 100, { keep_svg: true })).to match_html(
|
|
'<svg class="fa d-icon d-icon-folder svg-icon svg-node"><use href="#folder"></use></svg>',
|
|
)
|
|
end
|
|
|
|
describe "keep_onebox_body parameter" do
|
|
it "keeps the body content for external oneboxes" do
|
|
html = <<~HTML.strip
|
|
<aside class="onebox">
|
|
<header class="source">
|
|
<img src="https://github.githubassets.com/favicon.ico" class="site-icon" width="32" height="32">
|
|
<a href="https://github.com/discourse/discourse" target="_blank">GitHub</a>
|
|
</header>
|
|
<article class="onebox-body">
|
|
<img src="/uploads/default/original/1X/10c0f1565ee5b6ca3fe43f3183529bc0afd26003.jpeg" class="thumbnail">
|
|
<h3>
|
|
<a href="https://github.com/discourse/discourse" target="_blank">discourse/discourse</a>
|
|
</h3>
|
|
<p>A platform for community discussion. Free, open, simple. - discourse/discourse</p>
|
|
</article>
|
|
</aside>
|
|
HTML
|
|
expect(ExcerptParser.get_excerpt(html, 100, keep_onebox_body: true)).to eq(<<~HTML.strip)
|
|
[image]
|
|
|
|
<a href="https://github.com/discourse/discourse" target="_blank">discourse/discourse</a>
|
|
|
|
A platform for community discussion. Free, o…
|
|
HTML
|
|
end
|
|
|
|
it "keeps the content for internal oneboxes" do
|
|
html = <<~HTML.strip
|
|
<aside class="quote" data-post="1" data-topic="8">
|
|
<div class="title">
|
|
<div class="quote-controls"></div>
|
|
<img width="20" height="20" src="/user_avatar/localhost/system/40/2_2.png" class="avatar">
|
|
<a href="/t/welcome-to-discourse/8/1">Welcome to Discourse</a>
|
|
</div>
|
|
<blockquote>The first paragraph of this pinned topic will be visible as a welcome message to all new visitors on your homepage.</blockquote>
|
|
</aside>
|
|
HTML
|
|
expect(ExcerptParser.get_excerpt(html, 100, keep_onebox_body: true)).to eq(<<~HTML.strip)
|
|
[image]
|
|
|
|
<a href="/t/welcome-to-discourse/8/1">Welcome to Discourse</a>
|
|
|
|
The first paragraph of this pinned topic will be …
|
|
HTML
|
|
end
|
|
|
|
it "keeps the content for internal oneboxes that contain github oneboxes" do
|
|
html = <<~HTML.strip
|
|
<p>Another commit to test out.</p>
|
|
<p>This time this commit has a longer commit message.</p>
|
|
<aside class="onebox githubcommit" data-onebox-src="https://github.com/discourse/discourse/commit/90f395a11895e9cfb7edd182b0bf5ec3d51d7892">
|
|
<header class="source">
|
|
<a href="https://github.com/discourse/discourse/commit/90f395a11895e9cfb7edd182b0bf5ec3d51d7892" target="_blank" rel="noopener">github.com/discourse/discourse</a>
|
|
</header>
|
|
<article class="onebox-body">
|
|
<div class="github-row">
|
|
<div class="github-icon-container" title="Commit">
|
|
<svg width="60" height="60" class="github-icon" viewBox="0 0 14 16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"></path></svg>
|
|
</div>
|
|
<div class="github-info-container">
|
|
<h4>
|
|
<a href="https://github.com/discourse/discourse/commit/90f395a11895e9cfb7edd182b0bf5ec3d51d7892" target="_blank" rel="noopener">DEV: Skip srcset for onebox thumbnails (#22621)</a>
|
|
</h4>
|
|
<div class="github-info">
|
|
<div class="date">
|
|
committed <span class="discourse-local-date" data-format="ll" data-date="2023-07-19" data-time="18:21:34" data-timezone="UTC">06:21PM - 19 Jul 23 UTC (UTC)</span>
|
|
</div>
|
|
<div class="user">
|
|
<a href="https://github.com/oblakeerickson" target="_blank" rel="noopener">
|
|
<img alt="oblakeerickson" src="//localhost:3000/uploads/default/original/1X/741ac99d6a66d71cdd46dd99fb5156506e13fdf2.jpeg" class="onebox-avatar-inline" width="20" height="20" data-dominant-color="3C3C3C">
|
|
oblakeerickson
|
|
</a>
|
|
</div>
|
|
<div class="lines" title="changed 2 files with 24 additions and 15 deletions">
|
|
<a href="https://github.com/discourse/discourse/commit/90f395a11895e9cfb7edd182b0bf5ec3d51d7892" target="_blank" rel="noopener">
|
|
<span class="added">+24</span>
|
|
<span class="removed">-15</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="github-row">
|
|
<p class="github-body-container">* DEV: Test commit message
|
|
This is a longer commit message <span class="show-more-container"><a href="https://github.com/discourse/discourse/commit/90f395a11895e9cfb7edd182b0bf5ec3d51d7892" target="_blank" rel="noopener" class="show-more">…</a></span><span class="excerpt hidden">that has the show-more class along with the exerpt hidden class</span></p>
|
|
</div>
|
|
</article>
|
|
<div class="onebox-metadata">
|
|
</div>
|
|
<div style="clear: both"></div>
|
|
</aside>
|
|
HTML
|
|
expect(ExcerptParser.get_excerpt(html, 100, keep_onebox_body: false)).to eq(<<~HTML.strip)
|
|
Another commit to test out. \nThis time this commit has a longer commit message.
|
|
HTML
|
|
end
|
|
end
|
|
|
|
describe "keep_quotes parameter" do
|
|
it "should keep the quoted content in html" do
|
|
html = <<~HTML.strip
|
|
<aside class="quote">
|
|
<blockquote>
|
|
This is a quoted text.
|
|
</blockquote>
|
|
</aside>
|
|
HTML
|
|
expect(ExcerptParser.get_excerpt(html, 100, keep_quotes: true)).to eq(
|
|
"This is a quoted text.",
|
|
)
|
|
end
|
|
end
|
|
end
|