Browse Source

merge prev/next navigation pull request with modifications

Hakim El Hattab 12 years ago
parent
commit
0cd3b8d430
2 changed files with 36 additions and 16 deletions
  1. 1 0
      README.md
  2. 35 16
      js/reveal.js

+ 1 - 0
README.md

@@ -66,6 +66,7 @@ Reveal.initialize({
 - Support for mouse wheel navigation ([naugtur](https://github.com/naugtur))
 - Delayed updates to URL hash to work around a bug in Chrome
 - Included a classList polyfill for IE9
+- Support for wireless presenter keys
 
 #### 1.1
 

+ 35 - 16
js/reveal.js

@@ -659,22 +659,41 @@ var Reveal = (function(){
 			slide();
 		}
 	}
-    function navigatePrev() {
-        if( availableRoutes().up ) navigateUp();
-        else {
-            // Go to last slide in previous vertical stack
-            var pastSlides = document.querySelectorAll('#reveal .slides>section.past');
-            if( pastSlides.length > 0 ) {
-                var prevVerticalSlides = pastSlides[pastSlides.length - 1].querySelectorAll('section');
-                indexv = prevVerticalSlides.length > 0 ? prevVerticalSlides.length - 1 : 0;
-                indexh --;
-                slide();
-            }
-        }
-    }
-    function navigateNext() {
-        availableRoutes().down ? navigateDown() : navigateRight();
-    }
+
+	/**
+	 * Navigates backwards, prioritized in the following order:
+	 * 1) Previous fragment
+	 * 2) Previous vertical slide
+	 * 3) Previous horizontal slide
+	 */
+	function navigatePrev() {
+		// Prioritize revealing fragments
+		if( previousFragment() === false ) {
+			if( availableRoutes().up ) {
+				navigateUp();
+			}
+			else {
+				// Fetch the previous horizontal slide, if there is one
+				var previousSlide = document.querySelector( '#reveal .slides>section.past:nth-child(' + indexh + ')' );
+
+				if( previousSlide ) {
+					indexv = ( previousSlide.querySelectorAll('section').length + 1 ) || 0;
+					indexh --;
+					slide();
+				}
+			}
+		}
+	}
+
+	/**
+	 * Same as #navigatePrev() but navigates forwards.
+	 */
+	function navigateNext() {
+		// Prioritize revealing fragments
+		if( nextFragment() === false ) {
+			availableRoutes().down ? navigateDown() : navigateRight();
+		}
+	}
 	
 	// Expose some methods publicly
 	return {