MediaWiki:Common.js

//192.168.254.24//192.168.254.24//192.168.254.24//192.168.254.24//192.168.254.24/* N’importe quel JavaScript ici sera chargé pour n’importe quel utilisateur et pour chaque page accédée. */ /*

infobulles et touches d’accès
*/ var ta = new Object; ta['pt-userpage'] = new Array('.','Ma page utilisateur'); ta['pt-anonuserpage'] = new Array('.','La page utilisateur de l’IP avec laquelle vous contribuez'); ta['pt-mytalk'] = new Array('n','Ma page de discussion'); ta['pt-anontalk'] = new Array('n','Discussion à propos des modifications depuis cette adresse IP'); ta['pt-preferences'] = new Array('','Mes préférences'); ta['pt-watchlist'] = new Array('l','liste des pages dont vous suivez les modifications.'); ta['pt-mycontris'] = new Array('y','Liste de mes contributions'); ta['pt-login'] = new Array('o','Vous êtes invité à vous identifier, mais ce n’est pas obligatoire.'); ta['pt-anonlogin'] = new Array('o','Vous êtes invité à vous identifier, mais ce n’est pas obligatoire.'); ta['pt-logout'] = new Array('o','Se déconnecter'); ta['ca-talk'] = new Array('t','Discussion à propos de l’article'); ta['ca-edit'] = new Array('e','Vous pouvez modifier cette page. Merci d’utiliser le bouton de prévisualisation avant de sauvegarder.'); ta['ca-addsection'] = new Array('+','Ajouter un commentaire à cette discussion.'); ta['ca-viewsource'] = new Array('e','Cette page est protégée. Vous pouvez voir sa source.'); ta['ca-history'] = new Array('h','Anciennes versions de cette page.'); ta['ca-protect'] = new Array('=','Protéger cette page'); ta['ca-delete'] = new Array('d','Supprimer cette page'); ta['ca-undelete'] = new Array('d','Restaurer les modifications effectuées sur cette page avant sa suppression'); ta['ca-move'] = new Array('m','Renommer cette page'); ta['ca-watch'] = new Array('w','Ajouter cette page à votre liste de suivi'); ta['ca-unwatch'] = new Array('w','Retirer cette page de votre liste de suivi'); ta['search'] = new Array('f','Chercher dans ce wiki'); ta['p-logo'] = new Array('','Page principale'); ta['n-mainpage'] = new Array('z','Visitez la page principale'); ta['n-portal'] = new Array('','À propos de ce projet, ce que vous pouvez faire, où trouver les choses'); ta['n-currentevents'] = new Array('','Trouver des informations sur les évènements actuels'); ta['n-recentchanges'] = new Array('r','Liste des changements récents sur le wiki'); ta['n-randompage'] = new Array('x','Charger une page aléatoire'); ta['n-help'] = new Array('','Aide'); ta['n-sitesupport'] = new Array('','Aidez-nous'); ta['t-whatlinkshere'] = new Array('j','Liste de tous les wikis qui lient vers cette page'); ta['t-recentchangeslinked'] = new Array('k','Changements récents dans les pages qui lient vers cette page'); ta['feed-rss'] = new Array('','Flux RSS pour cette page'); ta['feed-atom'] = new Array('','Flux Atom pour cette page'); ta['t-contributions'] = new Array('','Voir la liste de contributions de cet utilisateur'); ta['t-emailuser'] = new Array('','Envoyer un courriel à cet utilisateur'); ta['t-upload'] = new Array('u','Télécharger une image ou des fichiers'); ta['t-specialpages'] = new Array('q','Liste de toutes les pages spéciales'); ta['ca-nstab-main'] = new Array('c','Voir l’article'); ta['ca-nstab-user'] = new Array('c','Voir la page utilisateur'); ta['ca-nstab-media'] = new Array('c','Voir la page du média'); ta['ca-nstab-special'] = new Array('','Ceci est une page spéciale, vous ne pouvez la modifier.'); ta['ca-nstab-project'] = new Array('a','Voir la page du projet'); ta['ca-nstab-image'] = new Array('c','Voir la page de l’image'); ta['ca-nstab-mediawiki'] = new Array('c','Voir le message système'); ta['ca-nstab-template'] = new Array('c','Voir le modèle'); ta['ca-nstab-help'] = new Array('c','Voir la page d’aide'); ta['ca-nstab-category'] = new Array('c','Voir la page de la catégorie');

