effective_posts 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d76afd0685f5954987b398a40053792c420f9582
4
- data.tar.gz: b76db481f1c1ad1ba18e3cc661bae48812472b54
3
+ metadata.gz: 798c18ece7296255c241ef3dc6a0be72d6c12286
4
+ data.tar.gz: 5fa7275c8540538729866b5c7bb86310ec7b458f
5
5
  SHA512:
6
- metadata.gz: 2f8ceb1a409fa2c3451fa71ece62b9b9528a0623a7210e118439b12afafab130d3513e28b1428d109bc2ade9d12c6dd9569d3c16c9e4689e6ae466a13fb759b7
7
- data.tar.gz: bdc091332a4a785b31cac4f17c7d68bbc5dc24750c041bd19474aaf605757a9800e9c68897120566db007782d238b6e90f43dfa4c20912c92e41f54510dcc411
6
+ metadata.gz: d16f3d4c437c38f8f04769fc12b5ce22cead35f4a5a42fe08f03000f92472b72bae71e5d5f79d0fd104b0394ace27debc1e7983d6fccddb994ba809038132275
7
+ data.tar.gz: b8e671fee265b638f529b1e888efd14ead13e3282012fb119998ca5f6795cb3710d7a85d235409726b0580c9249b3fc19e1adcb128bc2a8eb2d31a3101604a2b
@@ -31,7 +31,7 @@ module EffectivePostsHelper
31
31
  omission = options.delete(:omission)
32
32
 
33
33
  if divider.present?
34
- content[0...divider] + readmore_link(post, options)
34
+ truncate_html(content, Effective::Snippets::ReadMoreDivider::TOKEN, '') + readmore_link(post, options)
35
35
  elsif length.present?
36
36
  truncate_html(content, length, omission) + readmore_link(post, options)
37
37
  else
@@ -1,24 +1,47 @@
1
1
  module EffectiveTruncateHtmlHelper
2
- def chunk_html(text, max_length = 2, _ellipsis = '...', read_more = nil)
3
- doc = Nokogiri::HTML::DocumentFragment.parse text
4
-
5
- if doc.children.length >= max_length
6
- doc.children.last.remove while doc.children.length > max_length
7
- doc.children.last.add_next_sibling Nokogiri::HTML::DocumentFragment.parse("<p>#{ read_more }</p>")
8
- end
9
-
10
- doc.inner_html.html_safe
11
- end
12
-
13
2
  # Truncates HTML or text to a certain inner_text character limit.
14
3
  #
15
4
  # If given HTML, the underlying markup may be much longer than length, but the displayed text
16
5
  # will be no longer than (length + omission) characters.
17
- def truncate_html(text, length = 200, omission = '...')
18
- Nokogiri::HTML::DocumentFragment.parse(text).tap { |doc| _truncate_node(doc, length, omission) }.inner_html
6
+ def truncate_html(text, length_or_content = 200, omission = '...')
7
+ doc = Nokogiri::HTML::DocumentFragment.parse(text)
8
+
9
+ if length_or_content.kind_of?(String)
10
+ content = (Nokogiri::HTML::DocumentFragment.parse(length_or_content).children.first.inner_text rescue length_or_content)
11
+ doc.tap { |doc| _truncate_node_to_content(doc, content, omission) }.inner_html
12
+ elsif length_or_content.kind_of?(Integer)
13
+ doc.tap { |doc| _truncate_node_to_length(doc, length_or_content, omission) }.inner_html
14
+ else
15
+ raise 'Unsupported datatype passed to second argument of truncate_html. Expecting integer or string.'
16
+ end
19
17
  end
20
18
 
21
- def _truncate_node(node, length, omission)
19
+ def _truncate_node_to_content(node, content, omission, seen = false)
20
+ if seen == true
21
+ node.remove
22
+ elsif node.children.blank?
23
+ index = node.content.index(content)
24
+
25
+ if index.present?
26
+ if node.parent.try(:content) == content # If my parent node just has my text in it, remove parent node too
27
+ node.parent.remove
28
+ elsif index == 0
29
+ node.remove
30
+ else
31
+ node.content = truncate(node.content, length: index+omission.to_s.length, separator: ' ', omission: omission)
32
+ end
33
+
34
+ seen = true
35
+ end
36
+ else
37
+ node.children.each { |child| seen = _truncate_node_to_content(child, content, omission, seen) }
38
+ end
39
+
40
+ seen
41
+ end
42
+
43
+
44
+ def _truncate_node_to_length(node, length, omission)
22
45
  if node.inner_text.length <= length
23
46
  # Do nothing, we're already reached base case
24
47
  elsif node.name == 'a'
@@ -26,13 +49,13 @@ module EffectiveTruncateHtmlHelper
26
49
  elsif node.children.blank?
27
50
  # I need to truncate myself, and I'm certainly a text node
28
51
  if node.text?
29
- node.content = truncate(node.content, length: length, separator: ' ', omission: omission)
52
+ node.content = truncate(node.content, length: length+omission.to_s.length, separator: ' ', omission: omission)
30
53
  else
31
- Rails.logger.info '[WARNING] effective_posts: unexpected node in children.blank? recursive condition'
32
54
  node.remove
33
55
  end
34
56
  else # Go through all the children, and delete anything after the length has been reached
35
57
  child_length = 0
58
+
36
59
  node.children.each do |child|
37
60
  child_length > length ? (child.remove) : (child_length += child.inner_text.length)
38
61
  end
@@ -44,7 +67,7 @@ module EffectiveTruncateHtmlHelper
44
67
  child = node.children.last
45
68
  child_max_length = length - (child_length - child.inner_text.length)
46
69
 
47
- _truncate_node(child, child_max_length, omission)
70
+ _truncate_node_to_length(child, child_max_length, omission)
48
71
  end
49
72
  end
50
73
  end
@@ -1,3 +1,3 @@
1
1
  module EffectivePosts
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.4.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_posts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-24 00:00:00.000000000 Z
11
+ date: 2015-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails