|
@@ -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.
|
|
*/
|
|
*/
|