[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/yuilib/3.17.2/selector-css3/ -> selector-css3-debug.js (source)

   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"]});


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1