summaryrefslogtreecommitdiff
path: root/lib/dojo/_base/loader.js.uncompressed.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dojo/_base/loader.js.uncompressed.js')
-rw-r--r--lib/dojo/_base/loader.js.uncompressed.js776
1 files changed, 0 insertions, 776 deletions
diff --git a/lib/dojo/_base/loader.js.uncompressed.js b/lib/dojo/_base/loader.js.uncompressed.js
deleted file mode 100644
index 23f0b6db8..000000000
--- a/lib/dojo/_base/loader.js.uncompressed.js
+++ /dev/null
@@ -1,776 +0,0 @@
-define("dojo/_base/loader", ["./kernel", "../has", "require", "module", "./json", "./lang", "./array"], function(dojo, has, require, thisModule, json, lang, array) {
- // module:
- // dojo/_base/loader
-
- // This module defines the v1.x synchronous loader API.
-
- // signal the loader in sync mode...
- //>>pure-amd
-
- if (! 1 ){
- console.error("cannot load the Dojo v1.x loader with a foreign loader");
- return 0;
- }
-
- 1 || has.add("dojo-fast-sync-require", 1);
-
-
- var makeErrorToken = function(id){
- return {src:thisModule.id, id:id};
- },
-
- slashName = function(name){
- return name.replace(/\./g, "/");
- },
-
- buildDetectRe = /\/\/>>built/,
-
- dojoRequireCallbacks = [],
- dojoRequireModuleStack = [],
-
- dojoRequirePlugin = function(mid, require, loaded){
- dojoRequireCallbacks.push(loaded);
- array.forEach(mid.split(","), function(mid){
- var module = getModule(mid, require.module);
- dojoRequireModuleStack.push(module);
- injectModule(module);
- });
- checkDojoRequirePlugin();
- },
-
- checkDojoRequirePlugin = ( 1 ?
- // This version of checkDojoRequirePlugin makes the observation that all dojoRequireCallbacks can be released
- // when all *non-dojo/require!, dojo/loadInit!* modules are either executed, not requested, or arrived. This is
- // the case since there are no more modules the loader is waiting for, therefore, dojo/require! must have
- // everything it needs on board.
- //
- // The potential weakness of this algorithm is that dojo/require will not execute callbacks until *all* dependency
- // trees are ready. It is possible that some trees may be ready earlier than others, and this extra wait is non-optimal.
- // Still, for big projects, this seems better than the original algorithm below that proved slow in some cases.
- // Note, however, the original algorithm had the potential to execute partial trees, but that potential was never enabled.
- // There are also other optimization available with the original algorithm that have not been explored.
- function(){
- var module, mid;
- for(mid in modules){
- module = modules[mid];
- if(module.noReqPluginCheck===undefined){
- // tag the module as either a loadInit or require plugin or not for future reference
- module.noReqPluginCheck = /loadInit\!/.test(mid) || /require\!/.test(mid) ? 1 : 0;
- }
- if(!module.executed && !module.noReqPluginCheck && module.injected==requested){
- return;
- }
- }
-
- guardCheckComplete(function(){
- var oldCallbacks = dojoRequireCallbacks;
- dojoRequireCallbacks = [];
- array.forEach(oldCallbacks, function(cb){cb(1);});
- });
- } : (function(){
- // Note: this is the original checkDojoRequirePlugin that is much slower than the algorithm above. However, we know it
- // works, so we leave it here in case the algorithm above fails in some corner case.
- //
- // checkDojoRequirePlugin inspects all of the modules demanded by a dojo/require!<module-list> dependency
- // to see if they have arrived. The loader does not release *any* of these modules to be instantiated
- // until *all* of these modules are on board, thereby preventing the evaluation of a module with dojo.require's
- // that reference modules that are not available.
- //
- // The algorithm works by traversing the dependency graphs (remember, there can be cycles so they are not trees)
- // of each module in the dojoRequireModuleStack array (which contains the list of modules demanded by dojo/require!).
- // The moment a single module is discovered that is missing, the algorithm gives up and indicates that not all
- // modules are on board. dojo/loadInit! and dojo/require! are ignored because there dependencies are inserted
- // directly in dojoRequireModuleStack. For example, if "your/module" module depends on "dojo/require!my/module", then
- // *both* "dojo/require!my/module" and "my/module" will be in dojoRequireModuleStack. Obviously, if "my/module"
- // is on board, then "dojo/require!my/module" is also satisfied, so the algorithm doesn't check for "dojo/require!my/module".
- //
- // Note: inserting a dojo/require!<some-module-list> dependency in the dojoRequireModuleStack achieves nothing
- // with the current algorithm; however, having such modules present makes it possible to optimize the algorithm
- //
- // Note: prior versions of this algorithm had an optimization that signaled loaded on dojo/require! dependencies
- // individually (rather than waiting for them all to be resolved). The implementation proved problematic with cycles
- // and plugins. However, it is possible to reattach that strategy in the future.
-
- // a set from module-id to {undefined | 1 | 0}, where...
- // undefined => the module has not been inspected
- // 0 => the module or at least one of its dependencies has not arrived
- // 1 => the module is a loadInit! or require! plugin resource, or is currently being traversed (therefore, assume
- // OK until proven otherwise), or has been completely traversed and all dependencies have arrived
-
- var touched,
- traverse = function(m){
- touched[m.mid] = 1;
- for(var t, module, deps = m.deps || [], i= 0; i<deps.length; i++){
- module = deps[i];
- if(!(t = touched[module.mid])){
- if(t===0 || !traverse(module)){
- touched[m.mid] = 0;
- return false;
- }
- }
- }
- return true;
- };
-
- return function(){
- // initialize the touched hash with easy-to-compute values that help short circuit recursive algorithm;
- // recall loadInit/require plugin modules are dependencies of modules in dojoRequireModuleStack...
- // which would cause a circular dependency chain that would never be resolved if checked here
- // notice all dependencies of any particular loadInit/require plugin module will already
- // be checked since those are pushed into dojoRequireModuleStack explicitly by the
- // plugin...so if a particular loadInitPlugin module's dependencies are not really
- // on board, that *will* be detected elsewhere in the traversal.
- var module, mid;
- touched = {};
- for(mid in modules){
- module = modules[mid];
- if(module.executed || module.noReqPluginCheck){
- touched[mid] = 1;
- }else{
- if(module.noReqPluginCheck!==0){
- // tag the module as either a loadInit or require plugin or not for future reference
- module.noReqPluginCheck = /loadInit\!/.test(mid) || /require\!/.test(mid) ? 1 : 0;
- }
- if(module.noReqPluginCheck){
- touched[mid] = 1;
- }else if(module.injected!==arrived){
- // not executed, has not arrived, and is not a loadInit or require plugin resource
- touched[mid] = 0;
- }// else, leave undefined and we'll traverse the dependencies
- }
- }
- for(var t, i = 0, end = dojoRequireModuleStack.length; i<end; i++){
- module = dojoRequireModuleStack[i];
- if(!(t = touched[module.mid])){
- if(t===0 || !traverse(module)){
- return;
- }
- }
- }
- guardCheckComplete(function(){
- var oldCallbacks = dojoRequireCallbacks;
- dojoRequireCallbacks = [];
- array.forEach(oldCallbacks, function(cb){cb(1);});
- });
- };
- })()),
-
- dojoLoadInitPlugin = function(mid, require, loaded){
- // mid names a module that defines a "dojo load init" bundle, an object with two properties:
- //
- // * names: a vector of module ids that give top-level names to define in the lexical scope of def
- // * def: a function that contains some some legacy loader API applications
- //
- // The point of def is to possibly cause some modules to be loaded (but not executed) by dojo/require! where the module
- // ids are possibly-determined at runtime. For example, here is dojox.gfx from v1.6 expressed as an AMD module using the dojo/loadInit
- // and dojo/require plugins.
- //
- // // dojox/gfx:
- //
- // define("*loadInit_12, {
- // names:["dojo", "dijit", "dojox"],
- // def: function(){
- // dojo.loadInit(function(){
- // var gfx = lang.getObject("dojox.gfx", true);
- //
- // //
- // // code required to set gfx properties ommitted...
- // //
- //
- // // now use the calculations to include the runtime-dependent module
- // dojo.require("dojox.gfx." + gfx.renderer);
- // });
- // }
- // });
- //
- // define(["dojo", "dojo/loadInit!" + id].concat("dojo/require!dojox/gfx/matric,dojox/gfx/_base"), function(dojo){
- // // when this AMD factory function is executed, the following modules are guaranteed downloaded but not executed:
- // // "dojox.gfx." + gfx.renderer
- // // dojox.gfx.matrix
- // // dojox.gfx._base
- // dojo.provide("dojo.gfx");
- // dojo.require("dojox.gfx.matrix");
- // dojo.require("dojox.gfx._base");
- // dojo.require("dojox.gfx." + gfx.renderer);
- // return lang.getObject("dojo.gfx");
- // });
- // })();
- //
- // The idea is to run the legacy loader API with global variables shadowed, which allows these variables to
- // be relocated. For example, dojox and dojo could be relocated to different names by giving a map and the code above will
- // execute properly (because the plugin below resolves the load init bundle.names module with respect to the module that demanded
- // the plugin resource).
- //
- // Note that the relocation is specified in the runtime configuration; relocated names need not be set at build-time.
- //
- // Warning: this is not the best way to express dojox.gfx as and AMD module. In fact, the module has been properly converted in
- // v1.7. However, this technique allows the builder to convert legacy modules into AMD modules and guarantee the codepath is the
- // same in the converted AMD module.
- require([mid], function(bundle){
- // notice how names is resolved with respect to the module that demanded the plugin resource
- require(bundle.names, function(){
- // bring the bundle names into scope
- for(var scopeText = "", args= [], i = 0; i<arguments.length; i++){
- scopeText+= "var " + bundle.names[i] + "= arguments[" + i + "]; ";
- args.push(arguments[i]);
- }
- eval(scopeText);
-
- var callingModule = require.module,
- // the list of modules that need to be downloaded but not executed before the callingModule can be executed
- requireList = [],
-
- // the list of i18n bundles that are xdomain; undefined if none
- i18nDeps,
-
- syncLoaderApi = {
- provide:function(moduleName){
- // mark modules that arrive consequent to multiple provides in this module as arrived since they can't be injected
- moduleName = slashName(moduleName);
- var providedModule = getModule(moduleName, callingModule);
- if(providedModule!==callingModule){
- setArrived(providedModule);
- }
- },
- require:function(moduleName, omitModuleCheck){
- moduleName = slashName(moduleName);
- omitModuleCheck && (getModule(moduleName, callingModule).result = nonmodule);
- requireList.push(moduleName);
- },
- requireLocalization:function(moduleName, bundleName, locale){
- // since we're going to need dojo/i8n, add it to i18nDeps if not already there
- if(!i18nDeps){
- // don't have to map since that will occur when the dependency is resolved
- i18nDeps = ["dojo/i18n"];
- }
-
- // figure out if the bundle is xdomain; if so, add it to the i18nDepsSet
- locale = (locale || dojo.locale).toLowerCase();
- moduleName = slashName(moduleName) + "/nls/" + (/root/i.test(locale) ? "" : locale + "/") + slashName(bundleName);
- if(getModule(moduleName, callingModule).isXd){
- // don't have to map since that will occur when the dependency is resolved
- i18nDeps.push("dojo/i18n!" + moduleName);
- }// else the bundle will be loaded synchronously when the module is evaluated
- },
- loadInit:function(f){
- f();
- }
- },
-
- hold = {},
- p;
-
- // hijack the correct dojo and apply bundle.def
- try{
- for(p in syncLoaderApi){
- hold[p] = dojo[p];
- dojo[p] = syncLoaderApi[p];
- }
- bundle.def.apply(null, args);
- }catch(e){
- signal("error", [makeErrorToken("failedDojoLoadInit"), e]);
- }finally{
- for(p in syncLoaderApi){
- dojo[p] = hold[p];
- }
- }
-
- if(i18nDeps){
- requireList = requireList.concat(i18nDeps);
- }
-
- if(requireList.length){
- dojoRequirePlugin(requireList.join(","), require, loaded);
- }else{
- loaded();
- }
- });
- });
- },
-
- extractApplication = function(
- text, // the text to search
- startSearch, // the position in text to start looking for the closing paren
- startApplication // the position in text where the function application expression starts
- ){
- // find end of the call by finding the matching end paren
- // Warning: as usual, this will fail in the presense of unmatched right parans contained in strings, regexs, or unremoved comments
- var parenRe = /\(|\)/g,
- matchCount = 1,
- match;
- parenRe.lastIndex = startSearch;
- while((match = parenRe.exec(text))){
- if(match[0] == ")"){
- matchCount -= 1;
- }else{
- matchCount += 1;
- }
- if(matchCount == 0){
- break;
- }
- }
-
- if(matchCount != 0){
- throw "unmatched paren around character " + parenRe.lastIndex + " in: " + text;
- }
-
- //Put the master matching string in the results.
- return [dojo.trim(text.substring(startApplication, parenRe.lastIndex))+";\n", parenRe.lastIndex];
- },
-
- // the following regex is taken from 1.6. It is a very poor technique to remove comments and
- // will fail in some cases; for example, consider the code...
- //
- // var message = "Category-1 */* Category-2";
- //
- // The regex that follows will see a /* comment and trash the code accordingly. In fact, there are all
- // kinds of cases like this with strings and regexs that will cause this design to fail miserably.
- //
- // Alternative regex designs exist that will result in less-likely failures, but will still fail in many cases.
- // The only solution guaranteed 100% correct is to parse the code and that seems overkill for this
- // backcompat/unbuilt-xdomain layer. In the end, since it's been this way for a while, we won't change it.
- // See the opening paragraphs of Chapter 7 or ECME-262 which describes the lexical abiguity further.
- removeCommentRe = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg,
-
- syncLoaderApiRe = /(^|\s)dojo\.(loadInit|require|provide|requireLocalization|requireIf|requireAfterIf|platformRequire)\s*\(/mg,
-
- amdLoaderApiRe = /(^|\s)(require|define)\s*\(/m,
-
- extractLegacyApiApplications = function(text, noCommentText){
- // scan the noCommentText for any legacy loader API applications. Copy such applications into result (this is
- // used by the builder). Move dojo.loadInit applications to loadInitApplications string. Copy all other applications
- // to otherApplications string. If no applications were found, return 0, signalling an AMD module. Otherwise, return
- // loadInitApplications + otherApplications. Fixup text by replacing
- //
- // dojo.loadInit(// etc...
- //
- // with
- //
- // \n 0 && dojo.loadInit(// etc...
- //
- // Which results in the dojo.loadInit from *not* being applied. This design goes a long way towards protecting the
- // code from an over-agressive removeCommentRe. However...
- //
- // WARNING: the removeCommentRe will cause an error if a detected comment removes all or part of a legacy-loader application
- // that is not in a comment.
-
- var match, startSearch, startApplication, application,
- loadInitApplications = [],
- otherApplications = [],
- allApplications = [];
-
- // noCommentText may be provided by a build app with comments extracted by a better method than regex (hopefully)
- noCommentText = noCommentText || text.replace(removeCommentRe, function(match){
- // remove iff the detected comment has text that looks like a sync loader API application; this helps by
- // removing as little as possible, minimizing the changes the janky regex will kill the module
- syncLoaderApiRe.lastIndex = amdLoaderApiRe.lastIndex = 0;
- return (syncLoaderApiRe.test(match) || amdLoaderApiRe.test(match)) ? "" : match;
- });
-
- // find and extract all dojo.loadInit applications
- while((match = syncLoaderApiRe.exec(noCommentText))){
- startSearch = syncLoaderApiRe.lastIndex;
- startApplication = startSearch - match[0].length;
- application = extractApplication(noCommentText, startSearch, startApplication);
- if(match[2]=="loadInit"){
- loadInitApplications.push(application[0]);
- }else{
- otherApplications.push(application[0]);
- }
- syncLoaderApiRe.lastIndex = application[1];
- }
- allApplications = loadInitApplications.concat(otherApplications);
- if(allApplications.length || !amdLoaderApiRe.test(noCommentText)){
- // either there were some legacy loader API applications or there were no AMD API applications
- return [text.replace(/(^|\s)dojo\.loadInit\s*\(/g, "\n0 && dojo.loadInit("), allApplications.join(""), allApplications];
- }else{
- // legacy loader API *was not* detected and AMD API *was* detected; therefore, assume it's an AMD module
- return 0;
- }
- },
-
- transformToAmd = function(module, text){
- // This is roughly the equivalent of dojo._xdCreateResource in 1.6-; however, it expresses a v1.6- dojo
- // module in terms of AMD define instead of creating the dojo proprietary xdomain module expression.
- // The module could have originated from several sources:
- //
- // * amd require() a module, e.g., require(["my/module"])
- // * amd require() a nonmodule, e.g., require(["my/resource.js"')
- // * amd define() deps vector (always a module)
- // * dojo.require() a module, e.g. dojo.require("my.module")
- // * dojo.require() a nonmodule, e.g., dojo.require("my.module", true)
- // * dojo.requireIf/requireAfterIf/platformRequire a module
- //
- // The module is scanned for legacy loader API applications; if none are found, then assume the module is an
- // AMD module and return 0. Otherwise, a synthetic dojo/loadInit plugin resource is created and the module text
- // is rewritten as an AMD module with the single dependency of this synthetic resource. When the dojo/loadInit
- // plugin loaded the synthetic resource, it will cause all dojo.loadInit's to be executed, find all dojo.require's
- // (either directly consequent to dojo.require or indirectly consequent to dojo.require[After]If or
- // dojo.platformRequire, and finally cause loading of all dojo.required modules with the dojo/require plugin. Thus,
- // when the dojo/loadInit plugin reports it has been loaded, all modules required by the given module are guaranteed
- // loaded (but not executed). This then allows the module to execute it's code path without interupts, thereby
- // following the synchronous code path.
- //
- // Notice that this function behaves the same whether or not it happens to be in a mapped dojo/loader module.
-
- var extractResult, id, names = [], namesAsStrings = [];
- if(buildDetectRe.test(text) || !(extractResult = extractLegacyApiApplications(text))){
- // buildDetectRe.test(text) => a built module, always AMD
- // extractResult==0 => no sync API
- return 0;
- }
-
- // manufacture a synthetic module id that can never be a real mdule id (just like require does)
- id = module.mid + "-*loadInit";
-
- // construct the dojo/loadInit names vector which causes any relocated names to be defined as lexical variables under their not-relocated name
- // the dojo/loadInit plugin assumes the first name in names is "dojo"
-
- for(var p in getModule("dojo", module).result.scopeMap){
- names.push(p);
- namesAsStrings.push('"' + p + '"');
- }
-
- // rewrite the module as a synthetic dojo/loadInit plugin resource + the module expressed as an AMD module that depends on this synthetic resource
- // don't have to map dojo/init since that will occur when the dependency is resolved
- return "// xdomain rewrite of " + module.mid + "\n" +
- "define('" + id + "',{\n" +
- "\tnames:" + dojo.toJson(names) + ",\n" +
- "\tdef:function(" + names.join(",") + "){" + extractResult[1] + "}" +
- "});\n\n" +
- "define(" + dojo.toJson(names.concat(["dojo/loadInit!"+id])) + ", function(" + names.join(",") + "){\n" + extractResult[0] + "});";
- },
-
- loaderVars = require.initSyncLoader(dojoRequirePlugin, checkDojoRequirePlugin, transformToAmd),
-
- sync =
- loaderVars.sync,
-
- requested =
- loaderVars.requested,
-
- arrived =
- loaderVars.arrived,
-
- nonmodule =
- loaderVars.nonmodule,
-
- executing =
- loaderVars.executing,
-
- executed =
- loaderVars.executed,
-
- syncExecStack =
- loaderVars.syncExecStack,
-
- modules =
- loaderVars.modules,
-
- execQ =
- loaderVars.execQ,
-
- getModule =
- loaderVars.getModule,
-
- injectModule =
- loaderVars.injectModule,
-
- setArrived =
- loaderVars.setArrived,
-
- signal =
- loaderVars.signal,
-
- finishExec =
- loaderVars.finishExec,
-
- execModule =
- loaderVars.execModule,
-
- getLegacyMode =
- loaderVars.getLegacyMode,
-
- guardCheckComplete =
- loaderVars.guardCheckComplete;
-
- // there is exactly one dojoRequirePlugin among possibly-many dojo/_base/loader's (owing to mapping)
- dojoRequirePlugin = loaderVars.dojoRequirePlugin;
-
- dojo.provide = function(mid){
- var executingModule = syncExecStack[0],
- module = lang.mixin(getModule(slashName(mid), require.module), {
- executed:executing,
- result:lang.getObject(mid, true)
- });
- setArrived(module);
- if(executingModule){
- (executingModule.provides || (executingModule.provides = [])).push(function(){
- module.result = lang.getObject(mid);
- delete module.provides;
- module.executed!==executed && finishExec(module);
- });
- }// else dojo.provide called not consequent to loading; therefore, give up trying to publish module value to loader namespace
- return module.result;
- };
-
- has.add("config-publishRequireResult", 1, 0, 0);
-
- dojo.require = function(moduleName, omitModuleCheck) {
- // summary:
- // loads a Javascript module from the appropriate URI
- //
- // moduleName: String
- // module name to load, using periods for separators,
- // e.g. "dojo.date.locale". Module paths are de-referenced by dojo's
- // internal mapping of locations to names and are disambiguated by
- // longest prefix. See `dojo.registerModulePath()` for details on
- // registering new modules.
- //
- // omitModuleCheck: Boolean?
- // if `true`, omitModuleCheck skips the step of ensuring that the
- // loaded file actually defines the symbol it is referenced by.
- // For example if it called as `dojo.require("a.b.c")` and the
- // file located at `a/b/c.js` does not define an object `a.b.c`,
- // and exception will be throws whereas no exception is raised
- // when called as `dojo.require("a.b.c", true)`
- //
- // description:
- // Modules are loaded via dojo.require by using one of two loaders: the normal loader
- // and the xdomain loader. The xdomain loader is used when dojo was built with a
- // custom build that specified loader=xdomain and the module lives on a modulePath
- // that is a whole URL, with protocol and a domain. The versions of Dojo that are on
- // the Google and AOL CDNs use the xdomain loader.
- //
- // If the module is loaded via the xdomain loader, it is an asynchronous load, since
- // the module is added via a dynamically created script tag. This
- // means that dojo.require() can return before the module has loaded. However, this
- // should only happen in the case where you do dojo.require calls in the top-level
- // HTML page, or if you purposely avoid the loader checking for dojo.require
- // dependencies in your module by using a syntax like dojo["require"] to load the module.
- //
- // Sometimes it is useful to not have the loader detect the dojo.require calls in the
- // module so that you can dynamically load the modules as a result of an action on the
- // page, instead of right at module load time.
- //
- // Also, for script blocks in an HTML page, the loader does not pre-process them, so
- // it does not know to download the modules before the dojo.require calls occur.
- //
- // So, in those two cases, when you want on-the-fly module loading or for script blocks
- // in the HTML page, special care must be taken if the dojo.required code is loaded
- // asynchronously. To make sure you can execute code that depends on the dojo.required
- // modules, be sure to add the code that depends on the modules in a dojo.addOnLoad()
- // callback. dojo.addOnLoad waits for all outstanding modules to finish loading before
- // executing.
- //
- // This type of syntax works with both xdomain and normal loaders, so it is good
- // practice to always use this idiom for on-the-fly code loading and in HTML script
- // blocks. If at some point you change loaders and where the code is loaded from,
- // it will all still work.
- //
- // More on how dojo.require
- // `dojo.require("A.B")` first checks to see if symbol A.B is
- // defined. If it is, it is simply returned (nothing to do).
- //
- // If it is not defined, it will look for `A/B.js` in the script root
- // directory.
- //
- // `dojo.require` throws an exception if it cannot find a file
- // to load, or if the symbol `A.B` is not defined after loading.
- //
- // It returns the object `A.B`, but note the caveats above about on-the-fly loading and
- // HTML script blocks when the xdomain loader is loading a module.
- //
- // `dojo.require()` does nothing about importing symbols into
- // the current namespace. It is presumed that the caller will
- // take care of that.
- //
- // example:
- // To use dojo.require in conjunction with dojo.ready:
- //
- // | dojo.require("foo");
- // | dojo.require("bar");
- // | dojo.addOnLoad(function(){
- // | //you can now safely do something with foo and bar
- // | });
- //
- // example:
- // For example, to import all symbols into a local block, you might write:
- //
- // | with (dojo.require("A.B")) {
- // | ...
- // | }
- //
- // And to import just the leaf symbol to a local variable:
- //
- // | var B = dojo.require("A.B");
- // | ...
- //
- // returns:
- // the required namespace object
- function doRequire(mid, omitModuleCheck){
- var module = getModule(slashName(mid), require.module);
- if(syncExecStack.length && syncExecStack[0].finish){
- // switched to async loading in the middle of evaluating a legacy module; stop
- // applying dojo.require so the remaining dojo.requires are applied in order
- syncExecStack[0].finish.push(mid);
- return undefined;
- }
-
- // recall module.executed has values {0, executing, executed}; therefore, truthy indicates executing or executed
- if(module.executed){
- return module.result;
- }
- omitModuleCheck && (module.result = nonmodule);
-
- // rcg...why here and in two lines??
- var currentMode = getLegacyMode();
-
- // recall, in sync mode to inject is to *eval* the module text
- // if the module is a legacy module, this is the same as executing
- // but if the module is an AMD module, this means defining, not executing
- injectModule(module);
- // the inject may have changed the mode
- currentMode = getLegacyMode();
-
- // in sync mode to dojo.require is to execute
- if(module.executed!==executed && module.injected===arrived){
- // the module was already here before injectModule was called probably finishing up a xdomain
- // load, but maybe a module given to the loader directly rather than having the loader retrieve it
-
- loaderVars.guardCheckComplete(function(){
- execModule(module);
- });
- }
- if(module.executed){
- return module.result;
- }
-
- if(currentMode==sync){
- // the only way to get here is in sync mode and dojo.required a module that
- // * was loaded async in the injectModule application a few lines up
- // * was an AMD module that had deps that are being loaded async and therefore couldn't execute
- if(module.cjs){
- // the module was an AMD module; unshift, not push, which causes the current traversal to be reattempted from the top
- execQ.unshift(module);
- }else{
- // the module was a legacy module
- syncExecStack.length && (syncExecStack[0].finish= [mid]);
- }
- }else{
- // the loader wasn't in sync mode on entry; probably async mode; therefore, no expectation of getting
- // the module value synchronously; make sure it gets executed though
- execQ.push(module);
- }
-
- return undefined;
- }
-
- var result = doRequire(moduleName, omitModuleCheck);
- if(has("config-publishRequireResult") && !lang.exists(moduleName) && result!==undefined){
- lang.setObject(moduleName, result);
- }
- return result;
- };
-
- dojo.loadInit = function(f) {
- f();
- };
-
- dojo.registerModulePath = function(/*String*/moduleName, /*String*/prefix){
- // summary:
- // Maps a module name to a path
- // description:
- // An unregistered module is given the default path of ../[module],
- // relative to Dojo root. For example, module acme is mapped to
- // ../acme. If you want to use a different module name, use
- // dojo.registerModulePath.
- // example:
- // If your dojo.js is located at this location in the web root:
- // | /myapp/js/dojo/dojo/dojo.js
- // and your modules are located at:
- // | /myapp/js/foo/bar.js
- // | /myapp/js/foo/baz.js
- // | /myapp/js/foo/thud/xyzzy.js
- // Your application can tell Dojo to locate the "foo" namespace by calling:
- // | dojo.registerModulePath("foo", "../../foo");
- // At which point you can then use dojo.require() to load the
- // modules (assuming they provide() the same things which are
- // required). The full code might be:
- // | <script type="text/javascript"
- // | src="/myapp/js/dojo/dojo/dojo.js"></script>
- // | <script type="text/javascript">
- // | dojo.registerModulePath("foo", "../../foo");
- // | dojo.require("foo.bar");
- // | dojo.require("foo.baz");
- // | dojo.require("foo.thud.xyzzy");
- // | </script>
-
- var paths = {};
- paths[moduleName.replace(/\./g, "/")] = prefix;
- require({paths:paths});
- };
-
- dojo.platformRequire = function(/*Object*/modMap){
- // summary:
- // require one or more modules based on which host environment
- // Dojo is currently operating in
- // description:
- // This method takes a "map" of arrays which one can use to
- // optionally load dojo modules. The map is indexed by the
- // possible dojo.name_ values, with two additional values:
- // "default" and "common". The items in the "default" array will
- // be loaded if none of the other items have been choosen based on
- // dojo.name_, set by your host environment. The items in the
- // "common" array will *always* be loaded, regardless of which
- // list is chosen.
- // example:
- // | dojo.platformRequire({
- // | browser: [
- // | "foo.sample", // simple module
- // | "foo.test",
- // | ["foo.bar.baz", true] // skip object check in _loadModule (dojo.require)
- // | ],
- // | default: [ "foo.sample._base" ],
- // | common: [ "important.module.common" ]
- // | });
-
- var result = (modMap.common || []).concat(modMap[dojo._name] || modMap["default"] || []),
- temp;
- while(result.length){
- if(lang.isArray(temp = result.shift())){
- dojo.require.apply(dojo, temp);
- }else{
- dojo.require(temp);
- }
- }
- };
-
- dojo.requireIf = dojo.requireAfterIf = function(/*Boolean*/ condition, /*String*/ moduleName, /*Boolean?*/omitModuleCheck){
- // summary:
- // If the condition is true then call `dojo.require()` for the specified
- // resource
- //
- // example:
- // | dojo.requireIf(dojo.isBrowser, "my.special.Module");
-
- if(condition){
- dojo.require(moduleName, omitModuleCheck);
- }
- };
-
- dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale){
- require(["../i18n"], function(i18n){
- i18n.getLocalization(moduleName, bundleName, locale);
- });
- };
-
- return {
- // summary:
- // This module defines the v1.x synchronous loader API.
-
- extractLegacyApiApplications:extractLegacyApiApplications,
- require:dojoRequirePlugin,
- loadInit:dojoLoadInitPlugin
- };
-});