You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.2 KiB
90 lines
2.2 KiB
const isStandardSyntaxProperty = require('./isStandardSyntaxProperty'); |
|
const isCustomProperty = require('./isCustomProperty'); |
|
const isDollarVariable = require('./isDollarVariable'); |
|
const isAtVariable = require('./isAtVariable'); |
|
const calcAtRulePatternPriority = require('./calcAtRulePatternPriority'); |
|
const calcRulePatternPriority = require('./calcRulePatternPriority'); |
|
|
|
module.exports = function getOrderData(expectedOrder, node) { |
|
let nodeType; |
|
|
|
if (isAtVariable(node)) { |
|
nodeType = 'at-variables'; |
|
} else if (node.type === 'decl') { |
|
if (isCustomProperty(node.prop)) { |
|
nodeType = 'custom-properties'; |
|
} else if (isDollarVariable(node.prop)) { |
|
nodeType = 'dollar-variables'; |
|
} else if (isStandardSyntaxProperty(node.prop)) { |
|
nodeType = 'declarations'; |
|
} |
|
} else if (node.type === 'rule') { |
|
nodeType = { |
|
type: 'rule', |
|
selector: node.selector, |
|
}; |
|
|
|
const rules = expectedOrder.rule; |
|
|
|
// Looking for most specified pattern, because it can match many patterns |
|
if (rules && rules.length) { |
|
let prioritizedPattern; |
|
let max = 0; |
|
|
|
rules.forEach(function(pattern) { |
|
const priority = calcRulePatternPriority(pattern, nodeType); |
|
|
|
if (priority > max) { |
|
max = priority; |
|
prioritizedPattern = pattern; |
|
} |
|
}); |
|
|
|
if (max) { |
|
return prioritizedPattern; |
|
} |
|
} |
|
} else if (node.type === 'atrule') { |
|
nodeType = { |
|
type: 'at-rule', |
|
name: node.name, |
|
hasBlock: false, |
|
}; |
|
|
|
if (node.nodes && node.nodes.length) { |
|
nodeType.hasBlock = true; |
|
} |
|
|
|
if (node.params && node.params.length) { |
|
nodeType.parameter = node.params; |
|
} |
|
|
|
const atRules = expectedOrder['at-rule']; |
|
|
|
// Looking for most specified pattern, because it can match many patterns |
|
if (atRules && atRules.length) { |
|
let prioritizedPattern; |
|
let max = 0; |
|
|
|
atRules.forEach(function(pattern) { |
|
const priority = calcAtRulePatternPriority(pattern, nodeType); |
|
|
|
if (priority > max) { |
|
max = priority; |
|
prioritizedPattern = pattern; |
|
} |
|
}); |
|
|
|
if (max) { |
|
return prioritizedPattern; |
|
} |
|
} |
|
} |
|
|
|
if (expectedOrder[nodeType]) { |
|
return expectedOrder[nodeType]; |
|
} |
|
|
|
// Return null if there no patterns for that node |
|
return null; |
|
};
|
|
|