MediaWiki:Recherche de code en jeu.js
Aller à la navigation
Aller à la recherche
Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
- Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
- Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
- Opera : appuyez sur Ctrl + F5.
// JavaScript source code /** window.atob & window.btoa polyfill * WTFPLv2 – https://github.com/davidchambers/Base64.js */ !function(){function t(t){this.message=t}var e=this,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";t.prototype=new Error,t.prototype.name="InvalidCharacterError",e.btoa||(e.btoa=function(e){for(var o,n,a=0,i=r,c="";e.charAt(0|a)||(i="=",a%1);c+=i.charAt(63&o>>8-a%1*8)){if(n=e.charCodeAt(a+=.75),n>255)throw new t("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");o=o<<8|n}return c}),e.atob||(e.atob=function(e){if(e=e.replace(/=+$/,""),e.length%4==1)throw new t("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,n,a=0,i=0,c="";n=e.charAt(i++);~n&&(o=a%4?64*o+n:n,a++%4)?c+=String.fromCharCode(255&o>>(-2*a&6)):0)n=r.indexOf(n);return c})}(); /** * Recherche de code en jeu * * Décode les codes en jeu de Guild Wars 2 en ID et recherche * leur existence sur le wiki grâce à l'Attribut:A l'ID en jeu * * by Patrick Westerhoff [User:Poke] * * Ajout de la fonction recherche de nom dans l'API pour les objets n'existant pas * Traduit et ajouts par Utilisateur:IruleManik */ (function chatLinkSearch (window, document, $) { var searchBar = document.querySelector('#searchText input'); if (!searchBar) { return; } var mwApi; function smwAskArticle (type, id, callback) { var apiData = { action: 'ask', query: '?Nom|?Type|limit=1|' }; var query = "[[A l'ID en jeu::" + id + ']]'; if (type == 'objet') { query += '[[Type::Objet]]'; } else if (type == 'élément explorable') { query += '[[Type::Élément explorable]]'; } else if (type == 'compétence') { query = query + '[[Type::Compétence]]'; } else if (type == 'aptitude') { query += '[[Type::Aptitude]]'; } else if (type == 'recette') { query += '[[Type::Recette]][[Type de recette::+]]'; } else if (type == 'apparence de la garde-robe') { query += '[[Type::Apparence de la garde-robe]]'; } apiData.query += query; mwApi.get(apiData) .done(function (data) { if (data.query.results.length === 0) { callback(null); } else { for (var title in data.query.results) { var canonicalName = data.query.results[title].printouts['Nom'][0]; var gameContexts = data.query.results[title].printouts['Type'] callback(title, canonicalName, gameContexts.length ? gameContexts[0] : null); return; } } }) .fail(function (data) { callback(null); }); } function decodeChatLink (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; } function display (code, listItem) { var data = decodeChatLink(code); var id = data[2] << 8 | data[1]; var type; if (data[0] == 2) { type = 'objet'; id = data[3] << 8 | data[2]; id = (data.length > 4 ? data[4] << 16 : 0) | id; } else if (data[0] == 4) { type = 'élément explorable'; } else if (data[0] == 6) { type = 'compétence'; } else if (data[0] == 7) { type = 'aptitude'; } else if (data[0] == 9) { type = 'recette'; } else if (data[0] == 10) { type = 'apparence de la garde-robe'; } else { var span = document.createElement('span'); span.innerHTML = 'Ce code en jeu n\'est pas supporté.'; console.log('Code en jeu non supporté. (TYPE '+data[0]+' / ID #'+id+')'); $(span).fadeIn(1000).appendTo(listItem); return; } smwAskArticle(type, id, function (title, canonicalName, gameContext) { var span = document.createElement('span'); if (title) { // If a single chatlink returns a single result, redirect to that page // but don't redirect if it contains anything except a chatlink, e.g. interwiki prefix if ($('.mw-search-nonefound').length == 1 && searchBar.value.match(/^\[&[A-Za-z0-9+/=]+\]$/)) { // Redirect only once for the current browsing session for that precise result var key = 'searchredirected-' + searchBar.value; try { if (!sessionStorage.getItem(key)) { sessionStorage.setItem(key, 'true'); document.location = '/index.php?title=' + encodeURIComponent(title.replace(/ /g, '_')); } } catch (e) { // This might throw if session storage is disabled or unsupported. Just don't redirect if so. } } var link = document.createElement('a'); link.href = '/wiki/' + encodeURIComponent(title.replace(/ /g, '_')); link.title = title; link.innerHTML = canonicalName || title; span.appendChild(link); if (type == 'skill' && gameContext == 'Effect') { type = 'effect'; } span.appendChild(document.createTextNode(' (' + type + ' #' + id + ')')); } else { var msg = ''; if (type == 'objet') { $.getJSON("https://api.guildwars2.com/v2/items/" + id + "?lang=fr", function (reponse) { if (reponse.name) { var Pageàcréer = reponse.name msg += 'Aucun article avec l\'ID ' + id + ' n\'a été trouvé. <br />Si vous connaissez l\'objet <a href="/wiki/' + Pageàcréer + '" title="' + Pageàcréer + '">' + Pageàcréer + '</a>, vous pouvez créer la page grâce au <a href="http://karaknor.alwaysdata.net/" title=" + Générateur de pages d\'objets">Générateur de pages d\'objet</a> ou rajouter l\'ID si celle-ci est manquante à cette dernière.'; span.innerHTML = msg; } }).fail(function() { msg += 'L\'ID ' + id + ' ne retourne aucun résultat ni dans l\'API de Guild Wars 2 ni sur le wiki.'; span.innerHTML = msg; }) } else if (type == 'recette') { msg += 'Aucun article avec l\'ID ' + id + ' n\'a été trouvé. Si vous connaissez cette recette, vous pouvez l\'ajouter sur la page de l\'objet correspondant ou ajouter l\'ID.'; span.innerHTML = msg; } else { msg += 'Aucun article avec l\'ID ' + id + ' n\'a été trouvé. Si vous connaissez cet élément, vous pouvez créer l\'article ou rajouter l\'ID à la page en question si cette dernière n\'en a pas.'; span.innerHTML = msg; } $(span).fadeIn(1000).appendTo(listItem); } }); } window.mw.loader.using('mediawiki.api', function() { mwApi = new window.mw.Api(); // find chat links var ul = document.createElement('ul'); var expr = /\[&([A-Za-z0-9+/]+=*)\]/g; var match; while ((match = expr.exec(searchBar.value))) { var li = document.createElement('li'); li.innerHTML = '<tt>' + match[0] + '</tt>'; ul.appendChild(li); display(match[1], li); } // display results if (ul.children.length) { var div = document.createElement('div'); div.className = 'gw2w-chat-link-search'; div.innerHTML = 'Le <a href="/wiki/Code_en_jeu" title="Code en jeu">code en jeu</a> suivant a été ajouté à la requête :'; div.appendChild(ul); var topTable = document.getElementById('mw-search-top-table'); $(div).hide().insertAfter(topTable).show('fast'); } }); })(window, document, $);