html_press 0.8.0 → 0.8.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.
- data/Readme.md +2 -4
- data/html_press.gemspec +26 -26
- data/lib/html_press.rb +23 -18
- data/lib/html_press/html.rb +3 -3
- data/lib/html_press/version.rb +1 -1
- data/spec/html_press_spec.rb +35 -21
- metadata +10 -5
- data/lib/html_press/uglifier.rb +0 -15
data/Readme.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
#html_press
|
1
|
+
# HtmlPress [](https://secure.travis-ci.org/#!/stereobooster/html_press) [](https://gemnasium.com/stereobooster/html_press) [](https://codeclimate.com/github/stereobooster/html_press)
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
## how it works
|
3
|
+
## How it works
|
6
4
|
|
7
5
|
Remove all whitespace junk. Leave only HTML
|
8
6
|
|
data/html_press.gemspec
CHANGED
@@ -1,26 +1,26 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "html_press/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "html_press"
|
7
|
-
s.version = HtmlPress::VERSION
|
8
|
-
s.authors = ["stereobooster"]
|
9
|
-
s.email = ["stereobooster@gmail.com"]
|
10
|
-
s.homepage = "https://github.com/stereobooster/html_press"
|
11
|
-
s.summary = %q{Compress html}
|
12
|
-
s.description = %q{Ruby gem for compressing html}
|
13
|
-
s.license = "MIT"
|
14
|
-
|
15
|
-
s.files = `git ls-files`.split("\n")
|
16
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
-
s.require_paths = ["lib"]
|
19
|
-
|
20
|
-
s.add_development_dependency "rspec"
|
21
|
-
s.add_development_dependency "rake"
|
22
|
-
|
23
|
-
s.add_dependency "multi_css", ">= 0.1.0"
|
24
|
-
s.add_dependency "
|
25
|
-
s.add_dependency "htmlentities"
|
26
|
-
end
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "html_press/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "html_press"
|
7
|
+
s.version = HtmlPress::VERSION
|
8
|
+
s.authors = ["stereobooster"]
|
9
|
+
s.email = ["stereobooster@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/stereobooster/html_press"
|
11
|
+
s.summary = %q{Compress html}
|
12
|
+
s.description = %q{Ruby gem for compressing html}
|
13
|
+
s.license = "MIT"
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_development_dependency "rspec"
|
21
|
+
s.add_development_dependency "rake"
|
22
|
+
|
23
|
+
s.add_dependency "multi_css", ">= 0.1.0"
|
24
|
+
s.add_dependency "multi_js"
|
25
|
+
s.add_dependency "htmlentities"
|
26
|
+
end
|
data/lib/html_press.rb
CHANGED
@@ -1,18 +1,23 @@
|
|
1
|
-
require "html_press/version"
|
2
|
-
require "html_press/
|
3
|
-
require "html_press/
|
4
|
-
|
5
|
-
|
6
|
-
require '
|
7
|
-
|
8
|
-
module HtmlPress
|
9
|
-
def self.press(text, options = {})
|
10
|
-
HtmlPress::Html.new(options).press text
|
11
|
-
end
|
12
|
-
|
13
|
-
# for backward compatibility
|
14
|
-
def self.compress(text, options = {})
|
15
|
-
HtmlPress::Html.new(options).press text
|
16
|
-
end
|
17
|
-
|
18
|
-
|
1
|
+
require "html_press/version"
|
2
|
+
require "html_press/html_entities"
|
3
|
+
require "html_press/html"
|
4
|
+
|
5
|
+
require 'multi_css'
|
6
|
+
require 'multi_js'
|
7
|
+
|
8
|
+
module HtmlPress
|
9
|
+
def self.press(text, options = {})
|
10
|
+
HtmlPress::Html.new(options).press text
|
11
|
+
end
|
12
|
+
|
13
|
+
# for backward compatibility
|
14
|
+
def self.compress(text, options = {})
|
15
|
+
HtmlPress::Html.new(options).press text
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.js_compressor (text, options = nil)
|
19
|
+
options ||= {}
|
20
|
+
options[:inline_script] = true
|
21
|
+
MultiJs.compile(text, options).gsub(/;$/,'')
|
22
|
+
end
|
23
|
+
end
|
data/lib/html_press/html.rb
CHANGED
@@ -74,7 +74,7 @@ module HtmlPress
|
|
74
74
|
begin
|
75
75
|
js_compressed = HtmlPress.js_compressor js, @options[:js_minifier_options]
|
76
76
|
m.gsub!(js, js_compressed)
|
77
|
-
rescue
|
77
|
+
rescue MultiJs::ParseError => e
|
78
78
|
log e.message
|
79
79
|
end
|
80
80
|
reserve m
|
@@ -214,7 +214,7 @@ module HtmlPress
|
|
214
214
|
|
215
215
|
def attr(attribute, delimiter, tag)
|
216
216
|
re = "([a-z\\-_:]+)(=" + delimiter + "[^" + delimiter + "]*" + delimiter + ")?"
|
217
|
-
re = Regexp.new re
|
217
|
+
re = Regexp.new re, true
|
218
218
|
value_original = attribute.gsub(re, "\\2")
|
219
219
|
value = value_original.downcase
|
220
220
|
name_original = attribute.gsub(re, "\\1")
|
@@ -298,7 +298,7 @@ module HtmlPress
|
|
298
298
|
if delimiter == "\""
|
299
299
|
value_original.gsub! "\"", "'"
|
300
300
|
end
|
301
|
-
rescue
|
301
|
+
rescue MultiJs::ParseError => e
|
302
302
|
log e.message
|
303
303
|
end
|
304
304
|
end
|
data/lib/html_press/version.rb
CHANGED
data/spec/html_press_spec.rb
CHANGED
@@ -81,13 +81,20 @@ describe HtmlPress do
|
|
81
81
|
HtmlPress.press(text).should eql text2
|
82
82
|
end
|
83
83
|
|
84
|
-
# TODO concatenate adjacent script tags
|
85
84
|
it "should remove whitespaces between script tags" do
|
86
85
|
text = "<p></p> <script>var a</script> \t <script>var b</script>"
|
87
86
|
text2 = "<p></p> <script>var a</script><script>var b</script>"
|
88
87
|
HtmlPress.press(text).should eql text2
|
89
88
|
end
|
90
89
|
|
90
|
+
it "should concatenate adjacent script tags" do
|
91
|
+
pending "Not implemented yet" do
|
92
|
+
text = "<p></p> <script>var a</script> \t <script>function b(){}</script>"
|
93
|
+
text2 = "<p></p> <script>var a;function b(){}</script>"
|
94
|
+
HtmlPress.press(text).should eql text2
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
91
98
|
it "should treat text inside IE conditional comments as it was without comments" do
|
92
99
|
text = "<div class=\"a\" id=\"b\"> </div> <p></p>"
|
93
100
|
text2 = HtmlPress.press(text)
|
@@ -114,6 +121,11 @@ describe HtmlPress do
|
|
114
121
|
# HtmlPress.press("<p class = a></p>").should eql "<p class=a></p>"
|
115
122
|
end
|
116
123
|
|
124
|
+
it "should work with different case attributes" do
|
125
|
+
text = '<embed allowFullScreen="true" allowScriptAccess="always"/>'
|
126
|
+
HtmlPress.press(text).should eql text
|
127
|
+
end
|
128
|
+
|
117
129
|
it "should optimize attributes" do
|
118
130
|
HtmlPress.press("<p class=\"a b\"></p>").should eql "<p class=\"a b\"></p>"
|
119
131
|
# TODO http(s):// to //
|
@@ -132,12 +144,13 @@ describe HtmlPress do
|
|
132
144
|
HtmlPress.press(text).should eql text
|
133
145
|
end
|
134
146
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
147
|
+
it "should compress namespaces" do
|
148
|
+
pending "Not implemented yet" do
|
149
|
+
text = "<html xmlns:og=\"http://ogp.me/ns#\" class=\"a b\"><og:like>like</og:like></html>"
|
150
|
+
text1 = "<html xmlns:a=\"http://ogp.me/ns#\" class=\"a b\"><a:like>like</a:like></html>"
|
151
|
+
HtmlPress.press(text).should eql text1
|
152
|
+
end
|
153
|
+
end
|
141
154
|
|
142
155
|
it "should not modify input value" do
|
143
156
|
text = "<div> </div>"
|
@@ -175,15 +188,17 @@ describe HtmlPress do
|
|
175
188
|
HtmlPress.press("<input disabled=\"disabled\"/>").should eql "<input disabled/>"
|
176
189
|
# readonly (input type=text/password, textarea)
|
177
190
|
HtmlPress.press("<input readonly=\"readonly\"/>").should eql "<input readonly/>"
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
191
|
+
pending "Not implemented yet" do
|
192
|
+
HtmlPress.press("<script src=\"example.com\" async=\"async\"></script>").should eql "<script src=\"example.com\" async></script>"
|
193
|
+
HtmlPress.press("<script src=\"example.com\" defer=\"defer\"></script>").should eql "<script src=\"example.com\" defer></script>"
|
194
|
+
HtmlPress.press("<select multiple=\"multiple\"/>").should eql "<select multiple/>"
|
195
|
+
# ismap isMap (img, input type=image)
|
196
|
+
# declare (object; never used)
|
197
|
+
# noresize noResize (frame)
|
198
|
+
# nowrap noWrap (td, th; deprecated)
|
199
|
+
# noshade noShade (hr; deprecated)
|
200
|
+
# compact (ul, ol, dl, menu, dir; deprecated)
|
201
|
+
end
|
187
202
|
end
|
188
203
|
|
189
204
|
it "should remove attributes with default values" do
|
@@ -235,9 +250,8 @@ describe HtmlPress do
|
|
235
250
|
end
|
236
251
|
end
|
237
252
|
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
253
|
+
it "should concatenate adjecent style tags" do
|
254
|
+
pending "Not implemented yet"
|
255
|
+
# all stylle tags can be collected, concatneated and placed in header
|
256
|
+
end
|
243
257
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html_press
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 0.1.0
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: multi_js
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
@@ -108,7 +108,6 @@ files:
|
|
108
108
|
- lib/html_press.rb
|
109
109
|
- lib/html_press/html.rb
|
110
110
|
- lib/html_press/html_entities.rb
|
111
|
-
- lib/html_press/uglifier.rb
|
112
111
|
- lib/html_press/version.rb
|
113
112
|
- profile/index.html
|
114
113
|
- profile/profile.rb
|
@@ -126,15 +125,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
125
|
- - ! '>='
|
127
126
|
- !ruby/object:Gem::Version
|
128
127
|
version: '0'
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
hash: 868935485
|
129
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
132
|
none: false
|
131
133
|
requirements:
|
132
134
|
- - ! '>='
|
133
135
|
- !ruby/object:Gem::Version
|
134
136
|
version: '0'
|
137
|
+
segments:
|
138
|
+
- 0
|
139
|
+
hash: 868935485
|
135
140
|
requirements: []
|
136
141
|
rubyforge_project:
|
137
|
-
rubygems_version: 1.8.
|
142
|
+
rubygems_version: 1.8.24
|
138
143
|
signing_key:
|
139
144
|
specification_version: 3
|
140
145
|
summary: Compress html
|
data/lib/html_press/uglifier.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
module HtmlPress
|
2
|
-
begin
|
3
|
-
require 'uglifier'
|
4
|
-
# Available options https://github.com/lautis/uglifier#options
|
5
|
-
def self.js_compressor (text, options = nil)
|
6
|
-
options ||= {}
|
7
|
-
options[:inline_script] = true
|
8
|
-
Uglifier.new(options).compile(text).gsub(/;$/,'')
|
9
|
-
end
|
10
|
-
rescue LoadError => e
|
11
|
-
def self.js_compressor (text, options = nil)
|
12
|
-
text
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|