Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
YUI.add('selector-css3', function (Y, NAME) {
2
 
3
/**
4
 * The selector css3 module provides support for css3 selectors.
5
 * @module dom
6
 * @submodule selector-css3
7
 * @for Selector
8
 */
9
 
10
/*
11
    an+b = get every _a_th node starting at the _b_th
12
    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
13
    1n+b =  get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
14
    an+0 = get every _a_th element, "0" may be omitted
15
*/
16
 
17
Y.Selector._reNth = /^(?:([\-]?\d*)(n){1}|(odd|even)$)*([\-+]?\d*)$/;
18
 
19
Y.Selector._getNth = function(node, expr, tag, reverse) {
20
    Y.Selector._reNth.test(expr);
21
    var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
22
        n = RegExp.$2, // "n"
23
        oddeven = RegExp.$3, // "odd" or "even"
24
        b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
25
        result = [],
26
        siblings = Y.DOM._children(node.parentNode, tag),
27
        op;
28
 
29
    if (oddeven) {
30
        a = 2; // always every other
31
        op = '+';
32
        n = 'n';
33
        b = (oddeven === 'odd') ? 1 : 0;
34
    } else if ( isNaN(a) ) {
35
        a = (n) ? 1 : 0; // start from the first or no repeat
36
    }
37
 
38
    if (a === 0) { // just the first
39
        if (reverse) {
40
            b = siblings.length - b + 1;
41
        }
42
 
43
        if (siblings[b - 1] === node) {
44
            return true;
45
        } else {
46
            return false;
47
        }
48
 
49
    } else if (a < 0) {
50
        reverse = !!reverse;
51
        a = Math.abs(a);
52
    }
53
 
54
    if (!reverse) {
55
        for (var i = b - 1, len = siblings.length; i < len; i += a) {
56
            if ( i >= 0 && siblings[i] === node ) {
57
                return true;
58
            }
59
        }
60
    } else {
61
        for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
62
            if ( i < len && siblings[i] === node ) {
63
                return true;
64
            }
65
        }
66
    }
67
    return false;
68
};
69
 
70
Y.mix(Y.Selector.pseudos, {
71
    'root': function(node) {
72
        return node === node.ownerDocument.documentElement;
73
    },
74
 
75
    'nth-child': function(node, expr) {
76
        return Y.Selector._getNth(node, expr);
77
    },
78
 
79
    'nth-last-child': function(node, expr) {
80
        return Y.Selector._getNth(node, expr, null, true);
81
    },
82
 
83
    'nth-of-type': function(node, expr) {
84
        return Y.Selector._getNth(node, expr, node.tagName);
85
    },
86
 
87
    'nth-last-of-type': function(node, expr) {
88
        return Y.Selector._getNth(node, expr, node.tagName, true);
89
    },
90
 
91
    'last-child': function(node) {
92
        var children = Y.DOM._children(node.parentNode);
93
        return children[children.length - 1] === node;
94
    },
95
 
96
    'first-of-type': function(node) {
97
        return Y.DOM._children(node.parentNode, node.tagName)[0] === node;
98
    },
99
 
100
    'last-of-type': function(node) {
101
        var children = Y.DOM._children(node.parentNode, node.tagName);
102
        return children[children.length - 1] === node;
103
    },
104
 
105
    'only-child': function(node) {
106
        var children = Y.DOM._children(node.parentNode);
107
        return children.length === 1 && children[0] === node;
108
    },
109
 
110
    'only-of-type': function(node) {
111
        var children = Y.DOM._children(node.parentNode, node.tagName);
112
        return children.length === 1 && children[0] === node;
113
    },
114
 
115
    'empty': function(node) {
116
        return node.childNodes.length === 0;
117
    },
118
 
119
    'not': function(node, expr) {
120
        return !Y.Selector.test(node, expr);
121
    },
122
 
123
    'contains': function(node, expr) {
124
        var text = node.innerText || node.textContent || '';
125
        return text.indexOf(expr) > -1;
126
    },
127
 
128
    'checked': function(node) {
129
        return (node.checked === true || node.selected === true);
130
    },
131
 
132
    enabled: function(node) {
133
        return (node.disabled !== undefined && !node.disabled);
134
    },
135
 
136
    disabled: function(node) {
137
        return (node.disabled);
138
    }
139
});
140
 
141
Y.mix(Y.Selector.operators, {
142
    '^=': '^{val}', // Match starts with value
143
    '$=': '{val}$', // Match ends with value
144
    '*=': '{val}' // Match contains value as substring
145
});
146
 
147
Y.Selector.combinators['~'] = {
148
    axis: 'previousSibling'
149
};
150
 
151
 
152
}, '3.18.1', {"requires": ["selector-native", "selector-css2"]});