tt-rss/lib/dojo/domReady.js.uncompressed.js
2013-03-18 10:26:26 +04:00

97 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;
});