htmlcompressor 0.1.2 → 0.2.0

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/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.2.1
3
4
  - 2.1.1
4
5
  - 2.0.0
5
6
  - 1.9.3
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 0.2.0 - 32/03/2015
2
+ Remove warnings in ruby 2.2
3
+ Support for custom html templates
4
+ Disable remove_http_protocol by default in the middleware
1
5
  0.1.2 - 04/09/2014
2
6
  Preserve custom attributes similar to simple attributes, such as ng-disabled (fixes #12)
3
7
  0.1.1 - 08/05/2014
data/README.md CHANGED
@@ -22,62 +22,81 @@ Using the compressor class is straightforward:
22
22
  The compressor ships with basic and safe default options that may be overwritten passing the options hash to the constructor:
23
23
 
24
24
  ```ruby
25
- options = {
26
- :enabled => true,
27
- :remove_multi_spaces => true,
28
- :remove_comments => true,
29
- :remove_intertag_spaces => false,
30
- :remove_quotes => false,
31
- :compress_css => false,
32
- :compress_javascript => false,
33
- :simple_doctype => false,
34
- :remove_script_attributes => false,
35
- :remove_style_attributes => false,
36
- :remove_link_attributes => false,
37
- :remove_form_attributes => false,
38
- :remove_input_attributes => false,
39
- :remove_javascript_protocol => false,
40
- :remove_http_protocol => false,
41
- :remove_https_protocol => false,
42
- :preserve_line_breaks => false,
43
- :simple_boolean_attributes => false
44
- }
25
+ options = {
26
+ :enabled => true,
27
+ :remove_multi_spaces => true,
28
+ :remove_comments => true,
29
+ :remove_intertag_spaces => false,
30
+ :remove_quotes => false,
31
+ :compress_css => false,
32
+ :compress_javascript => false,
33
+ :simple_doctype => false,
34
+ :remove_script_attributes => false,
35
+ :remove_style_attributes => false,
36
+ :remove_link_attributes => false,
37
+ :remove_form_attributes => false,
38
+ :remove_input_attributes => false,
39
+ :remove_javascript_protocol => false,
40
+ :remove_http_protocol => false,
41
+ :remove_https_protocol => false,
42
+ :preserve_line_breaks => false,
43
+ :simple_boolean_attributes => false,
44
+ :compress_js_templates => false
45
+ }
45
46
  ```
46
47
 
47
48
  Using rack middleware is as easy as:
48
49
 
49
50
  ```ruby
50
- config.middleware.use HtmlCompressor::Rack, options
51
+ config.middleware.use HtmlCompressor::Rack, options
51
52
  ```
52
53
 
53
54
  The middleware uses a little more aggressive options by default:
54
55
 
55
56
  ```ruby
56
- options = {
57
- :enabled => true,
58
- :remove_multi_spaces => true,
59
- :remove_comments => true,
60
- :remove_intertag_spaces => false,
61
- :remove_quotes => true,
62
- :compress_css => false,
63
- :compress_javascript => false,
64
- :simple_doctype => false,
65
- :remove_script_attributes => true,
66
- :remove_style_attributes => true,
67
- :remove_link_attributes => true,
68
- :remove_form_attributes => false,
69
- :remove_input_attributes => true,
70
- :remove_javascript_protocol => true,
71
- :remove_http_protocol => true,
72
- :remove_https_protocol => false,
73
- :preserve_line_breaks => false,
74
- :simple_boolean_attributes => true
75
- }
57
+ options = {
58
+ :enabled => true,
59
+ :remove_multi_spaces => true,
60
+ :remove_comments => true,
61
+ :remove_intertag_spaces => false,
62
+ :remove_quotes => true,
63
+ :compress_css => false,
64
+ :compress_javascript => false,
65
+ :simple_doctype => false,
66
+ :remove_script_attributes => true,
67
+ :remove_style_attributes => true,
68
+ :remove_link_attributes => true,
69
+ :remove_form_attributes => false,
70
+ :remove_input_attributes => true,
71
+ :remove_javascript_protocol => true,
72
+ :remove_http_protocol => false,
73
+ :remove_https_protocol => false,
74
+ :preserve_line_breaks => false,
75
+ :simple_boolean_attributes => true
76
+ }
76
77
  ```
77
78
 
78
79
  Rails 2.3 users may need to add
79
80
  ```ruby
80
- require 'htmlcompressor'
81
+ require 'htmlcompressor'
82
+ ```
83
+
84
+ ## Javascript template compression
85
+
86
+ You can compress javascript templates that are present in the html.
87
+ Setting the `:compress_js_templates` options to `true` will by default compress the content of script tags marked with `type="text/x-jquery-tmpl"`.
88
+ For compressing other types of templates, you can pass a string (or an array of strings) containing the type: `:compress_js_templates => ['text/html']`.
89
+ Please note that activating template compression will disable the removal of quotes from attributes values, as this could lead to unexpected errors with compiled templates.
90
+
91
+
92
+ ## Custom preservation rules
93
+
94
+ If you need to define custom preservation rules, you can list regular expressions in the `preserve_patterns` option. For example, to preserve PHP blocks you might want to define:
95
+
96
+ ```ruby
97
+ options = {
98
+ :preserve_patterns => [/<\?php.*?\?>/im]
99
+ }
81
100
  ```
82
101
 
83
102
  ## CSS and JavaScript Compression
@@ -87,48 +106,46 @@ In order to minify in page javascript and css, you need to supply a compressor i
87
106
  A compressor can be `:yui` or `:closure` or any object that responds to `:compress`. E.g.: `compressed = compressor.compress(source)`
88
107
 
89
108
  ```ruby
109
+ class MyCompressor
90
110
 
91
- class MyCompressor
92
-
93
- def compress(source)
94
- return 'minified'
95
- end
96
-
111
+ def compress(source)
112
+ return 'minified'
97
113
  end
98
114
 
99
- options = {
100
- :compress_css => true,
101
- :css_compressor => MyCompressor.new,
102
- :compress_javascript => true,
103
- :javascript_compressor => MyCompressor.new
104
- }
115
+ end
105
116
 
117
+ options = {
118
+ :compress_css => true,
119
+ :css_compressor => MyCompressor.new,
120
+ :compress_javascript => true,
121
+ :javascript_compressor => MyCompressor.new
122
+ }
106
123
  ```
107
124
 
108
125
  Please note that in order to use yui or closure compilers you need to manually add them to the Gemfile
109
126
 
110
127
  ```ruby
111
- gem 'yui-compressor'
128
+ gem 'yui-compressor'
112
129
 
113
- ...
130
+ ...
114
131
 
115
- options = {
116
- :compress_javscript => true,
117
- :javascript_compressor => :yui,
118
- :compress_css => true
119
- :css_compressor => :yui
120
- }
132
+ options = {
133
+ :compress_javascript => true,
134
+ :javascript_compressor => :yui,
135
+ :compress_css => true
136
+ :css_compressor => :yui
137
+ }
121
138
  ```
122
139
 
123
140
  ```ruby
124
- gem 'closure-compiler'
141
+ gem 'closure-compiler'
125
142
 
126
- ...
143
+ ...
127
144
 
128
- options = {
129
- :compress_javascript => true,
130
- :javascript_compressor => :closure
131
- }
145
+ options = {
146
+ :compress_javascript => true,
147
+ :javascript_compressor => :closure
148
+ }
132
149
  ```
133
150
 
134
151
  ## Statistics
@@ -128,15 +128,28 @@ module HtmlCompressor
128
128
  :preserve_line_breaks => false,
129
129
  :remove_surrounding_spaces => nil,
130
130
 
131
- :preserve_patterns => nil,
132
- :javascript_compressor => nil,
133
- :css_compressor => nil
131
+ :preserve_patterns => nil
134
132
  }
