Browse Source

add 'shuffle' config value and API method #1506 #1089

Hakim El Hattab 8 years ago
parent
commit
2625a9292e
2 changed files with 33 additions and 0 deletions
  1. 6 0
      README.md
  2. 27 0
      js/reveal.js

+ 6 - 0
README.md

@@ -152,6 +152,9 @@ Reveal.initialize({
 	// Change the presentation direction to be RTL
 	rtl: false,
 
+	// Randomizes the order of slides each time the presentation loads
+	shuffle: false,
+
 	// Turns fragments on and off globally
 	fragments: true,
 
@@ -382,6 +385,9 @@ Reveal.next();
 Reveal.prevFragment();
 Reveal.nextFragment();
 
+// Randomize the order of slides
+Reveal.shuffle();
+
 // Toggle presentation states, optionally pass true/false to force on/off
 Reveal.toggleOverview();
 Reveal.togglePause();

+ 27 - 0
js/reveal.js

@@ -81,6 +81,9 @@
 			// Change the presentation direction to be RTL
 			rtl: false,
 
+			// Randomizes the order of slides each time the presentation loads
+			shuffle: false,
+
 			// Turns fragments on and off globally
 			fragments: true,
 
@@ -898,6 +901,10 @@
 		dom.progress.style.display = config.progress ? 'block' : 'none';
 		dom.slideNumber.style.display = config.slideNumber && !isPrintingPDF() ? 'block' : 'none';
 
+		if( config.shuffle ) {
+			shuffle();
+		}
+
 		if( config.rtl ) {
 			dom.wrapper.classList.add( 'rtl' );
 		}
@@ -2330,6 +2337,23 @@
 	}
 
 	/**
+	 * Randomly shuffles all slides in the deck.
+	 */
+	function shuffle() {
+
+		var slides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) );
+
+		slides.forEach( function( slide ) {
+
+			// Insert this slide next to another random slide. This may
+			// cause the slide to insert before itself but that's fine.
+			dom.slides.insertBefore( slide, slides[ Math.floor( Math.random() * slides.length ) ] );
+
+		} );
+
+	}
+
+	/**
 	 * Updates one dimension of slides by showing the slide
 	 * with the specified index.
 	 *
@@ -4579,6 +4603,9 @@
 		// Forces an update in slide layout
 		layout: layout,
 
+		// Randomizes the order of slides
+		shuffle: shuffle,
+
 		// Returns an object with the available routes as booleans (left/right/top/bottom)
 		availableRoutes: availableRoutes,