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