Moved .ready() to core.js from event.js.
authorJohn Resig <jeresig@gmail.com>
Tue, 8 Dec 2009 00:34:55 +0000 (16:34 -0800)
committerJohn Resig <jeresig@gmail.com>
Tue, 8 Dec 2009 00:34:55 +0000 (16:34 -0800)
src/core.js
src/event.js
src/support.js

index c865bfb..26f6e92 100644 (file)
@@ -36,6 +36,12 @@ var jQuery = function( selector, context ) {
 
        // Keep a UserAgent string for use with jQuery.browser
        userAgent = navigator.userAgent.toLowerCase(),
+       
+       // Has the ready events already been bound?
+       readyBound = false,
+       
+       // The functions to execute on DOM ready
+       readyList = [],
 
        // Save a reference to some core methods
        toString = Object.prototype.toString,
@@ -225,6 +231,24 @@ jQuery.fn = jQuery.prototype = {
        is: function( selector ) {
                return !!selector && jQuery.filter( selector, this ).length > 0;
        },
+       
+       ready: function( fn ) {
+               // Attach the listeners
+               jQuery.bindReady();
+
+               // If the DOM is already ready
+               if ( jQuery.isReady ) {
+                       // Execute the function immediately
+                       fn.call( document, jQuery );
+
+               // Otherwise, remember the function for later
+               } else {
+                       // Add the function to the wait list
+                       readyList.push( fn );
+               }
+
+               return this;
+       },
 
        // For internal use only.
        // Behaves like an Array's method, not like a jQuery method.
@@ -302,6 +326,105 @@ jQuery.extend({
 
                return jQuery;
        },
+       
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+       
+       // Handle when the DOM is ready
+       ready: function() {
+               // Make sure that the DOM is not already loaded
+               if ( !jQuery.isReady ) {
+                       if ( !document.body ) {
+                               return setTimeout( jQuery.ready, 13 );
+                       }
+
+                       // Remember that the DOM is ready
+                       jQuery.isReady = true;
+
+                       // If there are functions bound, to execute
+                       if ( readyList ) {
+                               // Execute all of them
+                               var fn, i = 0;
+                               while ( (fn = readyList[ i++ ]) ) {
+                                       fn.call( document, jQuery );
+                               }
+
+                               // Reset the list of functions
+                               readyList = null;
+                       }
+
+                       // Trigger any bound ready events
+                       if ( jQuery.fn.triggerHandler ) {
+                               jQuery( document ).triggerHandler( "ready" );
+                       }
+               }
+       },
+       
+       bindReady: function() {
+               if ( readyBound ) { return; }
+               readyBound = true;
+
+               // Catch cases where $(document).ready() is called after the
+               // browser event has already occurred.
+               if ( document.readyState === "complete" ) {
+                       return jQuery.ready();
+               }
+
+               // Mozilla, Opera and webkit nightlies currently support this event
+               if ( document.addEventListener ) {
+                       // Use the handy event callback
+                       document.addEventListener( "DOMContentLoaded", function() {
+                               document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
+                               jQuery.ready();
+                       }, false );
+                       
+                       // A fallback to window.onload, that will always work
+                       window.addEventListener( "load", jQuery.ready, false );
+
+               // If IE event model is used
+               } else if ( document.attachEvent ) {
+                       // ensure firing before onload,
+                       // maybe late but safe also for iframes
+                       document.attachEvent("onreadystatechange", function() {
+                               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+                               if ( document.readyState === "complete" ) {
+                                       document.detachEvent( "onreadystatechange", arguments.callee );
+                                       jQuery.ready();
+                               }
+                       });
+                       
+                       // A fallback to window.onload, that will always work
+                       window.attachEvent( "onload", jQuery.ready );
+
+                       // If IE and not a frame
+                       // continually check to see if the document is ready
+                       var toplevel = false;
+
+                       try {
+                               toplevel = window.frameElement == null;
+                       } catch(e){}
+
+                       if ( document.documentElement.doScroll && toplevel ) {
+                               (function() {
+                                       if ( jQuery.isReady ) {
+                                               return;
+                                       }
+
+                                       try {
+                                               // If IE is used, use the trick by Diego Perini
+                                               // http://javascript.nwbox.com/IEContentLoaded/
+                                               document.documentElement.doScroll("left");
+                                       } catch( error ) {
+                                               setTimeout( arguments.callee, 0 );
+                                               return;
+                                       }
+
+                                       // and execute any waiting functions
+                                       jQuery.ready();
+                               })();
+                       }
+               }
+       },
 
        // See test/unit/core.js for details concerning isFunction.
        // Since version 1.3, DOM methods and functions like alert
index 26f2340..d59ef64 100644 (file)
@@ -405,7 +405,7 @@ jQuery.event = {
        special: {
                ready: {
                        // Make sure the ready event is setup
-                       setup: bindReady,
+                       setup: jQuery.bindReady,
                        teardown: function() {}
                },
 
@@ -797,24 +797,6 @@ jQuery.fn.extend({
                return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
        },
 
-       ready: function( fn ) {
-               // Attach the listeners
-               bindReady();
-
-               // If the DOM is already ready
-               if ( jQuery.isReady ) {
-                       // Execute the function immediately
-                       fn.call( document, jQuery );
-
-               // Otherwise, remember the function for later
-               } else {
-                       // Add the function to the wait list
-                       jQuery.readyList.push( fn );
-               }
-
-               return this;
-       },
-
        live: function( type, data, fn, thisObject ) {
                if ( jQuery.isFunction( data ) ) {
                        if ( fn !== undefined ) {
@@ -895,103 +877,6 @@ function liveConvert( type, selector ) {
                                                                  .replace(/ /g, "|")].join(".");
 }
 
-jQuery.extend({
-       isReady: false,
-       readyList: [],
-       // Handle when the DOM is ready
-       ready: function() {
-               // Make sure that the DOM is not already loaded
-               if ( !jQuery.isReady ) {
-                       if ( !document.body ) {
-                               return setTimeout( jQuery.ready, 13 );
-                       }
-
-                       // Remember that the DOM is ready
-                       jQuery.isReady = true;
-
-                       // If there are functions bound, to execute
-                       if ( jQuery.readyList ) {
-                               // Execute all of them
-                               var fn, i = 0;
-                               while ( (fn = jQuery.readyList[ i++ ]) ) {
-                                       fn.call( document, jQuery );
-                               }
-
-                               // Reset the list of functions
-                               jQuery.readyList = null;
-                       }
-
-                       // Trigger any bound ready events
-                       jQuery( document ).triggerHandler( "ready" );
-               }
-       }
-});
-
-var readyBound = false;
-
-function bindReady() {
-       if ( readyBound ) { return; }
-       readyBound = true;
-
-       // Catch cases where $(document).ready() is called after the
-       // browser event has already occurred.
-       if ( document.readyState === "complete" ) {
-               return jQuery.ready();
-       }
-
-       // Mozilla, Opera and webkit nightlies currently support this event
-       if ( document.addEventListener ) {
-               // Use the handy event callback
-               document.addEventListener( "DOMContentLoaded", function() {
-                       document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
-                       jQuery.ready();
-               }, false );
-
-       // If IE event model is used
-       } else if ( document.attachEvent ) {
-               // ensure firing before onload,
-               // maybe late but safe also for iframes
-               document.attachEvent("onreadystatechange", function() {
-                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                       if ( document.readyState === "complete" ) {
-                               document.detachEvent( "onreadystatechange", arguments.callee );
-                               jQuery.ready();
-                       }
-               });
-
-               // If IE and not a frame
-               // continually check to see if the document is ready
-               var toplevel = false;
-
-               try {
-                       toplevel = window.frameElement == null;
-               } catch(e){}
-
-               if ( document.documentElement.doScroll && toplevel ) {
-                       (function() {
-                               if ( jQuery.isReady ) {
-                                       return;
-                               }
-
-                               try {
-                                       // If IE is used, use the trick by Diego Perini
-                                       // http://javascript.nwbox.com/IEContentLoaded/
-                                       document.documentElement.doScroll("left");
-                               } catch( error ) {
-                                       setTimeout( arguments.callee, 0 );
-                                       return;
-                               }
-
-                               // and execute any waiting functions
-                               jQuery.ready();
-                       })();
-               }
-       }
-
-       // A fallback to window.onload, that will always work
-       jQuery.event.add( window, "load", jQuery.ready );
-}
-
 jQuery.each( ("blur focus load resize scroll unload click dblclick " +
        "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
        "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
index b7da5e5..8e8d20e 100644 (file)
@@ -82,7 +82,6 @@
        // Figure out if the W3C box model works as expected
        // document.body must exist before we can do this
        // TODO: This timeout is temporary until I move ready into core.js.
-       setTimeout(function(){
        jQuery(function(){
                var div = document.createElement("div");
                div.style.width = div.style.paddingLeft = "1px";
@@ -92,7 +91,6 @@
                document.body.removeChild( div ).style.display = 'none';
                div = null;
        });
-       }, 13);
 
        // Technique from Juriy Zaytsev
        // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/