if(typeof dojo == "undefined"){ /** * @file bootstrap1.js * * summary: First file that is loaded that 'bootstraps' the entire dojo library suite. * note: Must run before hostenv_*.js file. * * @author Copyright 2004 Mark D. Anderson (mda@discerning.com) * TODOC: should the copyright be changed to Dojo Foundation? * @license Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php * * $Id: dojo.js.uncompressed.js,v 1.1 2020/09/21 01:37:25 admin Exp $ */ // TODOC: HOW TO DOC THE BELOW? // @global: djConfig // summary: // Application code can set the global 'djConfig' prior to loading // the library to override certain global settings for how dojo works. // description: The variables that can be set are as follows: // - isDebug: false // - allowQueryConfig: false // - baseScriptUri: "" // - baseRelativePath: "" // - libraryScriptUri: "" // - iePreventClobber: false // - ieClobberMinimal: true // - locale: undefined // - extraLocale: undefined // - preventBackButtonFix: true // - searchIds: [] // - parseWidgets: true // TODOC: HOW TO DOC THESE VARIABLES? // TODOC: IS THIS A COMPLETE LIST? // 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. // TODOC: is this still true? Release notes for 0.3 indicated they could be set after load. // //TODOC: HOW TO DOC THIS? // @global: dj_global // summary: // an alias for the top-level global object in the host environment // (e.g., the window object in a browser). // description: // Refer to 'dj_global' rather than referring to window to ensure your // code runs correctly in contexts other than web browsers (eg: Rhino on a server). var dj_global = this; //TODOC: HOW TO DOC THIS? // @global: dj_currentContext // summary: // Private global context object. Where 'dj_global' always refers to the boot-time // global context, 'dj_currentContext' can be modified for temporary context shifting. // dojo.global() returns dj_currentContext. // description: // Refer to dojo.global() rather than referring to dj_global to ensure your // code runs correctly in managed contexts. var dj_currentContext = this; // **************************************************************** // global public utils // TODOC: DO WE WANT TO NOTE THAT THESE ARE GLOBAL PUBLIC UTILS? // **************************************************************** function dj_undef(/*String*/ name, /*Object?*/ object){ //summary: Returns true if 'name' is defined on 'object' (or globally if 'object' is null). //description: Note that 'defined' and 'exists' are not the same concept. return (typeof (object || dj_currentContext)[name] == "undefined"); // Boolean } // make sure djConfig is defined if(dj_undef("djConfig", this)){ var djConfig = {}; } //TODOC: HOW TO DOC THIS? // dojo is the root variable of (almost all) our public symbols -- make sure it is defined. if(dj_undef("dojo", this)){ var dojo = {}; } dojo.global = function(){ // summary: // return the current global context object // (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 (eg: Rhino on a server). return dj_currentContext; } // Override locale setting, if specified dojo.locale = djConfig.locale; //TODOC: HOW TO DOC THIS? dojo.version = { // summary: version number of this instance of dojo. major: 0, minor: 4, patch: 0, flag: "", revision: Number("$Rev: 6258 $".match(/[0-9]+/)[0]), toString: function(){ with(dojo.version){ return major + "." + minor + "." + patch + flag + " (" + revision + ")"; // String } } } dojo.evalProp = function(/*String*/ name, /*Object*/ object, /*Boolean?*/ create){ // summary: Returns 'object[name]'. If not defined and 'create' is true, will return a new Object. // description: // Returns null if 'object[name]' is not defined and 'create' is not true. // Note: 'defined' and 'exists' are not the same concept. if((!object)||(!name)) return undefined; // undefined if(!dj_undef(name, object)) return object[name]; // mixed return (create ? (object[name]={}) : undefined); // mixed } dojo.parseObjPath = function(/*String*/ path, /*Object?*/ context, /*Boolean?*/ create){ // summary: Parse string path to an object, and return corresponding object reference and property name. // description: // Returns an object with two properties, 'obj' and 'prop'. // 'obj[prop]' is the reference indicated by 'path'. // path: Path to an object, in the form "A.B.C". // context: Object to use as root of path. Defaults to 'dojo.global()'. // create: If true, Objects will be created at any point along the 'path' that is undefined. var object = (context || dojo.global()); var names = path.split('.'); var prop = names.pop(); for (var i=0,l=names.length;i 1) { dh.modulesLoadedListeners.push(function() { 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(dh.post_load_ && dh.inFlightCount == 0 && !dh.loadNotifying){ dh.callLoaded(); } } dojo.addOnUnload = function(/*Object?*/obj, /*String|Function?*/functionName){ // summary: registers a function to be triggered when the page unloads // // usage: // dojo.addOnLoad(functionPointer) // dojo.addOnLoad(object, "functionName") var dh = dojo.hostenv; if(arguments.length == 1){ dh.unloadListeners.push(obj); } else if(arguments.length > 1) { dh.unloadListeners.push(function() { obj[functionName](); }); } } dojo.hostenv.modulesLoaded = function(){ if(this.post_load_){ return; } if(this.loadUriStack.length==0 && this.getTextStack.length==0){ if(this.inFlightCount > 0){ dojo.debug("files still in flight!"); return; } dojo.hostenv.callLoaded(); } } dojo.hostenv.callLoaded = function(){ if(typeof setTimeout == "object"){ setTimeout("dojo.hostenv.loaded();", 0); }else{ dojo.hostenv.loaded(); } } dojo.hostenv.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) && !this.moduleHasPrefix(parentModule)){ //Support default module directory (sibling of dojo) syms[0] = "../" + syms[0]; }else{ var parentModulePath = this.getModulePrefix(parentModule); if(parentModulePath != parentModule){ syms.splice(0, i, parentModulePath); break; } } } return syms; // Array } dojo.hostenv._global_omit_module_check = false; dojo.hostenv.loadModule = function(/*String*/moduleName, /*Boolean?*/exactOnly, /*Boolean?*/omitModuleCheck){ // summary: // loads a Javascript module from the appropriate URI // // description: // loadModule("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, // followed by "A.js". // // It throws 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. // // This does nothing about importing symbols into the current package. // It is presumed that the caller will take care of that. For example, to import // all symbols: // // with (dojo.hostenv.loadModule("A.B")) { // ... // } // // And to import just the leaf symbol: // // var B = dojo.hostenv.loadModule("A.B"); // ... // // dj_load is an alias for dojo.hostenv.loadModule if(!moduleName){ return; } omitModuleCheck = this._global_omit_module_check || omitModuleCheck; var module = this.findModule(moduleName, false); if(module){ return module; } // protect against infinite recursion from mutual dependencies if(dj_undef(moduleName, this.loading_modules_)){ this.addedToLoadingCount.push(moduleName); } this.loading_modules_[moduleName] = 1; // convert periods to slashes var relpath = moduleName.replace(/\./g, '/') + '.js'; var nsyms = moduleName.split("."); // this line allowed loading of a module manifest as if it were a namespace // it's an interesting idea, but shouldn't be combined with 'namespaces' proper // and leads to unwanted dependencies // the effect can be achieved in other (albeit less-flexible) ways now, so I am // removing this pending further design work // perhaps we can explicitly define this idea of a 'module manifest', and subclass // 'namespace manifest' from that //dojo.getNamespace(nsyms[0]); var syms = this.getModuleSymbols(moduleName); var startedRelative = ((syms[0].charAt(0) != '/') && !syms[0].match(/^\w+:/)); var last = syms[syms.length - 1]; var ok; // figure out if we're looking for a full package, if so, we want to do // things slightly diffrently if(last=="*"){ moduleName = nsyms.slice(0, -1).join('.'); while(syms.length){ syms.pop(); syms.push(this.pkgFileName); relpath = syms.join("/") + '.js'; if(startedRelative && relpath.charAt(0)=="/"){ relpath = relpath.slice(1); } ok = this.loadPath(relpath, !omitModuleCheck ? moduleName : null); if(ok){ break; } syms.pop(); } }else{ relpath = syms.join("/") + '.js'; moduleName = nsyms.join('.'); var modArg = !omitModuleCheck ? moduleName : null; ok = this.loadPath(relpath, modArg); if(!ok && !exactOnly){ syms.pop(); while(syms.length){ relpath = syms.join('/') + '.js'; ok = this.loadPath(relpath, modArg); if(ok){ break; } syms.pop(); relpath = syms.join('/') + '/'+this.pkgFileName+'.js'; if(startedRelative && relpath.charAt(0)=="/"){ relpath = relpath.slice(1); } ok = this.loadPath(relpath, modArg); if(ok){ break; } } } if(!ok && !omitModuleCheck){ dojo.raise("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 && !this["isXDomain"]){ // pass in false so we can give better error module = this.findModule(moduleName, false); if(!module){ dojo.raise("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); } } return module; } dojo.hostenv.startPackage = function(/*String*/packageName){ // summary: // Creates a JavaScript package // // description: // startPackage("A.B") follows the path, and at each level creates a new empty // object or uses what already exists. It returns the result. // // packageName: the package to be created as a String in dot notation //Make sure we have a string. var fullPkgName = String(packageName); var strippedPkgName = fullPkgName; var syms = packageName.split(/\./); if(syms[syms.length-1]=="*"){ syms.pop(); strippedPkgName = syms.join("."); } var evaledPkg = dojo.evalObjPath(strippedPkgName, true); this.loaded_modules_[fullPkgName] = evaledPkg; this.loaded_modules_[strippedPkgName] = evaledPkg; return evaledPkg; // Object } dojo.hostenv.findModule = function(/*String*/moduleName, /*Boolean?*/mustExist){ // summary: // Returns the Object representing the module, if it exists, otherwise null. // // moduleName A fully qualified module including package name, like 'A.B'. // mustExist Optional, default false. throw instead of returning null // if the module does not currently exist. var lmn = String(moduleName); if(this.loaded_modules_[lmn]){ return this.loaded_modules_[lmn]; // Object } if(mustExist){ dojo.raise("no loaded module named '" + moduleName + "'"); } return null; // null } //Start of old bootstrap2: dojo.kwCompoundRequire = function(/*Object containing Arrays*/modMap){ // description: // This method taks a "map" of arrays which one can use to optionally load dojo // modules. The map is indexed by the possible dojo.hostenv.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 // the hostenv.name_ item. The items in the "common" array will _always_ be // loaded, regardless of which list is chosen. Here's how it's normally // called: // // dojo.kwCompoundRequire({ // browser: [ // ["foo.bar.baz", true, true], // an example that passes multiple args to loadModule() // "foo.sample.*", // "foo.test, // ], // default: [ "foo.sample.*" ], // common: [ "really.important.module.*" ] // }); var common = modMap["common"]||[]; var result = modMap[dojo.hostenv.name_] ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]); for(var x=0; x, // relative to Dojo root. For example, module acme is mapped to ../acme. // If you want to use a different module name, use dojo.registerModulePath. return dojo.hostenv.setModulePrefix(module, prefix); } dojo.setModulePrefix = function(/*String*/module, /*String*/prefix){ // summary: maps a module name to a path dojo.deprecated('dojo.setModulePrefix("' + module + '", "' + prefix + '")', "replaced by dojo.registerModulePath", "0.5"); return dojo.registerModulePath(module, prefix); } dojo.exists = function(/*Object*/obj, /*String*/name){ // 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 var p = name.split("."); for(var i = 0; i < p.length; i++){ if(!obj[p[i]]){ return false; } // Boolean obj = obj[p[i]]; } return true; // Boolean } // Localization routines dojo.hostenv.normalizeLocale = function(/*String?*/locale){ // summary: // Returns canonical form of locale, as used by Dojo. All variants are case-insensitive and are separated by '-' // as specified in RFC 3066. If no locale is specified, the user agent's default is returned. return locale ? locale.toLowerCase() : dojo.locale; // String }; dojo.hostenv.searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){ // summary: // A helper method to assist in searching for locale-based resources. Will iterate through // the variants of a particular locale, either up or down, executing a callback function. // For example, "en-us" and true will try "en-us" followed by "en" and finally "ROOT". locale = dojo.hostenv.normalizeLocale(locale); var elements = locale.split('-'); var searchlist = []; for(var i = elements.length; i > 0; i--){ searchlist.push(elements.slice(0, i).join('-')); } searchlist.push(false); if(down){searchlist.reverse();} for(var j = searchlist.length - 1; j >= 0; j--){ var loc = searchlist[j] || "ROOT"; var stop = searchFunc(loc); if(stop){ break; } } } //These two functions are placed outside of preloadLocalizations //So that the xd loading can use/override them. dojo.hostenv.localesGenerated /***BUILD:localesGenerated***/; // value will be inserted here at build time, if necessary dojo.hostenv.registerNlsPrefix = function(){ // summary: // Register module "nls" to point where Dojo can find pre-built localization files dojo.registerModulePath("nls","nls"); } dojo.hostenv.preloadLocalizations = function(){ // summary: // Load built, flattened resource bundles, if available for all locales used in the page. // Execute only once. Note that this is a no-op unless there is a build. if(dojo.hostenv.localesGenerated){ dojo.hostenv.registerNlsPrefix(); function preload(locale){ locale = dojo.hostenv.normalizeLocale(locale); dojo.hostenv.searchLocalePath(locale, true, function(loc){ for(var i=0; i 1){ var paramStr = params[1]; var pairs = paramStr.split("&"); for(var x in pairs){ var sp = pairs[x].split("="); // FIXME: is this eval dangerous? if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){ var opt = sp[0].substr(9); try{ djConfig[opt]=eval(sp[1]); }catch(e){ djConfig[opt]=sp[1]; } } } } } if(((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) &&(document && document.getElementsByTagName)){ var scripts = document.getElementsByTagName("script"); var rePkg = /(__package__|dojo|bootstrap1)\.js([\?\.]|$)/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) { var root = src.substring(0, m.index); if(src.indexOf("bootstrap1") > -1) { root += "../"; } if(!this["djConfig"]) { djConfig = {}; } if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; } if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; } break; } } } // fill in the rendering support information in dojo.render.* var dr = dojo.render; var drh = dojo.render.html; var drs = dojo.render.svg; var dua = (drh.UA = navigator.userAgent); var dav = (drh.AV = navigator.appVersion); var t = true; var f = false; drh.capable = t; drh.support.builtin = t; dr.ver = parseFloat(drh.AV); dr.os.mac = dav.indexOf("Macintosh") >= 0; dr.os.win = dav.indexOf("Windows") >= 0; // could also be Solaris or something, but it's the same browser dr.os.linux = dav.indexOf("X11") >= 0; drh.opera = dua.indexOf("Opera") >= 0; drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0); drh.safari = dav.indexOf("Safari") >= 0; var geckoPos = dua.indexOf("Gecko"); drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml); if (drh.mozilla) { // gecko version is YYYYMMDD drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14); } drh.ie = (document.all)&&(!drh.opera); drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0; drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0; drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0; drh.ie70 = drh.ie && dav.indexOf("MSIE 7.0")>=0; var cm = document["compatMode"]; drh.quirks = (cm == "BackCompat")||(cm == "QuirksMode")||drh.ie55||drh.ie50; // TODO: is the HTML LANG attribute relevant? dojo.locale = dojo.locale || (drh.ie ? navigator.userLanguage : navigator.language).toLowerCase(); dr.vml.capable=drh.ie; drs.capable = f; drs.support.plugin = f; drs.support.builtin = f; var tdoc = window["document"]; var tdi = tdoc["implementation"]; if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg", "1.0"))){ drs.capable = t; drs.support.builtin = t; drs.support.plugin = f; } // webkits after 420 support SVG natively. The test string is "AppleWebKit/420+" if(drh.safari){ var tmp = dua.split("AppleWebKit/")[1]; var ver = parseFloat(tmp.split(" ")[0]); if(ver >= 420){ drs.capable = t; drs.support.builtin = t; drs.support.plugin = f; } } })(); dojo.hostenv.startPackage("dojo.hostenv"); dojo.render.name = dojo.hostenv.name_ = 'browser'; dojo.hostenv.searchIds = []; // These are in order of decreasing likelihood; this will change in time. dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; dojo.hostenv.getXmlhttpObject = function(){ var http = null; var last_e = null; try{ http = new XMLHttpRequest(); }catch(e){} if(!http){ for(var i=0; i<3; ++i){ var progid = dojo.hostenv._XMLHTTP_PROGIDS[i]; try{ http = new ActiveXObject(progid); }catch(e){ last_e = e; } if(http){ dojo.hostenv._XMLHTTP_PROGIDS = [progid]; // so faster next time break; } } /*if(http && !http.toString) { http.toString = function() { "[object XMLHttpRequest]"; } }*/ } if(!http){ return dojo.raise("XMLHTTP not available", last_e); } return http; } /** * Read the contents of the specified uri and return those contents. * * @param uri A relative or absolute uri. If absolute, it still must be in the * same "domain" as we are. * * @param async_cb If not specified, load synchronously. If specified, load * asynchronously, and use async_cb as the progress handler which takes the * xmlhttp object as its argument. If async_cb, this function returns null. * * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, * return null instead of throwing. */ dojo.hostenv._blockAsync = false; dojo.hostenv.getText = function(uri, async_cb, fail_ok){ // need to block async callbacks from snatching this thread as the result // of an async callback might call another sync XHR, this hangs khtml forever // hostenv._blockAsync must also be checked in BrowserIO's watchInFlight() // NOTE: must be declared before scope switches ie. this.getXmlhttpObject() if(!async_cb){ this._blockAsync = true; } var http = this.getXmlhttpObject(); function isDocumentOk(http){ var stat = http["status"]; // allow a 304 use cache, needed in konq (is this compliant with the http spec?) return Boolean((!stat)||((200 <= stat)&&(300 > stat))||(stat==304)); } if(async_cb){ var _this = this, timer = null, gbl = dojo.global(); var xhr = dojo.evalObjPath("dojo.io.XMLHTTPTransport"); http.onreadystatechange = function(){ if(timer){ gbl.clearTimeout(timer); timer = null; } if(_this._blockAsync || (xhr && xhr._blockAsync)){ timer = gbl.setTimeout(function () { http.onreadystatechange.apply(this); }, 10); }else{ if(4==http.readyState){ if(isDocumentOk(http)){ // dojo.debug("LOADED URI: "+uri); async_cb(http.responseText); } } } } } http.open('GET', uri, async_cb ? true : false); try{ http.send(null); if(async_cb){ return null; } if(!isDocumentOk(http)){ var err = Error("Unable to load "+uri+" status:"+ http.status); err.status = http.status; err.responseText = http.responseText; throw err; } }catch(e){ this._blockAsync = false; if((fail_ok)&&(!async_cb)){ return null; }else{ throw e; } } this._blockAsync = false; return http.responseText; } /* * It turns out that if we check *right now*, as this script file is being loaded, * then the last script element in the window DOM is ourselves. * That is because any subsequent script elements haven't shown up in the document * object yet. */ /* function dj_last_script_src() { var scripts = window.document.getElementsByTagName('script'); if(scripts.length < 1){ dojo.raise("No script elements in window.document, so can't figure out my script src"); } var script = scripts[scripts.length - 1]; var src = script.src; if(!src){ dojo.raise("Last script element (out of " + scripts.length + ") has no src"); } return src; } if(!dojo.hostenv["library_script_uri_"]){ dojo.hostenv.library_script_uri_ = dj_last_script_src(); } */ dojo.hostenv.defaultDebugContainerId = 'dojoDebug'; dojo.hostenv._println_buffer = []; dojo.hostenv._println_safe = false; dojo.hostenv.println = function (line){ if(!dojo.hostenv._println_safe){ dojo.hostenv._println_buffer.push(line); }else{ try { var console = document.getElementById(djConfig.debugContainerId ? djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId); if(!console) { console = dojo.body(); } var div = document.createElement("div"); div.appendChild(document.createTextNode(line)); console.appendChild(div); } catch (e) { try{ // safari needs the output wrapped in an element for some reason document.write("
" + line + "
"); }catch(e2){ window.status = line; } } } } dojo.addOnLoad(function(){ dojo.hostenv._println_safe = true; while(dojo.hostenv._println_buffer.length > 0){ dojo.hostenv.println(dojo.hostenv._println_buffer.shift()); } }); function dj_addNodeEvtHdlr(node, evtName, fp, capture){ var oldHandler = node["on"+evtName] || function(){}; node["on"+evtName] = function(){ fp.apply(node, arguments); oldHandler.apply(node, arguments); } return true; } // BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/) function dj_load_init(e){ // 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(typeof(_timer) != 'undefined'){ clearInterval(_timer); delete _timer; } var initFunc = function(){ //perform initialization if(dojo.render.html.ie){ dojo.hostenv.makeWidgets(); } }; if(dojo.hostenv.inFlightCount == 0){ initFunc(); dojo.hostenv.modulesLoaded(); }else{ dojo.addOnLoad(initFunc); } } // START DOMContentLoaded // Mozilla and Opera 9 expose the event we could use if(document.addEventListener){ if(dojo.render.html.opera || (dojo.render.html.moz && !djConfig.delayMozLoadingFix)){ document.addEventListener("DOMContentLoaded", dj_load_init, null); } // mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already. // also used for Mozilla because of trac #1640 window.addEventListener("load", dj_load_init, null); } // for Internet Explorer. readyState will not be achieved on init call, but dojo doesn't need it // however, we'll include it because we don't know if there are other functions added that might. // Note that this has changed because the build process strips all comments--including conditional // ones. if(dojo.render.html.ie && dojo.render.os.win){ document.attachEvent("onreadystatechange", function(e){ if(document.readyState == "complete"){ dj_load_init(); } }); } if (/(WebKit|khtml)/i.test(navigator.userAgent)) { // sniff var _timer = setInterval(function() { if (/loaded|complete/.test(document.readyState)) { dj_load_init(); // call the onload handler } }, 10); } // END DOMContentLoaded // IE WebControl hosted in an application can fire "beforeunload" and "unload" // events when control visibility changes, causing Dojo to unload too soon. The // following code fixes the problem // Reference: http://support.microsoft.com/default.aspx?scid=kb;en-us;199155 if(dojo.render.html.ie){ dj_addNodeEvtHdlr(window, "beforeunload", function(){ dojo.hostenv._unloading = true; window.setTimeout(function() { dojo.hostenv._unloading = false; }, 0); }); } dj_addNodeEvtHdlr(window, "unload", function(){ dojo.hostenv.unloaded(); if((!dojo.render.html.ie)||(dojo.render.html.ie && dojo.hostenv._unloading)){ dojo.hostenv.unloaded(); } }); dojo.hostenv.makeWidgets = function(){ // you can put searchIds in djConfig and dojo.hostenv at the moment // we should probably eventually move to one or the other var sids = []; if(djConfig.searchIds && djConfig.searchIds.length > 0) { sids = sids.concat(djConfig.searchIds); } if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) { sids = sids.concat(dojo.hostenv.searchIds); } if((djConfig.parseWidgets)||(sids.length > 0)){ if(dojo.evalObjPath("dojo.widget.Parse")){ // we must do this on a delay to avoid: // http://www.shaftek.org/blog/archives/000212.html // (IE bug) var parser = new dojo.xml.Parse(); if(sids.length > 0){ for(var x=0; x"); } catch (e) { var script = document.createElement("script"); script.src = spath; document.getElementsByTagName("head")[0].appendChild(script); } } } })();