diff options
Diffstat (limited to 'lib/dojo/_base/_loader')
-rw-r--r-- | lib/dojo/_base/_loader/bootstrap.js | 505 | ||||
-rw-r--r-- | lib/dojo/_base/_loader/hostenv_browser.js | 477 | ||||
-rw-r--r-- | lib/dojo/_base/_loader/hostenv_ff_ext.js | 338 | ||||
-rw-r--r-- | lib/dojo/_base/_loader/hostenv_rhino.js | 214 | ||||
-rw-r--r-- | lib/dojo/_base/_loader/hostenv_spidermonkey.js | 87 | ||||
-rw-r--r-- | lib/dojo/_base/_loader/loader.js | 816 | ||||
-rw-r--r-- | lib/dojo/_base/_loader/loader_debug.js | 86 | ||||
-rw-r--r-- | lib/dojo/_base/_loader/loader_xd.js | 727 |
8 files changed, 0 insertions, 3250 deletions
diff --git a/lib/dojo/_base/_loader/bootstrap.js b/lib/dojo/_base/_loader/bootstrap.js deleted file mode 100644 index a1f99276a..000000000 --- a/lib/dojo/_base/_loader/bootstrap.js +++ /dev/null @@ -1,505 +0,0 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -/*===== -// note: -// 'djConfig' does not exist under 'dojo.*' so that it can be set before the -// 'dojo' variable exists. -// note: -// Setting any of these variables *after* the library has loaded does -// nothing at all. - -djConfig = { - // summary: - // Application code can set the global 'djConfig' prior to loading - // the library to override certain global settings for how dojo works. - // - // isDebug: Boolean - // Defaults to `false`. If set to `true`, ensures that Dojo provides - // extended debugging feedback via Firebug. If Firebug is not available - // on your platform, setting `isDebug` to `true` will force Dojo to - // pull in (and display) the version of Firebug Lite which is - // integrated into the Dojo distribution, thereby always providing a - // debugging/logging console when `isDebug` is enabled. Note that - // Firebug's `console.*` methods are ALWAYS defined by Dojo. If - // `isDebug` is false and you are on a platform without Firebug, these - // methods will be defined as no-ops. - isDebug: false, - // debugAtAllCosts: Boolean - // Defaults to `false`. If set to `true`, this triggers an alternate - // mode of the package system in which dependencies are detected and - // only then are resources evaluated in dependency order via - // `<script>` tag inclusion. This may double-request resources and - // cause problems with scripts which expect `dojo.require()` to - // preform synchronously. `debugAtAllCosts` can be an invaluable - // debugging aid, but when using it, ensure that all code which - // depends on Dojo modules is wrapped in `dojo.addOnLoad()` handlers. - // Due to the somewhat unpredictable side-effects of using - // `debugAtAllCosts`, it is strongly recommended that you enable this - // flag as a last resort. `debugAtAllCosts` has no effect when loading - // resources across domains. For usage information, see the - // [Dojo Book](http://dojotoolkit.org/book/book-dojo/part-4-meta-dojo-making-your-dojo-code-run-faster-and-better/debugging-facilities/deb) - debugAtAllCosts: false, - // locale: String - // The locale to assume for loading localized resources in this page, - // specified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt). - // Must be specified entirely in lowercase, e.g. `en-us` and `zh-cn`. - // See the documentation for `dojo.i18n` and `dojo.requireLocalization` - // for details on loading localized resources. If no locale is specified, - // Dojo assumes the locale of the user agent, according to `navigator.userLanguage` - // or `navigator.language` properties. - locale: undefined, - // extraLocale: Array - // No default value. Specifies additional locales whose - // resources should also be loaded alongside the default locale when - // calls to `dojo.requireLocalization()` are processed. - extraLocale: undefined, - // baseUrl: String - // The directory in which `dojo.js` is located. Under normal - // conditions, Dojo auto-detects the correct location from which it - // was loaded. You may need to manually configure `baseUrl` in cases - // where you have renamed `dojo.js` or in which `<base>` tags confuse - // some browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned - // either the value of `djConfig.baseUrl` if one is provided or the - // auto-detected root if not. Other modules are located relative to - // this path. The path should end in a slash. - baseUrl: undefined, - // modulePaths: Object - // A map of module names to paths relative to `dojo.baseUrl`. The - // key/value pairs correspond directly to the arguments which - // `dojo.registerModulePath` accepts. Specifiying - // `djConfig.modulePaths = { "foo": "../../bar" }` is the equivalent - // of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple - // modules may be configured via `djConfig.modulePaths`. - modulePaths: {}, - // afterOnLoad: Boolean - // Indicates Dojo was added to the page after the page load. In this case - // Dojo will not wait for the page DOMContentLoad/load events and fire - // its dojo.addOnLoad callbacks after making sure all outstanding - // dojo.required modules have loaded. Only works with a built dojo.js, - // it does not work the dojo.js directly from source control. - afterOnLoad: false, - // addOnLoad: Function or Array - // Adds a callback via dojo.addOnLoad. Useful when Dojo is added after - // the page loads and djConfig.afterOnLoad is true. Supports the same - // arguments as dojo.addOnLoad. When using a function reference, use - // `djConfig.addOnLoad = function(){};`. For object with function name use - // `djConfig.addOnLoad = [myObject, "functionName"];` and for object with - // function reference use - // `djConfig.addOnLoad = [myObject, function(){}];` - addOnLoad: null, - // require: Array - // An array of module names to be loaded immediately after dojo.js has been included - // in a page. - require: [], - // defaultDuration: Array - // Default duration, in milliseconds, for wipe and fade animations within dijits. - // Assigned to dijit.defaultDuration. - defaultDuration: 200, - // dojoBlankHtmlUrl: String - // Used by some modules to configure an empty iframe. Used by dojo.io.iframe and - // dojo.back, and dijit popup support in IE where an iframe is needed to make sure native - // controls do not bleed through the popups. Normally this configuration variable - // does not need to be set, except when using cross-domain/CDN Dojo builds. - // Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl` - // to the path on your domain your copy of blank.html. - dojoBlankHtmlUrl: undefined, - // ioPublish: Boolean? - // Set this to true to enable publishing of topics for the different phases of - // IO operations. Publishing is done via dojo.publish. See dojo.__IoPublish for a list - // of topics that are published. - ioPublish: false, - // useCustomLogger: Anything? - // If set to a value that evaluates to true such as a string or array and - // isDebug is true and Firebug is not available or running, then it bypasses - // the creation of Firebug Lite allowing you to define your own console object. - useCustomLogger: undefined, - // transparentColor: Array - // Array containing the r, g, b components used as transparent color in dojo.Color; - // if undefined, [255,255,255] (white) will be used. - transparentColor: undefined, - // skipIeDomLoaded: Boolean - // For IE only, skip the DOMContentLoaded hack used. Sometimes it can cause an Operation - // Aborted error if the rest of the page triggers script defers before the DOM is ready. - // If this is config value is set to true, then dojo.addOnLoad callbacks will not be - // triggered until the page load event, which is after images and iframes load. If you - // want to trigger the callbacks sooner, you can put a script block in the bottom of - // your HTML that calls dojo._loadInit();. If you are using multiversion support, change - // "dojo." to the appropriate scope name for dojo. - skipIeDomLoaded: false -} -=====*/ - -(function(){ - // firebug stubs - - if(typeof this["loadFirebugConsole"] == "function"){ - // for Firebug 1.2 - this["loadFirebugConsole"](); - }else{ - this.console = this.console || {}; - - // Be careful to leave 'log' always at the end - var cn = [ - "assert", "count", "debug", "dir", "dirxml", "error", "group", - "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd", - "trace", "warn", "log" - ]; - var i = 0, tn; - while((tn=cn[i++])){ - if(!console[tn]){ - (function(){ - var tcn = tn+""; - console[tcn] = ('log' in console) ? function(){ - var a = Array.apply({}, arguments); - a.unshift(tcn+":"); - console["log"](a.join(" ")); - } : function(){} - console[tcn]._fake = true; - })(); - } - } - } - - //TODOC: HOW TO DOC THIS? - // dojo is the root variable of (almost all) our public symbols -- make sure it is defined. - if(typeof dojo == "undefined"){ - dojo = { - _scopeName: "dojo", - _scopePrefix: "", - _scopePrefixArgs: "", - _scopeSuffix: "", - _scopeMap: {}, - _scopeMapRev: {} - }; - } - - var d = dojo; - - //Need placeholders for dijit and dojox for scoping code. - if(typeof dijit == "undefined"){ - dijit = {_scopeName: "dijit"}; - } - if(typeof dojox == "undefined"){ - dojox = {_scopeName: "dojox"}; - } - - if(!d._scopeArgs){ - d._scopeArgs = [dojo, dijit, dojox]; - } - -/*===== -dojo.global = { - // summary: - // Alias for the global scope - // (e.g. the window object in a browser). - // description: - // Refer to 'dojo.global' rather than referring to window to ensure your - // code runs correctly in contexts other than web browsers (e.g. Rhino on a server). -} -=====*/ - d.global = this; - - d.config =/*===== djConfig = =====*/{ - isDebug: false, - debugAtAllCosts: false - }; - - // FIXME: 2.0, drop djConfig support. Use dojoConfig exclusively for global config. - var cfg = typeof djConfig != "undefined" ? djConfig : - typeof dojoConfig != "undefined" ? dojoConfig : null; - - if(cfg){ - for(var c in cfg){ - d.config[c] = cfg[c]; - } - } - -/*===== - // Override locale setting, if specified - dojo.locale = { - // summary: the locale as defined by Dojo (read-only) - }; -=====*/ - dojo.locale = d.config.locale; - - var rev = "$Rev: 24595 $".match(/\d+/); - -/*===== - dojo.version = function(){ - // summary: - // Version number of the Dojo Toolkit - // major: Integer - // Major version. If total version is "1.2.0beta1", will be 1 - // minor: Integer - // Minor version. If total version is "1.2.0beta1", will be 2 - // patch: Integer - // Patch version. If total version is "1.2.0beta1", will be 0 - // flag: String - // Descriptor flag. If total version is "1.2.0beta1", will be "beta1" - // revision: Number - // The SVN rev from which dojo was pulled - this.major = 0; - this.minor = 0; - this.patch = 0; - this.flag = ""; - this.revision = 0; - } -=====*/ - dojo.version = { - major: 1, minor: 6, patch: 1, flag: "", - revision: rev ? +rev[0] : NaN, - toString: function(){ - with(d.version){ - return major + "." + minor + "." + patch + flag + " (" + revision + ")"; // String - } - } - } - - // Register with the OpenAjax hub - if(typeof OpenAjax != "undefined"){ - OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString()); - } - - var extraNames, extraLen, empty = {}; - for(var i in {toString: 1}){ extraNames = []; break; } - dojo._extraNames = extraNames = extraNames || ["hasOwnProperty", "valueOf", "isPrototypeOf", - "propertyIsEnumerable", "toLocaleString", "toString", "constructor"]; - extraLen = extraNames.length; - - dojo._mixin = function(/*Object*/ target, /*Object*/ source){ - // summary: - // Adds all properties and methods of source to target. This addition - // is "prototype extension safe", so that instances of objects - // will not pass along prototype defaults. - var name, s, i; - for(name in source){ - // the "tobj" condition avoid copying properties in "source" - // inherited from Object.prototype. For example, if target has a custom - // toString() method, don't overwrite it with the toString() method - // that source inherited from Object.prototype - s = source[name]; - if(!(name in target) || (target[name] !== s && (!(name in empty) || empty[name] !== s))){ - target[name] = s; - } - } - // IE doesn't recognize some custom functions in for..in - if(extraLen && source){ - for(i = 0; i < extraLen; ++i){ - name = extraNames[i]; - s = source[name]; - if(!(name in target) || (target[name] !== s && (!(name in empty) || empty[name] !== s))){ - target[name] = s; - } - } - } - return target; // Object - } - - dojo.mixin = function(/*Object*/obj, /*Object...*/props){ - // summary: - // Adds all properties and methods of props to obj and returns the - // (now modified) obj. - // description: - // `dojo.mixin` can mix multiple source objects into a - // destination object which is then returned. Unlike regular - // `for...in` iteration, `dojo.mixin` is also smart about avoiding - // extensions which other toolkits may unwisely add to the root - // object prototype - // obj: - // The object to mix properties into. Also the return value. - // props: - // One or more objects whose values are successively copied into - // obj. If more than one of these objects contain the same value, - // the one specified last in the function call will "win". - // example: - // make a shallow copy of an object - // | var copy = dojo.mixin({}, source); - // example: - // many class constructors often take an object which specifies - // values to be configured on the object. In this case, it is - // often simplest to call `dojo.mixin` on the `this` object: - // | dojo.declare("acme.Base", null, { - // | constructor: function(properties){ - // | // property configuration: - // | dojo.mixin(this, properties); - // | - // | console.log(this.quip); - // | // ... - // | }, - // | quip: "I wasn't born yesterday, you know - I've seen movies.", - // | // ... - // | }); - // | - // | // create an instance of the class and configure it - // | var b = new acme.Base({quip: "That's what it does!" }); - // example: - // copy in properties from multiple objects - // | var flattened = dojo.mixin( - // | { - // | name: "Frylock", - // | braces: true - // | }, - // | { - // | name: "Carl Brutanananadilewski" - // | } - // | ); - // | - // | // will print "Carl Brutanananadilewski" - // | console.log(flattened.name); - // | // will print "true" - // | console.log(flattened.braces); - if(!obj){ obj = {}; } - for(var i=1, l=arguments.length; i<l; i++){ - d._mixin(obj, arguments[i]); - } - return obj; // Object - } - - dojo._getProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){ - var obj=context || d.global; - for(var i=0, p; obj && (p=parts[i]); i++){ - if(i == 0 && d._scopeMap[p]){ - p = d._scopeMap[p]; - } - obj = (p in obj ? obj[p] : (create ? obj[p]={} : undefined)); - } - return obj; // mixed - } - - dojo.setObject = function(/*String*/name, /*Object*/value, /*Object?*/context){ - // summary: - // Set a property from a dot-separated string, such as "A.B.C" - // description: - // Useful for longer api chains where you have to test each object in - // the chain, or when you have an object reference in string format. - // Objects are created as needed along `path`. Returns the passed - // value if setting is successful or `undefined` if not. - // name: - // Path to a property, in the form "A.B.C". - // context: - // Optional. Object to use as root of path. Defaults to - // `dojo.global`. - // example: - // set the value of `foo.bar.baz`, regardless of whether - // intermediate objects already exist: - // | dojo.setObject("foo.bar.baz", value); - // example: - // without `dojo.setObject`, we often see code like this: - // | // ensure that intermediate objects are available - // | if(!obj["parent"]){ obj.parent = {}; } - // | if(!obj.parent["child"]){ obj.parent.child= {}; } - // | // now we can safely set the property - // | obj.parent.child.prop = "some value"; - // wheras with `dojo.setObject`, we can shorten that to: - // | dojo.setObject("parent.child.prop", "some value", obj); - var parts=name.split("."), p=parts.pop(), obj=d._getProp(parts, true, context); - return obj && p ? (obj[p]=value) : undefined; // Object - } - - dojo.getObject = function(/*String*/name, /*Boolean?*/create, /*Object?*/context){ - // summary: - // Get a property from a dot-separated string, such as "A.B.C" - // description: - // Useful for longer api chains where you have to test each object in - // the chain, or when you have an object reference in string format. - // name: - // Path to an property, in the form "A.B.C". - // create: - // Optional. Defaults to `false`. If `true`, Objects will be - // created at any point along the 'path' that is undefined. - // context: - // Optional. Object to use as root of path. Defaults to - // 'dojo.global'. Null may be passed. - return d._getProp(name.split("."), create, context); // Object - } - - dojo.exists = function(/*String*/name, /*Object?*/obj){ - // summary: - // determine if an object supports a given method - // description: - // useful for longer api chains where you have to test each object in - // the chain. Useful for object and method detection. - // name: - // Path to an object, in the form "A.B.C". - // obj: - // Object to use as root of path. Defaults to - // 'dojo.global'. Null may be passed. - // example: - // | // define an object - // | var foo = { - // | bar: { } - // | }; - // | - // | // search the global scope - // | dojo.exists("foo.bar"); // true - // | dojo.exists("foo.bar.baz"); // false - // | - // | // search from a particular scope - // | dojo.exists("bar", foo); // true - // | dojo.exists("bar.baz", foo); // false - return d.getObject(name, false, obj) !== undefined; // Boolean - } - - dojo["eval"] = function(/*String*/ scriptFragment){ - // summary: - // A legacy method created for use exclusively by internal Dojo methods. Do not use - // this method directly, the behavior of this eval will differ from the normal - // browser eval. - // description: - // Placed in a separate function to minimize size of trapped - // exceptions. Calling eval() directly from some other scope may - // complicate tracebacks on some platforms. - // returns: - // The result of the evaluation. Often `undefined` - return d.global.eval ? d.global.eval(scriptFragment) : eval(scriptFragment); // Object - } - - /*===== - dojo.deprecated = function(behaviour, extra, removal){ - // summary: - // Log a debug message to indicate that a behavior has been - // deprecated. - // behaviour: String - // The API or behavior being deprecated. Usually in the form - // of "myApp.someFunction()". - // extra: String? - // Text to append to the message. Often provides advice on a - // new function or facility to achieve the same goal during - // the deprecation period. - // removal: String? - // Text to indicate when in the future the behavior will be - // removed. Usually a version number. - // example: - // | dojo.deprecated("myApp.getTemp()", "use myApp.getLocaleTemp() instead", "1.0"); - } - - dojo.experimental = function(moduleName, extra){ - // summary: Marks code as experimental. - // description: - // This can be used to mark a function, file, or module as - // experimental. Experimental code is not ready to be used, and the - // APIs are subject to change without notice. Experimental code may be - // completed deleted without going through the normal deprecation - // process. - // moduleName: String - // The name of a module, or the name of a module file or a specific - // function - // extra: String? - // some additional message for the user - // example: - // | dojo.experimental("dojo.data.Result"); - // example: - // | dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA"); - } - =====*/ - - //Real functions declared in dojo._firebug.firebug. - d.deprecated = d.experimental = function(){}; - -})(); -// vim:ai:ts=4:noet diff --git a/lib/dojo/_base/_loader/hostenv_browser.js b/lib/dojo/_base/_loader/hostenv_browser.js deleted file mode 100644 index b31bd77dc..000000000 --- a/lib/dojo/_base/_loader/hostenv_browser.js +++ /dev/null @@ -1,477 +0,0 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -/*===== -dojo.isBrowser = { - // example: - // | if(dojo.isBrowser){ ... } -}; - -dojo.isFF = { - // example: - // | if(dojo.isFF > 1){ ... } -}; - -dojo.isIE = { - // example: - // | if(dojo.isIE > 6){ - // | // we are IE7 - // | } -}; - -dojo.isSafari = { - // example: - // | if(dojo.isSafari){ ... } - // example: - // Detect iPhone: - // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ - // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. - // | } -}; - -dojo = { - // isBrowser: Boolean - // True if the client is a web-browser - isBrowser: true, - // isFF: Number | undefined - // Version as a Number if client is FireFox. undefined otherwise. Corresponds to - // major detected FireFox version (1.5, 2, 3, etc.) - isFF: 2, - // isIE: Number | undefined - // Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to - // major detected IE version (6, 7, 8, etc.) - isIE: 6, - // isKhtml: Number | undefined - // Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major - // detected version. - isKhtml: 0, - // isWebKit: Number | undefined - // Version as a Number if client is a WebKit-derived browser (Konqueror, - // Safari, Chrome, etc.). undefined otherwise. - isWebKit: 0, - // isMozilla: Number | undefined - // Version as a Number if client is a Mozilla-based browser (Firefox, - // SeaMonkey). undefined otherwise. Corresponds to major detected version. - isMozilla: 0, - // isOpera: Number | undefined - // Version as a Number if client is Opera. undefined otherwise. Corresponds to - // major detected version. - isOpera: 0, - // isSafari: Number | undefined - // Version as a Number if client is Safari or iPhone. undefined otherwise. - isSafari: 0, - // isChrome: Number | undefined - // Version as a Number if client is Chrome browser. undefined otherwise. - isChrome: 0 - // isMac: Boolean - // True if the client runs on Mac -} -=====*/ -if(typeof window != 'undefined'){ - dojo.isBrowser = true; - dojo._name = "browser"; - - - // attempt to figure out the path to dojo if it isn't set in the config - (function(){ - var d = dojo; - - // this is a scope protection closure. We set browser versions and grab - // the URL we were loaded from here. - - // grab the node we were loaded from - if(document && document.getElementsByTagName){ - var scripts = document.getElementsByTagName("script"); - var rePkg = /dojo(\.xd)?\.js(\W|$)/i; - for(var i = 0; i < scripts.length; i++){ - var src = scripts[i].getAttribute("src"); - if(!src){ continue; } - var m = src.match(rePkg); - if(m){ - // find out where we came from - if(!d.config.baseUrl){ - d.config.baseUrl = src.substring(0, m.index); - } - // and find out if we need to modify our behavior - var cfg = (scripts[i].getAttribute("djConfig") || scripts[i].getAttribute("data-dojo-config")); - if(cfg){ - var cfgo = eval("({ "+cfg+" })"); - for(var x in cfgo){ - dojo.config[x] = cfgo[x]; - } - } - break; // "first Dojo wins" - } - } - } - d.baseUrl = d.config.baseUrl; - - // fill in the rendering support information in dojo.render.* - var n = navigator; - var dua = n.userAgent, - dav = n.appVersion, - tv = parseFloat(dav); - - if(dua.indexOf("Opera") >= 0){ d.isOpera = tv; } - if(dua.indexOf("AdobeAIR") >= 0){ d.isAIR = 1; } - d.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0; - d.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined; - d.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined; - d.isMac = dav.indexOf("Macintosh") >= 0; - - // safari detection derived from: - // http://developer.apple.com/internet/safari/faq.html#anchor2 - // http://developer.apple.com/internet/safari/uamatrix.html - var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); - if(index && !dojo.isChrome){ - // try to grab the explicit Safari version first. If we don't get - // one, look for less than 419.3 as the indication that we're on something - // "Safari 2-ish". - d.isSafari = parseFloat(dav.split("Version/")[1]); - if(!d.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){ - d.isSafari = 2; - } - } - - if(dua.indexOf("Gecko") >= 0 && !d.isKhtml && !d.isWebKit){ d.isMozilla = d.isMoz = tv; } - if(d.isMoz){ - //We really need to get away from this. Consider a sane isGecko approach for the future. - d.isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined; - } - if(document.all && !d.isOpera){ - d.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; - //In cases where the page has an HTTP header or META tag with - //X-UA-Compatible, then it is in emulation mode. - //Make sure isIE reflects the desired version. - //document.documentMode of 5 means quirks mode. - //Only switch the value if documentMode's major version - //is different from isIE's major version. - var mode = document.documentMode; - if(mode && mode != 5 && Math.floor(d.isIE) != mode){ - d.isIE = mode; - } - } - - //Workaround to get local file loads of dojo to work on IE 7 - //by forcing to not use native xhr. - if(dojo.isIE && window.location.protocol === "file:"){ - dojo.config.ieForceActiveXXhr=true; - } - - d.isQuirks = document.compatMode == "BackCompat"; - - // TODO: is the HTML LANG attribute relevant? - d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase(); - - // These are in order of decreasing likelihood; this will change in time. - d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; - - d._xhrObj = function(){ - // summary: - // does the work of portably generating a new XMLHTTPRequest object. - var http, last_e; - if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ - try{ http = new XMLHttpRequest(); }catch(e){} - } - if(!http){ - for(var i=0; i<3; ++i){ - var progid = d._XMLHTTP_PROGIDS[i]; - try{ - http = new ActiveXObject(progid); - }catch(e){ - last_e = e; - } - - if(http){ - d._XMLHTTP_PROGIDS = [progid]; // so faster next time - break; - } - } - } - - if(!http){ - throw new Error("XMLHTTP not available: "+last_e); - } - - return http; // XMLHTTPRequest instance - } - - d._isDocumentOk = function(http){ - var stat = http.status || 0, - lp = location.protocol; - return (stat >= 200 && stat < 300) || // Boolean - stat == 304 || // allow any 2XX response code - stat == 1223 || // get it out of the cache - // Internet Explorer mangled the status code - // Internet Explorer mangled the status code OR we're Titanium/browser chrome/chrome extension requesting a local file - (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:")); - } - - //See if base tag is in use. - //This is to fix http://trac.dojotoolkit.org/ticket/3973, - //but really, we need to find out how to get rid of the dojo._Url reference - //below and still have DOH work with the dojo.i18n test following some other - //test that uses the test frame to load a document (trac #2757). - //Opera still has problems, but perhaps a larger issue of base tag support - //with XHR requests (hasBase is true, but the request is still made to document - //path, not base path). - var owloc = window.location+""; - var base = document.getElementsByTagName("base"); - var hasBase = (base && base.length > 0); - - d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ - // summary: Read the contents of the specified uri and return those contents. - // uri: - // A relative or absolute uri. If absolute, it still must be in - // the same "domain" as we are. - // fail_ok: - // Default false. If fail_ok and loading fails, return null - // instead of throwing. - // returns: The response text. null is returned when there is a - // failure and failure is okay (an exception otherwise) - - // NOTE: must be declared before scope switches ie. this._xhrObj() - var http = d._xhrObj(); - - if(!hasBase && dojo._Url){ - uri = (new dojo._Url(owloc, uri)).toString(); - } - - if(d.config.cacheBust){ - //Make sure we have a string before string methods are used on uri - uri += ""; - uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,""); - } - - http.open('GET', uri, false); - try{ - http.send(null); - if(!d._isDocumentOk(http)){ - var err = Error("Unable to load "+uri+" status:"+ http.status); - err.status = http.status; - err.responseText = http.responseText; - throw err; - } - }catch(e){ - if(fail_ok){ return null; } // null - // rethrow the exception - throw e; - } - return http.responseText; // String - } - - - var _w = window; - var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){ - // summary: - // non-destructively adds the specified function to the node's - // evtName handler. - // evtName: should be in the form "onclick" for "onclick" handlers. - // Make sure you pass in the "on" part. - var _a = _w.attachEvent || _w.addEventListener; - evtName = _w.attachEvent ? evtName : evtName.substring(2); - _a(evtName, function(){ - fp.apply(_w, arguments); - }, false); - }; - - - d._windowUnloaders = []; - - d.windowUnloaded = function(){ - // summary: - // signal fired by impending window destruction. You may use - // dojo.addOnWindowUnload() to register a listener for this - // event. NOTE: if you wish to dojo.connect() to this method - // to perform page/application cleanup, be aware that this - // event WILL NOT fire if no handler has been registered with - // dojo.addOnWindowUnload. This behavior started in Dojo 1.3. - // Previous versions always triggered dojo.windowUnloaded. See - // dojo.addOnWindowUnload for more info. - var mll = d._windowUnloaders; - while(mll.length){ - (mll.pop())(); - } - d = null; - }; - - var _onWindowUnloadAttached = 0; - d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ - // summary: - // registers a function to be triggered when window.onunload - // fires. - // description: - // The first time that addOnWindowUnload is called Dojo - // will register a page listener to trigger your unload - // handler with. Note that registering these handlers may - // destory "fastback" page caching in browsers that support - // it. Be careful trying to modify the DOM or access - // JavaScript properties during this phase of page unloading: - // they may not always be available. Consider - // dojo.addOnUnload() if you need to modify the DOM or do - // heavy JavaScript work since it fires at the eqivalent of - // the page's "onbeforeunload" event. - // example: - // | dojo.addOnWindowUnload(functionPointer) - // | dojo.addOnWindowUnload(object, "functionName"); - // | dojo.addOnWindowUnload(object, function(){ /* ... */}); - - d._onto(d._windowUnloaders, obj, functionName); - if(!_onWindowUnloadAttached){ - _onWindowUnloadAttached = 1; - _handleNodeEvent("onunload", d.windowUnloaded); - } - }; - - var _onUnloadAttached = 0; - d.addOnUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ - // summary: - // registers a function to be triggered when the page unloads. - // description: - // The first time that addOnUnload is called Dojo will - // register a page listener to trigger your unload handler - // with. - // - // In a browser enviroment, the functions will be triggered - // during the window.onbeforeunload event. Be careful of doing - // too much work in an unload handler. onbeforeunload can be - // triggered if a link to download a file is clicked, or if - // the link is a javascript: link. In these cases, the - // onbeforeunload event fires, but the document is not - // actually destroyed. So be careful about doing destructive - // operations in a dojo.addOnUnload callback. - // - // Further note that calling dojo.addOnUnload will prevent - // browsers from using a "fast back" cache to make page - // loading via back button instantaneous. - // example: - // | dojo.addOnUnload(functionPointer) - // | dojo.addOnUnload(object, "functionName") - // | dojo.addOnUnload(object, function(){ /* ... */}); - - d._onto(d._unloaders, obj, functionName); - if(!_onUnloadAttached){ - _onUnloadAttached = 1; - _handleNodeEvent("onbeforeunload", dojo.unloaded); - } - }; - - })(); - - //START DOMContentLoaded - dojo._initFired = false; - dojo._loadInit = function(e){ - if(dojo._scrollIntervalId){ - clearInterval(dojo._scrollIntervalId); - dojo._scrollIntervalId = 0; - } - - if(!dojo._initFired){ - dojo._initFired = true; - - //Help out IE to avoid memory leak. - if(!dojo.config.afterOnLoad && window.detachEvent){ - window.detachEvent("onload", dojo._loadInit); - } - - if(dojo._inFlightCount == 0){ - dojo._modulesLoaded(); - } - } - } - - if(!dojo.config.afterOnLoad){ - if(document.addEventListener){ - //Standards. Hooray! Assumption here that if standards based, - //it knows about DOMContentLoaded. It is OK if it does not, the fall through - //to window onload should be good enough. - document.addEventListener("DOMContentLoaded", dojo._loadInit, false); - window.addEventListener("load", dojo._loadInit, false); - }else if(window.attachEvent){ - window.attachEvent("onload", dojo._loadInit); - - //DOMContentLoaded approximation. Diego Perini found this MSDN article - //that indicates doScroll is available after DOM ready, so do a setTimeout - //to check when it is available. - //http://msdn.microsoft.com/en-us/library/ms531426.aspx - if(!dojo.config.skipIeDomLoaded && self === self.top){ - dojo._scrollIntervalId = setInterval(function (){ - try{ - //When dojo is loaded into an iframe in an IE HTML Application - //(HTA), such as in a selenium test, javascript in the iframe - //can't see anything outside of it, so self===self.top is true, - //but the iframe is not the top window and doScroll will be - //available before document.body is set. Test document.body - //before trying the doScroll trick - if(document.body){ - document.documentElement.doScroll("left"); - dojo._loadInit(); - } - }catch (e){} - }, 30); - } - } - } - - if(dojo.isIE){ - try{ - (function(){ - document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); - var vmlElems = ["*", "group", "roundrect", "oval", "shape", "rect", "imagedata", "path", "textpath", "text"], - i = 0, l = 1, s = document.createStyleSheet(); - if(dojo.isIE >= 8){ - i = 1; - l = vmlElems.length; - } - for(; i < l; ++i){ - s.addRule("v\\:" + vmlElems[i], "behavior:url(#default#VML); display:inline-block"); - } - })(); - }catch(e){} - } - //END DOMContentLoaded - - - /* - OpenAjax.subscribe("OpenAjax", "onload", function(){ - if(dojo._inFlightCount == 0){ - dojo._modulesLoaded(); - } - }); - - OpenAjax.subscribe("OpenAjax", "onunload", function(){ - dojo.unloaded(); - }); - */ -} //if (typeof window != 'undefined') - -//Register any module paths set up in djConfig. Need to do this -//in the hostenvs since hostenv_browser can read djConfig from a -//script tag's attribute. -(function(){ - var mp = dojo.config["modulePaths"]; - if(mp){ - for(var param in mp){ - dojo.registerModulePath(param, mp[param]); - } - } -})(); - -//Load debug code if necessary. -if(dojo.config.isDebug){ - dojo.require("dojo._firebug.firebug"); -} - -if(dojo.config.debugAtAllCosts){ - // this breaks the new AMD based module loader. The XDomain won't be necessary - // anyway if you switch to the asynchronous loader - //dojo.config.useXDomain = true; - //dojo.require("dojo._base._loader.loader_xd"); - dojo.require("dojo._base._loader.loader_debug"); - dojo.require("dojo.i18n"); -} - diff --git a/lib/dojo/_base/_loader/hostenv_ff_ext.js b/lib/dojo/_base/_loader/hostenv_ff_ext.js deleted file mode 100644 index ca47a4c1c..000000000 --- a/lib/dojo/_base/_loader/hostenv_ff_ext.js +++ /dev/null @@ -1,338 +0,0 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -// a host environment specifically built for Mozilla extensions, but derived -// from the browser host environment -if(typeof window != 'undefined'){ - dojo.isBrowser = true; - dojo._name = "browser"; - - - // FIXME: PORTME - // http://developer.mozilla.org/en/mozIJSSubScriptLoader - - - // attempt to figure out the path to dojo if it isn't set in the config - (function(){ - var d = dojo; - // this is a scope protection closure. We set browser versions and grab - // the URL we were loaded from here. - - // FIXME: need to probably use a different reference to "document" to get the hosting XUL environment - - d.baseUrl = d.config.baseUrl; - - // fill in the rendering support information in dojo.render.* - var n = navigator; - var dua = n.userAgent; - var dav = n.appVersion; - var tv = parseFloat(dav); - - d.isMozilla = d.isMoz = tv; - if(d.isMoz){ - d.isFF = parseFloat(dua.split("Firefox/")[1]) || undefined; - } - - // FIXME - d.isQuirks = document.compatMode == "BackCompat"; - - // FIXME - // TODO: is the HTML LANG attribute relevant? - d.locale = dojo.config.locale || n.language.toLowerCase(); - - d._xhrObj = function(){ - return new XMLHttpRequest(); - } - - // monkey-patch _loadUri to handle file://, chrome://, and resource:// url's - var oldLoadUri = d._loadUri; - d._loadUri = function(uri, cb){ - var handleLocal = ["file:", "chrome:", "resource:"].some(function(prefix){ - return String(uri).indexOf(prefix) == 0; - }); - if(handleLocal){ - // see: - // http://developer.mozilla.org/en/mozIJSSubScriptLoader - var l = Components.classes["@mozilla.org/moz/jssubscript-loader;1"] - .getService(Components.interfaces.mozIJSSubScriptLoader); - var value = l.loadSubScript(uri, d.global) - if(cb){ cb(value); } - return true; - }else{ - // otherwise, call the pre-existing version - return oldLoadUri.apply(d, arguments); - } - } - - // FIXME: PORTME - d._isDocumentOk = function(http){ - var stat = http.status || 0; - return (stat >= 200 && stat < 300) || // Boolean - stat == 304 || // allow any 2XX response code - stat == 1223 || // get it out of the cache - (!stat && (location.protocol=="file:" || location.protocol=="chrome:") ); - } - - // FIXME: PORTME - // var owloc = window.location+""; - // var base = document.getElementsByTagName("base"); - // var hasBase = (base && base.length > 0); - var hasBase = false; - - d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ - // summary: Read the contents of the specified uri and return those contents. - // uri: - // A relative or absolute uri. If absolute, it still must be in - // the same "domain" as we are. - // fail_ok: - // Default false. If fail_ok and loading fails, return null - // instead of throwing. - // returns: The response text. null is returned when there is a - // failure and failure is okay (an exception otherwise) - - // alert("_getText: " + uri); - - // NOTE: must be declared before scope switches ie. this._xhrObj() - var http = d._xhrObj(); - - if(!hasBase && dojo._Url){ - uri = (new dojo._Url(uri)).toString(); - } - if(d.config.cacheBust){ - //Make sure we have a string before string methods are used on uri - uri += ""; - uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,""); - } - var handleLocal = ["file:", "chrome:", "resource:"].some(function(prefix){ - return String(uri).indexOf(prefix) == 0; - }); - if(handleLocal){ - // see: - // http://forums.mozillazine.org/viewtopic.php?p=921150#921150 - var ioService = Components.classes["@mozilla.org/network/io-service;1"] - .getService(Components.interfaces.nsIIOService); - var scriptableStream=Components - .classes["@mozilla.org/scriptableinputstream;1"] - .getService(Components.interfaces.nsIScriptableInputStream); - - var channel = ioService.newChannel(uri, null, null); - var input = channel.open(); - scriptableStream.init(input); - var str = scriptableStream.read(input.available()); - scriptableStream.close(); - input.close(); - return str; - }else{ - http.open('GET', uri, false); - try{ - http.send(null); - // alert(http); - if(!d._isDocumentOk(http)){ - var err = Error("Unable to load "+uri+" status:"+ http.status); - err.status = http.status; - err.responseText = http.responseText; - throw err; - } - }catch(e){ - if(fail_ok){ return null; } // null - // rethrow the exception - throw e; - } - return http.responseText; // String - } - } - - d._windowUnloaders = []; - - // FIXME: PORTME - d.windowUnloaded = function(){ - // summary: - // signal fired by impending window destruction. You may use - // dojo.addOnWIndowUnload() or dojo.connect() to this method to perform - // page/application cleanup methods. See dojo.addOnWindowUnload for more info. - var mll = d._windowUnloaders; - while(mll.length){ - (mll.pop())(); - } - } - - // FIXME: PORTME - d.addOnWindowUnload = function(/*Object?*/obj, /*String|Function?*/functionName){ - // summary: - // registers a function to be triggered when window.onunload fires. - // Be careful trying to modify the DOM or access JavaScript properties - // during this phase of page unloading: they may not always be available. - // Consider dojo.addOnUnload() if you need to modify the DOM or do heavy - // JavaScript work. - // example: - // | dojo.addOnWindowUnload(functionPointer) - // | dojo.addOnWindowUnload(object, "functionName") - // | dojo.addOnWindowUnload(object, function(){ /* ... */}); - - d._onto(d._windowUnloaders, obj, functionName); - } - - // XUL specific APIs - var contexts = []; - var current = null; - dojo._defaultContext = [ window, document ]; - - dojo.pushContext = function(/*Object|String?*/g, /*MDocumentElement?*/d){ - // summary: - // causes subsequent calls to Dojo methods to assume the - // passed object and, optionally, document as the default - // scopes to use. A 2-element array of the previous global and - // document are returned. - // description: - // dojo.pushContext treats contexts as a stack. The - // auto-detected contexts which are initially provided using - // dojo.setContext() require authors to keep state in order to - // "return" to a previous context, whereas the - // dojo.pushContext and dojo.popContext methods provide a more - // natural way to augment blocks of code to ensure that they - // execute in a different window or frame without issue. If - // called without any arguments, the default context (the - // context when Dojo is first loaded) is instead pushed into - // the stack. If only a single string is passed, a node in the - // intitial context's document is looked up and its - // contextWindow and contextDocument properties are used as - // the context to push. This means that iframes can be given - // an ID and code can be executed in the scope of the iframe's - // document in subsequent calls easily. - // g: - // The global context. If a string, the id of the frame to - // search for a context and document. - // d: - // The document element to execute subsequent code with. - var old = [dojo.global, dojo.doc]; - contexts.push(old); - var n; - if(!g && !d){ - n = dojo._defaultContext; - }else{ - n = [ g, d ]; - if(!d && dojo.isString(g)){ - var t = document.getElementById(g); - if(t.contentDocument){ - n = [t.contentWindow, t.contentDocument]; - } - } - } - current = n; - dojo.setContext.apply(dojo, n); - return old; // Array - }; - - dojo.popContext = function(){ - // summary: - // If the context stack contains elements, ensure that - // subsequent code executes in the *previous* context to the - // current context. The current context set ([global, - // document]) is returned. - var oc = current; - if(!contexts.length){ - return oc; - } - dojo.setContext.apply(dojo, contexts.pop()); - return oc; - }; - - // FIXME: - // don't really like the current arguments and order to - // _inContext, so don't make it public until it's right! - dojo._inContext = function(g, d, f){ - var a = dojo._toArray(arguments); - f = a.pop(); - if(a.length == 1){ - d = null; - } - dojo.pushContext(g, d); - var r = f(); - dojo.popContext(); - return r; - }; - - })(); - - dojo._initFired = false; - // BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/) - dojo._loadInit = function(e){ - dojo._initFired = true; - // allow multiple calls, only first one will take effect - // A bug in khtml calls events callbacks for document for event which isnt supported - // for example a created contextmenu event calls DOMContentLoaded, workaround - var type = (e && e.type) ? e.type.toLowerCase() : "load"; - if(arguments.callee.initialized || (type != "domcontentloaded" && type != "load")){ return; } - arguments.callee.initialized = true; - if(dojo._inFlightCount == 0){ - dojo._modulesLoaded(); - } - } - - /* - (function(){ - var _w = window; - var _handleNodeEvent = function(evtName, fp){ - // summary: - // non-destructively adds the specified function to the node's - // evtName handler. - // evtName: should be in the form "onclick" for "onclick" handlers. - // Make sure you pass in the "on" part. - var oldHandler = _w[evtName] || function(){}; - _w[evtName] = function(){ - fp.apply(_w, arguments); - oldHandler.apply(_w, arguments); - }; - }; - // FIXME: PORT - // FIXME: dojo.unloaded requires dojo scope, so using anon function wrapper. - _handleNodeEvent("onbeforeunload", function() { dojo.unloaded(); }); - _handleNodeEvent("onunload", function() { dojo.windowUnloaded(); }); - })(); - */ - - - // FIXME: PORTME - // this event fires a lot, namely for all plugin XUL overlays and for - // all iframes (in addition to window navigations). We only want - // Dojo's to fire once..but we might care if pages navigate. We'll - // probably need an extension-specific API - if(!dojo.config.afterOnLoad){ - window.addEventListener("DOMContentLoaded",function(e){ - dojo._loadInit(e); - // console.log("DOM content loaded", e); - }, false); - } - -} //if (typeof window != 'undefined') - -//Register any module paths set up in djConfig. Need to do this -//in the hostenvs since hostenv_browser can read djConfig from a -//script tag's attribute. -(function(){ - var mp = dojo.config["modulePaths"]; - if(mp){ - for(var param in mp){ - dojo.registerModulePath(param, mp[param]); - } - } -})(); - -//Load debug code if necessary. -if(dojo.config.isDebug){ - // logging stub for extension logging - console.log = function(m){ - var s = Components.classes["@mozilla.org/consoleservice;1"].getService( - Components.interfaces.nsIConsoleService - ); - s.logStringMessage(m); - } - console.debug = function(){ - console.log(dojo._toArray(arguments).join(" ")); - } - // FIXME: what about the rest of the console.* methods? And is there any way to reach into firebug and log into it directly? -} diff --git a/lib/dojo/_base/_loader/hostenv_rhino.js b/lib/dojo/_base/_loader/hostenv_rhino.js deleted file mode 100644 index e3aa78524..000000000 --- a/lib/dojo/_base/_loader/hostenv_rhino.js +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -/* -* Rhino host environment -*/ - -if(dojo.config["baseUrl"]){ - dojo.baseUrl = dojo.config["baseUrl"]; -}else{ - dojo.baseUrl = "./"; -} - -dojo.locale = dojo.locale || String(java.util.Locale.getDefault().toString().replace('_','-').toLowerCase()); -dojo._name = 'rhino'; -dojo.isRhino = true; - -if(typeof print == "function"){ - console.debug = print; -} - -if(!("byId" in dojo)){ - dojo.byId = function(id, doc){ - if(id && (typeof id == "string" || id instanceof String)){ - if(!doc){ doc = document; } - return doc.getElementById(id); - } - return id; // assume it's a node - } -} - -dojo._isLocalUrl = function(/*String*/ uri) { - // summary: - // determines if URI is local or not. - - var local = (new java.io.File(uri)).exists(); - if(!local){ - var stream; - //Try remote URL. Allow this method to throw, - //but still do cleanup. - try{ - // try it as a file first, URL second - stream = (new java.net.URL(uri)).openStream(); - // close the stream so we don't leak resources - stream.close(); - }finally{ - if(stream && stream.close){ - stream.close(); - } - } - } - return local; -} - -// see comments in spidermonkey loadUri -dojo._loadUri = function(uri, cb){ - if(dojo._loadedUrls[uri]){ - return true; // Boolean - } - try{ - var local; - try{ - local = dojo._isLocalUrl(uri); - }catch(e){ - // no debug output; this failure just means the uri was not found. - return false; - } - - dojo._loadedUrls[uri] = true; - //FIXME: Use Rhino 1.6 native readFile/readUrl if available? - if(cb){ - var contents = (local ? readText : readUri)(uri, "UTF-8"); - - // patch up the input to eval until https://bugzilla.mozilla.org/show_bug.cgi?id=471005 is fixed. - if(!eval("'\u200f'").length){ - contents = String(contents).replace(/[\u200E\u200F\u202A-\u202E]/g, function(match){ - return "\\u" + match.charCodeAt(0).toString(16); - }) - } - contents = /^define\(/.test(contents) ? contents : '('+contents+')'; - cb(eval(contents)); - }else{ - load(uri); - } - dojo._loadedUrls.push(uri); - return true; - }catch(e){ - dojo._loadedUrls[uri] = false; - console.debug("rhino load('" + uri + "') failed. Exception: " + e); - return false; - } -} - -dojo.exit = function(exitcode){ - quit(exitcode); -} - -// reading a file from disk in Java is a humiliating experience by any measure. -// Lets avoid that and just get the freaking text -function readText(path, encoding){ - encoding = encoding || "utf-8"; - // NOTE: we intentionally avoid handling exceptions, since the caller will - // want to know - var jf = new java.io.File(path); - var is = new java.io.FileInputStream(jf); - return dj_readInputStream(is, encoding); -} - -function readUri(uri, encoding){ - var conn = (new java.net.URL(uri)).openConnection(); - encoding = encoding || conn.getContentEncoding() || "utf-8"; - var is = conn.getInputStream(); - return dj_readInputStream(is, encoding); -} - -function dj_readInputStream(is, encoding){ - var input = new java.io.BufferedReader(new java.io.InputStreamReader(is, encoding)); - try { - var sb = new java.lang.StringBuffer(); - var line = ""; - while((line = input.readLine()) !== null){ - sb.append(line); - sb.append(java.lang.System.getProperty("line.separator")); - } - return sb.toString(); - } finally { - input.close(); - } -} - -dojo._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ - // summary: Read the contents of the specified uri and return those contents. - // uri: - // A relative or absolute uri. - // fail_ok: - // Default false. If fail_ok and loading fails, return null - // instead of throwing. - // returns: The response text. null is returned when there is a - // failure and failure is okay (an exception otherwise) - try{ - var local = dojo._isLocalUrl(uri); - var text = (local ? readText : readUri)(uri, "UTF-8"); - if(text !== null){ - //Force JavaScript string. - text += ""; - } - return text; - }catch(e){ - if(fail_ok){ - return null; - }else{ - throw e; - } - } -} - -// summary: -// return the document object associated with the dojo.global -dojo.doc = typeof document != "undefined" ? document : null; - -dojo.body = function(){ - return document.body; -} - -// Supply setTimeout/clearTimeout implementations if they aren't already there -// Note: this assumes that we define both if one is not provided... there might -// be a better way to do this if there is a use case where one is defined but -// not the other -if(typeof setTimeout == "undefined" || typeof clearTimeout == "undefined"){ - dojo._timeouts = []; - clearTimeout = function(idx){ - if(!dojo._timeouts[idx]){ return; } - dojo._timeouts[idx].stop(); - } - - setTimeout = function(func, delay){ - // summary: provides timed callbacks using Java threads - - var def={ - sleepTime:delay, - hasSlept:false, - - run:function(){ - if(!this.hasSlept){ - this.hasSlept=true; - java.lang.Thread.currentThread().sleep(this.sleepTime); - } - try{ - func(); - }catch(e){ - console.debug("Error running setTimeout thread:" + e); - } - } - }; - - var runnable = new java.lang.Runnable(def); - var thread = new java.lang.Thread(runnable); - thread.start(); - return dojo._timeouts.push(thread)-1; - } -} - -//Register any module paths set up in djConfig. Need to do this -//in the hostenvs since hostenv_browser can read djConfig from a -//script tag's attribute. -if(dojo.config["modulePaths"]){ - for(var param in dojo.config["modulePaths"]){ - dojo.registerModulePath(param, dojo.config["modulePaths"][param]); - } -} diff --git a/lib/dojo/_base/_loader/hostenv_spidermonkey.js b/lib/dojo/_base/_loader/hostenv_spidermonkey.js deleted file mode 100644 index a3d2dfc6f..000000000 --- a/lib/dojo/_base/_loader/hostenv_spidermonkey.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -/* - * SpiderMonkey host environment - */ - -if(dojo.config["baseUrl"]){ - dojo.baseUrl = dojo.config["baseUrl"]; -}else{ - dojo.baseUrl = "./"; -} - -dojo._name = 'spidermonkey'; - -/*===== -dojo.isSpidermonkey = { - // summary: Detect spidermonkey -}; -=====*/ - -dojo.isSpidermonkey = true; -dojo.exit = function(exitcode){ - quit(exitcode); -} - -if(typeof print == "function"){ - console.debug = print; -} - -if(typeof line2pc == 'undefined'){ - throw new Error("attempt to use SpiderMonkey host environment when no 'line2pc' global"); -} - -dojo._spidermonkeyCurrentFile = function(depth){ - // - // This is a hack that determines the current script file by parsing a - // generated stack trace (relying on the non-standard "stack" member variable - // of the SpiderMonkey Error object). - // - // If param depth is passed in, it'll return the script file which is that far down - // the stack, but that does require that you know how deep your stack is when you are - // calling. - // - var s = ''; - try{ - throw Error("whatever"); - }catch(e){ - s = e.stack; - } - // lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101 - var matches = s.match(/[^@]*\.js/gi); - if(!matches){ - throw Error("could not parse stack string: '" + s + "'"); - } - var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1]; - if(!fname){ - throw Error("could not find file name in stack string '" + s + "'"); - } - //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'"); - return fname; -} - -// print(dojo._spidermonkeyCurrentFile(0)); - -dojo._loadUri = function(uri){ - // spidermonkey load() evaluates the contents into the global scope (which - // is what we want). - // TODO: sigh, load() does not return a useful value. - // Perhaps it is returning the value of the last thing evaluated? - var ok = load(uri); - // console.log("spidermonkey load(", uri, ") returned ", ok); - return 1; -} - -//Register any module paths set up in djConfig. Need to do this -//in the hostenvs since hostenv_browser can read djConfig from a -//script tag's attribute. -if(dojo.config["modulePaths"]){ - for(var param in dojo.config["modulePaths"]){ - dojo.registerModulePath(param, dojo.config["modulePaths"][param]); - } -} diff --git a/lib/dojo/_base/_loader/loader.js b/lib/dojo/_base/_loader/loader.js deleted file mode 100644 index 73df544fa..000000000 --- a/lib/dojo/_base/_loader/loader.js +++ /dev/null @@ -1,816 +0,0 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -if(!dojo._hasResource["dojo.foo"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo.foo"] = true; -/* - * loader.js - A bootstrap module. Runs before the hostenv_*.js file. Contains - * all of the package loading methods. - */ -(function(){ - var d = dojo, currentModule; - - d.mixin(d, { - _loadedModules: {}, - _inFlightCount: 0, - _hasResource: {}, - - _modulePrefixes: { - dojo: { name: "dojo", value: "." }, - // dojox: { name: "dojox", value: "../dojox" }, - // dijit: { name: "dijit", value: "../dijit" }, - doh: { name: "doh", value: "../util/doh" }, - tests: { name: "tests", value: "tests" } - }, - - _moduleHasPrefix: function(/*String*/module){ - // summary: checks to see if module has been established - var mp = d._modulePrefixes; - return !!(mp[module] && mp[module].value); // Boolean - }, - - _getModulePrefix: function(/*String*/module){ - // summary: gets the prefix associated with module - var mp = d._modulePrefixes; - if(d._moduleHasPrefix(module)){ - return mp[module].value; // String - } - return module; // String - }, - - _loadedUrls: [], - - //WARNING: - // This variable is referenced by packages outside of bootstrap: - // FloatingPane.js and undo/browser.js - _postLoad: false, - - //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad. - _loaders: [], - _unloaders: [], - _loadNotifying: false - }); - - - dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){ - // summary: - // Load a Javascript module given a relative path - // - // description: - // Loads and interprets the script located at relpath, which is - // relative to the script root directory. If the script is found but - // its interpretation causes a runtime exception, that exception is - // not caught by us, so the caller will see it. We return a true - // value if and only if the script is found. - // - // relpath: - // A relative path to a script (no leading '/', and typically ending - // in '.js'). - // module: - // A module whose existance to check for after loading a path. Can be - // used to determine success or failure of the load. - // cb: - // a callback function to pass the result of evaluating the script - - var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath; - try{ - currentModule = module; - return !module ? d._loadUri(uri, cb) : d._loadUriAndCheck(uri, module, cb); // Boolean - }catch(e){ - console.error(e); - return false; // Boolean - }finally{ - currentModule = null; - } - } - - dojo._loadUri = function(/*String*/uri, /*Function?*/cb){ - // summary: - // Loads JavaScript from a URI - // description: - // Reads the contents of the URI, and evaluates the contents. This is - // used to load modules as well as resource bundles. Returns true if - // it succeeded. Returns false if the URI reading failed. Throws if - // the evaluation throws. - // uri: a uri which points at the script to be loaded - // cb: - // a callback function to process the result of evaluating the script - // as an expression, typically used by the resource bundle loader to - // load JSON-style resources - - if(d._loadedUrls[uri]){ - return true; // Boolean - } - d._inFlightCount++; // block addOnLoad calls that arrive while we're busy downloading - var contents = d._getText(uri, true); - if(contents){ // not 404, et al - d._loadedUrls[uri] = true; - d._loadedUrls.push(uri); - if(cb){ - //conditional to support script-inject i18n bundle format - contents = /^define\(/.test(contents) ? contents : '('+contents+')'; - }else{ - //Only do the scoping if no callback. If a callback is specified, - //it is most likely the i18n bundle stuff. - contents = d._scopePrefix + contents + d._scopeSuffix; - } - if(!d.isIE){ contents += "\r\n//@ sourceURL=" + uri; } // debugging assist for Firebug - var value = d["eval"](contents); - if(cb){ cb(value); } - } - // Check to see if we need to call _callLoaded() due to an addOnLoad() that arrived while we were busy downloading - if(--d._inFlightCount == 0 && d._postLoad && d._loaders.length){ - // We shouldn't be allowed to get here but Firefox allows an event - // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. - // If the current script block contains multiple require() statements, then after each - // require() returns, inFlightCount == 0, but we want to hold the _callLoaded() until - // all require()s are done since the out-of-sequence addOnLoad() presumably needs them all. - // setTimeout allows the next require() to start (if needed), and then we check this again. - setTimeout(function(){ - // If inFlightCount > 0, then multiple require()s are running sequentially and - // the next require() started after setTimeout() was executed but before we got here. - if(d._inFlightCount == 0){ - d._callLoaded(); - } - }, 0); - } - return !!contents; // Boolean: contents? true : false - } - - // FIXME: probably need to add logging to this method - dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){ - // summary: calls loadUri then findModule and returns true if both succeed - var ok = false; - try{ - ok = d._loadUri(uri, cb); - }catch(e){ - console.error("failed loading " + uri + " with error: " + e); - } - return !!(ok && d._loadedModules[moduleName]); // Boolean - } - - dojo.loaded = function(){ - // summary: - // signal fired when initial environment and package loading is - // complete. You should use dojo.addOnLoad() instead of doing a - // direct dojo.connect() to this method in order to handle - // initialization tasks that require the environment to be - // initialized. In a browser host, declarative widgets will - // be constructed when this function finishes runing. - d._loadNotifying = true; - d._postLoad = true; - var mll = d._loaders; - - //Clear listeners so new ones can be added - //For other xdomain package loads after the initial load. - d._loaders = []; - - for(var x = 0; x < mll.length; x++){ - mll[x](); - } - - d._loadNotifying = false; - - //Make sure nothing else got added to the onload queue - //after this first run. If something did, and we are not waiting for any - //more inflight resources, run again. - if(d._postLoad && d._inFlightCount == 0 && mll.length){ - d._callLoaded(); - } - } - - dojo.unloaded = function(){ - // summary: - // signal fired by impending environment destruction. You should use - // dojo.addOnUnload() instead of doing a direct dojo.connect() to this - // method to perform page/application cleanup methods. See - // dojo.addOnUnload for more info. - var mll = d._unloaders; - while(mll.length){ - (mll.pop())(); - } - } - - d._onto = function(arr, obj, fn){ - if(!fn){ - arr.push(obj); - }else if(fn){ - var func = (typeof fn == "string") ? obj[fn] : fn; - arr.push(function(){ func.call(obj); }); - } - } - - dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){ - // summary: - // Registers a function to be triggered after the DOM and dojo.require() calls - // have finished loading. - // - // description: - // Registers a function to be triggered after the DOM has finished - // loading and `dojo.require` modules have loaded. Widgets declared in markup - // have been instantiated if `djConfig.parseOnLoad` is true when this fires. - // - // Images and CSS files may or may not have finished downloading when - // the specified function is called. (Note that widgets' CSS and HTML - // code is guaranteed to be downloaded before said widgets are - // instantiated, though including css resouces BEFORE any script elements - // is highly recommended). - // - // example: - // Register an anonymous function to run when everything is ready - // | dojo.addOnLoad(function(){ doStuff(); }); - // - // example: - // Register a function to run when everything is ready by pointer: - // | var init = function(){ doStuff(); } - // | dojo.addOnLoad(init); - // - // example: - // Register a function to run scoped to `object`, either by name or anonymously: - // | dojo.addOnLoad(object, "functionName"); - // | dojo.addOnLoad(object, function(){ doStuff(); }); - - d._onto(d._loaders, obj, functionName); - - //Added for xdomain loading. dojo.addOnLoad is used to - //indicate callbacks after doing some dojo.require() statements. - //In the xdomain case, if all the requires are loaded (after initial - //page load), then immediately call any listeners. - if(d._postLoad && d._inFlightCount == 0 && !d._loadNotifying){ - d._callLoaded(); - } - } - - //Support calling dojo.addOnLoad via djConfig.addOnLoad. Support all the - //call permutations of dojo.addOnLoad. Mainly useful when dojo is added - //to the page after the page has loaded. - var dca = d.config.addOnLoad; - if(dca){ - d.addOnLoad[(dca instanceof Array ? "apply" : "call")](d, dca); - } - - dojo._modulesLoaded = function(){ - if(d._postLoad){ return; } - if(d._inFlightCount > 0){ - console.warn("files still in flight!"); - return; - } - d._callLoaded(); - } - - dojo._callLoaded = function(){ - - // The "object" check is for IE, and the other opera check fixes an - // issue in Opera where it could not find the body element in some - // widget test cases. For 0.9, maybe route all browsers through the - // setTimeout (need protection still for non-browser environments - // though). This might also help the issue with FF 2.0 and freezing - // issues where we try to do sync xhr while background css images are - // being loaded (trac #2572)? Consider for 0.9. - if(typeof setTimeout == "object" || (d.config.useXDomain && d.isOpera)){ - setTimeout( - d.isAIR ? function(){ d.loaded(); } : d._scopeName + ".loaded();", - 0); - }else{ - d.loaded(); - } - } - - dojo._getModuleSymbols = function(/*String*/modulename){ - // summary: - // Converts a module name in dotted JS notation to an array - // representing the path in the source tree - var syms = modulename.split("."); - for(var i = syms.length; i>0; i--){ - var parentModule = syms.slice(0, i).join("."); - if(i == 1 && !d._moduleHasPrefix(parentModule)){ - // Support default module directory (sibling of dojo) for top-level modules - syms[0] = "../" + syms[0]; - }else{ - var parentModulePath = d._getModulePrefix(parentModule); - if(parentModulePath != parentModule){ - syms.splice(0, i, parentModulePath); - break; - } - } - } - return syms; // Array - } - - dojo._global_omit_module_check = false; - - dojo.loadInit = function(/*Function*/init){ - // summary: - // Executes a function that needs to be executed for the loader's dojo.requireIf - // resolutions to work. This is needed mostly for the xdomain loader case where - // a function needs to be executed to set up the possible values for a dojo.requireIf - // call. - // init: - // a function reference. Executed immediately. - // description: This function is mainly a marker for the xdomain loader to know parts of - // code that needs be executed outside the function wrappper that is placed around modules. - // The init function could be executed more than once, and it should make no assumptions - // on what is loaded, or what modules are available. Only the functionality in Dojo Base - // is allowed to be used. Avoid using this method. For a valid use case, - // see the source for dojox.gfx. - init(); - } - - dojo._loadModule = dojo.require = function(/*String*/moduleName, /*Boolean?*/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 - omitModuleCheck = d._global_omit_module_check || omitModuleCheck; - - //Check if it is already loaded. - var module = d._loadedModules[moduleName]; - if(module){ - return module; - } - - // convert periods to slashes - var relpath = d._getModuleSymbols(moduleName).join("/") + '.js'; - var modArg = !omitModuleCheck ? moduleName : null; - var ok = d._loadPath(relpath, modArg); - if(!ok && !omitModuleCheck){ - throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'"); - } - - // check that the symbol was defined - // Don't bother if we're doing xdomain (asynchronous) loading. - if(!omitModuleCheck && !d._isXDomain){ - // pass in false so we can give better error - module = d._loadedModules[moduleName]; - if(!module){ - throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); - } - } - - return module; - } - - dojo.provide = function(/*String*/ resourceName){ - // summary: - // Register a resource with the package system. Works in conjunction with `dojo.require` - // - // description: - // Each javascript source file is called a resource. When a - // resource is loaded by the browser, `dojo.provide()` registers - // that it has been loaded. - // - // Each javascript source file must have at least one - // `dojo.provide()` call at the top of the file, corresponding to - // the file name. For example, `js/dojo/foo.js` must have - // `dojo.provide("dojo.foo");` before any calls to - // `dojo.require()` are made. - // - // For backwards compatibility reasons, in addition to registering - // the resource, `dojo.provide()` also ensures that the javascript - // object for the module exists. For example, - // `dojo.provide("dojox.data.FlickrStore")`, in addition to - // registering that `FlickrStore.js` is a resource for the - // `dojox.data` module, will ensure that the `dojox.data` - // javascript object exists, so that calls like - // `dojo.data.foo = function(){ ... }` don't fail. - // - // In the case of a build where multiple javascript source files - // are combined into one bigger file (similar to a .lib or .jar - // file), that file may contain multiple dojo.provide() calls, to - // note that it includes multiple resources. - // - // resourceName: String - // A dot-sperated string identifying a resource. - // - // example: - // Safely create a `my` object, and make dojo.require("my.CustomModule") work - // | dojo.provide("my.CustomModule"); - - //Make sure we have a string. - resourceName = resourceName + ""; - return (d._loadedModules[resourceName] = d.getObject(resourceName, true)); // Object - } - - //Start of old bootstrap2: - - 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 common = modMap.common || []; - var result = common.concat(modMap[d._name] || modMap["default"] || []); - - for(var x=0; x<result.length; x++){ - var curr = result[x]; - if(curr.constructor == Array){ - d._loadModule.apply(d, curr); - }else{ - d._loadModule(curr); - } - } - } - - dojo.requireIf = function(/*Boolean*/ condition, /*String*/ resourceName){ - // summary: - // If the condition is true then call `dojo.require()` for the specified - // resource - // - // example: - // | dojo.requireIf(dojo.isBrowser, "my.special.Module"); - - if(condition === true){ - // FIXME: why do we support chained require()'s here? does the build system? - var args = []; - for(var i = 1; i < arguments.length; i++){ - args.push(arguments[i]); - } - d.require.apply(d, args); - } - } - - dojo.requireAfterIf = d.requireIf; - - dojo.registerModulePath = function(/*String*/module, /*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> - d._modulePrefixes[module] = { name: module, value: prefix }; - }; - - dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ - // summary: - // Declares translated resources and loads them if necessary, in the - // same style as dojo.require. Contents of the resource bundle are - // typically strings, but may be any name/value pair, represented in - // JSON format. See also `dojo.i18n.getLocalization`. - // - // description: - // Load translated resource bundles provided underneath the "nls" - // directory within a package. Translated resources may be located in - // different packages throughout the source tree. - // - // Each directory is named for a locale as specified by RFC 3066, - // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. - // Note that the two bundles in the example do not define all the - // same variants. For a given locale, bundles will be loaded for - // that locale and all more general locales above it, including a - // fallback at the root directory. For example, a declaration for - // the "de-at" locale will first load `nls/de-at/bundleone.js`, - // then `nls/de/bundleone.js` and finally `nls/bundleone.js`. The - // data will be flattened into a single Object so that lookups - // will follow this cascading pattern. An optional build step can - // preload the bundles to avoid data redundancy and the multiple - // network hits normally required to load these resources. - // - // moduleName: - // name of the package containing the "nls" directory in which the - // bundle is found - // - // bundleName: - // bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a - // a bundle name is not supported, since "nls" is the name of the folder - // that holds bundles. Using "nls" as the bundle name will cause problems - // with the custom build. - // - // locale: - // the locale to load (optional) By default, the browser's user - // locale as defined by dojo.locale - // - // availableFlatLocales: - // A comma-separated list of the available, flattened locales for this - // bundle. This argument should only be set by the build process. - // - // example: - // A particular widget may define one or more resource bundles, - // structured in a program as follows, where moduleName is - // mycode.mywidget and bundleNames available include bundleone and - // bundletwo: - // | ... - // | mycode/ - // | mywidget/ - // | nls/ - // | bundleone.js (the fallback translation, English in this example) - // | bundletwo.js (also a fallback translation) - // | de/ - // | bundleone.js - // | bundletwo.js - // | de-at/ - // | bundleone.js - // | en/ - // | (empty; use the fallback translation) - // | en-us/ - // | bundleone.js - // | en-gb/ - // | bundleone.js - // | es/ - // | bundleone.js - // | bundletwo.js - // | ...etc - // | ... - // - - d.require("dojo.i18n"); - d.i18n._requireLocalization.apply(d.hostenv, arguments); - }; - - - var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"), - ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); - - dojo._Url = function(/*dojo._Url|String...*/){ - // summary: - // Constructor to create an object representing a URL. - // It is marked as private, since we might consider removing - // or simplifying it. - // description: - // Each argument is evaluated in order relative to the next until - // a canonical uri is produced. To get an absolute Uri relative to - // the current document use: - // new dojo._Url(document.baseURI, url) - - var n = null, - _a = arguments, - uri = [_a[0]]; - // resolve uri components relative to each other - for(var i = 1; i<_a.length; i++){ - if(!_a[i]){ continue; } - - // Safari doesn't support this.constructor so we have to be explicit - // FIXME: Tracked (and fixed) in Webkit bug 3537. - // http://bugs.webkit.org/show_bug.cgi?id=3537 - var relobj = new d._Url(_a[i]+""), - uriobj = new d._Url(uri[0]+""); - - if( - relobj.path == "" && - !relobj.scheme && - !relobj.authority && - !relobj.query - ){ - if(relobj.fragment != n){ - uriobj.fragment = relobj.fragment; - } - relobj = uriobj; - }else if(!relobj.scheme){ - relobj.scheme = uriobj.scheme; - - if(!relobj.authority){ - relobj.authority = uriobj.authority; - - if(relobj.path.charAt(0) != "/"){ - var path = uriobj.path.substring(0, - uriobj.path.lastIndexOf("/") + 1) + relobj.path; - - var segs = path.split("/"); - for(var j = 0; j < segs.length; j++){ - if(segs[j] == "."){ - // flatten "./" references - if(j == segs.length - 1){ - segs[j] = ""; - }else{ - segs.splice(j, 1); - j--; - } - }else if(j > 0 && !(j == 1 && segs[0] == "") && - segs[j] == ".." && segs[j-1] != ".."){ - // flatten "../" references - if(j == (segs.length - 1)){ - segs.splice(j, 1); - segs[j - 1] = ""; - }else{ - segs.splice(j - 1, 2); - j -= 2; - } - } - } - relobj.path = segs.join("/"); - } - } - } - - uri = []; - if(relobj.scheme){ - uri.push(relobj.scheme, ":"); - } - if(relobj.authority){ - uri.push("//", relobj.authority); - } - uri.push(relobj.path); - if(relobj.query){ - uri.push("?", relobj.query); - } - if(relobj.fragment){ - uri.push("#", relobj.fragment); - } - } - - this.uri = uri.join(""); - - // break the uri into its main components - var r = this.uri.match(ore); - - this.scheme = r[2] || (r[1] ? "" : n); - this.authority = r[4] || (r[3] ? "" : n); - this.path = r[5]; // can never be undefined - this.query = r[7] || (r[6] ? "" : n); - this.fragment = r[9] || (r[8] ? "" : n); - - if(this.authority != n){ - // server based naming authority - r = this.authority.match(ire); - - this.user = r[3] || n; - this.password = r[4] || n; - this.host = r[6] || r[7]; // ipv6 || ipv4 - this.port = r[9] || n; - } - } - - dojo._Url.prototype.toString = function(){ return this.uri; }; - - dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ - // summary: - // Returns a `dojo._Url` object relative to a module. - // example: - // | var pngPath = dojo.moduleUrl("acme","images/small.png"); - // | console.dir(pngPath); // list the object properties - // | // create an image and set it's source to pngPath's value: - // | var img = document.createElement("img"); - // | // NOTE: we assign the string representation of the url object - // | img.src = pngPath.toString(); - // | // add our image to the document - // | dojo.body().appendChild(img); - // example: - // you may de-reference as far as you like down the package - // hierarchy. This is sometimes handy to avoid lenghty relative - // urls or for building portable sub-packages. In this example, - // the `acme.widget` and `acme.util` directories may be located - // under different roots (see `dojo.registerModulePath`) but the - // the modules which reference them can be unaware of their - // relative locations on the filesystem: - // | // somewhere in a configuration block - // | dojo.registerModulePath("acme.widget", "../../acme/widget"); - // | dojo.registerModulePath("acme.util", "../../util"); - // | - // | // ... - // | - // | // code in a module using acme resources - // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); - // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); - - var loc = d._getModuleSymbols(module).join('/'); - if(!loc){ return null; } - if(loc.lastIndexOf("/") != loc.length-1){ - loc += "/"; - } - - //If the path is an absolute path (starts with a / or is on another - //domain/xdomain) then don't add the baseUrl. - var colonIndex = loc.indexOf(":"); - if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){ - loc = d.baseUrl + loc; - } - - return new d._Url(loc, url); // dojo._Url - }; - - - -})(); - -} diff --git a/lib/dojo/_base/_loader/loader_debug.js b/lib/dojo/_base/_loader/loader_debug.js deleted file mode 100644 index f2043e4de..000000000 --- a/lib/dojo/_base/_loader/loader_debug.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -if(!dojo._hasResource["dojo._base._loader.loader_debug"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo._base._loader.loader_debug"] = true; -dojo.provide("dojo._base._loader.loader_debug"); - -//Override dojo.provide, so we can trigger the next -//script tag for the next local module. We can only add one -//at a time because there are browsers that execute script tags -//in the order that the code is received, and not in the DOM order. -dojo.nonDebugProvide = dojo.provide; - -dojo.provide = function(resourceName){ - var dbgQueue = dojo["_xdDebugQueue"]; - if(dbgQueue && dbgQueue.length > 0 && resourceName == dbgQueue["currentResourceName"]){ - //Set a timeout so the module can be executed into existence. Normally the - //dojo.provide call in a module is the first line. Don't want to risk attaching - //another script tag until the current one finishes executing. - if(dojo.isAIR){ - window.setTimeout(function(){dojo._xdDebugFileLoaded(resourceName);}, 1); - }else{ - window.setTimeout(dojo._scopeName + "._xdDebugFileLoaded('" + resourceName + "')", 1); - } - } - - return dojo.nonDebugProvide.apply(dojo, arguments); -} - -dojo._xdDebugFileLoaded = function(resourceName){ - - if(!dojo._xdDebugScopeChecked){ - //If using a scoped dojo, we need to expose dojo as a real global - //for the debugAtAllCosts stuff to work. - if(dojo._scopeName != "dojo"){ - window.dojo = window[dojo.config.scopeMap[0][1]]; - window.dijit = window[dojo.config.scopeMap[1][1]]; - window.dojox = window[dojo.config.scopeMap[2][1]]; - } - - dojo._xdDebugScopeChecked = true; - } - - var dbgQueue = dojo._xdDebugQueue; - - if(resourceName && resourceName == dbgQueue.currentResourceName){ - dbgQueue.shift(); - } - - if(dbgQueue.length == 0){ - //Check for more modules that need debug loading. - //dojo._xdWatchInFlight will add more things to the debug - //queue if they just recently loaded but it was not detected - //between the dojo._xdWatchInFlight intervals. - dojo._xdWatchInFlight(); - } - - if(dbgQueue.length == 0){ - dbgQueue.currentResourceName = null; - - //Make sure nothing else is in flight. - //If something is still in flight, then it still - //needs to be added to debug queue after it loads. - for(var param in dojo._xdInFlight){ - if(dojo._xdInFlight[param] === true){ - return; - } - } - - dojo._xdNotifyLoaded(); - }else{ - if(resourceName == dbgQueue.currentResourceName){ - dbgQueue.currentResourceName = dbgQueue[0].resourceName; - var element = document.createElement("script"); - element.type = "text/javascript"; - element.src = dbgQueue[0].resourcePath; - document.getElementsByTagName("head")[0].appendChild(element); - } - } -} - -} diff --git a/lib/dojo/_base/_loader/loader_xd.js b/lib/dojo/_base/_loader/loader_xd.js deleted file mode 100644 index e59f814c0..000000000 --- a/lib/dojo/_base/_loader/loader_xd.js +++ /dev/null @@ -1,727 +0,0 @@ -/* - Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -if(!dojo._hasResource["dojo._base._loader.loader_xd"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo._base._loader.loader_xd"] = true; -//Cross-domain resource loader. -dojo.provide("dojo._base._loader.loader_xd"); - -dojo._xdReset = function(){ - //summary: Internal xd loader function. Resets the xd state. - - //This flag indicates where or not we have crossed into xdomain territory. Once any resource says - //it is cross domain, then the rest of the resources have to be treated as xdomain because we need - //to evaluate resources in order. If there is a xdomain resource followed by a xhr resource, we can't load - //the xhr resource until the one before it finishes loading. The text of the xhr resource will be converted - //to match the format for a xd resource and put in the xd load queue. - dojo._isXDomain = dojo.config.useXDomain || false; - - dojo._xdClearInterval(); - dojo._xdInFlight = {}; - dojo._xdOrderedReqs = []; - dojo._xdDepMap = {}; - dojo._xdContents = []; - dojo._xdDefList = []; -} - -dojo._xdClearInterval = function(){ - //summary: Internal xd loader function. - //Clears the interval timer used to check on the - //status of in-flight xd module resource requests. - if(dojo._xdTimer){ - clearInterval(dojo._xdTimer); - dojo._xdTimer = 0; - } -} - - -//Call reset immediately to set the state. -dojo._xdReset(); - -dojo._xdCreateResource = function(/*String*/contents, /*String*/resourceName, /*String*/resourcePath){ - //summary: Internal xd loader function. Creates an xd module source given an - //non-xd module contents. - - //Remove comments. Not perfect, but good enough for dependency resolution. - var depContents = contents.replace(/(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg , ""); - - //Find dependencies. - var deps = []; - var depRegExp = /dojo.(require|requireIf|provide|requireAfterIf|platformRequire|requireLocalization)\s*\(([\w\W]*?)\)/mg; - var match; - while((match = depRegExp.exec(depContents)) != null){ - if(match[1] == "requireLocalization"){ - //Need to load the local bundles asap, since they are not - //part of the list of modules watched for loading. - eval(match[0]); - }else{ - deps.push('"' + match[1] + '", ' + match[2]); - } - } - - //Create resource object and the call to _xdResourceLoaded. - var output = []; - output.push(dojo._scopeName + "._xdResourceLoaded(function(" + dojo._scopePrefixArgs + "){\n"); - - //See if there are any dojo.loadInit calls - var loadInitCalls = dojo._xdExtractLoadInits(contents); - if(loadInitCalls){ - //Adjust fileContents since extractLoadInits removed something. - contents = loadInitCalls[0]; - - //Add any loadInit calls to the top of the xd file. - for(var i = 1; i < loadInitCalls.length; i++){ - output.push(loadInitCalls[i] + ";\n"); - } - } - - output.push("return {"); - - //Add dependencies - if(deps.length > 0){ - output.push("depends: ["); - for(i = 0; i < deps.length; i++){ - if(i > 0){ - output.push(",\n"); - } - output.push("[" + deps[i] + "]"); - } - output.push("],"); - } - - //Add the contents of the file inside a function. - //Pass in scope arguments so we can support multiple versions of the - //same module on a page. - output.push("\ndefineResource: function(" + dojo._scopePrefixArgs + "){"); - - //Don't put in the contents in the debugAtAllCosts case - //since the contents may have syntax errors. Let those - //get pushed up when the script tags are added to the page - //in the debugAtAllCosts case. - if(!dojo.config["debugAtAllCosts"] || resourceName == "dojo._base._loader.loader_debug"){ - output.push(contents); - } - //Add isLocal property so we know if we have to do something different - //in debugAtAllCosts situations. - output.push("\n}, resourceName: '" + resourceName + "', resourcePath: '" + resourcePath + "'};});"); - - return output.join(""); //String -} - -dojo._xdExtractLoadInits = function(/*String*/fileContents){ - //Extracts - var regexp = /dojo.loadInit\s*\(/g; - regexp.lastIndex = 0; - - var parenRe = /[\(\)]/g; - parenRe.lastIndex = 0; - - var results = []; - var matches; - while((matches = regexp.exec(fileContents))){ - //Find end of the call by finding the matching end paren - parenRe.lastIndex = regexp.lastIndex; - var matchCount = 1; - var parenMatch; - while((parenMatch = parenRe.exec(fileContents))){ - if(parenMatch[0] == ")"){ - matchCount -= 1; - }else{ - matchCount += 1; - } - if(matchCount == 0){ - break; - } - } - - if(matchCount != 0){ - throw "unmatched paren around character " + parenRe.lastIndex + " in: " + fileContents; - } - - //Put the master matching string in the results. - var startIndex = regexp.lastIndex - matches[0].length; - results.push(fileContents.substring(startIndex, parenRe.lastIndex)); - - //Remove the matching section. - var remLength = parenRe.lastIndex - startIndex; - fileContents = fileContents.substring(0, startIndex) + fileContents.substring(parenRe.lastIndex, fileContents.length); - - //Move the master regexp past the last matching paren point. - regexp.lastIndex = parenRe.lastIndex - remLength; - - regexp.lastIndex = parenRe.lastIndex; - } - - if(results.length > 0){ - results.unshift(fileContents); - } - - return (results.length ? results : null); -} - -dojo._xdIsXDomainPath = function(/*string*/relpath) { - //summary: Figure out whether the path is local or x-domain - //If there is a colon before the first / then, we have a URL with a protocol. - - var colonIndex = relpath.indexOf(":"); - var slashIndex = relpath.indexOf("/"); - - if(colonIndex > 0 && colonIndex < slashIndex || relpath.indexOf("//") === 0){ - return true; - }else{ - //Is the base script URI-based URL a cross domain URL? - //If so, then the relpath will be evaluated relative to - //baseUrl, and therefore qualify as xdomain. - //Only treat it as xdomain if the page does not have a - //host (file:// url), if the baseUrl does not match the - //current window's domain, or if the baseUrl starts with //. - //If baseUrl starts with // then it probably means that xdomain - //is wanted since it is such a specific path request. This is not completely robust, - //but something more robust would require normalizing the protocol on baseUrl and on the location - //to see if they differ. However, that requires more code, and // as a start path is unusual. - var url = dojo.baseUrl; - colonIndex = url.indexOf(":"); - slashIndex = url.indexOf("/"); - if(url.indexOf("//") === 0 || (colonIndex > 0 && colonIndex < slashIndex && (!location.host || url.indexOf("http://" + location.host) != 0))){ - return true; - } - } - return false; -} - -dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){ - //summary: Internal xd loader function. Overrides loadPath() from loader.js. - //xd loading requires slightly different behavior from loadPath(). - - var currentIsXDomain = dojo._xdIsXDomainPath(relpath); - dojo._isXDomain |= currentIsXDomain; - - var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : dojo.baseUrl) + relpath; - - try{ - return ((!module || dojo._isXDomain) ? dojo._loadUri(uri, cb, currentIsXDomain, module) : dojo._loadUriAndCheck(uri, module, cb)); //Boolean - }catch(e){ - console.error(e); - return false; //Boolean - } -} - -dojo._xdCharSet = "utf-8"; - -dojo._loadUri = function(/*String*/uri, /*Function?*/cb, /*boolean*/currentIsXDomain, /*String?*/module){ - //summary: Internal xd loader function. Overrides loadUri() from loader.js. - // xd loading requires slightly different behavior from loadPath(). - //description: Wanted to override getText(), but it is used by - // the widget code in too many, synchronous ways right now. - if(dojo._loadedUrls[uri]){ - return 1; //Boolean - } - - //Add the module (resource) to the list of modules. - //Only do this work if we have a modlue name. Otherwise, - //it is a non-xd i18n bundle, which can load immediately and does not - //need to be tracked. Also, don't track dojo.i18n, since it is a prerequisite - //and will be loaded correctly if we load it right away: it has no dependencies. - if(dojo._isXDomain && module && module != "dojo.i18n"){ - dojo._xdOrderedReqs.push(module); - - //Add to waiting resources if it is an xdomain resource. - //Don't add non-xdomain i18n bundles, those get evaled immediately. - if(currentIsXDomain || uri.indexOf("/nls/") == -1){ - dojo._xdInFlight[module] = true; - - //Increment inFlightCount - //This will stop the modulesLoaded from firing all the way. - dojo._inFlightCount++; - } - - //Start timer - if(!dojo._xdTimer){ - if(dojo.isAIR){ - dojo._xdTimer = setInterval(function(){dojo._xdWatchInFlight();}, 100); - }else{ - dojo._xdTimer = setInterval(dojo._scopeName + "._xdWatchInFlight();", 100); - } - } - dojo._xdStartTime = (new Date()).getTime(); - } - - if (currentIsXDomain){ - //Fix name to be a .xd.fileextension name. - var lastIndex = uri.lastIndexOf('.'); - if(lastIndex <= 0){ - lastIndex = uri.length - 1; - } - - var xdUri = uri.substring(0, lastIndex) + ".xd"; - if(lastIndex != uri.length - 1){ - xdUri += uri.substring(lastIndex, uri.length); - } - - if (dojo.isAIR){ - xdUri = xdUri.replace("app:/", "/"); - } - - //Add to script src - var element = document.createElement("script"); - element.type = "text/javascript"; - if(dojo._xdCharSet){ - element.charset = dojo._xdCharSet; - } - element.src = xdUri; - if(!dojo.headElement){ - dojo._headElement = document.getElementsByTagName("head")[0]; - - //Head element may not exist, particularly in html - //html 4 or tag soup cases where the page does not - //have a head tag in it. Use html element, since that will exist. - //Seems to be an issue mostly with Opera 9 and to lesser extent Safari 2 - if(!dojo._headElement){ - dojo._headElement = document.getElementsByTagName("html")[0]; - } - } - dojo._headElement.appendChild(element); - }else{ - var contents = dojo._getText(uri, null, true); - if(contents == null){ return 0; /*boolean*/} - - //If this is not xdomain, or if loading a i18n resource bundle, then send it down - //the normal eval/callback path. - if(dojo._isXDomain - && uri.indexOf("/nls/") == -1 - && module != "dojo.i18n"){ - var res = dojo._xdCreateResource(contents, module, uri); - dojo.eval(res); - }else{ - if(cb){ - contents = '('+contents+')'; - }else{ - //Only do the scoping if no callback. If a callback is specified, - //it is most likely the i18n bundle stuff. - contents = dojo._scopePrefix + contents + dojo._scopeSuffix; - } - var value = dojo["eval"](contents+"\r\n//@ sourceURL="+uri); - if(cb){ - cb(value); - } - } - } - - //These steps are done in the non-xd loader version of this function. - //Maintain these steps to fit in with the existing system. - dojo._loadedUrls[uri] = true; - dojo._loadedUrls.push(uri); - return true; //Boolean -} - -dojo._xdResourceLoaded = function(/*Object*/res){ - //summary: Internal xd loader function. Called by an xd module resource when - //it has been loaded via a script tag. - - //Evaluate the function with scopeArgs for multiversion support. - res = res.apply(dojo.global, dojo._scopeArgs); - - //Work through dependencies. - var deps = res.depends; - var requireList = null; - var requireAfterList = null; - var provideList = []; - if(deps && deps.length > 0){ - var dep = null; - var insertHint = 0; - var attachedResource = false; - for(var i = 0; i < deps.length; i++){ - dep = deps[i]; - - //Look for specific dependency indicators. - if (dep[0] == "provide"){ - provideList.push(dep[1]); - }else{ - if(!requireList){ - requireList = []; - } - if(!requireAfterList){ - requireAfterList = []; - } - - var unpackedDeps = dojo._xdUnpackDependency(dep); - if(unpackedDeps.requires){ - requireList = requireList.concat(unpackedDeps.requires); - } - if(unpackedDeps.requiresAfter){ - requireAfterList = requireAfterList.concat(unpackedDeps.requiresAfter); - } - } - - //Call the dependency indicator to allow for the normal dojo setup. - //Only allow for one dot reference, for the i18n._preloadLocalizations calls - //(and maybe future, one-dot things). - var depType = dep[0]; - var objPath = depType.split("."); - if(objPath.length == 2){ - dojo[objPath[0]][objPath[1]].apply(dojo[objPath[0]], dep.slice(1)); - }else{ - dojo[depType].apply(dojo, dep.slice(1)); - } - } - - - //If loading the debugAtAllCosts module, eval it right away since we need - //its functions to properly load the other modules. - if(provideList.length == 1 && provideList[0] == "dojo._base._loader.loader_debug"){ - res.defineResource(dojo); - }else{ - //Save off the resource contents for definition later. - var contentIndex = dojo._xdContents.push({ - content: res.defineResource, - resourceName: res["resourceName"], - resourcePath: res["resourcePath"], - isDefined: false - }) - 1; - - //Add provide/requires to dependency map. - for(i = 0; i < provideList.length; i++){ - dojo._xdDepMap[provideList[i]] = { requires: requireList, requiresAfter: requireAfterList, contentIndex: contentIndex }; - } - } - - //Now update the inflight status for any provided resources in this loaded resource. - //Do this at the very end (in a *separate* for loop) to avoid shutting down the - //inflight timer check too soon. - for(i = 0; i < provideList.length; i++){ - dojo._xdInFlight[provideList[i]] = false; - } - } -} - -dojo._xdLoadFlattenedBundle = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*Object*/bundleData){ - //summary: Internal xd loader function. Used when loading - //a flattened localized bundle via a script tag. - locale = locale || "root"; - var jsLoc = dojo.i18n.normalizeLocale(locale).replace('-', '_'); - var bundleResource = [moduleName, "nls", bundleName].join("."); - var bundle = dojo["provide"](bundleResource); - bundle[jsLoc] = bundleData; - - //Assign the bundle for the original locale(s) we wanted. - var mapName = [moduleName, jsLoc, bundleName].join("."); - var bundleMap = dojo._xdBundleMap[mapName]; - if(bundleMap){ - for(var param in bundleMap){ - bundle[param] = bundleData; - } - } -}; - - -dojo._xdInitExtraLocales = function(){ - // Simulate the extra locale work that dojo.requireLocalization does. - - var extra = dojo.config.extraLocale; - if(extra){ - if(!extra instanceof Array){ - extra = [extra]; - } - - dojo._xdReqLoc = dojo.xdRequireLocalization; - dojo.xdRequireLocalization = function(m, b, locale, fLocales){ - dojo._xdReqLoc(m,b,locale, fLocales); - if(locale){return;} - for(var i=0; i<extra.length; i++){ - dojo._xdReqLoc(m,b,extra[i], fLocales); - } - }; - } -} - -dojo._xdBundleMap = {}; - -dojo.xdRequireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String*/availableFlatLocales){ - //summary: Internal xd loader function. The xd version of dojo.requireLocalization. - - - //Account for allowing multiple extra locales. Do this here inside the function - //since dojo._xdInitExtraLocales() depends on djConfig being set up, but that only - //happens after hostenv_browser runs. loader_xd has to come before hostenv_browser - //though since hostenv_browser can do a dojo.require for the debug module. - if(dojo._xdInitExtraLocales){ - dojo._xdInitExtraLocales(); - dojo._xdInitExtraLocales = null; - dojo.xdRequireLocalization.apply(dojo, arguments); - return; - } - - var locales = availableFlatLocales.split(","); - - //Find the best-match locale to load. - //Assumes dojo.i18n has already been loaded. This is true for xdomain builds, - //since it is included in dojo.xd.js. - var jsLoc = dojo.i18n.normalizeLocale(locale); - - var bestLocale = ""; - for(var i = 0; i < locales.length; i++){ - //Locale must match from start of string. - if(jsLoc.indexOf(locales[i]) == 0){ - if(locales[i].length > bestLocale.length){ - bestLocale = locales[i]; - } - } - } - - var fixedBestLocale = bestLocale.replace('-', '_'); - //See if the bundle we are going to use is already loaded. - var bundleResource = dojo.getObject([moduleName, "nls", bundleName].join(".")); - if(!bundleResource || !bundleResource[fixedBestLocale]){ - //Need to remember what locale we wanted and which one we actually use. - //Then when we load the one we are actually using, use that bundle for the one - //we originally wanted. - var mapName = [moduleName, (fixedBestLocale||"root"), bundleName].join("."); - var bundleMap = dojo._xdBundleMap[mapName]; - if(!bundleMap){ - bundleMap = dojo._xdBundleMap[mapName] = {}; - } - bundleMap[jsLoc.replace('-', '_')] = true; - - //Do just a normal dojo.require so the resource tracking stuff works as usual. - dojo.require(moduleName + ".nls" + (bestLocale ? "." + bestLocale : "") + "." + bundleName); - } -} - -// Replace dojo.requireLocalization with a wrapper -dojo._xdRealRequireLocalization = dojo.requireLocalization; -dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String*/availableFlatLocales){ - // summary: loads a bundle intelligently based on whether the module is - // local or xd. Overrides the local-case implementation. - - var modulePath = dojo.moduleUrl(moduleName).toString(); - if (dojo._xdIsXDomainPath(modulePath)) { - // call cross-domain loader - return dojo.xdRequireLocalization.apply(dojo, arguments); - } else { - // call local-loader - return dojo._xdRealRequireLocalization.apply(dojo, arguments); - } -} - -//This is a bit brittle: it has to know about the dojo methods that deal with dependencies -//It would be ideal to intercept the actual methods and do something fancy at that point, -//but I have concern about knowing which provide to match to the dependency in that case, -//since scripts can load whenever they want, and trigger new calls to dojo._xdResourceLoaded(). -dojo._xdUnpackDependency = function(/*Array*/dep){ - //summary: Internal xd loader function. Determines what to do with a dependency - //that was listed in an xd version of a module contents. - - //Extract the dependency(ies). - var newDeps = null; - var newAfterDeps = null; - switch(dep[0]){ - case "requireIf": - case "requireAfterIf": - //First arg (dep[1]) is the test. Depedency is dep[2]. - if(dep[1] === true){ - newDeps = [{name: dep[2], content: null}]; - } - break; - case "platformRequire": - var modMap = dep[1]; - var common = modMap["common"]||[]; - newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]); - //Flatten the array of arrays into a one-level deep array. - //Each result could be an array of 3 elements (the 3 arguments to dojo.require). - //We only need the first one. - if(newDeps){ - for(var i = 0; i < newDeps.length; i++){ - if(newDeps[i] instanceof Array){ - newDeps[i] = {name: newDeps[i][0], content: null}; - }else{ - newDeps[i] = {name: newDeps[i], content: null}; - } - } - } - break; - case "require": - //Just worry about dep[1] - newDeps = [{name: dep[1], content: null}]; - break; - case "i18n._preloadLocalizations": - //We can eval these immediately, since they load i18n bundles. - //Since i18n bundles have no dependencies, whenever they are loaded - //in a script tag, they are evaluated immediately, so we do not have to - //treat them has an explicit dependency for the dependency mapping. - //We can call it immediately since dojo.i18n is part of dojo.xd.js. - dojo.i18n._preloadLocalizations.apply(dojo.i18n._preloadLocalizations, dep.slice(1)); - break; - } - - //The requireIf and requireAfterIf needs to be evaluated after the current resource is evaluated. - if(dep[0] == "requireAfterIf" || dep[0] == "requireIf"){ - newAfterDeps = newDeps; - newDeps = null; - } - return {requires: newDeps, requiresAfter: newAfterDeps}; //Object -} - -dojo._xdWalkReqs = function(){ - //summary: Internal xd loader function. - //Walks the requires and evaluates module resource contents in - //the right order. - var reqChain = null; - var req; - for(var i = 0; i < dojo._xdOrderedReqs.length; i++){ - req = dojo._xdOrderedReqs[i]; - if(dojo._xdDepMap[req]){ - reqChain = [req]; - reqChain[req] = true; //Allow for fast lookup of the req in the array - dojo._xdEvalReqs(reqChain); - } - } -} - -dojo._xdEvalReqs = function(/*Array*/reqChain){ - //summary: Internal xd loader function. - //Does a depth first, breadth second search and eval of required modules. - while(reqChain.length > 0){ - var req = reqChain[reqChain.length - 1]; - var res = dojo._xdDepMap[req]; - var i, reqs, nextReq; - if(res){ - //Trace down any requires for this resource. - //START dojo._xdTraceReqs() inlining for small Safari 2.0 call stack - reqs = res.requires; - if(reqs && reqs.length > 0){ - for(i = 0; i < reqs.length; i++){ - nextReq = reqs[i].name; - if(nextReq && !reqChain[nextReq]){ - //New req depedency. Follow it down. - reqChain.push(nextReq); - reqChain[nextReq] = true; - dojo._xdEvalReqs(reqChain); - } - } - } - //END dojo._xdTraceReqs() inlining for small Safari 2.0 call stack - - //Evaluate the resource. - var contents = dojo._xdContents[res.contentIndex]; - if(!contents.isDefined){ - var content = contents.content; - content["resourceName"] = contents["resourceName"]; - content["resourcePath"] = contents["resourcePath"]; - dojo._xdDefList.push(content); - contents.isDefined = true; - } - dojo._xdDepMap[req] = null; - - //Trace down any requireAfters for this resource. - //START dojo._xdTraceReqs() inlining for small Safari 2.0 call stack - reqs = res.requiresAfter; - if(reqs && reqs.length > 0){ - for(i = 0; i < reqs.length; i++){ - nextReq = reqs[i].name; - if(nextReq && !reqChain[nextReq]){ - //New req depedency. Follow it down. - reqChain.push(nextReq); - reqChain[nextReq] = true; - dojo._xdEvalReqs(reqChain); - } - } - } - //END dojo._xdTraceReqs() inlining for small Safari 2.0 call stack - } - - //Done with that require. Remove it and go to the next one. - reqChain.pop(); - } -} - -dojo._xdWatchInFlight = function(){ - //summary: Internal xd loader function. - //Monitors in-flight requests for xd module resources. - - var noLoads = ""; - var waitInterval = (dojo.config.xdWaitSeconds || 15) * 1000; - var expired = (dojo._xdStartTime + waitInterval) < (new Date()).getTime(); - - //If any xdInFlight are true, then still waiting for something to load. - //Come back later. If we timed out, report the things that did not load. - for(var param in dojo._xdInFlight){ - if(dojo._xdInFlight[param] === true){ - if(expired){ - noLoads += param + " "; - }else{ - return; - } - } - } - - //All done. Clean up and notify. - dojo._xdClearInterval(); - - if(expired){ - throw "Could not load cross-domain resources: " + noLoads; - } - - dojo._xdWalkReqs(); - - var defLength = dojo._xdDefList.length; - for(var i= 0; i < defLength; i++){ - var content = dojo._xdDefList[i]; - if(dojo.config["debugAtAllCosts"] && content["resourceName"]){ - if(!dojo["_xdDebugQueue"]){ - dojo._xdDebugQueue = []; - } - dojo._xdDebugQueue.push({resourceName: content.resourceName, resourcePath: content.resourcePath}); - }else{ - //Evaluate the resource to bring it into being. - //Pass in scope args to allow multiple versions of modules in a page. - content.apply(dojo.global, dojo._scopeArgs); - } - } - - //Evaluate any resources that were not evaled before. - //This normally shouldn't happen with proper dojo.provide and dojo.require - //usage, but providing it just in case. Note that these may not be executed - //in the original order that the developer intended. - for(i = 0; i < dojo._xdContents.length; i++){ - var current = dojo._xdContents[i]; - if(current.content && !current.isDefined){ - //Pass in scope args to allow multiple versions of modules in a page. - current.content.apply(dojo.global, dojo._scopeArgs); - } - } - - //Clean up for the next round of xd loading. - dojo._xdReset(); - - if(dojo["_xdDebugQueue"] && dojo._xdDebugQueue.length > 0){ - dojo._xdDebugFileLoaded(); - }else{ - dojo._xdNotifyLoaded(); - } -} - -dojo._xdNotifyLoaded = function(){ - //Clear inflight count so we will finally do finish work. - - //Just having a legitimate status (true or false) for an inflight item - //means that it is still being processed. Do the typeof test - //to avoid bad JavaScript that might tinker with Object.prototype. - for(var prop in dojo._xdInFlight){ - if(typeof dojo._xdInFlight[prop] == "boolean"){ - return; - } - } - - dojo._inFlightCount = 0; - - //Only trigger call loaded if dj_load_init has run. - if(dojo._initFired && !dojo._loadNotifying){ - dojo._callLoaded(); - } -} - -} |