| "use strict"; |
| |
| module.exports = CSSselect; |
| |
| var Pseudos = require("./lib/pseudos.js"), |
| DomUtils = require("domutils"), |
| findOne = DomUtils.findOne, |
| findAll = DomUtils.findAll, |
| getChildren = DomUtils.getChildren, |
| removeSubsets = DomUtils.removeSubsets, |
| falseFunc = require("boolbase").falseFunc, |
| compile = require("./lib/compile.js"), |
| compileUnsafe = compile.compileUnsafe, |
| compileToken = compile.compileToken; |
| |
| function getSelectorFunc(searchFunc){ |
| return function select(query, elems, options){ |
| if(typeof query !== "function") query = compileUnsafe(query, options, elems); |
| if(!Array.isArray(elems)) elems = getChildren(elems); |
| else elems = removeSubsets(elems); |
| return searchFunc(query, elems); |
| }; |
| } |
| |
| var selectAll = getSelectorFunc(function selectAll(query, elems){ |
| return (query === falseFunc || !elems || elems.length === 0) ? [] : findAll(query, elems); |
| }); |
| |
| var selectOne = getSelectorFunc(function selectOne(query, elems){ |
| return (query === falseFunc || !elems || elems.length === 0) ? null : findOne(query, elems); |
| }); |
| |
| function is(elem, query, options){ |
| return (typeof query === "function" ? query : compile(query, options))(elem); |
| } |
| |
| /* |
| the exported interface |
| */ |
| function CSSselect(query, elems, options){ |
| return selectAll(query, elems, options); |
| } |
| |
| CSSselect.compile = compile; |
| CSSselect.filters = Pseudos.filters; |
| CSSselect.pseudos = Pseudos.pseudos; |
| |
| CSSselect.selectAll = selectAll; |
| CSSselect.selectOne = selectOne; |
| |
| CSSselect.is = is; |
| |
| //legacy methods (might be removed) |
| CSSselect.parse = compile; |
| CSSselect.iterate = selectAll; |
| |
| //hooks |
| CSSselect._compileUnsafe = compileUnsafe; |
| CSSselect._compileToken = compileToken; |