New file |
0,0 → 1,355 |
<html> |
<head><script> |
var $wnd = parent; |
var $doc = $wnd.document; |
var $moduleName, $moduleBase, $entry |
,$stats = $wnd.__gwtStatsEvent ? function(a) {return $wnd.__gwtStatsEvent(a);} : null |
,$sessionId = $wnd.__gwtStatsSessionId ? $wnd.__gwtStatsSessionId : null; |
// Lightweight metrics |
if ($stats) { |
var moduleFuncName = location.search.substr(1); |
var moduleFunc = $wnd[moduleFuncName]; |
var moduleName = moduleFunc ? moduleFunc.moduleName : "unknown"; |
$stats({moduleName:moduleName,sessionId:$sessionId,subSystem:'startup',evtGroup:'moduleStartup',millis:(new Date()).getTime(),type:'moduleEvalStart'}); |
} |
var $hostedHtmlVersion="2.1"; |
|
var gwtOnLoad; |
var $hosted = "localhost:9997"; |
|
function loadIframe(url) { |
var topDoc = window.top.document; |
|
// create an iframe |
var iframeDiv = topDoc.createElement("div"); |
iframeDiv.innerHTML = "<iframe scrolling=no frameborder=0 src='" + url + "'>"; |
var iframe = iframeDiv.firstChild; |
|
// mess with the iframe style a little |
var iframeStyle = iframe.style; |
iframeStyle.position = "absolute"; |
iframeStyle.borderWidth = "0"; |
iframeStyle.left = "0"; |
iframeStyle.top = "0"; |
iframeStyle.width = "100%"; |
iframeStyle.backgroundColor = "#ffffff"; |
iframeStyle.zIndex = "1"; |
iframeStyle.height = "100%"; |
|
// update the top window's document's body's style |
var hostBodyStyle = window.top.document.body.style; |
hostBodyStyle.margin = "0"; |
hostBodyStyle.height = iframeStyle.height; |
hostBodyStyle.overflow = "hidden"; |
|
// insert the iframe |
topDoc.body.insertBefore(iframe, topDoc.body.firstChild); |
} |
|
var ua = navigator.userAgent.toLowerCase(); |
if (ua.indexOf("gecko") != -1) { |
// install eval wrapper on FF to avoid EvalError problem |
var __eval = window.eval; |
window.eval = function(s) { |
return __eval(s); |
} |
} |
if (ua.indexOf("chrome") != -1) { |
// work around __gwt_ObjectId appearing in JS objects |
var hop = Object.prototype.hasOwnProperty; |
Object.prototype.hasOwnProperty = function(prop) { |
return prop != "__gwt_ObjectId" && hop.call(this, prop); |
}; |
// do the same in our parent as well -- see issue 4486 |
// NOTE: this will have to be changed when we support non-iframe-based DevMode |
var hop2 = parent.Object.prototype.hasOwnProperty; |
parent.Object.prototype.hasOwnProperty = function(prop) { |
return prop != "__gwt_ObjectId" && hop2.call(this, prop); |
}; |
} |
|
// wrapper to call JS methods, which we need both to be able to supply a |
// different this for method lookup and to get the exception back |
function __gwt_jsInvoke(thisObj, methodName) { |
try { |
var args = Array.prototype.slice.call(arguments, 2); |
return [0, window[methodName].apply(thisObj, args)]; |
} catch (e) { |
return [1, e]; |
} |
} |
|
var __gwt_javaInvokes = []; |
function __gwt_makeJavaInvoke(argCount) { |
return __gwt_javaInvokes[argCount] || __gwt_doMakeJavaInvoke(argCount); |
} |
|
function __gwt_doMakeJavaInvoke(argCount) { |
// IE6 won't eval() anonymous functions except as r-values |
var argList = ""; |
for (var i = 0; i < argCount; i++) { |
argList += ",p" + i; |
} |
var argListNoComma = argList.substring(1); |
|
return eval( |
"__gwt_javaInvokes[" + argCount + "] =\n" + |
" function(thisObj, dispId" + argList + ") {\n" + |
" var result = __static(dispId, thisObj" + argList + ");\n" + |
" if (result[0]) {\n" + |
" throw result[1];\n" + |
" } else {\n" + |
" return result[1];\n" + |
" }\n" + |
" }\n" |
); |
} |
|
/* |
* This is used to create tear-offs of Java methods. Each function corresponds |
* to exactly one dispId, and also embeds the argument count. We get the "this" |
* value from the context in which the function is being executed. |
* Function-object identity is preserved by caching in a sparse array. |
*/ |
var __gwt_tearOffs = []; |
var __gwt_tearOffGenerators = []; |
function __gwt_makeTearOff(proxy, dispId, argCount) { |
return __gwt_tearOffs[dispId] || __gwt_doMakeTearOff(dispId, argCount); |
} |
|
function __gwt_doMakeTearOff(dispId, argCount) { |
return __gwt_tearOffs[dispId] = |
(__gwt_tearOffGenerators[argCount] || __gwt_doMakeTearOffGenerator(argCount))(dispId); |
} |
|
function __gwt_doMakeTearOffGenerator(argCount) { |
// IE6 won't eval() anonymous functions except as r-values |
var argList = ""; |
for (var i = 0; i < argCount; i++) { |
argList += ",p" + i; |
} |
var argListNoComma = argList.substring(1); |
|
return eval( |
"__gwt_tearOffGenerators[" + argCount + "] =\n" + |
" function(dispId) {\n" + |
" return function(" + argListNoComma + ") {\n" + |
" var result = __static(dispId, this" + argList + ");\n" + |
" if (result[0]) {\n" + |
" throw result[1];\n" + |
" } else {\n" + |
" return result[1];\n" + |
" }\n" + |
" }\n" + |
" }\n" |
); |
} |
|
function __gwt_makeResult(isException, result) { |
return [isException, result]; |
} |
|
function __gwt_disconnected() { |
// Prevent double-invocation. |
window.__gwt_disconnected = new Function(); |
// Do it in a timeout so we can be sure we have a clean stack. |
window.setTimeout(__gwt_disconnected_impl, 1); |
} |
|
function __gwt_disconnected_impl() { |
__gwt_displayGlassMessage('GWT Code Server Disconnected', |
'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.'); |
} |
|
// Keep track of z-index to allow layering of multiple glass messages |
var __gwt_glassMessageZIndex = 2147483647; |
|
// Note this method is also used by ModuleSpace.java |
function __gwt_displayGlassMessage(summary, details) { |
var topWin = window.top; |
var topDoc = topWin.document; |
var outer = topDoc.createElement("div"); |
// Do not insert whitespace or outer.firstChild will get a text node. |
outer.innerHTML = |
'<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- + |
';left:50px;top:50px;width:600px;color:#FFF;font-family:verdana;text-align:left;">' + |
'<div style="font-size:30px;font-weight:bold;">' + summary + '</div>' + |
'<div style="font-size:15px;">' + details + '</div>' + |
'</div>' + |
'<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- + |
';left:0px;top:0px;right:0px;bottom:0px;filter:alpha(opacity=60);opacity:0.6;background-color:#000;"></div>' |
; |
topDoc.body.appendChild(outer); |
var glass = outer.firstChild; |
var glassStyle = glass.style; |
|
// Scroll to the top and remove scrollbars. |
topWin.scrollTo(0, 0); |
if (topDoc.compatMode == "BackCompat") { |
topDoc.body.style["overflow"] = "hidden"; |
} else { |
topDoc.documentElement.style["overflow"] = "hidden"; |
} |
|
// Steal focus. |
glass.focus(); |
|
if ((navigator.userAgent.indexOf("MSIE") >= 0) && (topDoc.compatMode == "BackCompat")) { |
// IE quirks mode doesn't support right/bottom, but does support this. |
glassStyle.width = "125%"; |
glassStyle.height = "100%"; |
} else if (navigator.userAgent.indexOf("MSIE 6") >= 0) { |
// IE6 doesn't have a real standards mode, so we have to use hacks. |
glassStyle.width = "125%"; // Get past scroll bar area. |
// Nasty CSS; onresize would be better but the outer window won't let us add a listener IE. |
glassStyle.setExpression("height", "document.documentElement.clientHeight"); |
} |
|
$doc.title = summary + " [" + $doc.title + "]"; |
} |
|
function findPluginObject() { |
try { |
return document.getElementById('pluginObject'); |
} catch (e) { |
return null; |
} |
} |
|
function findPluginEmbed() { |
try { |
return document.getElementById('pluginEmbed') |
} catch (e) { |
return null; |
} |
} |
|
function findPluginXPCOM() { |
try { |
return __gwt_HostedModePlugin; |
} catch (e) { |
return null; |
} |
} |
|
gwtOnLoad = function(errFn, modName, modBase){ |
$moduleName = modName; |
$moduleBase = modBase; |
|
// Note that the order is important |
var pluginFinders = [ |
findPluginXPCOM, |
findPluginObject, |
findPluginEmbed, |
]; |
var topWin = window.top; |
var url = topWin.location.href; |
if (!topWin.__gwt_SessionID) { |
var ASCII_EXCLAMATION = 33; |
var ASCII_TILDE = 126; |
var chars = []; |
for (var i = 0; i < 16; ++i) { |
chars.push(Math.floor(ASCII_EXCLAMATION |
+ Math.random() * (ASCII_TILDE - ASCII_EXCLAMATION + 1))); |
} |
topWin.__gwt_SessionID = String.fromCharCode.apply(null, chars); |
} |
var plugin = null; |
for (var i = 0; i < pluginFinders.length; ++i) { |
try { |
var maybePlugin = pluginFinders[i](); |
if (maybePlugin != null && maybePlugin.init(window)) { |
plugin = maybePlugin; |
break; |
} |
} catch (e) { |
} |
} |
if (!plugin) { |
// try searching for a v1 plugin for backwards compatibility |
var found = false; |
for (var i = 0; i < pluginFinders.length; ++i) { |
try { |
plugin = pluginFinders[i](); |
if (plugin != null && plugin.connect($hosted, $moduleName, window)) { |
return; |
} |
} catch (e) { |
} |
} |
loadIframe("http://gwt.google.com/missing-plugin"); |
} else { |
if (plugin.connect(url, topWin.__gwt_SessionID, $hosted, $moduleName, |
$hostedHtmlVersion)) { |
window.onUnload = function() { |
try { |
// wrap in try/catch since plugins are not required to supply this |
plugin.disconnect(); |
} catch (e) { |
} |
}; |
} else { |
if (errFn) { |
errFn(modName); |
} else { |
alert("Plugin failed to connect to Development Mode server at " + $hosted); |
loadIframe("http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM"); |
} |
} |
} |
} |
|
window.onunload = function() { |
}; |
|
// Lightweight metrics |
window.fireOnModuleLoadStart = function(className) { |
$stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'onModuleLoadStart', className:className}); |
}; |
|
window.__gwt_module_id = 0; |
</script></head> |
<body> |
<font face='arial' size='-1'>This html file is for Development Mode support.</font> |
<script><!-- |
// Lightweight metrics |
$stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'moduleEvalEnd'}); |
|
// OOPHM currently only supports IFrameLinker |
var query = parent.location.search; |
if (!findPluginXPCOM()) { |
document.write('<embed id="pluginEmbed" type="application/x-gwt-hosted-mode" width="10" height="10">'); |
document.write('</embed>'); |
document.write('<object id="pluginObject" CLASSID="CLSID:1D6156B6-002B-49E7-B5CA-C138FB843B4E">'); |
document.write('</object>'); |
} |
|
// look for the old query parameter if we don't find the new one |
var idx = query.indexOf("gwt.codesvr="); |
if (idx >= 0) { |
idx += 12; // "gwt.codesvr=".length() == 12 |
} else { |
idx = query.indexOf("gwt.hosted="); |
if (idx >= 0) { |
idx += 11; // "gwt.hosted=".length() == 11 |
} |
} |
if (idx >= 0) { |
var amp = query.indexOf("&", idx); |
if (amp >= 0) { |
$hosted = query.substring(idx, amp); |
} else { |
$hosted = query.substring(idx); |
} |
|
// According to RFC 3986, some of this component's characters (e.g., ':') |
// are reserved and *may* be escaped. |
$hosted = decodeURIComponent($hosted); |
} |
|
query = window.location.search.substring(1); |
if (query && $wnd[query]) setTimeout($wnd[query].onScriptLoad, 1); |
--></script></body></html> |