/* generated javascript */ var skin = 'monobook'; var stylepath = '/skins-1.5'; /* MediaWiki:Common.js */ /* N'importe quel JavaScript ici sera chargé pour n'importe quel utilisateur et pour chaque page accédée. ATTENTION : Avant de modifier cette page, veuillez tester vos changements avec votre propre monobook.js. Une erreur sur cette page peut faire bugger le site entier (et gêner l'ensemble des visiteurs), même plusieurs heures après la modification ! NE PAS RETIRER CECI SINON : remplacement des signature, substitution des modèles, ... : /*************************************************************/ /* 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) { var s=" "+element.className+" "; return s.indexOf(" "+classe+" ")>=0; } function whichClass(element, classes) { var s=" "+element.className+" "; for(var i=0;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(''); } /** * 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 = ''; 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' + helpPageURL.innerHTML + ''; 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