Module: Card::Content::Truncate
- Included in:
- Card::Content
- Defined in:
- lib/card/content/truncate.rb
Overview
tools for truncating content
Constant Summary collapse
- ELLISPES_HTML =
'<span class="closed-content-ellipses">...</span>'.freeze
Instance Method Summary collapse
- #close_tags(wordstring) ⇒ Object
- #find_tags(wordstring) ⇒ Object
- #polish(wordstring) ⇒ Object
- #smart_truncate(input, words = 25) ⇒ Object
- #truncate(input, words) ⇒ Object
Instance Method Details
#close_tags(wordstring) ⇒ Object
27 28 29 30 31 |
# File 'lib/card/content/truncate.rb', line 27 def wordstring = wordstring .each { |t| wordstring += "</#{t}>" } wordstring end |
#find_tags(wordstring) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/card/content/truncate.rb', line 41 def wordstring = [] # match tags with or without self closing (ie. <foo />) wordstring.scan(%r{\<([^\>\s/]+)[^\>]*?\>}).each do |t| .unshift(t[0]) end # match tags with self closing and mark them as closed wordstring.scan(%r{\<([^\>\s/]+)[^\>]*?/\>}).each do |t| next unless (x = .index(t[0])) .slice!(x) end # match close tags wordstring.scan(%r{\</([^\>\s/]+)[^\>]*?\>}).each do |t| next unless (x = .rindex(t[0])) .slice!(x) end end |
#polish(wordstring) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/card/content/truncate.rb', line 33 def polish wordstring wordstring.gsub! %r{<[/]?br[\s/]*>}, " " # Also a hack -- get rid of <br>'s -- they make line view ugly. wordstring.gsub! %r{<[/]?p[^>]*>}, " " ## Also a hack -- get rid of <br>'s -- they make line view ugly. wordstring end |
#smart_truncate(input, words = 25) ⇒ Object
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/card/content/truncate.rb', line 7 def smart_truncate input, words=25 return if input.nil? truncated, wordstring = truncate input, words # nuke partial tags at end of snippet wordstring.gsub!(/(<[^\>]+)$/, "") wordstring = wordstring wordstring += ELLISPES_HTML if truncated # wordstring += '...' if wordlist.length > l polish wordstring end |
#truncate(input, words) ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/card/content/truncate.rb', line 18 def truncate input, words wordlist = input.to_s.split l = words.to_i - 1 l = 0 if l < 0 truncating = wordlist.length > l wordstring = truncating ? wordlist[0..l].join(" ") : input.to_s [truncating, wordstring] end |