/* 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 ; f ; h */ // 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é'); } // ); //