Je travaille présentement sur un projet d'extension sur Google Chrome. Pas CustomNewTab, mais bien une nouvelle idée.
Petite mise en contexte afin de faciliter mon explication.
L'extension sur laquelle je travaille permet d'exécuter des scripts javascripts via un mouvement de la souris. Un début de FireGestures pour Chrome. Je veux cependant permettre aux utilisateurs de modifier le script afin de facilement ajouter des gestures et des actions associées à ces gestures.
Afin de garder la syntaxe la plus simple possible, j'ai décidé d'implémenter les gestures custom comme ceci :
newTabGesture = ["up"];
closeTabGesture = ["down"];
function newTabFunc() {
window.open();
}
function closeTabFunc() {
window.close();
}
myGestures = [ [newTabGesture, newTabFunc],
[closeTabGesture, closeTabFunc] ];
On voit qu'on peut donc facilement définir une gesture comme un Array de string qui expriment clairement la séquence de mouvement à faire pour que la gesture soit reconnue. On définie ensuite une fonction qui va être associée au mouvement. On exprime cette association dans myGestures qui est un Array de paires (gesture, action).
Beaucoup d'explication, toujours pas de magie. Patience !
Plus loin dans le script, je capture les mouvements de la souris et je les sauvegarde comme un Array de mouvement également. Par exemple capturedGesture = ["up","down","up"]. Maintenant, je peux simplement faire :
myGestures[capturedGesture]();
Qu'est-ce que ça fait ? On obtient la donnée placée sous l'index capturedGesture, soit la fonction associée à cette gesture. Ensuite, grâce aux parenthèses, on exécute la fonction placée à cet index dans l'array.
Bref, on fait tout en une ligne de code.
Tout ça grâce au fait que tout est un objet. En effet, en javascript il est possible de faire :
var f1 = function() { alert("Function1") }
var f2 = f1;
f2(); // Affiche "Function1" à l'écran !
C'est une des raison pour laquelle je commence à apprécier de plus en plus les langages de script ( Python en particulier )... Essayez simplement d'imaginer le code nécessaire afin de pouvoir faire la même chose en Java.
0 commentaires:
Enregistrer un commentaire