Benutzer:Ghost/Ajax.js

aus Stargate Wiki, dem deutschsprachigen Stargate-Lexikon
Zur Navigation springen Zur Suche springen

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
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/*-----------------------------------------------------------------*\
||   Automatische Aktualisierung der Letzten Änderungen mit AJAX   ||
||                                                                 ||
|| Funktionsliste:                                                 ||
|| ajaxRC.init()         Initialisiert das Skript                  ||
|| ajaxRC.toggle();      Wenn das Kästchen angeklickt wird         ||
|| ajaxRC.load();        Lade den Code der Seite neu               ||
|| ajaxRC.parse();       Aktualisiere die Anzeige der Seite        ||
|| ajaxRC.disable();     Skript wird bei Inaktivität ausgeschaltet ||
|| ajaxRC.disableCheck();Skript wird bei Inaktivität ausgeschaltet ||
\*-----------------------------------------------------------------*/

//Setze Cookie, damit das Kästchen in Zukunft automatisch aktiviert ist
function setCookie(c_name,value,expiredays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name) {
	if (document.cookie.length>0) {
		var c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1) { 
			c_start=c_start + c_name.length+1;
			var c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end));
		}
	}
	return "";
}

var ajaxRC=new Object();
// CONFIG //
ajaxRC.ajaxPages=new Array("Special:RecentChanges", "Spezial:Letzte_Änderungen", "Spezial:Letzte Änderungen",
	"Special:Watchlist", "Spezial:Beobachtungsliste",
	"Special:Log", "Spezial:Logbuch",
	"Special:Contributions", "Spezial:Beiträge",
	"Special:Statistics", "Spezial:Statistik");//Seiten, die aktualisiert werden sollen
ajaxRC.refresh=30*1000;//Nach wie vielen Millisekunden die Seite erneut geladen werden soll
ajaxRC.regexp_crlf=new RegExp('\r|\n', "gm");
ajaxRC.regexp_start=new RegExp('^.*<div id="bodyContent"( class="mw-body")?>', "mi");
ajaxRC.regexp_end=new RegExp('<div class="visualClear">.*$', "mi");
// INIT-VARIABLES //
ajaxRC.activated=false;//Ob das Kästchen angeklickt ist
ajaxRC.disabled=false;//Ob Ajax nach fünf Minuten inaktiv wurde
ajaxRC.request=null;//Ajax-Request
ajaxRC.interval=null;//Intervall zum Laden der Seite
ajaxRC.disableTimeout=null;//Timer, bis Ajax inaktiv wird
ajaxRC.checkbox=null;//Kästchen-Element
ajaxRC.spinner=null;//Drehender Kreis-Element
ajaxRC.url=document.URL;//URL der Seite zum Laden
if (ajaxRC.url.indexOf("?")==-1) ajaxRC.url+="?nocache="; else ajaxRC.url+="&nocache=";//Seitencache verhindern
// FUNCTIONS //
ajaxRC.init=function() {//Fügt das Ankreuzkästchen am Anfang der Seite hinzu
	if (wgPageName=="Spezial:Letzte_Änderungen") document.getElementById("firstHeading").innerHTML="Letzte Änderungen";//Entfernt Spezial: aus der Überschrift bei den Letzten Änderungen
	document.getElementById("firstHeading").innerHTML+='<div style="float:right;height:1px;margin-top:.2em;"><img id="ajaxspinner" style="visibility:hidden;vertical-align:3%" src=" https://upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif" alt="Inhalt wird aktualisiert..." /> <span style="font-size:xx-small;vertical-align:middle">Automatische Aktualisierung:</span> <input type="checkbox" id="ajaxRCtoggle" onClick="ajaxRC.toggle();" style="vertical-align:12%"></div>';
	ajaxRC.checkbox=document.getElementById("ajaxRCtoggle");
	ajaxRC.spinner=document.getElementById("ajaxspinner");
	if (getCookie("ajaxload-"+wgPageName) == "on") {
		ajaxRC.checkbox.checked=true;
		ajaxRC.toggle();
	}
}
ajaxRC.toggle=function() {//Kästchen wurde angeklickt (sowohl Aktivierung wie auch Deaktivierung)
	ajaxRC.activated=ajaxRC.checkbox.checked;
	if (ajaxRC.activated==true) {//Aktivierung
		setCookie("ajaxload-"+wgPageName, "on", 30);
		ajaxRC.load();
		ajaxRC.interval=window.setInterval(ajaxRC.load, ajaxRC.refresh);
	} else {//Deaktvierung
		ajaxRC.request=null;
		ajaxRC.spinner.style.visibility="hidden";
		setCookie("ajaxload-"+wgPageName, "off", 30);
		window.clearInterval(ajaxRC.interval);
	}
}
ajaxRC.load=function() {//Starte eine Anfrage nach neuen Inhalten
	ajaxRC.request=getXmlHttpRequestObject();
	if (ajaxRC.request && (ajaxRC.request.readyState==0 || ajaxRC.request.readyState==4)) {
		ajaxRC.spinner.style.visibility="visible";
		ajaxRC.request.onreadystatechange=ajaxRC.parse;
		ajaxRC.request.open("GET", ajaxRC.url+Math.random(), true);
		ajaxRC.request.setRequestHeader("Cache-Control", "no-cache");
		ajaxRC.request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
		ajaxRC.request.send(null);
	}
}
ajaxRC.parse=function() {//Wenn Antwort kommt
	if (ajaxRC.request && ajaxRC.request.readyState==4) {
		ajaxRC.spinner.style.visibility="hidden";
		document.getElementById("bodyContent").innerHTML=ajaxRC.request.responseText.replace(ajaxRC.regexp_crlf,"").replace(ajaxRC.regexp_start,"").replace(ajaxRC.regexp_end,"");
		if (mw.special && mw.special.recentchanges) mw.special.recentchanges.init();//Initialisiere Namensraum-Element
		$("table.mw-collapsible").makeCollapsible();//Klappe erweiterte Letzte Änderungen ein
	}
}
ajaxRC.disable=function() {//Wenn die Seite nicht mehr angesehen wird
	ajaxRC.disabled=true;
	window.clearInterval(ajaxRC.interval);//Stoppe Aktualisierung
}
ajaxRC.disableCheck=function() {//Wenn die Maus 
	if (ajaxRC.activated==true) {
		if (ajaxRC.disabled==true) {
			ajaxRC.disabled=false;
			ajaxRC.load();
			ajaxRC.interval=window.setInterval(ajaxRC.load, ajaxRC.refresh);
		}
		window.clearTimeout(ajaxRC.disableTimeout);
		ajaxRC.disableTimeout=window.setTimeout(ajaxRC.disable,1000*60*5);//5 Minuten
	}
}

for (var j=0; j<ajaxRC.ajaxPages.length; j++) {//Prüft, ob aktuelle Seite AJAX-Aktualisierung enthalten soll, und fügt, falls ja, ein Kästchen ein
	if (wgPageName == ajaxRC.ajaxPages[j]) {
		addOnloadHook(ajaxRC.init);
		if (window.addEventListener) window.addEventListener("mousemove", ajaxRC.disableCheck, true);
		else if (window.attachEvent) window.attachEvent("onmousemove", ajaxRC.disableCheck);
		else window.onmousemove=ajaxRC.disableCheck();
		break;
	}
}