135
133
 
136
134
  def initialize(options = {})
137
135
 
138
136
  @options = DEFAULT_OPTIONS.merge(options)
139
137
 
138
+ if @options[:compress_js_templates]
139
+ @options[:remove_quotes] = false
140
+
141
+ js_template_types = [ 'text/x-jquery-tmpl' ]
142
+
143
+ unless @options[:compress_js_templates].is_a? TrueClass
144
+ js_template_types << @options[:compress_js_templates]
145
+ js_template_types.flatten!
146
+ end
147
+
148
+ @options[:js_template_types] = js_template_types
149
+ else
150
+ @options[:js_template_types] = []
151
+ end
152
+
140
153
  detect_external_compressors
141
154
  end
142
155
 
@@ -314,7 +327,7 @@ module HtmlCompressor
314
327
  scriptBlocks << group_2
315
328
  index += 1
316
329
  group_1 + message_format(TEMP_SCRIPT_BLOCK, index) + group_3
317
- elsif type == 'text/x-jquery-tmpl'
330
+ elsif @options[:js_template_types].include?(type)
318
331
  # jquery template, ignore so it gets compressed with the rest of html
319
332
  match
320
333
  else
@@ -17,7 +17,7 @@ module HtmlCompressor
17
17
  :remove_form_attributes => false,
