loofah 2.6.0 → 2.10.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of loofah might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +40 -0
- data/README.md +9 -6
- data/lib/loofah.rb +13 -15
- data/lib/loofah/html5/safelist.rb +17 -0
- data/lib/loofah/html5/scrub.rb +46 -22
- data/lib/loofah/version.rb +5 -0
- metadata +23 -106
- data/Gemfile +0 -24
- data/Manifest.txt +0 -25
- data/Rakefile +0 -97
- data/benchmark/benchmark.rb +0 -154
- data/benchmark/fragment.html +0 -96
- data/benchmark/helper.rb +0 -73
- data/benchmark/www.slashdot.com.html +0 -2560
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c72ce5ed9c2a65db0a32b4bcdc141b9bf30caded7ee60d180c7872691246cafd
|
4
|
+
data.tar.gz: 953c1316bd83c03ded6eae4ca754a0b3d9dd1cc1f1f22a6e4c4fc2762de6aed7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0c876928b0ec84a84e38e66f5318a1d0539996d75ef96c07b7cceb953565e2d1f9409b1bbae7e10b94e5dc1e98959cd9d67397c1a83c4f622a9f3d5b5d61f09
|
7
|
+
data.tar.gz: 507b03b508b1725f8c2a67397e4b3b9e7c337e92b519c93cd8687bf371df844dfe3f15fdb3efd5e4f9bfd70b19842b7eec48cf27d888c1552a084f33fab37db0
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,45 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 2.10.0 / 2021-06-06
|
4
|
+
|
5
|
+
### Features
|
6
|
+
|
7
|
+
* Allow CSS properties `overflow-x` and `overflow-y`. [[#206](https://github.com/flavorjones/loofah/issues/206)] (Thanks, [@sampokuokkanen](https://github.com/sampokuokkanen)!)
|
8
|
+
|
9
|
+
|
10
|
+
## 2.9.1 / 2021-04-07
|
11
|
+
|
12
|
+
### Bug fixes
|
13
|
+
|
14
|
+
* Fix a regression in v2.9.0 which inappropriately removed CSS properties with quoted string values. [[#202](https://github.com/flavorjones/loofah/issues/202)]
|
15
|
+
|
16
|
+
|
17
|
+
## 2.9.0 / 2021-01-14
|
18
|
+
|
19
|
+
### Features
|
20
|
+
|
21
|
+
* Handle CSS functions in a CSS shorthand property (like `background`). [[#199](https://github.com/flavorjones/loofah/issues/199), [#200](https://github.com/flavorjones/loofah/issues/200)]
|
22
|
+
|
23
|
+
|
24
|
+
## 2.8.0 / 2020-11-25
|
25
|
+
|
26
|
+
### Features
|
27
|
+
|
28
|
+
* Allow CSS properties `order`, `flex-direction`, `flex-grow`, `flex-wrap`, `flex-shrink`, `flex-flow`, `flex-basis`, `flex`, `justify-content`, `align-self`, `align-items`, and `align-content`. [[#197](https://github.com/flavorjones/loofah/issues/197)] (Thanks, [@miguelperez](https://github.com/miguelperez)!)
|
29
|
+
|
30
|
+
|
31
|
+
## 2.7.0 / 2020-08-26
|
32
|
+
|
33
|
+
### Features
|
34
|
+
|
35
|
+
* Allow CSS properties `page-break-before`, `page-break-inside`, and `page-break-after`. [[#190](https://github.com/flavorjones/loofah/issues/190)] (Thanks, [@ahorek](https://github.com/ahorek)!)
|
36
|
+
|
37
|
+
|
38
|
+
### Fixes
|
39
|
+
|
40
|
+
* Don't drop the `!important` rule from some CSS properties. [[#191](https://github.com/flavorjones/loofah/issues/191)] (Thanks, [@b7kich](https://github.com/b7kich)!)
|
41
|
+
|
42
|
+
|
3
43
|
## 2.6.0 / 2020-06-16
|
4
44
|
|
5
45
|
### Features
|
data/README.md
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
# Loofah
|
2
2
|
|
3
3
|
* https://github.com/flavorjones/loofah
|
4
|
-
* Docs: http://rubydoc.info/github/flavorjones/loofah/
|
4
|
+
* Docs: http://rubydoc.info/github/flavorjones/loofah/main/frames
|
5
5
|
* Mailing list: [loofah-talk@googlegroups.com](https://groups.google.com/forum/#!forum/loofah-talk)
|
6
6
|
|
7
7
|
## Status
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
| Code Climate | [![Code Climate](https://codeclimate.com/github/flavorjones/loofah.svg)](https://codeclimate.com/github/flavorjones/loofah) |
|
9
|
+
[![Concourse CI](https://ci.nokogiri.org/api/v1/teams/nokogiri-core/pipelines/loofah/jobs/ruby-3.0/badge)](https://ci.nokogiri.org/teams/nokogiri-core/pipelines/loofah)
|
10
|
+
[![Code Climate](https://codeclimate.com/github/flavorjones/loofah.svg)](https://codeclimate.com/github/flavorjones/loofah)
|
11
|
+
[![Tidelift dependencies](https://tidelift.com/badges/package/rubygems/loofah)](https://tidelift.com/subscription/pkg/rubygems-loofah?utm_source=rubygems-loofah&utm_medium=referral&utm_campaign=readme)
|
13
12
|
|
14
13
|
|
15
14
|
## Description
|
@@ -212,7 +211,7 @@ end
|
|
212
211
|
Loofah.xml_document(File.read('plague.xml')).scrub!(bring_out_your_dead)
|
213
212
|
```
|
214
213
|
|
215
|
-
|
214
|
+
### Built-In HTML Scrubbers
|
216
215
|
|
217
216
|
Loofah comes with a set of sanitizing scrubbers that use HTML5lib's
|
218
217
|
safelist algorithm:
|
@@ -301,6 +300,10 @@ And the mailing list is on Google Groups:
|
|
301
300
|
|
302
301
|
And the IRC channel is \#loofah on freenode.
|
303
302
|
|
303
|
+
Consider subscribing to [Tidelift][tidelift] which provides license assurances and timely security notifications for your open source dependencies, including Loofah. [Tidelift][tidelift] subscriptions also help the Loofah maintainers fund our [automated testing](https://ci.nokogiri.org) which in turn allows us to ship releases, bugfixes, and security updates more often.
|
304
|
+
|
305
|
+
[tidelift]: https://tidelift.com/subscription/pkg/rubygems-loofah?utm_source=undefined&utm_medium=referral&utm_campaign=enterprise
|
306
|
+
|
304
307
|
|
305
308
|
## Security
|
306
309
|
|
data/lib/loofah.rb
CHANGED
@@ -3,21 +3,22 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.i
|
|
3
3
|
|
4
4
|
require "nokogiri"
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
require_relative "loofah/version"
|
7
|
+
require_relative "loofah/metahelpers"
|
8
|
+
require_relative "loofah/elements"
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
require_relative "loofah/html5/safelist"
|
11
|
+
require_relative "loofah/html5/libxml2_workarounds"
|
12
|
+
require_relative "loofah/html5/scrub"
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
require_relative "loofah/scrubber"
|
15
|
+
require_relative "loofah/scrubbers"
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
require_relative "loofah/instance_methods"
|
18
|
+
require_relative "loofah/xml/document"
|
19
|
+
require_relative "loofah/xml/document_fragment"
|
20
|
+
require_relative "loofah/html/document"
|
21
|
+
require_relative "loofah/html/document_fragment"
|
21
22
|
|
22
23
|
# == Strings and IO Objects as Input
|
23
24
|
#
|
@@ -28,9 +29,6 @@ require "loofah/html/document_fragment"
|
|
28
29
|
# quantities of docs.
|
29
30
|
#
|
30
31
|
module Loofah
|
31
|
-
# The version of Loofah you are using
|
32
|
-
VERSION = "2.6.0"
|
33
|
-
|
34
32
|
class << self
|
35
33
|
# Shortcut for Loofah::HTML::Document.parse
|
36
34
|
# This method accepts the same parameters as Nokogiri::HTML::Document.parse
|
@@ -549,6 +549,9 @@ module Loofah
|
|
549
549
|
|
550
550
|
ACCEPTABLE_CSS_PROPERTIES = Set.new([
|
551
551
|
"azimuth",
|
552
|
+
"align-content",
|
553
|
+
"align-items",
|
554
|
+
"align-self",
|
552
555
|
"background-color",
|
553
556
|
"border-bottom-color",
|
554
557
|
"border-collapse",
|
@@ -562,6 +565,13 @@ module Loofah
|
|
562
565
|
"direction",
|
563
566
|
"display",
|
564
567
|
"elevation",
|
568
|
+
"flex",
|
569
|
+
"flex-basis",
|
570
|
+
"flex-direction",
|
571
|
+
"flex-flow",
|
572
|
+
"flex-grow",
|
573
|
+
"flex-shrink",
|
574
|
+
"flex-wrap",
|
565
575
|
"float",
|
566
576
|
"font",
|
567
577
|
"font-family",
|
@@ -570,12 +580,19 @@ module Loofah
|
|
570
580
|
"font-variant",
|
571
581
|
"font-weight",
|
572
582
|
"height",
|
583
|
+
"justify-content",
|
573
584
|
"letter-spacing",
|
574
585
|
"line-height",
|
575
586
|
"list-style",
|
576
587
|
"list-style-type",
|
577
588
|
"max-width",
|
589
|
+
"order",
|
578
590
|
"overflow",
|
591
|
+
"overflow-x",
|
592
|
+
"overflow-y",
|
593
|
+
"page-break-after",
|
594
|
+
"page-break-before",
|
595
|
+
"page-break-inside",
|
579
596
|
"pause",
|
580
597
|
"pause-after",
|
581
598
|
"pause-before",
|
data/lib/loofah/html5/scrub.rb
CHANGED
@@ -7,21 +7,23 @@ module Loofah
|
|
7
7
|
module Scrub
|
8
8
|
CONTROL_CHARACTERS = /[`\u0000-\u0020\u007f\u0080-\u0101]/
|
9
9
|
CSS_KEYWORDISH = /\A(#[0-9a-fA-F]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|-?\d{0,3}\.?\d{0,10}(ch|cm|r?em|ex|in|lh|mm|pc|pt|px|Q|vmax|vmin|vw|vh|%|,|\))?)\z/
|
10
|
-
CRASS_SEMICOLON = { :
|
10
|
+
CRASS_SEMICOLON = { node: :semicolon, raw: ";" }
|
11
|
+
CSS_IMPORTANT = '!important'
|
12
|
+
CSS_PROPERTY_STRING_WITHOUT_EMBEDDED_QUOTES = /\A(["'])?[^"']+\1\z/
|
11
13
|
|
12
14
|
class << self
|
13
15
|
def allowed_element?(element_name)
|
14
|
-
::Loofah::HTML5::SafeList::ALLOWED_ELEMENTS_WITH_LIBXML2.include?
|
16
|
+
::Loofah::HTML5::SafeList::ALLOWED_ELEMENTS_WITH_LIBXML2.include?(element_name)
|
15
17
|
end
|
16
18
|
|
17
19
|
# alternative implementation of the html5lib attribute scrubbing algorithm
|
18
20
|
def scrub_attributes(node)
|
19
21
|
node.attribute_nodes.each do |attr_node|
|
20
22
|
attr_name = if attr_node.namespace
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
"#{attr_node.namespace.prefix}:#{attr_node.node_name}"
|
24
|
+
else
|
25
|
+
attr_node.node_name
|
26
|
+
end
|
25
27
|
|
26
28
|
if attr_name =~ /\Adata-[\w-]+\z/
|
27
29
|
next
|
@@ -57,13 +59,13 @@ module Loofah
|
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
60
|
-
scrub_css_attribute
|
62
|
+
scrub_css_attribute(node)
|
61
63
|
|
62
64
|
node.attribute_nodes.each do |attr_node|
|
63
65
|
node.remove_attribute(attr_node.name) if attr_node.value !~ /[^[:space:]]/
|
64
66
|
end
|
65
67
|
|
66
|
-
force_correct_attribute_escaping!
|
68
|
+
force_correct_attribute_escaping!(node)
|
67
69
|
end
|
68
70
|
|
69
71
|
def scrub_css_attribute(node)
|
@@ -72,32 +74,54 @@ module Loofah
|
|
72
74
|
end
|
73
75
|
|
74
76
|
def scrub_css(style)
|
75
|
-
style_tree = Crass.parse_properties
|
77
|
+
style_tree = Crass.parse_properties(style)
|
76
78
|
sanitized_tree = []
|
77
79
|
|
78
80
|
style_tree.each do |node|
|
79
81
|
next unless node[:node] == :property
|
80
82
|
next if node[:children].any? do |child|
|
81
|
-
[:url, :bad_url].include?(child[:node])
|
83
|
+
[:url, :bad_url].include?(child[:node])
|
82
84
|
end
|
85
|
+
|
83
86
|
name = node[:name].downcase
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
87
|
+
next unless SafeList::ALLOWED_CSS_PROPERTIES.include?(name) ||
|
88
|
+
SafeList::ALLOWED_SVG_PROPERTIES.include?(name) ||
|
89
|
+
SafeList::SHORTHAND_CSS_PROPERTIES.include?(name.split("-").first)
|
90
|
+
|
91
|
+
value = node[:children].map do |child|
|
92
|
+
case child[:node]
|
93
|
+
when :whitespace
|
94
|
+
nil
|
95
|
+
when :string
|
96
|
+
if child[:raw] =~ CSS_PROPERTY_STRING_WITHOUT_EMBEDDED_QUOTES
|
97
|
+
Crass::Parser.stringify(child)
|
98
|
+
else
|
99
|
+
nil
|
100
|
+
end
|
101
|
+
when :function
|
102
|
+
if SafeList::ALLOWED_CSS_FUNCTIONS.include?(child[:name].downcase)
|
103
|
+
Crass::Parser.stringify(child)
|
104
|
+
end
|
105
|
+
when :ident
|
106
|
+
keyword = child[:value]
|
107
|
+
if !SafeList::SHORTHAND_CSS_PROPERTIES.include?(name.split("-").first) ||
|
108
|
+
SafeList::ALLOWED_CSS_KEYWORDS.include?(keyword) ||
|
109
|
+
(keyword =~ CSS_KEYWORDISH)
|
89
110
|
keyword
|
90
111
|
end
|
91
|
-
|
92
|
-
|
93
|
-
propstring = sprintf "%s:%s", name, value.join(" ")
|
94
|
-
sanitized_node = Crass.parse_properties(propstring).first
|
95
|
-
sanitized_tree << sanitized_node << CRASS_SEMICOLON
|
112
|
+
else
|
113
|
+
child[:raw]
|
96
114
|
end
|
97
|
-
end
|
115
|
+
end.compact
|
116
|
+
|
117
|
+
next if value.empty?
|
118
|
+
value << CSS_IMPORTANT if node[:important]
|
119
|
+
propstring = format("%s:%s", name, value.join(" "))
|
120
|
+
sanitized_node = Crass.parse_properties(propstring).first
|
121
|
+
sanitized_tree << sanitized_node << CRASS_SEMICOLON
|
98
122
|
end
|
99
123
|
|
100
|
-
Crass::Parser.stringify
|
124
|
+
Crass::Parser.stringify(sanitized_tree)
|
101
125
|
end
|
102
126
|
|
103
127
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loofah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Dalessio
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -45,28 +45,28 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '13.0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '13.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: minitest
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '5.14'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '5.14'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rr
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,112 +87,42 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: 2.2
|
91
|
-
type: :development
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - "~>"
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: 2.2.0
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: hoe-gemspec
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - "~>"
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '1.0'
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '1.0'
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: hoe-debugging
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - "~>"
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '2.0'
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - "~>"
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '2.0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: hoe-bundler
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
requirements:
|
130
|
-
- - "~>"
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: '1.5'
|
90
|
+
version: '2.2'
|
133
91
|
type: :development
|
134
92
|
prerelease: false
|
135
93
|
version_requirements: !ruby/object:Gem::Requirement
|
136
94
|
requirements:
|
137
95
|
- - "~>"
|
138
96
|
- !ruby/object:Gem::Version
|
139
|
-
version: '
|
97
|
+
version: '2.2'
|
140
98
|
- !ruby/object:Gem::Dependency
|
141
|
-
name:
|
99
|
+
name: concourse
|
142
100
|
requirement: !ruby/object:Gem::Requirement
|
143
101
|
requirements:
|
144
102
|
- - "~>"
|
145
103
|
- !ruby/object:Gem::Version
|
146
|
-
version: '
|
104
|
+
version: '0.33'
|
147
105
|
type: :development
|
148
106
|
prerelease: false
|
149
107
|
version_requirements: !ruby/object:Gem::Requirement
|
150
108
|
requirements:
|
151
109
|
- - "~>"
|
152
110
|
- !ruby/object:Gem::Version
|
153
|
-
version: '
|
111
|
+
version: '0.33'
|
154
112
|
- !ruby/object:Gem::Dependency
|
155
|
-
name:
|
113
|
+
name: rubocop
|
156
114
|
requirement: !ruby/object:Gem::Requirement
|
157
115
|
requirements:
|
158
116
|
- - "~>"
|
159
117
|
- !ruby/object:Gem::Version
|
160
|
-
version: '1.
|
118
|
+
version: '1.1'
|
161
119
|
type: :development
|
162
120
|
prerelease: false
|
163
121
|
version_requirements: !ruby/object:Gem::Requirement
|
164
122
|
requirements:
|
165
123
|
- - "~>"
|
166
124
|
- !ruby/object:Gem::Version
|
167
|
-
version: '1.
|
168
|
-
- !ruby/object:Gem::Dependency
|
169
|
-
name: concourse
|
170
|
-
requirement: !ruby/object:Gem::Requirement
|
171
|
-
requirements:
|
172
|
-
- - ">="
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
version: 0.26.0
|
175
|
-
type: :development
|
176
|
-
prerelease: false
|
177
|
-
version_requirements: !ruby/object:Gem::Requirement
|
178
|
-
requirements:
|
179
|
-
- - ">="
|
180
|
-
- !ruby/object:Gem::Version
|
181
|
-
version: 0.26.0
|
182
|
-
- !ruby/object:Gem::Dependency
|
183
|
-
name: rubocop
|
184
|
-
requirement: !ruby/object:Gem::Requirement
|
185
|
-
requirements:
|
186
|
-
- - ">="
|
187
|
-
- !ruby/object:Gem::Version
|
188
|
-
version: 0.76.0
|
189
|
-
type: :development
|
190
|
-
prerelease: false
|
191
|
-
version_requirements: !ruby/object:Gem::Requirement
|
192
|
-
requirements:
|
193
|
-
- - ">="
|
194
|
-
- !ruby/object:Gem::Version
|
195
|
-
version: 0.76.0
|
125
|
+
version: '1.1'
|
196
126
|
- !ruby/object:Gem::Dependency
|
197
127
|
name: rdoc
|
198
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,19 +144,19 @@ dependencies:
|
|
214
144
|
- !ruby/object:Gem::Version
|
215
145
|
version: '7'
|
216
146
|
- !ruby/object:Gem::Dependency
|
217
|
-
name: hoe
|
147
|
+
name: hoe-markdown
|
218
148
|
requirement: !ruby/object:Gem::Requirement
|
219
149
|
requirements:
|
220
150
|
- - "~>"
|
221
151
|
- !ruby/object:Gem::Version
|
222
|
-
version: '3
|
152
|
+
version: '1.3'
|
223
153
|
type: :development
|
224
154
|
prerelease: false
|
225
155
|
version_requirements: !ruby/object:Gem::Requirement
|
226
156
|
requirements:
|
227
157
|
- - "~>"
|
228
158
|
- !ruby/object:Gem::Version
|
229
|
-
version: '3
|
159
|
+
version: '1.3'
|
230
160
|
description: |-
|
231
161
|
Loofah is a general library for manipulating and transforming HTML/XML documents and fragments, built on top of Nokogiri.
|
232
162
|
|
@@ -238,24 +168,12 @@ email:
|
|
238
168
|
- bryan@brynary.com
|
239
169
|
executables: []
|
240
170
|
extensions: []
|
241
|
-
extra_rdoc_files:
|
242
|
-
- CHANGELOG.md
|
243
|
-
- MIT-LICENSE.txt
|
244
|
-
- Manifest.txt
|
245
|
-
- README.md
|
246
|
-
- SECURITY.md
|
171
|
+
extra_rdoc_files: []
|
247
172
|
files:
|
248
173
|
- CHANGELOG.md
|
249
|
-
- Gemfile
|
250
174
|
- MIT-LICENSE.txt
|
251
|
-
- Manifest.txt
|
252
175
|
- README.md
|
253
|
-
- Rakefile
|
254
176
|
- SECURITY.md
|
255
|
-
- benchmark/benchmark.rb
|
256
|
-
- benchmark/fragment.html
|
257
|
-
- benchmark/helper.rb
|
258
|
-
- benchmark/www.slashdot.com.html
|
259
177
|
- lib/loofah.rb
|
260
178
|
- lib/loofah/elements.rb
|
261
179
|
- lib/loofah/helpers.rb
|
@@ -268,6 +186,7 @@ files:
|
|
268
186
|
- lib/loofah/metahelpers.rb
|
269
187
|
- lib/loofah/scrubber.rb
|
270
188
|
- lib/loofah/scrubbers.rb
|
189
|
+
- lib/loofah/version.rb
|
271
190
|
- lib/loofah/xml/document.rb
|
272
191
|
- lib/loofah/xml/document_fragment.rb
|
273
192
|
homepage: https://github.com/flavorjones/loofah
|
@@ -275,14 +194,12 @@ licenses:
|
|
275
194
|
- MIT
|
276
195
|
metadata:
|
277
196
|
homepage_uri: https://github.com/flavorjones/loofah
|
197
|
+
source_code_uri: https://github.com/flavorjones/loofah
|
278
198
|
bug_tracker_uri: https://github.com/flavorjones/loofah/issues
|
199
|
+
changelog_uri: https://github.com/flavorjones/loofah/blob/main/CHANGELOG.md
|
279
200
|
documentation_uri: https://www.rubydoc.info/gems/loofah/
|
280
|
-
changelog_uri: https://github.com/flavorjones/loofah/blob/master/CHANGELOG.md
|
281
|
-
source_code_uri: https://github.com/flavorjones/loofah
|
282
201
|
post_install_message:
|
283
|
-
rdoc_options:
|
284
|
-
- "--main"
|
285
|
-
- README.md
|
202
|
+
rdoc_options: []
|
286
203
|
require_paths:
|
287
204
|
- lib
|
288
205
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -296,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
296
213
|
- !ruby/object:Gem::Version
|
297
214
|
version: '0'
|
298
215
|
requirements: []
|
299
|
-
rubygems_version: 3.
|
216
|
+
rubygems_version: 3.2.15
|
300
217
|
signing_key:
|
301
218
|
specification_version: 4
|
302
219
|
summary: Loofah is a general library for manipulating and transforming HTML/XML documents
|