define("dojo/_base/window", ["./kernel", "./lang", "../sniff"], function(dojo, lang, has){ // module: // dojo/_base/window var ret = { // summary: // API to save/set/restore the global/document scope. global: dojo.global, /*===== global: { // summary: // Alias for the current window. 'global' can be modified // for temporary context shifting. See also withGlobal(). // description: // Use this rather than referring to 'window' to ensure your code runs // correctly in managed contexts. }, =====*/ doc: this["document"] || null, /*===== doc: { // summary: // Alias for the current document. 'doc' can be modified // for temporary context shifting. See also withDoc(). // description: // Use this rather than referring to 'window.document' to ensure your code runs // correctly in managed contexts. // example: // | n.appendChild(dojo.doc.createElement('div')); }, =====*/ body: function(/*Document?*/ doc){ // summary: // Return the body element of the specified document or of dojo/_base/window::doc. // example: // | win.body().appendChild(dojo.doc.createElement('div')); // Note: document.body is not defined for a strict xhtml document // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). doc = doc || dojo.doc; return doc.body || doc.getElementsByTagName("body")[0]; // Node }, setContext: function(/*Object*/ globalObject, /*DocumentElement*/ globalDocument){ // summary: // changes the behavior of many core Dojo functions that deal with // namespace and DOM lookup, changing them to work in a new global // context (e.g., an iframe). The varibles dojo.global and dojo.doc // are modified as a result of calling this function and the result of // `dojo.body()` likewise differs. dojo.global = ret.global = globalObject; dojo.doc = ret.doc = globalDocument; }, withGlobal: function( /*Object*/ globalObject, /*Function*/ callback, /*Object?*/ thisObject, /*Array?*/ cbArguments){ // summary: // Invoke callback with globalObject as dojo.global and // globalObject.document as dojo.doc. // description: // Invoke callback with globalObject as dojo.global and // globalObject.document as dojo.doc. If provided, globalObject // will be executed in the context of object thisObject // When callback() returns or throws an error, the dojo.global // and dojo.doc will be restored to its previous state. var oldGlob = dojo.global; try{ dojo.global = ret.global = globalObject; return ret.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments); }finally{ dojo.global = ret.global = oldGlob; } }, withDoc: function( /*DocumentElement*/ documentObject, /*Function*/ callback, /*Object?*/ thisObject, /*Array?*/ cbArguments){ // summary: // Invoke callback with documentObject as dojo/_base/window::doc. // description: // Invoke callback with documentObject as dojo/_base/window::doc. If provided, // callback will be executed in the context of object thisObject // When callback() returns or throws an error, the dojo/_base/window::doc will // be restored to its previous state. var oldDoc = ret.doc, oldQ = has("quirks"), oldIE = has("ie"), isIE, mode, pwin; try{ dojo.doc = ret.doc = documentObject; // update dojo.isQuirks and the value of the has feature "quirks". // remove setting dojo.isQuirks and dojo.isIE for 2.0 dojo.isQuirks = has.add("quirks", dojo.doc.compatMode == "BackCompat", true, true); // no need to check for QuirksMode which was Opera 7 only if(has("ie")){ if((pwin = documentObject.parentWindow) && pwin.navigator){ // re-run IE detection logic and update dojo.isIE / has("ie") // (the only time parentWindow/navigator wouldn't exist is if we were not // passed an actual legitimate document object) isIE = parseFloat(pwin.navigator.appVersion.split("MSIE ")[1]) || undefined; mode = documentObject.documentMode; if(mode && mode != 5 && Math.floor(isIE) != mode){ isIE = mode; } dojo.isIE = has.add("ie", isIE, true, true); } } if(thisObject && typeof callback == "string"){ callback = thisObject[callback]; } return callback.apply(thisObject, cbArguments || []); }finally{ dojo.doc = ret.doc = oldDoc; dojo.isQuirks = has.add("quirks", oldQ, true, true); dojo.isIE = has.add("ie", oldIE, true, true); } } }; 1 && lang.mixin(dojo, ret); return ret; });