working on #227
This commit is contained in:
		@@ -125,7 +125,7 @@ The Reveal class provides a minimal JavaScript API for controlling navigation an
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
// Navigation
 | 
					// Navigation
 | 
				
			||||||
Reveal.slide( indexh, indexv );
 | 
					Reveal.slide( indexh, indexv, indexf );
 | 
				
			||||||
Reveal.left();
 | 
					Reveal.left();
 | 
				
			||||||
Reveal.right();
 | 
					Reveal.right();
 | 
				
			||||||
Reveal.up();
 | 
					Reveal.up();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										107
									
								
								js/reveal.js
									
									
									
									
									
								
							
							
						
						
									
										107
									
								
								js/reveal.js
									
									
									
									
									
								
							@@ -61,6 +61,9 @@ var Reveal = (function(){
 | 
				
			|||||||
		indexh = 0,
 | 
							indexh = 0,
 | 
				
			||||||
		indexv = 0,
 | 
							indexv = 0,
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
 | 
							// the fragment index
 | 
				
			||||||
 | 
							indexf = 0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// The previous and current slide HTML elements
 | 
							// The previous and current slide HTML elements
 | 
				
			||||||
		previousSlide,
 | 
							previousSlide,
 | 
				
			||||||
		currentSlide,
 | 
							currentSlide,
 | 
				
			||||||
@@ -626,7 +629,7 @@ var Reveal = (function(){
 | 
				
			|||||||
	 * @param {int} h Horizontal index of the target slide
 | 
						 * @param {int} h Horizontal index of the target slide
 | 
				
			||||||
	 * @param {int} v Vertical index of the target slide
 | 
						 * @param {int} v Vertical index of the target slide
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	function slide( h, v ) {
 | 
						function slide( h, v, f) {
 | 
				
			||||||
		// Remember where we were at before
 | 
							// Remember where we were at before
 | 
				
			||||||
		previousSlide = currentSlide;
 | 
							previousSlide = currentSlide;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -643,6 +646,24 @@ 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 );
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							// Show fragment, if specified
 | 
				
			||||||
 | 
							if ( typeof f !== undefined ) {
 | 
				
			||||||
 | 
								// Hide all fragments in current slide
 | 
				
			||||||
 | 
								while ( previousFragment() ) {
 | 
				
			||||||
 | 
									// loop
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if ( f !== 0 ) {
 | 
				
			||||||
 | 
									var fragmentIndex = 0;
 | 
				
			||||||
 | 
									while ( indexf < f && nextFragment() ) {
 | 
				
			||||||
 | 
										fragmentIndex++;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// We cannot trust nextFragment for setting indexf: it can go beyond the max number of fragments available
 | 
				
			||||||
 | 
									indexf = fragmentIndex;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								indexf = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Apply the new state
 | 
							// Apply the new state
 | 
				
			||||||
		stateLoop: for( var i = 0, len = state.length; i < len; i++ ) {
 | 
							stateLoop: for( var i = 0, len = state.length; i < len; i++ ) {
 | 
				
			||||||
			// Check if this state existed on the previous slide. If it
 | 
								// Check if this state existed on the previous slide. If it
 | 
				
			||||||
@@ -677,10 +698,7 @@ var Reveal = (function(){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		updateControls();
 | 
							updateControls();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Update the URL hash after a delay since updating it mid-transition
 | 
							updateURL();
 | 
				
			||||||
		// is likely to cause visual lag
 | 
					 | 
				
			||||||
		clearTimeout( writeURLTimeout );
 | 
					 | 
				
			||||||
		writeURLTimeout = setTimeout( writeURL, 1500 );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Query all horizontal slides in the deck
 | 
							// Query all horizontal slides in the deck
 | 
				
			||||||
		var horizontalSlides = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );
 | 
							var horizontalSlides = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );
 | 
				
			||||||
@@ -855,9 +873,11 @@ var Reveal = (function(){
 | 
				
			|||||||
	function readURL() {
 | 
						function readURL() {
 | 
				
			||||||
		var hash = window.location.hash;
 | 
							var hash = window.location.hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var hashParts = hash.split( '?' );
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		// Attempt to parse the hash as either an index or name
 | 
							// Attempt to parse the hash as either an index or name
 | 
				
			||||||
		var bits = hash.slice( 2 ).split( '/' ),
 | 
							var bits = hashParts[0].slice( 2 ).split( '/' ),
 | 
				
			||||||
			name = hash.replace( /#|\//gi, '' );
 | 
								name = hashParts[0].replace( /#|\//gi, '' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// If the first bit is invalid and there is a name we can
 | 
							// If the first bit is invalid and there is a name we can
 | 
				
			||||||
		// assume that this is a named link
 | 
							// assume that this is a named link
 | 
				
			||||||
@@ -880,10 +900,22 @@ var Reveal = (function(){
 | 
				
			|||||||
			var h = parseInt( bits[0], 10 ) || 0,
 | 
								var h = parseInt( bits[0], 10 ) || 0,
 | 
				
			||||||
				v = parseInt( bits[1], 10 ) || 0;
 | 
									v = parseInt( bits[1], 10 ) || 0;
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			slide( h, v );
 | 
								var f = 0;
 | 
				
			||||||
 | 
								if ( hashParts.length > 1 ) {
 | 
				
			||||||
 | 
									f = parseInt( hashParts[1] );
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								slide( h, v, f );
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						function updateURL () {
 | 
				
			||||||
 | 
							// Update the URL hash after a delay since updating it mid-transition
 | 
				
			||||||
 | 
							// is likely to cause visual lag
 | 
				
			||||||
 | 
							clearTimeout( writeURLTimeout );
 | 
				
			||||||
 | 
							writeURLTimeout = setTimeout( writeURL, 1500 );
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Updates the page URL (hash) to reflect the current
 | 
						 * Updates the page URL (hash) to reflect the current
 | 
				
			||||||
	 * state.
 | 
						 * state.
 | 
				
			||||||
@@ -896,6 +928,7 @@ var Reveal = (function(){
 | 
				
			|||||||
			// the URL
 | 
								// the URL
 | 
				
			||||||
			if( indexh > 0 || indexv > 0 ) url += indexh;
 | 
								if( indexh > 0 || indexv > 0 ) url += indexh;
 | 
				
			||||||
			if( indexv > 0 ) url += '/' + indexv;
 | 
								if( indexv > 0 ) url += '/' + indexv;
 | 
				
			||||||
 | 
								if( indexf > 0 ) url += '?' + indexf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			window.location.hash = url;
 | 
								window.location.hash = url;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -944,14 +977,15 @@ var Reveal = (function(){
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	function nextFragment() {
 | 
						function nextFragment() {
 | 
				
			||||||
		// Vertical slides:
 | 
							// Vertical slides:
 | 
				
			||||||
 | 
							var fragment,
 | 
				
			||||||
 | 
									fragmentFound = false;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		if( document.querySelector( VERTICAL_SLIDES_SELECTOR + '.present' ) ) {
 | 
							if( document.querySelector( VERTICAL_SLIDES_SELECTOR + '.present' ) ) {
 | 
				
			||||||
			var verticalFragments = document.querySelectorAll( VERTICAL_SLIDES_SELECTOR + '.present .fragment:not(.visible)' );
 | 
								var verticalFragments = document.querySelectorAll( VERTICAL_SLIDES_SELECTOR + '.present .fragment:not(.visible)' );
 | 
				
			||||||
			if( verticalFragments.length ) {
 | 
								if( verticalFragments.length ) {
 | 
				
			||||||
				verticalFragments[0].classList.add( 'visible' );
 | 
									verticalFragments[0].classList.add( 'visible' );
 | 
				
			||||||
 | 
									fragment = verticalFragments[0];
 | 
				
			||||||
				// Notify subscribers of the change
 | 
									fragmentFound = true;
 | 
				
			||||||
				dispatchEvent( 'fragmentshown', { fragment: verticalFragments[0] } );
 | 
					 | 
				
			||||||
				return true;
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// Horizontal slides:
 | 
							// Horizontal slides:
 | 
				
			||||||
@@ -959,14 +993,23 @@ var Reveal = (function(){
 | 
				
			|||||||
			var horizontalFragments = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.present .fragment:not(.visible)' );
 | 
								var horizontalFragments = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.present .fragment:not(.visible)' );
 | 
				
			||||||
			if( horizontalFragments.length ) {
 | 
								if( horizontalFragments.length ) {
 | 
				
			||||||
				horizontalFragments[0].classList.add( 'visible' );
 | 
									horizontalFragments[0].classList.add( 'visible' );
 | 
				
			||||||
 | 
									fragment = horizontalFragments[0];
 | 
				
			||||||
				// Notify subscribers of the change
 | 
									fragmentFound = true;
 | 
				
			||||||
				dispatchEvent( 'fragmentshown', { fragment: horizontalFragments[0] } );
 | 
					 | 
				
			||||||
				return true;
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return false;
 | 
							if ( fragmentFound ) {
 | 
				
			||||||
 | 
								indexf++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Notify subscribers of the change
 | 
				
			||||||
 | 
								dispatchEvent( 'fragmentshown', { fragment: fragment, index: indexf } );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								updateURL();
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								indexf = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return fragmentFound;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -976,15 +1019,16 @@ var Reveal = (function(){
 | 
				
			|||||||
	 * false otherwise
 | 
						 * false otherwise
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	function previousFragment() {
 | 
						function previousFragment() {
 | 
				
			||||||
 | 
							var fragment,
 | 
				
			||||||
 | 
									fragmentFound = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Vertical slides:
 | 
							// Vertical slides:
 | 
				
			||||||
		if( document.querySelector( VERTICAL_SLIDES_SELECTOR + '.present' ) ) {
 | 
							if( document.querySelector( VERTICAL_SLIDES_SELECTOR + '.present' ) ) {
 | 
				
			||||||
			var verticalFragments = document.querySelectorAll( VERTICAL_SLIDES_SELECTOR + '.present .fragment.visible' );
 | 
								var verticalFragments = document.querySelectorAll( VERTICAL_SLIDES_SELECTOR + '.present .fragment.visible' );
 | 
				
			||||||
			if( verticalFragments.length ) {
 | 
								if( verticalFragments.length ) {
 | 
				
			||||||
				verticalFragments[ verticalFragments.length - 1 ].classList.remove( 'visible' );
 | 
									verticalFragments[ verticalFragments.length - 1 ].classList.remove( 'visible' );
 | 
				
			||||||
 | 
									fragment = verticalFragments[ verticalFragments.length - 1 ];
 | 
				
			||||||
				// Notify subscribers of the change
 | 
									fragmentFound = true;
 | 
				
			||||||
				dispatchEvent( 'fragmenthidden', { fragment: verticalFragments[ verticalFragments.length - 1 ] } );
 | 
					 | 
				
			||||||
				return true;
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// Horizontal slides:
 | 
							// Horizontal slides:
 | 
				
			||||||
@@ -992,14 +1036,23 @@ var Reveal = (function(){
 | 
				
			|||||||
			var horizontalFragments = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.present .fragment.visible' );
 | 
								var horizontalFragments = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.present .fragment.visible' );
 | 
				
			||||||
			if( horizontalFragments.length ) {
 | 
								if( horizontalFragments.length ) {
 | 
				
			||||||
				horizontalFragments[ horizontalFragments.length - 1 ].classList.remove( 'visible' );
 | 
									horizontalFragments[ horizontalFragments.length - 1 ].classList.remove( 'visible' );
 | 
				
			||||||
 | 
									fragment = horizontalFragments[ horizontalFragments.length - 1 ];
 | 
				
			||||||
				// Notify subscribers of the change
 | 
									fragmentFound = true;
 | 
				
			||||||
				dispatchEvent( 'fragmenthidden', { fragment: horizontalFragments[ horizontalFragments.length - 1 ] } );
 | 
					 | 
				
			||||||
				return true;
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return false;
 | 
							if ( fragmentFound ) {
 | 
				
			||||||
 | 
								indexf--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Notify subscribers of the change
 | 
				
			||||||
 | 
								dispatchEvent( 'fragmenthidden', { fragment: fragment, index: indexf } );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								updateURL();
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								indexf = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return fragmentFound;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -1017,7 +1070,7 @@ var Reveal = (function(){
 | 
				
			|||||||
	function navigateLeft() {
 | 
						function navigateLeft() {
 | 
				
			||||||
		// Prioritize hiding fragments
 | 
							// Prioritize hiding fragments
 | 
				
			||||||
		if( availableRoutes().left && ( isOverviewActive() || previousFragment() === false ) ) {
 | 
							if( availableRoutes().left && ( isOverviewActive() || previousFragment() === false ) ) {
 | 
				
			||||||
			slide( indexh - 1, 0 );
 | 
								slide( indexh - 1, 0, Number.MAX_VALUE );
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user