html-minifier 3.5.3 → 3.5.7

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.
package/README.md CHANGED
@@ -20,21 +20,21 @@ For lint-like capabilities take a look at [HTMLLint](https://github.com/kangax/h
20
20
 
21
21
  How does HTMLMinifier compare to other solutions — [HTML Minifier from Will Peavy](http://www.willpeavy.com/minifier/) (1st result in [Google search for "html minifier"](https://www.google.com/#q=html+minifier)) as well as [htmlcompressor.com](http://htmlcompressor.com) and [minimize](https://github.com/Swaagie/minimize)?
22
22
 
23
- | Site | Original size *(KB)* | HTMLMinifier | minimize | Will Peavy | htmlcompressor.com |
24
- | --------------------------------------------------------------------------- |:--------------------:| ------------:| --------:| ----------:| ------------------:|
25
- | [Google](https://www.google.com/) | 45 | **42** | 45 | 46 | 45 |
26
- | [HTMLMinifier](https://github.com/kangax/html-minifier) | 131 | **102** | 110 | 114 | 109 |
27
- | [CNN](http://www.cnn.com/) | 134 | **122** | 131 | 132 | 126 |
28
- | [Amazon](http://www.amazon.co.uk/) | 201 | **169** | 193 | 197 | n/a |
29
- | [New York Times](http://www.nytimes.com/) | 216 | **144** | 165 | 161 | 151 |
30
- | [Stack Overflow](http://stackoverflow.com/) | 240 | **187** | 196 | 203 | 193 |
31
- | [Bootstrap CSS](http://getbootstrap.com/css/) | 272 | **260** | 269 | 229 | 269 |
32
- | [BBC](http://www.bbc.co.uk/) | 287 | **235** | 279 | 286 | 271 |
33
- | [Wikipedia](https://en.wikipedia.org/wiki/President_of_the_United_States) | 530 | **486** | 511 | 529 | 510 |
34
- | [NBC](http://www.nbc.com/) | 662 | **623** | 658 | 661 | n/a |
35
- | [Eloquent Javascript](http://eloquentjavascript.net/1st_edition/print.html) | 870 | **815** | 840 | 864 | n/a |
36
- | [ES6 table](http://kangax.github.io/compat-table/es6/) | 3844 | **3252** | 3630 | n/a | n/a |
37
- | [ES6 draft](https://tc39.github.io/ecma262/) | 5576 | **4974** | 5122 | n/a | n/a |
23
+ | Site | Original size *(KB)* | HTMLMinifier | minimize | Will Peavy | htmlcompressor.com |
24
+ | ---------------------------------------------------------------------------- |:--------------------:| ------------:| --------:| ----------:| ------------------:|
25
+ | [Google](https://www.google.com/) | 46 | **43** | 46 | 48 | 46 |
26
+ | [HTMLMinifier](https://github.com/kangax/html-minifier) | 134 | **104** | 112 | 117 | 112 |
27
+ | [New York Times](https://www.nytimes.com/) | 209 | **140** | 159 | 158 | 147 |
28
+ | [Stack Overflow](https://stackoverflow.com/) | 252 | **197** | 207 | 215 | 204 |
29
+ | [BBC](https://www.bbc.co.uk/) | 260 | **213** | 252 | 259 | 245 |
30
+ | [Bootstrap CSS](https://getbootstrap.com/docs/3.3/css/) | 272 | **260** | 269 | 229 | 269 |
31
+ | [Twitter](https://twitter.com/) | 333 | **248** | 297 | 326 | 297 |
32
+ | [Wikipedia](https://en.wikipedia.org/wiki/President_of_the_United_States) | 466 | **435** | 451 | 465 | 450 |
33
+ | [Amazon](https://www.amazon.co.uk/) | 476 | **409** | 462 | 466 | n/a |
34
+ | [NBC](https://www.nbc.com/) | 625 | **595** | 622 | 625 | n/a |
35
+ | [Eloquent Javascript](https://eloquentjavascript.net/1st_edition/print.html) | 870 | **815** | 840 | 864 | n/a |
36
+ | [ES6 table](https://kangax.github.io/compat-table/es6/) | 4174 | **3538** | 3944 | n/a | n/a |
37
+ | [ES6 draft](https://tc39.github.io/ecma262/) | 5717 | **5101** | 5250 | n/a | n/a |
38
38
 
39
39
  ## Options Quick Reference
40
40
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "html-minifier",
3
3
  "description": "Highly configurable, well-tested, JavaScript-based HTML minifier.",
4
- "version": "3.5.3",
4
+ "version": "3.5.7",
5
5
  "keywords": [
6
6
  "cli",
7
7
  "compress",
@@ -56,24 +56,24 @@
56
56
  "dependencies": {
57
57
  "camel-case": "3.0.x",
58
58
  "clean-css": "4.1.x",
59
- "commander": "2.11.x",
59
+ "commander": "2.12.x",
60
60
  "he": "1.1.x",
61
61
  "ncname": "1.0.x",
62
62
  "param-case": "2.1.x",
63
63
  "relateurl": "0.2.x",
64
- "uglify-js": "3.0.x"
64
+ "uglify-js": "3.2.x"
65
65
  },
66
66
  "devDependencies": {
67
67
  "grunt": "1.0.x",
68
- "grunt-browserify": "5.0.x",
69
- "grunt-contrib-uglify": "3.0.x",
68
+ "grunt-browserify": "5.2.x",
69
+ "grunt-contrib-uglify": "3.1.x",
70
70
  "gruntify-eslint": "4.0.x",
71
71
  "phantomjs-prebuilt": "2.1.x",
72
72
  "qunitjs": "2.x"
73
73
  },
74
74
  "benchmarkDependencies": {
75
75
  "brotli": "1.3.x",
76
- "chalk": "2.0.x",
76
+ "chalk": "2.3.x",
77
77
  "cli-table": "0.3.x",
78
78
  "lzma": "2.3.x",
79
79
  "minimize": "2.1.x",
@@ -8,20 +8,16 @@ var TokenChain = require('./tokenchain');
8
8
  var UglifyJS = require('uglify-js');
9
9
  var utils = require('./utils');
10
10
 
11
- var trimWhitespace = String.prototype.trim ? function(str) {
11
+ function trimWhitespace(str) {
12
12
  if (typeof str !== 'string') {
13
13
  return str;
14
14
  }
15
- return str.trim();
16
- } : function(str) {
17
- if (typeof str !== 'string') {
18
- return str;
19
- }
20
- return str.replace(/^\s+/, '').replace(/\s+$/, '');
21
- };
15
+ return str.replace(/^[ \n\r\t\f]+/, '').replace(/[ \n\r\t\f]+$/, '');
16
+ }
22
17
 
23
18
  function collapseWhitespaceAll(str) {
24
- return str && str.replace(/\s+/g, function(spaces) {
19
+ // Non-breaking space is specifically handled inside the replacer function here:
20
+ return str && str.replace(/[ \n\r\t\f\xA0]+/g, function(spaces) {
25
21
  return spaces === '\t' ? '\t' : spaces.replace(/(^|\xA0+)[^\xA0]+/g, '$1 ');
26
22
  });
27
23
  }
@@ -30,17 +26,18 @@ function collapseWhitespace(str, options, trimLeft, trimRight, collapseAll) {
30
26
  var lineBreakBefore = '', lineBreakAfter = '';
31
27
 
32
28
  if (options.preserveLineBreaks) {
33
- str = str.replace(/^\s*?[\n\r]\s*/, function() {
29
+ str = str.replace(/^[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*/, function() {
34
30
  lineBreakBefore = '\n';
35
31
  return '';
36
- }).replace(/\s*?[\n\r]\s*$/, function() {
32
+ }).replace(/[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*$/, function() {
37
33
  lineBreakAfter = '\n';
38
34
  return '';
39
35
  });
40
36
  }
41
37
 
42
38
  if (trimLeft) {
43
- str = str.replace(/^\s+/, function(spaces) {
39
+ // Non-breaking space is specifically handled inside the replacer function here:
40
+ str = str.replace(/^[ \n\r\t\f\xA0]+/, function(spaces) {
44
41
  var conservative = !lineBreakBefore && options.conservativeCollapse;
45
42
  if (conservative && spaces === '\t') {
46
43
  return '\t';
@@ -50,7 +47,8 @@ function collapseWhitespace(str, options, trimLeft, trimRight, collapseAll) {
50
47
  }
51
48
 
52
49
  if (trimRight) {
53
- str = str.replace(/\s+$/, function(spaces) {
50
+ // Non-breaking space is specifically handled inside the replacer function here:
51
+ str = str.replace(/[ \n\r\t\f\xA0]+$/, function(spaces) {
54
52
  var conservative = !lineBreakAfter && options.conservativeCollapse;
55
53
  if (conservative && spaces === '\t') {
56
54
  return '\t';
@@ -285,7 +283,7 @@ function cleanAttributeValue(tag, attrName, attrValue, options, attrs) {
285
283
  attrValue = trimWhitespace(attrValue);
286
284
  if (attrValue) {
287
285
  if (/;$/.test(attrValue) && !/&#?[0-9a-zA-Z]+;$/.test(attrValue)) {
288
- attrValue = attrValue.replace(/\s*;$/, '');
286
+ attrValue = attrValue.replace(/\s*;$/, ';');
289
287
  }
290
288
  attrValue = unwrapInlineCSS(options.minifyCSS(wrapInlineCSS(attrValue)));
291
289
  }
@@ -1253,7 +1251,7 @@ function minify(value, options, partialMarkup) {
1253
1251
  return collapseWhitespace(chunk, {
1254
1252
  preserveLineBreaks: options.preserveLineBreaks,
1255
1253
  conservativeCollapse: !options.trimCustomFragments
1256
- }, /^\s/.test(chunk), /\s$/.test(chunk));
1254
+ }, /^[ \n\r\t\f]/.test(chunk), /[ \n\r\t\f]$/.test(chunk));
1257
1255
  }
1258
1256
  return chunk;
1259
1257
  });
package/src/htmlparser.js CHANGED
@@ -70,7 +70,7 @@ var inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,co
70
70
 
71
71
  // Elements that you can, intentionally, leave open
72
72
  // (and which close themselves)
73
- var closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
73
+ var closeSelf = makeMap('colgroup,dd,dt,li,option,p,td,tfoot,th,thead,tr,source');
74
74
 
75
75
  // Attributes that have their values filled in disabled='disabled'
76
76
  var fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected');
@@ -270,7 +270,7 @@ function HTMLParser(html, handler) {
270
270
  parseEndTag('', lastTag);
271
271
  }
272
272
 
273
- if (!handler.html5) {
273
+ if (!handler.html5 && !inline(tagName)) {
274
274
  while (lastTag && inline(lastTag)) {
275
275
  parseEndTag('', lastTag);
276
276
  }