|
@@ -2,17 +2,17 @@
|
|
* reveal.js 2.1 r35
|
|
* reveal.js 2.1 r35
|
|
* http://lab.hakim.se/reveal-js
|
|
* http://lab.hakim.se/reveal-js
|
|
* MIT licensed
|
|
* MIT licensed
|
|
- *
|
|
|
|
|
|
+ *
|
|
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
|
|
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
|
|
*/
|
|
*/
|
|
var Reveal = (function(){
|
|
var Reveal = (function(){
|
|
|
|
|
|
'use strict';
|
|
'use strict';
|
|
-
|
|
|
|
|
|
+
|
|
var HORIZONTAL_SLIDES_SELECTOR = '.reveal .slides>section',
|
|
var HORIZONTAL_SLIDES_SELECTOR = '.reveal .slides>section',
|
|
VERTICAL_SLIDES_SELECTOR = '.reveal .slides>section.present>section',
|
|
VERTICAL_SLIDES_SELECTOR = '.reveal .slides>section.present>section',
|
|
|
|
|
|
- // Configurations defaults, can be overridden at initialization time
|
|
|
|
|
|
+ // Configurations defaults, can be overridden at initialization time
|
|
config = {
|
|
config = {
|
|
// Display controls in the bottom right corner
|
|
// Display controls in the bottom right corner
|
|
controls: true,
|
|
controls: true,
|
|
@@ -32,7 +32,7 @@ var Reveal = (function(){
|
|
// Loop the presentation
|
|
// Loop the presentation
|
|
loop: false,
|
|
loop: false,
|
|
|
|
|
|
- // Number of milliseconds between automatically proceeding to the
|
|
|
|
|
|
+ // Number of milliseconds between automatically proceeding to the
|
|
// next slide, disabled when set to 0, this value can be overwritten
|
|
// next slide, disabled when set to 0, this value can be overwritten
|
|
// by using a data-autoslide attribute on your slides
|
|
// by using a data-autoslide attribute on your slides
|
|
autoSlide: 0,
|
|
autoSlide: 0,
|
|
@@ -44,7 +44,7 @@ var Reveal = (function(){
|
|
rollingLinks: true,
|
|
rollingLinks: true,
|
|
|
|
|
|
// Transition style (see /css/theme)
|
|
// Transition style (see /css/theme)
|
|
- theme: null,
|
|
|
|
|
|
+ theme: null,
|
|
|
|
|
|
// Transition style
|
|
// Transition style
|
|
transition: 'default', // default/cube/page/concave/zoom/linear/none
|
|
transition: 'default', // default/cube/page/concave/zoom/linear/none
|
|
@@ -65,8 +65,8 @@ var Reveal = (function(){
|
|
previousSlide,
|
|
previousSlide,
|
|
currentSlide,
|
|
currentSlide,
|
|
|
|
|
|
- // Slides may hold a data-state attribute which we pick up and apply
|
|
|
|
- // as a class to the body. This list contains the combined state of
|
|
|
|
|
|
+ // Slides may hold a data-state attribute which we pick up and apply
|
|
|
|
+ // as a class to the body. This list contains the combined state of
|
|
// all current slides.
|
|
// all current slides.
|
|
state = [],
|
|
state = [],
|
|
|
|
|
|
@@ -79,13 +79,13 @@ var Reveal = (function(){
|
|
'msPerspective' in document.body.style ||
|
|
'msPerspective' in document.body.style ||
|
|
'OPerspective' in document.body.style ||
|
|
'OPerspective' in document.body.style ||
|
|
'perspective' in document.body.style,
|
|
'perspective' in document.body.style,
|
|
-
|
|
|
|
|
|
+
|
|
supports2DTransforms = 'WebkitTransform' in document.body.style ||
|
|
supports2DTransforms = 'WebkitTransform' in document.body.style ||
|
|
'MozTransform' in document.body.style ||
|
|
'MozTransform' in document.body.style ||
|
|
'msTransform' in document.body.style ||
|
|
'msTransform' in document.body.style ||
|
|
'OTransform' in document.body.style ||
|
|
'OTransform' in document.body.style ||
|
|
'transform' in document.body.style,
|
|
'transform' in document.body.style,
|
|
-
|
|
|
|
|
|
+
|
|
// Throttles mouse wheel navigation
|
|
// Throttles mouse wheel navigation
|
|
mouseWheelTimeout = 0,
|
|
mouseWheelTimeout = 0,
|
|
|
|
|
|
@@ -104,7 +104,7 @@ var Reveal = (function(){
|
|
handled: false,
|
|
handled: false,
|
|
threshold: 80
|
|
threshold: 80
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Starts up the presentation if the client is capable.
|
|
* Starts up the presentation if the client is capable.
|
|
*/
|
|
*/
|
|
@@ -112,7 +112,7 @@ var Reveal = (function(){
|
|
if( ( !supports2DTransforms && !supports3DTransforms ) ) {
|
|
if( ( !supports2DTransforms && !supports3DTransforms ) ) {
|
|
document.body.setAttribute( 'class', 'no-transforms' );
|
|
document.body.setAttribute( 'class', 'no-transforms' );
|
|
|
|
|
|
- // If the browser doesn't support core features we won't be
|
|
|
|
|
|
+ // If the browser doesn't support core features we won't be
|
|
// using JavaScript to control the presentation
|
|
// using JavaScript to control the presentation
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -125,12 +125,12 @@ var Reveal = (function(){
|
|
|
|
|
|
// Loads the dependencies and continues to #start() once done
|
|
// Loads the dependencies and continues to #start() once done
|
|
load();
|
|
load();
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Finds and stores references to DOM elements which are
|
|
|
|
- * required by the presentation. If a required element is
|
|
|
|
|
|
+ * Finds and stores references to DOM elements which are
|
|
|
|
+ * required by the presentation. If a required element is
|
|
* not found, it is created.
|
|
* not found, it is created.
|
|
*/
|
|
*/
|
|
function setupDOM() {
|
|
function setupDOM() {
|
|
@@ -200,10 +200,10 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Loads the dependencies of reveal.js. Dependencies are
|
|
|
|
- * defined via the configuration option 'dependencies'
|
|
|
|
- * and will be loaded prior to starting/binding reveal.js.
|
|
|
|
- * Some dependencies may have an 'async' flag, if so they
|
|
|
|
|
|
+ * Loads the dependencies of reveal.js. Dependencies are
|
|
|
|
+ * defined via the configuration option 'dependencies'
|
|
|
|
+ * and will be loaded prior to starting/binding reveal.js.
|
|
|
|
+ * Some dependencies may have an 'async' flag, if so they
|
|
* will load after reveal.js has been started up.
|
|
* will load after reveal.js has been started up.
|
|
*/
|
|
*/
|
|
function load() {
|
|
function load() {
|
|
@@ -233,7 +233,7 @@ var Reveal = (function(){
|
|
function proceed() {
|
|
function proceed() {
|
|
// Load asynchronous scripts
|
|
// Load asynchronous scripts
|
|
head.js.apply( null, scriptsAsync );
|
|
head.js.apply( null, scriptsAsync );
|
|
-
|
|
|
|
|
|
+
|
|
start();
|
|
start();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -249,13 +249,13 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Starts up reveal.js by binding input events and navigating
|
|
|
|
|
|
+ * Starts up reveal.js by binding input events and navigating
|
|
* to the current URL deeplink if there is one.
|
|
* to the current URL deeplink if there is one.
|
|
*/
|
|
*/
|
|
function start() {
|
|
function start() {
|
|
// Make sure we've got all the DOM elements we need
|
|
// Make sure we've got all the DOM elements we need
|
|
setupDOM();
|
|
setupDOM();
|
|
-
|
|
|
|
|
|
+
|
|
// Subscribe to input
|
|
// Subscribe to input
|
|
addEventListeners();
|
|
addEventListeners();
|
|
|
|
|
|
@@ -340,7 +340,7 @@ var Reveal = (function(){
|
|
dom.controlsLeft.addEventListener( 'click', preventAndForward( navigateLeft ), false );
|
|
dom.controlsLeft.addEventListener( 'click', preventAndForward( navigateLeft ), false );
|
|
dom.controlsRight.addEventListener( 'click', preventAndForward( navigateRight ), false );
|
|
dom.controlsRight.addEventListener( 'click', preventAndForward( navigateRight ), false );
|
|
dom.controlsUp.addEventListener( 'click', preventAndForward( navigateUp ), false );
|
|
dom.controlsUp.addEventListener( 'click', preventAndForward( navigateUp ), false );
|
|
- dom.controlsDown.addEventListener( 'click', preventAndForward( navigateDown ), false );
|
|
|
|
|
|
+ dom.controlsDown.addEventListener( 'click', preventAndForward( navigateDown ), false );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -357,7 +357,7 @@ var Reveal = (function(){
|
|
if ( config.progress && dom.progress ) {
|
|
if ( config.progress && dom.progress ) {
|
|
dom.progress.removeEventListener( 'click', preventAndForward( onProgressClick ), false );
|
|
dom.progress.removeEventListener( 'click', preventAndForward( onProgressClick ), false );
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
if ( config.controls && dom.controls ) {
|
|
if ( config.controls && dom.controls ) {
|
|
dom.controlsLeft.removeEventListener( 'click', preventAndForward( navigateLeft ), false );
|
|
dom.controlsLeft.removeEventListener( 'click', preventAndForward( navigateLeft ), false );
|
|
dom.controlsRight.removeEventListener( 'click', preventAndForward( navigateRight ), false );
|
|
dom.controlsRight.removeEventListener( 'click', preventAndForward( navigateRight ), false );
|
|
@@ -367,7 +367,7 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Extend object a with the properties of object b.
|
|
|
|
|
|
+ * Extend object a with the properties of object b.
|
|
* If there's a conflict, object b takes precedence.
|
|
* If there's a conflict, object b takes precedence.
|
|
*/
|
|
*/
|
|
function extend( a, b ) {
|
|
function extend( a, b ) {
|
|
@@ -378,8 +378,8 @@ var Reveal = (function(){
|
|
|
|
|
|
/**
|
|
/**
|
|
* Measures the distance in pixels between point a
|
|
* Measures the distance in pixels between point a
|
|
- * and point b.
|
|
|
|
- *
|
|
|
|
|
|
+ * and point b.
|
|
|
|
+ *
|
|
* @param {Object} a point with x/y properties
|
|
* @param {Object} a point with x/y properties
|
|
* @param {Object} b point with x/y properties
|
|
* @param {Object} b point with x/y properties
|
|
*/
|
|
*/
|
|
@@ -391,10 +391,10 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Prevents an events defaults behavior calls the
|
|
|
|
|
|
+ * Prevents an events defaults behavior calls the
|
|
* specified delegate.
|
|
* specified delegate.
|
|
- *
|
|
|
|
- * @param {Function} delegate The method to call
|
|
|
|
|
|
+ *
|
|
|
|
+ * @param {Function} delegate The method to call
|
|
* after the wrapper has been executed
|
|
* after the wrapper has been executed
|
|
*/
|
|
*/
|
|
function preventAndForward( delegate ) {
|
|
function preventAndForward( delegate ) {
|
|
@@ -405,7 +405,7 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Causes the address bar to hide on mobile devices,
|
|
|
|
|
|
+ * Causes the address bar to hide on mobile devices,
|
|
* more vertical space ftw.
|
|
* more vertical space ftw.
|
|
*/
|
|
*/
|
|
function removeAddressBar() {
|
|
function removeAddressBar() {
|
|
@@ -415,7 +415,7 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Dispatches an event of the specified type from the
|
|
|
|
|
|
+ * Dispatches an event of the specified type from the
|
|
* reveal DOM element.
|
|
* reveal DOM element.
|
|
*/
|
|
*/
|
|
function dispatchEvent( type, properties ) {
|
|
function dispatchEvent( type, properties ) {
|
|
@@ -434,7 +434,7 @@ var Reveal = (function(){
|
|
|
|
|
|
for( var i = 0, len = nodes.length; i < len; i++ ) {
|
|
for( var i = 0, len = nodes.length; i < len; i++ ) {
|
|
var node = nodes[i];
|
|
var node = nodes[i];
|
|
-
|
|
|
|
|
|
+
|
|
if( node.textContent && !node.querySelector( 'img' ) && ( !node.className || !node.classList.contains( node, 'roll' ) ) ) {
|
|
if( node.textContent && !node.querySelector( 'img' ) && ( !node.className || !node.classList.contains( node, 'roll' ) ) ) {
|
|
node.classList.add( 'roll' );
|
|
node.classList.add( 'roll' );
|
|
node.innerHTML = '<span data-title="'+ node.text +'">' + node.innerHTML + '</span>';
|
|
node.innerHTML = '<span data-title="'+ node.text +'">' + node.innerHTML + '</span>';
|
|
@@ -444,17 +444,17 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Displays the overview of slides (quick nav) by
|
|
|
|
|
|
+ * Displays the overview of slides (quick nav) by
|
|
* scaling down and arranging all slide elements.
|
|
* scaling down and arranging all slide elements.
|
|
- *
|
|
|
|
- * Experimental feature, might be dropped if perf
|
|
|
|
|
|
+ *
|
|
|
|
+ * Experimental feature, might be dropped if perf
|
|
* can't be improved.
|
|
* can't be improved.
|
|
*/
|
|
*/
|
|
function activateOverview() {
|
|
function activateOverview() {
|
|
|
|
|
|
// Only proceed if enabled in config
|
|
// Only proceed if enabled in config
|
|
if( config.overview ) {
|
|
if( config.overview ) {
|
|
-
|
|
|
|
|
|
+
|
|
dom.wrapper.classList.add( 'overview' );
|
|
dom.wrapper.classList.add( 'overview' );
|
|
|
|
|
|
var horizontalSlides = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );
|
|
var horizontalSlides = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );
|
|
@@ -462,7 +462,7 @@ var Reveal = (function(){
|
|
for( var i = 0, len1 = horizontalSlides.length; i < len1; i++ ) {
|
|
for( var i = 0, len1 = horizontalSlides.length; i < len1; i++ ) {
|
|
var hslide = horizontalSlides[i],
|
|
var hslide = horizontalSlides[i],
|
|
htransform = 'translateZ(-2500px) translate(' + ( ( i - indexh ) * 105 ) + '%, 0%)';
|
|
htransform = 'translateZ(-2500px) translate(' + ( ( i - indexh ) * 105 ) + '%, 0%)';
|
|
-
|
|
|
|
|
|
+
|
|
hslide.setAttribute( 'data-index-h', i );
|
|
hslide.setAttribute( 'data-index-h', i );
|
|
hslide.style.display = 'block';
|
|
hslide.style.display = 'block';
|
|
hslide.style.WebkitTransform = htransform;
|
|
hslide.style.WebkitTransform = htransform;
|
|
@@ -470,12 +470,12 @@ var Reveal = (function(){
|
|
hslide.style.msTransform = htransform;
|
|
hslide.style.msTransform = htransform;
|
|
hslide.style.OTransform = htransform;
|
|
hslide.style.OTransform = htransform;
|
|
hslide.style.transform = htransform;
|
|
hslide.style.transform = htransform;
|
|
-
|
|
|
|
|
|
+
|
|
if( !hslide.classList.contains( 'stack' ) ) {
|
|
if( !hslide.classList.contains( 'stack' ) ) {
|
|
// Navigate to this slide on click
|
|
// Navigate to this slide on click
|
|
hslide.addEventListener( 'click', onOverviewSlideClicked, true );
|
|
hslide.addEventListener( 'click', onOverviewSlideClicked, true );
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
var verticalSlides = hslide.querySelectorAll( 'section' );
|
|
var verticalSlides = hslide.querySelectorAll( 'section' );
|
|
|
|
|
|
for( var j = 0, len2 = verticalSlides.length; j < len2; j++ ) {
|
|
for( var j = 0, len2 = verticalSlides.length; j < len2; j++ ) {
|
|
@@ -494,19 +494,19 @@ var Reveal = (function(){
|
|
// Navigate to this slide on click
|
|
// Navigate to this slide on click
|
|
vslide.addEventListener( 'click', onOverviewSlideClicked, true );
|
|
vslide.addEventListener( 'click', onOverviewSlideClicked, true );
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Exits the slide overview and enters the currently
|
|
* Exits the slide overview and enters the currently
|
|
* active slide.
|
|
* active slide.
|
|
*/
|
|
*/
|
|
function deactivateOverview() {
|
|
function deactivateOverview() {
|
|
-
|
|
|
|
|
|
+
|
|
// Only proceed if enabled in config
|
|
// Only proceed if enabled in config
|
|
if( config.overview ) {
|
|
if( config.overview ) {
|
|
|
|
|
|
@@ -529,15 +529,15 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
slide();
|
|
slide();
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* Toggles the slide overview mode on and off.
|
|
* Toggles the slide overview mode on and off.
|
|
*
|
|
*
|
|
- * @param {Boolean} override Optional flag which overrides the
|
|
|
|
- * toggle logic and forcibly sets the desired state. True means
|
|
|
|
|
|
+ * @param {Boolean} override Optional flag which overrides the
|
|
|
|
+ * toggle logic and forcibly sets the desired state. True means
|
|
* overview is open, false means it's closed.
|
|
* overview is open, false means it's closed.
|
|
*/
|
|
*/
|
|
function toggleOverview( override ) {
|
|
function toggleOverview( override ) {
|
|
@@ -551,7 +551,7 @@ var Reveal = (function(){
|
|
|
|
|
|
/**
|
|
/**
|
|
* Checks if the overview is currently active.
|
|
* Checks if the overview is currently active.
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @return {Boolean} true if the overview is active,
|
|
* @return {Boolean} true if the overview is active,
|
|
* false otherwise
|
|
* false otherwise
|
|
*/
|
|
*/
|
|
@@ -561,26 +561,26 @@ var Reveal = (function(){
|
|
|
|
|
|
/**
|
|
/**
|
|
* Handling the fullscreen functionality via the fullscreen API
|
|
* Handling the fullscreen functionality via the fullscreen API
|
|
- *
|
|
|
|
- * @see http://fullscreen.spec.whatwg.org/
|
|
|
|
- * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode
|
|
|
|
|
|
+ *
|
|
|
|
+ * @see http://fullscreen.spec.whatwg.org/
|
|
|
|
+ * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode
|
|
*/
|
|
*/
|
|
function enterFullscreen() {
|
|
function enterFullscreen() {
|
|
var element = document.body;
|
|
var element = document.body;
|
|
-
|
|
|
|
|
|
+
|
|
// Check which implementation is available
|
|
// Check which implementation is available
|
|
var requestMethod = element.requestFullScreen ||
|
|
var requestMethod = element.requestFullScreen ||
|
|
element.webkitRequestFullScreen ||
|
|
element.webkitRequestFullScreen ||
|
|
element.mozRequestFullScreen ||
|
|
element.mozRequestFullScreen ||
|
|
element.msRequestFullScreen;
|
|
element.msRequestFullScreen;
|
|
-
|
|
|
|
|
|
+
|
|
if( requestMethod ) {
|
|
if( requestMethod ) {
|
|
requestMethod.apply( element );
|
|
requestMethod.apply( element );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Enters the paused mode which fades everything on screen to
|
|
|
|
|
|
+ * Enters the paused mode which fades everything on screen to
|
|
* black.
|
|
* black.
|
|
*/
|
|
*/
|
|
function pause() {
|
|
function pause() {
|
|
@@ -612,11 +612,11 @@ var Reveal = (function(){
|
|
function isPaused() {
|
|
function isPaused() {
|
|
return dom.wrapper.classList.contains( 'paused' );
|
|
return dom.wrapper.classList.contains( 'paused' );
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
- * Steps from the current point in the presentation to the
|
|
|
|
- * slide which matches the specified horizontal and vertical
|
|
|
|
- * indices.
|
|
|
|
|
|
+ * Steps from the current point in the presentation to the
|
|
|
|
+ * slide which matches the specified horizontal and vertical
|
|
|
|
+ * indices.
|
|
*
|
|
*
|
|
* @param {int} h Horizontal index of the target slide
|
|
* @param {int} h Horizontal index of the target slide
|
|
* @param {int} v Vertical index of the target slide
|
|
* @param {int} v Vertical index of the target slide
|
|
@@ -640,7 +640,7 @@ var Reveal = (function(){
|
|
|
|
|
|
// Apply the new state
|
|
// Apply the new state
|
|
stateLoop: for( var i = 0, len = state.length; i < len; i++ ) {
|
|
stateLoop: for( var i = 0, len = state.length; i < len; i++ ) {
|
|
- // Check if this state existed on the previous slide. If it
|
|
|
|
|
|
+ // Check if this state existed on the previous slide. If it
|
|
// did, we will avoid adding it repeatedly.
|
|
// did, we will avoid adding it repeatedly.
|
|
for( var j = 0; j < stateBefore.length; j++ ) {
|
|
for( var j = 0; j < stateBefore.length; j++ ) {
|
|
if( stateBefore[j] === state[i] ) {
|
|
if( stateBefore[j] === state[i] ) {
|
|
@@ -671,7 +671,7 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
updateControls();
|
|
updateControls();
|
|
-
|
|
|
|
|
|
+
|
|
// Update the URL hash after a delay since updating it mid-transition
|
|
// Update the URL hash after a delay since updating it mid-transition
|
|
// is likely to cause visual lag
|
|
// is likely to cause visual lag
|
|
clearTimeout( writeURLTimeout );
|
|
clearTimeout( writeURLTimeout );
|
|
@@ -691,7 +691,7 @@ var Reveal = (function(){
|
|
// Dispatch an event if the slide changed
|
|
// Dispatch an event if the slide changed
|
|
if( indexh !== indexhBefore || indexv !== indexvBefore ) {
|
|
if( indexh !== indexhBefore || indexv !== indexvBefore ) {
|
|
dispatchEvent( 'slidechanged', {
|
|
dispatchEvent( 'slidechanged', {
|
|
- 'indexh': indexh,
|
|
|
|
|
|
+ 'indexh': indexh,
|
|
'indexv': indexv,
|
|
'indexv': indexv,
|
|
'previousSlide': previousSlide,
|
|
'previousSlide': previousSlide,
|
|
'currentSlide': currentSlide
|
|
'currentSlide': currentSlide
|
|
@@ -702,8 +702,8 @@ var Reveal = (function(){
|
|
previousSlide = null;
|
|
previousSlide = null;
|
|
}
|
|
}
|
|
|
|
|
|
- // Solves an edge case where the previous slide maintains the
|
|
|
|
- // 'present' class when navigating between adjacent vertical
|
|
|
|
|
|
+ // Solves an edge case where the previous slide maintains the
|
|
|
|
+ // 'present' class when navigating between adjacent vertical
|
|
// stacks
|
|
// stacks
|
|
if( previousSlide ) {
|
|
if( previousSlide ) {
|
|
previousSlide.classList.remove( 'present' );
|
|
previousSlide.classList.remove( 'present' );
|
|
@@ -713,14 +713,14 @@ var Reveal = (function(){
|
|
/**
|
|
/**
|
|
* Updates one dimension of slides by showing the slide
|
|
* Updates one dimension of slides by showing the slide
|
|
* with the specified index.
|
|
* with the specified index.
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @param {String} selector A CSS selector that will fetch
|
|
* @param {String} selector A CSS selector that will fetch
|
|
* the group of slides we are working with
|
|
* the group of slides we are working with
|
|
* @param {Number} index The index of the slide that should be
|
|
* @param {Number} index The index of the slide that should be
|
|
* shown
|
|
* shown
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @return {Number} The index of the slide that is now shown,
|
|
* @return {Number} The index of the slide that is now shown,
|
|
- * might differ from the passed in index if it was out of
|
|
|
|
|
|
+ * might differ from the passed in index if it was out of
|
|
* bounds.
|
|
* bounds.
|
|
*/
|
|
*/
|
|
function updateSlides( selector, index ) {
|
|
function updateSlides( selector, index ) {
|
|
@@ -728,7 +728,7 @@ var Reveal = (function(){
|
|
// an array
|
|
// an array
|
|
var slides = Array.prototype.slice.call( document.querySelectorAll( selector ) ),
|
|
var slides = Array.prototype.slice.call( document.querySelectorAll( selector ) ),
|
|
slidesLength = slides.length;
|
|
slidesLength = slides.length;
|
|
-
|
|
|
|
|
|
+
|
|
if( slidesLength ) {
|
|
if( slidesLength ) {
|
|
|
|
|
|
// Should the index loop?
|
|
// Should the index loop?
|
|
@@ -739,14 +739,14 @@ var Reveal = (function(){
|
|
index = slidesLength + index;
|
|
index = slidesLength + index;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// Enforce max and minimum index bounds
|
|
// Enforce max and minimum index bounds
|
|
index = Math.max( Math.min( index, slidesLength - 1 ), 0 );
|
|
index = Math.max( Math.min( index, slidesLength - 1 ), 0 );
|
|
-
|
|
|
|
|
|
+
|
|
for( var i = 0; i < slidesLength; i++ ) {
|
|
for( var i = 0; i < slidesLength; i++ ) {
|
|
var element = slides[i];
|
|
var element = slides[i];
|
|
|
|
|
|
- // Optimization; hide all slides that are three or more steps
|
|
|
|
|
|
+ // Optimization; hide all slides that are three or more steps
|
|
// away from the present slide
|
|
// away from the present slide
|
|
if( isOverviewActive() === false ) {
|
|
if( isOverviewActive() === false ) {
|
|
// The distance loops so that it measures 1 between the first
|
|
// The distance loops so that it measures 1 between the first
|
|
@@ -785,7 +785,7 @@ var Reveal = (function(){
|
|
state = state.concat( slideState.split( ' ' ) );
|
|
state = state.concat( slideState.split( ' ' ) );
|
|
}
|
|
}
|
|
|
|
|
|
- // If this slide has a data-autoslide attribtue associated use this as
|
|
|
|
|
|
+ // If this slide has a data-autoslide attribtue associated use this as
|
|
// autoSlide value otherwise use the global configured time
|
|
// autoSlide value otherwise use the global configured time
|
|
var slideAutoSlide = slides[index].getAttribute( 'data-autoslide' );
|
|
var slideAutoSlide = slides[index].getAttribute( 'data-autoslide' );
|
|
if( slideAutoSlide ) {
|
|
if( slideAutoSlide ) {
|
|
@@ -796,13 +796,13 @@ var Reveal = (function(){
|
|
|
|
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- // Since there are no slides we can't be anywhere beyond the
|
|
|
|
|
|
+ // Since there are no slides we can't be anywhere beyond the
|
|
// zeroth index
|
|
// zeroth index
|
|
index = 0;
|
|
index = 0;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
return index;
|
|
return index;
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -810,7 +810,7 @@ var Reveal = (function(){
|
|
*/
|
|
*/
|
|
function updateControls() {
|
|
function updateControls() {
|
|
if ( config.controls && dom.controls ) {
|
|
if ( config.controls && dom.controls ) {
|
|
-
|
|
|
|
|
|
+
|
|
var routes = availableRoutes();
|
|
var routes = availableRoutes();
|
|
|
|
|
|
// Remove the 'enabled' class from all directions
|
|
// Remove the 'enabled' class from all directions
|
|
@@ -829,7 +829,7 @@ var Reveal = (function(){
|
|
|
|
|
|
/**
|
|
/**
|
|
* Determine what available routes there are for navigation.
|
|
* Determine what available routes there are for navigation.
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @return {Object} containing four booleans: left/right/up/down
|
|
* @return {Object} containing four booleans: left/right/up/down
|
|
*/
|
|
*/
|
|
function availableRoutes() {
|
|
function availableRoutes() {
|
|
@@ -843,7 +843,7 @@ var Reveal = (function(){
|
|
down: indexv < verticalSlides.length - 1
|
|
down: indexv < verticalSlides.length - 1
|
|
};
|
|
};
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Reads the current URL (hash) and navigates accordingly.
|
|
* Reads the current URL (hash) and navigates accordingly.
|
|
*/
|
|
*/
|
|
@@ -854,7 +854,7 @@ var Reveal = (function(){
|
|
var bits = hash.slice( 2 ).split( '/' ),
|
|
var bits = hash.slice( 2 ).split( '/' ),
|
|
name = hash.replace( /#|\//gi, '' );
|
|
name = hash.replace( /#|\//gi, '' );
|
|
|
|
|
|
- // If the first bit is invalid and there is a name we can
|
|
|
|
|
|
+ // If the first bit is invalid and there is a name we can
|
|
// assume that this is a named link
|
|
// assume that this is a named link
|
|
if( isNaN( parseInt( bits[0], 10 ) ) && name.length ) {
|
|
if( isNaN( parseInt( bits[0], 10 ) ) && name.length ) {
|
|
// Find the slide with the specified name
|
|
// Find the slide with the specified name
|
|
@@ -878,32 +878,32 @@ var Reveal = (function(){
|
|
slide( h, v );
|
|
slide( h, v );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Updates the page URL (hash) to reflect the current
|
|
* Updates the page URL (hash) to reflect the current
|
|
- * state.
|
|
|
|
|
|
+ * state.
|
|
*/
|
|
*/
|
|
function writeURL() {
|
|
function writeURL() {
|
|
if( config.history ) {
|
|
if( config.history ) {
|
|
var url = '/';
|
|
var url = '/';
|
|
-
|
|
|
|
|
|
+
|
|
// Only include the minimum possible number of components in
|
|
// Only include the minimum possible number of components in
|
|
// the URL
|
|
// the URL
|
|
if( indexh > 0 || indexv > 0 ) url += indexh;
|
|
if( indexh > 0 || indexv > 0 ) url += indexh;
|
|
if( indexv > 0 ) url += '/' + indexv;
|
|
if( indexv > 0 ) url += '/' + indexv;
|
|
-
|
|
|
|
|
|
+
|
|
window.location.hash = url;
|
|
window.location.hash = url;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Retrieves the h/v location of the current, or specified,
|
|
|
|
|
|
+ * Retrieves the h/v location of the current, or specified,
|
|
* slide.
|
|
* slide.
|
|
- *
|
|
|
|
- * @param {HTMLElement} slide If specified, the returned
|
|
|
|
- * index will be for this slide rather than the currently
|
|
|
|
|
|
+ *
|
|
|
|
+ * @param {HTMLElement} slide If specified, the returned
|
|
|
|
+ * index will be for this slide rather than the currently
|
|
* active one
|
|
* active one
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @return {Object} { h: <int>, v: <int> }
|
|
* @return {Object} { h: <int>, v: <int> }
|
|
*/
|
|
*/
|
|
function getIndices( slide ) {
|
|
function getIndices( slide ) {
|
|
@@ -933,7 +933,7 @@ var Reveal = (function(){
|
|
|
|
|
|
/**
|
|
/**
|
|
* Navigate to the next slide fragment.
|
|
* Navigate to the next slide fragment.
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @return {Boolean} true if there was a next fragment,
|
|
* @return {Boolean} true if there was a next fragment,
|
|
* false otherwise
|
|
* false otherwise
|
|
*/
|
|
*/
|
|
@@ -966,7 +966,7 @@ var Reveal = (function(){
|
|
|
|
|
|
/**
|
|
/**
|
|
* Navigate to the previous slide fragment.
|
|
* Navigate to the previous slide fragment.
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @return {Boolean} true if there was a previous fragment,
|
|
* @return {Boolean} true if there was a previous fragment,
|
|
* false otherwise
|
|
* false otherwise
|
|
*/
|
|
*/
|
|
@@ -993,7 +993,7 @@ var Reveal = (function(){
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1008,7 +1008,7 @@ var Reveal = (function(){
|
|
autoSlideTimeout = setTimeout( navigateNext, autoSlide );
|
|
autoSlideTimeout = setTimeout( navigateNext, autoSlide );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
function navigateLeft() {
|
|
function navigateLeft() {
|
|
// Prioritize hiding fragments
|
|
// Prioritize hiding fragments
|
|
if( isOverviewActive() || previousFragment() === false ) {
|
|
if( isOverviewActive() || previousFragment() === false ) {
|
|
@@ -1071,7 +1071,7 @@ var Reveal = (function(){
|
|
availableRoutes().down ? navigateDown() : navigateRight();
|
|
availableRoutes().down ? navigateDown() : navigateRight();
|
|
}
|
|
}
|
|
|
|
|
|
- // If auto-sliding is enabled we need to cue up
|
|
|
|
|
|
+ // If auto-sliding is enabled we need to cue up
|
|
// another timeout
|
|
// another timeout
|
|
cueAutoSlide();
|
|
cueAutoSlide();
|
|
}
|
|
}
|
|
@@ -1084,11 +1084,11 @@ var Reveal = (function(){
|
|
|
|
|
|
/**
|
|
/**
|
|
* Handler for the document level 'keydown' event.
|
|
* Handler for the document level 'keydown' event.
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @param {Object} event
|
|
* @param {Object} event
|
|
*/
|
|
*/
|
|
function onDocumentKeyDown( event ) {
|
|
function onDocumentKeyDown( event ) {
|
|
- // Disregard the event if the target is editable or a
|
|
|
|
|
|
+ // Disregard the event if the target is editable or a
|
|
// modifier is present
|
|
// modifier is present
|
|
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
|
|
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
|
|
|
|
|
|
@@ -1096,7 +1096,7 @@ var Reveal = (function(){
|
|
|
|
|
|
switch( event.keyCode ) {
|
|
switch( event.keyCode ) {
|
|
// p, page up
|
|
// p, page up
|
|
- case 80: case 33: navigatePrev(); break;
|
|
|
|
|
|
+ case 80: case 33: navigatePrev(); break;
|
|
// n, page down
|
|
// n, page down
|
|
case 78: case 34: navigateNext(); break;
|
|
case 78: case 34: navigateNext(); break;
|
|
// h, left
|
|
// h, left
|
|
@@ -1123,18 +1123,18 @@ var Reveal = (function(){
|
|
triggered = false;
|
|
triggered = false;
|
|
}
|
|
}
|
|
|
|
|
|
- // If the input resulted in a triggered action we should prevent
|
|
|
|
|
|
+ // If the input resulted in a triggered action we should prevent
|
|
// the browsers default behavior
|
|
// the browsers default behavior
|
|
if( triggered ) {
|
|
if( triggered ) {
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
else if ( event.keyCode === 27 && supports3DTransforms ) {
|
|
else if ( event.keyCode === 27 && supports3DTransforms ) {
|
|
toggleOverview();
|
|
toggleOverview();
|
|
-
|
|
|
|
|
|
+
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
|
|
|
|
- // If auto-sliding is enabled we need to cue up
|
|
|
|
|
|
+ // If auto-sliding is enabled we need to cue up
|
|
// another timeout
|
|
// another timeout
|
|
cueAutoSlide();
|
|
cueAutoSlide();
|
|
|
|
|
|
@@ -1149,7 +1149,7 @@ var Reveal = (function(){
|
|
touch.startY = event.touches[0].clientY;
|
|
touch.startY = event.touches[0].clientY;
|
|
touch.startCount = event.touches.length;
|
|
touch.startCount = event.touches.length;
|
|
|
|
|
|
- // If there's two touches we need to memorize the distance
|
|
|
|
|
|
+ // If there's two touches we need to memorize the distance
|
|
// between those two points to detect pinching
|
|
// between those two points to detect pinching
|
|
if( event.touches.length === 2 && config.overview ) {
|
|
if( event.touches.length === 2 && config.overview ) {
|
|
touch.startSpan = distanceBetween( {
|
|
touch.startSpan = distanceBetween( {
|
|
@@ -1161,7 +1161,7 @@ var Reveal = (function(){
|
|
} );
|
|
} );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Handler for the document level 'touchmove' event.
|
|
* Handler for the document level 'touchmove' event.
|
|
*/
|
|
*/
|
|
@@ -1171,7 +1171,7 @@ var Reveal = (function(){
|
|
var currentX = event.touches[0].clientX;
|
|
var currentX = event.touches[0].clientX;
|
|
var currentY = event.touches[0].clientY;
|
|
var currentY = event.touches[0].clientY;
|
|
|
|
|
|
- // If the touch started off with two points and still has
|
|
|
|
|
|
+ // If the touch started off with two points and still has
|
|
// two active touches; test for the pinch gesture
|
|
// two active touches; test for the pinch gesture
|
|
if( event.touches.length === 2 && touch.startCount === 2 && config.overview ) {
|
|
if( event.touches.length === 2 && touch.startCount === 2 && config.overview ) {
|
|
|
|
|
|
@@ -1184,7 +1184,7 @@ var Reveal = (function(){
|
|
y: touch.startY
|
|
y: touch.startY
|
|
} );
|
|
} );
|
|
|
|
|
|
- // If the span is larger than the desire amount we've got
|
|
|
|
|
|
+ // If the span is larger than the desire amount we've got
|
|
// ourselves a pinch
|
|
// ourselves a pinch
|
|
if( Math.abs( touch.startSpan - currentSpan ) > touch.threshold ) {
|
|
if( Math.abs( touch.startSpan - currentSpan ) > touch.threshold ) {
|
|
touch.handled = true;
|
|
touch.handled = true;
|
|
@@ -1209,15 +1209,15 @@ var Reveal = (function(){
|
|
if( deltaX > touch.threshold && Math.abs( deltaX ) > Math.abs( deltaY ) ) {
|
|
if( deltaX > touch.threshold && Math.abs( deltaX ) > Math.abs( deltaY ) ) {
|
|
touch.handled = true;
|
|
touch.handled = true;
|
|
navigateLeft();
|
|
navigateLeft();
|
|
- }
|
|
|
|
|
|
+ }
|
|
else if( deltaX < -touch.threshold && Math.abs( deltaX ) > Math.abs( deltaY ) ) {
|
|
else if( deltaX < -touch.threshold && Math.abs( deltaX ) > Math.abs( deltaY ) ) {
|
|
touch.handled = true;
|
|
touch.handled = true;
|
|
navigateRight();
|
|
navigateRight();
|
|
- }
|
|
|
|
|
|
+ }
|
|
else if( deltaY > touch.threshold ) {
|
|
else if( deltaY > touch.threshold ) {
|
|
touch.handled = true;
|
|
touch.handled = true;
|
|
navigateUp();
|
|
navigateUp();
|
|
- }
|
|
|
|
|
|
+ }
|
|
else if( deltaY < -touch.threshold ) {
|
|
else if( deltaY < -touch.threshold ) {
|
|
touch.handled = true;
|
|
touch.handled = true;
|
|
navigateDown();
|
|
navigateDown();
|
|
@@ -1227,7 +1227,7 @@ var Reveal = (function(){
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- // There's a bug with swiping on some Android devices unless
|
|
|
|
|
|
+ // There's a bug with swiping on some Android devices unless
|
|
// the default action is always prevented
|
|
// the default action is always prevented
|
|
else if( navigator.userAgent.match( /android/gi ) ) {
|
|
else if( navigator.userAgent.match( /android/gi ) ) {
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
@@ -1242,7 +1242,7 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Handles mouse wheel scrolling, throttled to avoid skipping
|
|
|
|
|
|
+ * Handles mouse wheel scrolling, throttled to avoid skipping
|
|
* multiple slides.
|
|
* multiple slides.
|
|
*/
|
|
*/
|
|
function onDocumentMouseScroll( event ){
|
|
function onDocumentMouseScroll( event ){
|
|
@@ -1260,7 +1260,7 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Clicking on the progress bar results in a navigation to the
|
|
|
|
|
|
+ * Clicking on the progress bar results in a navigation to the
|
|
* closest approximate horizontal slide using this equation:
|
|
* closest approximate horizontal slide using this equation:
|
|
*
|
|
*
|
|
* ( clickX / presentationWidth ) * numberOfSlides
|
|
* ( clickX / presentationWidth ) * numberOfSlides
|
|
@@ -1271,10 +1271,10 @@ var Reveal = (function(){
|
|
|
|
|
|
slide( slideIndex );
|
|
slide( slideIndex );
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Handler for the window level 'hashchange' event.
|
|
* Handler for the window level 'hashchange' event.
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @param {Object} event
|
|
* @param {Object} event
|
|
*/
|
|
*/
|
|
function onWindowHashChange( event ) {
|
|
function onWindowHashChange( event ) {
|
|
@@ -1285,7 +1285,7 @@ var Reveal = (function(){
|
|
* Invoked when a slide is and we're in the overview.
|
|
* Invoked when a slide is and we're in the overview.
|
|
*/
|
|
*/
|
|
function onOverviewSlideClicked( event ) {
|
|
function onOverviewSlideClicked( event ) {
|
|
- // TODO There's a bug here where the event listeners are not
|
|
|
|
|
|
+ // TODO There's a bug here where the event listeners are not
|
|
// removed after deactivating the overview.
|
|
// removed after deactivating the overview.
|
|
if( isOverviewActive() ) {
|
|
if( isOverviewActive() ) {
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
@@ -1299,7 +1299,7 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
// --------------------------------------------------------------------//
|
|
// --------------------------------------------------------------------//
|
|
// ------------------------------- API --------------------------------//
|
|
// ------------------------------- API --------------------------------//
|
|
// --------------------------------------------------------------------//
|
|
// --------------------------------------------------------------------//
|
|
@@ -1307,7 +1307,7 @@ var Reveal = (function(){
|
|
|
|
|
|
return {
|
|
return {
|
|
initialize: initialize,
|
|
initialize: initialize,
|
|
-
|
|
|
|
|
|
+
|
|
// Navigation methods
|
|
// Navigation methods
|
|
slide: slide,
|
|
slide: slide,
|
|
left: navigateLeft,
|
|
left: navigateLeft,
|
|
@@ -1369,5 +1369,5 @@ var Reveal = (function(){
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+
|
|
})();
|
|
})();
|