comparison books/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.1";
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 // do the same in our parent as well -- see issue 4486
64 // NOTE: this will have to be changed when we support non-iframe-based DevMode
65 var hop2 = parent.Object.prototype.hasOwnProperty;
66 parent.Object.prototype.hasOwnProperty = function(prop) {
67 return prop != "__gwt_ObjectId" && hop2.call(this, prop);
68 };
69 }
70
71 // wrapper to call JS methods, which we need both to be able to supply a
72 // different this for method lookup and to get the exception back
73 function __gwt_jsInvoke(thisObj, methodName) {
74 try {
75 var args = Array.prototype.slice.call(arguments, 2);
76 return [0, window[methodName].apply(thisObj, args)];
77 } catch (e) {
78 return [1, e];
79 }
80 }
81
82 var __gwt_javaInvokes = [];
83 function __gwt_makeJavaInvoke(argCount) {
84 return __gwt_javaInvokes[argCount] || __gwt_doMakeJavaInvoke(argCount);
85 }
86
87 function __gwt_doMakeJavaInvoke(argCount) {
88 // IE6 won't eval() anonymous functions except as r-values
89 var argList = "";
90 for (var i = 0; i < argCount; i++) {
91 argList += ",p" + i;
92 }
93 var argListNoComma = argList.substring(1);
94
95 return eval(
96 "__gwt_javaInvokes[" + argCount + "] =\n" +
97 " function(thisObj, dispId" + argList + ") {\n" +
98 " var result = __static(dispId, thisObj" + argList + ");\n" +
99 " if (result[0]) {\n" +
100 " throw result[1];\n" +
101 " } else {\n" +
102 " return result[1];\n" +
103 " }\n" +
104 " }\n"
105 );
106 }
107
108 /*
109 * This is used to create tear-offs of Java methods. Each function corresponds
110 * to exactly one dispId, and also embeds the argument count. We get the "this"
111 * value from the context in which the function is being executed.
112 * Function-object identity is preserved by caching in a sparse array.
113 */
114 var __gwt_tearOffs = [];
115 var __gwt_tearOffGenerators = [];
116 function __gwt_makeTearOff(proxy, dispId, argCount) {
117 return __gwt_tearOffs[dispId] || __gwt_doMakeTearOff(dispId, argCount);
118 }
119
120 function __gwt_doMakeTearOff(dispId, argCount) {
121 return __gwt_tearOffs[dispId] =
122 (__gwt_tearOffGenerators[argCount] || __gwt_doMakeTearOffGenerator(argCount))(dispId);
123 }
124
125 function __gwt_doMakeTearOffGenerator(argCount) {
126 // IE6 won't eval() anonymous functions except as r-values
127 var argList = "";
128 for (var i = 0; i < argCount; i++) {
129 argList += ",p" + i;
130 }
131 var argListNoComma = argList.substring(1);
132
133 return eval(
134 "__gwt_tearOffGenerators[" + argCount + "] =\n" +
135 " function(dispId) {\n" +
136 " return function(" + argListNoComma + ") {\n" +
137 " var result = __static(dispId, this" + argList + ");\n" +
138 " if (result[0]) {\n" +
139 " throw result[1];\n" +
140 " } else {\n" +
141 " return result[1];\n" +
142 " }\n" +
143 " }\n" +
144 " }\n"
145 );
146 }
147
148 function __gwt_makeResult(isException, result) {
149 return [isException, result];
150 }
151
152 function __gwt_disconnected() {
153 // Prevent double-invocation.
154 window.__gwt_disconnected = new Function();
155 // Do it in a timeout so we can be sure we have a clean stack.
156 window.setTimeout(__gwt_disconnected_impl, 1);
157 }
158
159 function __gwt_disconnected_impl() {
160 __gwt_displayGlassMessage('GWT Code Server Disconnected',
161 'Most likely, you closed GWT Development Mode. Or, you might have lost '
162 + 'network connectivity. To fix this, try restarting GWT Development Mode and '
163 + '<a style="color: #FFFFFF; font-weight: bold;" href="javascript:location.reload()">'
164 + 'REFRESH</a> this page.');
165 }
166
167 // Keep track of z-index to allow layering of multiple glass messages
168 var __gwt_glassMessageZIndex = 2147483647;
169
170 // Note this method is also used by ModuleSpace.java
171 function __gwt_displayGlassMessage(summary, details) {
172 var topWin = window.top;
173 var topDoc = topWin.document;
174 var outer = topDoc.createElement("div");
175 // Do not insert whitespace or outer.firstChild will get a text node.
176 outer.innerHTML =
177 '<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
178 ';left:50px;top:50px;width:600px;color:#FFF;font-family:verdana;text-align:left;">' +
179 '<div style="font-size:30px;font-weight:bold;">' + summary + '</div>' +
180 '<div style="font-size:15px;">' + details + '</div>' +
181 '</div>' +
182 '<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
183 ';left:0px;top:0px;right:0px;bottom:0px;filter:alpha(opacity=60);opacity:0.6;background-color:#000;"></div>'
184 ;
185 topDoc.body.appendChild(outer);
186 var glass = outer.firstChild;
187 var glassStyle = glass.style;
188
189 // Scroll to the top and remove scrollbars.
190 topWin.scrollTo(0, 0);
191 if (topDoc.compatMode == "BackCompat") {
192 topDoc.body.style["overflow"] = "hidden";
193 } else {
194 topDoc.documentElement.style["overflow"] = "hidden";
195 }
196
197 // Steal focus.
198 glass.focus();
199
200 if ((navigator.userAgent.indexOf("MSIE") >= 0) && (topDoc.compatMode == "BackCompat")) {
201 // IE quirks mode doesn't support right/bottom, but does support this.
202 glassStyle.width = "125%";
203 glassStyle.height = "100%";
204 } else if (navigator.userAgent.indexOf("MSIE 6") >= 0) {
205 // IE6 doesn't have a real standards mode, so we have to use hacks.
206 glassStyle.width = "125%"; // Get past scroll bar area.
207 // Nasty CSS; onresize would be better but the outer window won't let us add a listener IE.
208 glassStyle.setExpression("height", "document.documentElement.clientHeight");
209 }
210
211 $doc.title = summary + " [" + $doc.title + "]";
212 }
213
214 function findPluginObject() {
215 try {
216 return document.getElementById('pluginObject');
217 } catch (e) {
218 return null;
219 }
220 }
221
222 function findPluginEmbed() {
223 try {
224 return document.getElementById('pluginEmbed')
225 } catch (e) {
226 return null;
227 }
228 }
229
230 function findPluginXPCOM() {
231 try {
232 return __gwt_HostedModePlugin;
233 } catch (e) {
234 return null;
235 }
236 }
237
238 gwtOnLoad = function(errFn, modName, modBase){
239 $moduleName = modName;
240 $moduleBase = modBase;
241
242 // Note that the order is important
243 var pluginFinders = [
244 findPluginXPCOM,
245 findPluginObject,
246 findPluginEmbed,
247 ];
248 var topWin = window.top;
249 var url = topWin.location.href;
250 if (!topWin.__gwt_SessionID) {
251 var ASCII_EXCLAMATION = 33;
252 var ASCII_TILDE = 126;
253 var chars = [];
254 for (var i = 0; i < 16; ++i) {
255 chars.push(Math.floor(ASCII_EXCLAMATION
256 + Math.random() * (ASCII_TILDE - ASCII_EXCLAMATION + 1)));
257 }
258 topWin.__gwt_SessionID = String.fromCharCode.apply(null, chars);
259 }
260 var plugin = null;
261 for (var i = 0; i < pluginFinders.length; ++i) {
262 try {
263 var maybePlugin = pluginFinders[i]();
264 if (maybePlugin != null && maybePlugin.init(window)) {
265 plugin = maybePlugin;
266 break;
267 }
268 } catch (e) {
269 }
270 }
271 if (!plugin) {
272 // try searching for a v1 plugin for backwards compatibility
273 var found = false;
274 for (var i = 0; i < pluginFinders.length; ++i) {
275 try {
276 plugin = pluginFinders[i]();
277 if (plugin != null && plugin.connect($hosted, $moduleName, window)) {
278 return;
279 }
280 } catch (e) {
281 }
282 }
283 loadIframe("http://gwt.google.com/missing-plugin");
284 } else {
285 if (plugin.connect(url, topWin.__gwt_SessionID, $hosted, $moduleName,
286 $hostedHtmlVersion)) {
287 window.onUnload = function() {
288 try {
289 // wrap in try/catch since plugins are not required to supply this
290 plugin.disconnect();
291 } catch (e) {
292 }
293 };
294 } else {
295 if (errFn) {
296 errFn(modName);
297 } else {
298 __gwt_displayGlassMessage("Plugin failed to connect to Development Mode server at " +
299 simpleEscape($hosted),
300 "Follow the underlying troubleshooting instructions");
301 loadIframe("http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM");
302 }
303 }
304 }
305 }
306
307 function simpleEscape(originalString) {
308 return originalString.replace("&","&amp;")
309 .replace("<","&lt;")
310 .replace(">","&gt;")
311 .replace("\"","&quot;");
312 }
313
314 window.onunload = function() {
315 };
316
317 // Lightweight metrics
318 window.fireOnModuleLoadStart = function(className) {
319 $stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'onModuleLoadStart', className:className});
320 };
321
322 window.__gwt_module_id = 0;
323 </script></head>
324 <body>
325 <font face='arial' size='-1'>This html file is for Development Mode support.</font>
326 <script><!--
327 // Lightweight metrics
328 $stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'moduleEvalEnd'});
329
330 // OOPHM currently only supports IFrameLinker
331 var query = parent.location.search;
332 if (!findPluginXPCOM()) {
333 document.write('<embed id="pluginEmbed" type="application/x-gwt-hosted-mode" width="10" height="10">');
334 document.write('</embed>');
335 document.write('<object id="pluginObject" CLASSID="CLSID:1D6156B6-002B-49E7-B5CA-C138FB843B4E">');
336 document.write('</object>');
337 }
338
339 // look for the old query parameter if we don't find the new one
340 var idx = query.indexOf("gwt.codesvr=");
341 if (idx >= 0) {
342 idx += 12; // "gwt.codesvr=".length() == 12
343 } else {
344 idx = query.indexOf("gwt.hosted=");
345 if (idx >= 0) {
346 idx += 11; // "gwt.hosted=".length() == 11
347 }
348 }
349 if (idx >= 0) {
350 var amp = query.indexOf("&", idx);
351 if (amp >= 0) {
352 $hosted = query.substring(idx, amp);
353 } else {
354 $hosted = query.substring(idx);
355 }
356
357 // According to RFC 3986, some of this component's characters (e.g., ':')
358 // are reserved and *may* be escaped.
359 $hosted = decodeURIComponent($hosted);
360 }
361
362 query = window.location.search.substring(1);
363 if (query && $wnd[query]) setTimeout($wnd[query].onScriptLoad, 1);
364 --></script></body></html>