MediaWiki:Common.js
(Différences entre les versions)
Version du 4 juillet 2007 à 00:04
/* N’importe quel JavaScript ici sera chargé pour n’importe quel utilisateur et pour chaque page accédée. */ /* <pre> <nowiki> */ /* == Fonctions générales == <source lang="javascript">/* * Fonctions générales de lancement de fonctions ou de script */ /** * Installation d'une nouvelle fonction de cette façon : * addOnloadHook(nom_de_la_fonction); (sans parenthèses) * La procédure suivante ne doit plus être utilisée */ if (!window.aOnloadFunctions) { var aOnloadFunctions = new Array(); } window.onload = function() { if (window.aOnloadFunctions) { for (var _i=0; _i<aOnloadFunctions.length; _i++) { aOnloadFunctions[_i](); } } } function addLoadEvent(func) { addOnloadHook(func); } /** * insertAfter : insérer un élément dans une page */ function insertAfter(parent, node, referenceNode) { parent.insertBefore(node, referenceNode.nextSibling); } /** * getElementsByClass : rechercher les éléments de la page dont le paramètre "class" est celui recherché */ function getElementsByClass(searchClass, node, tag) { if (node == null) node = document; if (tag == null) tag = '*'; return getElementsByClassName(node, tag, searchClass); } /** * Teste si un élément contient la classe CSS spécifiée * Utilise des expressions régulières et un cache pour de meilleures perfs * Fonction importée depuis [[:en:MediaWiki:Common.js]] * Auteurs : [[:en:User:Mike Dillon]], [[:en:User:R. Koot]], [[:en:User:SG]] */ var hasClass = (function () { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); /** * Insérer un JavaScript d'une page particulière, idée de Mickachu */ function loadJs(page) { document.write('<script type="text/javascript" src="' + 'http://fr.wikipedia.org/w/index.php?title=' + page + '&action=raw&ctype=text/javascript&dontcountme=s"></script>'); } /** * Projet JavaScript */ function obtenir(name) { loadJs('MediaWiki:JSScripts/' + name); } /** * Récupère la valeur du cookie */ function getCookieVal(name) { var cookiePos = document.cookie.indexOf(name + "="); var cookieValue = false; if (cookiePos > -1) { cookiePos += name.length + 1; var endPos = document.cookie.indexOf(";", cookiePos); if (endPos > -1) cookieValue = document.cookie.substring(cookiePos, endPos); else cookieValue = document.cookie.substring(cookiePos); } return cookieValue; } /* Fin des fonctions générales</source> */ //============================================================ // // Info-bulle sur liens internes // //============================================================ loadJS('[[Utilisateur:Henrique/popups-strings-fr.js]]'); document.write('<script type="text/javascript" src="' + 'http://www.spinozaetnous.org/w/index.php?title=Utilisateur:Henrique/popups.js' + '&action=raw&ctype=text/javascript&dontcountme=s"></script>'); popupPreviewFirstParOnly=false; popupShortcutKeys=true; //popupMaxPreviewSentences=10; popupDabRegexp = '([{][{]\\s*homonymie|homonymie\\s*[}][}])'; popupImages=false; popupHideDelay=0.1; // Fonction pour charger un js function loadJS(page){ page=page.replace(/^\[\[(.*)\]\]$/, '$1'); document.write('<script type="text/javascript" src="' + 'http://www.spinozaetnous.org/w/wiki.phtml?title=' + page + '&action=raw&ctype=text/javascript"></script>'); } function PageHomeArrows() { for (var level = 2; level <= 6; ++level) { var h = document.getElementsByTagName("h" + level); for (var i = 0; i < h.length; ++i) { var arrow = document.createElement("a"); arrow.appendChild(document.createTextNode(" ↑")); arrow.href = "javascript:window.scrollTo(0,0); void 0;"; h[i].appendChild(arrow); } } } //============================================================ // // Info-bulle et touches de raccourci // //============================================================ ta = new Object(); ta['pt-userpage'] = new Array('.', 'Ma page utilisateur'); ta['pt-anonuserpage'] = new Array('.', 'La page utilisateur pour l\'adresse IP que vous utilisez'); ta['pt-mytalk'] = new Array('N', 'Ma page de discussion'); ta['pt-anontalk'] = new Array('N', 'La page de discussion pour cette adresse'); ta['pt-preferences'] = new Array('', 'Mes préférences'); ta['pt-watchlist'] = new Array('L', 'La liste des pages que vous suivez'); ta['pt-mycontris'] = new Array('Y', 'La liste de mes contributions'); ta['ca-talk'] = new Array('T', 'Discussion pour cette page'); ta['ca-edit'] = new Array('E', 'Vous pouvez modifier cette page. Merci de prévisualiser avant d\'enregistrer.'); ta['ca-addsection'] = new Array('+', 'Ajouter un commentaire à cette discussion.'); ta['ca-viewsource'] = new Array('E', 'Cette page est protégée. Vous pouvez toutefois en voir le contenu.'); ta['ca-history'] = new Array('H', 'Les auteurs et versions précédentes de cette page.'); ta['ca-protect'] = new Array('=', 'Pour protéger cette page.'); ta['ca-delete'] = new Array('D', 'Pour supprimer cette page.'); ta['ca-undelete'] = new Array('D', 'Pour restaurer cette page.'); ta['ca-move'] = new Array('M', 'Pour déplacer ou renommer cette page.'); ta['ca-nomove'] = new Array('', 'Vous n\'avez pas la permission de déplacer cette page.'); ta['ca-watch'] = new Array('W', 'Ajoutez cette page à votre liste de suivi.'); ta['ca-unwatch'] = new Array('W', 'Retirez cette page de votre liste de suivi.'); ta['search'] = new Array('F', 'Pour effectuer une recherche.'); ta['p-logo'] = new Array('', 'Page principale.'); ta['n-mainpage'] = new Array('Z', 'Pour afficher la page principale.'); ta['n-portal'] = new Array('', 'À propos du projet.'); ta['n-currentevents'] = new Array('', 'Trouvez des informations sur les événements récents.'); ta['n-recentchanges'] = new Array('R', 'La liste des modifications récentes.'); ta['n-randompage'] = new Array('X', 'Afficher une page au hasard.'); ta['n-help'] = new Array('', 'Aide.'); ta['n-sitesupport'] = new Array('', 'Pour soutenir le projet.'); ta['t-whatlinkshere'] = new Array('J', 'Liste des pages liées à celle-ci.'); ta['t-recentchangeslinked'] = new Array('K', 'Liste des modifications récentes des pages liées à celle-ci.'); ta['feed-rss'] = new Array('', 'Alimenter le flux RSS pour cette page.'); ta['feed-atom'] = new Array('', 'Alimenter le flux Atom pour cette page.'); ta['t-contributions'] = new Array('', 'Voir la liste des contributions de cet utilisateur.'); ta['t-emailuser'] = new Array('', 'Envoyer un courriel à cet utilisateur.'); ta['t-upload'] = new Array('U', 'Importer une image ou fichier média sur le serveur.'); ta['t-specialpages'] = new Array('Q', 'Liste des pages spéciales.'); ta['ca-nstab-main'] = new Array('C', 'Afficher le contenu de cette page.'); ta['ca-nstab-user'] = new Array('C', 'Afficher la page utilisateur.'); ta['ca-nstab-media'] = new Array('C', 'Afficher la page média.'); ta['ca-nstab-special'] = new Array('', 'Ceci est une page spéciale, vous ne pouvez pas la modifier.'); ta['ca-nstab-wp'] = new Array('A', 'Afficher la page du projet.'); ta['ca-nstab-image'] = new Array('C', 'Afficher la page de description de l\'image.'); ta['ca-nstab-mediawiki'] = new Array('C', 'Afficher le message système.'); ta['ca-nstab-template'] = new Array('C', 'Afficher le modèle.'); ta['ca-nstab-help'] = new Array('C', 'Afficher la page d\'aide.'); ta['ca-nstab-category'] = new Array('C', 'Afficher la page de catégorie.'); //============================================================ // // 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 = "<select style=\"display:inline\" onChange=\"chooseCharSubset(selectedIndex)\">"; menu += "<option>Wiki</option>"; menu += "<option>Latin/Romain</option>"; menu += "<option>Grec</option>"; menu += "<option>Cyrillique</option>"; menu += "<option>AHD</option>"; menu += "<option>Allemand</option>"; menu += "<option>Arabe</option>"; menu += "<option>Catalan</option>"; menu += "<option>Croate</option>"; menu += "<option>Espagnol</option>"; menu += "<option>Espéranto</option>"; menu += "<option>Estonien</option>"; menu += "<option>Gallois</option>"; menu += "<option>Hawaien</option>"; menu += "<option>Hébreu</option>"; menu += "<option>Hiéroglyphe</option>"; menu += "<option>Hollandais</option>"; menu += "<option>Hongrois</option>"; menu += "<option>Indo-européen</option>"; menu += "<option>Irlandais</option>"; menu += "<option>Islandais</option>"; menu += "<option>Italien</option>"; menu += "<option>Letton</option>"; menu += "<option>Lituanien</option>"; menu += "<option>Maltais</option>"; menu += "<option>Navajo & Apache</option>"; menu += "<option>Pinyin</option>"; menu += "<option>Polonais</option>"; menu += "<option>Portugais</option>"; menu += "<option>Rōmaji</option>"; menu += "<option>Roumain</option>"; menu += "<option>Scandinave</option>"; menu += "<option>Serbe</option>"; menu += "<option>Tchèque</option>"; menu += "<option>Turc</option>"; menu += "<option>Vieil anglais</option>"; menu += "<option>Vietnamien</option>"; menu += "<option>Yiddish</option>"; menu += "<option>API</option>"; menu += "<option>Mathématiques</option>"; menu += "</select>"; 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'; } } addLoadEvent(addCharSubsetMenu); //============================================================ // // Barre d'outil // //============================================================ //============================================================ // 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 += '{{entête tableau charte}}\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;i<nbCol;i++) code += '| élément\n'; } code += '|}'; insertTags('','', code); } /** * * English: Open a popup with parameters to generate an array. * The number of rows/columns can be modified. Some additional * parameters are related to templates available on :fr * * @author: fr:user:dake * @version: 0.1 */ function popupTableau() { var popup = window.open('','name','height=400,width=500'); javaCode = '<script type="text\/javascript">function 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('<html><head><title>Paramètres du tableau</title>'); popup.document.write('<script type="text\/javascript" src="\/skins-1.5\/common\/wikibits.js"><!-- wikibits js --><\/script>'); popup.document.write('<style type="text\/css" media="screen,projection">/*<![CDATA[*/ @import "\/skins-1.5\/monobook\/main.css?5"; /*]]>*/<\/style>'); popup.document.write(javaCode); popup.document.write('</head><body>'); popup.document.write('<p>Veuillez entrer les paramètres du tableau : </p>'); popup.document.write('<form name="paramForm">'); popup.document.write('Nombre de lignes : <input type="text" name="inputRow" value="3" ><p>'); popup.document.write('Nombre de colonnes : <input type="text" name="inputCol" value="3" ><p>'); popup.document.write('Largeur de la bordure : <input type="text" name="inputBorder" value="1" ><p>'); popup.document.write('En-tête en gris (style « charte graphique ») : <input type="checkbox" name="inputHeader" checked="1" ><p>'); popup.document.write('Lignes grises alternées (style « charte graphique ») : <input type="checkbox" name="inputLine" checked="1" ><p>'); popup.document.write('</form">'); popup.document.write('<p><a href="javascript:insertCode()"> Insérer le code dans la fenêtre d\'édition</a></p>'); popup.document.write('<p><a href="javascript:self.close()"> Fermer</a></p>'); popup.document.write('</body></html>'); popup.document.close(); } //============================================================ // Insertion de nouveaux boutons dans la barre d'outil //============================================================ //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/en/e/e9/Button_headline2.png','Sous-titre de niveau 3',"\n===","===\n",'Sous-titre'); addCustomButton('http://upload.wikimedia.org/wikipedia/en/5/5f/Button_center.png','Centrer',"<div style=\"text-align:center;\">","</div>",'Texte centré'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/a/a5/Button_align_right.png','Texte justifié à droite',"<div style=\"text-align:right;\">","</div>",''); addCustomButton('http://upload.wikimedia.org/wikipedia/en/8/8e/Button_shifting.png','Retrait',":","",''); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/5/58/Button_small.png','Texte plus petit',"<small>","</small>",''); addCustomButton('http://upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png','Exposant',"<sup>","</sup>",''); addCustomButton('http://upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png','Insérer un bloc de citation',"<blockquote style=\"border: 1px solid #97D5DC; padding: 2em;\">\n","\n</blockquote>",''); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/30/Btn_toolbar_rayer.png','Rayer',"<s>","</s>",''); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/8/88/Btn_toolbar_enum.png','Énumération',"\n# élément 1\n# élément 2\n# élément 3","",''); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/1/11/Btn_toolbar_liste.png','Liste',"\n* élément A\n* élément B\n* élément C","",''); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/37/Btn_toolbar_commentaire.png','Commentaire',"<!--","-->",''); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/9/93/Button_sub_link.png','Lien ancré',"[[#|","]]",''); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/1/13/Button_enter.png','à la ligne',"<br />","",''); //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); //============================================================ // // Divers // //============================================================ /** * Utilisation du modèle Modèle:Images */ function toggleImage(group, remindex, shwindex){ document.getElementById("ImageGroupsGr"+group+"Im"+remindex).style.display="none"; document.getElementById("ImageGroupsGr"+group+"Im"+shwindex).style.display="inline"; } function ImageGroup(){ if (document.URL.match(/printable/g)) return; var bc=document.getElementById("bodyContent"); var divs=bc.getElementsByTagName("div"); var i = 0, j = 0; var units, search; var currentimage; var UnitNode; for (i = 0; i < divs.length ; i++) { if (divs[i].className != "ImageGroup") continue; UnitNode=undefined; search=divs[i].getElementsByTagName("div"); for (j = 0; j < search.length ; j++) { if (search[j].className != "ImageGroupUnits") continue; UnitNode=search[j]; break; } if (UnitNode==undefined) continue; units=Array(); for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) { var temp = UnitNode.childNodes[j]; if (temp.className=="center") units.push(temp); } for (j = 0 ; j < units.length ; j++) { currentimage=units[j]; currentimage.id="ImageGroupsGr"+i+"Im"+j; var imghead = document.createElement("div"); var leftlink = document.createElement("a"); var rightlink = document.createElement("a"); if (j != 0) { leftlink.href = "javascript:toggleImage("+i+","+j+","+(j-1)+");"; leftlink.innerHTML="◀"; } if (j != units.length - 1) { rightlink.href = "javascript:toggleImage("+i+","+j+","+(j+1)+");"; rightlink.innerHTML="▶"; } var comment = document.createElement("tt"); comment.innerHTML = "("+ (j+1) + "/" + units.length + ")"; with(imghead) { style.fontSize="110%"; style.fontweight="bold"; appendChild(leftlink); appendChild(comment); appendChild(rightlink); } currentimage.insertBefore(imghead,currentimage.childNodes[0]); if (j != 0) { currentimage.style.display="none"; } } } } addOnloadHook(ImageGroup); /* == Boîtes déroulantes == <source lang="javascript">*/ // set up the words in your language var NavigationBarHide = '[ Enrouler ]'; var NavigationBarShow = '[ Dérouler ]'; var NavigationBarShowDefault = 0; // shows and hides content and picture (if available) of navigation bars // Parameters: // indexNavigationBar: the index of navigation bar to be toggled function toggleNavigationBar(indexNavigationBar) { var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); if (!NavFrame || !NavToggle) { return; } // ajout par Dake - permet de créer un titre en lieu et place du "Dérouler" grâce // à l'attribut "title" du tag. var ShowText; if (NavFrame.title == undefined || NavFrame.title.length == 0 ) { ShowText = NavigationBarShow; } else { ShowText = NavFrame.title; } // if shown now if (NavToggle.firstChild.data == NavigationBarHide) { for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if (hasClass(NavChild, 'NavPic')) { NavChild.style.display = 'none'; } if (hasClass(NavChild, 'NavContent')) { NavChild.style.display = 'none'; } if (hasClass(NavChild, 'NavToggle')) { NavChild.firstChild.data = ShowText; } } // if hidden now } else if (NavToggle.firstChild.data == ShowText) { for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if (hasClass(NavChild, 'NavPic')) { NavChild.style.display = 'block'; } if (hasClass(NavChild, 'NavContent')) { NavChild.style.display = 'block'; } if (hasClass(NavChild, 'NavToggle')) { NavChild.firstChild.data = NavigationBarHide; } } } } // adds show/hide-button to navigation bars function createNavigationBarToggleButton() { var indexNavigationBar = 0; var NavFrame; // iterate over all < div >-elements for( var i=0; NavFrame = document.getElementsByTagName("div")[i]; i++ ) { // if found a navigation bar if (hasClass(NavFrame, "NavFrame")) { indexNavigationBar++; var NavToggle = document.createElement("a"); NavToggle.className = 'NavToggle'; NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); var NavToggleText = document.createTextNode(NavigationBarHide); NavToggle.appendChild(NavToggleText); // add NavToggle-Button as first div-element // in < div class="NavFrame" > NavFrame.insertBefore( NavToggle, NavFrame.firstChild ); NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); } } // if more Navigation Bars found than Default: hide all if (NavigationBarShowDefault < indexNavigationBar) { for( var i=1; i<=indexNavigationBar; i++ ) { toggleNavigationBar(i); } } } addOnloadHook(createNavigationBarToggleButton); /* * VraiTitre : Ajout du titre réel d'un article pour lequel MediaWiki n'affiche pas correctement */ function VraiTitre() { var balise = document.getElementById("vrai_titre"); if (!balise) return; vrai_titre = balise.childNodes[0].nodeValue; var titre = document.getElementsByTagName("H1")[0]; rectificatif = titre.appendChild(document.createElement("span")); rectificatif.setAttribute ("style","color:#AAAAAA; font-size:0.7em; font-style:italic; display:inline;"); rectificatif.appendChild(document.createTextNode(" ("+ vrai_titre +")")); } addLoadEvent(VraiTitre); /* </nowiki> </pre> */