blob: 04fd716f3d654945b307135462d325992dac95a1 [file] [log] [blame]
/*
* Copyright 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
/**
* A simplified version of computeScriptBase.js that's used only when running
* in Super Dev Mode. (We don't want the default version because it allows the
* web page to override it using a meta tag.)
*
* Prerequisite: we assume that the first script tag using a URL ending with
* "/__MODULE_NAME__.nocache.js" is the one that loaded us. Normally this happens
* because DevModeRedirectHook.js loaded this nocache.js script by prepending a
* script tag with an absolute URL to head. (However, it's also okay for an html
* file included in the GWT compiler's output to load the nocache.js file using
* a relative URL.)
*
* As a side effect, sets superdevmode on in the __gwt_activeModules registry.
*/
function computeScriptBase() {
// TODO(skybrian) This approach won't work for workers.
$wnd.__gwt_activeModules['__MODULE_NAME__'].superdevmode = true;
var expectedSuffix = '/__MODULE_NAME__.nocache.js';
var scriptTags = $doc.getElementsByTagName('script');
for (var i = 0;; i++) {
var tag = scriptTags[i];
if (!tag) {
break;
}
var candidate = tag.src;
var lastMatch = candidate.lastIndexOf(expectedSuffix);
if (lastMatch == candidate.length - expectedSuffix.length) {
// Assumes that either the URL is absolute, or it's relative
// and the html file is hosted by this code server.
return candidate.substring(0, lastMatch + 1);
}
}
$wnd.alert('Unable to load Super Dev Mode version of __MODULE_NAME__.');
return null;
}