Improve output: distinguish between failed assertions (failures) and unexpected exceptions (errors), and print a filtered stack trace for any exception.
This commit is contained in:
commit
4f2e303079
1839 changed files with 235630 additions and 0 deletions
360
webapp/web/src/hostenv_browser.js
Normal file
360
webapp/web/src/hostenv_browser.js
Normal file
|
@ -0,0 +1,360 @@
|
|||
/*
|
||||
Copyright (c) 2004-2006, The Dojo Foundation
|
||||
All Rights Reserved.
|
||||
|
||||
Licensed under the Academic Free License version 2.1 or above OR the
|
||||
modified BSD license. For more information on Dojo licensing, see:
|
||||
|
||||
http://dojotoolkit.org/community/licensing.shtml
|
||||
*/
|
||||
|
||||
if(typeof window == 'undefined'){
|
||||
dojo.raise("no window object");
|
||||
}
|
||||
|
||||
// attempt to figure out the path to dojo if it isn't set in the config
|
||||
(function() {
|
||||
// before we get any further with the config options, try to pick them out
|
||||
// of the URL. Most of this code is from NW
|
||||
if(djConfig.allowQueryConfig){
|
||||
var baseUrl = document.location.toString(); // FIXME: use location.query instead?
|
||||
var params = baseUrl.split("?", 2);
|
||||
if(params.length > 1){
|
||||
var paramStr = params[1];
|
||||
var pairs = paramStr.split("&");
|
||||
for(var x in pairs){
|
||||
var sp = pairs[x].split("=");
|
||||
// FIXME: is this eval dangerous?
|
||||
if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){
|
||||
var opt = sp[0].substr(9);
|
||||
try{
|
||||
djConfig[opt]=eval(sp[1]);
|
||||
}catch(e){
|
||||
djConfig[opt]=sp[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) &&(document && document.getElementsByTagName)){
|
||||
var scripts = document.getElementsByTagName("script");
|
||||
var rePkg = /(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
|
||||
for(var i = 0; i < scripts.length; i++) {
|
||||
var src = scripts[i].getAttribute("src");
|
||||
if(!src) { continue; }
|
||||
var m = src.match(rePkg);
|
||||
if(m) {
|
||||
var root = src.substring(0, m.index);
|
||||
if(src.indexOf("bootstrap1") > -1) { root += "../"; }
|
||||
if(!this["djConfig"]) { djConfig = {}; }
|
||||
if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; }
|
||||
if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; }
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// fill in the rendering support information in dojo.render.*
|
||||
var dr = dojo.render;
|
||||
var drh = dojo.render.html;
|
||||
var drs = dojo.render.svg;
|
||||
var dua = drh.UA = navigator.userAgent;
|
||||
var dav = drh.AV = navigator.appVersion;
|
||||
var t = true;
|
||||
var f = false;
|
||||
drh.capable = t;
|
||||
drh.support.builtin = t;
|
||||
|
||||
dr.ver = parseFloat(drh.AV);
|
||||
dr.os.mac = dav.indexOf("Macintosh") >= 0;
|
||||
dr.os.win = dav.indexOf("Windows") >= 0;
|
||||
// could also be Solaris or something, but it's the same browser
|
||||
dr.os.linux = dav.indexOf("X11") >= 0;
|
||||
|
||||
drh.opera = dua.indexOf("Opera") >= 0;
|
||||
drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0);
|
||||
drh.safari = dav.indexOf("Safari") >= 0;
|
||||
var geckoPos = dua.indexOf("Gecko");
|
||||
drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml);
|
||||
if (drh.mozilla) {
|
||||
// gecko version is YYYYMMDD
|
||||
drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14);
|
||||
}
|
||||
drh.ie = (document.all)&&(!drh.opera);
|
||||
drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0;
|
||||
drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0;
|
||||
drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0;
|
||||
drh.ie70 = drh.ie && dav.indexOf("MSIE 7.0")>=0;
|
||||
|
||||
// TODO: is the HTML LANG attribute relevant?
|
||||
dojo.locale = (drh.ie ? navigator.userLanguage : navigator.language).toLowerCase();
|
||||
|
||||
dr.vml.capable=drh.ie;
|
||||
drs.capable = f;
|
||||
drs.support.plugin = f;
|
||||
drs.support.builtin = f;
|
||||
if (document.implementation
|
||||
&& document.implementation.hasFeature
|
||||
&& document.implementation.hasFeature("org.w3c.dom.svg", "1.0")
|
||||
){
|
||||
drs.capable = t;
|
||||
drs.support.builtin = t;
|
||||
drs.support.plugin = f;
|
||||
}
|
||||
})();
|
||||
|
||||
dojo.hostenv.startPackage("dojo.hostenv");
|
||||
|
||||
dojo.render.name = dojo.hostenv.name_ = 'browser';
|
||||
dojo.hostenv.searchIds = [];
|
||||
|
||||
// These are in order of decreasing likelihood; this will change in time.
|
||||
dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
|
||||
|
||||
dojo.hostenv.getXmlhttpObject = function(){
|
||||
var http = null;
|
||||
var last_e = null;
|
||||
try{ http = new XMLHttpRequest(); }catch(e){}
|
||||
if(!http){
|
||||
for(var i=0; i<3; ++i){
|
||||
var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
|
||||
try{
|
||||
http = new ActiveXObject(progid);
|
||||
}catch(e){
|
||||
last_e = e;
|
||||
}
|
||||
|
||||
if(http){
|
||||
dojo.hostenv._XMLHTTP_PROGIDS = [progid]; // so faster next time
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*if(http && !http.toString) {
|
||||
http.toString = function() { "[object XMLHttpRequest]"; }
|
||||
}*/
|
||||
}
|
||||
|
||||
if(!http){
|
||||
return dojo.raise("XMLHTTP not available", last_e);
|
||||
}
|
||||
|
||||
return http;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the contents of the specified uri and return those contents.
|
||||
*
|
||||
* @param uri A relative or absolute uri. If absolute, it still must be in the
|
||||
* same "domain" as we are.
|
||||
*
|
||||
* @param async_cb If not specified, load synchronously. If specified, load
|
||||
* asynchronously, and use async_cb as the progress handler which takes the
|
||||
* xmlhttp object as its argument. If async_cb, this function returns null.
|
||||
*
|
||||
* @param fail_ok Default false. If fail_ok and !async_cb and loading fails,
|
||||
* return null instead of throwing.
|
||||
*/
|
||||
dojo.hostenv.getText = function(uri, async_cb, fail_ok){
|
||||
|
||||
var http = this.getXmlhttpObject();
|
||||
|
||||
if(async_cb){
|
||||
http.onreadystatechange = function(){
|
||||
if(4==http.readyState){
|
||||
if((!http["status"])||((200 <= http.status)&&(300 > http.status))){
|
||||
// dojo.debug("LOADED URI: "+uri);
|
||||
async_cb(http.responseText);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
http.open('GET', uri, async_cb ? true : false);
|
||||
try{
|
||||
http.send(null);
|
||||
if(async_cb){
|
||||
return null;
|
||||
}
|
||||
if((http["status"])&&((200 > http.status)||(300 <= http.status))){
|
||||
throw Error("Unable to load "+uri+" status:"+ http.status);
|
||||
}
|
||||
}catch(e){
|
||||
if((fail_ok)&&(!async_cb)){
|
||||
return null;
|
||||
}else{
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
return http.responseText;
|
||||
}
|
||||
|
||||
/*
|
||||
* It turns out that if we check *right now*, as this script file is being loaded,
|
||||
* then the last script element in the window DOM is ourselves.
|
||||
* That is because any subsequent script elements haven't shown up in the document
|
||||
* object yet.
|
||||
*/
|
||||
/*
|
||||
function dj_last_script_src() {
|
||||
var scripts = window.document.getElementsByTagName('script');
|
||||
if(scripts.length < 1){
|
||||
dojo.raise("No script elements in window.document, so can't figure out my script src");
|
||||
}
|
||||
var script = scripts[scripts.length - 1];
|
||||
var src = script.src;
|
||||
if(!src){
|
||||
dojo.raise("Last script element (out of " + scripts.length + ") has no src");
|
||||
}
|
||||
return src;
|
||||
}
|
||||
|
||||
if(!dojo.hostenv["library_script_uri_"]){
|
||||
dojo.hostenv.library_script_uri_ = dj_last_script_src();
|
||||
}
|
||||
*/
|
||||
|
||||
dojo.hostenv.defaultDebugContainerId = 'dojoDebug';
|
||||
dojo.hostenv._println_buffer = [];
|
||||
dojo.hostenv._println_safe = false;
|
||||
dojo.hostenv.println = function (line){
|
||||
if(!dojo.hostenv._println_safe){
|
||||
dojo.hostenv._println_buffer.push(line);
|
||||
}else{
|
||||
try {
|
||||
var console = document.getElementById(djConfig.debugContainerId ?
|
||||
djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId);
|
||||
if(!console) { console = document.getElementsByTagName("body")[0] || document.body; }
|
||||
|
||||
var div = document.createElement("div");
|
||||
div.appendChild(document.createTextNode(line));
|
||||
console.appendChild(div);
|
||||
} catch (e) {
|
||||
try{
|
||||
// safari needs the output wrapped in an element for some reason
|
||||
document.write("<div>" + line + "</div>");
|
||||
}catch(e2){
|
||||
window.status = line;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dojo.addOnLoad(function(){
|
||||
dojo.hostenv._println_safe = true;
|
||||
while(dojo.hostenv._println_buffer.length > 0){
|
||||
dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
|
||||
}
|
||||
});
|
||||
|
||||
function dj_addNodeEvtHdlr(node, evtName, fp, capture){
|
||||
var oldHandler = node["on"+evtName] || function(){};
|
||||
node["on"+evtName] = function(){
|
||||
fp.apply(node, arguments);
|
||||
oldHandler.apply(node, arguments);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/* Uncomment this to allow init after DOMLoad, not after window.onload
|
||||
|
||||
// Mozilla exposes the event we could use
|
||||
if (dojo.render.html.mozilla) {
|
||||
document.addEventListener("DOMContentLoaded", dj_load_init, null);
|
||||
}
|
||||
// for Internet Explorer. readyState will not be achieved on init call, but dojo doesn't need it
|
||||
//Tighten up the comments below to allow init after DOMLoad, not after window.onload
|
||||
/ * @cc_on @ * /
|
||||
/ * @if (@_win32)
|
||||
document.write("<script defer>dj_load_init()<"+"/script>");
|
||||
/ * @end @ * /
|
||||
*/
|
||||
|
||||
// default for other browsers
|
||||
// potential TODO: apply setTimeout approach for other browsers
|
||||
// that will cause flickering though ( document is loaded and THEN is processed)
|
||||
// maybe show/hide required in this case..
|
||||
// TODO: other browsers may support DOMContentLoaded/defer attribute. Add them to above.
|
||||
dj_addNodeEvtHdlr(window, "load", function(){
|
||||
// allow multiple calls, only first one will take effect
|
||||
if(arguments.callee.initialized){ return; }
|
||||
arguments.callee.initialized = true;
|
||||
|
||||
var initFunc = function(){
|
||||
//perform initialization
|
||||
if(dojo.render.html.ie){
|
||||
dojo.hostenv.makeWidgets();
|
||||
}
|
||||
};
|
||||
|
||||
if(dojo.hostenv.inFlightCount == 0){
|
||||
initFunc();
|
||||
dojo.hostenv.modulesLoaded();
|
||||
}else{
|
||||
dojo.addOnLoad(initFunc);
|
||||
}
|
||||
});
|
||||
|
||||
dj_addNodeEvtHdlr(window, "unload", function(){
|
||||
dojo.hostenv.unloaded();
|
||||
});
|
||||
|
||||
dojo.hostenv.makeWidgets = function(){
|
||||
// you can put searchIds in djConfig and dojo.hostenv at the moment
|
||||
// we should probably eventually move to one or the other
|
||||
var sids = [];
|
||||
if(djConfig.searchIds && djConfig.searchIds.length > 0) {
|
||||
sids = sids.concat(djConfig.searchIds);
|
||||
}
|
||||
if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {
|
||||
sids = sids.concat(dojo.hostenv.searchIds);
|
||||
}
|
||||
|
||||
if((djConfig.parseWidgets)||(sids.length > 0)){
|
||||
if(dojo.evalObjPath("dojo.widget.Parse")){
|
||||
// we must do this on a delay to avoid:
|
||||
// http://www.shaftek.org/blog/archives/000212.html
|
||||
// IE is such a tremendous peice of shit.
|
||||
var parser = new dojo.xml.Parse();
|
||||
if(sids.length > 0){
|
||||
for(var x=0; x<sids.length; x++){
|
||||
var tmpNode = document.getElementById(sids[x]);
|
||||
if(!tmpNode){ continue; }
|
||||
var frag = parser.parseElement(tmpNode, null, true);
|
||||
dojo.widget.getParser().createComponents(frag);
|
||||
}
|
||||
}else if(djConfig.parseWidgets){
|
||||
var frag = parser.parseElement(document.getElementsByTagName("body")[0] || document.body, null, true);
|
||||
dojo.widget.getParser().createComponents(frag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dojo.addOnLoad(function(){
|
||||
if(!dojo.render.html.ie) {
|
||||
dojo.hostenv.makeWidgets();
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
if (dojo.render.html.ie) {
|
||||
document.write('<style>v\:*{ behavior:url(#default#VML); }</style>');
|
||||
document.write('<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/>');
|
||||
}
|
||||
} catch (e) { }
|
||||
|
||||
// stub, over-ridden by debugging code. This will at least keep us from
|
||||
// breaking when it's not included
|
||||
dojo.hostenv.writeIncludes = function(){}
|
||||
|
||||
dojo.byId = function(id, doc){
|
||||
if(id && (typeof id == "string" || id instanceof String)){
|
||||
if(!doc){ doc = document; }
|
||||
return doc.getElementById(id);
|
||||
}
|
||||
return id; // assume it's a node
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue