blob: 08c2d5351234311945f13e1421a7e11154f79224 [file] [log] [blame]
/*
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("attempt to use adobe svg hostenv when no window object");
}
with (dojo.render) {
name = navigator.appName;
ver = parseFloat(navigator.appVersion, 10);
switch (navigator.platform) {
case "MacOS":
os.osx = true;
break;
case "Linux":
os.linux = true;
break;
case "Windows":
os.win = true;
break;
default:
os.linux = true;
break;
}
svg.capable = true;
svg.support.builtin = true;
svg.adobe = true;
}
dojo.hostenv.println = function (s) {
try {
var ti = document.createElement("text");
ti.setAttribute("x", "50");
var yPos = 25 + 15 * document.getElementsByTagName("text").length;
ti.setAttribute("y", yPos);
var tn = document.createTextNode(s);
ti.appendChild(tn);
document.documentElement.appendChild(ti);
}
catch (e) {
}
};
dojo.debug = function () {
if (!djConfig.isDebug) {
return;
}
var args = arguments;
if (typeof dojo.hostenv.println != "function") {
dojo.raise("attempt to call dojo.debug when there is no dojo.hostenv println implementation (yet?)");
}
var isJUM = dj_global["jum"];
var s = isJUM ? "" : "DEBUG: ";
for (var i = 0; i < args.length; ++i) {
s += args[i];
}
if (isJUM) {
jum.debug(s);
} else {
dojo.hostenv.println(s);
}
};
dojo.hostenv.startPackage("dojo.hostenv");
dojo.hostenv.name_ = "adobesvg";
dojo.hostenv.anonCtr = 0;
dojo.hostenv.anon = {};
dojo.hostenv.nameAnonFunc = function (anonFuncPtr, namespaceObj) {
var ret = "_" + this.anonCtr++;
var nso = (namespaceObj || this.anon);
while (typeof nso[ret] != "undefined") {
ret = "_" + this.anonCtr++;
}
nso[ret] = anonFuncPtr;
return ret;
};
dojo.hostenv.modulesLoadedFired = false;
dojo.hostenv.modulesLoadedListeners = [];
dojo.hostenv.getTextStack = [];
dojo.hostenv.loadUriStack = [];
dojo.hostenv.loadedUris = [];
dojo.hostenv.modulesLoaded = function () {
if (this.modulesLoadedFired) {
return;
}
if ((this.loadUriStack.length == 0) && (this.getTextStack.length == 0)) {
if (this.inFlightCount > 0) {
dojo.debug("couldn't initialize, there are files still in flight");
return;
}
this.modulesLoadedFired = true;
var mll = this.modulesLoadedListeners;
for (var x = 0; x < mll.length; x++) {
mll[x]();
}
}
};
dojo.hostenv.getNewAnonFunc = function () {
var ret = "_" + this.anonCtr++;
while (typeof this.anon[ret] != "undefined") {
ret = "_" + this.anonCtr++;
}
eval("dojo.nostenv.anon." + ret + " = function(){};");
return [ret, this.anon[ret]];
};
dojo.hostenv.displayStack = function () {
var oa = [];
var stack = this.loadUriStack;
for (var x = 0; x < stack.length; x++) {
oa.unshift([stack[x][0], (typeof stack[x][2])]);
}
dojo.debug("<pre>" + oa.join("\n") + "</pre>");
};
dojo.hostenv.unwindUriStack = function () {
var stack = this.loadUriStack;
for (var x in dojo.hostenv.loadedUris) {
for (var y = stack.length - 1; y >= 0; y--) {
if (stack[y][0] == x) {
stack.splice(y, 1);
}
}
}
var next = stack.pop();
if ((!next) && (stack.length == 0)) {
return;
}
for (var x = 0; x < stack.length; x++) {
if ((stack[x][0] == next[0]) && (stack[x][2])) {
next[2] == stack[x][2];
}
}
var last = next;
while (dojo.hostenv.loadedUris[next[0]]) {
last = next;
next = stack.pop();
}
while (typeof next[2] == "string") {
try {
dj_eval(next[2]);
next[1](true);
}
catch (e) {
dojo.debug("we got an error when loading " + next[0]);
dojo.debug("error: " + e);
}
dojo.hostenv.loadedUris[next[0]] = true;
dojo.hostenv.loadedUris.push(next[0]);
last = next;
next = stack.pop();
if ((!next) && (stack.length == 0)) {
break;
}
while (dojo.hostenv.loadedUris[next[0]]) {
last = next;
next = stack.pop();
}
}
if (next) {
stack.push(next);
dojo.debug("### CHOKED ON: " + next[0]);
}
};
dojo.hostenv.loadUri = function (uri, cb) {
if (dojo.hostenv.loadedUris[uri]) {
return;
}
var stack = this.loadUriStack;
stack.push([uri, cb, null]);
var tcb = function (contents) {
if (contents.content) {
contents = contents.content;
}
var next = stack.pop();
if ((!next) && (stack.length == 0)) {
dojo.hostenv.modulesLoaded();
return;
}
if (typeof contents == "string") {
stack.push(next);
for (var x = 0; x < stack.length; x++) {
if (stack[x][0] == uri) {
stack[x][2] = contents;
}
}
next = stack.pop();
}
if (dojo.hostenv.loadedUris[next[0]]) {
dojo.hostenv.unwindUriStack();
return;
}
stack.push(next);
if (next[0] != uri) {
if (typeof next[2] == "string") {
dojo.hostenv.unwindUriStack();
}
} else {
if (!contents) {
next[1](false);
} else {
var deps = dojo.hostenv.getDepsForEval(next[2]);
if (deps.length > 0) {
eval(deps.join(";"));
} else {
dojo.hostenv.unwindUriStack();
}
}
}
};
this.getText(uri, tcb, true);
};
dojo.hostenv.loadModule = function (modulename, exact_only, omit_module_check) {
var module = this.findModule(modulename, 0);
if (module) {
return module;
}
if (typeof this.loading_modules_[modulename] !== "undefined") {
dojo.debug("recursive attempt to load module '" + modulename + "'");
} else {
this.addedToLoadingCount.push(modulename);
}
this.loading_modules_[modulename] = 1;
var relpath = modulename.replace(/\./g, "/") + ".js";
var syms = modulename.split(".");
var nsyms = modulename.split(".");
if (syms[0] == "dojo") {
syms[0] = "src";
}
var last = syms.pop();
syms.push(last);
var _this = this;
var pfn = this.pkgFileName;
if (last == "*") {
modulename = (nsyms.slice(0, -1)).join(".");
var module = this.findModule(modulename, 0);
if (module) {
_this.removedFromLoadingCount.push(modulename);
return module;
}
var nextTry = function (lastStatus) {
if (lastStatus) {
module = _this.findModule(modulename, false);
if ((!module) && (syms[syms.length - 1] != pfn)) {
dojo.raise("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'");
}
if (module) {
_this.removedFromLoadingCount.push(modulename);
dojo.hostenv.modulesLoaded();
return;
}
}
syms.pop();
syms.push(pfn);
relpath = syms.join("/") + ".js";
if (relpath.charAt(0) == "/") {
relpath = relpath.slice(1);
}
_this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
};
nextTry();
} else {
relpath = syms.join("/") + ".js";
modulename = nsyms.join(".");
var nextTry = function (lastStatus) {
if (lastStatus) {
module = _this.findModule(modulename, false);
if ((!module) && (syms[syms.length - 1] != pfn)) {
dojo.raise("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'");
}
if (module) {
_this.removedFromLoadingCount.push(modulename);
dojo.hostenv.modulesLoaded();
return;
}
}
var setPKG = (syms[syms.length - 1] == pfn) ? false : true;
syms.pop();
if (setPKG) {
syms.push(pfn);
}
relpath = syms.join("/") + ".js";
if (relpath.charAt(0) == "/") {
relpath = relpath.slice(1);
}
_this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
};
this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
}
return;
};
dojo.hostenv.async_cb = null;
dojo.hostenv.unWindGetTextStack = function () {
if (dojo.hostenv.inFlightCount > 0) {
setTimeout("dojo.hostenv.unWindGetTextStack()", 100);
return;
}
dojo.hostenv.inFlightCount++;
var next = dojo.hostenv.getTextStack.pop();
if ((!next) && (dojo.hostenv.getTextStack.length == 0)) {
dojo.hostenv.inFlightCount--;
dojo.hostenv.async_cb = function () {
};
return;
}
dojo.hostenv.async_cb = next[1];
window.getURL(next[0], function (result) {
dojo.hostenv.inFlightCount--;
dojo.hostenv.async_cb(result.content);
dojo.hostenv.unWindGetTextStack();
});
};
dojo.hostenv.getText = function (uri, async_cb, fail_ok) {
try {
if (async_cb) {
dojo.hostenv.getTextStack.push([uri, async_cb, fail_ok]);
dojo.hostenv.unWindGetTextStack();
} else {
return dojo.raise("No synchronous XMLHTTP implementation available, for uri " + uri);
}
}
catch (e) {
return dojo.raise("No XMLHTTP implementation available, for uri " + uri);
}
};
dojo.hostenv.postText = function (uri, async_cb, text, fail_ok, mime_type, encoding) {
var http = null;
var async_callback = function (httpResponse) {
if (!httpResponse.success) {
dojo.raise("Request for uri '" + uri + "' resulted in " + httpResponse.status);
}
if (!httpResponse.content) {
if (!fail_ok) {
dojo.raise("Request for uri '" + uri + "' resulted in no content");
}
return null;
}
async_cb(httpResponse.content);
};
try {
if (async_cb) {
http = window.postURL(uri, text, async_callback, mimeType, encoding);
} else {
return dojo.raise("No synchronous XMLHTTP post implementation available, for uri " + uri);
}
}
catch (e) {
return dojo.raise("No XMLHTTP post implementation available, for uri " + uri);
}
};
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 li = scripts.length - 1;
var xlinkNS = "http://www.w3.org/1999/xlink";
var src = null;
var script = null;
while (!src) {
script = scripts.item(li);
src = script.getAttributeNS(xlinkNS, "href");
li--;
if (li < 0) {
break;
}
}
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.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");