/*

Générateur de tableaux
*/

/** * * English: Generate an array using Mediawiki syntax * * @author: fr:user:dake * @version: 0.1 */ function generateTableau(nbCol, nbRow, border, styleHeader, styleLine) {       var code = "\n"; if (styleHeader==1) { code += '\n'; } else { code += '{| border="' + border + '"\n'; code += '|+ Titre du tableau\n'; }       for (var i=0;i<nbCol;i++) code += '! en-tête ' + i + '\n' for (var j=0;j<nbRow;j++) { if ((j+1)%2==0 && styleLine==1) { code += '|-{'+'{ligne grise}'+'}\n' } else { code += '|-\n' }               for (var i=0;ifunction insertCode{'; javaCode += 'var row = parseInt(document.paramForm.inputRow.value); ' javaCode += 'var col = parseInt(document.paramForm.inputCol.value); ' javaCode += 'var bord = parseInt(document.paramForm.inputBorder.value); ' javaCode += 'var styleHeader = document.paramForm.inputHeader.checked; ' javaCode += 'var styleLine = document.paramForm.inputLine.checked; ' javaCode += 'window.opener.generateTableau(col,row,bord,styleHeader,styleLine); ' javaCode += '}<\/script>'; popup.document.write('  Paramètres du tableau '); popup.document.write('<\/script>'); popup.document.write('/*<![CDATA[*/ @import "\/skins-1.5\/monobook\/main.css?5"; /*]]>*/<\/style>'); popup.document.write(javaCode); popup.document.write(' '); popup.document.write(' Veuillez entrer les paramètres du tableau : '); popup.document.write(''); popup.document.write('Nombre de lignes :  '); popup.document.write('Nombre de colonnes :  '); popup.document.write('Largeur de la bordure :  '); popup.document.write('En-tête en gris (style « charte graphique ») :  '); popup.document.write('Lignes grises alternées (style « charte graphique ») :  '); popup.document.write(' '); popup.document.write('  Insérer le code dans la fenêtre d\'édition '); popup.document.write('  Fermer '); popup.document.write(' '); popup.document.close; }

/*

Insersion des caractères spéciaux
*/

/** * Ajoutez le menu pour choisir des sous-ensembles de caractères spéciaux * @note	L'ordre de cette liste doit correspondre a celui de MediaWiki:Edittools ! */

function addCharSubsetMenu { var specialchars = document.getElementById('specialchars');

if (specialchars) { var menu = ""; menu += " Wiki (modèles) "; menu += " API "; menu += " Latin/Romain "; menu += " Grec "; menu += " Cyrillique "; menu += " AHD "; menu += " Allemand "; menu += " Catalan "; menu += " Croate "; menu += " Espagnol "; menu += " Espéranto "; menu += " Estonien "; menu += " Français "; menu += " Gallois "; menu += " Hawaien "; menu += " Islandais "; menu += " Italien "; menu += " Japonais "; menu += " Maltais "; menu += " Pinyin "; menu += " Portugais "; menu += " Rōmaji "; menu += " Roumain "; menu += " Scandinave "; menu += " Serbe "; menu += " Tchèque "; menu += " Turc "; menu += " Vieil anglais "; menu += " Vietnamien "; menu += " "; specialchars.innerHTML = menu + specialchars.innerHTML;

/* default subset - try to use a cookie some day */ chooseCharSubset(0); } }

/* select subsection of special characters */ function chooseCharSubset(s) { var l = document.getElementById('specialchars').getElementsByTagName('p'); for (var i = 0; i < l.length ; i++) { l[i].style.display = i == s ? 'inline' : 'none'; l[i].style.visibility = i == s ? 'visible' : 'hidden'; } }

addOnloadHook(addCharSubsetMenu);

/*

Insertion de nouveaux boutons
*/

//Remplit la variable mwCustomEditButtons (voir /skins-1.5/commons/wikibits.js) pour ajouter des boutons à la barre d'outils function addCustomButton(imageFile, speedTip, tagOpen, tagClose, sampleText) { mwCustomEditButtons[mwCustomEditButtons.length] = {"imageFile": imageFile, "speedTip": speedTip, "tagOpen": tagOpen, "tagClose": tagClose, "sampleText": sampleText}; }

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/0/03/Button_paragraphe_1.png','Paragraphe de premier niveau','= ',' =\n','Texte à insérer'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/cf/Button_paragraphe_2.png','Paragraphe de deuxième niveau','== ',' ==\n','Texte à insérer'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/ba/Button_paragraphe_3.png','Paragraphe de troisième niveau','=== ',' ===\n','Texte à insérer'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/6/61/Button_paragraphe_4.png','Paragraphe de quatrième niveau','==== ',' ====\n','Texte à insérer'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/7/79/Button_paragraphe_5.png','Paragraphe de cinquième niveau','===== ',' =====\n','Texte à insérer'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/e/e8/Button_paragraphe_6.png','Paragraphe de sixième niveau','====== ',' ======\n','Texte à insérer'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/a/a0/Button_references_alt.png','Ajoute une référence',' ',''); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/9/9a/Button_references.png','Liste des références',' \n',,); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/4/4b/Button_class_text.png','Classe texte','\n\n','\n ','Insérez les paragraphes'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/0/07/Button_justice.png','Classe jurisprudence','\n','\n ','Insérez les notes de jurisprudence'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/bf/Button_pagename.png','Titrage','\{\{Titre\n\|1=','\n\|2=\n\|3=\n\}\}','Insérez votre titre'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/a/a4/TableStart.png','Tableau échelons','\{\{subst:TCE\n\|grade1=','\n\|grade2=\n\n\}\}','Insérez votre tableau'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/5/5c/Button_ligne_tableau.png','ligne tableau FP','\{\{subst:LigneTEC\|','\|\|\}\}\n','Insérez l’échelon'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/4/4c/TableRow.png','ligne tableau FP','\{\{subst:LigneTEC1\n\|1=','\n\|2=\n\|3=\n\|4=\n\|5=\n\|6=\n\|7=\n\}\}\n','Insérez l’échelon');

