146 lines
2.9 KiB
JavaScript
Executable File
146 lines
2.9 KiB
JavaScript
Executable File
/* Retourne le keyCode correspondant à la chaîne
|
|
*
|
|
* @param keyStore enchaînement de touches sous forme de string
|
|
* @param handler function qui s'éxécute lors du raccourci
|
|
*
|
|
* return keyCode le code de la touche correspondante
|
|
*/
|
|
function strToKeyCode(str){
|
|
// on enregistre le keyCode du premier caractère
|
|
var keyCode = str.toUpperCase().charCodeAt(0);
|
|
|
|
// s'il s'agit d'un caractère uniquement (entre "a" et "z")
|
|
if( str.length == 1 && keyCode >= 65 && keyCode <= 90 )
|
|
return keyCode; // on retourne le keyCode associé
|
|
else
|
|
switch( str ){
|
|
case 'ctrl': return 17; break;
|
|
case 'maj': return 16; break;
|
|
case 'alt': return 18; break;
|
|
case 'tab': return 9; break;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
|
|
var shortcutList = []; // contient les combinaisons de touches
|
|
var shortcutStep = []; // contient l'avancée d'un raccourcis
|
|
|
|
/* Gestion des raccourcis claviers
|
|
*
|
|
* @param keyStore enchaînement de touches sous forme de string
|
|
* @param handler function qui s'éxécute lors du raccourci
|
|
*
|
|
*/
|
|
function Shortcut(keyStore, handler){
|
|
|
|
var splittedString = keyStore.toLowerCase().split('+'), // découpe la chaîne (en minuscule) par "+"
|
|
splittedKeyCode = new Array(); // contiendra les keyCode de chaque touche
|
|
|
|
|
|
// pour chaque touche, on récupère le keyCode
|
|
for( var i = 0 ; i < splittedString.length ; i++ )
|
|
splittedKeyCode[i] = strToKeyCode( splittedString[i] ); // on enregistre le keyCode correspondant
|
|
|
|
|
|
// on ajout à la liste globale
|
|
eventIndex = shortcutList.length;
|
|
shortcutList.push( splittedKeyCode );
|
|
|
|
// on initialise l'avancement
|
|
shortcutStep[eventIndex] = 0;
|
|
|
|
|
|
|
|
// creation de la fonction d'évènement
|
|
shortcutList[eventIndex].push( function(e, k, f, h){ /* k<keyCode> ; f<eventIndex> ; h<handler()> */
|
|
console.log(f);
|
|
// on cherche l'avancée
|
|
var step = shortcutStep[f];
|
|
|
|
// on regarde si la touche est bonne
|
|
if( shortcutList[f][step] == k ){ // si c'est la touche suivante
|
|
|
|
if( step >= shortcutList[f].length-2 ){ // si c'était la dernière touche
|
|
|
|
// on initialise le tableau
|
|
for( var i = 0 ; i < shortcutStep[f].length ; i++ )
|
|
shortcutStep[f][i] = 0;
|
|
|
|
console.log('ok');
|
|
e.preventDefault();
|
|
h(); // EXECUTION DE : handler();
|
|
|
|
}else // sinon on incrémente l'avancée
|
|
shortcutStep[f]++;
|
|
|
|
}else // si c'est pas la bonne touche, on réinitialise le tableau
|
|
shortcutStep[f] = 0;
|
|
|
|
});
|
|
|
|
// création de l'évènement
|
|
window.addEventListener(
|
|
'keydown',
|
|
function(e){ shortcutList[eventIndex][shortcutList[eventIndex].length-1](e, e.keyCode, eventIndex, handler); },
|
|
false
|
|
);
|
|
|
|
}
|
|
|
|
/* quand on lâche une touche, tout les raccourcis s'effacent */
|
|
window.addEventListener('keyup', function(){
|
|
for( var i = 0 ; i < shortcutStep.length ; i++ )
|
|
shortcutStep[i] = 0;
|
|
}, false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*** UTILISATION ***/
|
|
|
|
// Shortcut(
|
|
// 'ctrl+s',
|
|
// function(){ alert('sauvegardé'); }
|
|
// );
|
|
//
|