Mercurial > hg > ywww
comparison booksMobOld/hosted.html @ 6:077b0a0a3e6d
remaining originals according to dependency walk
author | Robert Boland <robert@markup.co.uk> |
---|---|
date | Thu, 16 Feb 2017 22:29:02 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
5:55445b456ad0 | 6:077b0a0a3e6d |
---|---|
1 <html> | |
2 <head><script> | |
3 var $wnd = parent; | |
4 var $doc = $wnd.document; | |
5 var $moduleName, $moduleBase, $entry | |
6 ,$stats = $wnd.__gwtStatsEvent ? function(a) {return $wnd.__gwtStatsEvent(a);} : null | |
7 ,$sessionId = $wnd.__gwtStatsSessionId ? $wnd.__gwtStatsSessionId : null; | |
8 // Lightweight metrics | |
9 if ($stats) { | |
10 var moduleFuncName = location.search.substr(1); | |
11 var moduleFunc = $wnd[moduleFuncName]; | |
12 var moduleName = moduleFunc ? moduleFunc.moduleName : "unknown"; | |
13 $stats({moduleName:moduleName,sessionId:$sessionId,subSystem:'startup',evtGroup:'moduleStartup',millis:(new Date()).getTime(),type:'moduleEvalStart'}); | |
14 } | |
15 var $hostedHtmlVersion="2.0"; | |
16 | |
17 var gwtOnLoad; | |
18 var $hosted = "localhost:9997"; | |
19 | |
20 function loadIframe(url) { | |
21 var topDoc = window.top.document; | |
22 | |
23 // create an iframe | |
24 var iframeDiv = topDoc.createElement("div"); | |
25 iframeDiv.innerHTML = "<iframe scrolling=no frameborder=0 src='" + url + "'>"; | |
26 var iframe = iframeDiv.firstChild; | |
27 | |
28 // mess with the iframe style a little | |
29 var iframeStyle = iframe.style; | |
30 iframeStyle.position = "absolute"; | |
31 iframeStyle.borderWidth = "0"; | |
32 iframeStyle.left = "0"; | |
33 iframeStyle.top = "0"; | |
34 iframeStyle.width = "100%"; | |
35 iframeStyle.backgroundColor = "#ffffff"; | |
36 iframeStyle.zIndex = "1"; | |
37 iframeStyle.height = "100%"; | |
38 | |
39 // update the top window's document's body's style | |
40 var hostBodyStyle = window.top.document.body.style; | |
41 hostBodyStyle.margin = "0"; | |
42 hostBodyStyle.height = iframeStyle.height; | |
43 hostBodyStyle.overflow = "hidden"; | |
44 | |
45 // insert the iframe | |
46 topDoc.body.insertBefore(iframe, topDoc.body.firstChild); | |
47 } | |
48 | |
49 var ua = navigator.userAgent.toLowerCase(); | |
50 if (ua.indexOf("gecko") != -1) { | |
51 // install eval wrapper on FF to avoid EvalError problem | |
52 var __eval = window.eval; | |
53 window.eval = function(s) { | |
54 return __eval(s); | |
55 } | |
56 } | |
57 if (ua.indexOf("chrome") != -1) { | |
58 // work around __gwt_ObjectId appearing in JS objects | |
59 var hop = Object.prototype.hasOwnProperty; | |
60 Object.prototype.hasOwnProperty = function(prop) { | |
61 return prop != "__gwt_ObjectId" && hop.call(this, prop); | |
62 }; | |
63 } | |
64 | |
65 // wrapper to call JS methods, which we need both to be able to supply a | |
66 // different this for method lookup and to get the exception back | |
67 function __gwt_jsInvoke(thisObj, methodName) { | |
68 try { | |
69 var args = Array.prototype.slice.call(arguments, 2); | |
70 return [0, window[methodName].apply(thisObj, args)]; | |
71 } catch (e) { | |
72 return [1, e]; | |
73 } | |
74 } | |
75 | |
76 var __gwt_javaInvokes = []; | |
77 function __gwt_makeJavaInvoke(argCount) { | |
78 return __gwt_javaInvokes[argCount] || __gwt_doMakeJavaInvoke(argCount); | |
79 } | |
80 | |
81 function __gwt_doMakeJavaInvoke(argCount) { | |
82 // IE6 won't eval() anonymous functions except as r-values | |
83 var argList = ""; | |
84 for (var i = 0; i < argCount; i++) { | |
85 argList += ",p" + i; | |
86 } | |
87 var argListNoComma = argList.substring(1); | |
88 | |
89 return eval( | |
90 "__gwt_javaInvokes[" + argCount + "] =\n" + | |
91 " function(thisObj, dispId" + argList + ") {\n" + | |
92 " var result = __static(dispId, thisObj" + argList + ");\n" + | |
93 " if (result[0]) {\n" + | |
94 " throw result[1];\n" + | |
95 " } else {\n" + | |
96 " return result[1];\n" + | |
97 " }\n" + | |
98 " }\n" | |
99 ); | |
100 } | |
101 | |
102 /* | |
103 * This is used to create tear-offs of Java methods. Each function corresponds | |
104 * to exactly one dispId, and also embeds the argument count. We get the "this" | |
105 * value from the context in which the function is being executed. | |
106 * Function-object identity is preserved by caching in a sparse array. | |
107 */ | |
108 var __gwt_tearOffs = []; | |
109 var __gwt_tearOffGenerators = []; | |
110 function __gwt_makeTearOff(proxy, dispId, argCount) { | |
111 return __gwt_tearOffs[dispId] || __gwt_doMakeTearOff(dispId, argCount); | |
112 } | |
113 | |
114 function __gwt_doMakeTearOff(dispId, argCount) { | |
115 return __gwt_tearOffs[dispId] = | |
116 (__gwt_tearOffGenerators[argCount] || __gwt_doMakeTearOffGenerator(argCount))(dispId); | |
117 } | |
118 | |
119 function __gwt_doMakeTearOffGenerator(argCount) { | |
120 // IE6 won't eval() anonymous functions except as r-values | |
121 var argList = ""; | |
122 for (var i = 0; i < argCount; i++) { | |
123 argList += ",p" + i; | |
124 } | |
125 var argListNoComma = argList.substring(1); | |
126 | |
127 return eval( | |
128 "__gwt_tearOffGenerators[" + argCount + "] =\n" + | |
129 " function(dispId) {\n" + | |
130 " return function(" + argListNoComma + ") {\n" + | |
131 " var result = __static(dispId, this" + argList + ");\n" + | |
132 " if (result[0]) {\n" + | |
133 " throw result[1];\n" + | |
134 " } else {\n" + | |
135 " return result[1];\n" + | |
136 " }\n" + | |
137 " }\n" + | |
138 " }\n" | |
139 ); | |
140 } | |
141 | |
142 function __gwt_makeResult(isException, result) { | |
143 return [isException, result]; | |
144 } | |
145 | |
146 function __gwt_disconnected() { | |
147 // Prevent double-invocation. | |
148 window.__gwt_disconnected = new Function(); | |
149 // Do it in a timeout so we can be sure we have a clean stack. | |
150 window.setTimeout(__gwt_disconnected_impl, 1); | |
151 } | |
152 | |
153 function __gwt_disconnected_impl() { | |
154 var topWin = window.top; | |
155 var topDoc = topWin.document; | |
156 var outer = topDoc.createElement("div"); | |
157 // Do not insert whitespace or outer.firstChild will get a text node. | |
158 outer.innerHTML = | |
159 '<div style="position:absolute;z-index:2147483646;left:0px;top:0px;right:0px;bottom:0px;filter:alpha(opacity=75);opacity:0.75;background-color:#000000;"></div>' + | |
160 '<div style="position:absolute;z-index:2147483647;left:50px;top:50px;width:600px;color:#FFFFFF;font-family:verdana;">' + | |
161 '<div style="font-size:30px;font-weight:bold;">GWT Code Server Disconnected</div>' + | |
162 '<p style="font-size:15px;"> Most likely, you closed GWT development mode. Or you might have lost network connectivity. To fix this, try restarting GWT Development Mode and <a style="color: #FFFFFF; font-weight: bold;" href="javascript:location.reload()">REFRESH</a> this page.</p>' + | |
163 '</div>' | |
164 ; | |
165 topDoc.body.appendChild(outer); | |
166 var glass = outer.firstChild; | |
167 var glassStyle = glass.style; | |
168 | |
169 // Scroll to the top and remove scrollbars. | |
170 topWin.scrollTo(0, 0); | |
171 if (topDoc.compatMode == "BackCompat") { | |
172 topDoc.body.style["overflow"] = "hidden"; | |
173 } else { | |
174 topDoc.documentElement.style["overflow"] = "hidden"; | |
175 } | |
176 | |
177 // Steal focus. | |
178 glass.focus(); | |
179 | |
180 if ((navigator.userAgent.indexOf("MSIE") >= 0) && (topDoc.compatMode == "BackCompat")) { | |
181 // IE quirks mode doesn't support right/bottom, but does support this. | |
182 glassStyle.width = "125%"; | |
183 glassStyle.height = "100%"; | |
184 } else if (navigator.userAgent.indexOf("MSIE 6") >= 0) { | |
185 // IE6 doesn't have a real standards mode, so we have to use hacks. | |
186 glassStyle.width = "125%"; // Get past scroll bar area. | |
187 // Nasty CSS; onresize would be better but the outer window won't let us add a listener IE. | |
188 glassStyle.setExpression("height", "document.documentElement.clientHeight"); | |
189 } | |
190 } | |
191 | |
192 function findPluginObject() { | |
193 try { | |
194 return document.getElementById('pluginObject'); | |
195 } catch (e) { | |
196 return null; | |
197 } | |
198 } | |
199 | |
200 function findPluginEmbed() { | |
201 try { | |
202 return document.getElementById('pluginEmbed') | |
203 } catch (e) { | |
204 return null; | |
205 } | |
206 } | |
207 | |
208 function findPluginXPCOM() { | |
209 try { | |
210 return __gwt_HostedModePlugin; | |
211 } catch (e) { | |
212 return null; | |
213 } | |
214 } | |
215 | |
216 gwtOnLoad = function(errFn, modName, modBase){ | |
217 $moduleName = modName; | |
218 $moduleBase = modBase; | |
219 | |
220 // Note that the order is important | |
221 var pluginFinders = [ | |
222 findPluginXPCOM, | |
223 findPluginObject, | |
224 findPluginEmbed, | |
225 ]; | |
226 var topWin = window.top; | |
227 var url = topWin.location.href; | |
228 if (!topWin.__gwt_SessionID) { | |
229 var ASCII_EXCLAMATION = 33; | |
230 var ASCII_TILDE = 126; | |
231 var chars = []; | |
232 for (var i = 0; i < 16; ++i) { | |
233 chars.push(Math.floor(ASCII_EXCLAMATION | |
234 + Math.random() * (ASCII_TILDE - ASCII_EXCLAMATION + 1))); | |
235 } | |
236 topWin.__gwt_SessionID = String.fromCharCode.apply(null, chars); | |
237 } | |
238 var plugin = null; | |
239 for (var i = 0; i < pluginFinders.length; ++i) { | |
240 try { | |
241 var maybePlugin = pluginFinders[i](); | |
242 if (maybePlugin != null && maybePlugin.init(window)) { | |
243 plugin = maybePlugin; | |
244 break; | |
245 } | |
246 } catch (e) { | |
247 } | |
248 } | |
249 if (!plugin) { | |
250 // try searching for a v1 plugin for backwards compatibility | |
251 var found = false; | |
252 for (var i = 0; i < pluginFinders.length; ++i) { | |
253 try { | |
254 plugin = pluginFinders[i](); | |
255 if (plugin != null && plugin.connect($hosted, $moduleName, window)) { | |
256 return; | |
257 } | |
258 } catch (e) { | |
259 } | |
260 } | |
261 loadIframe("http://gwt.google.com/missing-plugin"); | |
262 } else { | |
263 if (plugin.connect(url, topWin.__gwt_SessionID, $hosted, $moduleName, | |
264 $hostedHtmlVersion)) { | |
265 window.onUnload = function() { | |
266 try { | |
267 // wrap in try/catch since plugins are not required to supply this | |
268 plugin.disconnect(); | |
269 } catch (e) { | |
270 } | |
271 }; | |
272 } else { | |
273 if (errFn) { | |
274 errFn(modName); | |
275 } else { | |
276 alert("Plugin failed to connect to hosted mode server at " + $hosted); | |
277 loadIframe("http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM"); | |
278 } | |
279 } | |
280 } | |
281 } | |
282 | |
283 window.onunload = function() { | |
284 }; | |
285 | |
286 // Lightweight metrics | |
287 window.fireOnModuleLoadStart = function(className) { | |
288 $stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'onModuleLoadStart', className:className}); | |
289 }; | |
290 | |
291 window.__gwt_module_id = 0; | |
292 </script></head> | |
293 <body> | |
294 <font face='arial' size='-1'>This html file is for hosted mode support.</font> | |
295 <script><!-- | |
296 // Lightweight metrics | |
297 $stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'moduleEvalEnd'}); | |
298 | |
299 // OOPHM currently only supports IFrameLinker | |
300 var query = parent.location.search; | |
301 if (!findPluginXPCOM()) { | |
302 document.write('<embed id="pluginEmbed" type="application/x-gwt-hosted-mode" width="10" height="10">'); | |
303 document.write('</embed>'); | |
304 document.write('<object id="pluginObject" CLASSID="CLSID:1D6156B6-002B-49E7-B5CA-C138FB843B4E">'); | |
305 document.write('</object>'); | |
306 } | |
307 | |
308 // look for the old query parameter if we don't find the new one | |
309 var idx = query.indexOf("gwt.codesvr="); | |
310 if (idx >= 0) { | |
311 idx += 12; // "gwt.codesvr=".length() == 12 | |
312 } else { | |
313 idx = query.indexOf("gwt.hosted="); | |
314 if (idx >= 0) { | |
315 idx += 11; // "gwt.hosted=".length() == 11 | |
316 } | |
317 } | |
318 if (idx >= 0) { | |
319 var amp = query.indexOf("&", idx); | |
320 if (amp >= 0) { | |
321 $hosted = query.substring(idx, amp); | |
322 } else { | |
323 $hosted = query.substring(idx); | |
324 } | |
325 | |
326 // According to RFC 3986, some of this component's characters (e.g., ':') | |
327 // are reserved and *may* be escaped. | |
328 $hosted = decodeURIComponent($hosted); | |
329 } | |
330 | |
331 query = window.location.search.substring(1); | |
332 if (query && $wnd[query]) setTimeout($wnd[query].onScriptLoad, 1); | |
333 --></script></body></html> |