//Ressemble à la fonction de /skins-1.5/commons/wikibits.js pour insérer un autre lien que insertTags function marque_tab { var toolbar = document.getElementById('toolbar'); if (!toolbar) return false; var textbox = document.getElementById('wpTextbox1'); if (!textbox) return false; if (!document.selection && textbox.selectionStart == null) return false; var image = document.createElement("img"); image.width = 23; image.height = 22; image.src = 'http://upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png'; image.border = 0; image.alt = 'Tableau'; image.title = 'Tableau'; image.style.cursor = "pointer"; image.onclick = function { popupTableau; return false; } toolbar.appendChild(image); }

addOnloadHook(marque_tab);

/*

AJAX, Cookies et HTML Parser
*/

var ajax = new objAJAX var cookies = new objCookies

//objAJAX function objAJAX { // AJAX taken from http://jibbering.com/2002/4/httprequest.html. Thanx :)       this.conn = false        /*@cc_on @*/        /*@if (@_jscript_version >= 5)        // JScript gives us Conditional compilation, we can cope with old IE versions.        // and security blocked creation of the objects.        try {                this.conn = new ActiveXObject("Msxml2.XMLHTTP")        } catch (e) {                try {                        this.conn = new ActiveXObject("Microsoft.XMLHTTP")                } catch (E) {                        this.conn = false                }        }        @end @*/        if (!this.conn && typeof XMLHttpRequest != 'undefined') {                try {                        this.conn = new XMLHttpRequest                } catch (e) {                        this.conn =false                }        }        if (!this.conn && window.createRequest) {                try {                        this.conn = window.createRequest } catch (e) { this.conn = false }       }

