aboutsummaryrefslogtreecommitdiff
path: root/node_modules/csso/lib/compressor/restructure/prepare/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/csso/lib/compressor/restructure/prepare/index.js')
-rw-r--r--node_modules/csso/lib/compressor/restructure/prepare/index.js44
1 files changed, 44 insertions, 0 deletions
diff --git a/node_modules/csso/lib/compressor/restructure/prepare/index.js b/node_modules/csso/lib/compressor/restructure/prepare/index.js
new file mode 100644
index 00000000..075dc5f1
--- /dev/null
+++ b/node_modules/csso/lib/compressor/restructure/prepare/index.js
@@ -0,0 +1,44 @@
+var resolveKeyword = require('../../../utils/names.js').keyword;
+var walkRules = require('../../../utils/walk.js').rules;
+var translate = require('../../../utils/translate.js');
+var createDeclarationIndexer = require('./createDeclarationIndexer.js');
+var processSelector = require('./processSelector.js');
+
+function walk(node, markDeclaration, usageData) {
+ switch (node.type) {
+ case 'Ruleset':
+ node.block.declarations.each(markDeclaration);
+ processSelector(node, usageData);
+ break;
+
+ case 'Atrule':
+ if (node.expression) {
+ node.expression.id = translate(node.expression);
+ }
+
+ // compare keyframe selectors by its values
+ // NOTE: still no clarification about problems with keyframes selector grouping (issue #197)
+ if (resolveKeyword(node.name).name === 'keyframes') {
+ node.block.avoidRulesMerge = true; /* probably we don't need to prevent those merges for @keyframes
+ TODO: need to be checked */
+ node.block.rules.each(function(ruleset) {
+ ruleset.selector.selectors.each(function(simpleselector) {
+ simpleselector.compareMarker = simpleselector.id;
+ });
+ });
+ }
+ break;
+ }
+};
+
+module.exports = function prepare(ast, usageData) {
+ var markDeclaration = createDeclarationIndexer();
+
+ walkRules(ast, function(node) {
+ walk(node, markDeclaration, usageData);
+ });
+
+ return {
+ declaration: markDeclaration
+ };
+};