nokogiri_html_helpers 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e66012cd8347fd288f9067dc5d1c36fc2edff7eb
4
+ data.tar.gz: 2918b4d2d2a1eee4d80f18ce771f5b909698b9d2
5
+ SHA512:
6
+ metadata.gz: 93b08a8d948d0048a1189e4e0fea190a06e4793644d500d82b077b673acc7ea2a86b951e0f52cbfa9c9b512be5ddceb1636557cf1f20db2ac790691a59bffddb
7
+ data.tar.gz: d00b001165037a4101383c1eb10a52f79c5daaa42662b989d437a6a00f14aa29c5002b5d3847fba33f0fc910f9ffa780a0bd18a4ccea27cb250321edc887b986
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ �Fo�LOFrf��v��H7�����I�Ȩ�2�i2@9�#���+f�Ե��uu��<�6Dg)cݯT{=��/W�d.b�E�5>������M��I�à��ЉRW
2
+ ',�>x�� SȢk��p���:S���B�'؏��;Q�S���M��eP���~nL:im5��W�<�<�n��].�-�(��-t�R��ve�ޕ�6ekU�
@@ -0,0 +1,9 @@
1
+ autoload :TruncateHtmlHelper, "./truncate_html_helper"
2
+ autoload :StripEmptyBlockHtmlHelper, "./strip_empty_block_html_helper"
3
+
4
+ module NokogiriHtmlHelpers
5
+ class Engine < Rails::Engine
6
+ def find_root_with_flag(*); File.expand_path("..", __FILE__); end
7
+ self.paths["app/helpers"] = ""
8
+ end if defined? Rails
9
+ end
@@ -0,0 +1,11 @@
1
+ module StripEmptyBlockHtmlHelper
2
+ def strip_empty_block_html(html)
3
+ Nokogiri::HTML::DocumentFragment.parse(html).tap do |fragment|
4
+ fragment.traverse do |node|
5
+ if node.element? and node.description and node.description.block? and node.content.empty?
6
+ node.remove
7
+ end
8
+ end
9
+ end.to_html
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ require "./strip_empty_block_html_helper"
2
+
3
+ describe StripEmptyBlockHtmlHelper do
4
+ include StripEmptyBlockHtmlHelper
5
+
6
+ specify "It should remove empty block-level elements" do
7
+ strip_empty_block_html("<p>Thing</p><p><span><!-- img was here --></span></p><p>Stuff</p>").should == "<p>Thing</p><p>Stuff</p>"
8
+ end
9
+ end
@@ -0,0 +1,48 @@
1
+ require "nokogiri"
2
+
3
+ module TruncateHtmlHelper
4
+ def truncate_html(html, options={}, &block)
5
+ if html
6
+ length = options.fetch(:length, 30)
7
+ omission = options.fetch(:omission, "&hellip;")
8
+
9
+ omission &&= Nokogiri::HTML::DocumentFragment.parse(omission)
10
+
11
+ remaining = length
12
+ remaining -= omission.content.length if omission
13
+
14
+ fragment = Nokogiri::HTML::DocumentFragment.parse(html)
15
+ fragment.traverse do |node|
16
+ if node.text? or node.cdata?
17
+ remaining -= node.content.length
18
+ if remaining < 0
19
+ node.content = node.content[0...remaining]
20
+ end
21
+ if node.content.empty?
22
+ node.remove
23
+ end
24
+ elsif node.element? and remaining <= 0 and not node.children.any?
25
+ node.remove
26
+ end
27
+ end
28
+
29
+ # If there's a block, use it instead of the omission
30
+ if block_given? && remaining < 0
31
+ omission = Nokogiri::HTML::DocumentFragment.parse(capture(&block))
32
+ end
33
+
34
+ # Add the omission only if we have truncated
35
+ if omission && remaining < 0
36
+ last_child = fragment.children.last
37
+ # If the last element is block, level, tuck the omission inside
38
+ if last_child.element? and last_child.description and last_child.description.block?
39
+ last_child << omission
40
+ else
41
+ fragment << omission
42
+ end
43
+ end
44
+
45
+ fragment.to_html
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,25 @@
1
+ require "./truncate_html_helper"
2
+
3
+ describe TruncateHtmlHelper do
4
+ include TruncateHtmlHelper
5
+
6
+ specify "basic truncation inside block-level element" do
7
+ truncate_html("<p>A <strong>thing</strong> which gets truncated.</p><p>With trailing elements</p>", length: 8).should == "<p>A <strong>thing</strong>…</p>"
8
+ end
9
+
10
+ specify "empty elements are preserved, but danglers are removed" do
11
+ truncate_html("<p>And<br>line<br>breaks<br>are<br>preserved.</p>", length: 8).should == "<p>And<br>line…</p>"
12
+ end
13
+
14
+ specify "omissions are outside inline elements" do
15
+ truncate_html("<strong>Thing</strong> and <em>stuff</em>", length: 6).should == "<strong>Thing</strong>…"
16
+ end
17
+
18
+ specify "default length is 30" do
19
+ truncate_html("a" * 50).should == "a" * 29 << "…"
20
+ end
21
+
22
+ specify "alternate omission text" do
23
+ truncate_html("<div>a<em>b</em>cdef</div>", length: 6, omission: "...").should == "<div>a<em>b</em>c...</div>"
24
+ end
25
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1 @@
1
+ i2���dH�N�SƷE⎟e���wE� ��}ș��ê���݈�����8��)������5M�m�^uf�F�Qko�AӂV�z1�^�O=vc��
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nokogiri_html_helpers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Samuel Cochran
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDXDCCAkSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA6MQ0wCwYDVQQDDARzajI2
14
+ MRQwEgYKCZImiZPyLGQBGRYEc2oyNjETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0x
15
+ MzAzMTEyMzIyMThaFw0xNDAzMTEyMzIyMThaMDoxDTALBgNVBAMMBHNqMjYxFDAS
16
+ BgoJkiaJk/IsZAEZFgRzajI2MRMwEQYKCZImiZPyLGQBGRYDY29tMIIBIjANBgkq
17
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr60Eo/ttCk8GMTMFiPr3GoYMIMFvLak
18
+ xSmTk9YGCB6UiEePB4THSSA5w6IPyeaCF/nWkDp3/BAam0eZMWG1IzYQB23TqIM0
19
+ 1xzcNRvFsn0aQoQ00k+sj+G83j3T5OOV5OZIlu8xAChMkQmiPd1NXc6uFv+Iacz7
20
+ kj+CMsI9YUFdNoU09QY0b+u+Rb6wDYdpyvN60YC30h0h1MeYbvYZJx/iZK4XY5zu
21
+ 4O/FL2ChjL2CPCpLZW55ShYyrzphWJwLOJe+FJ/ZBl6YXwrzQM9HKnt4titSNvyU
22
+ KzE3L63A3PZvExzLrN9u09kuWLLJfXB2sGOlw3n9t72rJiuBr3/OQQIDAQABo20w
23
+ azAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU99dfRjEKFyczTeIz
24
+ m3ZsDWrNC80wGAYDVR0RBBEwD4ENc2oyNkBzajI2LmNvbTAYBgNVHRIEETAPgQ1z
25
+ ajI2QHNqMjYuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQArNvPoDTdElU79folErf7u
26
+ qFL/ZzuC53hyNG0bQGggKOZJ4PuzqI9AFGX6Viw+0iltZzuqo5WTuuOQknO1aJZl
27
+ hp3Jijjd/vpxFuwalQT6JcN9V0iz81KiI+9KPRDxedX4zK9PD4Be+ZJgZBOalk6U
28
+ gQM0w4nYX8KATozCgvkFvKOQrNBEa+BqPundb8r047VRuK9iPGaJJeBpBgXgCNQc
29
+ iAw+LFjcoeiI5naoCBHZ4uHGY0lXrxxcep3F/GFvKKYGrrI9c2j5awd0DaEzrCel
30
+ gtfuNEm5Q0pV0/XpT5PsXz/rGnsR4CS7BaIcx+bAwl5pRopCzCHfl5Igay1vefPZ
31
+ -----END CERTIFICATE-----
32
+ date: 2013-10-17 00:00:00.000000000 Z
33
+ dependencies:
34
+ - !ruby/object:Gem::Dependency
35
+ name: nokogiri
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.6.0
41
+ type: :runtime
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.6.0
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ description: Fast HTML helpers using Nokogiri
63
+ email: sj26@sj26.com
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - nokogiri_html_helpers.rb
69
+ - strip_empty_block_html_helper.rb
70
+ - truncate_html_helper.rb
71
+ - strip_empty_block_html_helper_spec.rb
72
+ - truncate_html_helper_spec.rb
73
+ homepage:
74
+ licenses: []
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - .
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.0.3
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Fast HTML helpers using Nokogiri
96
+ test_files:
97
+ - strip_empty_block_html_helper_spec.rb
98
+ - truncate_html_helper_spec.rb
metadata.gz.sig ADDED
Binary file