UNPKG

dojo

Version:

Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.

135 lines (117 loc) 4.55 kB
define(["./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: dojo.global["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); } } }; has("extend-dojo") && lang.mixin(dojo, ret); return ret; });