Ticket #192: domcontentloaded.patch
| File domcontentloaded.patch, 3.5 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 if ( nativeEvent.srcElement.readyState != "complete" ) return; 558 nativeEvent.srcElement.parentNode.removeChild(nativeEvent.srcElement); 559 var e = new E(src, nativeEvent); 560 e.stop(); 561 if (typeof(func) == "string") { 562 return obj[func].apply(obj, [e]); 563 } else { 564 return func.apply(obj, [e]); 565 } 566 }; 567 }, 568 550 569 _browserAlreadyHasMouseEnterAndLeave: function () { 551 570 return /MSIE/.test(navigator.userAgent); 552 571 }, … … 617 636 } else { 618 637 sig = "onmouseout"; 619 638 } 620 } else { 639 } else if (isDOM && sig === "onDOMContentLoaded" 640 && !self._browserAlreadyHasDOMContentLoaded()) { 641 if (/MSIE/.test(navigator.userAgent)) { 642 //defer script hack 643 document.write("<script id=__ie_init defer=true src=//:><\/script>"); 644 var listener = self._domContentLoadListener(src, sig, func, obj); 645 src = document.getElementById("__ie_init"); 646 sig = "onreadystatechange"; 647 } else { 648 var listener = self._listener(src, func, obj, isDOM); 649 sig = 'onload'; 650 src = window; 651 } 652 } else { 621 653 var listener = self._listener(src, func, obj, isDOM); 622 654 } 623 655 … … 629 661 630 662 var ident = [src, sig, listener, isDOM, objOrFunc, funcOrStr, true]; 631 663 self._observers.push(ident); 664 src = null; 632 665 633 634 666 return ident; 635 667 }, 636 668 -
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 (s=MochiKit.Signal) { 617 s.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 (s=MochiKit.Signal) { 638 s.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 */
