Browse Source

Merge pull request #2286 from asottile/hash_without_history_2211

Add new 'hash: true' option which uses replaceState for url
Hakim El Hattab 5 years ago
parent
commit
6ef565c9fb
2 changed files with 19 additions and 11 deletions
  1. 4 1
      README.md
  2. 15 10
      js/reveal.js

+ 4 - 1
README.md

@@ -260,9 +260,12 @@ Reveal.initialize({
 	// Display the page number of the current slide
 	slideNumber: false,
 
-	// Push each slide change to the browser history
+	// Push each slide change to the browser history.  Implies `hash: true`
 	history: false,
 
+	// Change the hash when changing slides -- impacts browser history with `history: true`
+	hash: false,
+
 	// Enable keyboard shortcuts for navigation
 	keyboard: true,
 

+ 15 - 10
js/reveal.js

@@ -76,9 +76,12 @@
 			// Determine which displays to show the slide number on
 			showSlideNumber: 'all',
 
-			// Push each slide change to the browser history
+			// Push each slide change to the browser history.  Implies `hash: true`
 			history: false,
 
+			// Change the hash when changing slides -- impacts browser history with `history: true`
+			hash: false,
+
 			// Enable keyboard shortcuts for navigation
 			keyboard: true,
 
@@ -4137,18 +4140,20 @@
 	 */
 	function writeURL( delay ) {
 
-		if( config.history ) {
-
-			// Make sure there's never more than one timeout running
-			clearTimeout( writeURLTimeout );
+		// Make sure there's never more than one timeout running
+		clearTimeout( writeURLTimeout );
 
-			// If a delay is specified, timeout this call
-			if( typeof delay === 'number' ) {
-				writeURLTimeout = setTimeout( writeURL, delay );
-			}
-			else if( currentSlide ) {
+		// If a delay is specified, timeout this call
+		if( typeof delay === 'number' ) {
+			writeURLTimeout = setTimeout( writeURL, delay );
+		}
+		else if( currentSlide ) {
+			if ( config.history ) {
 				window.location.hash = locationHash();
 			}
+			else if ( config.hash ) {
+				window.history.replaceState(null, null, '#' + locationHash());
+			}
 		}
 
 	}