From c2560046841878404d1f9d8e54a4c0d228b4d3b5 Mon Sep 17 00:00:00 2001 From: Jakub Pawlowicz Date: Mon, 6 Oct 2014 12:07:16 +0100 Subject: [PATCH] Speeds up clean up operations. * Removes function from loop. * Runs optimizations only if needed. --- lib/selectors/optimizers/clean-up.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/selectors/optimizers/clean-up.js b/lib/selectors/optimizers/clean-up.js index 52d1e074..d1a8771c 100644 --- a/lib/selectors/optimizers/clean-up.js +++ b/lib/selectors/optimizers/clean-up.js @@ -1,13 +1,23 @@ +function removeWhitespace(match, value) { + return '[' + value.replace(/ /g, '') + ']'; +} + var CleanUp = { selectors: function (selectors) { var plain = []; for (var i = 0, l = selectors.length; i < l; i++) { - var reduced = selectors[i] - .replace(/\s*([>\+\~])\s*/g, '$1') - .replace(/\*([:#\.\[])/g, '$1') - .replace(/\[([^\]]+)\]/g, function (match, value) { return '[' + value.replace(/\s/g, '') + ']'; }) - .replace(/^(\:first\-child)?\+html/, '*$1+html'); + var selector = selectors[i]; + var reduced = selector.replace(/\s*([>\+\~])\s*/g, '$1'); + + if (selector.indexOf('*') > -1) { + reduced = reduced + .replace(/\*([:#\.\[])/g, '$1') + .replace(/^(\:first\-child)?\+html/, '*$1+html'); + } + + if (selector.indexOf('[') > -1) + reduced = reduced.replace(/\[([^\]]+)\]/g, removeWhitespace); if (plain.indexOf(reduced) == -1) plain.push(reduced); -- 2.34.1