this.url = null this.requestType = "GET" this.unsync = true this.parser = new objHTMLparser }

objAJAX.prototype.sendRequest = function (url, type, unsync, data) { if (!this.conn) return null if (this.conn.readyState != 0 && this.conn.readyState != 4) return "busy" if (url) this.url = url if (type) this.requestType = type if (unsync != null) this.unsync = unsync //alert(this.requestType + " ++ " + this.url + " ++ " + this.unsync) this.conn.open(this.requestType, this.url, this.unsync) this.conn.send(data) }

objAJAX.prototype.getResult = function { if (!this.conn) return null return this.conn.responseText }

objAJAX.prototype.abort = function { this.conn.onreadystatechange = null this.conn.abort }

//--ObjCookie

function objCookies { this.value = null this.name = null this.expires = null }

objCookies.prototype.get = function (which) { this.allcookies = document.cookie var start = this.allcookies.indexOf("; " + which + "=") if (start == -1) { start = this.allcookies.indexOf(which + "=") if (start != 0) return null } else start += "; ".length this.name = which var end = this.allcookies.indexOf(";", start) if (end == -1) end = this.allcookies.length this.value = this.allcookies.substring(start + which.length + 1, end) var arr = this.allcookies.substring(start, this.allcookies.length).split("; ") this.expires = null if (arr.length > 0) if (/expires=/.test(arr[1])) this.expires = arr[1].substring("expires=".length, arr[1].length) return this.value }

objCookies.prototype.set = function (name, value, expires) { document.cookie = name + "=" + value + ";" + (expires ? "expires=" + expires + ";" : "") + "path=/;" + "domain=fr.wikipedia.org;" this.allcookies = document.cookie }

objCookies.prototype.setWithDelay = function (name, value, delay) { // delay is in millisecond var d = new Date d.setTime(d.getTime + delay) this.set(name, value, d.toGMTString) }

objCookies.prototype.kill = function (which) { if (this.get(which)) this.set(which, null, "Thu, 01-Jan-70 00:00:01 GMT") }

//--objHTMLparser

function objHTMLparser(str) { this.html = str }

objHTMLparser.prototype.parse = function (elmt, str) { if (str !== null) this.html = str if (this.html.indexOf("<" + elmt) == -1 || this.html.indexOf("</" + elmt + ">") == -1) return null var arr1 = this.html.split("<" + elmt) var elmts = new Array for (var cpt = 1 ; cpt < arr1.length ; cpt++) { var el = new Object el.innerHTML = arr1[cpt].substring(arr1[cpt].indexOf(">"), arr1[cpt].length).split("</" + elmt)[0] var prop = arr1[cpt].split(">")[0].split(/\s/g) for (var cpt1 = 1 ; cpt1 < prop.length ; cpt1++) { if (prop[cpt1].indexOf("=") != -1) el[prop[cpt1]] = true else el[prop[cpt1].split("=")[0]] = prop[cpt1].substring(prop[cpt1].indexOf("="), prop[cpt1].length) }		elmts[cpt-1] = el	} this.elmts[elmt] = elmts }

/*

Historique en couleurs
*/

/*************************************************/ // Nom : DeluxeHistory // Auteur : Dake // Basé sur du code Ajax de GôTô // Dernière mise à jour : 8 avril 2006 // Commentaires : /*************************************************/ var sysopsDeluxeHistory = null; var botsDeluxeHistory = null;

function extractUsers(res) { pattern = /title\=\"Utilisateur:(.*?)\"/g; s = ""; while((result = pattern.exec(res)) != null) { s += result[1] + "||"; }	return s; }

/*************************************************/ // Auteur : Dake // Basé sur du code de GôTô /*************************************************/ function getBots { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { // mange l'exception }

if (!cookies.get("botsDeluxeHistory")) { ajax.conn.onreadystatechange = function { if (ajax.conn.readyState == 4) { botsDeluxeHistory = extractUsers(ajax.getResult) // conservé pour une semaine cookies.setWithDelay("botsDeluxeHistory", botsDeluxeHistory, 1000*3600*24*7) getSysops; }		}		ajax.sendRequest("http://grondin.tuxfamily.org/index.php?title=Special:Listusers&group=bot&limit=500&offset=0&action=raw", "GET", true) } else { botsDeluxeHistory = cookies.get("botsDeluxeHistory") getSysops; } }

/*************************************************/ // Auteur : Dake // Basé sur du code de GôTô /*************************************************/				function getSysops { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { // mange l'exception }

if (!cookies.get("sysopsDeluxeHistory")) { ajax.conn.onreadystatechange = function { if (ajax.conn.readyState == 4) { sysopsDeluxeHistory = extractUsers(ajax.getResult) // conservé pour une semaine cookies.setWithDelay("sysopsDeluxeHistory", sysopsDeluxeHistory, 1000*3600*24*7) deluxeHistoryProcess; }		}		ajax.sendRequest("http://grondin.tuxfamily.org/index.php?title=Special:Listusers&group=sysop&limit=500&offset=0&action=raw", "GET", true) } else { sysopsDeluxeHistory = cookies.get("sysopsDeluxeHistory") deluxeHistoryProcess; } } // code by Martin Honnen function getOuterHTML (node) { if (node.nodeType == 3) return node.nodeValue; else if (node.nodeType == 1) { var html = ''; html += '<' + node.nodeName; for (var a = 0; a < node.attributes.length; a++) html += ' ' + node.attributes[a].nodeName + '="' +		node.attributes[a].nodeValue + '"'; if (node.childNodes.length == 0) html += ' \/>'; else { html += '>'; for (var c = 0; c < node.childNodes.length; c++) html += getOuterHTML(node.childNodes[c]); html += '<\/' + node.nodeName + '>'; }			return html; } } function deluxeHistoryProcess { sysopsList = sysopsDeluxeHistory.split("||") botsList = botsDeluxeHistory.split("||") var lis = document.getElementById("pagehistory").getElementsByTagName("li");

for (i=0; i<lis.length; i++) { spanNode = lis[i].getElementsByTagName("span"); username = spanNode[0].childNodes[0].childNodes[0].nodeValue; // check le statut du contributeur var className = "history-user-normal"; // bot ? for (j=0;j<botsList.length;j++) { if (botsList[j].indexOf(username)==0) { className = "history-user-bot" break; }		} 		// sysop ? for (j=0;j<sysopsList.length;j++) { if (sysopsList[j].indexOf(username)==0) { className = "history-user-sysop" break; }		}		// ip ? var ip = /\d{1,3}\.\d{1,3}.\d{1,3}.\d{1,3}/; if (ip.exec(username)) { className = "history-user-ip" }

// ajout des icônes specialOp = ""; var comment = ""; for (h=0;h<spanNode.length;h++) { if (spanNode[h].getAttribute("class") == "comment") { comment = getOuterHTML(spanNode[h]) break; }		}		var regexExpEvents = new Array; regexExpEvents[0] = /((r|R)(é|e)vocation|(r|R)v |(R|r)evert|(v|V)andal(isme|e))/; regexExpEvents[1] = /(a restauré|a effacé|(s|S)uppression)/; regexExpEvents[2] = /((R|r)enommage|a déplacé)/; regexExpEvents[3] = /((semi|Semi)-(p|P)rotection|(P|p)rotection)/; var iconsEvents = new Array; iconsEvents[0] = "http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Crystal_Clear_action_reload.png/20px-Crystal_Clear_action_reload.png" iconsEvents[1] = "http://upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Crystal_Clear_action_exit.png/20px-Crystal_Clear_action_exit.png" iconsEvents[2] = "http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Crystal_Clear_action_2rightarrow.png/20px-Crystal_Clear_action_2rightarrow.png" iconsEvents[3] = "http://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Crystal_Clear_action_lock.png/20px-Crystal_Clear_action_lock.png" if (comment) { for (k=0;k<regexExpEvents.length;k++) { if (regexExpEvents[k].test(comment)) { imgTag = "<img src=\"" + iconsEvents[k] + "\" />" specialOp = "<div class=\"" + className +                                                    "\" style=\"float: right; vertical-align:top;\">" + imgTag + " " }			}			}		lis[i].innerHTML = "<div class=\"" + className + "\">" + specialOp + lis[i].innerHTML + " "

inputNodes = lis[i].getElementsByTagName("input"); for (j=0;j<inputNodes.length;j++) { inputNodes[j].style.visibility='visible'; }

for (j=0;j<spanNode.length;j++) { if(spanNode[j].getAttribute("class")=="history-user") { spanNode[j].setAttribute("class", className) }		}	} } function deluxeHistoryLoader { if (document.URL.indexOf("&action=history")==-1) return; getBots; }

addOnloadHook(deluxeHistoryLoader);

/*

bouton Remplacement
*/

/***	*Expressions régulières *Auteur: ThomasV, Pathoschild *Note : cet outil utilise la syntaxe javascript : on utilise $ (et pas \) pour appeler un groupe dans la chaîne de remplacement. *Tutoriel : http://www.regular-expressions.info/tutorial.html ****/	/* create form */ function custom { /* if already open */ if(document.getElementById('regexform')) customremove else { editbox = document.getElementById('wpTextbox1'); /* container */ regexform = document.createElement('div'); regexform.setAttribute('id','regexform'); editbox.parentNode.insertBefore(regexform,editbox.parentNode.firstChild); /* form tag */ var formform = document.createElement('form'); formform.setAttribute('id','regexformform'); formform.setAttribute('onSubmit','customgo; return false;'); regexform.appendChild(formform); // add input boxes var newinput = document.createElement('input'); newinput.setAttribute('id','formsearch'); newlabel = document.createElement('label'); newlabel.setAttribute('for','formsearch'); newlabel.appendChild(document.createTextNode("Remplacer ")); formform.appendChild(newlabel); formform.appendChild(newinput); var newinput = document.createElement('input'); newinput.setAttribute('id','formreplace'); newlabel = document.createElement('label'); newlabel.setAttribute('for','formreplace'); newlabel.appendChild(document.createTextNode(' par ')); formform.appendChild(newlabel); formform.appendChild(newinput); // go! link var go_button = document.createElement('input'); go_button.setAttribute('type',"submit"); go_button.setAttribute('title',"go!"); go_button.setAttribute('value',"go!"); formform.appendChild(go_button); }	}	/* run patterns */ function customgo { /* get search and replace strings */ search = document.getElementById('formsearch').value; search = search.replace(/\\n/g, '\n'); replace = document.getElementById('formreplace').value; replace = replace.replace(/\\n/g, '\n'); /* convert input to regex */ // without delimiters if(!search.match(/^\s*\/[\s\S]*\/[a-z]*\s*$/i)) { search = new RegExp(search,'g'); }		// with delimiters else { // break into parts var regpattern = search.replace(/^\s*\/([\s\S]*)\/[a-z]*\s*$/i,'$1'); var regmodifiers = search.replace(/^\s*\/[\s\S]*\/([a-z]*)\s*$/,'$1'); // filter invalid flags regmodifiers = regmodifiers.replace(/[^gim]/ig,''); search = new RegExp(regpattern, regmodifiers); }		/* perform */ editbox.value = editbox.value.replace(search,replace); }	/* remove form */ function customremove { regexform.parentNode.removeChild(regexform); patterncount = -1; }	/*******************	*** create button ********************/       function add_regexp_button{ toolbar = document.getElementById("toolbar"); if(toolbar){ var image = document.createElement("img"); image.width = 23; image.height = 22; image.border = 0; image.className = "mw-toolbar-editbutton"; image.style.cursor = "pointer"; image.alt = "regexp"; image.title = "Expression régulière"; image.src = "http://upload.wikimedia.org/wikipedia/commons/a/a0/Button_references_alt.png"; image.onclick = custom; toolbar.appendChild(image); }      }       addOnloadHook(add_regexp_button)

/* */