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

Changeset 6610

Show
Ignore:
Timestamp:
04/28/07 15:40:30 (1 year ago)
Author:
mislav
Message:

Prototype: merge form.js, dom.js changes up to trunk:6604

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • spinoffs/prototype/branches/form/src/dom.js

    r6255 r6610  
    1919    return results; 
    2020  }; 
    21 
    22  
    23 document.getElementsByClassName = function(className, parentElement) { 
    24   if (Prototype.BrowserFeatures.XPath) { 
     21   
     22  document.getElementsByClassName = function(className, parentElement) { 
    2523    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; 
    2624    return document._getElementsByXPath(q, parentElement); 
    27   } else { 
    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   } 
     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; 
    3736}; 
    3837 
    3938/*--------------------------------------------------------------------------*/ 
    4039 
    41 if (!window.Element) 
    42   var Element = new Object(); 
    43  
     40if (!window.Element) var Element = {}; 
    4441 
    4542Element.extend = function(element) { 
     
    6764  } 
    6865 
    69   element._extended = true
     66  element._extended = Prototype.emptyFunction
    7067  return element; 
    7168}; 
     
    153150   
    154151  descendants: function(element) { 
    155     return $A($(element).getElementsByTagName('*')); 
     152    return $A($(element).getElementsByTagName('*')).each(Element.extend); 
     153  }, 
     154   
     155  firstDescendant: function(element) { 
     156    element = $(element).firstChild; 
     157    while (element && element.nodeType != 1) element = element.nextSibling; 
     158    return $(element); 
    156159  }, 
    157160   
     
    183186   
    184187  up: function(element, expression, index) { 
    185     return Selector.findElement($(element).ancestors(), expression, index); 
     188    element = $(element); 
     189    if (arguments.length == 1) return $(element.parentNode); 
     190    var ancestors = element.ancestors(); 
     191    return expression ? Selector.findElement(ancestors, expression, index) : 
     192      ancestors[index || 0]; 
    186193  }, 
    187194   
    188195  down: function(element, expression, index) { 
    189     return Selector.findElement($(element).descendants(), expression, index); 
     196    element = $(element); 
     197    if (arguments.length == 1) return element.firstDescendant(); 
     198    var descendants = element.descendants(); 
     199    return expression ? Selector.findElement(descendants, expression, index) : 
     200      descendants[index || 0]; 
    190201  }, 
    191202 
    192203  previous: function(element, expression, index) { 
    193     return Selector.findElement($(element).previousSiblings(), expression, index); 
     204    element = $(element); 
     205    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); 
     206    var previousSiblings = element.previousSiblings(); 
     207    return expression ? Selector.findElement(previousSiblings, expression, index) : 
     208      previousSiblings[index || 0]; 
    194209  }, 
    195210   
    196211  next: function(element, expression, index) { 
    197     return Selector.findElement($(element).nextSiblings(), expression, index); 
     212    element = $(element); 
     213    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); 
     214    var nextSiblings = element.nextSiblings(); 
     215    return expression ? Selector.findElement(nextSiblings, expression, index) : 
     216      nextSiblings[index || 0]; 
    198217  }, 
    199218   
     
    209228  readAttribute: function(element, name) { 
    210229    element = $(element); 
    211     if (document.all && !window.opera) { 
     230    if (Prototype.Browser.IE) { 
     231      if (!element.attributes) return null; 
    212232      var t = Element._attributeTranslations; 
    213233      if (t.values[name]) return t.values[name](element, name); 
    214234      if (t.names[name])  name = t.names[name]; 
    215235      var attribute = element.attributes[name]; 
    216       if(attribute) return attribute.nodeValue
     236      return attribute ? attribute.nodeValue : null
    217237    }     
    218238    return element.getAttribute(name); 
     
    316336  }, 
    317337   
    318   setStyle: function(element, styles) { 
     338  setStyle: function(element, styles, camelized) { 
    319339    element = $(element); 
    320340    var elementStyle = element.style; 
    321     for (var property in styles) { 
    322       var value = styles[property]; 
    323       if (property == 'opacity') { 
    324         element.setOpacity(value) 
    325       } else { 
    326         property = (property == 'float' || property == 'cssFloat') ? 
    327           ((elementStyle.styleFloat === undefined) ? 'cssFloat' : 'styleFloat') : property.camelize(); 
    328         elementStyle[property] = value; 
    329       } 
    330     } 
     341 
     342    for (var property in styles) 
     343      if (property == 'opacity') element.setOpacity(styles[property]) 
     344      else  
     345        elementStyle[(property == 'float' || property == 'cssFloat') ? 
     346          (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :  
     347          (camelized ? property : property.camelize())] = styles[property]; 
     348 
    331349    return element; 
    332350  }, 
     
    406424    element._overflow = null; 
    407425    return element; 
    408   } 
     426  }   
    409427}; 
    410428 
    411 Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); 
     429Object.extend(Element.Methods, { 
     430  childOf: Element.Methods.descendantOf, 
     431  childElements: Element.Methods.immediateDescendants 
     432}); 
    412433 
    413434if (Prototype.Browser.Opera) {  
     
    419440      case 'right':  
    420441      case 'bottom':  
    421         if(Element._getStyle(element, 'position') == 'static') return null;  
     442        if (Element._getStyle(element, 'position') == 'static') return null;  
    422443      default: return Element._getStyle(element, style);  
    423     }  
     444    } 
    424445  };  
    425446} 
    426  
    427 if (Prototype.Browser.IE) { 
     447else if (Prototype.Browser.IE) { 
    428448  Element.Methods.getStyle = function(element, style) { 
    429449    element = $(element); 
     
    457477    return element;    
    458478  }; 
    459 
    460  
    461 if (Prototype.Browser.Gecko) { 
    462   Element.Methods.setOpacity = function(element, value) { 
    463     element = $(element); 
    464     element.style.opacity = (value == 1) ? 0.999999 :  
    465       (value === '') ? '' : (value < 0.00001) ? 0 : value; 
    466     return element; 
    467   }; 
    468 
    469  
    470 Element._attributeTranslations = {}; 
    471  
    472 Element._attributeTranslations.names = { 
    473   colspan:   "colSpan", 
    474   rowspan:   "rowSpan", 
    475   valign:    "vAlign", 
    476   datetime:  "dateTime", 
    477   accesskey: "accessKey", 
    478   tabindex:  "tabIndex", 
    479   enctype:   "encType", 
    480   maxlength: "maxLength", 
    481   readonly:  "readOnly", 
    482   longdesc:  "longDesc" 
    483 }; 
    484  
    485 Element._attributeTranslations.values = { 
    486   _getAttr: function(element, attribute) { 
    487     return element.getAttribute(attribute, 2); 
    488   }, 
    489    
    490   _flag: function(element, attribute) { 
    491     return $(element).hasAttribute(attribute) ? attribute : null; 
    492   }, 
    493    
    494   style: function(element) { 
    495     return element.style.cssText.toLowerCase(); 
    496   }, 
    497    
    498   title: function(element) { 
    499     var node = element.getAttributeNode('title'); 
    500     return node.specified ? node.nodeValue : null; 
    501   } 
    502 }; 
    503  
    504 Object.extend(Element._attributeTranslations.values, { 
    505   href: Element._attributeTranslations.values._getAttr, 
    506   src:  Element._attributeTranslations.values._getAttr, 
    507   disabled: Element._attributeTranslations.values._flag, 
    508   checked:  Element._attributeTranslations.values._flag, 
    509   readonly: Element._attributeTranslations.values._flag, 
    510   multiple: Element._attributeTranslations.values._flag 
    511 }); 
    512  
    513 Element.Methods.Simulated = { 
    514   hasAttribute: function(element, attribute) { 
    515     var t = Element._attributeTranslations; 
    516     attribute = t.names[attribute] || attribute; 
    517     return $(element).getAttributeNode(attribute).specified; 
    518   } 
    519 }; 
    520  
    521 Element.Methods.ByTag = {}; 
    522  
    523 // IE is missing .innerHTML support for TABLE-related elements 
    524 if (Prototype.Browser.IE){ 
     479 
     480  // IE is missing .innerHTML support for TABLE-related elements 
    525481  Element.Methods.update = function(element, html) { 
    526482    element = $(element); 
     
    543499          depth = 4; 
    544500      } 
    545       $A(element.childNodes).each(function(node){ 
    546         element.removeChild(node) 
    547       }); 
    548       depth.times(function(){ div = div.firstChild }); 
    549    
    550       $A(div.childNodes).each( 
    551         function(node){ element.appendChild(node) }); 
     501      $A(element.childNodes).each(function(node) { element.removeChild(node) }); 
     502      depth.times(function() { div = div.firstChild }); 
     503      $A(div.childNodes).each(function(node) { element.appendChild(node) }); 
    552504    } else { 
    553505      element.innerHTML = html.stripScripts(); 
    554506    } 
    555     setTimeout(function() {html.evalScripts()}, 10); 
    556     return element; 
     507    setTimeout(function() { html.evalScripts() }, 10); 
     508    return element; 
     509  } 
     510
     511else if (Prototype.Browser.Gecko) { 
     512  Element.Methods.setOpacity = function(element, value) { 
     513    element = $(element); 
     514    element.style.opacity = (value == 1) ? 0.999999 :  
     515      (value === '') ? '' : (value < 0.00001) ? 0 : value; 
     516    return element; 
     517  }; 
     518
     519 
     520Element._attributeTranslations = { 
     521  names: { 
     522    colspan:   "colSpan", 
     523    rowspan:   "rowSpan", 
     524    valign:    "vAlign", 
     525    datetime:  "dateTime", 
     526    accesskey: "accessKey", 
     527    tabindex:  "tabIndex", 
     528    enctype:   "encType", 
     529    maxlength: "maxLength", 
     530    readonly:  "readOnly", 
     531    longdesc:  "longDesc" 
     532  }, 
     533  values: { 
     534    _getAttr: function(element, attribute) { 
     535      return element.getAttribute(attribute, 2); 
     536    }, 
     537    _flag: function(element, attribute) { 
     538      return $(element).hasAttribute(attribute) ? attribute : null; 
     539    }, 
     540    style: function(element) { 
     541      return element.style.cssText.toLowerCase(); 
     542    }, 
     543    title: function(element) { 
     544      var node = element.getAttributeNode('title'); 
     545      return node.specified ? node.nodeValue : null; 
     546    } 
    557547  } 
    558548}; 
     549 
     550(function() { 
     551  Object.extend(this, { 
     552    href: this._getAttr, 
     553    src:  this._getAttr, 
     554    type: this._getAttr, 
     555    disabled: this._flag, 
     556    checked:  this._flag, 
     557    readonly: this._flag, 
     558    multiple: this._flag 
     559  }); 
     560}).call(Element._attributeTranslations.values); 
     561 
     562Element.Methods.Simulated = { 
     563  hasAttribute: function(element, attribute) { 
     564    var t = Element._attributeTranslations, node; 
     565    attribute = t.names[attribute] || attribute; 
     566    node = $(element).getAttributeNode(attribute); 
     567    return node && node.specified; 
     568  } 
     569}; 
     570 
     571Element.Methods.ByTag = {}; 
    559572 
    560573Object.extend(Element, Element.Methods); 
     
    567580} 
    568581 
     582Element.hasAttribute = function(element, attribute) { 
     583  if (element.hasAttribute) return element.hasAttribute(attribute); 
     584  return Element.Methods.Simulated.hasAttribute(element, attribute); 
     585}; 
     586 
    569587Element.addMethods = function(methods) { 
    570588  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; 
     589   
     590  if (!methods) { 
     591    Object.extend(Form, Form.Methods); 
     592    Object.extend(Form.Element, Form.Element.Methods); 
     593    Object.extend(Element.Methods.ByTag, { 
     594      "FORM":     Object.clone(Form.Methods), 
     595      "INPUT":    Object.clone(Form.Element.Methods), 
     596      "SELECT":   Object.clone(Form.Element.Methods), 
     597      "TEXTAREA": Object.clone(Form.Element.Methods) 
     598    }); 
     599  } 
     600   
    571601  if (arguments.length == 2) { 
    572602    var tagName = methods; 
     
    574604  } 
    575605   
    576   if (!tagName) 
    577     Object.extend(Element.Methods, methods || {});   
     606  if (!tagName) Object.extend(Element.Methods, methods || {});   
    578607  else { 
    579     if (tagName.constructor == Array) { 
    580       tagName.each(extend); 
    581     } 
     608    if (tagName.constructor == Array) tagName.each(extend); 
    582609    else extend(tagName); 
    583610  } 
     
    637664    } 
    638665  }   
     666 
     667  Object.extend(Element, Element.Methods); 
     668  delete Element.ByTag; 
    639669}; 
    640670 
    641 var Toggle = new Object(); 
    642 Toggle.display = Element.toggle; 
     671var Toggle = { display: Element.toggle }; 
    643672 
    644673/*--------------------------------------------------------------------------*/ 
  • spinoffs/prototype/branches/form/src/form.js

    r6530 r6610  
    9494      options.method = form.method; 
    9595     
    96     return new Ajax.Request(form.action, options); 
    97   } 
    98 
    99  
    100 Object.extend(Form, Form.Methods); 
     96    return new Ajax.Request(form.readAttribute('action'), options); 
     97  } 
     98
    10199 
    102100/*--------------------------------------------------------------------------*/ 
     
    175173} 
    176174 
    177 Object.extend(Form.Element, Form.Element.Methods); 
    178 Object.extend(Element.Methods.ByTag, { 
    179   "FORM":     Object.clone(Form.Methods), 
    180   "INPUT":    Object.clone(Form.Element.Methods), 
    181   "SELECT":   Object.clone(Form.Element.Methods), 
    182   "TEXTAREA": Object.clone(Form.Element.Methods) 
    183 }); 
    184  
    185175/*--------------------------------------------------------------------------*/ 
    186176 
    187177var Field = Form.Element; 
    188178var $F = function(element, value) { 
    189   return value === undefined ? Form.Element.getValue(element) : 
     179  return value === undefined ? Form.Element.Methods.getValue(element) : 
    190180    (Form.Element.setValue(element, value), value); 
    191181} 
  • spinoffs/prototype/branches/form/test/unit/dom.html

    r6255 r6610  
    153153 
    154154<div id="element_extend_test"> </div> 
     155 
     156<div id="element_reextend_test"><div id="discard_1"></div></div> 
    155157 
    156158<div id="test_whitespace"> <span> </span> 
     
    211213<a id="attributes_with_issues_2" href="" accesskey="" tabindex="" title=""></a> 
    212214<a id="attributes_with_issues_3"></a> 
     215<form id="attributes_with_issues_form" method="post" action="blah"> 
     216  <input type="checkbox" id="attributes_with_issues_checked" name="a" checked="checked"/> 
     217  <input type="checkbox" id="attributes_with_issues_disabled" name="b" checked="checked" disabled="disabled"/> 
     218  <input type="text" id="attributes_with_issues_readonly" name="c" readonly="readonly" value="blech"/> 
     219  <input type="date" id="attributes_with_issues_type" value="blech" /> 
     220  <select id="attributes_with_issues_multiple" name="e" multiple="multiple"> 
     221    <option>blech</option> 
     222    <option>blah</option> 
     223  </select> 
     224</form> 
    213225 
    214226<div id="dom_attribute_precedence"> 
    215   <form
     227  <form action="blech" method="post"
    216228    <input type="submit" id="update" /> 
    217229  </form> 
     
    243255</table> 
    244256 
     257<div id="dimensions-nester" style="width: 500px;"> 
     258  <div id="dimensions-nestee" style="display: none">This is a nested DIV. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> 
     259</div> 
     260         
     261 
    245262<p id="test-empty"></p> 
    246263<p id="test-empty-but-contains-whitespace">   
     
    255272// <![CDATA[ 
    256273 
    257   var testVar = 'to be updated'; 
     274  var testVar = 'to be updated', testVar2 = ''; 
     275 
     276  Element.addMethods({ 
     277    hashBrowns: function(element) { return 'hash browns'; } 
     278  }); 
    258279 
    259280  Element.addMethods("LI", { 
     
    300321     
    301322    testElementVisible: function(){with(this) { 
    302         assertNotEqual('none', $('test-visible').style.display); 
    303         assertEqual('none', $('test-hidden').style.display); 
     323      assertNotEqual('none', $('test-visible').style.display); 
     324      assertEqual('none', $('test-hidden').style.display); 
    304325    }}, 
    305326     
    306327    testElementToggle: function(){with(this) { 
    307         $('test-toggle-visible').toggle(); 
    308         assert(!$('test-toggle-visible').visible()); 
    309         $('test-toggle-visible').toggle(); 
    310         assert($('test-toggle-visible').visible()); 
    311         $('test-toggle-hidden').toggle(); 
    312         assert($('test-toggle-hidden').visible()); 
    313         $('test-toggle-hidden').toggle(); 
    314         assert(!$('test-toggle-hidden').visible()); 
     328      $('test-toggle-visible').toggle(); 
     329      assert(!$('test-toggle-visible').visible()); 
     330      $('test-toggle-visible').toggle(); 
     331      assert($('test-toggle-visible').visible()); 
     332      $('test-toggle-hidden').toggle(); 
     333      assert($('test-toggle-hidden').visible()); 
     334      $('test-toggle-hidden').toggle(); 
     335      assert(!$('test-toggle-hidden').visible()); 
    315336    }}, 
    316337     
    317338    testElementShow: function(){with(this) { 
    318         $('test-show-visible').show(); 
    319         assert($('test-show-visible').visible()); 
    320         $('test-show-hidden').show(); 
    321         assert($('test-show-hidden').visible()); 
     339      $('test-show-visible').show(); 
     340      assert($('test-show-visible').visible()); 
     341      $('test-show-hidden').show(); 
     342      assert($('test-show-hidden').visible()); 
    322343    }}, 
    323344     
    324345    testElementHide: function(){with(this) { 
    325         $('test-hide-visible').hide(); 
    326         assert(!$('test-hide-visible').visible()); 
    327         $('test-hide-hidden').hide(); 
    328         assert(!$('test-hide-hidden').visible()); 
     346      $('test-hide-visible').hide(); 
     347      assert(!$('test-hide-visible').visible()); 
     348      $('test-hide-hidden').hide(); 
     349      assert(!$('test-hide-hidden').visible()); 
    329350    }},  
    330351     
    331352    testElementRemove: function(){with(this) { 
    332         $('removable').remove(); 
    333         assert($('removable-container').empty()); 
     353      $('removable').remove(); 
     354      assert($('removable-container').empty()); 
    334355    }},   
    335356      
     
    349370 
    350371    testElementUpdateWithScript: function() {with(this) { 
    351       $('testdiv').update('hello from div!<script>testVar="hello!"</'+'script>'); 
     372      $('testdiv').update('hello from div!<script>\ntestVar="hello!";\n</'+'script>'); 
    352373      assertEqual('hello from div!',$('testdiv').innerHTML); 
    353374      wait(100,function(){ 
     
    360381        wait(100,function(){ 
    361382          assertEqual('another hello!',testVar); 
     383           
     384          Element.update('testdiv','a\n<script>testVar="a"\ntestVar="b"</'+'script>'); 
     385          wait(100,function(){ 
     386            assertEqual('b', testVar); 
     387             
     388            Element.update('testdiv', 
     389              'x<script>testVar2="a"</'+'script>\nblah\n'+ 
     390              'x<script>testVar2="b"</'+'script>'); 
     391            wait(100,function(){ 
     392              assertEqual('b', testVar2); 
     393            }); 
     394          }); 
    362395        }); 
    363396      }); 
     
    431464        'div#nav_tests_isolator', 'body', 'html'); 
    432465      assertElementsMatch(ancestors.last().ancestors()); 
     466       
     467      var dummy = $(document.createElement('DIV')); 
     468      dummy.innerHTML = '<div></div>'.times(3); 
     469      assert(typeof $(dummy.childNodes[0]).ancestors()[0]['setStyle'] == 'function'); 
    433470    }}, 
    434471     
     
    438475        'em.dim', 'li#navigation_test_f', 'em', 'li', 'em'); 
    439476      assertElementsMatch($('navigation_test_f').descendants(), 'em'); 
    440     }}, 
    441      
    442     testElementImmediateDescendants: function() {with(this) { 
    443       assertElementsMatch($('navigation_test').immediateDescendants(), 
     477       
     478      var dummy = $(document.createElement('DIV')); 
     479      dummy.innerHTML = '<div></div>'.times(3); 
     480      assert(typeof dummy.descendants()[0].setStyle == 'function'); 
     481    }}, 
     482     
     483    testElementFirstDescendant: function() {with(this) { 
     484      assertElementMatches($('navigation_test').firstDescendant(), 'li.first'); 
     485      assertNull($('navigation_test_next_sibling').firstDescendant()); 
     486    }}, 
     487     
     488    testElementChildElements: function() {with(this) { 
     489      assertElementsMatch($('navigation_test').childElements(), 
    444490        'li.first', 'li', 'li#navigation_test_c', 'li.last'); 
    445491      assertNotEqual(0, $('navigation_test_next_sibling').childNodes.length); 
    446       assertEnumEqual([], $('navigation_test_next_sibling').immediateDescendants()); 
    447     }}, 
     492      assertEnumEqual([], $('navigation_test_next_sibling').childElements()); 
     493       
     494      var dummy = $(document.createElement('DIV')); 
     495      dummy.innerHTML = '<div></div>'.times(3); 
     496      assert(typeof dummy.childElements()[0].setStyle == 'function'); 
     497    }}, 
     498 
     499    testElementImmediateDescendants: function() {with(this) { 
     500      assertIdentical(Element.Methods.childElements, Element.Methods.immediateDescendants); 
     501    }},   
    448502         
    449503    testElementPreviousSiblings: function() {with(this) { 
     
    451505        'span#nav_test_prev_sibling', 'p.test', 'div', 'div#nav_test_first_sibling'); 
    452506      assertElementsMatch($('navigation_test_f').previousSiblings(), 'li'); 
     507       
     508      var dummy = $(document.createElement('DIV')); 
     509      dummy.innerHTML = '<div></div>'.times(3); 
     510      assert(typeof $(dummy.childNodes[1]).previousSiblings()[0].setStyle == 'function'); 
    453511    }}, 
    454512     
     
    457515        'div#navigation_test_next_sibling', 'p'); 
    458516      assertElementsMatch($('navigation_test_f').nextSiblings()); 
     517       
     518      var dummy = $(document.createElement('DIV')); 
     519      dummy.innerHTML = '<div></div>'.times(3); 
     520      assert(typeof $(dummy.childNodes[0]).nextSiblings()[0].setStyle == 'function'); 
    459521    }}, 
    460522     
     
    463525        'div#nav_test_first_sibling', 'div', 'p.test', 
    464526        'span#nav_test_prev_sibling', 'div#navigation_test_next_sibling', 'p'); 
     527         
     528      var dummy = $(document.createElement('DIV')); 
     529      dummy.innerHTML = '<div></div>'.times(3); 
     530      assert(typeof $(dummy.childNodes[0]).siblings()[0].setStyle == 'function'); 
    465531    }}, 
    466532     
     
    475541      assertEqual(undefined, element.up('garbage')); 
    476542      assertEqual(undefined, element.up(6)); 
     543       
     544      var dummy = $(document.createElement('DIV')); 
     545      dummy.innerHTML = '<div></div>'.times(3); 
     546      assert(typeof $(dummy.childNodes[0]).up().setStyle == 'function'); 
    477547    }}, 
    478548     
     
    484554      assertElementMatches(element.down('li', 5), 'li.last'); 
    485555      assertElementMatches(element.down('ul').down('li', 1), 'li#navigation_test_f'); 
     556       
     557      var dummy = $(document.createElement('DIV')); 
     558      dummy.innerHTML = '<div></div>'.times(3); 
     559      assert(typeof dummy.down().setStyle == 'function'); 
    486560    }}, 
    487561     
     
    493567      assertEqual(undefined, element.previous(3)); 
    494568      assertEqual(undefined, $('navigation_test').down().previous()); 
     569       
     570      var dummy = $(document.createElement('DIV')); 
     571      dummy.innerHTML = '<div></div>'.times(3); 
     572      assert(typeof $(dummy.childNodes[1]).previous().setStyle == 'function'); 
    495573    }}, 
    496574     
     
    503581      assertEqual(undefined, element.next(3)); 
    504582      assertEqual(undefined, element.next(2).next()); 
     583       
     584      var dummy = $(document.createElement('DIV')); 
     585      dummy.innerHTML = '<div></div>'.times(3); 
     586      assert(typeof $(dummy.childNodes[0]).next().setStyle == 'function'); 
    505587    }}, 
    506588     
     
    559641    }}, 
    560642     
     643    testElementExtendReextendsDiscardedNodes: function() {with(this) { 
     644      assertRespondsTo('show', $('discard_1')); 
     645      $('element_reextend_test').innerHTML += '<div id="discard_2"></div>'; 
     646      assertRespondsTo('show', $('discard_1')); 
     647    }}, 
     648     
    561649    testElementCleanWhitespace: function() {with(this) { 
    562650      Element.cleanWhitespace("test_whitespace"); 
     
    629717      $('style_test_3').setStyle({ opacity: 0 }); 
    630718      assertEqual(0, $('style_test_3').getStyle('opacity')); 
     719    }}, 
     720     
     721    testElementSetStyleCamelized: function() { with(this) { 
     722      assertNotEqual('30px', $('style_test_3').style.marginTop); 
     723      $('style_test_3').setStyle({ marginTop: '30px'}, true); 
     724      assertEqual('30px', $('style_test_3').style.marginTop); 
    631725    }}, 
    632726     
     
    721815    testElementReadAttribute: function() {with(this) { 
    722816      assertEqual('test.html' , $('attributes_with_issues_1').readAttribute('href')); 
     817       
    723818      assertEqual('L' , $('attributes_with_issues_1').readAttribute('accesskey')); 
    724819      assertEqual('50' , $('attributes_with_issues_1').readAttribute('tabindex')); 
     
    726821 
    727822      ['href', 'accesskey', 'accesskey', 'title'].each(function(attr){ 
    728           assertEqual('' , $('attributes_with_issues_2').readAttribute(attr)); 
     823        assertEqual('' , $('attributes_with_issues_2').readAttribute(attr)); 
    729824      }); 
    730      
     825       
     826      ['checked','disabled','readonly','multiple'].each(function(attr){ 
     827        assertEqual(attr, $('attributes_with_issues_'+attr).readAttribute(attr)); 
     828      }); 
     829       
     830      assertEqual('date', $('attributes_with_issues_type').readAttribute('type')); 
     831      assertEqual('text', $('attributes_with_issues_readonly').readAttribute('type')); 
     832       
    731833      var elements = $('custom_attributes').immediateDescendants(); 
    732834      assertEnumEqual(['1', '2'], elements.invoke('readAttribute', 'foo')); 
     
    735837     
    736838    testElementGetHeight: function() {with(this) { 
    737         assertIdentical(100, $('dimensions-visible').getHeight()); 
    738         assertIdentical(100, $('dimensions-display-none').getHeight()); 
     839      assertIdentical(100, $('dimensions-visible').getHeight()); 
     840      assertIdentical(100, $('dimensions-display-none').getHeight()); 
    739841    }}, 
    740842     
    741843    testElementGetWidth: function() {with(this) { 
    742         assertIdentical(200, $('dimensions-visible').getWidth()); 
    743         assertIdentical(200, $('dimensions-display-none').getWidth()); 
     844      assertIdentical(200, $('dimensions-visible').getWidth()); 
     845      assertIdentical(200, $('dimensions-display-none').getWidth()); 
    744846    }}, 
    745847     
    746848    testElementGetDimensions: function() {with(this) { 
    747         assertIdentical(100, $('dimensions-visible').getDimensions().height); 
    748         assertIdentical(200, $('dimensions-visible').getDimensions().width); 
    749         assertIdentical(100, $('dimensions-display-none').getDimensions().height); 
    750         assertIdentical(200, $('dimensions-display-none').getDimensions().width); 
    751          
    752         assertIdentical(100, $('dimensions-visible-pos-rel').getDimensions().height); 
    753         assertIdentical(200, $('dimensions-visible-pos-rel').getDimensions().width); 
    754         assertIdentical(100, $('dimensions-display-none-pos-rel').getDimensions().height); 
    755         assertIdentical(200, $('dimensions-display-none-pos-rel').getDimensions().width); 
    756          
    757         assertIdentical(100, $('dimensions-visible-pos-abs').getDimensions().height); 
    758         assertIdentical(200, $('dimensions-visible-pos-abs').getDimensions().width); 
    759         assertIdentical(100, $('dimensions-display-none-pos-abs').getDimensions().height); 
    760         assertIdentical(200, $('dimensions-display-none-pos-abs').getDimensions().width); 
    761          
    762         $('dimensions-td').hide(); 
    763         assertIdentical(100, $('dimensions-td').getDimensions().height); 
    764         assertIdentical(200, $('dimensions-td').getDimensions().width); 
    765         $('dimensions-td').show(); 
    766          
    767         $('dimensions-tr').hide(); 
    768         assertIdentical(100, $('dimensions-tr').getDimensions().height); 
    769         assertIdentical(200, $('dimensions-tr').getDimensions().width); 
    770         $('dimensions-tr').show(); 
    771          
    772         $('dimensions-table').hide(); 
    773         assertIdentical(100, $('dimensions-table').getDimensions().height); 
    774         assertIdentical(200, $('dimensions-table').getDimensions().width); 
     849      assertIdentical(100, $('dimensions-visible').getDimensions().height); 
     850      assertIdentical(200, $('dimensions-visible').getDimensions().width); 
     851      assertIdentical(100, $('dimensions-display-none').getDimensions().height); 
     852      assertIdentical(200, $('dimensions-display-none').getDimensions().width); 
     853       
     854      assertIdentical(100, $('dimensions-visible-pos-rel').getDimensions().height); 
     855      assertIdentical(200, $('dimensions-visible-pos-rel').getDimensions().width); 
     856      assertIdentical(100, $('dimensions-display-none-pos-rel').getDimensions().height); 
     857      assertIdentical(200, $('dimensions-display-none-pos-rel').getDimensions().width); 
     858       
     859      assertIdentical(100, $('dimensions-visible-pos-abs').getDimensions().height); 
     860      assertIdentical(200, $('dimensions-visible-pos-abs').getDimensions().width); 
     861      assertIdentical(100, $('dimensions-display-none-pos-abs').getDimensions().height); 
     862      assertIdentical(200, $('dimensions-display-none-pos-abs').getDimensions().width); 
     863       
     864      // known failing issue 
     865      // assert($('dimensions-nestee').getDimensions().width <= 500, 'check for proper dimensions of hidden child elements'); 
     866       
     867      $('dimensions-td').hide(); 
     868      assertIdentical(100, $('dimensions-td').getDimensions().height); 
     869      assertIdentical(200, $('dimensions-td').getDimensions().width); 
     870      $('dimensions-td').show(); 
     871       
     872      $('dimensions-tr').hide(); 
     873      assertIdentical(100, $('dimensions-tr').getDimensions().height); 
     874      assertIdentical(200, $('dimensions-tr').getDimensions().width); 
     875      $('dimensions-tr').show(); 
     876       
     877      $('dimensions-table').hide(); 
     878      assertIdentical(100, $('dimensions-table').getDimensions().height); 
     879      assertIdentical(200, $('dimensions-table').getDimensions().width); 
    775880    }}, 
    776881         
     
    842947    }}, 
    843948     
    844     testSpecificElementMethods: function() {with(this) { 
     949    testCustomElementMethods: function() {with(this) { 
     950      var elem = $('navigation_test_f'); 
     951      assertRespondsTo('hashBrowns', elem); 
     952      assertEqual('hash browns', elem.hashBrowns()); 
     953       
     954      assertRespondsTo('hashBrowns', Element); 
     955      assertEqual('hash browns', Element.hashBrowns(elem)); 
     956    }}, 
     957     
     958    testSpecificCustomElementMethods: function() {with(this) { 
    845959      var elem = $('navigation_test_f'); 
    846960       
     
    860974      assertEqual("orange juice", elem.orangeJuice()); 
    861975      assertEqual("orange juice", elem2.orangeJuice()); 
    862     }}     
     976       
     977      assert(typeof Element.orangeJuice == 'undefined'); 
     978      assert(typeof Element.pancakes == 'undefined'); 
     979      assert(typeof Element.waffles == 'undefined'); 
     980       
     981    }}, 
     982     
     983    testScriptFragment: function() {with(this) { 
     984      var element = document.createElement('div'); 
     985      // tests an issue with Safari 2.0 crashing when the ScriptFragment 
     986      // regular expression is using a pipe-based approach for 
     987      // matching any character 
     988      ['\r','\n',' '].each(function(character){ 
     989        $(element).update("<script>"+character.times(10000)+"</scr"+"ipt>"); 
     990        assertEqual('', element.innerHTML); 
     991      }); 
     992      $(element).update("<script>var blah='"+'\\'.times(10000)+"'</scr"+"ipt>"); 
     993      assertEqual('', element.innerHTML); 
     994    }} 
    863995  }, 'testlog'); 
    864996 
  • spinoffs/prototype/branches/form/test/unit/form.html

    r6530 r6610  
    2929  <input type="text" name="val2" id="input_disabled" disabled="disabled" value="5" /> 
    3030  <input type="submit" /> 
     31  <input type="text" name="action" value="blah" /> 
    3132</form> 
    3233<div id="form_wrapper"> 
     
    122123    }}, 
    123124     
     125    testDollarF: function(){ with(this) { 
     126      assertEqual("4", $F("input_enabled")); 
     127    }}, 
     128     
    124129    testFormElementEventObserver: function(){ with(this) { 
    125130      var observer = new Form.Element.EventObserver('input_enabled', function(){ 
     
    311316      // Checks that disabled element is not included in serialized form. 
    312317      $('input_enabled').enable(); 
    313       assertEqual('val1=4', Form.serialize('form')); 
     318      assertEqual('val1=4&action=blah', Form.serialize('form')); 
    314319 
    315320      // Checks that select-related serializations work just fine 
     
    367372      request = $("form").request(); 
    368373      assert($("form").hasAttribute("method")); 
    369       assert(request.url.endsWith("fixtures/empty.js?val1=4")); 
     374      assert(request.url.endsWith("fixtures/empty.js?val1=4&action=blah")); 
    370375      assertEqual("get", request.method); 
    371376       
    372377      request = $("form").request({method: "post"}); 
    373378      assert(request.url.endsWith("fixtures/empty.js")); 
    374       assertEqual("val1=4", Hash.toQueryString(request.options.parameters)); 
     379      assertEqual("val1=4&action=blah", Hash.toQueryString(request.options.parameters)); 
    375380      assertEqual("post", request.method); 
    376381    }},