123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- define("dojo/ready", ["./_base/kernel", "./has", "require", "./domReady", "./_base/lang"], function(dojo, has, require, domReady, lang) {
- // module:
- // dojo/ready
- // summary:
- // This module defines the dojo.ready API.
- //
- // note:
- // This module should be unnecessary in dojo 2.0
- var
- // truthy if DOMContentLoaded or better (e.g., window.onload fired) has been achieved
- isDomReady = 0,
- // The queue of functions waiting to execute as soon as dojo.ready conditions satisfied
- loadQ = [],
- // prevent recursion in onLoad
- onLoadRecursiveGuard = 0,
- handleDomReady = function(){
- isDomReady = 1;
- dojo._postLoad = dojo.config.afterOnLoad = true;
- onEvent();
- },
- onEvent = function(){
- // Called when some state changes:
- // - dom ready
- // - dojo/domReady has finished processing everything in its queue
- // - task added to loadQ
- // - require() has finished loading all currently requested modules
- //
- // Run the functions queued with dojo.ready if appropriate.
- //guard against recursions into this function
- if(onLoadRecursiveGuard){
- return;
- }
- onLoadRecursiveGuard = 1;
- // Run tasks in queue if require() is finished loading modules, the dom is ready, and there are no
- // pending tasks registered via domReady().
- // The last step is necessary so that a user defined dojo.ready() callback is delayed until after the
- // domReady() calls inside of dojo. Failure can be seen on dijit/tests/robot/Dialog_ally.html on IE8
- // because the dijit/focus.js domReady() callback doesn't execute until after the test starts running.
- while(isDomReady && (!domReady || domReady._Q.length == 0) && require.idle() && loadQ.length){
- var f = loadQ.shift();
- try{
- f();
- }catch(e){
- // FIXME: signal the error via require.on
- }
- }
- onLoadRecursiveGuard = 0;
- };
- // Check if we should run the next queue operation whenever require() finishes loading modules or domReady
- // finishes processing it's queue.
- require.on("idle", onEvent);
- if(domReady){
- domReady._onQEmpty = onEvent;
- }
- var ready = dojo.ready = dojo.addOnLoad = function(priority, context, callback){
- // summary:
- // Add a function to execute on DOM content loaded and all requested modules have arrived and been evaluated.
- // In most cases, the `domReady` plug-in should suffice and this method should not be needed.
- //
- // When called in a non-browser environment, just checks that all requested modules have arrived and been
- // evaluated.
- // priority: Integer?
- // The order in which to exec this callback relative to other callbacks, defaults to 1000
- // context: Object?|Function
- // The context in which to run execute callback, or a callback if not using context
- // callback: Function?
- // The function to execute.
- //
- // example:
- // Simple DOM and Modules ready syntax
- // | dojo.ready(function(){ alert("Dom ready!"); });
- //
- // example:
- // Using a priority
- // | dojo.ready(2, function(){ alert("low priority ready!"); })
- //
- // example:
- // Using context
- // | dojo.ready(foo, function(){
- // | // in here, this == foo
- // | })
- //
- // example:
- // Using dojo.hitch style args:
- // | var foo = { dojoReady: function(){ console.warn(this, "dojo dom and modules ready."); } };
- // | dojo.ready(foo, "dojoReady");
- var hitchArgs = lang._toArray(arguments);
- if(typeof priority != "number"){
- callback = context;
- context = priority;
- priority = 1000;
- }else{
- hitchArgs.shift();
- }
- callback = callback ?
- lang.hitch.apply(dojo, hitchArgs) :
- function(){
- context();
- };
- callback.priority = priority;
- for(var i = 0; i < loadQ.length && priority >= loadQ[i].priority; i++){}
- loadQ.splice(i, 0, callback);
- onEvent();
- };
- true || has.add("dojo-config-addOnLoad", 1);
- if(1){
- var dca = dojo.config.addOnLoad;
- if(dca){
- ready[(lang.isArray(dca) ? "apply" : "call")](dojo, dca);
- }
- }
- if(1 && dojo.config.parseOnLoad && !dojo.isAsync){
- ready(99, function(){
- if(!dojo.parser){
- dojo.deprecated("Add explicit require(['dojo/parser']);", "", "2.0");
- require(["dojo/parser"]);
- }
- });
- }
- if(domReady){
- domReady(handleDomReady);
- }else{
- handleDomReady();
- }
- return ready;
- });
|