Full Selector를 직계 방계 형태로 분리, [{type:'parent', value:''}, {type:'closest', value:''}] 순서를 뒤집어서 반환.
185847
function ( selector ) {
            var result = [];
    
            selector = $B.string.trim( selector );
            //공백제거
            selector.replace( /(\[[^\[\]]+\])/g, function ( str ) {
                return str.replace( /\s/g, '' );
                //분리
            }).replace( /([\s\>]+)?([^\s\>]+)/g, function ( str, bullet, value ) {
                var type;
    
                if ( !bullet ) {
                    type = 'first';
                } else if ( bullet.indexOf('>') > -1 ) {
                    type = 'parent';
                } else {
                    type = 'closest';
                }
                result.push( {type: type, selector: value} );
            });
            return result.reverse();
        }
442480
function filter(selector) {
  var arr = [], $ = this.air;
  this.each(function(el) {
    var selections;
    if(typeof selector === 'function') {
      if(selector.call(el)) {
        arr.push(el);
      }
    }else{
      selections = $(selector);
      if(~selections.dom.indexOf(el)) {
        arr.push(el);
      }
    }
  });
  return $(arr);
}
1078356
function (selector, root) {
        if (!isElement(root)) {
            return null
        }

        var Closest = Element.prototype.closest ||
            function (sel) {
                var element = this;
                if (!document.documentElement.contains(element)) {
                    return null
                }

                do {
                    if (element.matches(sel)) {
                        return element
                    }

                    element = element.parentElement;
                } while (element !== null)

                return null
            };

        var el = Closest.call(root, selector);

        return el === root ? null : el
    }
905451
function deepSelect(parent$, selector) {
  let selectors = selector.split(".");

  let newStream = fork$(parent$, value => select(value, selectors));
  parent$.listeners.push(function deepSelectValue(newValue) {
    newStream(select(newValue, selectors));
  });
  return newStream;
}
1179641
function ( value ) {
            //ie9, 크롬, 사파리, 파폭
            if ( typeof window.pageXOffset === 'number' ) {
                this.scrollLeft = function ( value ) {
                    var el = this.element();
    
                    if ( el === window || el === document ) {
                        //setter
                        if ( typeof value === 'number' ) {
                            window.scrollTo( value, window.pageYOffset );
                            //getter
                        } else {
                            return window.pageXOffset;
                        }
                    } else {
                        //setter
                        if ( typeof value === 'number' ) {
                            el.scrollLeft = value;
                            //getter
                        } else {
                            return el.scrollLeft;
                        }
                    }
                };
            } else {
                this.scrollLeft = function ( value ) {
                    var el = this.element();
    
                    if ( el === window || el === document ) el = document.documentElement;
                    //setter
                    if ( typeof value === 'number' ) {
                        el.scrollLeft = value;
                        //getter
                    } else {
                        return el.scrollLeft;
                    }
                };
            }
            return this.scrollLeft( value );
        }
1185067
function () {
                    var elements = [], e, c, argsSemiColon = [], argsComma = [], args, delim, arg, nameLoop, expressions, isSemiColonSeperated, expressionContainsNamed, index = i, s = input.charAt(i), name, value, important = false;

                    if (s !== '.' && s !== '#') { return }
                    
                    save(); // stop us absorbing part of an invalid selector

                    while (e = $(/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)) {
                        elements.push(new(tree.Element)(c, e, i));
                        c = $('>');
                    }
                    if ($('(')) {
                        expressions = [];
                        while (arg = $(this.expression)) {
                            nameLoop = null;
                            value = arg;

                            // Variable
                            if (arg.value.length == 1) {
                                var val = arg.value[0];
                                if (val instanceof tree.Variable) {
                                    if ($(':')) {
                                        if (expressions.length > 0) {
                                            if (isSemiColonSeperated) {
                                                error("Cannot mix ; and , as delimiter types");
                                            }
                                            expressionContainsNamed = true;
                                        }
                                        value = expect(this.expression);
                                        nameLoop = (name = val.name);
                                    }
                                }
                            }
                            
                            expressions.push(value);
                            
                            argsComma.push({ name: nameLoop, value: value });
                            
                            if ($(',')) {
                                continue;
                            }
                            
                            if ($(';') || isSemiColonSeperated) {
                            
                                if (expressionContainsNamed) {
                                    error("Cannot mix ; and , as delimiter types");
                                }
                            
                                isSemiColonSeperated = true;
                                                        
                                if (expressions.length > 1) {
                                    value = new(tree.Value)(expressions);
                                }
                                argsSemiColon.push({ name: name, value: value });
                            
                                name = null;
                                expressions = [];
                                expressionContainsNamed = false;
                            }
                        }

                        expect(')');
                    }

                    args = isSemiColonSeperated ? argsSemiColon : argsComma;

                    if ($(this.important)) {
                        important = true;
                    }

                    if (elements.length > 0 && ($(';') || peek('}'))) {
                        return new(tree.mixin.Call)(elements, args, index, env.filename, important);
                    }
                    
                    restore();
                }
1298498
function ( el, selector ) {
            //el = $B( el ).element();
            //이미 파싱된 Object면 다시 파싱하지 않는다.
            var matchList = (typeof selector === 'string')? this.parse( selector ) : selector,
                result = false, n;
    
            for ( n in matchList ) {
                switch ( n ) {
                    case 'node':
                        var node = el.nodeName;
    
                        if ( node ) {
                            node = node.toLowerCase();
                            result = ( node == matchList[n] );
                        } else {
                            result = false;
                        }
                        break;
                    case 'id':
                        result = ( $B(el).attr('id') == matchList[n] );
                        break;
                    case 'className':
                        result = $B( el ).hasClass( matchList[n] );
                        break;
                    case 'attr':
                        result = this.matchAttr( el, matchList[n] );
                        break;
                }
                //하나라도 false가 나오면 더이상 체크하지 않는다.
                if ( !result ) return result;
            }
    
            return result;
        }
1276215
function ( selector ) {
            var el = this.element(),
                children = el.children;
    
            if ( typeof selector === 'string' ) {
                var elNum = children.length, result = [], i;
    
                for ( i = 0; i < elNum; ++i ) {
                    var child = children[i],
                        match = $B.selector.match( child, selector );
    
                    if ( match ) result.push( child );
                }
                return result;
            } else {
                //this.element().childNodes;
                return $B( children ).toArray();
            }
        }
93453
function ( silent ) {
            var target = this.target, el;
    
            if ( typeof target === 'string' ) {
                el = $B( document ).selector( target );
            } else {
                if ( target ) {
                    //jQuery Object
                    if ( typeof target.get === 'function' ) {
                        el = target.get(0);
                    } else {
                        el = target;
                    }
                }
            }
    
            if ( el ) {
                this.target = el;
            } else {
                //warning( '"' + target + '" 와 일치하는 대상이 없습니다.' );
                if ( !silent ) throw new Error( '[ixBand] "' + target + '" 와 일치하는 대상이 없습니다.' );
            }
            return el;
        }
874359
function closest(node, parentSelector) {
  var cursor = node;

  if (!parentSelector || typeof parentSelector !== 'string') {
    throw new Error('Please specify a selector to match against!');
  }

  while (cursor && !matches(cursor, parentSelector)) {
    cursor = cursor.parentNode;
  }

  if (!cursor) {
    return null;
  } else {
    return cursor;
  }
}
1001619
function (e, classname) {
	if (classie.has(e, classname)) {
		return e;
	}
	return e.parentNode && closest(e.parentNode, classname);
}
400800
function parseSelectorIndexes(allIndexes, selector) {
  allIndexes = allIndexes.slice(0).concat(allIndexes['default']);

  var allIndexesLen = allIndexes.length,
      i, j, m, dup, rest = selector,
      key, index, indexes = [];

  do {
    chunker.exec('');
    if (m = chunker.exec(rest)) {
      rest = m[3];
      if (m[2] || !rest) {
        for (i = 0; i < allIndexesLen; i++) {
          index = allIndexes[i];
          if (key = index.selector(m[1])) {
            j = indexes.length;
            dup = false;
            while (j--) {
              if (indexes[j].index === index && indexes[j].key === key) {
                dup = true;
                break;
              }
            }
            if (!dup) {
              indexes.push({index: index, key: key});
            }
            break;
          }
        }
      }
    }
  } while (m);

  return indexes;
}
821721
function ( value ) {
            //ie9, 크롬, 사파리, 파폭
            if ( typeof window.pageYOffset === 'number' ) {
                this.scrollTop = function ( value ) {
                    var el = this.element();
    
                    if ( el === window || el === document ) {
                        //setter
                        if ( typeof value === 'number' ) {
                            window.scrollTo( window.pageXOffset, value );
                            //getter
                        } else {
                            return window.pageYOffset;
                        }
                    } else {
                        //setter
                        if ( typeof value === 'number' ) {
                            el.scrollTop = value;
                            //getter
                        } else {
                            return el.scrollTop;
                        }
                    }
                };
            } else {
                this.scrollTop = function ( value ) {
                    var el = this.element();
    
                    if ( el === window || el === document ) el = document.documentElement;
                    //setter
                    if ( typeof value === 'number' ) {
                        el.scrollTop = value;
                        //getter
                    } else {
                        return el.scrollTop;
                    }
                };
            }
            return this.scrollTop( value );
        }
