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