mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 03:23:43 +08:00
FIX: details tags broke excerpts
This commit is contained in:
parent
c1716d41c7
commit
b3fda0ea86
|
@ -17,6 +17,7 @@ export default Ember.Component.extend(LoadMore, {
|
||||||
|
|
||||||
$(window).on('resize.discourse-on-scroll', () => this.scrolled());
|
$(window).on('resize.discourse-on-scroll', () => this.scrolled());
|
||||||
|
|
||||||
|
this.$().on('click.details-disabled', 'details.disabled', () => false)
|
||||||
this.$().on('mouseup.discourse-redirect', '.excerpt a', function(e) {
|
this.$().on('mouseup.discourse-redirect', '.excerpt a', function(e) {
|
||||||
// bypass if we are selecting stuff
|
// bypass if we are selecting stuff
|
||||||
const selection = window.getSelection && window.getSelection();
|
const selection = window.getSelection && window.getSelection();
|
||||||
|
@ -38,6 +39,7 @@ export default Ember.Component.extend(LoadMore, {
|
||||||
_destroyed: function() {
|
_destroyed: function() {
|
||||||
this.unbindScrolling('user-stream-view');
|
this.unbindScrolling('user-stream-view');
|
||||||
$(window).unbind('resize.discourse-on-scroll');
|
$(window).unbind('resize.discourse-on-scroll');
|
||||||
|
this.$().off('click.details-disabled', 'details.disabled')
|
||||||
|
|
||||||
// Unbind link tracking
|
// Unbind link tracking
|
||||||
this.$().off('mouseup.discourse-redirect', '.excerpt a');
|
this.$().off('mouseup.discourse-redirect', '.excerpt a');
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
|
|
||||||
<ul class="usercard-controls">
|
<ul class="usercard-controls">
|
||||||
{{#if user.can_send_private_message_to_user}}
|
{{#if user.can_send_private_message_to_user}}
|
||||||
<li>
|
<li class='compose-pm'>
|
||||||
{{d-button
|
{{d-button
|
||||||
class="btn-primary"
|
class="btn-primary"
|
||||||
action=(action "composePrivateMessage" user post)
|
action=(action "composePrivateMessage" user post)
|
||||||
|
|
|
@ -110,6 +110,10 @@
|
||||||
font-size: 0.929em;
|
font-size: 0.929em;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
color: $primary;
|
color: $primary;
|
||||||
|
|
||||||
|
details.disabled {
|
||||||
|
color: $primary-medium;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
@keep_onebox_source = options[:keep_onebox_source] == true
|
@keep_onebox_source = options[:keep_onebox_source] == true
|
||||||
@remap_emoji = options[:remap_emoji] == true
|
@remap_emoji = options[:remap_emoji] == true
|
||||||
@start_excerpt = false
|
@start_excerpt = false
|
||||||
|
@summary_contents = ""
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.get_excerpt(html, length, options)
|
def self.get_excerpt(html, length, options)
|
||||||
|
@ -108,6 +109,10 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
include_tag("span", attributes)
|
include_tag("span", attributes)
|
||||||
@in_spoiler = true
|
@in_spoiler = true
|
||||||
end
|
end
|
||||||
|
when "details"
|
||||||
|
@in_details = true
|
||||||
|
when "summary"
|
||||||
|
@in_summary = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -126,6 +131,14 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
end
|
end
|
||||||
when "aside"
|
when "aside"
|
||||||
@in_quote = false
|
@in_quote = false
|
||||||
|
when "details"
|
||||||
|
@in_details = false
|
||||||
|
when "summary"
|
||||||
|
@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
|
||||||
|
@ -135,8 +148,15 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
# we call length on this so might as well ensure we have a string
|
# we call length on this so might as well ensure we have a string
|
||||||
string = string.to_s
|
string = string.to_s
|
||||||
|
if @in_details
|
||||||
|
if @in_summary
|
||||||
|
@summary_contents << string
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
encode = encode ? lambda { |s| ERB::Util.html_escape(s) } : lambda { |s| s }
|
encode = encode ? lambda { |s| ERB::Util.html_escape(s) } : lambda { |s| s }
|
||||||
if count_it && @current_length + string.length > @length
|
if count_it && @current_length + string.length > @length
|
||||||
|
|
|
@ -385,6 +385,10 @@ 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
|
||||||
|
expect(PrettyText.excerpt("<details><summary>expand</summary><p>hello</p></details>", 30)).to match_html "<details><summary>expand</summary></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
Block a user