|  | @@ -14,6 +14,8 @@ var Reveal = (function(){
 | 
											
												
													
														|  |  		VERTICAL_SLIDES_SELECTOR = '.reveal .slides>section.present>section',
 |  |  		VERTICAL_SLIDES_SELECTOR = '.reveal .slides>section.present>section',
 | 
											
												
													
														|  |  		HOME_SLIDE_SELECTOR = '.reveal .slides>section:first-child',
 |  |  		HOME_SLIDE_SELECTOR = '.reveal .slides>section:first-child',
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +		IS_MOBILE = navigator.userAgent.match( /(iphone|ipod|android)/gi ),
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  		// Configurations defaults, can be overridden at initialization time
 |  |  		// Configurations defaults, can be overridden at initialization time
 | 
											
												
													
														|  |  		config = {
 |  |  		config = {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -1029,7 +1031,6 @@ var Reveal = (function(){
 | 
											
												
													
														|  |  						htransform = 'translateZ(-2500px) translate(' + ( ( i - indexh ) * hoffset ) + '%, 0%)';
 |  |  						htransform = 'translateZ(-2500px) translate(' + ( ( i - indexh ) * hoffset ) + '%, 0%)';
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  					hslide.setAttribute( 'data-index-h', i );
 |  |  					hslide.setAttribute( 'data-index-h', i );
 | 
											
												
													
														|  | -					hslide.style.display = 'block';
 |  | 
 | 
											
												
													
														|  |  					hslide.style.WebkitTransform = htransform;
 |  |  					hslide.style.WebkitTransform = htransform;
 | 
											
												
													
														|  |  					hslide.style.MozTransform = htransform;
 |  |  					hslide.style.MozTransform = htransform;
 | 
											
												
													
														|  |  					hslide.style.msTransform = htransform;
 |  |  					hslide.style.msTransform = htransform;
 | 
											
										
											
												
													
														|  | @@ -1048,7 +1049,6 @@ var Reveal = (function(){
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  							vslide.setAttribute( 'data-index-h', i );
 |  |  							vslide.setAttribute( 'data-index-h', i );
 | 
											
												
													
														|  |  							vslide.setAttribute( 'data-index-v', j );
 |  |  							vslide.setAttribute( 'data-index-v', j );
 | 
											
												
													
														|  | -							vslide.style.display = 'block';
 |  | 
 | 
											
												
													
														|  |  							vslide.style.WebkitTransform = vtransform;
 |  |  							vslide.style.WebkitTransform = vtransform;
 | 
											
												
													
														|  |  							vslide.style.MozTransform = vtransform;
 |  |  							vslide.style.MozTransform = vtransform;
 | 
											
												
													
														|  |  							vslide.style.msTransform = vtransform;
 |  |  							vslide.style.msTransform = vtransform;
 | 
											
										
											
												
													
														|  | @@ -1068,6 +1068,8 @@ var Reveal = (function(){
 | 
											
												
													
														|  |  					}
 |  |  					}
 | 
											
												
													
														|  |  				}
 |  |  				}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +				updateSlidesVisibility();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  				layout();
 |  |  				layout();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  				if( !wasActive ) {
 |  |  				if( !wasActive ) {
 | 
											
										
											
												
													
														|  | @@ -1309,6 +1311,9 @@ var Reveal = (function(){
 | 
											
												
													
														|  |  		indexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h );
 |  |  		indexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h );
 | 
											
												
													
														|  |  		indexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v );
 |  |  		indexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v );
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +		// Update the visibility of slides now that the indices have changed
 | 
											
												
													
														|  | 
 |  | +		updateSlidesVisibility();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  		layout();
 |  |  		layout();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  		// Apply the new state
 |  |  		// Apply the new state
 | 
											
										
											
												
													
														|  | @@ -1480,16 +1485,6 @@ var Reveal = (function(){
 | 
											
												
													
														|  |  			for( var i = 0; i < slidesLength; i++ ) {
 |  |  			for( var i = 0; i < slidesLength; i++ ) {
 | 
											
												
													
														|  |  				var element = slides[i];
 |  |  				var element = slides[i];
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -				// Optimization; hide all slides that are three or more steps
 |  | 
 | 
											
												
													
														|  | -				// away from the present slide
 |  | 
 | 
											
												
													
														|  | -				if( isOverview() === false ) {
 |  | 
 | 
											
												
													
														|  | -					// The distance loops so that it measures 1 between the first
 |  | 
 | 
											
												
													
														|  | -					// and last slides
 |  | 
 | 
											
												
													
														|  | -					var distance = Math.abs( ( index - i ) % ( slidesLength - 3 ) ) || 0;
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -					element.style.display = distance > 3 ? 'none' : 'block';
 |  | 
 | 
											
												
													
														|  | -				}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  				var reverse = config.rtl && !isVerticalSlide( element );
 |  |  				var reverse = config.rtl && !isVerticalSlide( element );
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  				element.classList.remove( 'past' );
 |  |  				element.classList.remove( 'past' );
 | 
											
										
											
												
													
														|  | @@ -1555,6 +1550,71 @@ var Reveal = (function(){
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +	/**
 | 
											
												
													
														|  | 
 |  | +	 * Optimization method; hide all slides that are far away
 | 
											
												
													
														|  | 
 |  | +	 * from the present slide.
 | 
											
												
													
														|  | 
 |  | +	 */
 | 
											
												
													
														|  | 
 |  | +	function updateSlidesVisibility() {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		// Select all slides and convert the NodeList result to
 | 
											
												
													
														|  | 
 |  | +		// an array
 | 
											
												
													
														|  | 
 |  | +		var horizontalSlides = toArray( document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ),
 | 
											
												
													
														|  | 
 |  | +			horizontalSlidesLength = horizontalSlides.length,
 | 
											
												
													
														|  | 
 |  | +			distance;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if( horizontalSlidesLength ) {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			// The number of steps away from the present slide that will
 | 
											
												
													
														|  | 
 |  | +			// be visible
 | 
											
												
													
														|  | 
 |  | +			var threshold = 3;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			// Heavily limited on weaker devices
 | 
											
												
													
														|  | 
 |  | +			if( IS_MOBILE ) {
 | 
											
												
													
														|  | 
 |  | +				threshold = 1;
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			if( isOverview() ) {
 | 
											
												
													
														|  | 
 |  | +				threshold = 6;
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +			for( var x = 0; x < horizontalSlidesLength; x++ ) {
 | 
											
												
													
														|  | 
 |  | +				var horizontalSlide = horizontalSlides[x];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +				var verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) ),
 | 
											
												
													
														|  | 
 |  | +					verticalSlidesLength = verticalSlides.length;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +				if( verticalSlidesLength ) {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +					// Always show the vertical stack itself, even if its child
 | 
											
												
													
														|  | 
 |  | +					// slides are invisible
 | 
											
												
													
														|  | 
 |  | +					horizontalSlide.style.display = 'block';
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +					for( var y = 0; y < verticalSlidesLength; y++ ) {
 | 
											
												
													
														|  | 
 |  | +						var verticalSlide = verticalSlides[y];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +						var dx = x - indexh,
 | 
											
												
													
														|  | 
 |  | +							dy = y - indexv;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +						distance = Math.sqrt( dx*dx + dy*dy );
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +						verticalSlide.style.display = distance > threshold ? 'none' : 'block';
 | 
											
												
													
														|  | 
 |  | +					}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +				}
 | 
											
												
													
														|  | 
 |  | +				else {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +					// Loops so that it measures 1 between the first and last slides
 | 
											
												
													
														|  | 
 |  | +					distance = Math.abs( ( indexh - x ) % ( horizontalSlidesLength - threshold ) ) || 0;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +					horizontalSlide.style.display = distance > threshold ? 'none' : 'block';
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +				}
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  	/**
 |  |  	/**
 | 
											
												
													
														|  |  	 * Updates the progress bar to reflect the current slide.
 |  |  	 * Updates the progress bar to reflect the current slide.
 | 
											
												
													
														|  |  	 */
 |  |  	 */
 |