pulsar/vendor/specificity.js

36 lines
1.2 KiB
JavaScript
Raw Normal View History

// source: MooTools DOM branch -> https://raw.github.com/arian/DOM/matcher-specificity/Source/specificity.js
// changed to be compatible with our require system
// change line
// for (var ii = nots.length; ii--;) s += this.specificity(nots[ii]);
// for (var ii = nots.length; ii--;) s += nots[ii];
var Slick = require('slick');
module.exports = function(selector){
var parsed = Slick.parse(selector);
var expressions = parsed.expressions;
var specificity = -1;
for (var j = 0; j < expressions.length; j++){
var b = 0, c = 0, d = 0, s = 0, nots = [];
for (var i = 0; i < expressions[j].length; i++){
var expression = expressions[j][i], pseudos = expression.pseudos;
if (expression.id) b++;
if (expression.attributes) c += expression.attributes.length;
if (expression.classes) c += expression.classes.length;
if (expression.tag && expression.tag != '*') d++;
if (pseudos){
d += pseudos.length;
for (var p = 0; p < pseudos.length; p++) if (pseudos[p].key == 'not'){
nots.push(pseudos[p].value);
d--;
}
}
}
s = b * 1e6 + c * 1e3 + d;
for (var ii = nots.length; ii--;) s += nots[ii];
if (s > specificity) specificity = s;
}
return specificity;
};