From 0cd3b8d4309b20c189cc4c7c8a5e56d7e47d594b Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Wed, 28 Mar 2012 01:16:16 -0400 Subject: [PATCH] merge prev/next navigation pull request with modifications --- README.md | 1 + js/reveal.js | 51 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 647d07c..1548b90 100644 --- a/README.md +++ b/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 diff --git a/js/reveal.js b/js/reveal.js index adc5278..885884f 100644 --- a/js/reveal.js +++ b/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 {