FIX: Don't disable details when below truncate limit
This commit is contained in:
parent
7e3c4b4b2f
commit
21e1b05c7e
|
@ -19,6 +19,7 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
@remap_emoji = options[:remap_emoji] == true
|
@remap_emoji = options[:remap_emoji] == true
|
||||||
@start_excerpt = false
|
@start_excerpt = false
|
||||||
@summary_contents = ""
|
@summary_contents = ""
|
||||||
|
@detail_contents = ""
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.get_excerpt(html, length, options)
|
def self.get_excerpt(html, length, options)
|
||||||
|
@ -110,8 +111,10 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
@in_spoiler = true
|
@in_spoiler = true
|
||||||
end
|
end
|
||||||
when "details"
|
when "details"
|
||||||
|
@detail_contents = ""
|
||||||
@in_details = true
|
@in_details = true
|
||||||
when "summary"
|
when "summary"
|
||||||
|
@summary_contents = ""
|
||||||
@in_summary = true
|
@in_summary = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -133,12 +136,15 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
@in_quote = false
|
@in_quote = false
|
||||||
when "details"
|
when "details"
|
||||||
@in_details = false
|
@in_details = false
|
||||||
|
full = "<details><summary>#{clean(@summary_contents)}</summary>#{clean(@detail_contents)}</details>"
|
||||||
|
if @current_length + full.length > @length
|
||||||
|
@excerpt << "<details class='disabled'><summary>#{@summary_contents[0..@length]}</summary></details>"
|
||||||
|
else
|
||||||
|
@excerpt << full
|
||||||
|
end
|
||||||
|
|
||||||
when "summary"
|
when "summary"
|
||||||
@in_summary = false
|
@in_summary = false
|
||||||
if @summary_contents.present?
|
|
||||||
@excerpt << "<details class='disabled'><summary>#{@summary_contents[0..@length]}</summary></details>"
|
|
||||||
end
|
|
||||||
@summary_contents = ""
|
|
||||||
when "div", "span"
|
when "div", "span"
|
||||||
throw :done if @start_excerpt
|
throw :done if @start_excerpt
|
||||||
characters("</span>", false, false, false) if @in_spoiler
|
characters("</span>", false, false, false) if @in_spoiler
|
||||||
|
@ -146,6 +152,10 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def clean(str)
|
||||||
|
ERB::Util.html_escape(str.strip)
|
||||||
|
end
|
||||||
|
|
||||||
def characters(string, truncate = true, count_it = true, encode = true)
|
def characters(string, truncate = true, count_it = true, encode = true)
|
||||||
return if @in_quote
|
return if @in_quote
|
||||||
|
|
||||||
|
@ -154,6 +164,8 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
if @in_details
|
if @in_details
|
||||||
if @in_summary
|
if @in_summary
|
||||||
@summary_contents << string
|
@summary_contents << string
|
||||||
|
else
|
||||||
|
@detail_contents << string
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
|
@ -385,10 +385,14 @@ describe PrettyText do
|
||||||
expect(PrettyText.excerpt("<span class='spoiler'>spoiler</div>", 100)).to match_html "<span class='spoiler'>spoiler</span>"
|
expect(PrettyText.excerpt("<span class='spoiler'>spoiler</div>", 100)).to match_html "<span class='spoiler'>spoiler</span>"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should keep details" do
|
it "should keep details if too long" do
|
||||||
expect(PrettyText.excerpt("<details><summary>expand</summary><p>hello</p></details>", 30)).to match_html "<details class='disabled'><summary>expand</summary></details>"
|
expect(PrettyText.excerpt("<details><summary>expand</summary><p>hello</p></details>", 30)).to match_html "<details class='disabled'><summary>expand</summary></details>"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "doesn't disable details if short enough" do
|
||||||
|
expect(PrettyText.excerpt("<details><summary>expand</summary><p>hello</p></details>", 60)).to match_html "<details><summary>expand</summary>hello</details>"
|
||||||
|
end
|
||||||
|
|
||||||
it "should remove meta informations" do
|
it "should remove meta informations" do
|
||||||
expect(PrettyText.excerpt(wrapped_image, 100)).to match_html "<a href='//localhost:3000/uploads/default/4399/33691397e78b4d75.png' class='lightbox' title='Screen Shot 2014-04-14 at 9.47.10 PM.png'>[image]</a>"
|
expect(PrettyText.excerpt(wrapped_image, 100)).to match_html "<a href='//localhost:3000/uploads/default/4399/33691397e78b4d75.png' class='lightbox' title='Screen Shot 2014-04-14 at 9.47.10 PM.png'>[image]</a>"
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue