src/cm/media/js/lib/yui/yui3.0.0/build/dom/selector-css2-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('selector-css2', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 * The selector module provides helper methods allowing CSS2 Selectors to be used with DOM elements.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 * @module dom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 * @submodule selector-css2
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 * @for Selector
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
 * Provides helper methods for collecting and filtering DOM elements.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
var PARENT_NODE = 'parentNode',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
    TAG_NAME = 'tagName',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
    ATTRIBUTES = 'attributes',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    COMBINATOR = 'combinator',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
    PSEUDOS = 'pseudos',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
    Selector = Y.Selector,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
    SelectorCSS2 = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
        SORT_RESULTS: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        _children: function(node, tag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
            var ret = node.children,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
                i,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
                children = [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
                childNodes,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
                child;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
            if (node.children && tag && node.children.tags) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
                children = node.children.tags(tag);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
            } else if ((!ret && node[TAG_NAME]) || (ret && tag)) { // only HTMLElements have children
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
                childNodes = ret || node.childNodes;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
                ret = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
                for (i = 0; (child = childNodes[i++]);) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
                    if (child.tagName) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
                        if (!tag || tag === child.tagName) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
                            ret.push(child);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
            return ret || [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
        _regexCache: {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        _re: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
            attr: /(\[.*\])/g,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
            pseudos: /:([\-\w]+(?:\(?:['"]?(.+)['"]?\)))*/i
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
         * Mapping of shorthand tokens to corresponding attribute selector 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
         * @property shorthand
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
         * @type object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        shorthand: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
            '\\#(-?[_a-z]+[-\\w]*)': '[id=$1]',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
            '\\.(-?[_a-z]+[-\\w]*)': '[className~=$1]'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
         * List of operators and corresponding boolean functions. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
         * These functions are passed the attribute and the current node's value of the attribute.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
         * @property operators
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
         * @type object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
        operators: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
            '': function(node, attr) { return Y.DOM.getAttribute(node, attr) !== ''; }, // Just test for existence of attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
            //'': '.+',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
            //'=': '^{val}$', // equality
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
            '~=': '(?:^|\\s+){val}(?:\\s+|$)', // space-delimited
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
            '|=': '^{val}-?' // optional hyphen-delimited
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
        pseudos: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
           'first-child': function(node) { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
                return Y.Selector._children(node[PARENT_NODE])[0] === node; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
            } 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
        _bruteQuery: function(selector, root, firstOnly) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
            var ret = [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
                nodes = [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
                tokens = Selector._tokenize(selector),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
                token = tokens[tokens.length - 1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
                rootDoc = Y.DOM._getDoc(root),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
                id,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
                className,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
                tagName;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
            // if we have an initial ID, set to root when in document
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
            if (tokens[0] && rootDoc === root &&  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
                    (id = tokens[0].id) &&
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
                    rootDoc.getElementById(id)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
                root = rootDoc.getElementById(id);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
            if (token) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
                // prefilter nodes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
                id = token.id;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
                className = token.className;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
                tagName = token.tagName || '*';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
                // try ID first
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
                if (id) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
                    if (rootDoc.getElementById(id)) { // if in document
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
                    nodes = [rootDoc.getElementById(id)]; // TODO: DOM.byId?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
                // try className if supported
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
                } else if (className) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
                    nodes = root.getElementsByClassName(className);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
                } else if (tagName) { // default to tagName
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
                    nodes = root.getElementsByTagName(tagName || '*');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
                if (nodes.length) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
                    ret = Selector._filterNodes(nodes, tokens, firstOnly);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
            return ret;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
        _filterNodes: function(nodes, tokens, firstOnly) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
            var i = 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
                j,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
                len = tokens.length,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
                n = len - 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
                result = [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
                node = nodes[0],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
                tmpNode = node,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
                getters = Y.Selector.getters,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
                operator,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
                combinator,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
                token,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
                path,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
                pass,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
                //FUNCTION = 'function',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
                value,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
                tests,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
                test;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
            //do {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
            for (i = 0; (tmpNode = node = nodes[i++]);) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
                n = len - 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
                path = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
                testLoop:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
                while (tmpNode && tmpNode.tagName) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
                    token = tokens[n];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
                    tests = token.tests;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
                    j = tests.length;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
                    if (j && !pass) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
                        while ((test = tests[--j])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
                            operator = test[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
                            if (getters[test[0]]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
                                value = getters[test[0]](tmpNode, test[0]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
                            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
                                value = tmpNode[test[0]];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
                                // use getAttribute for non-standard attributes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
                                if (value === undefined && tmpNode.getAttribute) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
                                    value = tmpNode.getAttribute(test[0]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
                                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
                            if ((operator === '=' && value !== test[2]) ||  // fast path for equality
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
                                (operator.test && !operator.test(value)) ||  // regex test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
                                (operator.call && !operator(tmpNode, test[0]))) { // function test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
                                // skip non element nodes or non-matching tags
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
                                if ((tmpNode = tmpNode[path])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
                                    while (tmpNode &&
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
                                        (!tmpNode.tagName ||
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
                                            (token.tagName && token.tagName !== tmpNode.tagName))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
                                    ) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
                                        tmpNode = tmpNode[path]; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
                                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
                                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
                                continue testLoop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
                    n--; // move to next token
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
                    // now that we've passed the test, move up the tree by combinator
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
                    if (!pass && (combinator = token.combinator)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
                        path = combinator.axis;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
                        tmpNode = tmpNode[path];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
                        // skip non element nodes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
                        while (tmpNode && !tmpNode.tagName) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
                            tmpNode = tmpNode[path]; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
                        if (combinator.direct) { // one pass only
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
                            path = null; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
                    } else { // success if we made it this far
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
                        result.push(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
                        if (firstOnly) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
                            return result;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
            }// while (tmpNode = node = nodes[++i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
            node = tmpNode = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
            return result;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
        _getRegExp: function(str, flags) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
            var regexCache = Selector._regexCache;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
            flags = flags || '';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
            if (!regexCache[str + flags]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
                regexCache[str + flags] = new RegExp(str, flags);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
            return regexCache[str + flags];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
        combinators: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
            ' ': {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
                axis: 'parentNode'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
            '>': {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
                axis: 'parentNode',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
                direct: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
            '+': {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
                axis: 'previousSibling',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
                direct: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
        _parsers: [
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
            {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
                name: ATTRIBUTES,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
                re: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
                fn: function(match, token) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
                    var operator = match[2] || '',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
                        operators = Y.Selector.operators,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
                        test;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
                    // add prefiltering for ID and CLASS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
                    if ((match[1] === 'id' && operator === '=') ||
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
                            (match[1] === 'className' &&
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
                            document.getElementsByClassName &&
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
                            (operator === '~=' || operator === '='))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
                        token.prefilter = match[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
                        token[match[1]] = match[3];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
                    // add tests
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
                    if (operator in operators) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
                        test = operators[operator];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
                        if (typeof test === 'string') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
                            test = Y.Selector._getRegExp(test.replace('{val}', match[3]));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
                        match[2] = test;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
                    if (!token.last || token.prefilter !== match[1]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
                        return match.slice(1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
            {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
                name: TAG_NAME,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
                re: /^((?:-?[_a-z]+[\w-]*)|\*)/i,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
                fn: function(match, token) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
                    var tag = match[1].toUpperCase();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
                    token.tagName = tag;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
                    if (tag !== '*' && (!token.last || token.prefilter)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
                        return [TAG_NAME, '=', tag];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
                    if (!token.prefilter) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
                        token.prefilter = 'tagName';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
            {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
                name: COMBINATOR,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
                re: /^\s*([>+~]|\s)\s*/,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
                fn: function(match, token) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
            {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
                name: PSEUDOS,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
                re: /^:([\-\w]+)(?:\(['"]?(.+)['"]?\))*/i,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
                fn: function(match, token) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
                    var test = Selector[PSEUDOS][match[1]];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
                    if (test) { // reorder match array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
                        return [match[2], test];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
                    } else { // selector token not supported (possibly missing CSS3 module)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
                        return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
            ],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
        _getToken: function(token) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
            return {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
                tagName: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
                id: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
                className: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
                attributes: {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
                combinator: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
                tests: []
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
            Break selector into token units per simple selector.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
            Combinator is attached to the previous token.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
        _tokenize: function(selector) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
            selector = selector || '';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
            selector = Selector._replaceShorthand(Y.Lang.trim(selector)); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
            var token = Selector._getToken(),     // one token per simple selector (left selector holds combinator)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
                query = selector, // original query for debug report
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
                tokens = [],    // array of tokens
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
                found = false,  // whether or not any matches were found this pass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
                match,         // the regex match
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
                test,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
                i, parser;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
            /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
                Search for selector patterns, store, and strip them from the selector string
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
                until no patterns match (invalid selector) or we run out of chars.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
                Multiple attributes and pseudos are allowed, in any order.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
                for example:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
                    'form:first-child[type=button]:not(button)[lang|=en]'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
            */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
            outer:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
            do {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
                found = false; // reset after full pass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
                for (i = 0; (parser = Selector._parsers[i++]);) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
                    if ( (match = parser.re.exec(selector)) ) { // note assignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
                        if (parser !== COMBINATOR ) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
                            token.selector = selector;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
                        selector = selector.replace(match[0], ''); // strip current match from selector
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
                        if (!selector.length) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
                            token.last = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
                        if (Selector._attrFilters[match[1]]) { // convert class to className, etc.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
                            match[1] = Selector._attrFilters[match[1]];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
                        test = parser.fn(match, token);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
                        if (test === false) { // selector not supported
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
                            found = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
                            break outer;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
                        } else if (test) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
                            token.tests.push(test);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
                        if (!selector.length || parser.name === COMBINATOR) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
                            tokens.push(token);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
                            token = Selector._getToken(token);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
                            if (parser.name === COMBINATOR) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
                                token.combinator = Y.Selector.combinators[match[1]];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
                        found = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
            } while (found && selector.length);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
            if (!found || selector.length) { // not fully parsed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
                Y.log('query: ' + query + ' contains unsupported token in: ' + selector, 'warn', 'Selector');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
                tokens = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
            return tokens;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
        _replaceShorthand: function(selector) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
            var shorthand = Selector.shorthand,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
                attrs = selector.match(Selector._re.attr), // pull attributes to avoid false pos on "." and "#"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
                pseudos = selector.match(Selector._re.pseudos), // pull attributes to avoid false pos on "." and "#"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
                re, i, len;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
            if (pseudos) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
                selector = selector.replace(Selector._re.pseudos, '!!REPLACED_PSEUDO!!');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
            if (attrs) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
                selector = selector.replace(Selector._re.attr, '!!REPLACED_ATTRIBUTE!!');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
            for (re in shorthand) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
                if (shorthand.hasOwnProperty(re)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
                    selector = selector.replace(Selector._getRegExp(re, 'gi'), shorthand[re]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
            if (attrs) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
                for (i = 0, len = attrs.length; i < len; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
                    selector = selector.replace('!!REPLACED_ATTRIBUTE!!', attrs[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
            if (pseudos) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
                for (i = 0, len = pseudos.length; i < len; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
                    selector = selector.replace('!!REPLACED_PSEUDO!!', pseudos[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
            return selector;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
        _attrFilters: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
            'class': 'className',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
            'for': 'htmlFor'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
        getters: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
            href: function(node, attr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
                return Y.DOM.getAttribute(node, attr);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
Y.mix(Y.Selector, SelectorCSS2, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
Y.Selector.getters.src = Y.Selector.getters.rel = Y.Selector.getters.href;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
// IE wants class with native queries
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
if (Y.Selector.useNative && document.querySelector) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
    Y.Selector.shorthand['\\.(-?[_a-z]+[-\\w]*)'] = '[class~=$1]';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
}, '3.0.0' ,{requires:['selector-native']});