User:Gerbrant/mng/decache.js

new function {	var settings, isJsPage = wgPageName.slice(-3) == ".js"; try{ settings = Gerbrant.mng.decache;  }catch(nosettings){} if(!settings) settings = {}; if(!settings.onAllPages && !isJsPage) return;

var pathPrefix = "http://en.wikipedia.org/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 globalScope = window; var frameworkObject = Gerbrant.fw;

//     -

var self = this; var myWin = null, ul, thisJs; var jss = {}, chk = {}, i, fwLoad;

if(isJsPage && wgPageName.slice(0, 5) == "User:") {		thisJs = wgPageName.slice(5, -3).replace(/\//g, "."); jss[thisJs] = chk[thisJs] = true; }

jss[wgUserName + ".monobook"] = true; fwLoad = frameworkObject.load; if(fwLoad) for(i in fwLoad) jss[fwLoad[i]] = true;

var decacheLink = document.createElement("A"); decacheLink.innerHTML = "Remove selected items from cache.";

function modulePath(moduleName) {		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; }		return p + moduleName.replace(/\./g, "/") + pathPostfix; }

function updateLink {		var buffer = [], i;		for(i in chk) buffer.push(modulePath(i)); if(buffer.length) i = "gerbrant-decache:" + buffer.join("#"); else i = "#"; decacheLink.href = i;	}

function tieCbToJs(cb, js) {		cb.onclick = function {			if(cb.checked) chk[js] = true; else delete chk[js]; updateLink; }	}

function dumpJS(ul, js) {		var cb = document.createElement("INPUT"); cb.type = "CHECKBOX"; cb.checked = cb.defaultChecked = !!chk[js]; tieCbToJs(cb, js);

var t = document.createTextNode(js);

var li = document.createElement("LI"); li.appendChild(cb); li.appendChild(t); ul.appendChild(li); }

function refreshWindow {		var i;		ul.innerHTML = ""; for(i in jss) dumpJS(ul, i); updateLink; }

var oldLM = frameworkObject.loadModule; var newLM = function(moduleName, callback) {		if(!jss[moduleName]) jss[moduleName] = true; if(myWin != null) refreshWindow; oldLM(moduleName, callback); }	frameworkObject.loadModule = newLM; globalScope.loadModule = newLM;

this.show = function {		if(myWin == null) {			myWin = new Gerbrant.gui.window("Decache"); ul = document.createElement("UL"); var div = myWin.getContent; div.appendChild(ul); div.appendChild(decacheLink); }		refreshWindow; }	this.caption = "Decache";

loadModules(["Gerbrant.gui.window", "Gerbrant.gui.toolbox"], function	{		module("Gerbrant.mng.decache", self);		if(!settings.notInToolbox) Gerbrant.gui.toolbox.addObject(self);	}); }