Changeset 6610
- Timestamp:
- 04/28/07 15:40:30 (1 year ago)
- Files:
-
- spinoffs/prototype/branches/form/src/dom.js (modified) (13 diffs)
- spinoffs/prototype/branches/form/src/form.js (modified) (2 diffs)
- spinoffs/prototype/branches/form/test/unit/dom.html (modified) (23 diffs)
- spinoffs/prototype/branches/form/test/unit/form.html (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
spinoffs/prototype/branches/form/src/dom.js
r6255 r6610 19 19 return results; 20 20 }; 21 } 22 23 document.getElementsByClassName = function(className, parentElement) { 24 if (Prototype.BrowserFeatures.XPath) { 21 22 document.getElementsByClassName = function(className, parentElement) { 25 23 var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; 26 24 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; 37 36 }; 38 37 39 38 /*--------------------------------------------------------------------------*/ 40 39 41 if (!window.Element) 42 var Element = new Object(); 43 40 if (!window.Element) var Element = {}; 44 41 45 42 Element.extend = function(element) { … … 67 64 } 68 65 69 element._extended = true;66 element._extended = Prototype.emptyFunction; 70 67 return element; 71 68 }; … … 153 150 154 151 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); 156 159 }, 157 160 … … 183 186 184 187 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]; 186 193 }, 187 194 188 195 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]; 190 201 }, 191 202 192 203 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]; 194 209 }, 195 210 196 211 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]; 198 217 }, 199 218 … … 209 228 readAttribute: function(element, name) { 210 229 element = $(element); 211 if (document.all && !window.opera) { 230 if (Prototype.Browser.IE) { 231 if (!element.attributes) return null; 212 232 var t = Element._attributeTranslations; 213 233 if (t.values[name]) return t.values[name](element, name); 214 234 if (t.names[name]) name = t.names[name]; 215 235 var attribute = element.attributes[name]; 216 if(attribute) return attribute.nodeValue;236 return attribute ? attribute.nodeValue : null; 217 237 } 218 238 return element.getAttribute(name); … … 316 336 }, 317 337 318 setStyle: function(element, styles ) {338 setStyle: function(element, styles, camelized) { 319 339 element = $(element); 320 340 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 331 349 return element; 332 350 }, … … 406 424 element._overflow = null; 407 425 return element; 408 } 426 } 409 427 }; 410 428 411 Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); 429 Object.extend(Element.Methods, { 430 childOf: Element.Methods.descendantOf, 431 childElements: Element.Methods.immediateDescendants 432 }); 412 433 413 434 if (Prototype.Browser.Opera) { … … 419 440 case 'right': 420 441 case 'bottom': 421 if (Element._getStyle(element, 'position') == 'static') return null;442 if (Element._getStyle(element, 'position') == 'static') return null; 422 443 default: return Element._getStyle(element, style); 423 } 444 } 424 445 }; 425 446 } 426 427 if (Prototype.Browser.IE) { 447 else if (Prototype.Browser.IE) { 428 448 Element.Methods.getStyle = function(element, style) { 429 449 element = $(element); … … 457 477 return element; 458 478 }; 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 525 481 Element.Methods.update = function(element, html) { 526 482 element = $(element); … … 543 499 depth = 4; 544 500 } 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) }); 552 504 } else { 553 505 element.innerHTML = html.stripScripts(); 554 506 } 555 setTimeout(function() {html.evalScripts()}, 10); 556 return element; 507 setTimeout(function() { html.evalScripts() }, 10); 508 return element; 509 } 510 } 511 else 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 520 Element._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 } 557 547 } 558 548 }; 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 562 Element.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 571 Element.Methods.ByTag = {}; 559 572 560 573 Object.extend(Element, Element.Methods); … … 567 580 } 568 581 582 Element.hasAttribute = function(element, attribute) { 583 if (element.hasAttribute) return element.hasAttribute(attribute); 584 return Element.Methods.Simulated.hasAttribute(element, attribute); 585 }; 586 569 587 Element.addMethods = function(methods) { 570 588 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 571 601 if (arguments.length == 2) { 572 602 var tagName = methods; … … 574 604 } 575 605 576 if (!tagName) 577 Object.extend(Element.Methods, methods || {}); 606 if (!tagName) Object.extend(Element.Methods, methods || {}); 578 607 else { 579 if (tagName.constructor == Array) { 580 tagName.each(extend); 581 } 608 if (tagName.constructor == Array) tagName.each(extend); 582 609 else extend(tagName); 583 610 } … … 637 664 } 638 665 } 666 667 Object.extend(Element, Element.Methods); 668 delete Element.ByTag; 639 669 }; 640 670 641 var Toggle = new Object(); 642 Toggle.display = Element.toggle; 671 var Toggle = { display: Element.toggle }; 643 672 644 673 /*--------------------------------------------------------------------------*/ spinoffs/prototype/branches/form/src/form.js
r6530 r6610 94 94 options.method = form.method; 95 95 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 } 101 99 102 100 /*--------------------------------------------------------------------------*/ … … 175 173 } 176 174 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 185 175 /*--------------------------------------------------------------------------*/ 186 176 187 177 var Field = Form.Element; 188 178 var $F = function(element, value) { 189 return value === undefined ? Form.Element. getValue(element) :179 return value === undefined ? Form.Element.Methods.getValue(element) : 190 180 (Form.Element.setValue(element, value), value); 191 181 } spinoffs/prototype/branches/form/test/unit/dom.html
r6255 r6610 153 153 154 154 <div id="element_extend_test"> </div> 155 156 <div id="element_reextend_test"><div id="discard_1"></div></div> 155 157 156 158 <div id="test_whitespace"> <span> </span> … … 211 213 <a id="attributes_with_issues_2" href="" accesskey="" tabindex="" title=""></a> 212 214 <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> 213 225 214 226 <div id="dom_attribute_precedence"> 215 <form >227 <form action="blech" method="post"> 216 228 <input type="submit" id="update" /> 217 229 </form> … … 243 255 </table> 244 256 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 245 262 <p id="test-empty"></p> 246 263 <p id="test-empty-but-contains-whitespace"> … … 255 272 // <![CDATA[ 256 273 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 }); 258 279 259 280 Element.addMethods("LI", { … … 300 321 301 322 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); 304 325 }}, 305 326 306 327 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()); 315 336 }}, 316 337 317 338 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()); 322 343 }}, 323 344 324 345 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()); 329 350 }}, 330 351 331 352 testElementRemove: function(){with(this) { 332 $('removable').remove();333 assert($('removable-container').empty());353 $('removable').remove(); 354 assert($('removable-container').empty()); 334 355 }}, 335 356 … … 349 370 350 371 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>'); 352 373 assertEqual('hello from div!',$('testdiv').innerHTML); 353 374 wait(100,function(){ … … 360 381 wait(100,function(){ 361 382 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 }); 362 395 }); 363 396 }); … … 431 464 'div#nav_tests_isolator', 'body', 'html'); 432 465 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'); 433 470 }}, 434 471 … … 438 475 'em.dim', 'li#navigation_test_f', 'em', 'li', 'em'); 439 476 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(), 444 490 'li.first', 'li', 'li#navigation_test_c', 'li.last'); 445 491 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 }}, 448 502 449 503 testElementPreviousSiblings: function() {with(this) { … … 451 505 'span#nav_test_prev_sibling', 'p.test', 'div', 'div#nav_test_first_sibling'); 452 506 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'); 453 511 }}, 454 512 … … 457 515 'div#navigation_test_next_sibling', 'p'); 458 516 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'); 459 521 }}, 460 522 … … 463 525 'div#nav_test_first_sibling', 'div', 'p.test', 464 526 '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'); 465 531 }}, 466 532 … … 475 541 assertEqual(undefined, element.up('garbage')); 476 542 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'); 477 547 }}, 478 548 … … 484 554 assertElementMatches(element.down('li', 5), 'li.last'); 485 555 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'); 486 560 }}, 487 561 … … 493 567 assertEqual(undefined, element.previous(3)); 494 568 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'); 495 573 }}, 496 574 … … 503 581 assertEqual(undefined, element.next(3)); 504 582 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'); 505 587 }}, 506 588 … … 559 641 }}, 560 642 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 561 649 testElementCleanWhitespace: function() {with(this) { 562 650 Element.cleanWhitespace("test_whitespace"); … … 629 717 $('style_test_3').setStyle({ opacity: 0 }); 630 718 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); 631 725 }}, 632 726 … … 721 815 testElementReadAttribute: function() {with(this) { 722 816 assertEqual('test.html' , $('attributes_with_issues_1').readAttribute('href')); 817 723 818 assertEqual('L' , $('attributes_with_issues_1').readAttribute('accesskey')); 724 819 assertEqual('50' , $('attributes_with_issues_1').readAttribute('tabindex')); … … 726 821 727 822 ['href', 'accesskey', 'accesskey', 'title'].each(function(attr){ 728 assertEqual('' , $('attributes_with_issues_2').readAttribute(attr));823 assertEqual('' , $('attributes_with_issues_2').readAttribute(attr)); 729 824 }); 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 731 833 var elements = $('custom_attributes').immediateDescendants(); 732 834 assertEnumEqual(['1', '2'], elements.invoke('readAttribute', 'foo')); … … 735 837 736 838 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()); 739 841 }}, 740 842 741 843 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()); 744 846 }}, 745 847 746 848 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); 775 880 }}, 776 881 … … 842 947 }}, 843 948 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) { 845 959 var elem = $('navigation_test_f'); 846 960 … … 860 974 assertEqual("orange juice", elem.orangeJuice()); 861 975 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 }} 863 995 }, 'testlog'); 864 996 spinoffs/prototype/branches/form/test/unit/form.html
r6530 r6610 29 29 <input type="text" name="val2" id="input_disabled" disabled="disabled" value="5" /> 30 30 <input type="submit" /> 31 <input type="text" name="action" value="blah" /> 31 32 </form> 32 33 <div id="form_wrapper"> … … 122 123 }}, 123 124 125 testDollarF: function(){ with(this) { 126 assertEqual("4", $F("input_enabled")); 127 }}, 128 124 129 testFormElementEventObserver: function(){ with(this) { 125 130 var observer = new Form.Element.EventObserver('input_enabled', function(){ … … 311 316 // Checks that disabled element is not included in serialized form. 312 317 $('input_enabled').enable(); 313 assertEqual('val1=4 ', Form.serialize('form'));318 assertEqual('val1=4&action=blah', Form.serialize('form')); 314 319 315 320 // Checks that select-related serializations work just fine … … 367 372 request = $("form").request(); 368 373 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")); 370 375 assertEqual("get", request.method); 371 376 372 377 request = $("form").request({method: "post"}); 373 378 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)); 375 380 assertEqual("post", request.method); 376 381 }},