blob: f008bfcc365b8b4849d872bf874d6b5777683d76 [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
*/
dojo.hostenv.loadedUris.push("../src/bootstrap1.js");
dojo.hostenv.loadedUris.push("../src/loader.js");
dojo.hostenv.loadedUris.push("../src/hostenv_browser.js");
dojo.hostenv.loadedUris.push("../src/bootstrap2.js");
dojo.hostenv._loadedUrisListStart = dojo.hostenv.loadedUris.length;
function removeComments(contents){
contents = new String((!contents) ? "" : contents);
// clobber all comments
// FIXME broken if // or /* inside quotes or regexp
contents = contents.replace( /^(.*?)\/\/(.*)$/mg , "$1");
contents = contents.replace( /(\n)/mg , "__DOJONEWLINE");
contents = contents.replace( /\/\*(.*?)\*\//g , "");
return contents.replace( /__DOJONEWLINE/mg , "\n");
}
dojo.hostenv.getRequiresAndProvides = function(contents){
// FIXME: should probably memoize this!
if(!contents){ return []; }
// check to see if we need to load anything else first. Ugg.
var deps = [];
var tmp;
RegExp.lastIndex = 0;
var testExp = /dojo.(hostenv.loadModule|hostenv.require|require|requireIf|kwCompoundRequire|hostenv.conditionalLoadModule|hostenv.startPackage|provide)\([\w\W]*?\)/mg;
while((tmp = testExp.exec(contents)) != null){
deps.push(tmp[0]);
}
return deps;
}
dojo.hostenv.getDelayRequiresAndProvides = function(contents){
// FIXME: should probably memoize this!
if(!contents){ return []; }
// check to see if we need to load anything else first. Ugg.
var deps = [];
var tmp;
RegExp.lastIndex = 0;
var testExp = /dojo.(requireAfterIf)\([\w\W]*?\)/mg;
while((tmp = testExp.exec(contents)) != null){
deps.push(tmp[0]);
}
return deps;
}
/*
dojo.getNonExistantDescendants = function(objpath){
var ret = [];
// fast path for no periods
if(typeof objpath != "string"){ return dj_global; }
if(objpath.indexOf('.') == -1){
if(dj_undef(objpath, dj_global)){
ret.push[objpath];
}
return ret;
}
var syms = objpath.split(/\./);
var obj = dj_global;
for(var i=0;i<syms.length;++i){
if(dj_undef(syms[i], obj)){
for(var j=i; j<syms.length; j++){
ret.push(syms.slice(0, j+1).join("."));
}
break;
}
}
return ret;
}
*/
dojo.clobberLastObject = function(objpath){
if(objpath.indexOf('.') == -1){
if(!dj_undef(objpath, dj_global)){
delete dj_global[objpath];
}
return true;
}
var syms = objpath.split(/\./);
var base = dojo.evalObjPath(syms.slice(0, -1).join("."), false);
var child = syms[syms.length-1];
if(!dj_undef(child, base)){
// alert(objpath);
delete base[child];
return true;
}
return false;
}
var removals = [];
function zip(arr){
var ret = [];
var seen = {};
for(var x=0; x<arr.length; x++){
if(!seen[arr[x]]){
ret.push(arr[x]);
seen[arr[x]] = true;
}
}
return ret;
}
// over-write dj_eval to prevent actual loading of subsequent files
var old_dj_eval = dj_eval;
dj_eval = function(){ return true; }
dojo.hostenv.oldLoadUri = dojo.hostenv.loadUri;
dojo.hostenv.loadUri = function(uri, cb /*optional*/){
if(dojo.hostenv.loadedUris[uri]){
return true; // fixes endless recursion opera trac 471
}
try{
var text = this.getText(uri, null, true);
if(!text) { return false; }
if(cb){
// No way to load i18n bundles but to eval them, and they usually
// don't have script needing to be debugged anyway
var expr = old_dj_eval('('+text+')');
cb(expr);
}else {
var requires = dojo.hostenv.getRequiresAndProvides(text);
eval(requires.join(";"));
dojo.hostenv.loadedUris.push(uri);
dojo.hostenv.loadedUris[uri] = true;
var delayRequires = dojo.hostenv.getDelayRequiresAndProvides(text);
eval(delayRequires.join(";"));
}
}catch(e){
alert(e);
}
return true;
}
dojo.hostenv._writtenIncludes = {};
dojo.hostenv.writeIncludes = function(willCallAgain){
for(var x=removals.length-1; x>=0; x--){
dojo.clobberLastObject(removals[x]);
}
var depList = [];
var seen = dojo.hostenv._writtenIncludes;
for(var x=0; x<dojo.hostenv.loadedUris.length; x++){
var curi = dojo.hostenv.loadedUris[x];
// dojo.debug(curi);
if(!seen[curi]){
seen[curi] = true;
depList.push(curi);
}
}
dojo.hostenv._global_omit_module_check = true;
for(var x= dojo.hostenv._loadedUrisListStart; x<depList.length; x++){
document.write("<script type='text/javascript' src='"+depList[x]+"'></script>");
}
document.write("<script type='text/javascript'>dojo.hostenv._global_omit_module_check = false;</script>");
dojo.hostenv._loadedUrisListStart = 0;
if (!willCallAgain) {
// turn off debugAtAllCosts, so that dojo.require() calls inside of ContentPane hrefs
// work correctly
dj_eval = old_dj_eval;
dojo.hostenv.loadUri = dojo.hostenv.oldLoadUri;
}
}