Utilisateur:Darkoneko/commons.js
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
}