mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 10:33:51 +08:00
DEV: Add option to keep onebox body content in post excerpt.
This commit is contained in:
parent
af65809ec6
commit
2cb805a683
|
@ -18,6 +18,7 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
|||
@keep_newlines = options[:keep_newlines] == true
|
||||
@keep_emoji_images = options[:keep_emoji_images] == true
|
||||
@keep_onebox_source = options[:keep_onebox_source] == true
|
||||
@keep_onebox_body = options[:keep_onebox_body] == true
|
||||
@remap_emoji = options[:remap_emoji] == true
|
||||
@start_excerpt = false
|
||||
@in_details_depth = 0
|
||||
|
@ -34,7 +35,7 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
|||
parser.parse(html)
|
||||
end
|
||||
excerpt = me.excerpt.strip
|
||||
excerpt = excerpt.gsub(/\s*\n+\s*/, "\n\n") if options[:keep_onebox_source]
|
||||
excerpt = excerpt.gsub(/\s*\n+\s*/, "\n\n") if options[:keep_onebox_source] || options[:keep_onebox_body]
|
||||
excerpt = CGI.unescapeHTML(excerpt) if options[:text_entities] == true
|
||||
excerpt
|
||||
end
|
||||
|
@ -95,13 +96,22 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
|||
|
||||
when "aside"
|
||||
attributes = Hash[*attributes.flatten]
|
||||
unless @keep_onebox_source && attributes['class'].include?('onebox')
|
||||
unless (@keep_onebox_source || @keep_onebox_body) && attributes['class'].include?('onebox')
|
||||
@in_quote = true
|
||||
end
|
||||
|
||||
if @keep_onebox_body && attributes['class'].include?('quote') && attributes['data-topic'].present?
|
||||
@in_quote = false
|
||||
end
|
||||
|
||||
when 'article'
|
||||
if @keep_onebox_source && attributes.include?(['class', 'onebox-body'])
|
||||
@in_quote = true
|
||||
if attributes.include?(['class', 'onebox-body'])
|
||||
@in_quote = !@keep_onebox_body
|
||||
end
|
||||
|
||||
when 'header'
|
||||
if attributes.include?(['class', 'source'])
|
||||
@in_quote = !@keep_onebox_source
|
||||
end
|
||||
|
||||
when "div", "span"
|
||||
|
|
|
@ -34,4 +34,51 @@ describe ExcerptParser do
|
|||
expect(ExcerptParser.get_excerpt(html, 3, {})).to match_html('<details class="disabled"><summary>foo</summary></details>')
|
||||
expect(ExcerptParser.get_excerpt(html, 2, {})).to match_html('<details class="disabled"><summary>fo…</summary></details>')
|
||||
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
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user