Blame view

node_modules/css-select/index.js 1.69 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  "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;