]> git.wh0rd.org - tt-rss.git/blob - lib/dojo/_base/window.js.uncompressed.js
upgrade dojo to 1.8.3 (refs #570)
[tt-rss.git] / lib / dojo / _base / window.js.uncompressed.js
1 define("dojo/_base/window", ["./kernel", "./lang", "../sniff"], function(dojo, lang, has){
2 // module:
3 // dojo/_base/window
4
5 var ret = {
6 // summary:
7 // API to save/set/restore the global/document scope.
8
9 global: dojo.global,
10 /*=====
11 global: {
12 // summary:
13 // Alias for the current window. 'global' can be modified
14 // for temporary context shifting. See also withGlobal().
15 // description:
16 // Use this rather than referring to 'window' to ensure your code runs
17 // correctly in managed contexts.
18 },
19 =====*/
20
21 doc: this["document"] || null,
22 /*=====
23 doc: {
24 // summary:
25 // Alias for the current document. 'doc' can be modified
26 // for temporary context shifting. See also withDoc().
27 // description:
28 // Use this rather than referring to 'window.document' to ensure your code runs
29 // correctly in managed contexts.
30 // example:
31 // | n.appendChild(dojo.doc.createElement('div'));
32 },
33 =====*/
34
35 body: function(/*Document?*/ doc){
36 // summary:
37 // Return the body element of the specified document or of dojo/_base/window::doc.
38 // example:
39 // | win.body().appendChild(dojo.doc.createElement('div'));
40
41 // Note: document.body is not defined for a strict xhtml document
42 // Would like to memoize this, but dojo.doc can change vi dojo.withDoc().
43 doc = doc || dojo.doc;
44 return doc.body || doc.getElementsByTagName("body")[0]; // Node
45 },
46
47 setContext: function(/*Object*/ globalObject, /*DocumentElement*/ globalDocument){
48 // summary:
49 // changes the behavior of many core Dojo functions that deal with
50 // namespace and DOM lookup, changing them to work in a new global
51 // context (e.g., an iframe). The varibles dojo.global and dojo.doc
52 // are modified as a result of calling this function and the result of
53 // `dojo.body()` likewise differs.
54 dojo.global = ret.global = globalObject;
55 dojo.doc = ret.doc = globalDocument;
56 },
57
58 withGlobal: function( /*Object*/ globalObject,
59 /*Function*/ callback,
60 /*Object?*/ thisObject,
61 /*Array?*/ cbArguments){
62 // summary:
63 // Invoke callback with globalObject as dojo.global and
64 // globalObject.document as dojo.doc.
65 // description:
66 // Invoke callback with globalObject as dojo.global and
67 // globalObject.document as dojo.doc. If provided, globalObject
68 // will be executed in the context of object thisObject
69 // When callback() returns or throws an error, the dojo.global
70 // and dojo.doc will be restored to its previous state.
71
72 var oldGlob = dojo.global;
73 try{
74 dojo.global = ret.global = globalObject;
75 return ret.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments);
76 }finally{
77 dojo.global = ret.global = oldGlob;
78 }
79 },
80
81 withDoc: function( /*DocumentElement*/ documentObject,
82 /*Function*/ callback,
83 /*Object?*/ thisObject,
84 /*Array?*/ cbArguments){
85 // summary:
86 // Invoke callback with documentObject as dojo/_base/window::doc.
87 // description:
88 // Invoke callback with documentObject as dojo/_base/window::doc. If provided,
89 // callback will be executed in the context of object thisObject
90 // When callback() returns or throws an error, the dojo/_base/window::doc will
91 // be restored to its previous state.
92
93 var oldDoc = ret.doc,
94 oldQ = has("quirks"),
95 oldIE = has("ie"), isIE, mode, pwin;
96
97 try{
98 dojo.doc = ret.doc = documentObject;
99 // update dojo.isQuirks and the value of the has feature "quirks".
100 // remove setting dojo.isQuirks and dojo.isIE for 2.0
101 dojo.isQuirks = has.add("quirks", dojo.doc.compatMode == "BackCompat", true, true); // no need to check for QuirksMode which was Opera 7 only
102
103 if(has("ie")){
104 if((pwin = documentObject.parentWindow) && pwin.navigator){
105 // re-run IE detection logic and update dojo.isIE / has("ie")
106 // (the only time parentWindow/navigator wouldn't exist is if we were not
107 // passed an actual legitimate document object)
108 isIE = parseFloat(pwin.navigator.appVersion.split("MSIE ")[1]) || undefined;
109 mode = documentObject.documentMode;
110 if(mode && mode != 5 && Math.floor(isIE) != mode){
111 isIE = mode;
112 }
113 dojo.isIE = has.add("ie", isIE, true, true);
114 }
115 }
116
117 if(thisObject && typeof callback == "string"){
118 callback = thisObject[callback];
119 }
120
121 return callback.apply(thisObject, cbArguments || []);
122 }finally{
123 dojo.doc = ret.doc = oldDoc;
124 dojo.isQuirks = has.add("quirks", oldQ, true, true);
125 dojo.isIE = has.add("ie", oldIE, true, true);
126 }
127 }
128 };
129
130 1 && lang.mixin(dojo, ret);
131
132 return ret;
133
134 });