From 443b4475bc3b0171f45519b52919e701ec401fb2 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Wed, 21 Mar 2018 18:08:16 -0700 Subject: [PATCH 1/2] Adding support for hash linked slideNumber --- js/reveal.js | 65 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/js/reveal.js b/js/reveal.js index c3713713..e6362191 100644 --- a/js/reveal.js +++ b/js/reveal.js @@ -2188,7 +2188,33 @@ 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 = id.replace( /[^a-zA-Z0-9\-\_\:\.]/g, '' ); + } + // If the current slide has an ID, use that as a named link + if( typeof id === 'string' && id.length ) { + url = '/' + id; + } + // Otherwise use the /h/v index (adding 1 to match slide label) + else { + if( indexh > 0 || indexv > 0 ) url += indexh + 1; + if( indexv > 0 ) url += '/' + indexv + 1; + } + + return url; + } + /** * Checks if the current or specified slide is vertical * (nested within another slide). @@ -2853,6 +2879,7 @@ } + /** * Updates the slide number div to reflect the current slide. * @@ -2906,14 +2933,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 +'' + + ''; } } @@ -3710,8 +3741,8 @@ } 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) - 1, + v = (parseInt( bits[1], 10 ) || 0) - 1; if( h !== indexh || v !== indexv ) { slide( h, v ); @@ -3719,7 +3750,7 @@ } } - + /** * Updates the page URL (hash) to reflect the current * state. @@ -3739,25 +3770,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 = id.replace( /[^a-zA-Z0-9\-\_\:\.]/g, '' ); - } - - // If the current slide has an ID, use that as a named link - if( typeof id === 'string' && id.length ) { - url = '/' + id; - } - // Otherwise use the /h/v index - else { - if( indexh > 0 || indexv > 0 ) url += indexh; - if( indexv > 0 ) url += '/' + indexv; - } - - window.location.hash = url; + window.location.hash = locationHash(); } } From 64b2a27455240e57c2cc1a90300391a3c3b91e28 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Fri, 23 Mar 2018 10:07:42 -0700 Subject: [PATCH 2/2] Made one based indexing optional --- js/reveal.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/js/reveal.js b/js/reveal.js index e6362191..25abc3a6 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', @@ -2208,8 +2212,8 @@ } // Otherwise use the /h/v index (adding 1 to match slide label) else { - if( indexh > 0 || indexv > 0 ) url += indexh + 1; - if( indexv > 0 ) url += '/' + indexv + 1; + if( indexh > 0 || indexv > 0 ) url += indexh + config.hashOneBasedIndex; + if( indexv > 0 ) url += '/' + (indexv + config.hashOneBasedIndex); } return url; @@ -3741,8 +3745,8 @@ } else { // Read the index components of the hash - var h = (parseInt( bits[0], 10 ) || 0) - 1, - v = (parseInt( bits[1], 10 ) || 0) - 1; + var h = (parseInt( bits[0], 10 ) || 0) - config.hashOneBasedIndex, + v = (parseInt( bits[1], 10 ) || 0) - config.hashOneBasedIndex; if( h !== indexh || v !== indexv ) { slide( h, v );