Darkoneko's Weblog

Yesterday, today, and no future / time waits for no one

Articles Tagués ‘javascript’

Personnalisons Wikipédia : raccourcis clavier en mode édition

Publié par DarkoNeko le Dimanche 1 novembre 2009

Ce billet fait partie de la série "Personnalisons Wikipédia".

La plupart des logiciels WYSIWYG permettent de modifier l’apparence d’un texte (mise en gras, italique, souligné, etc) à l’aide de raccourcis clavier (respectivement ctrl+b, ctrl+i, ctrl+u, …) La personnalisation d’aujourd’hui vous permettra de créer des raccourcis clavier en JavaScript afin d’avoir des facilités similaires lors de vos éditions sur Wikipédia

Introduction

(ceux qui ne s’intéressent pas aux explications peuvent passer directement au code complet, à la fin du billet)

Le code du jour fait appel à la notion d’évènement, pour lesquels vous trouverez plus d’informations sur Wikibooks. Les évènements qui nous intéressent ici sont ceux qui nous permettront de savoir quand l’utilisateur appuie sur une certaine combinaison de toucher sur le claviers, et sont au nombre de deux :

  • "appui sur une touche du clavier" (onkeydown)
  • "relachement d’une touche du clavier" (onkeyup).

Ces deux évènements permettent d’accéder en interne à un code correspondant à la touche qui viens d’être appuyée ou relachée.

Histoire de nous faciliter la vie, MediaWiki possède déjà une fonction JavaScript permettant de modifier un texte sélectionne comme l’on veux. Cette fonction est par exemple utilisée lorsque vous cliquez sur un des boutons au dessus (la barre de menu) ou en dessous (les listes de caractères spéciaux), en mode édition.

Cette fonction est insertTags(). Elle prend 3 paramètres, qui sont respectivement :

  • les caractères à ajouter avant la sélection
  • Les caractères  à ajouter après la sélection
  • Le texte par défaut,  s’il n’y avait pas de texte séléctionné.

Exemple pour mettre un texte en souligné :


 insertTags('<u>', '</u>', 'souligné');

Note : Le code n’a été, pour l’instant, testé que sous Firefox 3.0 et 3.5.4. N’hésitez pas à me donner un feedback sur le bon fonctionnement (ou non) sur d’autres versions et navigateurs.

Note2 : il faut savoir que les raccourcis défini en javascripts seront prioritaires sur ceux du logiciel (du moins avec firefox)

Passons au code…

Conteneur

Histoire d’être un minimum propre, notre code sera, comme pour les autres de mes billets, encapsulé dans une fonction


function keyboardShortcuts() {
  // le code sera ici
}

 

Utilisation des évènements

La méthode pour définir une action (= l’appel à une fonction) sur les évènements qui nous intéresse est la suivante :


  document.onkeyup = function(e) { //l'user relâche une touche
    //code à executer
  }

  document.onkeydown = function(e){  //l'user appuie sur une touche
    //code à executer
  }

Problématique de la double touche

Problème : nous avons besoin de savoir lorsque l’utilisateur appuie à la fois sur "ctrl" et une lettre. Or, l’événement de base ne permet de le faire que pour une seule touche à la fois
Solution : créer une variable qui sait si ctrl est actuellement appuyé ou non


  var isCtrl = false; //la touche commence "non enfoncée"

  //l'evenement "onkeyup" est appelé à chaque fois qu'une touche est relachée.
  document.onkeyup=function(e) {
    if(e.which == 17) isCtrl=false;  //l'user relâche la touche ctrl (qui a le code 17). La variable passe a False
  }

  //l'evenement "onkeydown" est appelé à chaque fois qu'une touche est pressée.
  document.onkeydown=function(e){
    if(e.which == 17) { //l'user appuie sur la touche ctrl. La variable passe a True
      isCtrl=true;
    }
  }

Gestion des actions en elle-même

J’ai géré ci dessous 5 raccourcis :

  • ctrl+b, pour mettre un texte en gras
  • ctrl+i, pour mettre un texte en italique
  • ctrl+l (L minuscule), pour faire un lien interne
  • ctrl+m pour mettre le texte entre {{ }} et faire un modèle
  • ctrl+u, pour souligner un texte

D’autres sont ajoutables à volonté, attention juste à ne pas utiliser des lettre dont vous vous servez souvent en édition pour vos raccourci (par exemple ctrl+x/c/V pour couper/copier/coller)

(sera mis dans la fonction d’onKeyDown)


    if( isCtrl == true ) {
       switch (e.which) { //quelle touche a été enfoncée ?
  	  case 66: //b
            insertTags("'''", "'''", 'gras');
            return false
	    break;
	  case 73: //i
            insertTags("''", "''", 'italique');
            return false
	    break;
          case 76: // l
            insertTags('[[', ']]', 'lien interne');
            return false
	    break;
          case 77: // m
            insertTags('{{', '}}', 'modèle');
            return false
	    break;
	  case 85: //u
            insertTags('<u>','</u>', 'souligné');
            return false
	    break
       }
     }

