MediaWiki:Chatcode-Suche.js
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
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
/* * Ergänzt die Suchfunktion um Suchergebnisse für [[Chatcode]]s, solange die entsprechenden IDs eingetragen sind. */ $(document).ready(function() { if(mw.config.get('wgPageName') != 'Spezial:Suche') return; var searchTerm = $('#searchText input').val(); function decodeChatcode (code) { var binary = window.atob(code); var octets = new Array(binary.length); for (var i = 0; i < binary.length; i++) { octets[i] = binary.charCodeAt(i); } return octets; } var elements = []; var results = []; var match; var regx = /\[&([A-Za-z0-9+/]+=*)]/g; // find chatcodes while((match = regx.exec(searchTerm)) !== null) { var data = decodeChatcode(match[1]); // parse their type and id var id = data[2] << 8 | data[1]; var type = data[0]; if (type == 2) { id = data[3] << 8 | data[2]; id = (data.length > 4 ? data[4] << 16 : 0) | id; } if(type && id) { elements.push({type: type, id: id, code: match[0]}); } } if(elements.length > 0) { var list = $('<ul></ul>'); $.each(elements, function(index, value) { var li = $('<li><span style="font-family:monospace">' + value.code + ' </span></li>'); list.append(li); querySMW(value.type, value.id, li); }); var wrapper = $('<div class="chatcode-results" style="border: 1px solid silver; background: #f3f3f3; padding: 0.5em; margin-top: 1em;">Chatcodes in dieser Suche:</div>'); $(wrapper).append(list) $(wrapper).insertAfter( $('#mw-search-top-table') ); $('<div class="mw-search-visualclear"></div>').insertAfter( $('#mw-search-top-table') ); } function querySMW(type, id, element) { var query = ""; var type_name = ''; var unknown = false; switch(type) { case 2: // item query = "[[Hat Gegenstand-ID::" + id + "]]"; type_name = 'Gegenstand'; break; case 4: query = "[[Hat Schauplatz-ID::" + id + "]]"; type_name = 'Schauplatz'; // poi break; case 6: // skill query = "[[Hat Fertigkeit-ID::" + id + "]]"; type_name = 'Fertigkeit'; break; case 7: // trait query = "[[Hat Eigenschaft-ID::" + id + "]]"; type_name = 'Eigenschaft'; break; case 9: // recipe query = "[[Hat Rezept-ID::" + id + "]]"; type_name = 'Rezept'; break; case 10: // skin query = "[[Hat Skin-ID::" + id + "]]"; type_name = 'Skin'; break; case 11: // outfit query = "[[Hat Kleidungsset-ID::" + id + "]]"; type_name = 'Kleidungsset'; break; default: // unknown; unknown = true; } if(!unknown) { // run a query query += "|?Hat Anzeigename|limit=1"; window.mw.loader.using('mediawiki.api', function() { var api = new window.mw.Api(); params = {action: 'ask', query: query, format: 'json'}; api.get(params).done(function(data) { if(!jQuery.isEmptyObject(data.query.results)) { for(resultElement in data.query.results) { var code = data.query.results[resultElement].fullurl; var displayName = data.query.results[resultElement].printouts['Hat Anzeigename'][0]; var code = $('<span><a href="'+code+'">'+displayName+'</a> (#'+id+')</span>'); $(element).append(code); } } else { $(element).append('<span>Die Seite zu diesem Chatcode ('+ type_name + ' #' + id + ') wurde nicht gefunden. Falls du sie kennst, lege sie an oder trage die ID ein.</span>'); } }); }); } else { // unbekannt $(element).append('Das Format ['+type+'] dieses Chatcodes wird derzeit nicht unterstützt.'); } } });