From 325162692ea2de30e4f7ebd8b858da15580844f1 Mon Sep 17 00:00:00 2001
From: Hakim El Hattab
Date: Mon, 12 Feb 2018 13:49:33 +0100
Subject: navigateNext no longer gets stuck on first stack when looping is
 enabled

---
 js/reveal.js | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

(limited to 'js/reveal.js')

diff --git a/js/reveal.js b/js/reveal.js
index 95d1b8c..230d001 100644
--- a/js/reveal.js
+++ b/js/reveal.js
@@ -4410,7 +4410,17 @@
 
 		// Prioritize revealing fragments
 		if( nextFragment() === false ) {
-			if( availableRoutes().down ) {
+
+			var routes = availableRoutes();
+
+			// When looping is enabled `routes.down` is always available
+			// so we need a separate check for when we've reached the
+			// end of a stack and should move horizontally
+			if( routes.down && routes.right && config.loop && Reveal.isLastVerticalSlide( currentSlide ) ) {
+				routes.down = false;
+			}
+
+			if( routes.down ) {
 				navigateDown();
 			}
 			else if( config.rtl ) {
@@ -5300,7 +5310,7 @@
 		// Returns true if we're currently on the last slide
 		isLastSlide: function() {
 			if( currentSlide ) {
-				// Does this slide has next a sibling?
+				// Does this slide have a next sibling?
 				if( currentSlide.nextElementSibling ) return false;
 
 				// If it's vertical, does its parent have a next sibling?
@@ -5312,6 +5322,19 @@
 			return false;
 		},
 
+		// Returns true if we're on the last slide in the current
+		// vertical stack
+		isLastVerticalSlide: function() {
+			if( currentSlide && isVerticalSlide( currentSlide ) ) {
+				// Does this slide have a next sibling?
+				if( currentSlide.nextElementSibling ) return false;
+
+				return true;
+			}
+
+			return false;
+		},
+
 		// Checks if reveal.js has been loaded and is ready for use
 		isReady: function() {
 			return loaded;
-- 
cgit v1.2.3