Résultat final

Pour les flemmards et ceux qui ont peur d’en oublier un morceau, le code complet ci dessous; recopiable tel quel :


function keyboardShortcuts() {

  var isCtrl = false;

  document.onkeyup=function(e) { //l'user relâche la touche ctrl. La variable passe a False
    if(e.which == 17) isCtrl=false;
  }

  document.onkeydown=function(e){
    if(e.which == 17) { //l'user appuie sur la touche ctrl. La variable passe a True
      isCtrl=true;
      return;
    }

    //gestion des ctrl+lettre que l'on veux ajouter.
    if( isCtrl == true ) {
       switch (e.which) { //quelle touche a été enfoncée ?
  	  case 66: //b
	    insertTags("'''", "'''", 'gras');
            return false
	    break;
	  case 73: //i
	    insertTags("''", "''", 'italique');
            return false
	    break;
          case 76: // l
	    insertTags('[[', ']]', 'lien interne');
            return false
	    break;
          case 77: // m
	    insertTags('{{', '}}', 'modèle');
            return false
	    break;
	  case 85: //u
	    insertTags('<u>', '</u>', 'souligné');
            return false
	    break
       }
     }
  }
  return true
}

//la fonction qui gère tous les appel de fonctions (du moins dans mes divers billets :)
//!\ CELA VEUX DIRE QU'IL FAUT FUSIONNER AVEC LA FONCTION main() EXISTANTE, SI VOUS EN AVEZ UNE /!\
function main() {
  // [...  autres fonctions  ... ]

   if (wgAction == "edit" || wgAction == "submit")  { //à n'appeller que si en mode edition, sinon c'est inutile
      keyboardShortcuts()
   }
}

addOnloadHook(main)

Et Voili ! Comme d’habitude, n’oubliez pas de forcer le rafraichissement du monobook (ou vector) après avoir sauvegardé.

Source : Ce billet sur Lixya.org ; et un merci à Phe pour le coup de main :)

Edit : retiré un "]" qui trainait au milieu du code – forcement, ça marche mieux maintenant – désolé :(

Publié dans Personnalisons Wikipédia | Tagué: , , , , , , | 2 Commentaires »

Personnalisons Wikipédia : vous avez un nouveau message

Publié par DarkoNeko le Vendredi 14 août 2009

Ce billet fait partie de la série "Personnalisons Wikipédia".

La personnalisation d’aujourd’hui vous permettra d’altérer le texte du sempiternel "vous avez un nouveau message" à l’aide de quelques lignes de JavaScript.

Lire la suite »

Publié dans Personnalisons Wikipédia | Tagué: , , , , , | 9 Commentaires »

Personnalisons Wikipédia : ajouter un système d’onglet à sa page utilisateur

Publié par DarkoNeko le Vendredi 3 juillet 2009

Ce billet fait partie de la série “Personnalisons Wikipédia“.

La personnalisation d’aujourd’hui vous permettra d’ajouter un système d’onglets en JavaScript sur votre page utilisateur. Vous pourrez du coup profiter d’une page utilisateur différente de celle que vous montrerez au monde (par exemple, mettre une jolie image pour l’extérieur, et un gros paquet de liens/pense-bêtes affichés pour vous)

En pratique, ça fonctionne pour une quelconque  page, mais n’oubliez pas que seules les personnes ayant ce même code dans leur monobook pourrons en profiter :)

Lire la suite »

Publié dans Personnalisons Wikipédia | Tagué: , , , , , , | Commentaires fermés

Personnalisons Wikipédia : ajouter des liens

Publié par DarkoNeko le Mardi 30 juin 2009

Ce billet fait partie de la série “Personnalisons Wikipédia“.

La personnalisation d’aujourd’hui vous permettra d’ajouter des liens dans le menu de gauche de l’interface de Wikipédia, à l’aide de quelques lignes de JavaScript. Ceux qui ne veulent pas d’explications trouveront le code tout en bas de la page.

Lire la suite »

Publié dans Personnalisons Wikipédia | Tagué: , , , , , | 10 Commentaires »

Personnalisons Wikipédia : introduction

Publié par DarkoNeko le Jeudi 18 juin 2009

Ce billet est le premier de la série "Personnalisons Wikipédia".

Cette série de billets visera à détailler (aux débutants comme aux autres) des moyens de personnaliser telle ou telle partie de l’interface de Wikipédia,  à l’aide d’un peu de CSS et de JavaScript (JS). Il est conseillé d’avoir 2/3 notions dans ces matières, mais je fournirais des explications et le code à chaque fois que possible.

Lire la suite »

