src/cm/media/js/lib/yui/yui3.0.0/build/dom/selector-css3.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-css3', 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 css3 module provides support for css3 selectors.
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-css3
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
    an+b = get every _a_th node starting at the _b_th
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
    0n+b = no repeat ("0" and "n" may both be omitted (together) , e.g. "0n+1" or "1", not "0+1"), return only the _b_th element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    1n+b =  get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
    an+0 = get every _a_th element, "0" may be omitted 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
Y.Selector._reNth = /^(?:([\-]?\d*)(n){1}|(odd|even)$)*([\-+]?\d*)$/;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
Y.Selector._getNth = function(node, expr, tag, reverse) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
    Y.Selector._reNth.test(expr);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
    var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
        n = RegExp.$2, // "n"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
        oddeven = RegExp.$3, // "odd" or "even"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        result = [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        siblings = Y.Selector._children(node.parentNode, tag),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        op;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    if (oddeven) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        a = 2; // always every other
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
        op = '+';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        n = 'n';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        b = (oddeven === 'odd') ? 1 : 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
    } else if ( isNaN(a) ) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        a = (n) ? 1 : 0; // start from the first or no repeat
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
    if (a === 0) { // just the first
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        if (reverse) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
            b = siblings.length - b + 1; 
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
        if (siblings[b - 1] === node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
            return true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
            return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
    } else if (a < 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        reverse = !!reverse;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        a = Math.abs(a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
    if (!reverse) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        for (var i = b - 1, len = siblings.length; i < len; i += a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
            if ( i >= 0 && siblings[i] === node ) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
                return true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
        for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
            if ( i < len && siblings[i] === node ) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
                return true;
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
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
    return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
Y.mix(Y.Selector.pseudos, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
    'root': function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
        return node === node.ownerDocument.documentElement;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
    'nth-child': function(node, expr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
        return Y.Selector._getNth(node, expr);
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
    'nth-last-child': function(node, expr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
        return Y.Selector._getNth(node, expr, null, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
    'nth-of-type': function(node, expr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
        return Y.Selector._getNth(node, expr, node.tagName);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
    'nth-last-of-type': function(node, expr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
        return Y.Selector._getNth(node, expr, node.tagName, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
    'last-child': function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        var children = Y.Selector._children(node.parentNode);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
        return children[children.length - 1] === node;
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
    'first-of-type': function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
        return Y.Selector._children(node.parentNode, node.tagName)[0] === node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
    'last-of-type': function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
        var children = Y.Selector._children(node.parentNode, node.tagName);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
        return children[children.length - 1] === node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
    'only-child': function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
        var children = Y.Selector._children(node.parentNode);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
        return children.length === 1 && children[0] === node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
    'only-of-type': function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
        var children = Y.Selector._children(node.parentNode, node.tagName);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
        return children.length === 1 && children[0] === node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
    'empty': function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
        return node.childNodes.length === 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
    'not': function(node, expr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
        return !Y.Selector.test(node, expr);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
    'contains': function(node, expr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
        var text = node.innerText || node.textContent || '';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
        return text.indexOf(expr) > -1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
    'checked': function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
        return node.checked === true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
Y.mix(Y.Selector.operators, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    '^=': '^{val}', // Match starts with value
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
    '$=': '{val}$', // Match ends with value
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
    '*=': '{val}' // Match contains value as substring 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
Y.Selector.combinators['~'] = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
    axis: 'previousSibling'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
}, '3.0.0' ,{requires:['dom-base', 'selector-native', 'selector-css2']});