Utilisateur:Delhovlyn/recursubst.js
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./*
* - RecurSubst -
*
* ¤ Ajoute un bouton dans la barre d'outils
* pour faire de la « substitution récursive »
* à partir d'un modèle (appliquer le préfixe
* subst: au modèle appelé ainsi qu'à tous
* les modèles imbriqués, et ainsi de suite).
*
* ¤ Auteur : Delhovlyn
*
* ¤ Compatibilité : Fonctionne avec Firefox et Safari,
* pas avec Opera ni Internet Explorer pour l'instant.
*
*/
//// Affichage du bouton ////
function addButtonRecursubst() {
var var1 = document.getElementById('toolbar');
if (var1) {
var1.innerHTML += '<a title="Substitution récursive" href="javascript:recursubst();"><img alt="Substitution récursive" style="cursor: pointer;" src="http://upload.wikimedia.org/wikipedia/commons/2/21/Button_invalid_template.png" border="0" height="22" width="23"></a>';
}
}
$(addButtonRecursubst);
//// Fonction appelée par le bouton ////
function recursubst() {
alert('Passe dans fonction recursubst.');
/* ###############################################
* Reprise fonction insertTags dans http://fr.wikipedia.org/skins-1.5/common/wikibits.js?141
* */
var txtarea;
if (document.editform) {
txtarea = document.editform.wpTextbox1;
} else {
var areas = document.getElementsByTagName('textarea');
txtarea = areas[0];
}
var selText, isSample = false;
if (document.selection && document.selection.createRange) { // IE/Opera
if (document.documentElement && document.documentElement.scrollTop)
var winScroll = document.documentElement.scrollTop
else if (document.body)
var winScroll = document.body.scrollTop;
txtarea.focus();
var range = document.selection.createRange();
selText = range.text;
range.select();
if (document.documentElement && document.documentElement.scrollTop)
document.documentElement.scrollTop = winScroll
else if (document.body)
document.body.scrollTop = winScroll;
} else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
var textScroll = txtarea.scrollTop;
txtarea.focus();
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
selText = txtarea.value.substring(startPos, endPos);
txtarea.scrollTop = textScroll;
}
// ###############################################
//// Faire la requête avec texte sélectionné si existant, sinon définir avec prompt ////
//if (selText) {
//makeRequest('http://fr.wikipedia.org/w/api.php?format=xml&action=expandtemplates&text=' + selText + '&title=' + mw.config.get('wgPageName'));
//} else {
var modele = encodeURI(window.prompt('Le modèle à substituer (avec accolades, et paramètres si nécessaire)','{{}}'));
if (modele != null) {
alert('On lance !');
makeRequest('http://fr.wikipedia.org/w/api.php?format=xml&action=expandtemplates&text=' + modele + '&title=' + mw.config.get('wgPageName'));
} else { alert('Ah ben non.'); }
alert('A lancé la requête.');
//}
}
//// Exécution de la requête ////
function makeRequest(url) {
alert('A commencé la requête.');
var httpRequest = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!httpRequest) {
alert('Abandon :( Impossible de créer une instance XMLHTTP');
return false;
}
httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
function alertContents(httpRequest) {
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
//// Si tout est OK : ////
alert('Commence le traitement du résultat.');
var texte = httpRequest.responseXML.childNodes[0].nodeValue;
var resultat = texte.substring(texte.lastIndexOf('"readonly">'),texte.lastIndexOf('</textarea>'));
resultat = resultat.substring(11);
resultat = resultat.replace(/</g,'<');
resultat = resultat.replace(/>/g,'>');
resultat = resultat.replace(/"/g,'\"');
resultat = resultat.replace(/&/g,'&');
/* ###############################################
* Reprise fonction insertTags dans http://fr.wikipedia.org/skins-1.5/common/wikibits.js?141
* */
var txtarea;
if (document.editform) {
txtarea = document.editform.wpTextbox1;
} else {
var areas = document.getElementsByTagName('textarea');
txtarea = areas[0];
}
var selText, isSample = false;
if (document.selection && document.selection.createRange) { // IE/Opera
if (document.documentElement && document.documentElement.scrollTop)
var winScroll = document.documentElement.scrollTop
else if (document.body)
var winScroll = document.body.scrollTop;
txtarea.focus();
var range = document.selection.createRange();
selText = range.text;
range.select();
if (document.documentElement && document.documentElement.scrollTop)
document.documentElement.scrollTop = winScroll
else if (document.body)
document.body.scrollTop = winScroll;
} else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
var textScroll = txtarea.scrollTop;
txtarea.focus();
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
selText = txtarea.value.substring(startPos, endPos);
txtarea.scrollTop = textScroll;
}
// ###############################################
document.body.style.cursor = "default";
//if (txtarea) {
//txtarea.value = txtarea.value.substring(0,startPos) + resultat + txtarea.value.substring(endPos);
//}
alert('Ouvre la fenêtre ?');
window.open('about:blank','newWindow','width=300px,height=150px');
//newWindow.title = 'Substitution récursive : résultat');
newWindow.document.write(resultat);
} else {
alert('Un problème est survenu avec la requête.');
}
}
if (httpRequest.readyState == 1 || httpRequest.readyState == 3) {
document.body.style.cursor = "progress";
}
}