Moved .ready() to core.js from event.js.
This commit is contained in:
parent
872d18c10e
commit
00a0abb751
3 changed files with 124 additions and 118 deletions
123
src/core.js
123
src/core.js
|
@ -37,6 +37,12 @@ var jQuery = function( selector, context ) {
|
||||||
// Keep a UserAgent string for use with jQuery.browser
|
// Keep a UserAgent string for use with jQuery.browser
|
||||||
userAgent = navigator.userAgent.toLowerCase(),
|
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
|
// Save a reference to some core methods
|
||||||
toString = Object.prototype.toString,
|
toString = Object.prototype.toString,
|
||||||
hasOwnProperty = Object.prototype.hasOwnProperty,
|
hasOwnProperty = Object.prototype.hasOwnProperty,
|
||||||
|
@ -226,6 +232,24 @@ jQuery.fn = jQuery.prototype = {
|
||||||
return !!selector && jQuery.filter( selector, this ).length > 0;
|
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.
|
// For internal use only.
|
||||||
// Behaves like an Array's method, not like a jQuery method.
|
// Behaves like an Array's method, not like a jQuery method.
|
||||||
push: push,
|
push: push,
|
||||||
|
@ -303,6 +327,105 @@ jQuery.extend({
|
||||||
return jQuery;
|
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.
|
// See test/unit/core.js for details concerning isFunction.
|
||||||
// Since version 1.3, DOM methods and functions like alert
|
// Since version 1.3, DOM methods and functions like alert
|
||||||
// aren't supported. They return false on IE (#2968).
|
// aren't supported. They return false on IE (#2968).
|
||||||
|
|
117
src/event.js
117
src/event.js
|
@ -405,7 +405,7 @@ jQuery.event = {
|
||||||
special: {
|
special: {
|
||||||
ready: {
|
ready: {
|
||||||
// Make sure the ready event is setup
|
// Make sure the ready event is setup
|
||||||
setup: bindReady,
|
setup: jQuery.bindReady,
|
||||||
teardown: function() {}
|
teardown: function() {}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -797,24 +797,6 @@ jQuery.fn.extend({
|
||||||
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
|
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 ) {
|
live: function( type, data, fn, thisObject ) {
|
||||||
if ( jQuery.isFunction( data ) ) {
|
if ( jQuery.isFunction( data ) ) {
|
||||||
if ( fn !== undefined ) {
|
if ( fn !== undefined ) {
|
||||||
|
@ -895,103 +877,6 @@ function liveConvert( type, selector ) {
|
||||||
.replace(/ /g, "|")].join(".");
|
.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 " +
|
jQuery.each( ("blur focus load resize scroll unload click dblclick " +
|
||||||
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
|
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
|
||||||
"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
|
"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
|
||||||
|
|
|
@ -82,7 +82,6 @@
|
||||||
// Figure out if the W3C box model works as expected
|
// Figure out if the W3C box model works as expected
|
||||||
// document.body must exist before we can do this
|
// document.body must exist before we can do this
|
||||||
// TODO: This timeout is temporary until I move ready into core.js.
|
// TODO: This timeout is temporary until I move ready into core.js.
|
||||||
setTimeout(function(){
|
|
||||||
jQuery(function(){
|
jQuery(function(){
|
||||||
var div = document.createElement("div");
|
var div = document.createElement("div");
|
||||||
div.style.width = div.style.paddingLeft = "1px";
|
div.style.width = div.style.paddingLeft = "1px";
|
||||||
|
@ -92,7 +91,6 @@
|
||||||
document.body.removeChild( div ).style.display = 'none';
|
document.body.removeChild( div ).style.display = 'none';
|
||||||
div = null;
|
div = null;
|
||||||
});
|
});
|
||||||
}, 13);
|
|
||||||
|
|
||||||
// Technique from Juriy Zaytsev
|
// Technique from Juriy Zaytsev
|
||||||
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
|
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
|
||||||
|
|
Loading…
Reference in a new issue