Add "ol" and "ul" to nonPhrasing (#889)
authorWei Xu <weixu365@gmail.com>
Fri, 2 Mar 2018 08:28:53 +0000 (19:28 +1100)
committerAlex Lam S.L <alexlamsl@gmail.com>
Fri, 2 Mar 2018 08:28:53 +0000 (16:28 +0800)
fixes #888

src/htmlparser.js
tests/minifier.js

index 0d7814b..59c7408 100644 (file)
@@ -80,7 +80,7 @@ var special = makeMap('script,style');
 
 // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
 // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
-var nonPhrasing = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track');
+var nonPhrasing = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,ol,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track,ul');
 
 var reCache = {};
 
index f0979a5..4df35e5 100644 (file)
@@ -1690,6 +1690,31 @@ QUnit.test('phrasing content', function(assert) {
   assert.equal(minify(input, { html5: true }), input);
 });
 
+// https://github.com/kangax/html-minifier/issues/888
+QUnit.test('ul/ol should be phrasing content', function(assert) {
+  var input, output;
+
+  input = '<p>a<ul><li>item</li></ul>';
+  output = '<p>a</p><ul><li>item</li></ul>';
+  assert.equal(minify(input, { html5: true }), output);
+
+  output = '<p>a<ul><li>item</ul>';
+  assert.equal(minify(input, { html5: true, removeOptionalTags: true }), output);
+
+  output = '<p>a<ul><li>item</li></ul></p>';
+  assert.equal(minify(input, { html5: false }), output);
+
+  input = '<p>a<ol><li>item</li></ol></p>';
+  output = '<p>a</p><ol><li>item</li></ol><p></p>';
+  assert.equal(minify(input, { html5: true }), output);
+
+  output = '<p>a<ol><li>item</ol><p>';
+  assert.equal(minify(input, { html5: true, removeOptionalTags: true }), output);
+
+  output = '<p>a</p><ol><li>item</li></ol>';
+  assert.equal(minify(input, { html5: true, removeEmptyElements: true }), output);
+});
+
 QUnit.test('phrasing content with Web Components', function(assert) {
   var input = '<span><phrasing-element></phrasing-element></span>';
   var output = '<span><phrasing-element></phrasing-element></span>';