summaryrefslogtreecommitdiff
path: root/lib/dojo/domReady.js.uncompressed.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dojo/domReady.js.uncompressed.js')
-rw-r--r--lib/dojo/domReady.js.uncompressed.js97
1 files changed, 97 insertions, 0 deletions
diff --git a/lib/dojo/domReady.js.uncompressed.js b/lib/dojo/domReady.js.uncompressed.js
new file mode 100644
index 000000000..90d03d4c7
--- /dev/null
+++ b/lib/dojo/domReady.js.uncompressed.js
@@ -0,0 +1,97 @@
+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;
+});