Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
// <nowiki>

function maskRegex(text){
	return text.replace(/([\/\.\+\*\?\^\$\|\\\(\)\[\]\{\}])/g, "\\$1").replace(/\t/g, '\\t').replace(/\n/g, '\\n');
}

function findFirstOf(text, characters){
	var result = text.search(new RegExp('['+maskRegex(characters)+']'));
	if(result == -1) return text.length;
	return result;
}

function findLastOf(text, characters){
	var masked = maskRegex(characters);
	var result = text.search(new RegExp('['+masked+'][^'+masked+']*$'));
	if(result == -1) return text.length;
	return result;
}

function findFirstNotOf(text, characters){
	var result = text.search(new RegExp('[^'+maskRegex(characters)+']'));
	if(result == -1) return text.length;
	return result;
}

function findLastNotOf(text, characters){
	var masked = maskRegex(characters);
	var result = text.search(new RegExp('[^'+masked+']['+masked+']*$'));
	if(result == -1) return text.length;
	return result;
}

function trim(text, characters){
	var first  = findFirstNotOf(text, characters);
	var last   = findLastNotOf(text, characters);
	var length = last - first + (last == text.length ? 0 : 1);
	return text.substr(first, length);
}

function createLink(text, href){
	return $('<a href="'+href+'">'+text+'</a>');
}

function createStandardToolBox(){
	return $('<div id="JSExtensionToolBox" />').insertBefore($('#firstHeading'));
}

function getToolBox(){
	var box = $("#JSExtensionToolBox");
	if(!box.length) box = createStandardToolBox();
	return box;
}

function addToBox(box, element){
	var subBox = $('<div />');

	if($.isArray(element)){
		for(var i = 0; i < element.length; ++i){
			element[i].addClass('JSBoxElement');
			subBox.append(element[i]);
		}
	}else{
		subBox.append(element);
	}

	box.append(subBox);
}


// Eigene Map, solange mw.Map noch nicht vorhanden
function MyMap(){
	this.values={};
};

MyMap.prototype.get=function(selection,fallback){
	if(typeof selection==='object'){
		selection=$.makeArray(selection);
		var results={};
		for(var i=0;i<selection.length;i++){
			results[selection[i]]=this.get(selection[i],fallback);
		}
		return results;
	}else if(typeof selection==='string'){
		if(typeof this.values[selection]==='undefined'){
			if(typeof fallback!=='undefined'){
				return fallback;
			}
			return null;
		}
		return this.values[selection];
	}
	return this.values;
};

MyMap.prototype.set=function(selection,value){
	if(typeof selection==='object'){
		for(var s in selection){
			this.values[s]=selection[s];
		}
	}else if(typeof selection==='string'&&typeof value!=='undefined'){
		this.values[selection]=value;
	}
};

MyMap.prototype.exists=function(selection){
	if(typeof keys==='object'){
		for(var s=0;s<selection.length;s++){
			if(!(selection[s]in this.values)){
				return false;
			}
		}
		return true;
	}else{
		return selection in this.values;
	}
};

var JsonRequests = new MyMap();

function jsonRequest(uri, callback){
	if(JsonRequests.exists(uri)){
		var request = JsonRequests.get(uri);
		if($.isArray(request)){
			request.push(callback);
		}else{
			callback(request);
		}
	}else{
		JsonRequests.set(uri, [callback]);
		var complete = function(json){
			var callbacks = JsonRequests.get(uri);
			JsonRequests.set(uri, json);
			for(var i = 0; i < callbacks.length; ++i){
				callbacks[i](json);
			}
		}
		$.getJSON(uri, complete);
	}
}

mw.loader.load('https://de.wikibooks.org/w/index.php?title=Benutzer:Prog/Tools.css&action=raw&ctype=text/css', 'text/css');

// </nowiki>