rewrote initialization code for clarity and brevity (#105)

This commit is contained in:
Hakim El Hattab
2012-08-11 20:25:55 -04:00
parent 1ba1ca1cf3
commit 49e8e0d205
3 changed files with 168 additions and 141 deletions

View File

@@ -1,5 +1,5 @@
/*!
* reveal.js 2.0 r17
* reveal.js 2.0 r18
* http://lab.hakim.se/reveal-js
* MIT licensed
*
@@ -40,7 +40,10 @@ var Reveal = (function(){
rollingLinks: true,
// Transition style
transition: 'default' // default/cube/page/concave/linear(2d)
transition: 'default', // default/cube/page/concave/linear(2d),
// Script dependencies to load
dependencies: []
},
// The horizontal and verical index of the currently active slide
@@ -71,9 +74,6 @@ var Reveal = (function(){
'msTransform' in document.body.style ||
'OTransform' in document.body.style ||
'transform' in document.body.style,
// Detect support for elem.classList
supportsClassList = !!document.body.classList;
// Throttles mouse wheel navigation
mouseWheelTimeout = 0,
@@ -96,12 +96,10 @@ var Reveal = (function(){
/**
* Starts up the slideshow by applying configuration
* options and binding various events.
* Starts up the presentation if the client is capable.
*/
function initialize( options ) {
if( ( !supports2DTransforms && !supports3DTransforms ) || !supportsClassList ) {
if( ( !supports2DTransforms && !supports3DTransforms ) ) {
document.body.setAttribute( 'class', 'no-transforms' );
// If the browser doesn't support core features we won't be
@@ -109,11 +107,14 @@ var Reveal = (function(){
return;
}
// Copy options over to our config object
extend( config, options );
// Cache references to DOM elements
dom.wrapper = document.querySelector( '.reveal' );
dom.progress = document.querySelector( '.reveal .progress' );
dom.progressbar = document.querySelector( '.reveal .progress span' );
if ( config.controls ) {
dom.controls = document.querySelector( '.reveal .controls' );
dom.controlsLeft = document.querySelector( '.reveal .controls .left' );
@@ -121,21 +122,9 @@ var Reveal = (function(){
dom.controlsUp = document.querySelector( '.reveal .controls .up' );
dom.controlsDown = document.querySelector( '.reveal .controls .down' );
}
// Copy options over to our config object
extend( config, options );
// Subscribe to input
addEventListeners();
// Updates the presentation to match the current configuration values
configure();
// Read the initial hash
readURL();
// Start auto-sliding if it's enabled
cueAutoSlide();
// Loads the dependencies and continues to #start() once done
load();
// Set up hiding of the browser address bar
if( navigator.userAgent.match( /(iphone|ipod|android)/i ) ) {
@@ -150,6 +139,76 @@ 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
* will load after reveal.js has been started up.
*/
function load() {
var scripts = [],
scriptsAsync = [];
for( var i = 0, len = config.dependencies.length; i < len; i++ ) {
var s = config.dependencies[i];
// Load if there's no condition or the condition is truthy
if( !s.condition || s.condition() ) {
if( s.async ) {
scriptsAsync.push( s.src );
}
else {
scripts.push( s.src );
}
// Extension may contain callback functions
if( typeof s.callback === 'function' ) {
head.ready( s.src.match( /([\w\d_-]*)\.?[^\\\/]*$/i )[0], s.callback );
}
}
}
// Called once synchronous scritps finish loading
function proceed() {
// Load asynchronous scripts
head.js.apply( null, scriptsAsync );
start();
}
if( scripts.length ) {
head.ready( proceed );
// Load synchronous scripts
head.js.apply( null, scripts );
}
else {
proceed();
}
}
/**
* Starts up reveal.js by binding input events and navigating
* to the current URL deeplink if there is one.
*/
function start() {
// Subscribe to input
addEventListeners();
// Updates the presentation to match the current configuration values
configure();
// Read the initial hash
readURL();
// Start auto-sliding if it's enabled
cueAutoSlide();
}
/**
* Applies the configuration settings from the config object.
*/
function configure() {
if( supports3DTransforms === false ) {
config.transition = 'linear';