MediaWiki:Common.js
De Wikipasdecalais
Révision de 9 septembre 2011 à 18:34 par Colinherve (discussion | contributions)
Note : après avoir enregistré 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 pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
- Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
- Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
- Opera : Videz le cache dans Outils → Préférences.
/* /*************************************************************/ /* Fonctions javascript : pallient les limites de javascript */ /* Surveiller : http://www.ecmascript.org/ */ /*************************************************************/ /** * 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); } /** * Diverses fonctions manipulant les classes * Utilise des expressions régulières et un cache pour de meilleures perfs * isClass et whichClass depuis http://fr.wikibooks.org/w/index.php?title=MediaWiki:Common.js&oldid=140211 * hasClass, addClass, removeClass et eregReplace depuis http://drupal.org.in/doc/misc/drupal.js.source.html * surveiller l'implémentation de .classList http://www.w3.org/TR/2008/WD-html5-diff-20080122/#htmlelement-extensions */ function isClass(element, classe) { return hasClass(element, classe); } function whichClass(element, classes) { var s=" "+element.className+" "; for(var i=0;i<classes.length;i++) if (s.indexOf(" "+classes[i]+" ")>=0) return i; return -1; } function hasClass(node, className) { if (node.className == className) { return true; } var reg = new RegExp('(^| )'+ className +'($| )') if (reg.test(node.className)) { return true; } return false; } function addClass(node, className) { if (hasClass(node, className)) { return false; } node.className += ' '+ className; return true; } function removeClass(node, className) { if (!hasClass(node, className)) { return false; } node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className); return true; } function eregReplace(search, replace, subject) { return subject.replace(new RegExp(search,'g'), replace); } /** * 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; } /************************************************************************/ /* Fonctions générales mediawiki (pallient les limitations du logiciel) */ /* Surveiller : http://fr.wikipedia.org/skins-1.5/common/wikibits.js */ /************************************************************************/ /* * Fonction générales de lancement de fonctions ou de script * DÉPRÉCIÉ : utiliser addOnloadHook simplement */ function addLoadEvent(func) { addOnloadHook(func); } /** * 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) { if(name.indexOf('caractères/') != -1) loadJs('MediaWiki:JSScripts/' + name); else loadJs('MediaWiki:Gadget-' + name + '.js'); } /**************************************/ /* Applications pour les lecteurs */ /**************************************/ /* Devraient en principe se trouver côté serveur */ /* * Choix du mode d'affichage des références * @note L'ordre de cette liste doit correspondre a celui de Modèle:Édition ! */ function addBibSubsetMenu() { var specialBib = document.getElementById('specialBib'); if (!specialBib) return; specialBib.style.display = 'block'; menu = '<select style="display:inline;" onChange="chooseBibSubset(selectedIndex)">' + '<option>Liste</option>' + '<option>WikiNorme</option>' + '<option>BibTeX</option>' + '<option>ISBD</option>' + '<option>ISO690</option>' + '</select>'; specialBib.innerHTML = specialBib.innerHTML + menu; /* default subset - try to use a cookie some day */ chooseBibSubset(0); } // select subsection of special characters function chooseBibSubset(s) { var l = document.getElementsByTagName('div'); for (var i = 0; i < l.length ; i++) { if(l[i].className == 'BibList') l[i].style.display = s == 0 ? 'block' : 'none'; else if(l[i].className == 'WikiNorme') l[i].style.display = s == 1 ? 'block' : 'none'; else if(l[i].className == 'BibTeX') l[i].style.display = s == 2 ? 'block' : 'none'; else if(l[i].className == 'ISBD') l[i].style.display = s == 3 ? 'block' : 'none'; else if(l[i].className == 'ISO690') l[i].style.display = s == 4 ? 'block' : 'none'; } } addOnloadHook(addBibSubsetMenu); /** * Modifie Special:Search pour pouvoir utiliser différents moteurs de recherche, * disponibles dans une boîte déroulante. * Auteurs : [[:en:User:Gracenotes]], importé de Wikipédia en anglais. * [[User:Zelda]] pour le stockage du moteur par cookie. */ if (wgPageName == "Special:Recherche") { var searchEngines = []; addOnloadHook(SpecialSearchEnhanced); } function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); searchEngines[searchEngines.length] = [action, mainQ, addQ, addV]; return opt; } if (document.forms['powersearch']) var searchForm = document.forms['powersearch']; if (document.forms['search']) var searchForm = document.forms['search']; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optId = document.getElementById('searchEngine').selectedIndex; var optSelected = searchEngines[optId]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; // stockage du moteur dans un cookie document.cookie = "searchEngineId=" + optId; } selectBox.appendChild(createOption('Recherche interne', wgScriptPath + '/index.php', 'search', 'title', 'Special:Recherche')); selectBox.appendChild(createOption('Exalead', 'http://www.exalead.com/wikipedia/results', 'q', 'language', 'fr')); selectBox.appendChild(createOption('Google', 'http://www.google.fr/search', 'q', 'sitesearch', 'fr.wikipedia.org')); selectBox.appendChild(createOption('Wikiwix', 'http://fr.wikiwix.com/', 'action', 'lang', 'fr')); selectBox.appendChild(createOption('Windows Live', 'http://search.live.com/results.aspx', 'q', 'q1', 'site:http://fr.wikipedia.org')); selectBox.appendChild(createOption('Yahoo', 'http://fr.search.yahoo.com/search', 'p', 'vs', 'fr.wikipedia.org')); selectBox.appendChild(createOption('Global WP Search', 'http://vs.aka-online.de/cgi-bin/globalwpsearch.pl', 'search', 'timeout', '15')); // récupération du dernier moteur utilisé stocké dans un cookie var defaultId = getCookieVal("searchEngineId"); if (defaultId) { selectBox.selectedIndex = defaultId; } searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.fulltext; } lStat.parentNode.insertBefore(selectBox, lStat); } /** * Transformer les pages du Bistro en page de discussion */ function DiscussionBistro() { if( (wgPageName.search('Wikipédia:Le_Bistro') != -1) || (wgPageName.search('Wikipédia:Bulletin_des_administrateurs') != -1)) document.body.className = 'ns-1'; } addOnloadHook(DiscussionBistro); /** * Transformer certaines pages en page de discussion avec le modèle {{page de discussion}} */ function TransformeEnDiscussion() { var transformeEnPDD = document.getElementById("transformeEnPageDeDiscussion"); if(transformeEnPDD) document.body.className = "ns-1"; } addOnloadHook(TransformeEnDiscussion); /** * Transformer certaines pages en pseudo-article * c'est raisonnable ? --Tavernier */ function TransformeEnArticle() { var transformeEnA = document.getElementById("transformeEnArticle"); if(transformeEnA) document.body.className = "ns-0"; } addOnloadHook(TransformeEnArticle); /** * Afficher une explication au nombre de caractères dans la liste de suivi */ function toolTipPlusMinus() { var tt = "Nombre de caractères d'écart entre les deux dernières versions de la page"; var elmts = document.getElementsByTagName("span"); for(var cpt = 0; cpt < elmts.length; cpt++) { if (/mw-plusminus-(pos|neg|null)/.test(elmts[cpt].className) || /mw-plusminus-(pos|neg|null)/.test(elmts[cpt].getAttribute("class"))) elmts[cpt].title = tt; } } addOnloadHook(toolTipPlusMinus); /** * 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"); if( !bc ) bc = document.getElementById("mw_contentholder"); if( !bc ) return; 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; var rightlink; if (j != 0) { leftlink = document.createElement("a"); leftlink.href = "javascript:toggleImage("+i+","+j+","+(j-1)+");"; leftlink.innerHTML="◀"; } else { leftlink = document.createElement("span"); leftlink.innerHTML=" "; } if (j != units.length - 1) { rightlink = document.createElement("a"); rightlink.href = "javascript:toggleImage("+i+","+j+","+(j+1)+");"; rightlink.innerHTML="▶"; } else { rightlink = document.createElement("span"); 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); /** * Ajout d'un style particulier aux liens interlangues vers un bon article ou * un article de qualité */ function lienAdQouBAouPdQ() { // links are only replaced in p-lang var pLang = document.getElementById("p-lang"); if (!pLang) return; var lis = pLang.getElementsByTagName("li"); for (var i=0; i<lis.length; i++) { var li = lis[i]; // ADQ- est intentionnel pour correspondre au modèle Lien AdQ, on // ne doit pas le corriger. if (document.getElementById("ADQ-" + li.className)) { li.className += " AdQ"; li.title = "Lien vers un article de qualité"; } else if (document.getElementById("BA-" + li.className)) { li.className += " BA"; li.title = "Lien vers un bon article"; } else if (document.getElementById("PdQ-" + li.className)) { li.className += " AdQ"; li.title = "Lien vers un portail de qualité"; } } } addOnloadHook(lienAdQouBAouPdQ); /** * Suppression du titre sur la page d'accueil, * changement de l'onglet et lien vers la liste complète des Wikipédias depuis l'accueil */ function mainPageTransform(){ if(wgPageName != 'Accueil' && wgPageName != 'Discuter:Accueil') return; try { document.getElementById('ca-nstab-main').firstChild.innerHTML = 'Accueil'; } catch (e) { /* Erreur : l'apparence ne gère la pas les onglets */ } if(wgPageName == 'Accueil' && wgIsArticle) addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/Liste_des_Wikipédias', 'Liste complète', 'interwiki-listecomplete', 'Liste complète des Wikipédias'); } addOnloadHook(mainPageTransform); /** * Liens d'aide des pages spéciales * * permet d'ajouter un petit lien (par exemple d'aide) à la fin du titre d'une page. * known bug : conflit avec le changement de titre classique. * Pour les commentaires, merci de contacter [[user:Plyd|Plyd]]. */ function rewritePageH1bis() { try { var helpPage = document.getElementById("helpPage"); if (helpPage) { var helpPageURL = document.getElementById("helpPageURL"); var h1 = document.getElementsByTagName("h1")[0]; if (helpPageURL && h1) { h1.innerHTML = h1.innerHTML + '<span id="h1-helpPage">' + helpPageURL.innerHTML + '</span>'; helpPage.style.display = "none"; } } } catch (e) { /* Something went wrong. */ } } addOnloadHook(rewritePageH1bis); /** * Redirect vers wikibooks etc. * */ var redirectedFromArticleDatas = new Array( new Array('Wikipédia:Redirect_vers_Wikibooks', 'wikibooks'), new Array('Wikipédia:Redirect_vers_Wikisource', 'wikisource'), new Array('Wikipédia:Redirect_vers_Wikiversité', 'wikiversity'), new Array('Wikipédia:Redirect_vers_Wikiquote', 'wikiquote'), new Array('Wikipédia:Redirect_vers_Wikinews', 'wikinews'), new Array('Wikipédia:Redirect_vers_Wiktionnaire', 'wiktionary') ); function redirectedFromArticle() { if (wgIsArticle == false) return; for (var i = 0; i < redirectedFromArticleDatas.length; ++i) { var page_match = redirectedFromArticleDatas[i]; var index = wgPageName.indexOf(page_match[0]); if (index == 0) { var div = document.getElementById('contentSub'); var span = document.getElementById('redirected_from'); // real target is always encoded in the anchor. target = window.location.hash; if (!div || !span || target == '') break; target = target.slice(1); // Konqueror 3.5 work around if (target.indexOf('#') == 0) target = target.slice(1); target = target.split('.23'); target[0] = target[0].replace(/\.([0-9A-Z][0-9A-Z])/g, '%$1'); var quoted = target[0] if (target[1].length) quoted += '#' + target[1] quoted = quoted.replace(/%2F/g, '/'); var display = target[2] display = display.replace(/\.([0-9A-Z][0-9A-Z])/g, '%$1'); display = decodeURI(display); display = display.replace(/_/g, ' '); var e = document.createElement('A'); e.href = 'http://fr.' + page_match[1] + '.org/wiki/' + quoted; e.innerHTML = display; span.replaceChild(e, span.firstChild); break; } } } addOnloadHook(redirectedFromArticle); /* En phase de test */ /* DÉBUT DU CODE JAVASCRIPT DE "CADRE À ONGLETS" Fonctionnement du [[Modèle:Cadre à onglets]] Modèle implanté par User:Peleguer de http://ca.wikipedia.org Actualisé par User:Joanjoc de http://ca.wikipedia.org Traduction et adaptation User:Antaya de http://fr.wikipedia.org */ function CadreOngletInit(){ // retour si ailleurs que sur l'espace utilisateur, // sachant que c'est une horreur au niveau de l'accessibilité // et qu'il est impossible de "récupérer" ou de recycler ce script // (celui-ci fonctionnant par inclusion de sous pages) if (wgCanonicalNamespace != 'User') return; var i=0 for (i=0;i<=9;i++){ var vMb = document.getElementById("mb"+i); if (!vMb) break; var j=1 var vOgIni = 0 for (j=1;j<=9;j++){ var vBt = document.getElementById("mb"+i+"bt"+j); if (!vBt) break; vBt.onclick = CadreOngletVoirOnglet; if (vBt.className=="mbBoutonSel") vOgIni=j; } if (vOgIni == 0) { vOgIni = 1+Math.floor((j-1)*Math.random()) ; document.getElementById("mb"+i+"og"+vOgIni).style.display = "block"; document.getElementById("mb"+i+"og"+vOgIni).style.visibility = "visible"; document.getElementById("mb"+i+"bt"+vOgIni).className="mbBoutonSel"; } } } function CadreOngletVoirOnglet(){ var vMbNom = this.id.substr(0,3); var vIndex = this.id.substr(5,1); var i=1 for (i=1;i<=9;i++){ var vOgElem = document.getElementById(vMbNom+"og"+i); if (!vOgElem) break; if (vIndex==i){ vOgElem.style.display = "block"; vOgElem.style.visibility = "visible"; document.getElementById(vMbNom+"bt"+i).className="mbBoutonSel"; } else { vOgElem.style.display = "none"; vOgElem.style.visibility = "hidden"; document.getElementById(vMbNom+"bt"+i).className="mbBouton"; } } return false; } addOnloadHook(CadreOngletInit); /*FIN DU CODE JAVASCRIPT DE "CADRE À ONGLETS"*/ /** * Boîtes déroulantes * * Pour [[Modèle:Méta palette de navigation]] */ var autoCollapse = 2; var collapseCaption = '[ Enrouler ]'; var expandCaption = '[ Dérouler ]'; function collapseTable( tableIndex ) { var Button = document.getElementById( "collapseButton" + tableIndex ); var Table = document.getElementById( "collapsibleTable" + tableIndex ); if ( !Table || !Button ) return false; var Rows = Table.getElementsByTagName( "tr" ); if ( Button.firstChild.data == collapseCaption ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = "none"; } Button.firstChild.data = expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } } function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = new Object(); var Tables = document.getElementsByTagName( "table" ); for ( var i = 0; i < Tables.length; i++ ) { if ( hasClass( Tables[i], "collapsible" ) ) { NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); var Button = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption ); Button.style.styleFloat = "right"; Button.style.cssFloat = "right"; Button.style.fontWeight = "normal"; Button.style.textAlign = "right"; Button.style.width = "6em"; ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); ButtonLink.appendChild( ButtonText ); Button.appendChild( ButtonLink ); var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0]; /* only add button and increment count if there is a header row to work with */ if (Header) { Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; } } } for (var i = 0; i < tableIndex; i++) { if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) collapseTable( i ); } } addOnloadHook(createCollapseButtons); /** * Pour [[Modèle:Boîte déroulante]] */ var NavigationBarShowDefault = 0; function toggleNavigationBar(indexNavigationBar) { var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); if (!NavFrame || !NavToggle) return; // surcharge des libellés dérouler/enrouler grâce a l'attribut title // exemple : title="[déroulade]/[enroulade]" var caption = [expandCaption, collapseCaption]; if (NavFrame.title && NavFrame.title.length > 0) { caption = NavFrame.title.split("/"); if (caption.length < 2) caption.push(collapseCaption); } // if shown now if (NavToggle.firstChild.data == caption[1]) { 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 = caption[0]; } // if hidden now } else if (NavToggle.firstChild.data == caption[0]) { 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 = caption[1]; } } } // 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 + ');'); // surcharge des libellés dérouler/enrouler grâce a l'attribut title var caption = collapseCaption; if (NavFrame.title && NavFrame.title.indexOf("/") > 0) { caption = NavFrame.title.split("/")[1]; } var NavToggleText = document.createTextNode(caption); 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); /** * Compteur de consultation d'articles * * Please talk to User:LeonWeber before changing anything or * if there are any issues with that. * this should be adjusted to a good value. * BE CAREFULL, you will break zedler if it's too low! * And then DaB. will kill Leon :-( */ var disable_counter = 0; var counter_factor = 900; function pgcounterSetup() { if(disable_counter == 0) { var url = window.location.href; if(Math.floor(Math.random()*counter_factor)==42) { // the probability thing if(wgIsArticle==true) { // do not count history pages etc. var pgcountNs = wgCanonicalNamespace; if(wgCanonicalNamespace=="") pgcountNs = "0"; var cnt_url = "http://pgcount.wikimedia.de/index.png?ns=" + pgcountNs + "&title=" + encodeURI(wgTitle) + "&factor=" + counter_factor + "&wiki=frwiki"; var img = new Image(); img.src = cnt_url; } } } } addOnloadHook(pgcounterSetup); /** * Réécriture des titres * * Fonction utilisée par [[Modèle:Titre incorrect]] * * La fonction cherche un bandeau de la forme * <div id="RealTitleBanner"> * <span id="RealTitle">titre</span> * </div> * * Un élément comportant id="DisableRealTitle" désactive la fonction */ function rewritePageH1() { var realTitleBanner = document.getElementById('RealTitleBanner'); if (realTitleBanner) { if (!document.getElementById('DisableRealTitle')) { var realTitle = document.getElementById('RealTitle'); var h1 = document.getElementsByTagName('h1')[0]; if (realTitle && h1) { var titleText = realTitle.innerHTML; if (titleText == '') h1.style.display = 'none'; else h1.innerHTML = titleText; realTitleBanner.style.display = 'none'; } } } } addOnloadHook(rewritePageH1); /** * Icônes de titre * * Cherche les icônes de titre (class="icone de titre") et les * déplace à droite du titre de la page. * Doit être exécuté après une éventuelle correction de titre. */ function IconesDeTitre() { var h1 = document.getElementsByTagName("h1")[0]; var icones = document.getElementsByTagName("div"); var icones2 = new Array(); var j = 0; for (var i = 0; i < icones.length; ++i) { if (icones[i].className == "icone de titre") { icones2[j++] = icones[i]; } } for (; j > 0; --j) { icones2[j-1].style.display = "block"; /* annule display:none par défaut */ icones2[j-1].style.borderWidth = "1px"; icones2[j-1].style.borderStyle = "solid"; icones2[j-1].style.borderColor = "white"; h1.insertBefore(icones2[j-1], h1.firstChild); /* déplacement de l'élément */ } } addOnloadHook(IconesDeTitre); /** * Déplacement de coordonnées qui apparaissent en haut de la page */ function moveCoord() { var h1 = document.getElementsByTagName("h1")[0]; var coord = document.getElementById('coordinates'); if ( !coord || !h1 ) return; coord.id = "coordinates-title"; h1.insertBefore(coord, h1.firstChild); } addOnloadHook(moveCoord); /** * Déplacement des [modifier] * * Correction des titres qui s'affichent mal en raison de limitations dues à MediaWiki. * * Copyright 2006, Marc Mongenet. Licence GPL et GFDL. * * The function looks for <span class="editsection">, and move them * at the end of their parent and display them inline in small font. * var oldEditsectionLinks=true disables the function. */ function setModifySectionStyle() { try { if (!(typeof oldEditsectionLinks == 'undefined' || oldEditsectionLinks == false)) return; var spans = document.getElementsByTagName("span"); for (var s = 0; s < spans.length; ++s) { var span = spans[s]; if (span.className == "editsection") { span.style.fontSize = "xx-small"; span.style.fontWeight = "normal"; span.style.cssFloat = span.style.styleFloat = "none"; span.parentNode.appendChild(document.createTextNode(" ")); span.parentNode.appendChild(span); } } } catch (e) { /* something went wrong */ } } addOnloadHook(setModifySectionStyle); /** * Cache cadres de l'accueil * * Ajoute un lien sur la page d'accueil pour cacher facilement les cadres * Mémorisé par cookie. * Copyright 2007, fr:user:Plyd et fr:User:IAlex. Licence GFDL et GPL. */ var cookieCacheCadresName = "cacheCadresAccueil"; var CacheCadresVal = {}; var totalCadresAccueil = 0; function affCadreAccueil(id) { visible = CacheCadresVal[id] = (!CacheCadresVal[id]); getElementsByClass('accueil_contenu',null,'div')[id].style.display = visible ? 'block' : 'none'; document.getElementById('CacheCadreAccueil' + id).innerHTML = visible ? 'masquer' : 'afficher'; sauverCookieAccueil(); } function sauverCookieAccueil() { var date = new Date(); date.setTime(date.getTime() + 30*86400*1000); var val = 0; for ( var i=0; i< totalCadresAccueil ; i++ ) { if (!CacheCadresVal[i]) val = val | Math.pow(2,i); } document.cookie = cookieCacheCadresName + "=" + val + "; expires="+date.toGMTString() + "; path=/"; } function LiensCadresAccueil() { if (wgPageName != "Accueil") return; cookieCadresAccueil = getCookieVal(cookieCacheCadresName); for ( var i=0; i<5; i++) { var titre = getElementsByClass('headergris',document,'h2')[i]; if (!titre) break; titre.innerHTML += " <span style='font-size: xx-small; font-weight: normal; float: none; margin-right:100px' class='editsection'>[<a id='CacheCadreAccueil" + i + "' href='javascript:affCadreAccueil(" + i + ");'>masquer</a>]</span>"; CacheCadresVal[i] = true; totalCadresAccueil++; } cookieCadresAccueil = getCookieVal(cookieCacheCadresName); for ( var i=0; i< totalCadresAccueil ; i++ ) { n =Math.pow(2,i); aff = !(cookieCadresAccueil & n); if (!aff) affCadreAccueil(i); } } addOnloadHook(LiensCadresAccueil); /** * Déplace les liens portails vers la boite de catégorie * * Copyright 2007, fr:user:Aoineko. Licence GFDL et GPL. */ var gUseMovePortalToCategoryBox = 1; function movePortalToCategoryBox() { if(!gUseMovePortalToCategoryBox) return; // search for portails var div_portal = document.getElementById('portallinks'); if(div_portal && (div_portal.className == 'movable')) { div_portal.style.display = 'none'; // hide the portail div var div_cat = document.getElementById('catlinks'); // get cat div if(!div_cat) { // no category box ? then create it var div_foot; var divs = document.getElementsByTagName('div'); for(var i = 0; i < divs.length ; i++) if(divs[i].className == 'printfooter') div_foot = divs[i]; div_cat = document.createElement("div"); div_cat.setAttribute('id', 'catlinks'); div_foot.parentNode.insertBefore(div_cat, div_foot); } div_cat.innerHTML = div_portal.innerHTML + '<hr/>' + div_cat.innerHTML; } } addOnloadHook(movePortalToCategoryBox); /*************************************/ /* Applications pour les rédacteurs */ /*************************************/ /* todo : migrer celles qui ne sont pas vitales dans les gadgets */ /** * Fonctions de remplissage automatique */ function InitPaS(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" + "{{subst:Initialiser PàS|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|jour=19|mois=03}}\n" + "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des Pages à supprimer -->"; } function InitLANN(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" + "{{subst:Initialiser LANN|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)}}\n" + "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des articles non neutres -->"; } function InitIaS(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" + "{{subst:Préchargement Image à Supprimer|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|jour=19|mois=03}}\n" + "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des Images à supprimer -->"; } function InitPAdQ(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n\n" + "{{subst:Initialiser PAdQ|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|jour=19|mois=03}}"; } function InitIaA(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" + "{{subst:Amélioration image}}"; } function InitPCP(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" + "{{subst:Initialiser PCP|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)}}\n" + "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des\n" + " articles soupçonnées de violation de copyright -->"; } function InitArbReq(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" + "{{subst:Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}\n" + "<!-- N'oubliez pas d'ajouter un lien vers cette page sur [[Wikipédia:Comité d'arbitrage/Arbitrage]] -->"; } function InitDiscArbReq(page_name) { return "<!-- Sauvegarder la page pour l'initialiser -->\n" + "{{subst:Discussion Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}"; } function InitCdl(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" + "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale du comité de lecture -->\n\n" + "<noinclude>{{subst:Initialiser Comité de lecture2}}</noinclude>\n" + "{{subst:Initialiser Comité de lecture|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)}}"; } function InitProjetTraduction(page_name) { var mustSkip=wgPageName.indexOf('Projet:Traduction/*/'); if (mustSkip == -1) { return "{{subst:Initialiser la page de traduction|Common.js|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|\n" + "<!-- À la création de la page, suivez les consignes ci-dessous pour proposer l'article. \n" + " ATTENTION : Veuillez ne rien effacer ! -->\n" + "1. Indiquez ci-dessous la langue de l'article à traduire (ex: en de es it pt...)\n" + "|en|\n" + "2. Indiquez ci-dessous le nom de l'article original (ex: Frankreich)\n" + "|Nom original ici| \n" + "3. Indiquez ci-dessous en une phrase l'intérêt de la traduction\n" + "|article très bien|\n" + "4. Ajoutez éventuellement un court commentaire \n" + "|commentaire très intéressant ici|\n" + "| 5. C'est fini, vous pouvez désormais sauvegarder cette page.\n" + "}}"; } else { return ""; } } function InitPBA(page_name) { return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n\n" + "{{subst:Initialiser PBA|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|jour=19|mois=03}}"; } function InitPL(page_name) { return "<!-- Remplir les paramètres mois et année à la sous page correspondante, et créer les liens rouges -->\n" + "{{Portail:Littérature/Invitation à la lecture/Sélection/Modèle \n" + "| mois = \n" + "| année = \n" + "}} \n" + "<noinclude>{{Portail:Littérature/Invitation à la lecture/Sélection/Modèle inclusion \n" + "| mois = \n" + "| année = \n" + "}} \n" + "</noinclude>"; } var init_if_empty = new Array( new Array('Wikipédia:Pages_à_supprimer/', InitPaS), new Array('Wikipédia:Liste_des_articles_non_neutres/', InitLANN), new Array('Wikipédia:Images_à_supprimer/', InitIaS), new Array('Wikipédia:Proposition_articles_de_qualité/', InitPAdQ), new Array('Wikipédia:Pages_soupçonnées_de_violation_de_copyright/', InitPCP), new Array('Discussion_Wikipédia:Comité_d\'arbitrage/Arbitrage/', InitDiscArbReq), new Array('Wikipédia:Comité_d\'arbitrage/Arbitrage/', InitArbReq), new Array('Wikipédia:Comité_de_lecture/', InitCdl), new Array('Projet:Traduction/', InitProjetTraduction), new Array('Wikipédia:Proposition_bons_articles/', InitPBA), new Array('Portail:Littérature/Invitation_à_la_lecture/Sélection/', InitPL) ); /** * Remplit la zone d'édition si elle est vide avec le texte retourné par * un pointeur de fonction sélectionné par le nom de la page. */ function InitPage() { // Tester si editform et wpTextbox1 existe sinon il y a une erreur lorsqu'on // ouvre l'historique d'une page qui match un des noms de init_if_empty[], // tester seulement le nom de la page n'est pas suffisant. if (document.editform == undefined || document.editform.wpTextbox1 == undefined) return; var text_area = document.editform.wpTextbox1; if (text_area.value.length != 0) return; for (var i = 0; i < init_if_empty.length; ++i) { var page_match = init_if_empty[i][0]; var index = wgPageName.indexOf(page_match); if (index != -1) { page_name = wgPageName.slice(page_match.length); page_name = page_name.replace(/_/g, ' '); text_area.value = init_if_empty[i][1](page_name); break; } } } addOnloadHook(InitPage); /** * Caractères spéciaux * * Ajouter un menu pour choisir des sous-ensembles de caractères spéciaux. * Ecrit par Zelda, voir sur [[Utilisateur:Zelda/Edittools.js]]. * Remplace l'ancienne fonction par une variante plus rapide. */ /** * Ajoute un menu déroulant permettant de choisir un jeu de caractères spéciaux * Les caractères spéciaux sont définis dans Mediawiki:Edittools */ function addCharSubsetMenu() { var specialchars = document.getElementById('specialcharsets'); if (!specialchars) return; // Construction du menu de selection var charSubsetSelect = document.createElement("select"); charSubsetSelect.setAttribute("style", "display:inline"); charSubsetSelect.onchange = function () { chooseCharSubset(this.selectedIndex); }; // Ajout des options au menu var p = document.getElementById('specialcharsets').getElementsByTagName('p'); for (var i = 0; i < p.length ; i++) { var opt = document.createElement("option"); var txt = document.createTextNode(p[i].title); opt.appendChild(txt); charSubsetSelect.appendChild(opt); } specialchars.insertBefore(charSubsetSelect, specialchars.childNodes[0]); /* default subset - try to use a cookie some day */ chooseCharSubset(0); } /** * Affichage du jeu de caractères sélectionné */ function chooseCharSubset(index) { var p = document.getElementById('specialcharsets').getElementsByTagName('p'); for (var i = 0; i < p.length ; i++) { // Initialisation du jeu de caractères sélectionné if (i == index) { initializeCharSubset(p[i]); } // Affichage du jeu sélectionné, masquage des autres p[i].style.display = i == index ? 'inline' : 'none'; p[i].style.visibility = i == index ? 'visible' : 'hidden'; } } /** * Initialisation du jeu de caractères sélectionné * Paramètre : paragraphe contenant le jeu à initialiser. Initialise tous les * caractères contenus dans les sous-spans du paragraphe */ function initializeCharSubset(p) { // recherche des sous-elements de type span à traiter var spans = p.getElementsByTagName("span"); if (!spans) return; // regexp pour echapper les caractères JS spéciaux : \ et ' var re = new RegExp("(\\\\|')", "g"); // gestion du caractère d'échappement '\' var escapeRe = new RegExp("[^\\\\](\\\\\\\\)*\\\\$", "g"); var unescapeRe = new RegExp("\\\\\\\\", "g"); // traitement des spans du paragraphe for (var j = 0; j < spans.length; j++) { // span deja traité if (spans[j].childNodes.length == 0 || spans[j].childNodes[0].nodeType != 3) continue; // On parse le contenu du span var chars = spans[j].childNodes[0].nodeValue.split(" "); for (var k = 0; k < chars.length; k++) { var a = document.createElement("a"); var tags = chars[k]; // regroupement des mots se terminant par un espace protégé par un \ while (k < chars.length && chars[k].match(escapeRe)) { k++; tags = tags.substr(0, tags.length - 1) + " " + chars[k]; } // création du lien insertTag(tagBegin, tagEnd, defaultValue) en protegeant les caractères JS \ et ' tags = (tags.replace(unescapeRe, "\\")).split("+"); var tagBegin = tags[0].replace(re, "\\$1"); var tagEnd = tags.length > 1 ? tags[1].replace(re, "\\$1") : ""; var defaultValue = tags.length > 2 ? tags[2].replace(re, "\\$1") : ""; a.href = "javascript:insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "')"; //a.href="#"; //eval("a.onclick = function() { insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "'); return false; }"); a.appendChild(document.createTextNode((tagBegin + tagEnd).replace(unescapeRe, "\\"))); spans[j].appendChild(a); spans[j].appendChild(document.createTextNode(" ")); } // suppression de l'ancien contenu spans[j].removeChild(spans[j].firstChild); } } addOnloadHook(addCharSubsetMenu); /** * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant * paramètres : * - nom du jeu de caractères * - contenu HTML. Les caractères spéciaux doivent être dans des spans * exemple : "caractères : <span>â ê î ô û</span>" */ function addSpecialCharsetHTML(title, charsHTML) { var specialchars = document.getElementById('specialcharsets'); if (!specialchars) return; // Ajout des caractères spéciaux. Les liens seront initialisé par initializeCharSubset() // lors de la sélection var specialcharsets = document.getElementById('specialcharsets'); var p = document.createElement("p"); p.style.display = "none"; p.title = title; p.innerHTML = charsHTML; specialcharsets.appendChild(p); } /** * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant * paramètres : * - nom du jeu de caractères * - caractères spéciaux * exemple d'utilisation : addSpecialCharset("Français", "â ê î ô û"); */ function addSpecialCharset(title, chars) { addSpecialCharsetHTML(title, "<span>" + chars + "</span>"); } /** * Générateur de tableaux * English: Generate an array using Mediawiki syntax * * @author: fr:user:dake * @version: 0.2 */ function generateTableau(nbCol, nbRow, styleHeader, styleLine) { var code = "\n{| " + ((styleHeader==1) ? 'class="wikitable"' : '')+ '\n|+ 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 styleHeader = document.paramForm.inputHeader.checked; '; javaCode += 'var styleLine = document.paramForm.inputLine.checked; '; javaCode += 'window.opener.generateTableau(col,row,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">/*<![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('Mise en forme (wikitable) : <input type="checkbox" name="inputHeader" checked="1" ><p>'); popup.document.write('Lignes grises alternées : <input type="checkbox" name="inputLine" checked="0" ><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 */ function addCustomButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) { mwCustomEditButtons[mwCustomEditButtons.length] = {"imageId": imageId, "imageFile": imageFile, "speedTip": speedTip, "tagOpen": tagOpen, "tagClose": tagClose, "sampleText": sampleText}; } addCustomButton('http://upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png', 'Tableau', '{|\n|-\n|\n|\n|}', '', '', 'mw-editbutton-array'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/c9/Button_strike.png', 'Rayer', '<s>', '</s>', '', 'mw-editbutton-strike'); 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', '', '', 'mw-editbutton-enum'); 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', '', '', 'mw-editbutton-liste'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/9/9e/Btn_toolbar_gallery.png', 'Galerie d\'images', '\n<!--Consultez l Anti-sèche pour les options de la galerie-->\n<center>\n<gallery caption="Donner un titre à votre galerie">\nImage:Exemple.jpg|légende\nImage:Exemple1.jpg|légende\nImage:Exemple2.jpg|légende\n</gallery>\n</center>', '', '', 'mw-editbutton-gallery'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/37/Btn_toolbar_commentaire.png', 'Commentaire', '<!--', '-->', '', 'mw-editbutton-comment'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/4/47/Button_redir.png', 'Redirection', '#REDIRECT [[', ']]', 'nom de la destination', 'mw-editbutton-redir'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/b4/Button_category03.png', 'Catégorie', '[[Catégorie:', ']]', 'nom de la catégorie', 'mw-editbutton-category'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/3b/Button_template_alt.png', 'Modèle', '{{', '}}', 'modèle ou page à inclure', 'mw-editbutton-template'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/c4/Button_ref.png', 'Référence', '<ref>', '</ref>', 'référence, citation ou lien', 'mw-editbutton-ref'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/6/64/Buttonrefvs8.png', 'Index des références', '== Notes et références ==\n<references />', '', '', 'mw-editbutton-references'); var voirAussi = '<!-- Suggestion de présentation des annexes. Aide : http://fr.wikipedia.org/wiki/Aide:Note -->\n' + '== Annexes ==\n' + '=== Notes et références ===\n' + '<references/>\n' + '=== Articles connexes ===\n' + '* [[À remplacer]]\n' + '*\n' + '=== Liens et documents externes ===\n' + '*\n'; addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/bb/Seealso.png', 'Section Voir aussi', voirAussi, '', '', 'mw-editbutton-voiraussi'); /** * Changer le lien du bouton de création de tableau et supprime le bouton signature sur les articles */ function changButtons() { toolbarArray = document.getElementById('mw-editbutton-array'); if (toolbarArray) { toolbarArray.onclick = function() { popupTableau(); return false; } } var btnSigImg = document.getElementById('mw-editbutton-signature'); if (btnSigImg && wgNamespaceNumber == 0) btnSigImg.style.display = "none"; } addOnloadHook(changButtons); /** * Désactiver le bouton Sauvegarder à la première édition * English : Force IP to preview before saving changes. * Copyright Marc Mongenet, 2006 * Plyd 05/2007: add "after preview" in the button to prevent misunderstanding from beginners */ function forcePreview() { if (wgUserName != null || wgAction != "edit") return; saveButton = document.getElementById("wpSave"); if (!saveButton) return; saveButton.disabled = true; saveButton.value = "Sauvegarder (après prévisualisation)"; saveButton.style.fontWeight = "normal"; document.getElementById("wpPreview").style.fontWeight = "bold"; } addOnloadHook(forcePreview); // Permet d'afficher les catégories cachées pour les contributeurs enregistrés, en ajoutant un (+) à la manière des boîtes déroulantes function hiddencat() { var cl = document.getElementById('catlinks'); if(!cl) return; var hc = document.getElementById('mw-hidden-catlinks'); if(!hc) return; var nc = document.getElementById('mw-normal-catlinks'); if(!nc) return; if( isClass(hc, 'mw-hidden-cats-hidden') ) { var ahc = ' | <a onclick="javascript:toggleHiddenCats();" id="mw-hidden-cats-link" style="cursor:pointer; color:black;" title="Cet article contient des catégories cachées">[+]</a>'; document.getElementById('mw-normal-catlinks').innerHTML += ahc; } } function toggleHiddenCats() { var hc = document.getElementById('mw-hidden-catlinks'); if( isClass(hc, 'mw-hidden-cats-hidden') ) { removeClass(hc, 'mw-hidden-cats-hidden'); addClass(hc, 'mw-hidden-cat-user-shown'); document.getElementById('mw-hidden-cats-link').innerHTML = '[–]'; } else { removeClass(hc, 'mw-hidden-cat-user-shown'); addClass(hc, 'mw-hidden-cats-hidden'); document.getElementById('mw-hidden-cats-link').innerHTML = '[+]'; } } addOnloadHook(hiddencat); //</nowiki>