UNPKG

1.65 kBJavaScriptView Raw
1"use strict";
2
3module.exports = CSSselect;
4
5var Pseudos = require("./lib/pseudos.js"),
6 DomUtils = require("domutils"),
7 findOne = DomUtils.findOne,
8 findAll = DomUtils.findAll,
9 getChildren = DomUtils.getChildren,
10 removeSubsets = DomUtils.removeSubsets,
11 falseFunc = require("boolbase").falseFunc,
12 compile = require("./lib/compile.js"),
13 compileUnsafe = compile.compileUnsafe;
14
15function getSelectorFunc(searchFunc){
16 return function select(query, elems, options){
17 if(typeof query !== "function") query = compileUnsafe(query, options);
18 if(!Array.isArray(elems)) elems = getChildren(elems);
19 else elems = removeSubsets(elems);
20 return searchFunc(query, elems);
21 };
22}
23
24var selectAll = getSelectorFunc(function selectAll(query, elems){
25 return (query === falseFunc || !elems || elems.length === 0) ? [] : findAll(query, elems);
26});
27
28var selectOne = getSelectorFunc(function selectOne(query, elems){
29 return (query === falseFunc || !elems || elems.length === 0) ? null : findOne(query, elems);
30});
31
32function is(elem, query, options){
33 return (typeof query === "function" ? query : compile(query, options))(elem);
34}
35
36/*
37 the exported interface
38*/
39function CSSselect(query, elems, options){
40 return selectAll(query, elems, options);
41}
42
43CSSselect.compile = compile;
44CSSselect.filters = Pseudos.filters;
45CSSselect.pseudos = Pseudos.pseudos;
46
47CSSselect.selectAll = selectAll;
48CSSselect.selectOne = selectOne;
49
50CSSselect.is = is;
51
52//legacy methods (might be removed)
53CSSselect.parse = compile;
54CSSselect.iterate = selectAll;
55
56//useful for debugging
57CSSselect._compileUnsafe = compileUnsafe;