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