Kaynağa Gözat

add cmd/ctrl + arrow key shortcuts to first/last slides

Hakim El Hattab 6 yıl önce
ebeveyn
işleme
f042a8c394
2 değiştirilmiş dosya ile 25 ekleme ve 17 silme
  1. 24 16
      js/reveal.js
  2. 1 1
      plugin/search/search.js

+ 24 - 16
js/reveal.js

@@ -318,17 +318,17 @@
 
 		// Holds information about the keyboard shortcuts
 		keyboardShortcuts = {
-			'N  ,  SPACE':			'Next slide',
-			'P':					'Previous slide',
-			'←  ,  H':		'Navigate left',
-			'→  ,  L':		'Navigate right',
-			'↑  ,  K':		'Navigate up',
-			'↓  ,  J':		'Navigate down',
-			'Home':					'First slide',
-			'End':					'Last slide',
-			'B  ,  .':				'Pause',
-			'F':					'Fullscreen',
-			'ESC, O':				'Slide overview'
+			'N  ,  SPACE':						'Next slide',
+			'P':								'Previous slide',
+			'←  ,  H':					'Navigate left',
+			'→  ,  L':					'Navigate right',
+			'↑  ,  K':					'Navigate up',
+			'↓  ,  J':					'Navigate down',
+			'Home  ,  ⌘/CTRL ←':	'First slide',
+			'End  ,  ⌘/CTRL →':		'Last slide',
+			'B  ,  .':							'Pause',
+			'F':								'Fullscreen',
+			'ESC, O':							'Slide overview'
 		},
 
 		// Holds custom key code mappings
@@ -4865,15 +4865,23 @@
 
 		onUserInput( event );
 
-		// Check if there's a focused element that could be using
-		// the keyboard
+		// Is there a focused element that could be using the keyboard?
 		var activeElementIsCE = document.activeElement && document.activeElement.contentEditable !== 'inherit';
 		var activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test( document.activeElement.tagName );
 		var activeElementIsNotes = document.activeElement && document.activeElement.className && /speaker-notes/i.test( document.activeElement.className);
 
+		// 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;
+
+		// Prevent all other events when a modifier is pressed
+		var unusedModifier = 	!prevSlideShortcut && !firstSlideShortcut && !lastSlideShortcut &&
+								( event.shiftKey || event.altKey || event.ctrlKey || event.metaKey );
+
 		// Disregard the event if there's a focused element or a
 		// keyboard modifier key is present
-		if( activeElementIsCE || activeElementIsInput || activeElementIsNotes || (event.shiftKey && event.keyCode !== 32) || event.altKey || event.ctrlKey || event.metaKey ) return;
+		if( activeElementIsCE || activeElementIsInput || activeElementIsNotes || unusedModifier ) return;
 
 		// While paused only allow resume keyboard events; 'b', 'v', '.'
 		var resumeKeyCodes = [66,86,190,191];
@@ -4957,9 +4965,9 @@
 				// n, page down
 				case 78: case 34: navigateNext(); break;
 				// h, left
-				case 72: case 37: navigateLeft(); break;
+				case 72: case 37: firstSlideShortcut ? slide( 0 ) : navigateLeft(); break;
 				// l, right
-				case 76: case 39: navigateRight(); break;
+				case 76: case 39: lastSlideShortcut ? slide( Number.MAX_VALUE ) : navigateRight(); break;
 				// k, up
 				case 75: case 38: navigateUp(); break;
 				// j, down

+ 1 - 1
plugin/search/search.js

@@ -200,7 +200,7 @@ function Hilitor(id, tag)
 			toggleSearch();
 		}
 	}, false );
-	if( window.Reveal ) Reveal.registerKeyboardShortcut( 'Ctrl-Shift-F', 'Search' );
+	if( window.Reveal ) Reveal.registerKeyboardShortcut( 'CTRL + Shift + F', 'Search' );
 	closeSearch();
 	return { open: openSearch };
 })();