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>