Merge pull request #1119 from hakimel/feature/new-overview
Refactored overview mode
This commit is contained in:
		
							
								
								
									
										109
									
								
								css/reveal.css
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								css/reveal.css
									
									
									
									
									
								
							@@ -624,63 +624,6 @@ body {
 | 
			
		||||
  -webkit-transition: none;
 | 
			
		||||
          transition: none; }
 | 
			
		||||
 | 
			
		||||
/*********************************************
 | 
			
		||||
 * OVERVIEW
 | 
			
		||||
 *********************************************/
 | 
			
		||||
.reveal.overview {
 | 
			
		||||
  -webkit-perspective-origin: 50% 50%;
 | 
			
		||||
          perspective-origin: 50% 50%;
 | 
			
		||||
  -webkit-perspective: 700px;
 | 
			
		||||
          perspective: 700px; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides section {
 | 
			
		||||
  height: 700px;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  opacity: 1 !important;
 | 
			
		||||
  visibility: visible !important;
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
  background: rgba(0, 0, 0, 0.1);
 | 
			
		||||
  -moz-box-sizing: border-box;
 | 
			
		||||
       box-sizing: border-box; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides section, .reveal.overview-deactivating .slides section {
 | 
			
		||||
  -webkit-transition: none !important;
 | 
			
		||||
          transition: none !important; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides section .fragment {
 | 
			
		||||
  opacity: 1; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides section:after, .reveal.overview .slides section:before {
 | 
			
		||||
  display: none !important; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides section > section {
 | 
			
		||||
  opacity: 1;
 | 
			
		||||
  cursor: pointer; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides section:hover {
 | 
			
		||||
  background: rgba(0, 0, 0, 0.3); }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides section.present {
 | 
			
		||||
  background: rgba(0, 0, 0, 0.3); }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides > section.stack {
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  top: 0 !important;
 | 
			
		||||
  background: none;
 | 
			
		||||
  overflow: visible; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .backgrounds {
 | 
			
		||||
  -webkit-perspective: inherit;
 | 
			
		||||
          perspective: inherit; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .backgrounds .slide-background {
 | 
			
		||||
  opacity: 1;
 | 
			
		||||
  visibility: visible; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .backgrounds .slide-background, .reveal.overview-deactivating .backgrounds .slide-background {
 | 
			
		||||
  -webkit-transition: none !important;
 | 
			
		||||
          transition: none !important; }
 | 
			
		||||
 | 
			
		||||
/*********************************************
 | 
			
		||||
 * PAUSED MODE
 | 
			
		||||
 *********************************************/
 | 
			
		||||
@@ -901,6 +844,58 @@ body {
 | 
			
		||||
  -webkit-transition-duration: 1200ms;
 | 
			
		||||
          transition-duration: 1200ms; }
 | 
			
		||||
 | 
			
		||||
/*********************************************
 | 
			
		||||
 * OVERVIEW
 | 
			
		||||
 *********************************************/
 | 
			
		||||
.reveal.overview {
 | 
			
		||||
  -webkit-perspective-origin: 50% 50%;
 | 
			
		||||
          perspective-origin: 50% 50%;
 | 
			
		||||
  -webkit-perspective: 700px;
 | 
			
		||||
          perspective: 700px; }
 | 
			
		||||
  .reveal.overview .slides section {
 | 
			
		||||
    height: 700px;
 | 
			
		||||
    opacity: 1 !important;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    visibility: visible !important;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    -moz-box-sizing: border-box;
 | 
			
		||||
         box-sizing: border-box; }
 | 
			
		||||
  .reveal.overview .slides section:hover, .reveal.overview .slides section.present {
 | 
			
		||||
    outline: 10px solid rgba(150, 150, 150, 0.4);
 | 
			
		||||
    outline-offset: 10px; }
 | 
			
		||||
  .reveal.overview .slides section .fragment {
 | 
			
		||||
    opacity: 1;
 | 
			
		||||
    -webkit-transition: none;
 | 
			
		||||
            transition: none; }
 | 
			
		||||
  .reveal.overview .slides section:after, .reveal.overview .slides section:before {
 | 
			
		||||
    display: none !important; }
 | 
			
		||||
  .reveal.overview .slides > section.stack {
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    top: 0 !important;
 | 
			
		||||
    background: none;
 | 
			
		||||
    outline: none;
 | 
			
		||||
    overflow: visible; }
 | 
			
		||||
  .reveal.overview .backgrounds {
 | 
			
		||||
    -webkit-perspective: inherit;
 | 
			
		||||
            perspective: inherit; }
 | 
			
		||||
  .reveal.overview .backgrounds .slide-background {
 | 
			
		||||
    opacity: 1;
 | 
			
		||||
    visibility: visible;
 | 
			
		||||
    outline: 10px solid rgba(150, 150, 150, 0.1);
 | 
			
		||||
    outline-offset: 10px; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .slides section, .reveal.overview-deactivating .slides section {
 | 
			
		||||
  -webkit-transition: none;
 | 
			
		||||
          transition: none; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview .backgrounds .slide-background, .reveal.overview-deactivating .backgrounds .slide-background {
 | 
			
		||||
  -webkit-transition: none;
 | 
			
		||||
          transition: none; }
 | 
			
		||||
 | 
			
		||||
.reveal.overview-animated .slides, .reveal.overview-animated .slides section, .reveal.overview-animated .backgrounds .slide-background {
 | 
			
		||||
  -webkit-transition: -webkit-transform 0.4s ease;
 | 
			
		||||
          transition: transform 0.4s ease; }
 | 
			
		||||
 | 
			
		||||
/*********************************************
 | 
			
		||||
 * RTL SUPPORT
 | 
			
		||||
 *********************************************/
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										128
									
								
								css/reveal.scss
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								css/reveal.scss
									
									
									
									
									
								
							@@ -739,64 +739,6 @@ body {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************
 | 
			
		||||
 * OVERVIEW
 | 
			
		||||
 *********************************************/
 | 
			
		||||
 | 
			
		||||
.reveal.overview {
 | 
			
		||||
	perspective-origin: 50% 50%;
 | 
			
		||||
	perspective: 700px;
 | 
			
		||||
}
 | 
			
		||||
.reveal.overview .slides section {
 | 
			
		||||
	height: 700px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	opacity: 1 !important;
 | 
			
		||||
	visibility: visible !important;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	background: rgba(0,0,0,0.1);
 | 
			
		||||
	box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
.reveal.overview .slides section,
 | 
			
		||||
.reveal.overview-deactivating .slides section {
 | 
			
		||||
	transition: none !important;
 | 
			
		||||
}
 | 
			
		||||
.reveal.overview .slides section .fragment {
 | 
			
		||||
	opacity: 1;
 | 
			
		||||
}
 | 
			
		||||
.reveal.overview .slides section:after,
 | 
			
		||||
.reveal.overview .slides section:before {
 | 
			
		||||
	display: none !important;
 | 
			
		||||
}
 | 
			
		||||
.reveal.overview .slides section>section {
 | 
			
		||||
	opacity: 1;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
	.reveal.overview .slides section:hover {
 | 
			
		||||
		background: rgba(0,0,0,0.3);
 | 
			
		||||
	}
 | 
			
		||||
	.reveal.overview .slides section.present {
 | 
			
		||||
		background: rgba(0,0,0,0.3);
 | 
			
		||||
	}
 | 
			
		||||
.reveal.overview .slides>section.stack {
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	top: 0 !important;
 | 
			
		||||
	background: none;
 | 
			
		||||
	overflow: visible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.reveal.overview .backgrounds {
 | 
			
		||||
	perspective: inherit;
 | 
			
		||||
}
 | 
			
		||||
.reveal.overview .backgrounds .slide-background {
 | 
			
		||||
	opacity: 1;
 | 
			
		||||
	visibility: visible;
 | 
			
		||||
}
 | 
			
		||||
.reveal.overview .backgrounds .slide-background,
 | 
			
		||||
.reveal.overview-deactivating .backgrounds .slide-background {
 | 
			
		||||
	transition: none !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************
 | 
			
		||||
 * PAUSED MODE
 | 
			
		||||
 *********************************************/
 | 
			
		||||
@@ -1037,6 +979,76 @@ body {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************
 | 
			
		||||
 * OVERVIEW
 | 
			
		||||
 *********************************************/
 | 
			
		||||
 | 
			
		||||
.reveal.overview {
 | 
			
		||||
	perspective-origin: 50% 50%;
 | 
			
		||||
	perspective: 700px;
 | 
			
		||||
 | 
			
		||||
	.slides section {
 | 
			
		||||
		height: 700px;
 | 
			
		||||
		opacity: 1 !important;
 | 
			
		||||
		overflow: hidden;
 | 
			
		||||
		visibility: visible !important;
 | 
			
		||||
		cursor: pointer;
 | 
			
		||||
		box-sizing: border-box;
 | 
			
		||||
	}
 | 
			
		||||
	.slides section:hover,
 | 
			
		||||
	.slides section.present {
 | 
			
		||||
		outline: 10px solid rgba(150,150,150,0.4);
 | 
			
		||||
		outline-offset: 10px;
 | 
			
		||||
	}
 | 
			
		||||
	.slides section .fragment {
 | 
			
		||||
		opacity: 1;
 | 
			
		||||
		transition: none;
 | 
			
		||||
	}
 | 
			
		||||
	.slides section:after,
 | 
			
		||||
	.slides section:before {
 | 
			
		||||
		display: none !important;
 | 
			
		||||
	}
 | 
			
		||||
	.slides>section.stack {
 | 
			
		||||
		padding: 0;
 | 
			
		||||
		top: 0 !important;
 | 
			
		||||
		background: none;
 | 
			
		||||
		outline: none;
 | 
			
		||||
		overflow: visible;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.backgrounds {
 | 
			
		||||
		perspective: inherit;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.backgrounds .slide-background {
 | 
			
		||||
		opacity: 1;
 | 
			
		||||
		visibility: visible;
 | 
			
		||||
 | 
			
		||||
		// This can't be applied to the slide itself in Safari
 | 
			
		||||
		outline: 10px solid rgba(150,150,150,0.1);
 | 
			
		||||
		outline-offset: 10px;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Disable transitions transitions while we're activating
 | 
			
		||||
// or deactivating the overview mode.
 | 
			
		||||
.reveal.overview .slides section,
 | 
			
		||||
.reveal.overview-deactivating .slides section {
 | 
			
		||||
	transition: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.reveal.overview .backgrounds .slide-background,
 | 
			
		||||
.reveal.overview-deactivating .backgrounds .slide-background {
 | 
			
		||||
	transition: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.reveal.overview-animated .slides,
 | 
			
		||||
.reveal.overview-animated .slides section,
 | 
			
		||||
.reveal.overview-animated .backgrounds .slide-background {
 | 
			
		||||
	transition: transform 0.4s ease;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*********************************************
 | 
			
		||||
 * RTL SUPPORT
 | 
			
		||||
 *********************************************/
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										231
									
								
								js/reveal.js
									
									
									
									
									
								
							
							
						
						
									
										231
									
								
								js/reveal.js
									
									
									
									
									
								
							@@ -147,6 +147,9 @@
 | 
			
		||||
		// Flags if reveal.js is loaded (has dispatched the 'ready' event)
 | 
			
		||||
		loaded = false,
 | 
			
		||||
 | 
			
		||||
		// Flags if the overview mode is currently active
 | 
			
		||||
		overview = false,
 | 
			
		||||
 | 
			
		||||
		// The horizontal and vertical index of the currently active slide
 | 
			
		||||
		indexh,
 | 
			
		||||
		indexv,
 | 
			
		||||
@@ -165,8 +168,9 @@
 | 
			
		||||
		// The current scale of the presentation (see width/height config)
 | 
			
		||||
		scale = 1,
 | 
			
		||||
 | 
			
		||||
		// The current z position of the presentation container
 | 
			
		||||
		z = 0,
 | 
			
		||||
		// CSS transform that is currently applied to the slides container,
 | 
			
		||||
		// split into two groups
 | 
			
		||||
		slidesTransform = { layout: '', overview: '' },
 | 
			
		||||
 | 
			
		||||
		// Cached references to DOM elements
 | 
			
		||||
		dom = {},
 | 
			
		||||
@@ -296,7 +300,11 @@
 | 
			
		||||
 | 
			
		||||
		features.touch = !!( 'ontouchstart' in window );
 | 
			
		||||
 | 
			
		||||
		isMobileDevice = navigator.userAgent.match( /(iphone|ipod|ipad|android)/gi );
 | 
			
		||||
		// Transitions in the overview are disabled in desktop and
 | 
			
		||||
		// mobile Safari due to lag
 | 
			
		||||
		features.overviewTransitions = !/Version\/[\d\.]+.*Safari/.test( navigator.userAgent );
 | 
			
		||||
 | 
			
		||||
		isMobileDevice = /(iphone|ipod|ipad|android)/gi.test( navigator.userAgent );
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1058,6 +1066,27 @@
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Applies CSS transforms to the slides container. The container
 | 
			
		||||
	 * is transformed from two separate sources: layout and the overview
 | 
			
		||||
	 * mode.
 | 
			
		||||
	 */
 | 
			
		||||
	function transformSlides( transforms ) {
 | 
			
		||||
 | 
			
		||||
		// Pick up new transforms from arguments
 | 
			
		||||
		if( typeof transforms.layout === 'string' ) slidesTransform.layout = transforms.layout;
 | 
			
		||||
		if( typeof transforms.overview === 'string' ) slidesTransform.overview = transforms.overview;
 | 
			
		||||
 | 
			
		||||
		// Apply the transforms to the slides container
 | 
			
		||||
		if( slidesTransform.layout ) {
 | 
			
		||||
			transformElement( dom.slides, slidesTransform.layout + ' ' + slidesTransform.overview );
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
			transformElement( dom.slides, slidesTransform.overview );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Injects the given CSS styles into the DOM.
 | 
			
		||||
	 */
 | 
			
		||||
@@ -1446,7 +1475,6 @@
 | 
			
		||||
			var size = getComputedSlideSize();
 | 
			
		||||
 | 
			
		||||
			var slidePadding = 20; // TODO Dig this out of DOM
 | 
			
		||||
			var zTransform = z !== 0 ? 'translateZ(-'+ z +'px)' : '';
 | 
			
		||||
 | 
			
		||||
			// Layout the contents of the slides
 | 
			
		||||
			layoutSlideContents( config.width, config.height, slidePadding );
 | 
			
		||||
@@ -1468,13 +1496,13 @@
 | 
			
		||||
				dom.slides.style.top = '';
 | 
			
		||||
				dom.slides.style.bottom = '';
 | 
			
		||||
				dom.slides.style.right = '';
 | 
			
		||||
				transformElement( dom.slides, zTransform );
 | 
			
		||||
				transformSlides( { layout: '' } );
 | 
			
		||||
			}
 | 
			
		||||
			else {
 | 
			
		||||
				// Prefer zooming in desktop Chrome so that content remains crisp
 | 
			
		||||
				if( !isMobileDevice && /chrome/i.test( navigator.userAgent ) && typeof dom.slides.style.zoom !== 'undefined' ) {
 | 
			
		||||
					dom.slides.style.zoom = scale;
 | 
			
		||||
					transformElement( dom.slides, zTransform );
 | 
			
		||||
					transformSlides( { layout: '' } );
 | 
			
		||||
				}
 | 
			
		||||
				// Apply scale transform as a fallback
 | 
			
		||||
				else {
 | 
			
		||||
@@ -1482,7 +1510,7 @@
 | 
			
		||||
					dom.slides.style.top = '50%';
 | 
			
		||||
					dom.slides.style.bottom = 'auto';
 | 
			
		||||
					dom.slides.style.right = 'auto';
 | 
			
		||||
					transformElement( dom.slides, 'translate(-50%, -50%) scale('+ scale +') ' + zTransform );
 | 
			
		||||
					transformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@@ -1624,100 +1652,124 @@
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Displays the overview of slides (quick nav) by
 | 
			
		||||
	 * scaling down and arranging all slide elements.
 | 
			
		||||
	 *
 | 
			
		||||
	 * Experimental feature, might be dropped if perf
 | 
			
		||||
	 * can't be improved.
 | 
			
		||||
	 * Displays the overview of slides (quick nav) by scaling
 | 
			
		||||
	 * down and arranging all slide elements.
 | 
			
		||||
	 */
 | 
			
		||||
	function activateOverview() {
 | 
			
		||||
 | 
			
		||||
		// Only proceed if enabled in config
 | 
			
		||||
		if( config.overview ) {
 | 
			
		||||
		if( config.overview && !isOverview() ) {
 | 
			
		||||
 | 
			
		||||
			// Don't auto-slide while in overview mode
 | 
			
		||||
			cancelAutoSlide();
 | 
			
		||||
 | 
			
		||||
			var wasActive = dom.wrapper.classList.contains( 'overview' );
 | 
			
		||||
 | 
			
		||||
			// Set the depth of the presentation. This determinse how far we
 | 
			
		||||
			// zoom out and varies based on display size. It gets applied at
 | 
			
		||||
			// the layout step.
 | 
			
		||||
			z = window.innerWidth < 400 ? 1000 : 2500;
 | 
			
		||||
			overview = true;
 | 
			
		||||
 | 
			
		||||
			dom.wrapper.classList.add( 'overview' );
 | 
			
		||||
			dom.wrapper.classList.remove( 'overview-deactivating' );
 | 
			
		||||
 | 
			
		||||
			if( features.overviewTransitions ) {
 | 
			
		||||
				setTimeout( function() {
 | 
			
		||||
					dom.wrapper.classList.add( 'overview-animated' );
 | 
			
		||||
				}, 1 );
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Don't auto-slide while in overview mode
 | 
			
		||||
			cancelAutoSlide();
 | 
			
		||||
 | 
			
		||||
			// Move the backgrounds element into the slide container to
 | 
			
		||||
			// that the same scaling is applied
 | 
			
		||||
			dom.slides.appendChild( dom.background );
 | 
			
		||||
 | 
			
		||||
			var horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ),
 | 
			
		||||
				horizontalBackgrounds = dom.background.childNodes;
 | 
			
		||||
 | 
			
		||||
			for( var i = 0, len1 = horizontalSlides.length; i < len1; i++ ) {
 | 
			
		||||
				var hslide = horizontalSlides[i],
 | 
			
		||||
					hbackground = horizontalBackgrounds[i],
 | 
			
		||||
					hoffset = config.rtl ? -105 : 105;
 | 
			
		||||
 | 
			
		||||
				var htransform = 'translate(' + ( ( i - indexh ) * hoffset ) + '%, 0%)';
 | 
			
		||||
 | 
			
		||||
				hslide.setAttribute( 'data-index-h', i );
 | 
			
		||||
 | 
			
		||||
				// Apply CSS transform
 | 
			
		||||
				transformElement( hslide, htransform );
 | 
			
		||||
				transformElement( hbackground, htransform );
 | 
			
		||||
 | 
			
		||||
				if( hslide.classList.contains( 'stack' ) ) {
 | 
			
		||||
 | 
			
		||||
					var verticalSlides = hslide.querySelectorAll( 'section' ),
 | 
			
		||||
						verticalBackgrounds = hbackground.querySelectorAll( '.slide-background' );
 | 
			
		||||
 | 
			
		||||
					for( var j = 0, len2 = verticalSlides.length; j < len2; j++ ) {
 | 
			
		||||
						var verticalIndex = i === indexh ? indexv : getPreviousVerticalIndex( hslide );
 | 
			
		||||
 | 
			
		||||
						var vslide = verticalSlides[j],
 | 
			
		||||
							vbackground = verticalBackgrounds[j];
 | 
			
		||||
 | 
			
		||||
						var vtransform = 'translate(0%, ' + ( ( j - verticalIndex ) * 105 ) + '%)';
 | 
			
		||||
 | 
			
		||||
						vslide.setAttribute( 'data-index-h', i );
 | 
			
		||||
						vslide.setAttribute( 'data-index-v', j );
 | 
			
		||||
 | 
			
		||||
						// Apply CSS transform
 | 
			
		||||
						transformElement( vslide, vtransform );
 | 
			
		||||
						transformElement( vbackground, vtransform );
 | 
			
		||||
 | 
			
		||||
						// Navigate to this slide on click
 | 
			
		||||
						vslide.addEventListener( 'click', onOverviewSlideClicked, true );
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
			// Clicking on an overview slide navigates to it
 | 
			
		||||
			toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( function( slide ) {
 | 
			
		||||
				if( !slide.classList.contains( 'stack' ) ) {
 | 
			
		||||
					slide.addEventListener( 'click', onOverviewSlideClicked, true );
 | 
			
		||||
				}
 | 
			
		||||
				else {
 | 
			
		||||
 | 
			
		||||
					// Navigate to this slide on click
 | 
			
		||||
					hslide.addEventListener( 'click', onOverviewSlideClicked, true );
 | 
			
		||||
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			} );
 | 
			
		||||
 | 
			
		||||
			updateSlidesVisibility();
 | 
			
		||||
			layoutOverview();
 | 
			
		||||
			updateOverview();
 | 
			
		||||
 | 
			
		||||
			layout();
 | 
			
		||||
 | 
			
		||||
			if( !wasActive ) {
 | 
			
		||||
				// Notify observers of the overview showing
 | 
			
		||||
				dispatchEvent( 'overviewshown', {
 | 
			
		||||
					'indexh': indexh,
 | 
			
		||||
					'indexv': indexv,
 | 
			
		||||
					'currentSlide': currentSlide
 | 
			
		||||
				} );
 | 
			
		||||
			}
 | 
			
		||||
			// Notify observers of the overview showing
 | 
			
		||||
			dispatchEvent( 'overviewshown', {
 | 
			
		||||
				'indexh': indexh,
 | 
			
		||||
				'indexv': indexv,
 | 
			
		||||
				'currentSlide': currentSlide
 | 
			
		||||
			} );
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Uses CSS transforms to position all slides in a grid for
 | 
			
		||||
	 * display inside of the overview mode.
 | 
			
		||||
	 */
 | 
			
		||||
	function layoutOverview() {
 | 
			
		||||
 | 
			
		||||
		var margin = 70;
 | 
			
		||||
		var slideWidth = config.width + margin,
 | 
			
		||||
			slideHeight = config.height + margin;
 | 
			
		||||
 | 
			
		||||
		// Reverse in RTL mode
 | 
			
		||||
		if( config.rtl ) {
 | 
			
		||||
			slideWidth = -slideWidth;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Layout slides
 | 
			
		||||
		toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ).forEach( function( hslide, h ) {
 | 
			
		||||
			hslide.setAttribute( 'data-index-h', h );
 | 
			
		||||
			transformElement( hslide, 'translate3d(' + ( h * slideWidth ) + 'px, 0, 0)' );
 | 
			
		||||
 | 
			
		||||
			if( hslide.classList.contains( 'stack' ) ) {
 | 
			
		||||
 | 
			
		||||
				toArray( hslide.querySelectorAll( 'section' ) ).forEach( function( vslide, v ) {
 | 
			
		||||
					vslide.setAttribute( 'data-index-h', h );
 | 
			
		||||
					vslide.setAttribute( 'data-index-v', v );
 | 
			
		||||
 | 
			
		||||
					transformElement( vslide, 'translate3d(0, ' + ( v * slideHeight ) + 'px, 0)' );
 | 
			
		||||
				} );
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
		} );
 | 
			
		||||
 | 
			
		||||
		// Layout slide backgrounds
 | 
			
		||||
		toArray( dom.background.childNodes ).forEach( function( hbackground, h ) {
 | 
			
		||||
			transformElement( hbackground, 'translate3d(' + ( h * slideWidth ) + 'px, 0, 0)' );
 | 
			
		||||
 | 
			
		||||
			toArray( hbackground.querySelectorAll( '.slide-background' ) ).forEach( function( vbackground, v ) {
 | 
			
		||||
				transformElement( vbackground, 'translate3d(0, ' + ( v * slideHeight ) + 'px, 0)' );
 | 
			
		||||
			} );
 | 
			
		||||
		} );
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Moves the overview viewport to the current slides.
 | 
			
		||||
	 * Called each time the current slide changes.
 | 
			
		||||
	 */
 | 
			
		||||
	function updateOverview() {
 | 
			
		||||
 | 
			
		||||
		var margin = 70;
 | 
			
		||||
		var slideWidth = config.width + margin,
 | 
			
		||||
			slideHeight = config.height + margin;
 | 
			
		||||
 | 
			
		||||
		// Reverse in RTL mode
 | 
			
		||||
		if( config.rtl ) {
 | 
			
		||||
			slideWidth = -slideWidth;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		transformSlides( {
 | 
			
		||||
			overview: [
 | 
			
		||||
				'translateX('+ ( -indexh * slideWidth ) +'px)',
 | 
			
		||||
				'translateY('+ ( -indexv * slideHeight ) +'px)',
 | 
			
		||||
				'translateZ('+ ( window.innerWidth < 400 ? -1000 : -2500 ) +'px)'
 | 
			
		||||
			].join( ' ' )
 | 
			
		||||
		} );
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Exits the slide overview and enters the currently
 | 
			
		||||
	 * active slide.
 | 
			
		||||
@@ -1727,10 +1779,10 @@
 | 
			
		||||
		// Only proceed if enabled in config
 | 
			
		||||
		if( config.overview ) {
 | 
			
		||||
 | 
			
		||||
			dom.wrapper.classList.remove( 'overview' );
 | 
			
		||||
			overview = false;
 | 
			
		||||
 | 
			
		||||
			// Move the background element back out
 | 
			
		||||
			dom.wrapper.appendChild( dom.background );
 | 
			
		||||
			dom.wrapper.classList.remove( 'overview' );
 | 
			
		||||
			dom.wrapper.classList.remove( 'overview-animated' );
 | 
			
		||||
 | 
			
		||||
			// Temporarily add a class so that transitions can do different things
 | 
			
		||||
			// depending on whether they are exiting/entering overview, or just
 | 
			
		||||
@@ -1741,6 +1793,9 @@
 | 
			
		||||
				dom.wrapper.classList.remove( 'overview-deactivating' );
 | 
			
		||||
			}, 1 );
 | 
			
		||||
 | 
			
		||||
			// Move the background element back out
 | 
			
		||||
			dom.wrapper.appendChild( dom.background );
 | 
			
		||||
 | 
			
		||||
			// Clean up changes made to slides
 | 
			
		||||
			toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( function( slide ) {
 | 
			
		||||
				transformElement( slide, '' );
 | 
			
		||||
@@ -1753,8 +1808,12 @@
 | 
			
		||||
				transformElement( background, '' );
 | 
			
		||||
			} );
 | 
			
		||||
 | 
			
		||||
			transformSlides( { overview: '' } );
 | 
			
		||||
 | 
			
		||||
			slide( indexh, indexv );
 | 
			
		||||
 | 
			
		||||
			layout();
 | 
			
		||||
 | 
			
		||||
			cueAutoSlide();
 | 
			
		||||
 | 
			
		||||
			// Notify observers of the overview hiding
 | 
			
		||||
@@ -1793,7 +1852,7 @@
 | 
			
		||||
	 */
 | 
			
		||||
	function isOverview() {
 | 
			
		||||
 | 
			
		||||
		return dom.wrapper.classList.contains( 'overview' );
 | 
			
		||||
		return overview;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1943,7 +2002,7 @@
 | 
			
		||||
 | 
			
		||||
		// If no vertical index is specified and the upcoming slide is a
 | 
			
		||||
		// stack, resume at its previous vertical index
 | 
			
		||||
		if( v === undefined ) {
 | 
			
		||||
		if( v === undefined && !isOverview() ) {
 | 
			
		||||
			v = getPreviousVerticalIndex( horizontalSlides[ h ] );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -1993,9 +2052,9 @@
 | 
			
		||||
			document.documentElement.classList.remove( stateBefore.pop() );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// If the overview is active, re-activate it to update positions
 | 
			
		||||
		// Update the overview if it's currently active
 | 
			
		||||
		if( isOverview() ) {
 | 
			
		||||
			activateOverview();
 | 
			
		||||
			updateOverview();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Find the current horizontal slide and any possible vertical slides
 | 
			
		||||
@@ -2108,6 +2167,10 @@
 | 
			
		||||
 | 
			
		||||
		formatEmbeddedContent();
 | 
			
		||||
 | 
			
		||||
		if( isOverview() ) {
 | 
			
		||||
			layoutOverview();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user