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.
92 lines
2.1 KiB
92 lines
2.1 KiB
const utils = require('../../utils'); |
|
const calcAtRulePatternPriority = require('./calcAtRulePatternPriority'); |
|
const calcRulePatternPriority = require('./calcRulePatternPriority'); |
|
const getDescription = require('./getDescription'); |
|
|
|
module.exports = function getOrderData(orderInfo, node) { |
|
let nodeType; |
|
|
|
if (utils.isAtVariable(node)) { |
|
nodeType = 'at-variables'; |
|
} else if (utils.isLessMixin(node)) { |
|
nodeType = 'less-mixins'; |
|
} else if (node.type === 'decl') { |
|
if (utils.isCustomProperty(node.prop)) { |
|
nodeType = 'custom-properties'; |
|
} else if (utils.isDollarVariable(node.prop)) { |
|
nodeType = 'dollar-variables'; |
|
} else if (utils.isStandardSyntaxProperty(node.prop)) { |
|
nodeType = 'declarations'; |
|
} |
|
} else if (node.type === 'rule') { |
|
nodeType = { |
|
type: 'rule', |
|
selector: node.selector, |
|
}; |
|
|
|
const rules = orderInfo.rule; |
|
|
|
// Looking for most specified pattern, because it can match many patterns |
|
if (rules && rules.length) { |
|
let prioritizedPattern; |
|
let max = 0; |
|
|
|
rules.forEach((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 = orderInfo['at-rule']; |
|
|
|
// Looking for most specified pattern, because it can match many patterns |
|
if (atRules && atRules.length) { |
|
let prioritizedPattern; |
|
let max = 0; |
|
|
|
atRules.forEach((pattern) => { |
|
const priority = calcAtRulePatternPriority(pattern, nodeType); |
|
|
|
if (priority > max) { |
|
max = priority; |
|
prioritizedPattern = pattern; |
|
} |
|
}); |
|
|
|
if (max) { |
|
return prioritizedPattern; |
|
} |
|
} |
|
} |
|
|
|
if (orderInfo[nodeType]) { |
|
return orderInfo[nodeType]; |
|
} |
|
|
|
// Return only description if there no patterns for that node |
|
return { |
|
description: getDescription(nodeType), |
|
}; |
|
};
|
|
|