Does this support Safari? Is it possible to write a test case for it? -bob
On 11/10/06, sky <[EMAIL PROTECTED]> wrote: > > I think > http://trac.mochikit.com/ticket/192 > may have gotten lost inside of Trac spam, and I can't update my patch, > since it's labeling it as spam, so I'll post the update here instead > (ironically my last patch is broken after __connect__ was committed at > my own request!). > Anyway, my patch is making my sites load faster, so here it is: > Index: Signal.js > =================================================================== > --- Signal.js (revision 1191) > +++ Signal.js (working copy) > @@ -547,6 +547,33 @@ > } > }, > > + _browserAlreadyHasDOMContentLoaded: function () { > + return (document.addEventListener); > + }, > + > + _domContentLoadListener: function (src, sig, func, obj) { > + var E = MochiKit.Signal.Event; > + return function(nativeEvent) { > + var s=nativeEvent.srcElement; > + if (s.readyState != "complete" ) return; > + try { > + if (s.id=="__ie_init") { > + s.parentNode.removeChild(s); > + } > + } catch(e) { > + //pass > + } > + var e = new E(src, nativeEvent); > + e.stop(); > + e.type = function () { return sig; }; > + if (typeof(func) == "string") { > + return obj[func].apply(obj, [e]); > + } else { > + return func.apply(obj, [e]); > + } > + }; > + }, > + > _browserAlreadyHasMouseEnterAndLeave: function () { > return /MSIE/.test(navigator.userAgent); > }, > @@ -625,7 +652,24 @@ > } else { > sig = "onmouseout"; > } > - } else { > + } else if (isDOM && sig === "onDOMContentLoaded" > + && !self._browserAlreadyHasDOMContentLoaded()) { > + if (src.readyState) { > + var listener = self._domContentLoadListener(src, sig, > func, obj); > + //defer script hack for IE > + if (src == document) { > + document.write("<script id=__ie_init defer=true > src=//:><\/script>"); > + src = document.getElementById("__ie_init"); > + } > + sig = "onreadystatechange"; > + } else { > + var listener = self._listener(src, func, obj, isDOM); > + sig = 'onload'; > + if (src == document) { > + src = window; > + } > + } > + } else { > var listener = self._listener(src, func, obj, isDOM); > } > > Index: DOM.js > =================================================================== > --- DOM.js (revision 1191) > +++ DOM.js (working copy) > @@ -626,25 +626,32 @@ > /** @id MochiKit.DOM.addToCallStack */ > addToCallStack: function (target, path, func, once) { > var self = MochiKit.DOM; > - var existing = target[path]; > - var regfunc = existing; > - if (!(typeof(existing) == 'function' > - && typeof(existing.callStack) == "object" > - && existing.callStack !== null)) { > - regfunc = self._newCallStack(path, once); > - if (typeof(existing) == 'function') { > - regfunc.callStack.push(existing); > - } > - target[path] = regfunc; > - } > - regfunc.callStack.push(func); > + if (MochiKit.Signal) { > + MochiKit.Signal.connect(target, path, func); > + } else { > + var existing = target[path]; > + var regfunc = existing; > + if (!(typeof(existing) == 'function' > + && typeof(existing.callStack) == "object" > + && existing.callStack !== null)) { > + regfunc = self._newCallStack(path, once); > + if (typeof(existing) == 'function') { > + regfunc.callStack.push(existing); > + } > + target[path] = regfunc; > + } > + regfunc.callStack.push(func); > + } > }, > > /** @id MochiKit.DOM.addLoadEvent */ > addLoadEvent: function (func) { > var self = MochiKit.DOM; > - self.addToCallStack(self._window, "onload", func, true); > - > + if (MochiKit.Signal) { > + MochiKit.Signal.connect(self._document, > "onDOMContentLoaded", func); > + } else { > + self.addToCallStack(self._window, "onload", func, true); > + } > }, > > /** @id MochiKit.DOM.focusOnLoad */ > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "MochiKit" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/mochikit?hl=en -~----------~----~----~----~------~----~------~--~---