436160
function(selectors, groups, input) {
  var i, j, k;
  for (i=0, k=0; i<input.length; i+=GROUP_SIZE) {
    var groupSize = Math.min(GROUP_SIZE, input.length - i);
    var best = 0, bestCost = groups[0].cost(input, i, groupSize);
    for (j=1; j<groups.length; j++) {
      var groupCost = groups[j].cost(input, i, groupSize);
      if (groupCost < bestCost) {
        best = j; bestCost = groupCost;
      }
    }
    selectors[k++] = best;
  }
}
311927
function mergeAndedSelectors(selectors) {

  // sort to ensure that e.g. if the user specified
  // $and: [{$gt: 'a'}, {$gt: 'b'}], then it's collapsed into
  // just {$gt: 'b'}
  var res = {};

  selectors.forEach(function (selector) {
    Object.keys(selector).forEach(function (field) {
      var matcher = selector[field];
      if (typeof matcher !== 'object') {
        matcher = {$eq: matcher};
      }

      if (isCombinationalField(field)) {
        if (matcher instanceof Array) {
          res[field] = matcher.map(function (m) {
            return mergeAndedSelectors([m]);
          });
        } else {
          res[field] = mergeAndedSelectors([matcher]);
        }
      } else {
        var fieldMatchers = res[field] = res[field] || {};
        Object.keys(matcher).forEach(function (operator) {
          var value = matcher[operator];

          if (operator === '$gt' || operator === '$gte') {
            return mergeGtGte(operator, value, fieldMatchers);
          } else if (operator === '$lt' || operator === '$lte') {
            return mergeLtLte(operator, value, fieldMatchers);
          } else if (operator === '$ne') {
            return mergeNe(value, fieldMatchers);
          } else if (operator === '$eq') {
            return mergeEq(value, fieldMatchers);
          }
          fieldMatchers[operator] = value;
        });
      }
    });
  });

  return res;
}
317823
function ( el, type ) {
                var eventIds = el.__ix_eventIds__;
                //등록된 _ix_eventIds_가 없으면 정지.
                if ( !eventIds ) return;
    
                //type = getCrossType( type );
    
                //가장최근에 등록된 이벤트가 제거될 가능성이 높기때문에 루프를 뒤에서 부터 돈다.
                for ( var i = eventIds.length - 1; i >= 0; --i ) {
                    var id = eventIds[i],
                        evt = window.__ix_allEvents__[id];
    
                    if ( evt.type == type ) {
                        this._removeEventListener( el, type, evt.wrapHandler );
                        //배열에서 el 제거
                        el.__ix_eventIds__.splice( i, 1 );
                        //창마다 하나식 있는 __ix_allEvents__ 객체에서 이벤트정보 삭제
                        delete window.__ix_allEvents__[id];
                    }
                }
            }
616983
function ( el, selector, rootEl ) {
            var root = rootEl || document,
                parent = el.parentNode;
    
            if ( parent && parent != root ) {
                var match = this.match( parent, selector );
                return match? parent : this.closest( parent, selector );
            } else {
                return;
            }
        }