diff --git a/js/reveal.js b/js/reveal.js index 2d85b89d..a953fe21 100644 --- a/js/reveal.js +++ b/js/reveal.js @@ -68,6 +68,10 @@ // Display the page number of the current slide slideNumber: false, + + // Use 1 based indexing for # links to match slide number (default is zero + // based) + hashOneBasedIndex: false, // Determine which displays to show the slide number on showSlideNumber: 'all', @@ -2251,7 +2255,41 @@ return overview; } + + /** + * Return a hash URL that will resolve to the current slide location. + */ + + function locationHash() { + + var url = '/'; + // Attempt to create a named link based on the slide's ID + var id = currentSlide ? currentSlide.getAttribute( 'id' ) : null; + if( id ) { + id = encodeURIComponent( id ); + } + + var indexf; + if( config.fragmentInURL ) { + indexf = getIndices().f; + } + + // If the current slide has an ID, use that as a named link, + // but we don't support named links with a fragment index + if( typeof id === 'string' && id.length && indexf === undefined ) { + url = '/' + id; + } + // Otherwise use the /h/v index + else { + if( indexh > 0 || indexv > 0 || indexf !== undefined ) url += indexh + config.hashOneBasedIndex; + if( indexv > 0 || indexf !== undefined ) url += '/' + (indexv + config.hashOneBasedIndex); + if( indexf !== undefined ) url += '/' + indexf; + } + + return url; + } + /** * Checks if the current or specified slide is vertical * (nested within another slide). @@ -2917,6 +2955,7 @@ } + /** * Updates the slide number div to reflect the current slide. * @@ -2970,14 +3009,18 @@ * @return {string} HTML string fragment */ function formatSlideNumber( a, delimiter, b ) { - + var url = '#' + locationHash(); if( typeof b === 'number' && !isNaN( b ) ) { - return ''+ a +'' + + return '' + + ''+ a +'' + ''+ delimiter +'' + - ''+ b +''; + ''+ b +'' + + ''; } else { - return ''+ a +''; + return '' + + ''+ a +'' + + ''; } } @@ -3796,8 +3839,9 @@ } else { // Read the index components of the hash - var h = parseInt( bits[0], 10 ) || 0, - v = parseInt( bits[1], 10 ) || 0, + + var h = parseInt( bits[0], 10 ) || 0 - config.hashOneBasedIndex, + v = parseInt( bits[1], 10 ) || 0 - config.hashOneBasedIndex, f; if( config.fragmentInURL ) { f = parseInt( bits[2], 10 ); @@ -3812,7 +3856,7 @@ } } - + /** * Updates the page URL (hash) to reflect the current * state. @@ -3832,32 +3876,7 @@ writeURLTimeout = setTimeout( writeURL, delay ); } else if( currentSlide ) { - var url = '/'; - - // Attempt to create a named link based on the slide's ID - var id = currentSlide.getAttribute( 'id' ); - if( id ) { - id = encodeURIComponent( id ); - } - - var indexf; - if( config.fragmentInURL ) { - indexf = getIndices().f; - } - - // If the current slide has an ID, use that as a named link, - // but we don't support named links with a fragment index - if( typeof id === 'string' && id.length && indexf === undefined ) { - url = '/' + id; - } - // Otherwise use the /h/v index - else { - if( indexh > 0 || indexv > 0 || indexf !== undefined ) url += indexh; - if( indexv > 0 || indexf !== undefined ) url += '/' + indexv; - if( indexf !== undefined ) url += '/' + indexf; - } - - window.location.hash = url; + window.location.hash = locationHash(); } }