Ticket #11475: iframe_patch.diff
| File iframe_patch.diff, 7.4 kB (added by jdalton, 4 months ago) |
|---|
-
dom.js
old new 11 11 12 12 if (Prototype.BrowserFeatures.XPath) { 13 13 document._getElementsByXPath = function(expression, parentElement) { 14 var results = [] ;15 var query = document.evaluate(expression, $(parentElement) || document,14 var results = [], doc = Element._getDocument(parentElement), 15 query = doc.evaluate(expression, $(parentElement) || doc, 16 16 null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 17 17 for (var i = 0, length = query.snapshotLength; i < length; i++) 18 18 results.push(Element.extend(query.snapshotItem(i))); … … 512 512 }, 513 513 514 514 positionedOffset: function(element) { 515 var valueT = 0, valueL = 0 ;515 var valueT = 0, valueL = 0, body = Element._getBodyElement(element); 516 516 do { 517 517 valueT += element.offsetTop || 0; 518 518 valueL += element.offsetLeft || 0; 519 519 element = element.offsetParent; 520 520 if (element) { 521 if (element .tagName.toUpperCase() == 'BODY') break;521 if (element === body) break; 522 522 var p = Element.getStyle(element, 'position'); 523 523 if (p !== 'static') break; 524 524 } … … 577 577 }, 578 578 579 579 getOffsetParent: function(element) { 580 var body = Element._getBodyElement(element); 580 581 if (element.offsetParent) return $(element.offsetParent); 581 if (element == document.body) return $(element);582 if (element == body) return $(body); 582 583 583 while ((element = element.parentNode) && element != document.body)584 while ((element = element.parentNode) && element != body) 584 585 if (Element.getStyle(element, 'position') != 'static') 585 586 return $(element); 586 587 587 return $( document.body);588 return $(body); 588 589 }, 589 590 590 591 viewportOffset: function(forElement) { 591 var valueT = 0, valueL = 0;592 forElement = $(forElement); 592 593 593 var element = forElement; 594 var valueT = 0, valueL = 0, 595 element = forElement, body = Element._getBodyElement(element); 594 596 do { 595 597 valueT += element.offsetTop || 0; 596 598 valueL += element.offsetLeft || 0; 597 599 598 600 // Safari fix 599 if (element.offsetParent == document.body &&601 if (element.offsetParent === body && 600 602 Element.getStyle(element, 'position') == 'absolute') break; 601 603 602 604 } while (element = element.offsetParent); 603 605 604 606 element = forElement; 605 607 do { 606 if (!Prototype.Browser.Opera || element .tagName.toUpperCase() == 'BODY') {608 if (!Prototype.Browser.Opera || element === body) { 607 609 valueT -= element.scrollTop || 0; 608 610 valueL -= element.scrollLeft || 0; 609 611 } … … 613 615 }, 614 616 615 617 clonePosition: function(element, source) { 616 var options = Object.extend({ 618 element = $(element); 619 620 var body = Element._getBodyElement(element), 621 options = Object.extend({ 617 622 setLeft: true, 618 623 setTop: true, 619 624 setWidth: true, … … 627 632 var p = source.viewportOffset(); 628 633 629 634 // find coordinate system to use 630 element = $(element);631 635 var delta = [0, 0]; 632 636 var parent = null; 633 637 // delta [0,0] will do fine with position: fixed elements, … … 638 642 } 639 643 640 644 // correct by body offsets (fixes Safari) 641 if (parent == document.body) {642 delta[0] -= document.body.offsetLeft;643 delta[1] -= document.body.offsetTop;645 if (parent === body) { 646 delta[0] -= body.offsetLeft; 647 delta[1] -= body.offsetTop; 644 648 } 645 649 646 650 // set position … … 659 663 childElements: Element.Methods.immediateDescendants 660 664 }); 661 665 666 Element._getDocument = function(element){ //assume element is not null 667 return element.ownerDocument || (element.nodeName == '#document')? element : document; 668 }; 669 670 Element._getDocumentElement = function(element){ 671 return Element._getDocument(element).documentElement; 672 }; 673 674 Element._getBodyElement = function(element){ 675 return Element._getDocument(element).body; 676 }; 677 662 678 Element._attributeTranslations = { 663 679 write: { 664 680 names: { … … 918 934 // positioned. For performance reasons, redefine Element#cumulativeOffset for 919 935 // KHTML/WebKit only. 920 936 Element.Methods.cumulativeOffset = function(element) { 921 var valueT = 0, valueL = 0; 937 element = $(element); 938 var valueT = 0, valueL = 0, body = Element._getBodyElement(element); 922 939 do { 923 940 valueT += element.offsetTop || 0; 924 941 valueL += element.offsetLeft || 0; 925 if (element.offsetParent == document.body)942 if (element.offsetParent == body) 926 943 if (Element.getStyle(element, 'position') == 'absolute') break; 927 944 928 945 element = element.offsetParent; -
event.js
old new 242 242 243 243 fire: function(element, eventName, memo) { 244 244 element = $(element); 245 if (element == document && document.createEvent && !element.dispatchEvent)246 element = document.documentElement;247 248 var event;249 if (doc ument.createEvent) {250 event = doc ument.createEvent("HTMLEvents");245 var event, doc = Element._getDocument(element); 246 if (element == doc && doc.createEvent && !element.dispatchEvent) 247 element = doc.documentElement; 248 249 if (doc.createEvent) { 250 event = doc.createEvent("HTMLEvents"); 251 251 event.initEvent("dataavailable", true, true); 252 252 } else { 253 event = doc ument.createEventObject();253 event = doc.createEventObject(); 254 254 event.eventType = "ondataavailable"; 255 255 } 256 256 257 257 event.eventName = eventName; 258 258 event.memo = memo || { }; 259 259 260 if (doc ument.createEvent) {260 if (doc.createEvent) { 261 261 element.dispatchEvent(event); 262 262 } else { 263 263 element.fireEvent(event.eventType, event); -
selector.js
old new 109 109 } else { 110 110 // reluctantly do a document-wide search 111 111 // and look for a match in the array 112 return this.findElements( document).include(element);112 return this.findElements(Element._getDocument(element)).include(element); 113 113 } 114 114 } 115 115 } … … 419 419 id: function(nodes, root, id, combinator) { 420 420 var targetNode = $(id), h = Selector.handlers; 421 421 if (!targetNode) return []; 422 if (!nodes && root == document) return [targetNode];422 if (!nodes && root == Element._getDocument(root)) return [targetNode]; 423 423 if (nodes) { 424 424 if (combinator) { 425 425 if (combinator == 'child') { … … 670 670 for (var i = 0, node; node = nodes[i]; i++) 671 671 node.removeAttribute('_countedByPrototype'); 672 672 return nodes; 673 } 674 }); 673 }, 674 675 // IE doesn't find elements by id if they are not attached to the document 676 id: Selector.handlers.id.wrap(function(proceed, nodes, root, id, combinator) { 677 var targetNode = $(id); 678 if (!targetNode && (root.sourceIndex < 1 || root == Element._getDocument(root))) { 679 var nodes = root.getElementsByTagName('*'), i = nodes.length; 680 while(i){ //faster than for-loop? 681 if(nodes[--i].id == id) { 682 targetNode = nodes[i]; break; 683 } 684 } 685 } 686 return proceed(nodes, root, targetNode, combinator); 687 }) 688 }); 675 689 } 676 690 677 691 function $$() {