mirror of
https://github.com/billz/raspap-webgui.git
synced 2025-03-01 10:31:47 +00:00
161 lines
5.0 KiB
JavaScript
Executable File
161 lines
5.0 KiB
JavaScript
Executable File
/*!
|
|
* onDomReady.js 1.4.0 (c) 2013 Tubal Martin - MIT license
|
|
*
|
|
* Specially modified to work with Holder.js
|
|
*/
|
|
|
|
;(function(name, global, callback){
|
|
global[name] = callback;
|
|
})("onDomReady", this,
|
|
|
|
(function(win) {
|
|
|
|
'use strict';
|
|
|
|
//Lazy loading fix for Firefox < 3.6
|
|
//http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html
|
|
if (document.readyState == null && document.addEventListener) {
|
|
document.addEventListener("DOMContentLoaded", function DOMContentLoaded() {
|
|
document.removeEventListener("DOMContentLoaded", DOMContentLoaded, false);
|
|
document.readyState = "complete";
|
|
}, false);
|
|
document.readyState = "loading";
|
|
}
|
|
|
|
var doc = win.document,
|
|
docElem = doc.documentElement,
|
|
|
|
LOAD = "load",
|
|
FALSE = false,
|
|
ONLOAD = "on"+LOAD,
|
|
COMPLETE = "complete",
|
|
READYSTATE = "readyState",
|
|
ATTACHEVENT = "attachEvent",
|
|
DETACHEVENT = "detachEvent",
|
|
ADDEVENTLISTENER = "addEventListener",
|
|
DOMCONTENTLOADED = "DOMContentLoaded",
|
|
ONREADYSTATECHANGE = "onreadystatechange",
|
|
REMOVEEVENTLISTENER = "removeEventListener",
|
|
|
|
// W3C Event model
|
|
w3c = ADDEVENTLISTENER in doc,
|
|
top = FALSE,
|
|
|
|
// isReady: Is the DOM ready to be used? Set to true once it occurs.
|
|
isReady = FALSE,
|
|
|
|
// Callbacks pending execution until DOM is ready
|
|
callbacks = [];
|
|
|
|
// Handle when the DOM is ready
|
|
function ready( fn ) {
|
|
if ( !isReady ) {
|
|
|
|
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
|
|
if ( !doc.body ) {
|
|
return defer( ready );
|
|
}
|
|
|
|
// Remember that the DOM is ready
|
|
isReady = true;
|
|
|
|
// Execute all callbacks
|
|
while ( fn = callbacks.shift() ) {
|
|
defer( fn );
|
|
}
|
|
}
|
|
}
|
|
|
|
// The ready event handler
|
|
function completed( event ) {
|
|
// readyState === "complete" is good enough for us to call the dom ready in oldIE
|
|
if ( w3c || event.type === LOAD || doc[READYSTATE] === COMPLETE ) {
|
|
detach();
|
|
ready();
|
|
}
|
|
}
|
|
|
|
// Clean-up method for dom ready events
|
|
function detach() {
|
|
if ( w3c ) {
|
|
doc[REMOVEEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );
|
|
win[REMOVEEVENTLISTENER]( LOAD, completed, FALSE );
|
|
} else {
|
|
doc[DETACHEVENT]( ONREADYSTATECHANGE, completed );
|
|
win[DETACHEVENT]( ONLOAD, completed );
|
|
}
|
|
}
|
|
|
|
// Defers a function, scheduling it to run after the current call stack has cleared.
|
|
function defer( fn, wait ) {
|
|
// Allow 0 to be passed
|
|
setTimeout( fn, +wait >= 0 ? wait : 1 );
|
|
}
|
|
|
|
// Attach the listeners:
|
|
|
|
// Catch cases where onDomReady is called after the browser event has already occurred.
|
|
// we once tried to use readyState "interactive" here, but it caused issues like the one
|
|
// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
|
|
if ( doc[READYSTATE] === COMPLETE ) {
|
|
// Handle it asynchronously to allow scripts the opportunity to delay ready
|
|
defer( ready );
|
|
|
|
// Standards-based browsers support DOMContentLoaded
|
|
} else if ( w3c ) {
|
|
// Use the handy event callback
|
|
doc[ADDEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );
|
|
|
|
// A fallback to window.onload, that will always work
|
|
win[ADDEVENTLISTENER]( LOAD, completed, FALSE );
|
|
|
|
// If IE event model is used
|
|
} else {
|
|
// Ensure firing before onload, maybe late but safe also for iframes
|
|
doc[ATTACHEVENT]( ONREADYSTATECHANGE, completed );
|
|
|
|
// A fallback to window.onload, that will always work
|
|
win[ATTACHEVENT]( ONLOAD, completed );
|
|
|
|
// If IE and not a frame
|
|
// continually check to see if the document is ready
|
|
try {
|
|
top = win.frameElement == null && docElem;
|
|
} catch(e) {}
|
|
|
|
if ( top && top.doScroll ) {
|
|
(function doScrollCheck() {
|
|
if ( !isReady ) {
|
|
try {
|
|
// Use the trick by Diego Perini
|
|
// http://javascript.nwbox.com/IEContentLoaded/
|
|
top.doScroll("left");
|
|
} catch(e) {
|
|
return defer( doScrollCheck, 50 );
|
|
}
|
|
|
|
// detach all dom ready events
|
|
detach();
|
|
|
|
// and execute any waiting functions
|
|
ready();
|
|
}
|
|
})();
|
|
}
|
|
}
|
|
|
|
function onDomReady( fn ) {
|
|
// If DOM is ready, execute the function (async), otherwise wait
|
|
isReady ? defer( fn ) : callbacks.push( fn );
|
|
}
|
|
|
|
// Add version
|
|
onDomReady.version = "1.4.0";
|
|
// Add method to check if DOM is ready
|
|
onDomReady.isReady = function(){
|
|
return isReady;
|
|
};
|
|
|
|
return onDomReady;
|
|
})(this));
|