Ticket #192: domcontentloaded.3.patch
| File domcontentloaded.3.patch, 3.6 kB (added by sky@columbia.edu, 2 years ago) |
|---|
-
Signal.js
old new 547 547 } 548 548 }, 549 549 550 _browserAlreadyHasDOMContentLoaded: function () { 551 return (document.addEventListener); 552 }, 553 554 _domContentLoadListener: function (src, sig, func, obj) { 555 var E = MochiKit.Signal.Event; 556 return function(nativeEvent) { 557 var s=nativeEvent.srcElement; 558 if (s.readyState != "complete" ) return; 559 try { 560 if (s.id=="__ie_init") { 561 s.parentNode.removeChild(s); 562 } 563 } catch(e) { 564 //pass 565 } 566 var e = new E(src, nativeEvent); 567 e.stop(); 568 e.type = function () { return sig; }; 569 if (typeof(func) == "string") { 570 return obj[func].apply(obj, [e]); 571 } else { 572 return func.apply(obj, [e]); 573 } 574 }; 575 }, 576 550 577 _browserAlreadyHasMouseEnterAndLeave: function () { 551 578 return /MSIE/.test(navigator.userAgent); 552 579 }, … … 617 644 } else { 618 645 sig = "onmouseout"; 619 646 } 620 } else { 647 } else if (isDOM && sig === "onDOMContentLoaded" 648 && !self._browserAlreadyHasDOMContentLoaded()) { 649 if (src.readyState) { 650 var listener = self._domContentLoadListener(src, sig, func, obj); 651 //defer script hack for IE 652 if (src == document) { 653 document.write("<script id=__ie_init defer=true src=//:><\/script>"); 654 src = document.getElementById("__ie_init"); 655 } 656 sig = "onreadystatechange"; 657 } else { 658 var listener = self._listener(src, func, obj, isDOM); 659 sig = 'onload'; 660 if (src == document) { 661 src = window; 662 } 663 } 664 } else { 621 665 var listener = self._listener(src, func, obj, isDOM); 622 666 } 623 667 … … 629 673 630 674 var ident = [src, sig, listener, isDOM, objOrFunc, funcOrStr, true]; 631 675 self._observers.push(ident); 676 src = null; 632 677 633 678 634 679 return ident; -
DOM.js
old new 613 613 /** @id MochiKit.DOM.addToCallStack */ 614 614 addToCallStack: function (target, path, func, once) { 615 615 var self = MochiKit.DOM; 616 var existing = target[path]; 617 var regfunc = existing; 618 if (!(typeof(existing) == 'function' 619 && typeof(existing.callStack) == "object" 620 && existing.callStack !== null)) { 621 regfunc = self._newCallStack(path, once); 622 if (typeof(existing) == 'function') { 623 regfunc.callStack.push(existing); 624 } 625 target[path] = regfunc; 626 } 627 regfunc.callStack.push(func); 616 if (MochiKit.Signal) { 617 MochiKit.Signal.connect(target, path, func); 618 } else { 619 var existing = target[path]; 620 var regfunc = existing; 621 if (!(typeof(existing) == 'function' 622 && typeof(existing.callStack) == "object" 623 && existing.callStack !== null)) { 624 regfunc = self._newCallStack(path, once); 625 if (typeof(existing) == 'function') { 626 regfunc.callStack.push(existing); 627 } 628 target[path] = regfunc; 629 } 630 regfunc.callStack.push(func); 631 } 628 632 }, 629 633 630 634 /** @id MochiKit.DOM.addLoadEvent */ 631 635 addLoadEvent: function (func) { 632 636 var self = MochiKit.DOM; 633 self.addToCallStack(self._window, "onload", func, true); 634 637 if (MochiKit.Signal) { 638 MochiKit.Signal.connect(self._document, "onDOMContentLoaded", func); 639 } else { 640 self.addToCallStack(self._window, "onload", func, true); 641 } 635 642 }, 636 643 637 644 /** @id MochiKit.DOM.focusOnLoad */
