Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/*
 Partie de mon javascript sur lequel j'ai déjà blogué et/ou que je ne compte plus modifier, pour alleger l'édition plus fréquente de monobook.js
*/


//créé un lien et le retourne.
//le parametre onclick est facultatif.
window.createAdressNode = function (href, texte, onclick) {
	var a = document.createElement('a');
	a.href = href;
	a.appendChild(document.createTextNode( texte ) );
	if(arguments.length == 3) { a.setAttribute("onclick", onclick ); }

	return a;
};


function addHistoryLinkToInterwikis() {
   var plang = document.getElementById("p-lang")
   if ( ! plang  ) return //pas d'interwikis

   var interwikiList = plang.getElementsByTagName("div")[0].getElementsByTagName("ul")[0].getElementsByTagName("li")
   if( !interwikiList) return ; //fin

   var link
   for (a=0 ; a<interwikiList.length ; a++) { 
      link = interwikiList[a].getElementsByTagName("a")[0].href

      interwikiList[a].insertBefore( document.createTextNode( ' (' ) , null )
      interwikiList[a].insertBefore( createAdressNode(link + "?action=history", 'hist') , null )
      interwikiList[a].insertBefore( document.createTextNode( ')' ) , null )      
   }
}


function addDeleteLinkFromWhatLinksHere() {
   var zone = document.getElementById("contentSub")
   var name = zone.getElementsByTagName("a")[0].title
   var lien = createAdressNode("http://fr.wikipedia.org/w/index.php?title="+name+"&action=delete", "supprimer cette page...")
   zone.appendChild( document.createTextNode(" - ") )
   zone.appendChild( lien )
}



function get_editcounts(noms) {
   var EditCount = new Array() //tableau des valeurs (nom user => editcount)
   var len

   var http_request = new XMLHttpRequest()
   http_request.overrideMimeType('text/xml');

   var address = "/w/api.php?format=xml&action=query&list=users&usprop=editcount&ususers=" + noms.join('|')

   http_request.open('GET', address , false)
   http_request.send(null)

  // la limite est de 4000 chars pour le parametre ususers. prevoir 3500 et faire une coupure après le | suivant.
 //  alert( noms.join('|').length ) 
   var users = http_request.responseXML.documentElement.getElementsByTagName("user")


   for (var a = 0, len = users.length ; a < len ; a++) { 
       //apparemment impossible de faire des clefs nommées, donc tant pis.
       if( typeof( users[ a ].attributes['editcount'] ) != 'undefined' ) {
           EditCount[ users[ a ].attributes['name'].value  ] = users[a].attributes['editcount'].value
       } else {  //cas d'une page de discussion utilisateur qui ne correspond pas à un compte (sinon ça plante)
           EditCount[ users[ a ].attributes['name'].value  ] = 'N/A'
       }
   }
   return EditCount
}







 
function addContribLinkNearTalkPageInContributions() {

  var contribList = document.getElementById("bodyContent").getElementsByTagName("ul")[0].getElementsByTagName("li")

  var len  = contribList.length  // sert pour les compteurs
  var user = new Array()

  for (var a=0; a < len ; a++) { 
     var nom = contribList[a].getElementsByTagName("a")[1].title
     if ( nom.substring(0,23).toLowerCase() == "discussion utilisateur:" /*&&  nom.indexOf('&') == -1 */ ) {
         user.push(  encodeURIComponent( nom.substring(23) ) )
     }
  }

  var usersEditCount = get_editcounts( user )  //dur de séparer en morceau, car javascript supporte mal les tableaux associatifs, et .concat() ne marchera pas 

  for (a=0 ; a < len ; a++) { 
     //verifier que c'est bien une page de discussion utilisateur:
     if ( contribList[a].getElementsByTagName("a")[1].title.substring(0,23).toLowerCase() == "discussion utilisateur:" ) {
         var user = contribList[a].getElementsByTagName("a")[1].title.substring(23)
         //ajouter un lien vers les contribs de l'utilisateur    
         
         //si 0 contribs, pas de lien.
         if ( usersEditCount[ user ] == 0 ) continue;
         
         contribList[a].insertBefore( document.createTextNode( ' (' ) , null )
         if ( usersEditCount[ user ] != 'N/A' ) { //cas des pages sans compte associé
             texte_contrib = createAdressNode('/wiki/Special:Contributions/' + user, usersEditCount[ user ] + ' contrib' + (usersEditCount[user] > 1 ? "s" : "" ) )
         } else {
             texte_contrib = document.createTextNode( 'pas de compte' )
         }
     
         texte_contrib.className = "contribLink"
         contribList[a].insertBefore( texte_contrib, null )
         contribList[a].insertBefore( document.createTextNode( ')' ) , null )
     }
  }
}




