loofah 2.3.1 → 2.19.1
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 +4 -4
- data/CHANGELOG.md +193 -40
- data/README.md +13 -12
- data/lib/loofah/elements.rb +79 -75
- data/lib/loofah/helpers.rb +5 -4
- data/lib/loofah/html/document.rb +1 -0
- data/lib/loofah/html/document_fragment.rb +4 -2
- data/lib/loofah/html5/libxml2_workarounds.rb +8 -7
- data/lib/loofah/html5/safelist.rb +273 -27
- data/lib/loofah/html5/scrub.rb +147 -52
- data/lib/loofah/instance_methods.rb +14 -8
- data/lib/loofah/metahelpers.rb +2 -1
- data/lib/loofah/scrubber.rb +12 -7
- data/lib/loofah/scrubbers.rb +20 -18
- data/lib/loofah/version.rb +5 -0
- data/lib/loofah/xml/document.rb +1 -0
- data/lib/loofah/xml/document_fragment.rb +2 -1
- data/lib/loofah.rb +33 -16
- metadata +45 -125
- data/.gemtest +0 -0
- data/Gemfile +0 -22
- data/Manifest.txt +0 -41
- data/Rakefile +0 -81
- data/benchmark/benchmark.rb +0 -149
- data/benchmark/fragment.html +0 -96
- data/benchmark/helper.rb +0 -73
- data/benchmark/www.slashdot.com.html +0 -2560
- data/test/assets/msword.html +0 -63
- data/test/assets/testdata_sanitizer_tests1.dat +0 -502
- data/test/helper.rb +0 -18
- data/test/html5/test_sanitizer.rb +0 -401
- data/test/html5/test_scrub.rb +0 -10
- data/test/integration/test_ad_hoc.rb +0 -220
- data/test/integration/test_helpers.rb +0 -43
- data/test/integration/test_html.rb +0 -72
- data/test/integration/test_scrubbers.rb +0 -400
- data/test/integration/test_xml.rb +0 -55
- data/test/unit/test_api.rb +0 -142
- data/test/unit/test_encoding.rb +0 -20
- data/test/unit/test_helpers.rb +0 -62
- data/test/unit/test_scrubber.rb +0 -229
- data/test/unit/test_scrubbers.rb +0 -14
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.19.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Dalessio
|
@@ -9,22 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-12-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: nokogiri
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ">="
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 1.5.9
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 1.5.9
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: crass
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,165 +26,123 @@ dependencies:
|
|
40
26
|
- !ruby/object:Gem::Version
|
41
27
|
version: 1.0.2
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - "~>"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '12.3'
|
49
|
-
type: :development
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - "~>"
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '12.3'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: minitest
|
29
|
+
name: nokogiri
|
58
30
|
requirement: !ruby/object:Gem::Requirement
|
59
31
|
requirements:
|
60
|
-
- - "
|
32
|
+
- - ">="
|
61
33
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
63
|
-
type: :
|
34
|
+
version: 1.5.9
|
35
|
+
type: :runtime
|
64
36
|
prerelease: false
|
65
37
|
version_requirements: !ruby/object:Gem::Requirement
|
66
38
|
requirements:
|
67
|
-
- - "
|
39
|
+
- - ">="
|
68
40
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
41
|
+
version: 1.5.9
|
70
42
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
43
|
+
name: hoe-markdown
|
72
44
|
requirement: !ruby/object:Gem::Requirement
|
73
45
|
requirements:
|
74
46
|
- - "~>"
|
75
47
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.
|
48
|
+
version: '1.3'
|
77
49
|
type: :development
|
78
50
|
prerelease: false
|
79
51
|
version_requirements: !ruby/object:Gem::Requirement
|
80
52
|
requirements:
|
81
53
|
- - "~>"
|
82
54
|
- !ruby/object:Gem::Version
|
83
|
-
version: 1.
|
55
|
+
version: '1.3'
|
84
56
|
- !ruby/object:Gem::Dependency
|
85
57
|
name: json
|
86
58
|
requirement: !ruby/object:Gem::Requirement
|
87
59
|
requirements:
|
88
60
|
- - "~>"
|
89
61
|
- !ruby/object:Gem::Version
|
90
|
-
version: 2.2
|
62
|
+
version: '2.2'
|
91
63
|
type: :development
|
92
64
|
prerelease: false
|
93
65
|
version_requirements: !ruby/object:Gem::Requirement
|
94
66
|
requirements:
|
95
67
|
- - "~>"
|
96
68
|
- !ruby/object:Gem::Version
|
97
|
-
version: 2.2
|
69
|
+
version: '2.2'
|
98
70
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
71
|
+
name: minitest
|
100
72
|
requirement: !ruby/object:Gem::Requirement
|
101
73
|
requirements:
|
102
74
|
- - "~>"
|
103
75
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
76
|
+
version: '5.14'
|
105
77
|
type: :development
|
106
78
|
prerelease: false
|
107
79
|
version_requirements: !ruby/object:Gem::Requirement
|
108
80
|
requirements:
|
109
81
|
- - "~>"
|
110
82
|
- !ruby/object:Gem::Version
|
111
|
-
version: '
|
83
|
+
version: '5.14'
|
112
84
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
85
|
+
name: rake
|
114
86
|
requirement: !ruby/object:Gem::Requirement
|
115
87
|
requirements:
|
116
88
|
- - "~>"
|
117
89
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
90
|
+
version: '13.0'
|
119
91
|
type: :development
|
120
92
|
prerelease: false
|
121
93
|
version_requirements: !ruby/object:Gem::Requirement
|
122
94
|
requirements:
|
123
95
|
- - "~>"
|
124
96
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
97
|
+
version: '13.0'
|
126
98
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
99
|
+
name: rdoc
|
128
100
|
requirement: !ruby/object:Gem::Requirement
|
129
101
|
requirements:
|
130
|
-
- - "
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: '1.5'
|
133
|
-
type: :development
|
134
|
-
prerelease: false
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
136
|
-
requirements:
|
137
|
-
- - "~>"
|
102
|
+
- - ">="
|
138
103
|
- !ruby/object:Gem::Version
|
139
|
-
version: '
|
140
|
-
-
|
141
|
-
name: hoe-git
|
142
|
-
requirement: !ruby/object:Gem::Requirement
|
143
|
-
requirements:
|
144
|
-
- - "~>"
|
104
|
+
version: '4.0'
|
105
|
+
- - "<"
|
145
106
|
- !ruby/object:Gem::Version
|
146
|
-
version: '
|
107
|
+
version: '7'
|
147
108
|
type: :development
|
148
109
|
prerelease: false
|
149
110
|
version_requirements: !ruby/object:Gem::Requirement
|
150
|
-
requirements:
|
151
|
-
- - "~>"
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: '1.6'
|
154
|
-
- !ruby/object:Gem::Dependency
|
155
|
-
name: concourse
|
156
|
-
requirement: !ruby/object:Gem::Requirement
|
157
111
|
requirements:
|
158
112
|
- - ">="
|
159
113
|
- !ruby/object:Gem::Version
|
160
|
-
version:
|
161
|
-
|
162
|
-
prerelease: false
|
163
|
-
version_requirements: !ruby/object:Gem::Requirement
|
164
|
-
requirements:
|
165
|
-
- - ">="
|
114
|
+
version: '4.0'
|
115
|
+
- - "<"
|
166
116
|
- !ruby/object:Gem::Version
|
167
|
-
version:
|
117
|
+
version: '7'
|
168
118
|
- !ruby/object:Gem::Dependency
|
169
|
-
name:
|
119
|
+
name: rr
|
170
120
|
requirement: !ruby/object:Gem::Requirement
|
171
121
|
requirements:
|
172
|
-
- - "
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
version: '4.0'
|
175
|
-
- - "<"
|
122
|
+
- - "~>"
|
176
123
|
- !ruby/object:Gem::Version
|
177
|
-
version:
|
124
|
+
version: 1.2.0
|
178
125
|
type: :development
|
179
126
|
prerelease: false
|
180
127
|
version_requirements: !ruby/object:Gem::Requirement
|
181
128
|
requirements:
|
182
|
-
- - "
|
183
|
-
- !ruby/object:Gem::Version
|
184
|
-
version: '4.0'
|
185
|
-
- - "<"
|
129
|
+
- - "~>"
|
186
130
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
131
|
+
version: 1.2.0
|
188
132
|
- !ruby/object:Gem::Dependency
|
189
|
-
name:
|
133
|
+
name: rubocop
|
190
134
|
requirement: !ruby/object:Gem::Requirement
|
191
135
|
requirements:
|
192
136
|
- - "~>"
|
193
137
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
138
|
+
version: '1.1'
|
195
139
|
type: :development
|
196
140
|
prerelease: false
|
197
141
|
version_requirements: !ruby/object:Gem::Requirement
|
198
142
|
requirements:
|
199
143
|
- - "~>"
|
200
144
|
- !ruby/object:Gem::Version
|
201
|
-
version: '
|
145
|
+
version: '1.1'
|
202
146
|
description: |-
|
203
147
|
Loofah is a general library for manipulating and transforming HTML/XML documents and fragments, built on top of Nokogiri.
|
204
148
|
|
@@ -210,25 +154,12 @@ email:
|
|
210
154
|
- bryan@brynary.com
|
211
155
|
executables: []
|
212
156
|
extensions: []
|
213
|
-
extra_rdoc_files:
|
214
|
-
- CHANGELOG.md
|
215
|
-
- MIT-LICENSE.txt
|
216
|
-
- Manifest.txt
|
217
|
-
- README.md
|
218
|
-
- SECURITY.md
|
157
|
+
extra_rdoc_files: []
|
219
158
|
files:
|
220
|
-
- ".gemtest"
|
221
159
|
- CHANGELOG.md
|
222
|
-
- Gemfile
|
223
160
|
- MIT-LICENSE.txt
|
224
|
-
- Manifest.txt
|
225
161
|
- README.md
|
226
|
-
- Rakefile
|
227
162
|
- SECURITY.md
|
228
|
-
- benchmark/benchmark.rb
|
229
|
-
- benchmark/fragment.html
|
230
|
-
- benchmark/helper.rb
|
231
|
-
- benchmark/www.slashdot.com.html
|
232
163
|
- lib/loofah.rb
|
233
164
|
- lib/loofah/elements.rb
|
234
165
|
- lib/loofah/helpers.rb
|
@@ -241,31 +172,20 @@ files:
|
|
241
172
|
- lib/loofah/metahelpers.rb
|
242
173
|
- lib/loofah/scrubber.rb
|
243
174
|
- lib/loofah/scrubbers.rb
|
175
|
+
- lib/loofah/version.rb
|
244
176
|
- lib/loofah/xml/document.rb
|
245
177
|
- lib/loofah/xml/document_fragment.rb
|
246
|
-
- test/assets/msword.html
|
247
|
-
- test/assets/testdata_sanitizer_tests1.dat
|
248
|
-
- test/helper.rb
|
249
|
-
- test/html5/test_sanitizer.rb
|
250
|
-
- test/html5/test_scrub.rb
|
251
|
-
- test/integration/test_ad_hoc.rb
|
252
|
-
- test/integration/test_helpers.rb
|
253
|
-
- test/integration/test_html.rb
|
254
|
-
- test/integration/test_scrubbers.rb
|
255
|
-
- test/integration/test_xml.rb
|
256
|
-
- test/unit/test_api.rb
|
257
|
-
- test/unit/test_encoding.rb
|
258
|
-
- test/unit/test_helpers.rb
|
259
|
-
- test/unit/test_scrubber.rb
|
260
|
-
- test/unit/test_scrubbers.rb
|
261
178
|
homepage: https://github.com/flavorjones/loofah
|
262
179
|
licenses:
|
263
180
|
- MIT
|
264
|
-
metadata:
|
181
|
+
metadata:
|
182
|
+
homepage_uri: https://github.com/flavorjones/loofah
|
183
|
+
source_code_uri: https://github.com/flavorjones/loofah
|
184
|
+
bug_tracker_uri: https://github.com/flavorjones/loofah/issues
|
185
|
+
changelog_uri: https://github.com/flavorjones/loofah/blob/main/CHANGELOG.md
|
186
|
+
documentation_uri: https://www.rubydoc.info/gems/loofah/
|
265
187
|
post_install_message:
|
266
|
-
rdoc_options:
|
267
|
-
- "--main"
|
268
|
-
- README.md
|
188
|
+
rdoc_options: []
|
269
189
|
require_paths:
|
270
190
|
- lib
|
271
191
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -279,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
279
199
|
- !ruby/object:Gem::Version
|
280
200
|
version: '0'
|
281
201
|
requirements: []
|
282
|
-
rubygems_version: 3.
|
202
|
+
rubygems_version: 3.3.7
|
283
203
|
signing_key:
|
284
204
|
specification_version: 4
|
285
205
|
summary: Loofah is a general library for manipulating and transforming HTML/XML documents
|
data/.gemtest
DELETED
File without changes
|
data/Gemfile
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# -*- ruby -*-
|
2
|
-
|
3
|
-
# DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake bundler:gemfile`.
|
4
|
-
|
5
|
-
source "https://rubygems.org/"
|
6
|
-
|
7
|
-
gem "nokogiri", ">=1.5.9"
|
8
|
-
gem "crass", "~>1.0.2"
|
9
|
-
|
10
|
-
gem "rake", ">=0.8", :group => [:development, :test]
|
11
|
-
gem "minitest", "~>2.2", :group => [:development, :test]
|
12
|
-
gem "rr", "~>1.2.0", :group => [:development, :test]
|
13
|
-
gem "json", ">=0", :group => [:development, :test]
|
14
|
-
gem "hoe-gemspec", ">=0", :group => [:development, :test]
|
15
|
-
gem "hoe-debugging", ">=0", :group => [:development, :test]
|
16
|
-
gem "hoe-bundler", ">=0", :group => [:development, :test]
|
17
|
-
gem "hoe-git", ">=0", :group => [:development, :test]
|
18
|
-
gem "concourse", ">=0.26.0", :group => [:development, :test]
|
19
|
-
gem "rdoc", ">=4.0", "<7", :group => [:development, :test]
|
20
|
-
gem "hoe", "~>3.17", :group => [:development, :test]
|
21
|
-
|
22
|
-
# vim: syntax=ruby
|
data/Manifest.txt
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
.gemtest
|
2
|
-
CHANGELOG.md
|
3
|
-
Gemfile
|
4
|
-
MIT-LICENSE.txt
|
5
|
-
Manifest.txt
|
6
|
-
README.md
|
7
|
-
Rakefile
|
8
|
-
SECURITY.md
|
9
|
-
benchmark/benchmark.rb
|
10
|
-
benchmark/fragment.html
|
11
|
-
benchmark/helper.rb
|
12
|
-
benchmark/www.slashdot.com.html
|
13
|
-
lib/loofah.rb
|
14
|
-
lib/loofah/elements.rb
|
15
|
-
lib/loofah/helpers.rb
|
16
|
-
lib/loofah/html/document.rb
|
17
|
-
lib/loofah/html/document_fragment.rb
|
18
|
-
lib/loofah/html5/libxml2_workarounds.rb
|
19
|
-
lib/loofah/html5/safelist.rb
|
20
|
-
lib/loofah/html5/scrub.rb
|
21
|
-
lib/loofah/instance_methods.rb
|
22
|
-
lib/loofah/metahelpers.rb
|
23
|
-
lib/loofah/scrubber.rb
|
24
|
-
lib/loofah/scrubbers.rb
|
25
|
-
lib/loofah/xml/document.rb
|
26
|
-
lib/loofah/xml/document_fragment.rb
|
27
|
-
test/assets/msword.html
|
28
|
-
test/assets/testdata_sanitizer_tests1.dat
|
29
|
-
test/helper.rb
|
30
|
-
test/html5/test_sanitizer.rb
|
31
|
-
test/html5/test_scrub.rb
|
32
|
-
test/integration/test_ad_hoc.rb
|
33
|
-
test/integration/test_helpers.rb
|
34
|
-
test/integration/test_html.rb
|
35
|
-
test/integration/test_scrubbers.rb
|
36
|
-
test/integration/test_xml.rb
|
37
|
-
test/unit/test_api.rb
|
38
|
-
test/unit/test_encoding.rb
|
39
|
-
test/unit/test_helpers.rb
|
40
|
-
test/unit/test_scrubber.rb
|
41
|
-
test/unit/test_scrubbers.rb
|
data/Rakefile
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
require "rubygems"
|
2
|
-
require "hoe"
|
3
|
-
require "concourse"
|
4
|
-
|
5
|
-
Hoe.plugin :git
|
6
|
-
Hoe.plugin :gemspec
|
7
|
-
Hoe.plugin :bundler
|
8
|
-
Hoe.plugin :debugging
|
9
|
-
|
10
|
-
Hoe.spec "loofah" do
|
11
|
-
developer "Mike Dalessio", "mike.dalessio@gmail.com"
|
12
|
-
developer "Bryan Helmkamp", "bryan@brynary.com"
|
13
|
-
|
14
|
-
self.extra_rdoc_files = FileList["*.md"]
|
15
|
-
self.history_file = "CHANGELOG.md"
|
16
|
-
self.readme_file = "README.md"
|
17
|
-
self.license "MIT"
|
18
|
-
|
19
|
-
extra_deps << ["nokogiri", ">=1.5.9"]
|
20
|
-
extra_deps << ["crass", "~> 1.0.2"]
|
21
|
-
|
22
|
-
extra_dev_deps << ["rake", "~> 12.3"]
|
23
|
-
extra_dev_deps << ["minitest", "~>2.2"]
|
24
|
-
extra_dev_deps << ["rr", "~>1.2.0"]
|
25
|
-
extra_dev_deps << ["json", "~> 2.2.0"]
|
26
|
-
extra_dev_deps << ["hoe-gemspec", "~> 1.0"]
|
27
|
-
extra_dev_deps << ["hoe-debugging", "~> 2.0"]
|
28
|
-
extra_dev_deps << ["hoe-bundler", "~> 1.5"]
|
29
|
-
extra_dev_deps << ["hoe-git", "~> 1.6"]
|
30
|
-
extra_dev_deps << ["concourse", ">=0.26.0"]
|
31
|
-
end
|
32
|
-
|
33
|
-
task :gemspec do
|
34
|
-
system %q(rake debug_gem | grep -v "^\(in " > loofah.gemspec)
|
35
|
-
end
|
36
|
-
|
37
|
-
task :redocs => :fix_css
|
38
|
-
task :docs => :fix_css
|
39
|
-
task :fix_css do
|
40
|
-
better_css = <<-EOT
|
41
|
-
.method-description pre {
|
42
|
-
margin : 1em 0 ;
|
43
|
-
}
|
44
|
-
|
45
|
-
.method-description ul {
|
46
|
-
padding : .5em 0 .5em 2em ;
|
47
|
-
}
|
48
|
-
|
49
|
-
.method-description p {
|
50
|
-
margin-top : .5em ;
|
51
|
-
}
|
52
|
-
|
53
|
-
#main ul, div#documentation ul {
|
54
|
-
list-style-type : disc ! IMPORTANT ;
|
55
|
-
list-style-position : inside ! IMPORTANT ;
|
56
|
-
}
|
57
|
-
|
58
|
-
h2 + ul {
|
59
|
-
margin-top : 1em;
|
60
|
-
}
|
61
|
-
EOT
|
62
|
-
puts "* fixing css"
|
63
|
-
File.open("doc/rdoc.css", "a") { |f| f.write better_css }
|
64
|
-
end
|
65
|
-
|
66
|
-
desc "generate and upload docs to rubyforge"
|
67
|
-
task :doc_upload_to_rubyforge => :docs do
|
68
|
-
Dir.chdir "doc" do
|
69
|
-
system "rsync -avz --delete * rubyforge.org:/var/www/gforge-projects/loofah/loofah"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
desc "generate safelists from W3C specifications"
|
74
|
-
task :generate_safelists do
|
75
|
-
load "tasks/generate-safelists"
|
76
|
-
end
|
77
|
-
|
78
|
-
Concourse.new("loofah", fly_target: "ci") do |c|
|
79
|
-
c.add_pipeline "loofah", "loofah.yml"
|
80
|
-
c.add_pipeline "loofah-pr", "loofah-pr.yml"
|
81
|
-
end
|
data/benchmark/benchmark.rb
DELETED
@@ -1,149 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require "#{File.dirname(__FILE__)}/helper.rb"
|
3
|
-
|
4
|
-
def compare_scrub_methods
|
5
|
-
snip = "<div>foo</div><foo>fuxx <b>quux</b></foo><script>i have a chair</script>"
|
6
|
-
puts "starting with:\n#{snip}"
|
7
|
-
puts
|
8
|
-
puts RailsSanitize.new.sanitize(snip) # => Rails.sanitize / scrub!(:prune).to_s
|
9
|
-
puts Loofah::Helpers.sanitize(snip)
|
10
|
-
puts "--"
|
11
|
-
puts RailsSanitize.new.strip_tags(snip) # => Rails.strip_tags / parse().text
|
12
|
-
puts Loofah::Helpers.strip_tags(snip)
|
13
|
-
puts "--"
|
14
|
-
puts Sanitize.clean(snip, Sanitize::Config::RELAXED) # => scrub!(:strip).to_s
|
15
|
-
puts Loofah.scrub_fragment(snip, :strip).to_s
|
16
|
-
puts "--"
|
17
|
-
puts HTML5libSanitize.new.sanitize(snip) # => scrub!(:escape).to_s
|
18
|
-
puts Loofah.scrub_fragment(snip, :escape).to_s
|
19
|
-
puts "--"
|
20
|
-
puts HTMLFilter.new.filter(snip)
|
21
|
-
puts Loofah.scrub_fragment(snip, :strip).to_s
|
22
|
-
puts
|
23
|
-
end
|
24
|
-
|
25
|
-
module TestSet
|
26
|
-
def test_set options={}
|
27
|
-
scale = options[:rehearse] ? 10 : 1
|
28
|
-
puts self.class.name
|
29
|
-
|
30
|
-
n = 100 / scale
|
31
|
-
puts " Large document, #{BIG_FILE.length} bytes (x#{n})"
|
32
|
-
bench BIG_FILE, n, false
|
33
|
-
puts
|
34
|
-
|
35
|
-
n = 1000 / scale
|
36
|
-
puts " Small fragment, #{FRAGMENT.length} bytes (x#{n})"
|
37
|
-
bench FRAGMENT, n, true
|
38
|
-
puts
|
39
|
-
|
40
|
-
n = 10_000 / scale
|
41
|
-
puts " Text snippet, #{SNIPPET.length} bytes (x#{n})"
|
42
|
-
bench SNIPPET, n, true
|
43
|
-
puts
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class HeadToHead < Measure
|
48
|
-
end
|
49
|
-
|
50
|
-
class HeadToHeadRailsSanitize < Measure
|
51
|
-
include TestSet
|
52
|
-
def bench(content, ntimes, fragment_p)
|
53
|
-
clear_measure
|
54
|
-
|
55
|
-
measure "Loofah::Helpers.sanitize", ntimes do
|
56
|
-
Loofah::Helpers.sanitize content
|
57
|
-
end
|
58
|
-
|
59
|
-
sanitizer = RailsSanitize.new
|
60
|
-
measure "ActionView sanitize", ntimes do
|
61
|
-
sanitizer.sanitize(content)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
class HeadToHeadRailsStripTags < Measure
|
67
|
-
include TestSet
|
68
|
-
def bench(content, ntimes, fragment_p)
|
69
|
-
clear_measure
|
70
|
-
|
71
|
-
measure "Loofah::Helpers.strip_tags", ntimes do
|
72
|
-
Loofah::Helpers.strip_tags content
|
73
|
-
end
|
74
|
-
|
75
|
-
sanitizer = RailsSanitize.new
|
76
|
-
measure "ActionView strip_tags", ntimes do
|
77
|
-
sanitizer.strip_tags(content)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class HeadToHeadSanitizerSanitize < Measure
|
83
|
-
include TestSet
|
84
|
-
def bench(content, ntimes, fragment_p)
|
85
|
-
clear_measure
|
86
|
-
|
87
|
-
measure "Loofah :strip", ntimes do
|
88
|
-
if fragment_p
|
89
|
-
Loofah.scrub_fragment(content, :strip).to_s
|
90
|
-
else
|
91
|
-
Loofah.scrub_document(content, :strip).to_s
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
measure "Sanitize.clean", ntimes do
|
96
|
-
Sanitize.clean(content, Sanitize::Config::RELAXED)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
class HeadToHeadHtml5LibSanitize < Measure
|
102
|
-
include TestSet
|
103
|
-
def bench(content, ntimes, fragment_p)
|
104
|
-
clear_measure
|
105
|
-
|
106
|
-
measure "Loofah :escape", ntimes do
|
107
|
-
if fragment_p
|
108
|
-
Loofah.scrub_fragment(content, :escape).to_s
|
109
|
-
else
|
110
|
-
Loofah.scrub_document(content, :escape).to_s
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
html5_sanitizer = HTML5libSanitize.new
|
115
|
-
measure "HTML5lib.sanitize", ntimes do
|
116
|
-
html5_sanitizer.sanitize(content)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
class HeadToHeadHTMLFilter < Measure
|
122
|
-
include TestSet
|
123
|
-
def bench(content, ntimes, fragment_p)
|
124
|
-
clear_measure
|
125
|
-
|
126
|
-
measure "Loofah::Helpers.sanitize", ntimes do
|
127
|
-
Loofah::Helpers.sanitize content
|
128
|
-
end
|
129
|
-
|
130
|
-
sanitizer = HTMLFilter.new
|
131
|
-
measure "HTMLFilter.filter", ntimes do
|
132
|
-
sanitizer.filter(content)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
puts "Nokogiri version: #{Nokogiri::VERSION_INFO.inspect}"
|
138
|
-
puts "Loofah version: #{Loofah::VERSION.inspect}"
|
139
|
-
|
140
|
-
benches = []
|
141
|
-
benches << HeadToHeadRailsSanitize.new
|
142
|
-
benches << HeadToHeadRailsStripTags.new
|
143
|
-
benches << HeadToHeadSanitizerSanitize.new
|
144
|
-
benches << HeadToHeadHtml5LibSanitize.new
|
145
|
-
benches << HeadToHeadHTMLFilter.new
|
146
|
-
puts "---------- rehearsal ----------"
|
147
|
-
benches.each { |bench| bench.test_set :rehearse => true }
|
148
|
-
puts "---------- realsies ----------"
|
149
|
-
benches.each { |bench| bench.test_set }
|
data/benchmark/fragment.html
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
<div id="top_parent"></div>
|
2
|
-
|
3
|
-
<div id="jump">
|
4
|
-
<a href="#main-articles">Stories</a>
|
5
|
-
<br>
|
6
|
-
<a href="#blocks">Slash Boxes</a>
|
7
|
-
<br>
|
8
|
-
<a href="#comments">Comments</a>
|
9
|
-
</div>
|
10
|
-
<a name="topothepage"></a>
|
11
|
-
<div id="doc3" class="yui-t6 index2 mainpage ac ">
|
12
|
-
<div id="hd" >
|
13
|
-
<div id="logo" >
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
<h1><a href="//slashdot.org"><span>Slashdot</span></a></h1>
|
18
|
-
<div id="slogan"><h2>News for nerds, stuff that matters</h2></div>
|
19
|
-
</div>
|
20
|
-
<a href="#articles" class="hidden">Jump to articles</a>
|
21
|
-
<div class="nav">
|
22
|
-
<ul>
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
<li><a href="//slashdot.org/submit.pl" title="Submit a story to Slashdot">Submit Story</a></li>
|
27
|
-
<li><a href="//slashdot.org/help" title="Frequently asked questions on Slashdot">Help</a></li>
|
28
|
-
<li><a href="//slashdot.org/login.pl" onclick="show_login_box(); return false;">Log In</a></li>
|
29
|
-
|
30
|
-
</ul>
|
31
|
-
</div>
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
<div id="fh_picker_search" style="display: block;">
|
38
|
-
<form method="get" action="//slashdot.org/index2.pl">
|
39
|
-
<fieldset class="mode-filter mode-anon">
|
40
|
-
<legend>Search</legend>
|
41
|
-
|
42
|
-
|
43
|
-
<input class="query" type="text" name="fhfilter" value="" id="searchquery"> <input type="button" class="setfhfilter" value="Filter" id="viewsearch" style="display:none"> <input type="submit" class="setsearchfilter" value="Search" id="fhsearch" style="display:none">
|
44
|
-
<noscript><input type="submit" class="setsearchfilter" value="Search"></noscript>
|
45
|
-
|
46
|
-
<script type="text/javascript">
|
47
|
-
var slash_search;
|
48
|
-
$(function(){
|
49
|
-
if (has_hose()) {
|
50
|
-
var $search_text = $any('searchquery'),
|
51
|
-
$panel = $search_text.closest('fieldset');
|
52
|
-
$search_buttons = $('#viewsearch,#fhsearch'),
|
53
|
-
ws = /\s+/;
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
// The search buttons set the firehose option named by their class.
|
58
|
-
$search_buttons.
|
59
|
-
click(function(){
|
60
|
-
var which=this.className;
|
61
|
-
$search_text.each(function(){
|
62
|
-
firehose_set_options(which, this.value);
|
63
|
-
});
|
64
|
-
return false;
|
65
|
-
});
|
66
|
-
|
67
|
-
// Provide a globally available function that does whatever clicking the search button would do.
|
68
|
-
slash_search = function( query ){
|
69
|
-
query!==undefined && $search_text.val(query);
|
70
|
-
$search_buttons.filter(':visible:first').click();
|
71
|
-
};
|
72
|
-
|
73
|
-
$search_text.
|
74
|
-
keydown(function( e ){ // ESCAPE restores the filter in-effect.
|
75
|
-
if ( e.which == $.ui.keyCode.ESCAPE ) {
|
76
|
-
$search_text.val(firehose_settings.fhfilter||'');
|
77
|
-
return true;
|
78
|
-
}
|
79
|
-
if ( e.which == $.ui.keyCode.ENTER ) {
|
80
|
-
slash_search();
|
81
|
-
return false;
|
82
|
-
}
|
83
|
-
});
|
84
|
-
|
85
|
-
$(document).
|
86
|
-
bind('firehose-setting-setfhfilter firehose-setting-setsearchfilter', function( e, new_query ){
|
87
|
-
$('fieldset input[type=text]').each(function(){
|
88
|
-
$(this).blur().val(new_query);
|
89
|
-
});
|
90
|
-
}).
|
91
|
-
bind('set-options.firehose', function( e, data ){
|
92
|
-
data.select_section && $panel.toggleClass('mode-filter', data.id!=='unsaved');
|
93
|
-
});
|
94
|
-
}
|
95
|
-
});
|
96
|
-
</script>
|