User:Arkanosis/aTrans.js

// TODO mettre les résultats en cache pour éviter plusieurs requêtes // TODO supporter d'autres langues que le français // TODO internationalisation

function aTransTranslate(destination) { var textBox = document.getElementById('wpTextbox1'); var panel = document.getElementById('aTransPanel');

textBox.value = textBox.value.replace(   new RegExp('\\[\\[([^\\]\\|]+)(?:\\|([^\\]]+))?\\]\\]', 'g'),    function(match, target, label) {      var xhr = sajax_init_object;      xhr.open('GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=query&prop=langlinks&titles=' + encodeURIComponent(target) + '&redirects&format=xml&lllimit=500', false);      xhr.send('');      var langLinks = xhr.responseXML.getElementsByTagName('langlinks');

if (!langLinks || !langLinks[0]) {       panel.innerHTML += ' ' + target + ' introuvable'; return  + (label ? label : target) + ; }

langLinks = langLinks[0].childNodes;

for (var langId = 0; langId < langLinks.length; ++langId) if (langLinks[langId].getAttribute('lang') == destination) {         var translation = langLinks[langId].firstChild.nodeValue; panel.innerHTML += ' ' + target + ' donne ' + translation; return  + (label ? label : target) + ; }

panel.innerHTML += ' ' + target + ' introuvable dans la langue demandée'; return  + (label ? label : target) + ; } ); }

function aTrans { if (wgAction == 'edit') {   var panel = document.createElement('p'); panel.setAttribute('id', 'aTransPanel'); panel.innerHTML = 'Traduire les liens vers fr '; document.getElementById('editpage-specialchars').parentNode.appendChild(panel); } }

$(aTrans);