Skip to content
Snippets Groups Projects
reveal.js 60.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	 */
    	function onPointerMove( event ) {
    
    		if( event.pointerType === event.MSPOINTER_TYPE_TOUCH ) {
    			event.touches = [{ clientX: event.clientX, clientY: event.clientY }];
    
    Hakim El Hattab's avatar
    Hakim El Hattab committed
    			onTouchMove( event );
    
    		}
    
    	}
    
    	/**
    	 * Convert pointer up to touch end.
    	 */
    	function onPointerUp( event ) {
    
    		if( event.pointerType === event.MSPOINTER_TYPE_TOUCH ) {
    			event.touches = [{ clientX: event.clientX, clientY: event.clientY }];
    
    Hakim El Hattab's avatar
    Hakim El Hattab committed
    			onTouchEnd( event );
    
    	 * Handles mouse wheel scrolling, throttled to avoid skipping
    
    	function onDocumentMouseScroll( event ) {
    
    
    		clearTimeout( mouseWheelTimeout );
    
    		mouseWheelTimeout = setTimeout( function() {
    			var delta = event.detail || -event.wheelDelta;
    			if( delta > 0 ) {
    				navigateNext();
    			}
    			else {
    				navigatePrev();
    			}
    		}, 100 );
    
    	 * Clicking on the progress bar results in a navigation to the
    
    	 * closest approximate horizontal slide using this equation:
    	 *
    	 * ( clickX / presentationWidth ) * numberOfSlides
    	 */
    
    	function onProgressClicked( event ) {
    
    		event.preventDefault();
    
    		var slidesTotal = toArray( document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ).length;
    
    		var slideIndex = Math.floor( ( event.clientX / dom.wrapper.offsetWidth ) * slidesTotal );
    
    		slide( slideIndex );
    
    	 * Event handler for navigation control buttons.
    
    	 */
    	function onNavigateLeftClicked( event ) { event.preventDefault(); navigateLeft(); }
    	function onNavigateRightClicked( event ) { event.preventDefault(); navigateRight(); }
    	function onNavigateUpClicked( event ) { event.preventDefault(); navigateUp(); }
    	function onNavigateDownClicked( event ) { event.preventDefault(); navigateDown(); }
    	function onNavigatePrevClicked( event ) { event.preventDefault(); navigatePrev(); }
    	function onNavigateNextClicked( event ) { event.preventDefault(); navigateNext(); }
    
    
    	/**
    	 * Handler for the window level 'hashchange' event.
    	 */
    	function onWindowHashChange( event ) {
    
    	/**
    	 * Handler for the window level 'resize' event.
    	 */
    	function onWindowResize( event ) {
    
    	/**
    	 * Invoked when a slide is and we're in the overview.
    	 */
    	function onOverviewSlideClicked( event ) {
    
    		// TODO There's a bug here where the event listeners are not
    
    		// removed after deactivating the overview.
    
    		if( eventsAreBound && isOverview() ) {
    
    			var element = event.target;
    
    			while( element && !element.nodeName.match( /section/gi ) ) {
    				element = element.parentNode;
    			}
    
    
    			if( element && !element.classList.contains( 'disabled' ) ) {
    
    				deactivateOverview();
    
    				if( element.nodeName.match( /section/gi ) ) {
    					var h = parseInt( element.getAttribute( 'data-index-h' ), 10 ),
    						v = parseInt( element.getAttribute( 'data-index-v' ), 10 );
    
    					slide( h, v );
    				}
    
    	// --------------------------------------------------------------------//
    	// ------------------------------- API --------------------------------//
    	// --------------------------------------------------------------------//
    
    
    
    Hakim El Hattab's avatar
    Hakim El Hattab committed
    	return {
    
    Hakim El Hattab's avatar
    Hakim El Hattab committed
    		sync: sync,
    
    		// Navigation methods
    		slide: slide,
    		left: navigateLeft,
    		right: navigateRight,
    		up: navigateUp,
    		down: navigateDown,
    		prev: navigatePrev,
    		next: navigateNext,
    
    		prevFragment: previousFragment,
    		nextFragment: nextFragment,
    
    Hakim El Hattab's avatar
    Hakim El Hattab committed
    		navigateLeft: navigateLeft,
    		navigateRight: navigateRight,
    		navigateUp: navigateUp,
    
    		navigatePrev: navigatePrev,
    		navigateNext: navigateNext,
    
    		// Forces an update in slide layout
    		layout: layout,
    
    
    		// Returns an object with the available routes as booleans (left/right/top/bottom)
    		availableRoutes: availableRoutes,
    
    
    		// Returns an object with the available fragments as booleans (prev/next)
    		availableFragments: availableFragments,
    
    
    		toggleOverview: toggleOverview,
    
    		// Toggles the "black screen" mode on/off
    		togglePause: togglePause,
    
    
    		// State checks
    		isOverview: isOverview,
    		isPaused: isPaused,
    
    
    		// Adds or removes all internal event listeners (such as keyboard)
    
    		addEventListeners: addEventListeners,
    		removeEventListeners: removeEventListeners,
    
    
    		// Returns the indices of the current, or specified, slide
    
    		// Returns the slide at the specified index, y is optional
    		getSlide: function( x, y ) {
    			var horizontalSlide = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR )[ x ];
    			var verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' );
    
    			if( typeof y !== 'undefined' ) {
    				return verticalSlides ? verticalSlides[ y ] : undefined;
    			}
    
    			return horizontalSlide;
    		},
    
    
    		// Returns the previous slide element, may be null
    		getPreviousSlide: function() {
    
    		},
    
    		// Returns the current slide element
    		getCurrentSlide: function() {
    
    		// Returns the current scale of the presentation content
    		getScale: function() {
    			return scale;
    		},
    
    
    		// Returns the current configuration object
    		getConfig: function() {
    			return config;
    		},
    
    
    		// Helper method, retrieves query string as a key/value hash
    		getQueryHash: function() {
    			var query = {};
    
    			location.search.replace( /[A-Z0-9]+?=(\w*)/gi, function(a) {
    				query[ a.split( '=' ).shift() ] = a.split( '=' ).pop();
    			} );
    
    			return query;
    		},
    
    
    		// Returns true if we're currently on the first slide
    		isFirstSlide: function() {
    			return document.querySelector( SLIDES_SELECTOR + '.past' ) == null ? true : false;
    		},
    
    		// Returns true if we're currently on the last slide
    		isLastSlide: function() {
    			if( currentSlide && currentSlide.classList.contains( '.stack' ) ) {
    				return currentSlide.querySelector( SLIDES_SELECTOR + '.future' ) == null ? true : false;
    			}
    			else {
    				return document.querySelector( SLIDES_SELECTOR + '.future' ) == null ? true : false;
    			}
    		},
    
    
    		// Forward event binding to the reveal DOM element
    		addEventListener: function( type, listener, useCapture ) {
    
    hakimel's avatar
    hakimel committed
    			if( 'addEventListener' in window ) {
    				( dom.wrapper || document.querySelector( '.reveal' ) ).addEventListener( type, listener, useCapture );
    			}
    
    		},
    		removeEventListener: function( type, listener, useCapture ) {
    
    hakimel's avatar
    hakimel committed
    			if( 'addEventListener' in window ) {
    				( dom.wrapper || document.querySelector( '.reveal' ) ).removeEventListener( type, listener, useCapture );
    			}
    
    Hakim El Hattab's avatar
    Hakim El Hattab committed
    	};