//voir http://www.lyxia.org/blog/developpement/javascriptajax/raccourcis-claviers-en-javascript-214
//main function. Looks at the context and call the appropriate sub-function to make the key mapping
function keyboardShortcuts() {

    switch( mw.config.get('wgAction') ) {
      case "edit": //edit mode
      case "submit":
         isCtrl=false; //est ce que ça corrige le bug du "ctrl appuyé" ?
         keyboardShortcuts_edit()
         break

      case "history": //looking throught a page's history
         keyboardShortcuts_logs()
         break

      case "historysubmit": //watching a diff (first clic from history page ; others have mw.config.get('wgAction')=view)
         keyboardShortcuts_diff()
         break

      case "view": 
         //reading a log or contribution page
         if ( mw.config.get('wgCanonicalSpecialPageName') == "Contributions" || mw.config.get('wgCanonicalSpecialPageName') == "Log" ) {
             keyboardShortcuts_logs()
             break
         }
         //viewing a diff
         var reg = new RegExp("[\?&]diff=","i")
         if( reg.test(location.href)  ) {
             keyboardShortcuts_diff()
             break
         }

         break
    }

}


//this event function is called when reading a contributions/log/history page.
//it allow navigation to previous/next page using the left and right arrow keys
function keyboardShortcuts_logs() {
  document.onkeydown=function(e){
     e = e||window.event
     var key = e.keyCode||e.which
     var classe
     if(key == 37) { // left arrow
        classe = "mw-prevlink"
     } else if(key == 39) { //right arrow
        classe = "mw-nextlink"
     } else {
        return true
     }

     var liens = document.getElementsByClassName(classe)
     if(!liens || !liens[0] ) return //there's no prev link on the 1st page, no next link on the last page
     window.location = liens[0].href

     return false
  }
}


//this event function is called when viewing a diff.
//it allow navigation throught diffs using the left and right arrow keys
function keyboardShortcuts_diff() {
  document.onkeydown=function(e){
     e = e||window.event
     var key = e.keyCode||e.which
     var id
     if(key == 37) { // left arrow
        id = "differences-prevlink"
     } else if(key == 39) { //right arrow
        id = "differences-nextlink"
     } else {
        return true
     }

     var lien = document.getElementById(id)
     if(!lien) return
     window.location = lien.href

     return false
  }
}

function keyboardShortcuts_edit() {
  var isCtrl  = false
  var isShift = false

  document.onkeyup=function(e) {
    e = e||window.event
    var key = e.keyCode||e.which

    switch(key) {
      case 16:  isShift = false; break
      case 17:  isCtrl  = false; break
    }
    return true
  }

  document.onkeydown=function(e){
    var key = e.which

    if(key == 16) { //l'user pushed "shift"
      isShift=true
      return
    }

    if(key == 17) { //l'user pushed "ctrl"
      isCtrl=true
      return
    }

    //gestion des ctrl+lettre que l'on veux ajouter.
    if( isCtrl == true ) {   
       //touche à ne pas affecter car utilisées ailleurs : 
       //x c v (couper copier coller), a (select all), z (annuler), r (recharger sous FF), t (ouvrir onglet), h (historique) ?
       switch (key) { //quelle touche a été enfoncée ?
  	  case 66: insertTags("'''", "'''", 'gras');   break; // b
	  case 73: insertTags("''", "''", 'italique'); break; // i
          case 76: insertTags('[[', ']]', 'lien interne');  break; // l
          case 77: insertTags('{{', '}}', 'modèle');  break; // m
	  case 85: insertTags('<u>', '</u>', 'souligné'); break; // u
	  default: return true;
       }
       return false
     }
  }
  return true
}






