From 4c3f778e6e39c885e1197c9970e098bdbc643398 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Tue, 22 Jan 2019 15:43:31 +0100 Subject: [PATCH] refactor keyboard listener conditions --- js/reveal.js | 130 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 95 insertions(+), 35 deletions(-) diff --git a/js/reveal.js b/js/reveal.js index 07a86e58..57436462 100644 --- a/js/reveal.js +++ b/js/reveal.js @@ -4909,6 +4909,9 @@ return true; } + // Shorthand + var keyCode = event.keyCode; + // Remember if auto-sliding was paused so we can toggle it var autoSlideWasPaused = autoSlidePaused; @@ -4921,8 +4924,8 @@ // Whitelist specific modified + keycode combinations var prevSlideShortcut = event.shiftKey && event.keyCode === 32; - var firstSlideShortcut = ( event.metaKey || event.ctrlKey ) && event.keyCode === 37; - var lastSlideShortcut = ( event.metaKey || event.ctrlKey ) && event.keyCode === 39; + var firstSlideShortcut = ( event.metaKey || event.ctrlKey ) && keyCode === 37; + var lastSlideShortcut = ( event.metaKey || event.ctrlKey ) && keyCode === 39; // Prevent all other events when a modifier is pressed var unusedModifier = !prevSlideShortcut && !firstSlideShortcut && !lastSlideShortcut && @@ -4945,7 +4948,7 @@ } } - if( isPaused() && resumeKeyCodes.indexOf( event.keyCode ) === -1 ) { + if( isPaused() && resumeKeyCodes.indexOf( keyCode ) === -1 ) { return false; } @@ -4957,7 +4960,7 @@ for( key in config.keyboard ) { // Check if this binding matches the pressed key - if( parseInt( key, 10 ) === event.keyCode ) { + if( parseInt( key, 10 ) === keyCode ) { var value = config.keyboard[ key ]; @@ -4984,7 +4987,7 @@ for( key in registeredKeyBindings ) { // Check if this binding matches the pressed key - if( parseInt( key, 10 ) === event.keyCode ) { + if( parseInt( key, 10 ) === keyCode ) { var action = registeredKeyBindings[ key ].callback; @@ -5008,35 +5011,92 @@ // Assume true and try to prove false triggered = true; - switch( event.keyCode ) { - // p, page up - case 80: case 33: navigatePrev(); break; - // n, page down - case 78: case 34: navigateNext(); break; - // h, left - case 72: case 37: firstSlideShortcut ? slide( 0 ) : isOverview() || !config.simpleNavigation ? navigateLeft() : navigatePrev(); break; - // l, right - case 76: case 39: lastSlideShortcut ? slide( Number.MAX_VALUE ) : isOverview() || !config.simpleNavigation ? navigateRight() : navigateNext(); break; - // k, up - case 75: case 38: isOverview() || !config.simpleNavigation ? navigateUp() : navigatePrev(); break; - // j, down - case 74: case 40: isOverview() || !config.simpleNavigation ? navigateDown() : navigateNext(); break; - // home - case 36: slide( 0 ); break; - // end - case 35: slide( Number.MAX_VALUE ); break; - // space - case 32: isOverview() ? deactivateOverview() : event.shiftKey ? navigatePrev() : navigateNext(); break; - // return - case 13: isOverview() ? deactivateOverview() : triggered = false; break; - // two-spot, semicolon, b, v, period, Logitech presenter tools "black screen" button - case 58: case 59: case 66: case 86: case 190: case 191: togglePause(); break; - // f - case 70: enterFullscreen(); break; - // a - case 65: if ( config.autoSlideStoppable ) toggleAutoSlide( autoSlideWasPaused ); break; - default: - triggered = false; + // P, PAGE UP + if( keyCode === 80 || keyCode === 33 ) { + navigatePrev(); + } + // N, PAGE DOWN + else if( keyCode === 78 || keyCode === 34 ) { + navigateNext(); + } + // H, LEFT + else if( keyCode === 72 || keyCode === 37 ) { + if( firstSlideShortcut ) { + slide( 0 ); + } + else if( !isOverview() && config.simpleNavigation ) { + navigatePrev(); + } + else { + navigateLeft(); + } + } + // L, RIGHT + else if( keyCode === 76 || keyCode === 39 ) { + if( lastSlideShortcut ) { + slide( Number.MAX_VALUE ); + } + else if( !isOverview() && config.simpleNavigation ) { + navigateNext(); + } + else { + navigateRight(); + } + } + // K, UP + else if( keyCode === 75 || keyCode === 38 ) { + if( !isOverview() && config.simpleNavigation ) { + navigatePrev(); + } + else { + navigateUp() + } + } + // J, DOWN + else if( keyCode === 74 || keyCode === 40 ) { + if( !isOverview() && config.simpleNavigation ) { + navigateNext() + } + else { + navigateDown() + } + } + // HOME + else if( keyCode === 36 ) { + slide( 0 ); + } + // END + else if( keyCode === 35 ) { + slide( Number.MAX_VALUE ); + } + // SPACE + else if( keyCode === 32 ) { + if( isOverview() ) { + deactivateOverview(); + } + if( event.shiftKey ) { + navigatePrev(); + } + else { + navigateNext(); + } + } + // TWO-SPOT, SEMICOLON, B, V, PERIOD, LOGITECH PRESENTER TOOLS "BLACK SCREEN" BUTTON + else if( keyCode === 58 || keyCode === 59 || keyCode === 66 || keyCode === 86 || keyCode === 190 || keyCode === 191 ) { + togglePause(); + } + // F + else if( keyCode === 70 ) { + enterFullscreen(); + } + // A + else if( keyCode === 65 ) { + if ( config.autoSlideStoppable ) { + toggleAutoSlide( autoSlideWasPaused ); + } + } + else { + triggered = false; } } @@ -5047,7 +5107,7 @@ event.preventDefault && event.preventDefault(); } // ESC or O key - else if ( ( event.keyCode === 27 || event.keyCode === 79 ) && features.transforms3d ) { + else if ( ( keyCode === 27 || keyCode === 79 ) && features.transforms3d ) { if( dom.overlay ) { closeOverlay(); }