webui-aria2/js/libs/dojo/ready.js.uncompressed.js
2012-05-01 19:52:07 +08:00

140 lines
3.7 KiB
JavaScript

//>>built
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,
// a function to call to cause onLoad to be called when all requested modules have been loaded
requestCompleteSignal,
// 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;
if(loadQ.length){
requestCompleteSignal(onLoad);
}
},
// run the next function queued with dojo.ready
onLoad = function(){
if(isDomReady && !onLoadRecursiveGuard && loadQ.length){
//guard against recursions into this function
onLoadRecursiveGuard = 1;
var f = loadQ.shift();
try{
f();
}
// FIXME: signal the error via require.on
finally{
onLoadRecursiveGuard = 0;
}
onLoadRecursiveGuard = 0;
if(loadQ.length){
requestCompleteSignal(onLoad);
}
}
};
// define requireCompleteSignal; impl depends on loader
if(1){
require.on("idle", onLoad);
requestCompleteSignal = function(){
if(require.idle()){
onLoad();
} // else do nothing, onLoad will be called with the next idle signal
};
}else{
// RequireJS or similar
requestCompleteSignal = function(){
// the next function call will fail if you don't have a loader with require.ready
// in that case, either fix your loader, use dojo's loader, or don't call dojo.ready;
require.ready(onLoad);
};
}
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.
// 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);
requestCompleteSignal();
};
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(1){
domReady(handleDomReady);
}else{
handleDomReady();
}
return ready;
});