summary refs log tree commit diff stats
path: root/geschichte/js/controllers/controls.js
diff options
context:
space:
mode:
Diffstat (limited to 'geschichte/js/controllers/controls.js')
-rw-r--r--geschichte/js/controllers/controls.js266
1 files changed, 0 insertions, 266 deletions
diff --git a/geschichte/js/controllers/controls.js b/geschichte/js/controllers/controls.js
deleted file mode 100644
index 734eb17..0000000
--- a/geschichte/js/controllers/controls.js
+++ /dev/null
@@ -1,266 +0,0 @@
-import { queryAll } from '../utils/util.js'
-import { isAndroid } from '../utils/device.js'
-
-/**
- * Manages our presentation controls. This includes both
- * the built-in control arrows as well as event monitoring
- * of any elements within the presentation with either of the
- * following helper classes:
- * - .navigate-up
- * - .navigate-right
- * - .navigate-down
- * - .navigate-left
- * - .navigate-next
- * - .navigate-prev
- */
-export default class Controls {
-
-	constructor( Reveal ) {
-
-		this.Reveal = Reveal;
-
-		this.onNavigateLeftClicked = this.onNavigateLeftClicked.bind( this );
-		this.onNavigateRightClicked = this.onNavigateRightClicked.bind( this );
-		this.onNavigateUpClicked = this.onNavigateUpClicked.bind( this );
-		this.onNavigateDownClicked = this.onNavigateDownClicked.bind( this );
-		this.onNavigatePrevClicked = this.onNavigatePrevClicked.bind( this );
-		this.onNavigateNextClicked = this.onNavigateNextClicked.bind( this );
-
-	}
-
-	render() {
-
-		const rtl = this.Reveal.getConfig().rtl;
-		const revealElement = this.Reveal.getRevealElement();
-
-		this.element = document.createElement( 'aside' );
-		this.element.className = 'controls';
-		this.element.innerHTML =
-			`<button class="navigate-left" aria-label="${ rtl ? 'next slide' : 'previous slide' }"><div class="controls-arrow"></div></button>
-			<button class="navigate-right" aria-label="${ rtl ? 'previous slide' : 'next slide' }"><div class="controls-arrow"></div></button>
-			<button class="navigate-up" aria-label="above slide"><div class="controls-arrow"></div></button>
-			<button class="navigate-down" aria-label="below slide"><div class="controls-arrow"></div></button>`;
-
-		this.Reveal.getRevealElement().appendChild( this.element );
-
-		// There can be multiple instances of controls throughout the page
-		this.controlsLeft = queryAll( revealElement, '.navigate-left' );
-		this.controlsRight = queryAll( revealElement, '.navigate-right' );
-		this.controlsUp = queryAll( revealElement, '.navigate-up' );
-		this.controlsDown = queryAll( revealElement, '.navigate-down' );
-		this.controlsPrev = queryAll( revealElement, '.navigate-prev' );
-		this.controlsNext = queryAll( revealElement, '.navigate-next' );
-
-		// The left, right and down arrows in the standard reveal.js controls
-		this.controlsRightArrow = this.element.querySelector( '.navigate-right' );
-		this.controlsLeftArrow = this.element.querySelector( '.navigate-left' );
-		this.controlsDownArrow = this.element.querySelector( '.navigate-down' );
-
-	}
-
-	/**
-	 * Called when the reveal.js config is updated.
-	 */
-	configure( config, oldConfig ) {
-
-		this.element.style.display = config.controls ? 'block' : 'none';
-
-		this.element.setAttribute( 'data-controls-layout', config.controlsLayout );
-		this.element.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );
-
-	}
-
-	bind() {
-
-		// Listen to both touch and click events, in case the device
-		// supports both
-		let pointerEvents = [ 'touchstart', 'click' ];
-
-		// Only support touch for Android, fixes double navigations in
-		// stock browser
-		if( isAndroid ) {
-			pointerEvents = [ 'touchstart' ];
-		}
-
-		pointerEvents.forEach( eventName => {
-			this.controlsLeft.forEach( el => el.addEventListener( eventName, this.onNavigateLeftClicked, false ) );
-			this.controlsRight.forEach( el => el.addEventListener( eventName, this.onNavigateRightClicked, false ) );
-			this.controlsUp.forEach( el => el.addEventListener( eventName, this.onNavigateUpClicked, false ) );
-			this.controlsDown.forEach( el => el.addEventListener( eventName, this.onNavigateDownClicked, false ) );
-			this.controlsPrev.forEach( el => el.addEventListener( eventName, this.onNavigatePrevClicked, false ) );
-			this.controlsNext.forEach( el => el.addEventListener( eventName, this.onNavigateNextClicked, false ) );
-		} );
-
-	}
-
-	unbind() {
-
-		[ 'touchstart', 'click' ].forEach( eventName => {
-			this.controlsLeft.forEach( el => el.removeEventListener( eventName, this.onNavigateLeftClicked, false ) );
-			this.controlsRight.forEach( el => el.removeEventListener( eventName, this.onNavigateRightClicked, false ) );
-			this.controlsUp.forEach( el => el.removeEventListener( eventName, this.onNavigateUpClicked, false ) );
-			this.controlsDown.forEach( el => el.removeEventListener( eventName, this.onNavigateDownClicked, false ) );
-			this.controlsPrev.forEach( el => el.removeEventListener( eventName, this.onNavigatePrevClicked, false ) );
-			this.controlsNext.forEach( el => el.removeEventListener( eventName, this.onNavigateNextClicked, false ) );
-		} );
-
-	}
-
-	/**
-	 * Updates the state of all control/navigation arrows.
-	 */
-	update() {
-
-		let routes = this.Reveal.availableRoutes();
-
-		// Remove the 'enabled' class from all directions
-		[...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext].forEach( node => {
-			node.classList.remove( 'enabled', 'fragmented' );
-
-			// Set 'disabled' attribute on all directions
-			node.setAttribute( 'disabled', 'disabled' );
-		} );
-
-		// Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons
-		if( routes.left ) this.controlsLeft.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );
-		if( routes.right ) this.controlsRight.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );
-		if( routes.up ) this.controlsUp.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );
-		if( routes.down ) this.controlsDown.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );
-
-		// Prev/next buttons
-		if( routes.left || routes.up ) this.controlsPrev.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );
-		if( routes.right || routes.down ) this.controlsNext.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );
-
-		// Highlight fragment directions
-		let currentSlide = this.Reveal.getCurrentSlide();
-		if( currentSlide ) {
-
-			let fragmentsRoutes = this.Reveal.fragments.availableRoutes();
-
-			// Always apply fragment decorator to prev/next buttons
-			if( fragmentsRoutes.prev ) this.controlsPrev.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );
-			if( fragmentsRoutes.next ) this.controlsNext.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );
-
-			// Apply fragment decorators to directional buttons based on
-			// what slide axis they are in
-			if( this.Reveal.isVerticalSlide( currentSlide ) ) {
-				if( fragmentsRoutes.prev ) this.controlsUp.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );
-				if( fragmentsRoutes.next ) this.controlsDown.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );
-			}
-			else {
-				if( fragmentsRoutes.prev ) this.controlsLeft.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );
-				if( fragmentsRoutes.next ) this.controlsRight.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );
-			}
-
-		}
-
-		if( this.Reveal.getConfig().controlsTutorial ) {
-
-			let indices = this.Reveal.getIndices();
-
-			// Highlight control arrows with an animation to ensure
-			// that the viewer knows how to navigate
-			if( !this.Reveal.hasNavigatedVertically() && routes.down ) {
-				this.controlsDownArrow.classList.add( 'highlight' );
-			}
-			else {
-				this.controlsDownArrow.classList.remove( 'highlight' );
-
-				if( this.Reveal.getConfig().rtl ) {
-
-					if( !this.Reveal.hasNavigatedHorizontally() && routes.left && indices.v === 0 ) {
-						this.controlsLeftArrow.classList.add( 'highlight' );
-					}
-					else {
-						this.controlsLeftArrow.classList.remove( 'highlight' );
-					}
-
-				} else {
-
-					if( !this.Reveal.hasNavigatedHorizontally() && routes.right && indices.v === 0 ) {
-						this.controlsRightArrow.classList.add( 'highlight' );
-					}
-					else {
-						this.controlsRightArrow.classList.remove( 'highlight' );
-					}
-				}
-			}
-		}
-	}
-
-	destroy() {
-
-		this.unbind();
-		this.element.remove();
-
-	}
-
-	/**
-	 * Event handlers for navigation control buttons.
-	 */
-	onNavigateLeftClicked( event ) {
-
-		event.preventDefault();
-		this.Reveal.onUserInput();
-
-		if( this.Reveal.getConfig().navigationMode === 'linear' ) {
-			this.Reveal.prev();
-		}
-		else {
-			this.Reveal.left();
-		}
-
-	}
-
-	onNavigateRightClicked( event ) {
-
-		event.preventDefault();
-		this.Reveal.onUserInput();
-
-		if( this.Reveal.getConfig().navigationMode === 'linear' ) {
-			this.Reveal.next();
-		}
-		else {
-			this.Reveal.right();
-		}
-
-	}
-
-	onNavigateUpClicked( event ) {
-
-		event.preventDefault();
-		this.Reveal.onUserInput();
-
-		this.Reveal.up();
-
-	}
-
-	onNavigateDownClicked( event ) {
-
-		event.preventDefault();
-		this.Reveal.onUserInput();
-
-		this.Reveal.down();
-
-	}
-
-	onNavigatePrevClicked( event ) {
-
-		event.preventDefault();
-		this.Reveal.onUserInput();
-
-		this.Reveal.prev();
-
-	}
-
-	onNavigateNextClicked( event ) {
-
-		event.preventDefault();
-		this.Reveal.onUserInput();
-
-		this.Reveal.next();
-
-	}
-
-
-}
\ No newline at end of file