98 lines
2.3 KiB
JavaScript
98 lines
2.3 KiB
JavaScript
|
define("dojo/domReady", ['./has'], function(has){
|
||
|
var global = this,
|
||
|
doc = document,
|
||
|
readyStates = { 'loaded': 1, 'complete': 1 },
|
||
|
fixReadyState = typeof doc.readyState != "string",
|
||
|
ready = !!readyStates[doc.readyState];
|
||
|
|
||
|
// For FF <= 3.5
|
||
|
if(fixReadyState){ doc.readyState = "loading"; }
|
||
|
|
||
|
if(!ready){
|
||
|
var readyQ = [], tests = [],
|
||
|
detectReady = function(evt){
|
||
|
evt = evt || global.event;
|
||
|
if(ready || (evt.type == "readystatechange" && !readyStates[doc.readyState])){ return; }
|
||
|
ready = 1;
|
||
|
|
||
|
// For FF <= 3.5
|
||
|
if(fixReadyState){ doc.readyState = "complete"; }
|
||
|
|
||
|
while(readyQ.length){
|
||
|
(readyQ.shift())(doc);
|
||
|
}
|
||
|
},
|
||
|
on = function(node, event){
|
||
|
node.addEventListener(event, detectReady, false);
|
||
|
readyQ.push(function(){ node.removeEventListener(event, detectReady, false); });
|
||
|
};
|
||
|
|
||
|
if(!has("dom-addeventlistener")){
|
||
|
on = function(node, event){
|
||
|
event = "on" + event;
|
||
|
node.attachEvent(event, detectReady);
|
||
|
readyQ.push(function(){ node.detachEvent(event, detectReady); });
|
||
|
};
|
||
|
|
||
|
var div = doc.createElement("div");
|
||
|
try{
|
||
|
if(div.doScroll && global.frameElement === null){
|
||
|
// the doScroll test is only useful if we're in the top-most frame
|
||
|
tests.push(function(){
|
||
|
// Derived with permission from Diego Perini's IEContentLoaded
|
||
|
// http://javascript.nwbox.com/IEContentLoaded/
|
||
|
try{
|
||
|
div.doScroll("left");
|
||
|
return 1;
|
||
|
}catch(e){}
|
||
|
});
|
||
|
}
|
||
|
}catch(e){}
|
||
|
}
|
||
|
|
||
|
on(doc, "DOMContentLoaded");
|
||
|
on(global, "load");
|
||
|
|
||
|
if("onreadystatechange" in doc){
|
||
|
on(doc, "readystatechange");
|
||
|
}else if(!fixReadyState){
|
||
|
// if the ready state property exists and there's
|
||
|
// no readystatechange event, poll for the state
|
||
|
// to change
|
||
|
tests.push(function(){
|
||
|
return readyStates[doc.readyState];
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if(tests.length){
|
||
|
var poller = function(){
|
||
|
if(ready){ return; }
|
||
|
var i = tests.length;
|
||
|
while(i--){
|
||
|
if(tests[i]()){
|
||
|
detectReady("poller");
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
setTimeout(poller, 30);
|
||
|
};
|
||
|
poller();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function domReady(callback){
|
||
|
// summary:
|
||
|
// Plugin to delay require()/define() callback from firing until the DOM has finished loading.
|
||
|
if(ready){
|
||
|
callback(doc);
|
||
|
}else{
|
||
|
readyQ.push(callback);
|
||
|
}
|
||
|
}
|
||
|
domReady.load = function(id, req, load){
|
||
|
domReady(load);
|
||
|
};
|
||
|
|
||
|
return domReady;
|
||
|
});
|