adds new api methods (getCurrentSlide, getPreviousSlide, getIndices) closes #73
authorHakim El Hattab <hakim.elhattab@gmail.com>
Fri, 27 Jul 2012 02:54:36 +0000 (22:54 -0400)
committerHakim El Hattab <hakim.elhattab@gmail.com>
Fri, 27 Jul 2012 02:54:36 +0000 (22:54 -0400)
README.md
css/main.css
js/reveal.js

index 25a6c1491aa27c74f86075842e2ec960321d3991..d2f36e76cfd174c30aac2bda2cbee1d165031f13 100644 (file)
--- a/README.md
+++ b/README.md
@@ -65,9 +65,10 @@ Reveal.initialize({
 
 ### API
 
-The Reveal class provides a minimal JavaScript API for controlling its navigation:
+The Reveal class provides a minimal JavaScript API for controlling navigation and reading state:
 
 ```javascript
+// Navigation
 Reveal.navigateTo( indexh, indexv );
 Reveal.navigateLeft();
 Reveal.navigateRight();
@@ -76,6 +77,12 @@ Reveal.navigateDown();
 Reveal.navigatePrev();
 Reveal.navigateNext();
 Reveal.toggleOverview();
+
+// Retrieves the previous and current slide elements
+Reveal.getPreviousSlide();
+Reveal.getCurrentSlide();
+
+Reveal.getIndices(); // { h: 0, v: 0 } }
 ```
 
 ### States
@@ -172,7 +179,9 @@ You can change the appearance of the speaker notes by editing the file at `plugi
 ## History
 
 #### 1.5 (master/beta)
-- TBD
+- New API method ```Reveal.getPreviousSlide()```
+- New API method ```Reveal.getCurrentSlide()```
+- New API method ```Reveal.getIndices()```
 
 #### 1.4
 - Main ```#reveal container``` is now selected via a class instead of ID
index d8c357749e15114f0c53ac08b8774362c6daa2c3..572925872f4334259b976993d075c133a0cd24cd 100644 (file)
@@ -1005,6 +1005,7 @@ body {
        background: rgba( 0, 0, 0, 0.6 );
 }
 
+
 /*********************************************
  * SPEAKER NOTES
  *********************************************/
index 978e16379df7ffef160c925b450b53064c0803f9..338790403d1efe6d87e8493ba1a188d53df0d9f4 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * reveal.js 1.5 r1
+ * reveal.js 1.5 r2
  * http://lab.hakim.se/reveal-js
  * MIT licensed
  * 
@@ -12,10 +12,6 @@ var Reveal = (function(){
 
                IS_TOUCH_DEVICE = !!( 'ontouchstart' in window ),
 
-               // The horizontal and verical index of the currently active slide
-               indexh = 0,
-               indexv = 0,
-
                // Configurations defaults, can be overridden at initialization time 
                config = {
                        // Display controls in the bottom right corner
@@ -50,6 +46,14 @@ var Reveal = (function(){
                        transition: 'default' // default/cube/page/concave/linear(2d)
                },
 
+               // The horizontal and verical index of the currently active slide
+               indexh = 0,
+               indexv = 0,
+
+               // The previous and current slide HTML elements
+               previousSlide,
+               currentSlide,
+
                // Slides may hold a data-state attribute which we pick up and apply 
                // as a class to the body. This list contains the combined state of 
                // all current slides.
@@ -650,6 +654,9 @@ var Reveal = (function(){
         * set indices. 
         */
        function slide( h, v ) {
+               // Remember where we were at before
+               previousSlide = currentSlide;
+
                // Remember the state before this slide
                var stateBefore = state.concat();
 
@@ -700,31 +707,30 @@ var Reveal = (function(){
                clearTimeout( writeURLTimeout );
                writeURLTimeout = setTimeout( writeURL, 1500 );
 
-               // Only fire if the slide index is different from before
-               if( indexh !== indexhBefore || indexv !== indexvBefore ) {
-                       // Query all horizontal slides in the deck
-                       var horizontalSlides = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );
+               // Query all horizontal slides in the deck
+               var horizontalSlides = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );
 
-                       // Find the previous and current horizontal slides
-                       var previousHorizontalSlide = horizontalSlides[ indexhBefore ],
-                               currentHorizontalSlide = horizontalSlides[ indexh ];
+               // Find the current horizontal slide and any possible vertical slides
+               // within it
+               var currentHorizontalSlide = horizontalSlides[ indexh ],
+                       currentVerticalSlides = currentHorizontalSlide.querySelectorAll( 'section' );
 
-                       // Query all vertical slides inside of the previous and current horizontal slides
-                       var previousVerticalSlides = previousHorizontalSlide.querySelectorAll( 'section' );
-                               currentVerticalSlides = currentHorizontalSlide.querySelectorAll( 'section' );
+               // Store references to the previous and current slides
+               currentSlide = currentVerticalSlides[ indexv ] || currentHorizontalSlide;
 
-                       // Dispatch an event notifying observers of the change in slide
+               // Dispatch an event if the slide changed
+               if( indexh !== indexhBefore || indexv !== indexvBefore ) {
                        dispatchEvent( 'slidechanged', {
-                               // Include the current indices in the event
                                'indexh': indexh, 
                                'indexv': indexv,
-
-                               // Passes direct references to the slide HTML elements, attempts to find
-                               // a vertical slide and falls back on the horizontal parent
-                               'previousSlide': previousVerticalSlides[ indexvBefore ] || previousHorizontalSlide,
-                               'currentSlide': currentVerticalSlides[ indexv ] || currentHorizontalSlide
+                               'previousSlide': previousSlide,
+                               'currentSlide': currentSlide
                        } );
                }
+               else {
+                       // Ensure that the previous slide is never the same as the current
+                       previousSlide = null;
+               }
        }
 
        /**
@@ -980,9 +986,28 @@ var Reveal = (function(){
                navigateNext: navigateNext,
                toggleOverview: toggleOverview,
 
+               // Adds or removes all internal event listeners (such as keyboard)
                addEventListeners: addEventListeners,
                removeEventListeners: removeEventListeners,
 
+               // Returns the indices of the current slide
+               getIndices: function() {
+                       return { 
+                               h: indexh, 
+                               v: indexv 
+                       };
+               },
+
+               // Returns the previous slide element, may be null
+               getPreviousSlide: function() {
+                       return previousSlide
+               },
+
+               // Returns the current slide element
+               getCurrentSlide: function() {
+                       return currentSlide
+               },
+
                // Forward event binding to the reveal DOM element
                addEventListener: function( type, listener, useCapture ) {
                        ( dom.wrapper || document.querySelector( '.reveal' ) ).addEventListener( type, listener, useCapture );