MediaWiki:Gadget-MarkRedirects.js

aus Stargate Wiki, dem deutschsprachigen Stargate-Lexikon
Version vom 29. September 2015, 23:27 Uhr von Col. o'neill (Diskussion | Beiträge) (erstellt)
(Unterschied) ← Nächstältere Version | Aktuelle Version zeigen (Unterschied) | Nächstjüngere Version → (Unterschied)
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
//Redirects in den Wiki-Suchvorschlägen hervorheben
var observer;
var results={}; //lagert bereits geprüfte Seitennamen mit einem boolean für redirect ja/nein, um Zeit und Traffic fürs erneute Prüfen via API zu sparen
var curobj={}; //temporäres Objekt mit den API-Infos für die aktuell bearbeitete Seite
var titles=""; //sammelt alle via API zu prüfenden Seitentitel, um nicht für jeden Titel einzelne Abfragen machen zu müssen
$('#searchInput').focus(function(){
	if(observer===undefined){
		observer=new MutationObserver(function(mutations) {
			$('div.suggestions .suggestions-results .mw-searchSuggest-link').each(function(){
				if(results[$(this).attr('title')]===undefined) titles+="|"+$(this).attr('title');
			});
			if(titles.length){
				$.ajax({
					async: false, //sonst wird die Funktion zum Einfärben der redirect-Vorschläge ausgeführt, bevor alle Daten im results-Objekt gespeichert sind
					url: wgServer+wgScriptPath+'/api.php?action=query&titles='+titles.substring(1)+'&format=json&prop=info',
					success: function(d){
						if ('string' == typeof d) d = JSON.parse(d);
						for(var i=0; i<Object.keys(d.query.pages).length; i++){
							curobj=d.query.pages[Object.keys(d.query.pages)[i]];
							results[curobj.title]=(curobj.redirect!==undefined);
						}
					},
					dataType: 'json'
				});
				titles="";
			}
			$('div.suggestions .suggestions-results .mw-searchSuggest-link').each(function(){
				if(results[$(this).attr('title')]) $(this).children().css('background-color','#f4a7a7');
			});
		});
	}
	observer.observe(document.querySelector("div.suggestions .suggestions-results"),{childList: true});
});
$('#searchinput').blur(function(){
	if(observer!==undefined) observer.disconnect();
});