From: Jakub Pawlowicz Date: Tue, 10 Jan 2017 11:05:27 +0000 (+0100) Subject: Allows `all` shortcut in level 1 optimizations config. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=eb230acdecd4557798c4ef326471300455777937;p=clean-css.git Allows `all` shortcut in level 1 optimizations config. Why: * To enable/disable all options at once; * note non-boolean options are ignored when `all` / `*` is used. --- diff --git a/lib/options/optimization-level.js b/lib/options/optimization-level.js index 0ed1c700..d54d090a 100644 --- a/lib/options/optimization-level.js +++ b/lib/options/optimization-level.js @@ -97,6 +97,16 @@ function optimizationLevelFrom(source) { level[Zero] = override(level[Zero], source[Zero]); } + if (One in source && ALL_KEYWORD_1 in source[One]) { + level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1]))); + delete source[One][ALL_KEYWORD_1]; + } + + if (One in source && ALL_KEYWORD_2 in source[One]) { + level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2]))); + delete source[One][ALL_KEYWORD_2]; + } + if (One in source || Two in source) { level[One] = override(level[One], source[One]); } else { @@ -127,7 +137,9 @@ function defaults(level, value) { var key; for (key in options) { - options[key] = value; + if (typeof options[key] == 'boolean') { + options[key] = value; + } } return options; diff --git a/test/optimizer/level-1/optimize-test.js b/test/optimizer/level-1/optimize-test.js index f2a1fa8f..ac7d6ee4 100644 --- a/test/optimizer/level-1/optimize-test.js +++ b/test/optimizer/level-1/optimize-test.js @@ -1163,4 +1163,12 @@ vows.describe('level 1 optimizations') ] }, { level: { 1: { tidySelectors: false } } }) ) + .addBatch( + optimizerContext('all optimizations off via `all` keyword', { + 'stays as it is': [ + '.block > .another-block{animation-duration:500ms;font:"Arial";margin:010px}', + '.block > .another-block{animation-duration:500ms;font:"Arial";margin:010px}' + ] + }, { level: { 1: { all: false } } }) + ) .export(module); diff --git a/test/options/optimization-level-test.js b/test/options/optimization-level-test.js index 6c5fc804..932e7ba1 100644 --- a/test/options/optimization-level-test.js +++ b/test/options/optimization-level-test.js @@ -193,7 +193,75 @@ vows.describe(optimizationLevelFrom) }); } }, - 'a hash with all keyword': { + 'a hash with all keyword for level 1': { + 'topic': function () { + return optimizationLevelFrom({ 1: { all: false, cleanupCharsets: true } }); + }, + 'has all options': function (levelOptions) { + assert.deepEqual(Object.keys(levelOptions), ['0', '1']); + }, + 'has level 0 options': function (levelOptions) { + assert.deepEqual(levelOptions['0'], {}); + }, + 'has level 1 options': function (levelOptions) { + assert.deepEqual(levelOptions['1'], { + cleanupCharsets: true, + normalizeUrls: false, + optimizeBackground: false, + optimizeBorderRadius: false, + optimizeFilter: false, + optimizeFont: false, + optimizeFontWeight: false, + optimizeOutline: false, + removeNegativePaddings: false, + removeQuotes: false, + removeWhitespace: false, + replaceMultipleZeros: false, + replaceTimeUnits: false, + replaceZeroUnits: false, + roundingPrecision: roundingPrecisionFrom(undefined), + specialComments: 'all', + tidyAtRules: false, + tidyBlockScopes: false, + tidySelectors: false + }); + } + }, + 'a hash with * keyword for level 1': { + 'topic': function () { + return optimizationLevelFrom({ 1: { '*': false, cleanupCharsets: true } }); + }, + 'has all options': function (levelOptions) { + assert.deepEqual(Object.keys(levelOptions), ['0', '1']); + }, + 'has level 0 options': function (levelOptions) { + assert.deepEqual(levelOptions['0'], {}); + }, + 'has level 1 options': function (levelOptions) { + assert.deepEqual(levelOptions['1'], { + cleanupCharsets: true, + normalizeUrls: false, + optimizeBackground: false, + optimizeBorderRadius: false, + optimizeFilter: false, + optimizeFont: false, + optimizeFontWeight: false, + optimizeOutline: false, + removeNegativePaddings: false, + removeQuotes: false, + removeWhitespace: false, + replaceMultipleZeros: false, + replaceTimeUnits: false, + replaceZeroUnits: false, + roundingPrecision: roundingPrecisionFrom(undefined), + specialComments: 'all', + tidyAtRules: false, + tidyBlockScopes: false, + tidySelectors: false + }); + } + }, + 'a hash with all keyword for level 2': { 'topic': function () { return optimizationLevelFrom({ 1: { specialComments: 0 }, 2: { all: false, mediaMerging: true } }); }, @@ -241,7 +309,7 @@ vows.describe(optimizationLevelFrom) }); } }, - 'a hash with * keyword': { + 'a hash with * keyword for level 2': { 'topic': function () { return optimizationLevelFrom({ 1: { specialComments: 0 }, 2: { '*': false, mediaMerging: true } }); },