User:Gerbrant/fw.js
new function()
{
var pathPrefix = "/w/index.php?title=User:";
var pathPostfix = ".js&action=raw&ctype=text/javascript&dontcountme=s";
var interPrefix1 = "http://";
var interPrefix2 = ".wikipedia.org/w/index.php?title=User:";
var ownClassName = "Gerbrant.fw";
var globalScope = window;
var frameworkFunctionsGlobal = true;
// -----------------------------------------------------------------------
this.version = "1.0.1";
this.revision = 1;
var loadingModules = {};
var loadedModules = {};
var thisModule = globalScope;
var bootModules = null;
var ids = ownClassName.split(".");
for(i in ids)
{
id = ids[i];
if(!defined(thisModule[id]))
{
thisModule = null;
break;
}
thisModule = thisModule[id];
}
if(thisModule)
{
if(defined(thisModule.loadModule)) return;
if(defined(thisModule.load))
bootModules = thisModule.load;
}
loadingModules[ownClassName] = [];
function warning(message)
{
alert("Framework warning message:\n\n" + message);
}
function defined(a)
{
return a != undefined;
}
function modulePath(moduleName)
{
return moduleName.replace(/\./g, "/") + pathPostfix;
}
this.loadModule = function(moduleName, callback)
{
var p = moduleName.indexOf(":"), inter;
if(p == -1)
p = pathPrefix;
else
{
inter = moduleName.slice(0, p);
moduleName = moduleName.slice(p + 1);
p = interPrefix1 + inter + interPrefix2;
}
var module = loadedModules[moduleName];
if(defined(module))
{
if(defined(callback)) callback(module);
return;
}
module = loadingModules[moduleName];
if(defined(module))
{
if(defined(callback)) module.push(callback);
return;
}
if(defined(callback)) callback = [callback];
else callback = [];
loadingModules[moduleName] = callback;
document.write("");
}
this.module = function(moduleName, module)
{
var i, ids, id, mid, scope = globalScope;
if(defined(loadedModules[moduleName]))
warning("Module " + moduleName + " is loaded more than once.");
else
{
loadedModules[moduleName] = module;
ids = moduleName.split(".");
mid = ids.pop();
for(i in ids)
{
id = ids[i];
if(!defined(scope[id]))
scope[id] = {};
scope = scope[id];
}
id = scope[mid];
if(defined(id))
for(i in module) id[i] = module[i];
else
scope[mid] = module;
}
var callbacks = loadingModules[moduleName];
delete loadingModules[moduleName];
if(defined(callbacks))
for(i in callbacks)
if(typeof callbacks[i] == "function")
callbacks[i](module, moduleName);
else
warning("One of the callbacks registered for " +
moduleName + " is not a function:\n" + callbacks[i]);
else
warning("Module " + moduleName + " finished loading without request.");
}
this.loadModules = function(moduleNames, callback)
{
var n = moduleNames.length, moduleList = {}, f;
if(defined(callback))
f = function(module, moduleName)
{
moduleList[moduleName] = module;
if(--n == 0) callback(moduleList);
};
for(i in moduleNames) loadModule(moduleNames[i], f);
}
if(frameworkFunctionsGlobal)
{
module = this.module;
loadModule = this.loadModule;
loadModules = this.loadModules;
}
this.module(ownClassName, this);
if(defined(bootModules)) this.loadModules(bootModules);
};