squoosh 0.3.0 → 0.3.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/README.md +14 -5
- data/lib/squoosh.rb +21 -7
- data/lib/squoosh/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8db4818a215da1002e475a6ab271f274448d983ec4f9b90aff346bd08705c6c2
|
4
|
+
data.tar.gz: 3155d597ba38ce21b1fcb59c6550bff5c76fc50b9b8ab63d251588a83448b063
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f4147816e466cfa7b1da925fb064ea65c3fec6ee3e8678b3afd8a2cb41a2fc40bea9825320fe67d3692dccd2ba14ff913f308672a9575d25e07a84f51a33a13
|
7
|
+
data.tar.gz: 693b6d9d3d20fe099926c67b571b53b9955d2ab2d2700c2b8b912b848729d14a6fda0c04fbc29414a08e43aa7efa29b042f45229021ebcc9493710fd771c639d
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ Minifies HTML, JavaScript, and CSS, including inline JavaScript and CSS.
|
|
5
5
|
[](https://travis-ci.org/stevecheckoway/squoosh)
|
7
7
|
|
8
|
-
CSS minification is handled by [
|
8
|
+
CSS minification is handled by [Sassc](http://www.rubydoc.info/gems/sassc)
|
9
9
|
whereas JavaScript minification is handled by
|
10
10
|
[Uglifier](http://www.rubydoc.info/gems/uglifier) which requires node.js.
|
11
11
|
|
@@ -17,7 +17,7 @@ nodes](https://html.spec.whatwg.org/multipage/dom.html#inter-element-whitespace)
|
|
17
17
|
are removed from the DOM and semantically meaningfull runs of whitespace are
|
18
18
|
compressed to single spaces, except in `pre`, `textarea`, and
|
19
19
|
[foreign](https://html.spec.whatwg.org/multipage/syntax.html#elements-2) elements.
|
20
|
-
Then, inline JavaScript and CSS are compressed using
|
20
|
+
Then, inline JavaScript and CSS are compressed using Sassc and Uglifier.
|
21
21
|
Finally, the DOM is serialized, compressing
|
22
22
|
[attributes](https://html.spec.whatwg.org/multipage/syntax.html#attributes-2)
|
23
23
|
where possible and omitting [optional start and end
|
@@ -32,8 +32,17 @@ Squoosh will not minify
|
|
32
32
|
|
33
33
|
- HTML 4 and earlier;
|
34
34
|
- XHTML, any version;
|
35
|
-
- [MathML](https://www.w3.org/TR/MathML3/) elements; nor
|
36
|
-
- [SVG](https://www.w3.org/TR/SVG11/) elements.
|
35
|
+
- spaces in [MathML](https://www.w3.org/TR/MathML3/) elements; nor
|
36
|
+
- spaces in [SVG](https://www.w3.org/TR/SVG11/) elements.
|
37
|
+
|
38
|
+
HTML 4 and XHTML documents (more precisely, any document that does not have an
|
39
|
+
HTML 5 DOCTYPE, typically `<!DOCTYPE html>`) is returned unchanged by
|
40
|
+
`Squoosh::minify_html`.
|
41
|
+
|
42
|
+
MathML and SVG elements have their tags minified (including compressing
|
43
|
+
attributes and serializing empty elements as self-closing start tags) and
|
44
|
+
comments inside them are removed. White space is preserved (except for the
|
45
|
+
newline normalization performed by the HTML 5 parser).
|
37
46
|
|
38
47
|
## Installation
|
39
48
|
|
@@ -54,7 +63,7 @@ Or install it yourself as:
|
|
54
63
|
## Usage
|
55
64
|
|
56
65
|
You can read the documentation
|
57
|
-
[here](https://www.rubydoc.info/
|
66
|
+
[here](https://www.rubydoc.info/gems/squoosh/).
|
58
67
|
|
59
68
|
The three basic minification functions are
|
60
69
|
|
data/lib/squoosh.rb
CHANGED
@@ -96,7 +96,7 @@ module Squoosh
|
|
96
96
|
doc.children.map { |node| stringify_node(node) }.join
|
97
97
|
end
|
98
98
|
|
99
|
-
# Minify CSS using
|
99
|
+
# Minify CSS using Sassc.
|
100
100
|
#
|
101
101
|
# @param content [String] the CSS to minify
|
102
102
|
# @return [String] the minified CSS
|
@@ -248,11 +248,6 @@ module Squoosh
|
|
248
248
|
end
|
249
249
|
end
|
250
250
|
|
251
|
-
def compress_event_handler(content)
|
252
|
-
@event_handler_cache[content] ||= \
|
253
|
-
Uglifier.compile(content, @options[:uglifier_options])
|
254
|
-
end
|
255
|
-
|
256
251
|
def compress_javascript(doc)
|
257
252
|
# Compress script elements.
|
258
253
|
doc.xpath('//script[not(ancestor::math or ancestor::svg)]').each do |node|
|
@@ -340,7 +335,8 @@ module Squoosh
|
|
340
335
|
|
341
336
|
# Add attributes. 8.1.2.3
|
342
337
|
last_attr_unquoted = false
|
343
|
-
node.
|
338
|
+
node.attribute_nodes.each do |attr|
|
339
|
+
name = qualified_attribute_name(attr)
|
344
340
|
last_attr_unquoted = false
|
345
341
|
# Make sure there are no character references.
|
346
342
|
# XXX: We should be able to compress a bit more by leaving bare & in
|
@@ -389,6 +385,24 @@ module Squoosh
|
|
389
385
|
output.string
|
390
386
|
end
|
391
387
|
|
388
|
+
def qualified_attribute_name(attr)
|
389
|
+
ns = attr.namespace
|
390
|
+
return attr.name if ns.nil?
|
391
|
+
|
392
|
+
uri = ns.href
|
393
|
+
if uri == Nokogiri::HTML5::XML_NAMESPACE
|
394
|
+
'xml:' + attr.name
|
395
|
+
elsif uri == Nokogiri::HTML5::XMLNS_NAMESPACE && attr.name == 'xmlns'
|
396
|
+
'xmlns'
|
397
|
+
elsif uri == Nokogiri::HTML5::XMLNS_NAMESPACE
|
398
|
+
'xmlns:' + attr.name
|
399
|
+
elsif uri == Nokogiri::HTML5::XLINK_NAMESPACE
|
400
|
+
'xlink:' + attr.name
|
401
|
+
else
|
402
|
+
raise 'Unreachable!'
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
392
406
|
def self_closing?(node)
|
393
407
|
# If we're not omitting end tags, then don't mark foreign elements as
|
394
408
|
# self closing.
|
data/lib/squoosh/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: squoosh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Checkoway
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -170,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
170
|
- !ruby/object:Gem::Version
|
171
171
|
version: '0'
|
172
172
|
requirements: []
|
173
|
-
rubygems_version: 3.0.
|
173
|
+
rubygems_version: 3.0.6
|
174
174
|
signing_key:
|
175
175
|
specification_version: 4
|
176
176
|
summary: Minify HTML/CSS/JavaScript files.
|