Browse Source

slide method now accepts fragment index argument #228

Hakim El Hattab 11 years ago
parent
commit
34b36753f5
4 changed files with 52 additions and 17 deletions
  1. 1 1
      README.md
  2. 2 1
      grunt.js
  3. 48 14
      js/reveal.js
  4. 1 1
      js/reveal.min.js

+ 1 - 1
README.md

@@ -137,7 +137,7 @@ The Reveal class provides a minimal JavaScript API for controlling navigation an
 
 ```javascript
 // Navigation
-Reveal.slide( indexh, indexv );
+Reveal.slide( indexh, indexv, indexf );
 Reveal.left();
 Reveal.right();
 Reveal.up();

+ 2 - 1
grunt.js

@@ -63,7 +63,8 @@ module.exports = function(grunt) {
 			},
 			globals: {
 				head: false,
-				module: false
+				module: false,
+				console: false
 			}
 		},
 

+ 48 - 14
js/reveal.js

@@ -741,8 +741,10 @@ var Reveal = (function(){
 	 *
 	 * @param {int} h Horizontal index of the target slide
 	 * @param {int} v Vertical index of the target slide
+	 * @param {int} f Optional index of a fragment within the 
+	 * target slide to activate
 	 */
-	function slide( h, v ) {
+	function slide( h, v, f ) {
 		// Remember where we were at before
 		previousSlide = currentSlide;
 
@@ -774,12 +776,18 @@ var Reveal = (function(){
 		indexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h );
 		indexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v );
 
+		// No need to proceed if we're navigating to the same slide as 
+		// we're already on, unless a fragment index is specified
+		if( indexh === indexhBefore && indexv === indexvBefore && !f ) {
+			return;
+		}
+
 		layout();
 
 		// Apply the new state
 		stateLoop: for( var i = 0, len = state.length; i < len; i++ ) {
 			// Check if this state existed on the previous slide. If it
-			// did, we will avoid adding it repeatedly.
+			// did, we will avoid adding it repeatedly
 			for( var j = 0; j < stateBefore.length; j++ ) {
 				if( stateBefore[j] === state[i] ) {
 					stateBefore.splice( j, 1 );
@@ -805,8 +813,7 @@ var Reveal = (function(){
 
 		// Update the URL hash after a delay since updating it mid-transition
 		// is likely to cause visual lag
-		clearTimeout( writeURLTimeout );
-		writeURLTimeout = setTimeout( writeURL, 1500 );
+		writeURL( 1500 );
 
 		// Find the current horizontal slide and any possible vertical slides
 		// within it
@@ -816,6 +823,20 @@ var Reveal = (function(){
 		// Store references to the previous and current slides
 		currentSlide = currentVerticalSlides[ indexv ] || currentHorizontalSlide;
 
+		// Show fragment, if specified
+		if ( typeof f !== undefined ) {
+			var fragments = currentSlide.querySelectorAll( '.fragment' );
+
+			toArray( fragments ).forEach( function( fragment, indexf ) {
+				if( indexf < f ) {
+					fragment.classList.add( 'visible' );
+				}
+				else {
+					fragment.classList.remove( 'visible' );
+				}
+			} );
+		}
+
 		// Dispatch an event if the slide changed
 		if( indexh !== indexhBefore || indexv !== indexvBefore ) {
 			dispatchEvent( 'slidechanged', {
@@ -1068,22 +1089,35 @@ var Reveal = (function(){
 	/**
 	 * Updates the page URL (hash) to reflect the current
 	 * state.
+	 *
+	 * @param {Number} delay The time in ms to wait before 
+	 * writing the hash
 	 */
-	function writeURL() {
+	function writeURL( delay ) {
 		if( config.history ) {
-			var url = '/';
 
-			// If the current slide has an ID, use that as a named link
-			if( currentSlide && typeof currentSlide.getAttribute( 'id' ) === 'string' ) {
-				url = '/' + currentSlide.getAttribute( 'id' );
+			// Make sure there's never more than one timeout running
+			clearTimeout( writeURLTimeout );
+
+			// If a delay is specified, timeout this call
+			if( typeof delay === 'number' ) {
+				writeURLTimeout = setTimeout( writeURL, delay );
 			}
-			// Otherwise use the /h/v index
 			else {
-				if( indexh > 0 || indexv > 0 ) url += indexh;
-				if( indexv > 0 ) url += '/' + indexv;
-			}
+				var url = '/';
 
-			window.location.hash = url;
+				// If the current slide has an ID, use that as a named link
+				if( currentSlide && typeof currentSlide.getAttribute( 'id' ) === 'string' ) {
+					url = '/' + currentSlide.getAttribute( 'id' );
+				}
+				// Otherwise use the /h/v index
+				else {
+					if( indexh > 0 || indexv > 0 ) url += indexh;
+					if( indexv > 0 ) url += '/' + indexv;
+				}
+
+				window.location.hash = url;
+			}
 		}
 	}
 

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