Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #8401: gEBCN.diff

File gEBCN.diff, 4.6 kB (added by mislav, 2 years ago)

now with a twist

  • test/unit/dom.html

    old new  
    207207  <ul class="A B" id="class_names_ul"> 
    208208    <li class="C"></li> 
    209209    <li class="A C"></li> 
     210    <li class="1"></li> 
    210211  </ul> 
    211212  <div class="B C D"></div> 
    212213</div> 
     
    381382    }}, 
    382383     
    383384    testGetElementsByClassName: function() {with(this) { 
     385      var div = $('class_names'), list = $('class_names_ul'); 
     386 
    384387      assertElementsMatch(document.getElementsByClassName('A'), 'p.A', 'ul#class_names_ul.A', 'li.A.C'); 
    385       assertElementsMatch(document.getElementsByClassName('A', 'class_names_ul'), 'li.A.C'); 
    386       assertElementsMatch(document.getElementsByClassName('B', 'class_names'), 'ul#class_names_ul.A.B', 'div.B.C.D'); 
    387       assertElementsMatch(document.getElementsByClassName('B', 'class_names_ul')); 
     388      assertElementsMatch(list.getElementsByClassName('A'), 'li.A.C'); 
     389      assertElementsMatch(list.getElementsByClassName('C A'), 'li.A.C'); 
     390      assertElementsMatch(div.getElementsByClassName('B'), 'ul#class_names_ul.A.B', 'div.B.C.D'); 
     391      assertElementsMatch(div.getElementsByClassName('D C B'), 'div.B.C.D'); 
     392      assertElementsMatch(list.getElementsByClassName('B')); 
     393      // http://lxr.mozilla.org/mozilla/source/content/base/test/test_bug357450.js 
     394      assertElementsMatch(list.getElementsByClassName('1'), 'li.1'); 
     395      assertElementsMatch(list.getElementsByClassName([1]), 'li.1'); 
     396      assertElementsMatch(list.getElementsByClassName(['1 junk'])); 
     397      assertElementsMatch(list.getElementsByClassName('')); 
     398      assertElementsMatch(list.getElementsByClassName({})); 
    388399    }}, 
    389400 
    390401    testElementInsertWithHTML: function() {with(this) { 
  • test/lib/unittest.js

    old new  
    484484  assertElementsMatch: function() { 
    485485    var expressions = $A(arguments), elements = $A(expressions.shift()); 
    486486    if (elements.length != expressions.length) { 
    487       this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions'); 
     487      this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions (' + expressions.inspect() + ')'); 
    488488      return false; 
    489489    } 
    490490    elements.zip(expressions).all(function(pair, index) { 
  • src/dom.js

    old new  
    1818      results.push(query.snapshotItem(i)); 
    1919    return results; 
    2020  }; 
    21    
    22   document.getElementsByClassName = function(className, parentElement) { 
    23     var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; 
    24     return document._getElementsByXPath(q, parentElement); 
    25   } 
    26    
    27 } else document.getElementsByClassName = function(className, parentElement) { 
    28   var children = ($(parentElement) || document.body).getElementsByTagName('*'); 
    29   var elements = [], child; 
    30   for (var i = 0, length = children.length; i < length; i++) { 
    31     child = children[i]; 
    32     if (Element.hasClassName(child, className)) 
    33       elements.push(Element.extend(child)); 
    34   } 
    35   return elements; 
    36 }; 
     21
    3722 
    3823/*--------------------------------------------------------------------------*/ 
    3924 
     
    617602  } 
    618603}; 
    619604 
     605if (!document.getElementsByClassName) { 
     606  Element.Methods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? 
     607  function(element, className) { 
     608    var iter = function(name) { return "[contains(concat(' ', @class, ' '), ' " + name + " ')]" }; 
     609    var q = './/*' + (/\s/.test(className) ? $w(className.toString()).map(iter).join('') : iter(className)); 
     610    return document._getElementsByXPath(q, element); 
     611  } : function(element, className) { 
     612    var children = $(element).getElementsByTagName('*'); 
     613    var elements = [], classNames = $w(className.toString()); 
     614    className = ' ' + className + ' '; 
     615 
     616    for (var i = 0, child, cn; child = children[i]; i++) { 
     617      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || 
     618          classNames.all(function(name) { return cn.include(' ' + name + ' ') }))) 
     619        elements.push(Element.extend(child)); 
     620    } 
     621    return elements; 
     622  }; 
     623 
     624  document.getElementsByClassName = function(className, parentElement) { 
     625    return $(parentElement || document.body).getElementsByClassName(className); 
     626  } 
     627} 
     628 
    620629Object.extend(Element.Methods, { 
    621630  childElements: Element.Methods.immediateDescendants 
    622631});