Browse Source

Merge pull request #58 from danielmitd/controls

fix JS error when controls are removed from HTML
Hakim El Hattab 12 years ago
parent
commit
2d44d1e25f
1 changed files with 26 additions and 15 deletions
  1. 26 15
      js/reveal.js

+ 26 - 15
js/reveal.js

@@ -87,11 +87,14 @@ var Reveal = (function(){
 		dom.wrapper = document.querySelector( '.reveal' );
 		dom.progress = document.querySelector( '.reveal .progress' );
 		dom.progressbar = document.querySelector( '.reveal .progress span' );
-		dom.controls = document.querySelector( '.reveal .controls' );
-		dom.controlsLeft = document.querySelector( '.reveal .controls .left' );
-		dom.controlsRight = document.querySelector( '.reveal .controls .right' );
-		dom.controlsUp = document.querySelector( '.reveal .controls .up' );
-		dom.controlsDown = document.querySelector( '.reveal .controls .down' );
+		
+		if ( config.controls ) {
+			dom.controls = document.querySelector( '.reveal .controls' );
+			dom.controlsLeft = document.querySelector( '.reveal .controls .left' );
+			dom.controlsRight = document.querySelector( '.reveal .controls .right' );
+			dom.controlsUp = document.querySelector( '.reveal .controls .up' );
+			dom.controlsDown = document.querySelector( '.reveal .controls .down' );
+		}
 
 		addEventListeners();
 
@@ -123,7 +126,7 @@ var Reveal = (function(){
 			config.transition = 'linear';
 		}
 
-		if( config.controls ) {
+		if( config.controls && dom.controls ) {
 			dom.controls.style.display = 'block';
 		}
 
@@ -156,11 +159,13 @@ var Reveal = (function(){
 		document.addEventListener( 'touchmove', onDocumentTouchMove, false );
 		document.addEventListener( 'touchend', onDocumentTouchEnd, false );
 		window.addEventListener( 'hashchange', onWindowHashChange, false );
-		
-		dom.controlsLeft.addEventListener( 'click', preventAndForward( navigateLeft ), false );
-		dom.controlsRight.addEventListener( 'click', preventAndForward( navigateRight ), false );
-		dom.controlsUp.addEventListener( 'click', preventAndForward( navigateUp ), false );
-		dom.controlsDown.addEventListener( 'click', preventAndForward( navigateDown ), false );
+
+		if ( config.controls && dom.controls ) {
+			dom.controlsLeft.addEventListener( 'click', preventAndForward( navigateLeft ), false );
+			dom.controlsRight.addEventListener( 'click', preventAndForward( navigateRight ), false );
+			dom.controlsUp.addEventListener( 'click', preventAndForward( navigateUp ), false );
+			dom.controlsDown.addEventListener( 'click', preventAndForward( navigateDown ), false );	
+		}
 	}
 
 	function removeEventListeners() {
@@ -170,10 +175,12 @@ var Reveal = (function(){
 		document.removeEventListener( 'touchend', onDocumentTouchEnd, false );
 		window.removeEventListener( 'hashchange', onWindowHashChange, false );
 		
-		dom.controlsLeft.removeEventListener( 'click', preventAndForward( navigateLeft ), false );
-		dom.controlsRight.removeEventListener( 'click', preventAndForward( navigateRight ), false );
-		dom.controlsUp.removeEventListener( 'click', preventAndForward( navigateUp ), false );
-		dom.controlsDown.removeEventListener( 'click', preventAndForward( navigateDown ), false );
+		if ( config.controls && dom.controls ) {
+			dom.controlsLeft.removeEventListener( 'click', preventAndForward( navigateLeft ), false );
+			dom.controlsRight.removeEventListener( 'click', preventAndForward( navigateRight ), false );
+			dom.controlsUp.removeEventListener( 'click', preventAndForward( navigateUp ), false );
+			dom.controlsDown.removeEventListener( 'click', preventAndForward( navigateDown ), false );
+		}
 	}
 
 	/**
@@ -692,6 +699,10 @@ var Reveal = (function(){
 	 * Updates the state and link pointers of the controls.
 	 */
 	function updateControls() {
+		if ( !config.controls || !dom.controls ) {
+			return;
+		}
+		
 		var routes = availableRoutes();
 
 		// Remove the 'enabled' class from all directions