18
18
  :remove_input_attributes => true,
19
19
  :remove_javascript_protocol => true,
20
- :remove_http_protocol => true,
20
+ :remove_http_protocol => false,
21
21
  :remove_https_protocol => false,
22
22
  :preserve_line_breaks => false,
23
23
  :simple_boolean_attributes => true
@@ -1,3 +1,3 @@
1
1
  module HtmlCompressor
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -11,7 +11,8 @@ module HtmlCompressor
11
11
  compressor = Compressor.new(
12
12
  :compress_javascript => true,
13
13
  :javascript_compressor => :closure,
14
- :remove_intertag_spaces => true
14
+ :remove_intertag_spaces => true,
15
+ :compress_js_templates => true
15
16
  )
16
17
 
17
18
  assert_equal result, compressor.compress(source)
@@ -82,7 +82,7 @@ module HtmlCompressor
82
82
  source = read_resource("testCompress.html")
83
83
  result = read_resource("testCompressResult.html")
84
84
 
85
- compressor = Compressor.new
85
+ compressor = Compressor.new(:compress_js_templates => true)
86
86
 
87
87
  assert_equal result, compressor.compress(source)
88
88
  end
@@ -207,6 +207,13 @@ module HtmlCompressor
207
207
  assert_equal result, compressor.compress(source)
208
208
  end
209
209
 
210
+ def test_compress_custom_html_templates
211
+ source = read_resource("testCompressCustomHtmlTemplates.html")
212
+ result = read_resource("testCompressCustomHtmlTemplatesResult.html")
213
+ compressor = Compressor.new(:compress_js_templates => ['text/html'], :remove_quotes => true)
214
+ assert_equal result, compressor.compress(source)
215
+ end
216
+
210
217
  end
211
218
 
212
219
  end
@@ -11,7 +11,8 @@ module HtmlCompressor
11
11
  compressor = Compressor.new(
12
12
  :compress_javascript => true,
13
13
  :javascript_compressor => :yui,
14
- :remove_intertag_spaces => true
14
+ :remove_intertag_spaces => true,
15
+ :compress_js_templates => true
15
16
  )
16
17
 
17
18
  assert_equal result, compressor.compress(source)
@@ -0,0 +1 @@
1
+ <script type="text/html"> <a attribute="value"> <!-- comment --> <b> </script>
@@ -0,0 +1 @@
1
+ <script type="text/html"> <a attribute="value"> <b> </script>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: htmlcompressor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
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: 2014-09-04 00:00:00.000000000 Z
12
+ date: 2015-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yui-compressor
@@ -156,6 +156,8 @@ files:
156
156
  - test/resources/html/testCompress.html
157
157
  - test/resources/html/testCompressCss.html
158
158
  - test/resources/html/testCompressCssResult.html
159
+ - test/resources/html/testCompressCustomHtmlTemplates.html
160
+ - test/resources/html/testCompressCustomHtmlTemplatesResult.html
159
161
  - test/resources/html/testCompressJavaScript.html
160
162
  - test/resources/html/testCompressJavaScriptClosureResult.html
161
163
  - test/resources/html/testCompressJavaScriptYuiResult.html
@@ -233,7 +235,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
233
235
  version: '0'
234
236
  segments:
235
237
  - 0
236
- hash: 3074038532829615995
238
+ hash: 472079073096694576
237
239
  required_rubygems_version: !ruby/object:Gem::Requirement
238
240
  none: false
239
241
  requirements:
@@ -242,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
244
  version: '0'
243
245
  segments:
244
246
  - 0
245
- hash: 3074038532829615995
247
+ hash: 472079073096694576
246
248
  requirements: []
247
249
  rubyforge_project:
248
250
  rubygems_version: 1.8.25
@@ -311,6 +313,8 @@ test_files:
311
313
  - test/resources/html/testCompress.html
312
314
  - test/resources/html/testCompressCss.html
313
315
  - test/resources/html/testCompressCssResult.html
316
+ - test/resources/html/testCompressCustomHtmlTemplates.html
317
+ - test/resources/html/testCompressCustomHtmlTemplatesResult.html
314
318
  - test/resources/html/testCompressJavaScript.html
315
319
  - test/resources/html/testCompressJavaScriptClosureResult.html
316
320
  - test/resources/html/testCompressJavaScriptYuiResult.html