08-27-周三_17-09-29
This commit is contained in:
59
node_modules/CSSselect/lib/sort.js
generated
vendored
Normal file
59
node_modules/CSSselect/lib/sort.js
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
module.exports = sortByProcedure;
|
||||
|
||||
/*
|
||||
sort the parts of the passed selector,
|
||||
as there is potential for optimization
|
||||
(some types of selectors are faster than others)
|
||||
*/
|
||||
|
||||
var ATTRIBUTE = 1;
|
||||
|
||||
var procedure = {
|
||||
__proto__: null,
|
||||
universal: 5, //should be last so that it can be ignored
|
||||
tag: 3, //very quick test
|
||||
attribute: ATTRIBUTE,
|
||||
pseudo: 0, //can be pretty expensive (especially :has)
|
||||
|
||||
//everything else shouldn't be moved
|
||||
descendant: -1,
|
||||
child: -1,
|
||||
parent: -1,
|
||||
sibling: -1,
|
||||
adjacent: -1
|
||||
};
|
||||
|
||||
var attributes = {
|
||||
__proto__: null,
|
||||
exists: 8,
|
||||
equals: 7,
|
||||
not: 6,
|
||||
start: 5,
|
||||
end: 4,
|
||||
any: 3,
|
||||
hyphen: 2,
|
||||
element: 1
|
||||
};
|
||||
|
||||
function sortByProcedure(arr){
|
||||
for(var i = 1; i < arr.length; i++){
|
||||
var procNew = procedure[arr[i].type];
|
||||
|
||||
if(procNew < 0) continue;
|
||||
|
||||
for(var j = i - 1; j >= 0; j--){
|
||||
if(
|
||||
procNew > procedure[arr[j].type] || !(
|
||||
procNew === ATTRIBUTE &&
|
||||
procedure[arr[j].type] === ATTRIBUTE &&
|
||||
attributes[arr[i].action] <= attributes[arr[j].action]
|
||||
)
|
||||
) break;
|
||||
|
||||
var tmp = arr[j + 1];
|
||||
arr[j + 1] = arr[j];
|
||||
arr[j] = tmp;
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
}
|
Reference in New Issue
Block a user