Index: node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/lib/sort.js |
diff --git a/node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/lib/sort.js b/node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/lib/sort.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c97c7c77aa605184566d67529fb7a729edc2d102 |
--- /dev/null |
+++ b/node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/lib/sort.js |
@@ -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; |
+} |