You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
4.4 KiB
134 lines
4.4 KiB
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; |
|
|
|
});
|
|
|