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);

};