From b25a5a20bb17d0b85f82d73ac2e31ec198593dc4 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 30 Apr 2013 13:25:55 +1000 Subject: [PATCH] option to strip links from excerpts --- app/models/post.rb | 8 ++--- app/serializers/topic_list_item_serializer.rb | 2 +- lib/autospec/runner.rb | 2 +- lib/pretty_text.rb | 30 +++++++++++-------- spec/components/pretty_text_spec.rb | 5 ++++ 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 91b2c70f292..c4500a7470d 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -221,14 +221,14 @@ class Post < ActiveRecord::Base user_id: user_id).first.try(:user) end - def self.excerpt(cooked, maxlength = nil) + def self.excerpt(cooked, maxlength = nil, options = {}) maxlength ||= SiteSetting.post_excerpt_maxlength - PrettyText.excerpt(cooked, maxlength) + PrettyText.excerpt(cooked, maxlength, options) end # Strip out most of the markup - def excerpt(maxlength = nil) - Post.excerpt(cooked, maxlength) + def excerpt(maxlength = nil, options = {}) + Post.excerpt(cooked, maxlength, options) end # What we use to cook posts diff --git a/app/serializers/topic_list_item_serializer.rb b/app/serializers/topic_list_item_serializer.rb index 63cebb1c776..7f9fd5ba7db 100644 --- a/app/serializers/topic_list_item_serializer.rb +++ b/app/serializers/topic_list_item_serializer.rb @@ -60,7 +60,7 @@ class TopicListItemSerializer < ListableTopicSerializer end def excerpt - object.posts.first.try(:excerpt,200) || nil + object.posts.first.try(:excerpt,220, strip_links: true) || nil end end diff --git a/lib/autospec/runner.rb b/lib/autospec/runner.rb index e40cae7aebd..15ff6969ad1 100644 --- a/lib/autospec/runner.rb +++ b/lib/autospec/runner.rb @@ -56,7 +56,7 @@ class Autospec::Runner Signal.trap("SIGINT") {stop_spork; exit } puts "Forced polling (slower) - inotify does not work on network filesystems, use local filesystem to avoid" if force_polling - + Thread.start do Listen.to('.', force_polling: force_polling, filter: /^app|^spec|^lib/, relative_paths: true) do |modified, added, removed| process_change([modified, added].flatten.compact) diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index 1b8b2f27872..3edbf23a2d1 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -239,14 +239,16 @@ module PrettyText attr_reader :excerpt - def initialize(length) + def initialize(length,options) @length = length @excerpt = "" @current_length = 0 + @strip_links = options[:strip_links] == true end - def self.get_excerpt(html, length) - me = self.new(length) + def self.get_excerpt(html, length, options) + + me = self.new(length,options) parser = Nokogiri::HTML::SAX::Parser.new(me) begin copy = "
" @@ -271,11 +273,13 @@ module PrettyText characters("[image]") end when "a" - c = "" - characters(c, false, false, false) - @in_a = true + unless @strip_links + c = "" + characters(c, false, false, false) + @in_a = true + end when "aside" @in_quote = true end @@ -284,8 +288,10 @@ module PrettyText def end_element(name) case name when "a" - characters("",false, false, false) - @in_a = false + unless @strip_links + characters("",false, false, false) + @in_a = false + end when "p", "br" characters(" ") when "aside" @@ -307,8 +313,8 @@ module PrettyText end end - def self.excerpt(html, length) - ExcerptParser.get_excerpt(html, length) + def self.excerpt(html, max_length, options={}) + ExcerptParser.get_excerpt(html, max_length, options) end end diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb index 6d9b5697749..37c4430ab49 100644 --- a/spec/components/pretty_text_spec.rb +++ b/spec/components/pretty_text_spec.rb @@ -104,6 +104,11 @@ test end describe "Excerpt" do + + it "should have an option to strip links" do + PrettyText.excerpt("cnn",100, strip_links: true).should == "cnn" + end + it "should preserve links" do PrettyText.excerpt("cnn",100).should == "cnn" end