From: alexlamsl Date: Sun, 17 Apr 2016 08:46:33 +0000 (+0800) Subject: minify srcset X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=50e61f5592e2e7726a467ebc4396266a9de26082;p=html-minifier.git minify srcset fixes #635 --- diff --git a/src/htmlminifier.js b/src/htmlminifier.js index 71726b4..15fbdd5 100644 --- a/src/htmlminifier.js +++ b/src/htmlminifier.js @@ -257,6 +257,12 @@ function isCanonicalURL(tag, attrs) { } } +var srcsetTags = createMapFromString('img,source'); + +function isSrcset(attrName, tag) { + return attrName === 'srcset' && srcsetTags(tag); +} + var fnPrefix = '!function(){'; var fnSuffix = '}();'; @@ -299,6 +305,26 @@ function cleanAttributeValue(tag, attrName, attrValue, options, attrs) { } return attrValue; } + else if (isSrcset(attrName, tag)) { + // https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset + attrValue = trimWhitespace(attrValue).split(/\s+,\s*|\s*,\s+/).map(function(candidate) { + var url = candidate; + var descriptor = ''; + var match = candidate.match(/\s+([1-9][0-9]*w|[0-9]+(?:\.[0-9]+)?x)$/); + if (match) { + url = url.slice(0, -match[0].length); + var num = +match[1].slice(0, -1); + var suffix = match[1].slice(-1); + if (num !== 1 || suffix !== 'x') { + descriptor = ' ' + num + suffix; + } + } + if (options.minifyURLs) { + url = minifyURLs(url, options.minifyURLs); + } + return url + descriptor; + }).join(', '); + } else if (isMetaViewport(tag, attrs) && attrName === 'content') { attrValue = attrValue.replace(/\s+/g, '').replace(/[0-9]+\.[0-9]+/g, function(numString) { // "0.90000" -> "0.9" diff --git a/tests/minifier.js b/tests/minifier.js index c3df1b1..6fb0efe 100644 --- a/tests/minifier.js +++ b/tests/minifier.js @@ -1836,6 +1836,19 @@ test('url attribute minification', function() { minifyCSS: true, minifyURLs: { site: 'http://website.com/foo bar/' } }), output); + + input = ''; + output = ''; + equal(minify(input, { minifyURLs: { site: 'http://site.com/' } }), output); +}); + +test('srcset attribute minification', function() { + input = ''; + output = ''; + equal(minify(input), output); + output = ''; + equal(minify(input, { minifyURLs: { site: 'http://site.com/' } }), output); }); test('valueless attributes', function() {