Publié dans Personnalisons Wikipédia | Tagué: , , , , , , | 6 Commentaires »

Wikipédia, amélioration et nouveau gadget

Publié par DarkoNeko le Mardi 13 janvier 2009

Depuis mon précédent post (sur, rappelez-vous, la création d’un gadget nommé ContribLinkNearTalkPageLinksInContributions à destination de la Wikipédia francophone), j’ai effectué plusieurs améliorations sur celui-ci :

  • Il affiche maintenant le nombre de contributions de la personne, au lieu d’avoir juste un lien vers celles-ci (activable en ajoutant une ligne dans son monobook).
  • Les liens ajoutés possèdent maintenant la classe CSS "contribLink", ce qui permet de changer leur apparence (en l’occurence, je les ai mis en orange)

Du coup, une page de contributions ressemble maintenant à ceci en utilisant le gadget :

Par contre, je n’ai pas réussi à faire fonctionner correctement l’accès au nombre de contributions (en utilisant AJAX) sous internet explorer, donc l’outil n’est pas compatible avec ce navigateur (c’est la raison pour laquelle l’activation de cette option se fait en ajoutant une ligne dans son monobook)

Cet outil a apparemment beaucoup intéressé Dodoïste, qui m’a demandé de l’adapter sur spécial:Newpages ; j’ai donc créé un autre gadget, nommé ContribLinkNearTalkPageLinksInContributions (oui, j’aime les noms à rallonge), qui donne le résultat suivant :

Mais, utilisant la même fonction, ce nouveau gadget souffre du même défaut que l’autre et n’est donc pas compatible avec Internet Explorer.

Oui, je trouve chiant de ne pas être compatible avec le navigateur encore utilisé par 80% de la population (même si les contributeurs de Wikipédia ont beaucoup plus tendance que la moyenne à utiliser des navigateurs libres comme FireFox ), mais faire des tests sous Internet Explorer s’est révélé être une véritable plaie (problème de refresh notamment). J’abandonne donc la compatibilité pour le moment – si un gentil programmeur veux y jeter un œil, il est le bienvenu :)

Publié dans actualités, les coulisses de Wikipédia | Tagué: , , , , , , , | Commentaires fermés

Wikipédia, nouveau gadget

Publié par DarkoNeko le Samedi 10 janvier 2009

J’ai mis en ligne hier soir un petit gadget JavaScript1 sur la Wikipédia francophone, baptisé amoureusement "ContribLinkNearTalkPageLinksInContributions".

Le gadget fonctionne dela manière suivante : lorsque vous regardez les contributions d’un utilisateur (ou de vous-même), il ajoute, pour toutes les lignes sur l’édition de la page de discussion de quelqu’un, un lien vers les contributions de cette personne. Exemple visuel :

(cliquez pour l'avoir en plus grand)

Initialement, j’ai créé ce bout de code pour pouvoir vérifier plus facilement les contributions des gens que mon bot bienvenute (notamment chercher les vandalismes, spam et autopromotions).

Pour l’activer

  • Ouvrez vos préférences utilisateur
  • Cliquez sur l’onglet "gadgets"
  • Cochez la case (c’est la dernière de la section "gadgets généraux")
  • Sauvegardez et profitez :)

Rien de bien sorcier, donc

NB : Ouééé on s’est enfin débarrassé de la bannière du fundraising.  Pas trop tôt…

———————–

1 : L’extension "gadgets", active sur Wikipédia, permet aux utilisateurs d’ajouter des fonctionnalités "toute faite" juste en cochant une case dans ses préférences utilisateurs, au lieu de devoir en copier le code dans leur monobook personnel.

Publié dans actualités, les coulisses de Wikipédia | Tagué: , , , , , , , | 1 commentaire »

Mozilla Firefox 3.1 et javascript

Publié par DarkoNeko le Vendredi 5 septembre 2008

Si j’en crois ces benchmarks, Javascript fonctionnera du feu de dieu dans la prochaine version stable de Firefox (la 3.1) . Le secret derrière cette amélioration est un nouvel outil, nommé TraceMonkey , qui (en très gros) analyse le code javascript exécute lors de la première visite d’un site, de manière à pouvoir optimiser (et donc accélérer) grandement son exécution lors des visites suivantes.

Voila qui fera plaisir aux contributeurs de Wikipédia, car nombre d’entre eux l’utilisent d’une manière ou d’une autre sur l’encyclopédie, Mediawiki (le logiciel faisant tourner Wikipédia) permettant à chaque utilisateur d’ajouter son propre CSS/javascript dans une sous page utilisateur dédiée (avec, bien sûr,  une portée limitée à l’utilisateur seul)

Publié dans les coulisses de Wikipédia | Tagué: , , , , , , , , | Commentaires fermés

 
Suivre

Recevez les nouvelles publications par mail.

Joignez-vous à 387 followers