aboutsummaryrefslogtreecommitdiffhomepage
path: root/js/reveal.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/reveal.js')
-rw-r--r--js/reveal.js94
1 files changed, 78 insertions, 16 deletions
diff --git a/js/reveal.js b/js/reveal.js
index b7764d3..a06ce55 100644
--- a/js/reveal.js
+++ b/js/reveal.js
@@ -3,7 +3,7 @@
* http://lab.hakim.se/reveal-js
* MIT licensed
*
- * Copyright (C) 2013 Hakim El Hattab, http://hakim.se
+ * Copyright (C) 2014 Hakim El Hattab, http://hakim.se
*/
var Reveal = (function(){
@@ -591,7 +591,13 @@ var Reveal = (function(){
enablePreviewLinks( '[data-preview-link]' );
}
- // Auto-slide playback controls
+ // Remove existing auto-slide controls
+ if( autoSlidePlayer ) {
+ autoSlidePlayer.destroy();
+ autoSlidePlayer = null;
+ }
+
+ // Generate auto-slide controls if needed
if( numberOfSlides > 1 && config.autoSlide && config.autoSlideStoppable && features.canvas && features.requestAnimationFrame ) {
autoSlidePlayer = new Playback( dom.wrapper, function() {
return Math.min( Math.max( ( Date.now() - autoSlideStartTime ) / autoSlide, 0 ), 1 );
@@ -600,10 +606,6 @@ var Reveal = (function(){
autoSlidePlayer.on( 'click', onAutoSlidePlayerClick );
autoSlidePaused = false;
}
- else if( autoSlidePlayer ) {
- autoSlidePlayer.destroy();
- autoSlidePlayer = null;
- }
// Load the theme in the config, if it's not already loaded
if( config.theme && dom.theme ) {
@@ -637,7 +639,14 @@ var Reveal = (function(){
dom.wrapper.addEventListener( 'touchend', onTouchEnd, false );
// Support pointer-style touch interaction as well
- if( window.navigator.msPointerEnabled ) {
+ if( window.navigator.pointerEnabled ) {
+ // IE 11 uses un-prefixed version of pointer events
+ dom.wrapper.addEventListener( 'pointerdown', onPointerDown, false );
+ dom.wrapper.addEventListener( 'pointermove', onPointerMove, false );
+ dom.wrapper.addEventListener( 'pointerup', onPointerUp, false );
+ }
+ else if( window.navigator.msPointerEnabled ) {
+ // IE 10 uses prefixed version of pointer events
dom.wrapper.addEventListener( 'MSPointerDown', onPointerDown, false );
dom.wrapper.addEventListener( 'MSPointerMove', onPointerMove, false );
dom.wrapper.addEventListener( 'MSPointerUp', onPointerUp, false );
@@ -696,7 +705,14 @@ var Reveal = (function(){
dom.wrapper.removeEventListener( 'touchmove', onTouchMove, false );
dom.wrapper.removeEventListener( 'touchend', onTouchEnd, false );
- if( window.navigator.msPointerEnabled ) {
+ // IE11
+ if( window.navigator.pointerEnabled ) {
+ dom.wrapper.removeEventListener( 'pointerdown', onPointerDown, false );
+ dom.wrapper.removeEventListener( 'pointermove', onPointerMove, false );
+ dom.wrapper.removeEventListener( 'pointerup', onPointerUp, false );
+ }
+ // IE10
+ else if( window.navigator.msPointerEnabled ) {
dom.wrapper.removeEventListener( 'MSPointerDown', onPointerDown, false );
dom.wrapper.removeEventListener( 'MSPointerMove', onPointerMove, false );
dom.wrapper.removeEventListener( 'MSPointerUp', onPointerUp, false );
@@ -897,7 +913,7 @@ var Reveal = (function(){
function enableRollingLinks() {
if( features.transforms3d && !( 'msPerspective' in document.body.style ) ) {
- var anchors = document.querySelectorAll( SLIDES_SELECTOR + ' a:not(.image)' );
+ var anchors = document.querySelectorAll( SLIDES_SELECTOR + ' a' );
for( var i = 0, len = anchors.length; i < len; i++ ) {
var anchor = anchors[i];
@@ -1435,6 +1451,34 @@ var Reveal = (function(){
}
/**
+ * Toggles the auto slide mode on and off.
+ *
+ * @param {Boolean} override Optional flag which sets the desired state.
+ * True means autoplay starts, false means it stops.
+ */
+
+ function toggleAutoSlide( override ) {
+
+ if( typeof override === 'boolean' ) {
+ override ? resumeAutoSlide() : pauseAutoSlide();
+ }
+
+ else {
+ autoSlidePaused ? resumeAutoSlide() : pauseAutoSlide();
+ }
+
+ }
+
+ /**
+ * Checks if the auto slide mode is currently on.
+ */
+ function isAutoSliding() {
+
+ return !!( autoSlide && !autoSlidePaused );
+
+ }
+
+ /**
* Steps from the current point in the presentation to the
* slide which matches the specified horizontal and vertical
* indices.
@@ -2459,14 +2503,21 @@ var Reveal = (function(){
if( currentSlide ) {
+ var currentFragment = currentSlide.querySelector( '.current-fragment' );
+
+ var fragmentAutoSlide = currentFragment ? currentFragment.getAttribute( 'data-autoslide' ) : null;
var parentAutoSlide = currentSlide.parentNode ? currentSlide.parentNode.getAttribute( 'data-autoslide' ) : null;
var slideAutoSlide = currentSlide.getAttribute( 'data-autoslide' );
// Pick value in the following priority order:
- // 1. Current slide's data-autoslide
- // 2. Parent slide's data-autoslide
- // 3. Global autoSlide setting
- if( slideAutoSlide ) {
+ // 1. Current fragment's data-autoslide
+ // 2. Current slide's data-autoslide
+ // 3. Parent slide's data-autoslide
+ // 4. Global autoSlide setting
+ if( fragmentAutoSlide ) {
+ autoSlide = parseInt( fragmentAutoSlide, 10 );
+ }
+ else if( slideAutoSlide ) {
autoSlide = parseInt( slideAutoSlide, 10 );
}
else if( parentAutoSlide ) {
@@ -2519,6 +2570,7 @@ var Reveal = (function(){
function pauseAutoSlide() {
autoSlidePaused = true;
+ dispatchEvent( 'autoslidepaused' );
clearTimeout( autoSlideTimeout );
if( autoSlidePlayer ) {
@@ -2530,6 +2582,7 @@ var Reveal = (function(){
function resumeAutoSlide() {
autoSlidePaused = false;
+ dispatchEvent( 'autoslideresumed' );
cueAutoSlide();
}
@@ -2647,6 +2700,9 @@ var Reveal = (function(){
*/
function onDocumentKeyDown( event ) {
+ // Remember if auto-sliding was paused so we can toggle it
+ var autoSlideWasPaused = autoSlidePaused;
+
onUserInput( event );
// Check if there's a focused element that could be using
@@ -2723,6 +2779,8 @@ var Reveal = (function(){
case 66: case 190: case 191: togglePause(); break;
// f
case 70: enterFullscreen(); break;
+ // a
+ case 65: if ( config.autoSlideStoppable ) toggleAutoSlide( autoSlideWasPaused ); break;
default:
triggered = false;
}
@@ -2877,7 +2935,7 @@ var Reveal = (function(){
*/
function onPointerDown( event ) {
- if( event.pointerType === event.MSPOINTER_TYPE_TOUCH ) {
+ if( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === "touch" ) {
event.touches = [{ clientX: event.clientX, clientY: event.clientY }];
onTouchStart( event );
}
@@ -2889,7 +2947,7 @@ var Reveal = (function(){
*/
function onPointerMove( event ) {
- if( event.pointerType === event.MSPOINTER_TYPE_TOUCH ) {
+ if( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === "touch" ) {
event.touches = [{ clientX: event.clientX, clientY: event.clientY }];
onTouchMove( event );
}
@@ -2901,7 +2959,7 @@ var Reveal = (function(){
*/
function onPointerUp( event ) {
- if( event.pointerType === event.MSPOINTER_TYPE_TOUCH ) {
+ if( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === "touch" ) {
event.touches = [{ clientX: event.clientX, clientY: event.clientY }];
onTouchEnd( event );
}
@@ -3275,9 +3333,13 @@ var Reveal = (function(){
// Toggles the "black screen" mode on/off
togglePause: togglePause,
+ // Toggles the auto slide mode on/off
+ toggleAutoSlide: toggleAutoSlide,
+
// State checks
isOverview: isOverview,
isPaused: isPaused,
+ isAutoSliding: isAutoSliding,
// Adds or removes all internal event listeners (such as keyboard)
addEventListeners: addEventListeners,