html_press 0.0.4 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +9 -0
- data/Rakefile +9 -0
- data/Readme.md +21 -10
- data/html_press.gemspec +1 -1
- data/lib/html_press/css_press.rb +21 -0
- data/lib/html_press/html.rb +40 -12
- data/lib/html_press/version.rb +1 -1
- data/lib/html_press.rb +10 -4
- data/spec/html_press_spec.rb +99 -82
- metadata +21 -14
- data/lib/html_press/rainpress.rb +0 -12
data/.travis.yml
ADDED
data/Rakefile
CHANGED
data/Readme.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#html_press
|
2
2
|
|
3
3
|
## how it works
|
4
|
-
|
4
|
+
|
5
5
|
Remove all whitespace junk. Leave only HTML
|
6
6
|
|
7
7
|
```
|
@@ -36,7 +36,7 @@ module Jekyll
|
|
36
36
|
def render(context)
|
37
37
|
text = super
|
38
38
|
before = text.bytesize
|
39
|
-
text = HtmlPress.
|
39
|
+
text = HtmlPress.press text
|
40
40
|
after = text.bytesize
|
41
41
|
|
42
42
|
self.class.total_economy += before - after
|
@@ -68,6 +68,25 @@ bundle install
|
|
68
68
|
bundle exec jekyll
|
69
69
|
```
|
70
70
|
|
71
|
+
## Additional tools
|
72
|
+
|
73
|
+
- https://github.com/aberant/css-spriter
|
74
|
+
- https://github.com/sstephenson/sprockets
|
75
|
+
- https://github.com/documentcloud/jammit
|
76
|
+
- https://github.com/cjohansen/juicer
|
77
|
+
- https://github.com/alexdunae/w3c_validators
|
78
|
+
|
79
|
+
## TODO
|
80
|
+
|
81
|
+
- check if all utf-8 symbols, are smaller than html entities
|
82
|
+
- ambigious ampersands
|
83
|
+
- bin
|
84
|
+
- Support other minifiers (Closure, YUI compressor)
|
85
|
+
- htmlTydi
|
86
|
+
- add examples of usage with Sinatra and Rails
|
87
|
+
- https://github.com/gfranco/jeanny
|
88
|
+
- https://github.com/aanand/deadweight
|
89
|
+
|
71
90
|
## Alternatives
|
72
91
|
|
73
92
|
###Ruby
|
@@ -80,11 +99,3 @@ bundle exec jekyll
|
|
80
99
|
- http://code.google.com/p/htmlcompressor/
|
81
100
|
- smarty `strip` tag
|
82
101
|
- W3 total cache (WP plugin from smashingmagazine contains html minifier)
|
83
|
-
|
84
|
-
## TODO
|
85
|
-
|
86
|
-
- options
|
87
|
-
- bin
|
88
|
-
- Support other minifiers (Closure, YUI compressor)
|
89
|
-
- htmlTydi
|
90
|
-
- add examples of usage with Sinatra and Rails
|
data/html_press.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_development_dependency "rspec"
|
24
24
|
s.add_development_dependency "rake"
|
25
25
|
|
26
|
-
s.add_runtime_dependency "
|
26
|
+
s.add_runtime_dependency "css_press"
|
27
27
|
s.add_runtime_dependency "uglifier"
|
28
28
|
s.add_runtime_dependency "htmlentities"
|
29
29
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module HtmlPress
|
2
|
+
begin
|
3
|
+
require 'css_press'
|
4
|
+
def self.css_compressor (text)
|
5
|
+
text = "a{#{text}}"
|
6
|
+
text = CssPress.press text
|
7
|
+
text.gsub(/^a\{/, '').gsub!(/\}$/, '')
|
8
|
+
end
|
9
|
+
def self.style_compressor (text)
|
10
|
+
CssPress.press text
|
11
|
+
end
|
12
|
+
rescue LoadError => e
|
13
|
+
def self.css_compressor (text)
|
14
|
+
text
|
15
|
+
end
|
16
|
+
def self.style_compressor (text)
|
17
|
+
text
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/lib/html_press/html.rb
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
module HtmlPress
|
2
2
|
class Html
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
DEFAULTS = {
|
5
|
+
:logger => false,
|
6
|
+
:unquoted_attributes => false,
|
7
|
+
:dump_empty_values => false
|
8
|
+
}
|
9
|
+
|
10
|
+
def initialize (options = {})
|
11
|
+
@options = DEFAULTS.merge(options)
|
6
12
|
end
|
7
13
|
|
8
14
|
def log (text)
|
9
|
-
if
|
10
|
-
@options[:logger].
|
15
|
+
if @options[:logger] && @options[:logger].respond_to?(:call)
|
16
|
+
@options[:logger].call text
|
11
17
|
end
|
12
18
|
end
|
13
19
|
|
14
|
-
def
|
20
|
+
def press (html)
|
15
21
|
|
16
|
-
out = html
|
22
|
+
out = html.respond_to?(:read) ? html.read : html.dup
|
17
23
|
|
18
24
|
@replacement_hash = 'MINIFYHTML' + Time.now.to_i.to_s
|
19
25
|
@placeholders = []
|
@@ -46,7 +52,7 @@ module HtmlPress
|
|
46
52
|
m.gsub!(/^\s+|\s+$/, '')
|
47
53
|
css = m.gsub(/\s*<style\b[^>]*?>([\s\S]*?)<\/style>\s*/i, "\\1")
|
48
54
|
begin
|
49
|
-
css_compressed = HtmlPress.
|
55
|
+
css_compressed = HtmlPress.style_compressor css
|
50
56
|
m.gsub!(css, css_compressed)
|
51
57
|
rescue Exception => e
|
52
58
|
log e.message
|
@@ -80,7 +86,6 @@ module HtmlPress
|
|
80
86
|
end
|
81
87
|
|
82
88
|
# trim each line.
|
83
|
-
# @todo take into account attribute values that span multiple lines.
|
84
89
|
out.gsub!(/^\s+|\s+$/m, '')
|
85
90
|
|
86
91
|
re = '\\s+(<\\/?(?:area|base(?:font)?|blockquote|body' +
|
@@ -218,15 +223,38 @@ module HtmlPress
|
|
218
223
|
value_original.gsub!(/^\s+|\s+$/, "")
|
219
224
|
end
|
220
225
|
|
221
|
-
|
222
|
-
|
223
|
-
|
226
|
+
events = %w[onfocus onblur onselect onchange onclick
|
227
|
+
ondblclick onmousedown onmouseup onmouseover onmousemove
|
228
|
+
onmouseout onkeypress onkeydown onkeyup]
|
229
|
+
|
230
|
+
if events.include? name
|
231
|
+
value_original.gsub! /^javascript:\s+/, ''
|
232
|
+
value_original = HtmlPress.js_compressor value_original
|
233
|
+
if delimiter == "\""
|
234
|
+
value_original.gsub! "\"", "'"
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
if value_original.size == 0
|
239
|
+
#attribute without value may be dropped by IE7
|
240
|
+
if @options[:dump_empty_values]
|
241
|
+
attribute = name_original
|
242
|
+
else
|
243
|
+
attribute = name_original + "=" + delimiter + delimiter
|
244
|
+
end
|
245
|
+
elsif @options[:unquoted_attributes] && !(value_original =~ /[ \t\r\n\f"'`=<>]/)
|
246
|
+
attribute = name_original + "=" + value_original
|
247
|
+
else
|
248
|
+
attribute = name_original + "=" + delimiter + value_original + delimiter
|
249
|
+
end
|
224
250
|
|
225
|
-
attribute = name_original + "=" + delimiter + value_original + delimiter
|
226
251
|
end
|
227
252
|
|
228
253
|
attribute
|
229
254
|
end
|
230
255
|
|
256
|
+
# for backward compatibility
|
257
|
+
alias :compile :press
|
258
|
+
|
231
259
|
end
|
232
260
|
end
|
data/lib/html_press/version.rb
CHANGED
data/lib/html_press.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
require "html_press/version"
|
2
|
-
require "html_press/
|
2
|
+
require "html_press/css_press"
|
3
3
|
require "html_press/uglifier"
|
4
4
|
require "html_press/html_entities"
|
5
5
|
require "html_press/html"
|
6
6
|
|
7
7
|
module HtmlPress
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
def self.press(text, options = {})
|
9
|
+
HtmlPress::Html.new(options).press text
|
10
|
+
end
|
11
|
+
|
12
|
+
# for backward compatibility
|
13
|
+
def self.compress(text, options = {})
|
14
|
+
HtmlPress::Html.new(options).press text
|
15
|
+
end
|
16
|
+
|
11
17
|
end
|
data/spec/html_press_spec.rb
CHANGED
@@ -3,12 +3,12 @@
|
|
3
3
|
require_relative "../lib/html_press"
|
4
4
|
|
5
5
|
class Lg
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
class << self
|
7
|
+
@warns = []
|
8
|
+
attr_accessor :warns
|
9
|
+
def log text
|
10
|
+
Lg.warns.push text
|
11
|
+
end
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -17,144 +17,143 @@ describe HtmlPress do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should leave only one whitespace between inline tags" do
|
20
|
-
HtmlPress.
|
20
|
+
HtmlPress.press("<p>lorem <b>ipsum</b> <i>dolor</i> </p>").should eql "<p>lorem <b>ipsum</b> <i>dolor</i></p>"
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should leave no whitespaces between block tags" do
|
24
|
-
HtmlPress.
|
25
|
-
HtmlPress.
|
24
|
+
HtmlPress.press("<div></div> \t\r\n <div></div>").should eql "<div></div><div></div>"
|
25
|
+
HtmlPress.press("<div> <div> \t\r\n </div> </div>").should eql "<div><div></div></div>"
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should leave only one whitespace in text" do
|
29
|
-
HtmlPress.
|
29
|
+
HtmlPress.press("<p>a a</p>").should eql "<p>a a</p>"
|
30
30
|
end
|
31
31
|
|
32
32
|
it "should leave newlines in pre tags and remove trailing spaces" do
|
33
|
-
HtmlPress.
|
34
|
-
HtmlPress.
|
33
|
+
HtmlPress.press("<pre>a \t </pre>").should eql "<pre>a</pre>"
|
34
|
+
HtmlPress.press("<pre>qwe \nasd </pre>").should eql "<pre>qwe\nasd</pre>"
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should leave textareas as is" do
|
38
38
|
text = "<textarea> \t </textarea>"
|
39
|
-
HtmlPress.
|
39
|
+
HtmlPress.press(text).should eql text
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should compress js in script tags" do
|
43
43
|
script = " (function(undefined){ \t\n var long_name = ' '; }()) \n \r"
|
44
|
-
|
44
|
+
pressed_script = "<script>" + HtmlPress.js_compressor(script) + "</script>"
|
45
45
|
script = " <script>" + script + "</script> "
|
46
|
-
HtmlPress.
|
46
|
+
HtmlPress.press(script).should eql pressed_script
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should compress css in style tags" do
|
50
50
|
style = " div { margin: 0px 0px; \n} "
|
51
|
-
|
51
|
+
pressed_style = "<style>" + HtmlPress.style_compressor(style) + "</style>"
|
52
52
|
style = " <style>" + style + "</style> "
|
53
|
-
HtmlPress.
|
53
|
+
HtmlPress.press(style).should eql pressed_style
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should remove html comments" do
|
57
|
-
HtmlPress.
|
57
|
+
HtmlPress.press("<p></p><!-- comment --><p></p>").should eql "<p></p><p></p>"
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should leave IE conditional comments" do
|
61
61
|
text = "<!--[if IE]><html class=\"ie\"><![endif]--><div></div>"
|
62
|
-
HtmlPress.
|
62
|
+
HtmlPress.press(text).should eql text
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should work with special utf-8 symbols" do
|
66
|
-
HtmlPress.
|
66
|
+
HtmlPress.press("✪<p></p> <p></p>").should eql "✪<p></p><p></p>"
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should work with tags in upper case" do
|
70
|
-
HtmlPress.
|
70
|
+
HtmlPress.press("<P> </p>").should eql "<P></p>"
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should remove whitespaces between IE conditional comments" do
|
74
74
|
text = "<p></p> <!--[if IE]><html class=\"ie\"> <![endif]--> <!--[if IE]><html class=\"ie1\"><![endif]-->"
|
75
75
|
text2 = "<p></p><!--[if IE]><html class=\"ie\"><![endif]--><!--[if IE]><html class=\"ie1\"><![endif]-->"
|
76
|
-
HtmlPress.
|
76
|
+
HtmlPress.press(text).should eql text2
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should treat text inside IE conditional comments as it was without comments" do
|
80
80
|
text = "<div class=\"a\" id=\"b\"> </div> <p></p>"
|
81
|
-
text2 = HtmlPress.
|
81
|
+
text2 = HtmlPress.press(text)
|
82
82
|
text = "<!--[if IE]>" + text + "<![endif]-->"
|
83
83
|
text2 = "<!--[if IE]>" + text2 + "<![endif]-->"
|
84
|
-
HtmlPress.
|
84
|
+
HtmlPress.press(text).should eql text2
|
85
85
|
text = "<script> (function(undefined){ var a;}()) </script>"
|
86
|
-
text2 = HtmlPress.
|
86
|
+
text2 = HtmlPress.press(text)
|
87
87
|
text = "<!--[if IE]>" + text + "<![endif]-->"
|
88
88
|
text2 = "<!--[if IE]>" + text2 + "<![endif]-->"
|
89
|
-
HtmlPress.
|
89
|
+
HtmlPress.press(text).should eql text2
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should remove unnecessary whitespaces inside tag" do
|
93
|
-
HtmlPress.
|
94
|
-
HtmlPress.
|
95
|
-
HtmlPress.
|
96
|
-
HtmlPress.
|
93
|
+
HtmlPress.press("<p class=\"a\" id=\"b\"></p>").should eql "<p class=\"a\" id=\"b\"></p>"
|
94
|
+
HtmlPress.press("<p class=\"a\" ></p>").should eql "<p class=\"a\"></p>"
|
95
|
+
HtmlPress.press("<img src=\"\" />").should eql "<img src=\"\"/>"
|
96
|
+
HtmlPress.press("<br />").should eql "<br/>"
|
97
97
|
end
|
98
98
|
|
99
99
|
it "should work with 'badly' formatted attributes" do
|
100
|
-
HtmlPress.
|
101
|
-
# HtmlPress.
|
102
|
-
# HtmlPress.
|
100
|
+
HtmlPress.press("<p class='a' id='b'></p>").should eql "<p class='a' id='b'></p>"
|
101
|
+
# HtmlPress.press("<p class = 'a'></p>").should eql "<p class='a'></p>"
|
102
|
+
# HtmlPress.press("<p class = a></p>").should eql "<p class=a></p>"
|
103
103
|
end
|
104
104
|
|
105
105
|
it "should optimize attributes" do
|
106
|
-
HtmlPress.
|
106
|
+
HtmlPress.press("<p class=\"a b\"></p>").should eql "<p class=\"a b\"></p>"
|
107
107
|
# http(s):// to //
|
108
108
|
end
|
109
109
|
|
110
110
|
it "should compress css in style attributes" do
|
111
|
-
HtmlPress.
|
111
|
+
HtmlPress.press("<p style=\"display: none;\"></p>").should eql "<p style=\"display:none\"></p>"
|
112
112
|
end
|
113
113
|
|
114
114
|
it "should work with namespaces" do
|
115
115
|
text = "<html xmlns:og=\"http://ogp.me/ns#\" class=\"a b\"><og:like>like</og:like></html>"
|
116
|
-
HtmlPress.
|
116
|
+
HtmlPress.press(text).should eql text
|
117
117
|
end
|
118
118
|
|
119
119
|
it "should not modify input value" do
|
120
|
-
text = "<div>
|
121
|
-
text1 = text
|
122
|
-
HtmlPress.
|
120
|
+
text = "<div> </div>"
|
121
|
+
text1 = text.dup
|
122
|
+
HtmlPress.press(text).should_not eql text
|
123
123
|
text.should eql text1
|
124
124
|
end
|
125
125
|
|
126
126
|
it "should leave whitespaces inside other attributes" do
|
127
127
|
text = "<a onclick=\"alert(' ')\" unknown_attr=' a a'>a</a>"
|
128
|
-
HtmlPress.
|
128
|
+
HtmlPress.press(text).should eql text
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should report javascript errors" do
|
132
132
|
script_with_error = "<script>function(){</script>"
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
l.warns.size.should eql 1
|
133
|
+
Lg.warns = []
|
134
|
+
HtmlPress.press(script_with_error, {:logger => Lg.method(:log)}).should eql script_with_error
|
135
|
+
Lg.warns.size.should eql 1
|
137
136
|
end
|
138
137
|
|
139
138
|
# it "should report css errors" do
|
140
139
|
# script_with_error = "<style>.clas{margin:</style>"
|
141
140
|
# l = Lg.new
|
142
141
|
# l.warns.size.should eql 0
|
143
|
-
# HtmlPress.
|
142
|
+
# HtmlPress.press(script_with_error, {:logger => l}).should eql script_with_error
|
144
143
|
# l.warns.size.should eql 1
|
145
144
|
# end
|
146
145
|
|
147
146
|
it "should remove values of boolean attributes" do
|
148
|
-
HtmlPress.
|
149
|
-
HtmlPress.
|
150
|
-
HtmlPress.
|
147
|
+
HtmlPress.press("<option selected=\"selected\">a</option>").should eql "<option selected>a</option>"
|
148
|
+
HtmlPress.press("<input type=\"checkbox\" checked=\"checked\"/>").should eql "<input type=\"checkbox\" checked/>"
|
149
|
+
HtmlPress.press("<input type=\"radio\" checked=\"checked\"/>").should eql "<input type=\"radio\" checked/>"
|
151
150
|
# disabled (input, textarea, button, select, option, optgroup)
|
152
|
-
HtmlPress.
|
151
|
+
HtmlPress.press("<input disabled=\"disabled\"/>").should eql "<input disabled/>"
|
153
152
|
# readonly (input type=text/password, textarea)
|
154
|
-
HtmlPress.
|
155
|
-
# HtmlPress.
|
156
|
-
# HtmlPress.
|
157
|
-
# HtmlPress.
|
153
|
+
HtmlPress.press("<input readonly=\"readonly\"/>").should eql "<input readonly/>"
|
154
|
+
# HtmlPress.press("<script src=\"example.com\" async=\"async\"></script>").should eql "<script src=\"example.com\" async></script>"
|
155
|
+
# HtmlPress.press("<script src=\"example.com\" defer=\"defer\"></script>").should eql "<script src=\"example.com\" async></script>"
|
156
|
+
# HtmlPress.press("<select multiple=\"multiple\"/>").should eql "<select multiple/>"
|
158
157
|
# ismap isMap (img, input type=image)
|
159
158
|
# declare (object; never used)
|
160
159
|
# noresize noResize (frame)
|
@@ -164,38 +163,56 @@ describe HtmlPress do
|
|
164
163
|
end
|
165
164
|
|
166
165
|
it "should remove attributes with default values" do
|
167
|
-
# HtmlPress.
|
168
|
-
# HtmlPress.
|
169
|
-
HtmlPress.
|
170
|
-
HtmlPress.
|
171
|
-
HtmlPress.
|
166
|
+
# HtmlPress.press("<script type=\"text/javascript\" language=\"JavaScript\">var a;</script>").should eql "<script>var a;</script>"
|
167
|
+
# HtmlPress.press("<style type=\"text/stylesheet\"></style>").should eql "<style></style>"
|
168
|
+
HtmlPress.press("<link type=\"text/stylesheet\"/>").should eql "<link/>"
|
169
|
+
HtmlPress.press("<form method=\"get\"></form>").should eql "<form></form>"
|
170
|
+
HtmlPress.press("<input type=\"text\"/>").should eql "<input/>"
|
172
171
|
# input value "" ?
|
173
172
|
end
|
174
173
|
|
175
174
|
it "should convert html entities to utf-8 symbols" do
|
176
|
-
HtmlPress.
|
177
|
-
HtmlPress.
|
178
|
-
end
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
175
|
+
HtmlPress.press("< < > > & &").should eql "< < > > & &"
|
176
|
+
HtmlPress.press("élan").should eql "élan"
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should remove unnecessary quotes for attribute values" do
|
180
|
+
HtmlPress.press("<img src=\"\">", {:unquoted_attributes => true}).should eql "<img src=\"\">"
|
181
|
+
HtmlPress.press("<p id=\"a\"></p>", {:unquoted_attributes => true}).should eql "<p id=a></p>"
|
182
|
+
text = "<p id=\"a b\"></p>"
|
183
|
+
HtmlPress.press(text, {:unquoted_attributes => true}).should eql text
|
184
|
+
text = "<p id=\"a=\"></p>"
|
185
|
+
HtmlPress.press(text, {:unquoted_attributes => true}).should eql text
|
186
|
+
text = "<p id=\"a'\"></p>"
|
187
|
+
HtmlPress.press(text, {:unquoted_attributes => true}).should eql text
|
188
|
+
text = "<p id=\"a`\"></p>"
|
189
|
+
HtmlPress.press(text, {:unquoted_attributes => true}).should eql text
|
190
|
+
text = "<p id='a\"'></p>"
|
191
|
+
HtmlPress.press(text, {:unquoted_attributes => true}).should eql text
|
192
|
+
text = "<p id=\"a\t\"></p>"
|
193
|
+
HtmlPress.press(text, {:unquoted_attributes => true}).should eql text
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should remove empty attribute values" do
|
197
|
+
HtmlPress.press("<img src=\"\">", {:dump_empty_values => true}).should eql "<img src>"
|
198
|
+
end
|
199
|
+
|
200
|
+
it "should compress javascript in event attributes" do
|
201
|
+
HtmlPress.press("<a onclick=\"javacript: alert(' ');\"></a>").should eql "<a onclick=\"alert(' ')\"></a>"
|
202
|
+
# onfocus
|
203
|
+
# onblur
|
204
|
+
# onselect
|
205
|
+
# onchange
|
206
|
+
# onclick
|
207
|
+
# ondblclick
|
208
|
+
# onmousedown
|
209
|
+
# onmouseup
|
210
|
+
# onmouseover
|
211
|
+
# onmousemove
|
212
|
+
# onmouseout
|
213
|
+
# onkeypress
|
214
|
+
# onkeydown
|
215
|
+
# onkeyup
|
216
|
+
end
|
200
217
|
|
201
218
|
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.
|
4
|
+
version: 0.6.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-28 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &29725656 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *29725656
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &29725392 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *29725392
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement: &
|
37
|
+
name: css_press
|
38
|
+
requirement: &29725140 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *29725140
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: uglifier
|
49
|
-
requirement: &
|
49
|
+
requirement: &29724876 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *29724876
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: htmlentities
|
60
|
-
requirement: &
|
60
|
+
requirement: &29509596 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *29509596
|
69
69
|
description: Ruby gem for compressing html
|
70
70
|
email:
|
71
71
|
- stereobooster@gmail.com
|
@@ -74,14 +74,15 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- .gitignore
|
77
|
+
- .travis.yml
|
77
78
|
- Gemfile
|
78
79
|
- Rakefile
|
79
80
|
- Readme.md
|
80
81
|
- html_press.gemspec
|
81
82
|
- lib/html_press.rb
|
83
|
+
- lib/html_press/css_press.rb
|
82
84
|
- lib/html_press/html.rb
|
83
85
|
- lib/html_press/html_entities.rb
|
84
|
-
- lib/html_press/rainpress.rb
|
85
86
|
- lib/html_press/uglifier.rb
|
86
87
|
- lib/html_press/version.rb
|
87
88
|
- spec/html_press_spec.rb
|
@@ -97,12 +98,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
97
98
|
- - ! '>='
|
98
99
|
- !ruby/object:Gem::Version
|
99
100
|
version: '0'
|
101
|
+
segments:
|
102
|
+
- 0
|
103
|
+
hash: -37859729
|
100
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
105
|
none: false
|
102
106
|
requirements:
|
103
107
|
- - ! '>='
|
104
108
|
- !ruby/object:Gem::Version
|
105
109
|
version: '0'
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
hash: -37859729
|
106
113
|
requirements: []
|
107
114
|
rubyforge_project: html_press
|
108
115
|
rubygems_version: 1.8.15
|