/* generated javascript */ var skin = 'monobook'; var stylepath = '/skins-1.5'; /* MediaWiki:Common.js */ /** * Les ECMAscripts présents sur cette page s'appliquent à tous les contributeurs, enregistrés ou non. * * - Si vous voulez utiliser des scripts personnels utilisez * votre page de scripts personnelle : http://fr.wikibooks.org/wiki/Special:Mypage/monobook.js * - Vous pouvez proposer en page de discussion des modifications à apporter à cette page. * - Si vous souhaitez désactiver une fonctionnalité, enlevez-la de la table onLoadFuncts * en utilisant la fonction removeOnloadHook(func) * * Voir aussi * - http://fr.wikibooks.org/wiki/Mediawiki:Monobook.css * - http://fr.wikibooks.org/wiki/Mediawiki:Common.css * * NOTES aux programmeurs : * - éviter les comparaisons directes avec className qui peut contenir plusieurs noms de classe CSS, * mais utiliser la fonction hasClass(element, classe) * - CamelCase + K&R bracing + 4 espaces d'indentation + commentaires doxygen * */ /************************************************************/ /* Fonctions générales (pallient les limites de javascript) */ /************************************************************/ /** * Traitement des classes * Javascript ne fournit actuellement que .className qui est extrêmement limité * surveiller l'implémentation de .classList http://www.w3.org/TR/2008/WD-html5-diff-20080122/#htmlelement-extensions */ function whichClass(element, classes) { var s=" "+element.className+" "; for (var i=0; i=0) return i; return -1; } function hasClass(node, classe) { var s=" "+node.className+" "; return s.indexOf(" "+classe+" ") >= 0; } function isClass(element, classe) {/*déprécié : utiliser hasClass*/ return hasClass(element, classe); } 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; } /** * rechercher les éléments de la page dont le paramètre "class" est celui recherché * http://developer.mozilla.org/en/docs/DOM:document.getElementsByClassName */ function getElementsByClass(searchClass,node,tag) { if ( node == null ) node = document; if ( tag == null ) tag = '*'; return getElementsByClassName(node, tag, searchClass); } /** * Fonctions de traitement de chaines */ function equalsAa(str1, str2) { return str1.toUpperCase() == str2.toUpperCase(); } function startsWithAa(string, prefix) { return equalsAa(string.substring(0, prefix.length), prefix); } function substractPrefixAa(string, prefix) { return startsWithAa(string, prefix) ? string.substring(prefix.length) : string; } /** * Recherche d'un élément contenu dans base * dont le nom est name * @param base Nœud contenant l'élément recherché * @param name Nom de l'élément recherché */ function getFirstElement(base,name) { if (!base) return null; return getNextElement(base.firstChild, name, true); } /** * Recherche du prochain élément après base * dont le nom est name * @param base Noeud précédemment trouvé * @param name Nom de l'élément recherché * @param testbase (optionnel) true pour tester le nœud donné. */ function getNextElement(base,name,testbase) { while (base!=null) { if (testbase && (base.nodeType==1) && equalsAa(base.nodeName,name)) return base; testbase=true; base=base.nextSibling; } return null; } /** * Écriture cookie : expire après 1 année par défaut */ function SetVar(name,value) { var expires=new Date(); if (typeof(CookiesLifeTimeYears)=="undefined") CookiesLifeTimeYears=1; expires.setFullYear(expires.getFullYear()+CookiesLifeTimeYears); document.cookie=name+"="+escape(value)+ ";expires="+expires.toGMTString()+";path=/"; } /** * Lecture cookie, valeur par défaut : paramètre defvalue */ function GetVar(name,defvalue) { var s=";"+document.cookie.replace(/ /g,"")+";"; var i=s.indexOf(";"+name+"="); if (i<0) return defvalue; i+=name.length+2; return unescape(s.substring(i,s.indexOf(";",i))); } /** * Récupère la valeur du cookie */ function getCookieVal(name) { return GetVar(name,false); } function devdebug(msg) { if (typeof(_devdebug)=="function") _devdebug(msg); } /************************************************************************/ /* Fonctions générales mediawiki (pallient les limitations du logiciel) */ /************************************************************************/ /** * Insérer un javascript d'une page particulière, idée de Mickachu */ function loadJs(page) { document.write(''); } function obtenir(nom) { loadJs('MediaWiki:JSScripts/' + nom); } /** * Insérer une feuille de style d'une page particulière, idée de DavidL */ function loadCss(page) { document.write(''); } function obtenirCss(nom) { loadCss('MediaWiki:CSS/' + nom); } /** * Teste si la page fait partie d'un livre donné * Ne pas oublier d'ajouter le séparateur utilisé à la fin de title * (en général / , : ou (espace)) */ function inBook(title) { return (wgTitle==title.substring(0,title.length-1)) || wgTitle.substr(0, title.length) == title; } /** * Renvoie le nom du livre */ function getBookName() { var i = wgTitle.indexOf('/'); return (i<0) ? wgTitle : wgTitle.slice(0, i); } /** * Teste le groupe de l'utilisateur */ function usergroup(groupname) { if (!wgUserGroups) return false; for(var i in wgUserGroups) if (wgUserGroups[i]==groupname) return true; return false; } /** * Indicateur de page de discussion ou considérée comme telle */ var wgIsTalkPage = (((wgNamespaceNumber>0)&&(wgNamespaceNumber&1)) // Page de discussion ||((wgNamespaceNumber==4)&&(inBook("Le Bistro/")))); // ou bistro /** * Indicateur de page en cours d'édition */ var wgIsEditingPage = (wgAction == "edit") || (wgAction == "submit"); /** * retourne la valeur d'un attribut html, sinon une valeur par défaut */ function getAttr(node, name, defvalue) { if (!node.attributes) return defvalue; var v=node.attributes.getNamedItem(name); return (v&&v.nodeValue.length)?v.nodeValue:defvalue; } function removeOnloadHook(func) { for(var i in onloadFuncts) if (onloadFuncts[i]==func) { onloadFuncts.splice(i, 1); return; } }; /** * Paramétrage des extensions (auteur: DavidL) */ var jsscript_setup=[]; function addSetup(jsscript, func) { if (! jsscript_setup[jsscript]) jsscript_setup[jsscript]=[]; jsscript_setup[jsscript].push(func); } function doSetup(jsscript) { var setup=jsscript_setup[jsscript]; if (setup) for(var i in setup) setup[i](); } /************************************************************/ /* Applications : les fonctionnalités client en elles-mêmes */ /************************************************************/ /** * Change the presentation of the page title. * * Alternative: use MediaWiki:Gadget-TitreDeluxe.js * @author : DavidL, Tavernier (rewrite) */ function setupTitle() { if ( (wgAction != 'view') || wgNamespaceNumber //only on main space (0) || document.getElementById('contentSub2') ) //while the page is deleted, avoiding to catch the "N revisions deleted" return false; var title = getElementsByClass("firstHeading")[0]; var hasInnerText = (title.innerText != undefined); //IE hack stuff saveTitle = hasInnerText ? title.innerText : title.textContent; var subpages = getElementsByClass("subpages"); if (subpages == "") // return if it's not a subpage return false; var links = subpages[0].getElementsByTagName("a"); title.innerHTML = ""; var endTitle = ""; for (var subpage=0; subpage" + textContent + "\n
" endTitle += textContent + "/"; } endTitle = saveTitle.replace(endTitle, ""); title.innerHTML += endTitle; //a wgSubPageName should be more convenient... subpages[0].textContent = saveTitle; // for copypaste the full title (bonus) subpages[0].innerText = saveTitle; //hack } if ( typeof ( g_setuptitle ) == "undefined" ) addOnloadHook(setupTitle); /** * Boites déroulantes * * @todo : Réécrire * @author : */ // set up max count of Navigation Bars on page, // if there are more, all will be hidden // NavigationBarShowDefault = 0; // all bars will be hidden // NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden var NavigationBarShowDefault = 0; // shows and hides content and picture (if available) of navigation bars function toggleNavigationBar(indexNavigationBar) { var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); if (!NavFrame || !NavToggle) return false; var ShowText = '[ Afficher ]'; var HideText = '[ Masquer ]'; // if shown now if (NavToggle.firstChild.data == HideText) { for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) if ( whichClass(NavChild,['NavPic','NavContent'])>=0 ) NavChild.style.display = 'none'; NavToggle.firstChild.data = ShowText; } // if hidden now else if (NavToggle.firstChild.data == ShowText) { for ( var NavChild = NavFrame.firstChild ; NavChild != null ; NavChild = NavChild.nextSibling ) if ( whichClass(NavChild,['NavPic','NavContent'])>=0 ) NavChild.style.display = 'block'; NavToggle.firstChild.data = HideText; } } // adds show/hide-button to navigation bars function createNavigationBarToggleButton() { var indexNavigationBar = 0; // catch every "NavFrame" class var all_nav_frames = getElementsByClass("NavFrame"); if (all_nav_frames) for(var i=0 ; i(cliquez)"; // ^ innerHTML definitivement plus pratique : a corriger cependant exoElement.style.cursor = "pointer"; solution = exoElement.nextSibling.nextSibling; // càd \n puis ol solution.style.display = "none"; exoElement.addEventListener( //valides DOM "click", function(event){this.nextSibling.nextSibling.style.display="block";}, false ); } } } } addOnloadHook(solutionExercices); /** * Ajoutez le menu pour choisir des sous-ensembles de caractères spéciaux * La liste est créée dynamiquement à partir des attributs id des paragraphes * de MediaWiki:Edittools. */ function addCharSubsetMenu() { var specialchars = document.getElementById('specialchars'); if (specialchars) { var options=""; var l = document.getElementById('specialchars').getElementsByTagName('p'); for (var i = 0; i < l.length ; i++) { var s=getAttr(l[i],"id",""); if (s != "") options += ""; } if (options != "") specialchars.innerHTML = "" + 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 dans la barre d'outils */ // Emplacements classiques des images : url_wpcm='http://upload.wikimedia.org/wikipedia/commons/'; url_wpfr='http://upload.wikimedia.org/wikipedia/fr/'; url_wpen='http://upload.wikimedia.org/wikipedia/en/'; url_wbfr='http://upload.wikimedia.org/wikibooks/fr/'; //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 }; } // Même fonction que addCustomButton en supposant que l'image est sur Wikipedia Commons // (http://upload.wikimedia.org/wikipedia/commons/) function addCustomButtonWpCm(img,desc,topen,tclose,text) { addCustomButton(url_wpcm+img,desc,topen,tclose,text); } addCustomButtonWpCm('3/30/Btn_toolbar_rayer.png','Rayer',"","",''); addCustomButtonWpCm('8/88/Btn_toolbar_enum.png','Énumération',"\\n# élément 1\\n# élément 2\\n# élément 3","",''); addCustomButtonWpCm('1/11/Btn_toolbar_liste.png','Liste',"\\n* élément A\\n* élément B\\n* élément C","",''); addCustomButtonWpCm('9/9e/Btn_toolbar_gallery.png','Galerie d\'images',"\\n\\n","",'Image:M63.jpg|[[M63]]\\nImage:Mona Lisa.jpg|[[La Joconde]]\\nImage:Truite arc-en-ciel.jpg|Une [[truite]]\\n'); addCustomButtonWpCm('3/37/Btn_toolbar_commentaire.png','Commentaire',"",''); addCustomButton(url_wpen+'c/c8/Button_redirect.png','Redirection',"#REDIRECT [[","]]",'nom de la destination'); addCustomButtonWpCm('b/b4/Button_category03.png','Catégorie','\[\[Catégorie:','\]\]','nom de la catégorie'); /** * Noms de page non autorisés pour les utilisateurs non inscrits acceptants le javascript */ var forbidden=[ [ /(\/+)$/ , "" ] , [ /(\/index.php)$/ ], [ /^(Image\:)/ ], [ /(Wikilivres\:Le_Bistro)$/, "Wikilivres:Le_Bistro" ] ]; function redirect(newTitle) { if (!newTitle) newTitle = "Accueil"; document.location = wgArticlePath.replace("$1", newTitle); } function nocreatepage(newTitle) { if (wgAction=="edit") redirect(newTitle); var e = document.getElementById("_createpage"); if (e) { e=e.parentNode; if (e) e.parentNode.removeChild(e); } e = document.getElementById("ca-edit"); if (e) e.parentNode.removeChild(e); e = document.getElementById("ca-addsection"); if (e) e.parentNode.removeChild(e); e = document.getElementById("ca-talk"); if (e) e.parentNode.removeChild(e); } function forbid(re) { var newTitle=(re.length>1)?wgPageName.replace(re[0],re[1]):null; nocreatepage(newTitle); } function forbidpage() { for(var i=0; i