From: GoalSmashers Date: Fri, 1 Nov 2013 14:11:25 +0000 (+0100) Subject: Adds `--skip-advanced`/`noAdvanced` switch to disable advanced optimizations. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=60603e5fccbc5bc90aaf9818e83a7a8a8aa5ec6e;p=clean-css.git Adds `--skip-advanced`/`noAdvanced` switch to disable advanced optimizations. --- diff --git a/History.md b/History.md index d4c34484..d87ea815 100644 --- a/History.md +++ b/History.md @@ -15,6 +15,7 @@ * Makes all multiple selectors ordered alphabetically (aids merging). * Adds property overriding so more coarse properties override more granular ones. * Adds reducing non-adjacent selectors. +* Adds `--skip-advanced`/`noAdvanced` switch to disable advanced optimizations. 1.1.7 / 2013-10-28 ================== diff --git a/README.md b/README.md index c3b31582..fc66c276 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ cleancss [options] -o, --output [output-file] Use [output-file] as output instead of STDOUT -s, --skip-import Disable @import processing --skip-rebase Disable URLs rebasing +--skip-advanced Disable advanced optimizations - selector & property merging, reduction, etc. --selectors-merge-mode [ie8|*] Use `ie8` for compatibility mode, `*` for merge all (default). -d, --debug Shows debug information (minification time & compression efficiency) ``` @@ -99,6 +100,7 @@ Process method accepts a hash as a second parameter, i.e., * `relativeTo` - path with which to resolve relative `@import` rules and URLs * `processImport` - whether to process `@import` rules * `noRebase` - whether to skip URLs rebasing +* `noAdvanced` - set to true to disable advanced optimizations - selector & property merging, reduction, etc. * `selectorsMergeMode` - `ie8` for IE8 compatibility mode, `*` for merging all (default) ### What are the clean-css' dev commands? diff --git a/bin/cleancss b/bin/cleancss index 7a5aae44..068082cb 100755 --- a/bin/cleancss +++ b/bin/cleancss @@ -23,6 +23,7 @@ commands .option('-o, --output [output-file]', 'Use [output-file] as output instead of STDOUT') .option('-s, --skip-import', 'Disable @import processing') .option('--skip-rebase', 'Disable URLs rebasing') + .option('--skip-advanced', 'Disable advanced optimizations - selector & property merging, reduction, etc.') .option('--selectors-merge-mode [ie8|*]', 'Use `ie8` for compatibility mode, `*` for merge all (default).') .option('-d, --debug', 'Shows debug information (minification time & compression efficiency)'); @@ -70,6 +71,8 @@ if (commands.skipImport) cleanOptions.processImport = false; if (commands.skipRebase) cleanOptions.noRebase = true; +if (commands.skipAdvanced) + cleanOptions.noAdvanced = true; if (commands.selectorsMergeMode) cleanOptions.selectorsMergeMode = commands.selectorsMergeMode; if (commands.debug) diff --git a/lib/clean.js b/lib/clean.js index 11888d1c..ab7084a7 100644 --- a/lib/clean.js +++ b/lib/clean.js @@ -246,13 +246,15 @@ var CleanCSS = { return match.replace(/\+/g, ' + '); }); - replace(function optimizeSelectors() { - data = new SelectorsOptimizer(data, { - keepBreaks: options.keepBreaks, - lineBreak: lineBreak, - selectorsMergeMode: options.selectorsMergeMode - }).process(); - }); + if (!options.noAdvanced) { + replace(function optimizeSelectors() { + data = new SelectorsOptimizer(data, { + keepBreaks: options.keepBreaks, + lineBreak: lineBreak, + selectorsMergeMode: options.selectorsMergeMode + }).process(); + }); + } replace(function restoreUrls() { data = urlsProcessor.restore(data); diff --git a/test/binary-test.js b/test/binary-test.js index d3068936..0a5017ec 100644 --- a/test/binary-test.js +++ b/test/binary-test.js @@ -102,6 +102,11 @@ exports.commandsSuite = vows.describe('binary commands').addBatch({ deleteFile('debug.css'); } }), + 'skip advanced optimizations': pipedContext('a{color:red}p{color:red}', '--skip-advanced', { + 'should do basic optimizations only': function(error, stdout) { + assert.equal(stdout, 'a{color:red}p{color:red}'); + } + }), 'no relative to path': binaryContext('./test/data/partials-absolute/base.css', { 'should not be able to resolve it fully': function(error, stdout) { assert.equal(stdout, ''); diff --git a/test/unit-test.js b/test/unit-test.js index 0fef9fea..c85d78e8 100644 --- a/test/unit-test.js +++ b/test/unit-test.js @@ -1066,6 +1066,9 @@ title']{display:block}", "@import url(/fake.css);" ] }, { processImport: false }), + 'duplicate selectors with disabled advanced processing': cssContext({ + 'of a duplicate selector': 'a,a{color:red}' + }, { noAdvanced: true }), 'duplicate selectors in a list': cssContext({ 'of a duplicate selector': [ 'a,a{color:red}',