Browse Source

Merge branch 'focus-body-on-visibility-change' of https://github.com/rexxars/reveal.js into dev

Hakim El Hattab 11 years ago
parent
commit
a143861478
2 changed files with 36 additions and 2 deletions
  1. 35 1
      js/reveal.js
  2. 1 1
      js/reveal.min.js

+ 35 - 1
js/reveal.js

@@ -80,6 +80,9 @@ var Reveal = (function(){
 			// Opens links in an iframe preview overlay
 			previewLinks: false,
 
+			// Focuses body when page changes visiblity to ensure keyboard shortcuts work
+			focusBodyOnPageVisiblityChange: true,
+
 			// Theme (see /css/theme)
 			theme: null,
 
@@ -606,10 +609,23 @@ var Reveal = (function(){
 			document.addEventListener( 'keydown', onDocumentKeyDown, false );
 		}
 
-		if ( config.progress && dom.progress ) {
+		if( config.progress && dom.progress ) {
 			dom.progress.addEventListener( 'click', onProgressClicked, false );
 		}
 
+		if( config.focusBodyOnPageVisiblityChange ) {
+			var visibilityChange;
+			if ('hidden' in document) {
+				visibilityChange = 'visibilitychange';
+			} else if ('msHidden' in document) {
+				visibilityChange = 'msvisibilitychange';
+			} else if ('webkitHidden' in document) {
+				visibilityChange = 'webkitvisibilitychange';
+			}
+
+			document.addEventListener(visibilityChange, onPageVisibilityChange, false);
+		}
+
 		[ 'touchstart', 'click' ].forEach( function( eventName ) {
 			dom.controlsLeft.forEach( function( el ) { el.addEventListener( eventName, onNavigateLeftClicked, false ); } );
 			dom.controlsRight.forEach( function( el ) { el.addEventListener( eventName, onNavigateRightClicked, false ); } );
@@ -2655,6 +2671,24 @@ var Reveal = (function(){
 
 	}
 
+	/**
+	 * Handle for the window level 'visibilitychange' event.
+	 */
+	function onPageVisibilityChange( event ) {
+
+		var isHidden =  document.webkitHidden ||
+						document.msHidden ||
+						document.hidden;
+
+		// If, after clicking a link or similar and we're coming back,
+		// focus the document.body to ensure we can use keyboard shortcuts
+		if( isHidden === false && document.activeElement !== document.body ) {
+			document.activeElement.blur();
+			document.body.focus();
+		}
+
+	}
+
 	/**
 	 * Invoked when a slide is and we're in the overview.
 	 */

File diff suppressed because it is too large
+ 1 - 1
js/reveal.min.js


Some files were not shown because too many files changed in this diff