function customizeTopBar() {

   var mytalk = document.getElementById('pt-mytalk');
   var topBarUl = mytalk.parentNode

   var userlink = document.getElementById('pt-userpage')    //ajouter un lien vers la page user:darkoneko lorsque connecté depuis un autre compte
   if( userlink.getElementsByTagName("a")[0].firstChild.nodeValue != 'Darkoneko' ) {
       topBarUl.insertBefore( createLiAdressNode('/wiki/User:Darkoneko', '-Darkoneko-'), userlink )
   }   

   //ajouter "js" a gauche de discussion
   topBarUl.insertBefore( createLiAdressNode('/wiki/user:'+mw.config.get('wgUserName')+'/'+skin+'.js', 'js'), mytalk)

   //ajouter "js" a gauche de discussion
   topBarUl.insertBefore( createLiAdressNode('/wiki/user:Darkoneko/commons.js', 'js2'), mytalk)

   //ajouter "css" a gauche de discussion, donc il sera entre "js" et "discut'"
   topBarUl.insertBefore( createLiAdressNode('/wiki/user:'+mw.config.get('wgUserName')+'/'+skin+'.css', 'css'), mytalk)

   //changer l'en tete pour "Page de discussion"
   mytalk.getElementsByTagName("a")[0].firstChild.nodeValue = "Discut"

   //changer l'en tete pour "Préférences"
   document.getElementById('pt-preferences').getElementsByTagName("a")[0].firstChild.nodeValue = "prefs"

   //changer l'en tete pour "Liste de suivi"
   document.getElementById('pt-watchlist').getElementsByTagName("a")[0].firstChild.nodeValue = "watchlist"

   //changer l'en tete pour "Contributions"
   document.getElementById('pt-mycontris').getElementsByTagName("a")[0].firstChild.nodeValue = "contribs"

   //ajouter "log" a gauche de déconnexion
   var logout = document.getElementById("pt-logout")
   topBarUl.insertBefore( createLiAdressNode('/w/index.php?title=Special:Journal&user='+mw.config.get('wgUserName'), 'log'), logout )

   //changer l'en tete pour "Deconnexion"
   logout.getElementsByTagName("a")[0].firstChild.nodeValue = "X"
}




 
function ongletsPageUser() {
    var onglet0 = document.getElementById("onglet0")
    if(!onglet0) return; //utile au moins lors de l'édition de sections de la page
    onglet0.style.display = "none"
    document.getElementById("onglet1").style.display = "block"

    var ongletMenu = document.getElementById("ongletMenu") //créer le menu (le div de base est déjà dans le document, par flemme)

    ongletMenu.appendChild( createAdressNode('#', 'Défaut',    'return afficherOnglet(0);') )
    ongletMenu.appendChild( document.createTextNode( ' - ' ) )
    ongletMenu.appendChild( createAdressNode('#', 'Principal', 'return afficherOnglet(1);') )
    ongletMenu.appendChild( document.createTextNode( ' - ' ) )
    ongletMenu.appendChild( createAdressNode('#', 'Outils',    'return afficherOnglet(2);') )
    ongletMenu.appendChild( document.createTextNode( ' - ' ) )
    ongletMenu.appendChild( createAdressNode('#', 'Autre',     'return afficherOnglet(3);') )
}
 
 
//afficher un onglet, masquer tous les autres
function afficherOnglet(numero) {
  for (var i=0 ; (onglet = document.getElementById("onglet"+i)) ; i++) {
     onglet.style.display="none"
  }
  document.getElementById("onglet"+numero).style.display="block"
  return false
}