selector-css3.js revision 7bd6c48178788dd4f19fa028e0294192ee2c7278
ad0b283113c3f11ac1877df97d5d0fae899b56caBrendan Mmiller an+b = get every _a_th node starting at the _b_th
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller 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
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller 1n+b = get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller an+0 = get every _a_th element, "0" may be omitted
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan MmillerY.Selector._reNth = /^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/;
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan MmillerY.Selector._getNth = function(node, expr, tag, reverse) {
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller var siblings = node.parentNode.children || Selector._children(node.parentNode);
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller } else if ( isNaN(a) ) {
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller a = (n) ? 1 : 0; // start from the first or no repeat
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller return false;
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller } else if (a < 0) {
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller for (var i = b - 1, len = siblings.length; i < len; i += a) {
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller return false;
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller return node === node.ownerDocument.documentElement;
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller return Y.Selector._getNth(node, m[1], null, true);
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller return Y.Selector._getNth(node, m[1], node.tagName);
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller return Y.Selector._getNth(node, m[1], node.tagName, true);
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller var children = node.children || Y.Selector._children(node.parentNode);
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller return children[children.length - 1] === node;
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmiller return Y.DOM._childrenByTag(node.parentNode, node.tagName)[0];
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller var children = Y.DOM._childrenByTag(node.parentNode, node.tagName);
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller var children = node.children || Y.Selector._children(node.parentNode);
3f424ffdb194d6ff7ac053c5b3e53211a2de2d64Brendan Mmiller return children.length === 1 && children[0] === node;
ba208d3f0e9d48f3c841cdd627f200a7bb04cea8Brendan Mmiller return Y.DOM._childrenByTag(node.parentNode, node.tagName).length === 1;
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller var text = node.innerText || node.textContent || '';
99054f32a1766b8a8f60509cb724359413171d1dBrendan Mmiller '*=': '{val}' // Match contains value as substring
99054f32a1766b8a8f60509cb724359413171d1dBrendan MmillerY.Selector.combinators['~'] = function(node, token) {
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller if (sib.nodeType === 1 && Y.Selector._testToken(sib, null, null, token.previous)) {
bfd9faff49961e9db7b92f310d59923fd6234372Brendan Mmiller return false;