From: alexlamsl Date: Thu, 14 Apr 2016 15:35:53 +0000 (+0800) Subject: minify URLs within CSS X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=2a4d3560f1b0b145319a466fe695031aab17fb67;p=html-minifier.git minify URLs within CSS fixes #535 --- diff --git a/src/htmlminifier.js b/src/htmlminifier.js index b8a9ec8..1c16cd2 100644 --- a/src/htmlminifier.js +++ b/src/htmlminifier.js @@ -295,7 +295,7 @@ function cleanAttributeValue(tag, attrName, attrValue, options, attrs) { attrValue = attrValue.replace(/\s*;$/, ''); } if (options.minifyCSS) { - return minifyCSS(attrValue, options.minifyCSS, true); + return minifyStyles(attrValue, options, true); } return attrValue; } @@ -663,6 +663,15 @@ function minifyCSS(text, options, inline) { } } +function minifyStyles(text, options, inline) { + if (options.minifyURLs) { + text = text.replace(/(url\s*\(\s*)("|'|)(.*?)\2(\s*\))/ig, function(match, prefix, quote, url, suffix) { + return prefix + quote + minifyURLs(url, options.minifyURLs) + quote + suffix; + }); + } + return minifyCSS(text, options.minifyCSS, inline); +} + function uniqueId(value) { var id; do { @@ -1077,7 +1086,7 @@ function minify(value, options, partialMarkup) { } } if (options.minifyCSS && isStyleSheet(currentTag, currentAttrs)) { - text = minifyCSS(text, options.minifyCSS); + text = minifyStyles(text, options); } if (options.removeOptionalTags && text) { // may be omitted if first thing inside is not comment diff --git a/tests/minifier.js b/tests/minifier.js index a052d91..9ec6310 100644 --- a/tests/minifier.js +++ b/tests/minifier.js @@ -535,34 +535,34 @@ test('remove CDATA sections from scripts/styles', function() { output = ''; equal(minify(input, { minifyJS: true }), output); - input = ''; + input = ''; equal(minify(input), input); - output = ''; + output = ''; equal(minify(input, { minifyCSS: true }), output); - input = ''; + input = ''; equal(minify(input), input); - output = ''; + output = ''; equal(minify(input, { minifyCSS: true }), output); - input = ''; + input = ''; equal(minify(input), input); - output = ''; + output = ''; equal(minify(input, { minifyCSS: true }), output); - input = ''; + input = ''; equal(minify(input), input); - output = ''; + output = ''; equal(minify(input, { minifyCSS: true }), output); - input = ''; + input = ''; equal(minify(input), input); - output = ''; + output = ''; equal(minify(input, { minifyCSS: true }), output); - input = ''; + input = ''; equal(minify(input), input); - output = ''; + output = ''; equal(minify(input, { minifyCSS: true }), output); input = ''; @@ -1761,12 +1761,30 @@ test('style attribute minification', function() { test('url attribute minification', function() { input = '
link
'; output = '
link
'; - equal(minify(input, { minifyURLs: { site: 'http://website.com/folder/' } }), output); input = ''; + equal(minify(input, { minifyURLs: { site: 'http://website.com/' } }), input); + input = ''; equal(minify(input, { minifyURLs: { site: 'http://website.com/' } }), input); + output = ''; + equal(minify(input, { minifyCSS: true }), output); + output = ''; + equal(minify(input, { + minifyCSS: true, + minifyURLs: { site: 'http://website.com/' } + }), output); + + input = ''; + equal(minify(input, { minifyURLs: { site: 'http://website.com/foo bar/' } }), input); + output = ''; + equal(minify(input, { minifyCSS: true }), output); + output = ''; + equal(minify(input, { + minifyCSS: true, + minifyURLs: { site: 'http://website.com/foo bar/' } + }), output); }); test('valueless attributes', function() { @@ -1938,7 +1956,7 @@ test('ignore', function() { '
\n test foo \n\n
'; output = '
\n test foo \n\n
' + - '
test foo
'; + '
test foo
'; equal(minify(input, { collapseWhitespace: true }), output);