async loading of external markdown, add Reveal.registerPlugin()
This commit is contained in:
104
js/reveal.js
104
js/reveal.js
@ -319,6 +319,12 @@
|
||||
// Cached references to DOM elements
|
||||
dom = {},
|
||||
|
||||
// A list of registered reveal.js plugins
|
||||
plugins = {},
|
||||
|
||||
// List of asynchronously loaded reveal.js dependencies
|
||||
asyncDependencies = [],
|
||||
|
||||
// Features supported by the browser, see #checkCapabilities()
|
||||
features = {},
|
||||
|
||||
@ -434,7 +440,7 @@
|
||||
// Hide the address bar in mobile browsers
|
||||
hideAddressBar();
|
||||
|
||||
// Loads the dependencies and continues to #start() once done
|
||||
// Loads dependencies and continues to #start() once done
|
||||
load();
|
||||
|
||||
}
|
||||
@ -489,37 +495,22 @@
|
||||
function load() {
|
||||
|
||||
var scripts = [],
|
||||
scriptsAsync = [],
|
||||
scriptsToPreload = 0;
|
||||
|
||||
// Called once synchronous scripts finish loading
|
||||
function afterSynchronousScriptsLoaded() {
|
||||
// Load asynchronous scripts
|
||||
if( scriptsAsync.length ) {
|
||||
scriptsAsync.forEach( function( s ) {
|
||||
loadScript( s.src, s.callback );
|
||||
} );
|
||||
}
|
||||
|
||||
start();
|
||||
}
|
||||
|
||||
for( var i = 0, len = config.dependencies.length; i < len; i++ ) {
|
||||
var s = config.dependencies[i];
|
||||
scriptsToLoad = 0;
|
||||
|
||||
config.dependencies.forEach( function( s ) {
|
||||
// Load if there's no condition or the condition is truthy
|
||||
if( !s.condition || s.condition() ) {
|
||||
if( s.async ) {
|
||||
scriptsAsync.push( s );
|
||||
asyncDependencies.push( s );
|
||||
}
|
||||
else {
|
||||
scripts.push( s );
|
||||
}
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
if( scripts.length ) {
|
||||
scriptsToPreload = scripts.length;
|
||||
scriptsToLoad = scripts.length;
|
||||
|
||||
// Load synchronous scripts
|
||||
scripts.forEach( function( s ) {
|
||||
@ -527,21 +518,66 @@
|
||||
|
||||
if( typeof s.callback === 'function' ) s.callback();
|
||||
|
||||
if( --scriptsToPreload === 0 ) {
|
||||
|
||||
afterSynchronousScriptsLoaded();
|
||||
|
||||
if( --scriptsToLoad === 0 ) {
|
||||
loadPlugins();
|
||||
}
|
||||
|
||||
} );
|
||||
} );
|
||||
}
|
||||
else {
|
||||
afterSynchronousScriptsLoaded();
|
||||
loadPlugins();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all plugins that require preloading.
|
||||
*/
|
||||
function loadPlugins() {
|
||||
|
||||
var pluginsToLoad = Object.keys( plugins ).length;
|
||||
|
||||
for( var i in plugins ) {
|
||||
|
||||
var plugin = plugins[i];
|
||||
|
||||
// If the plugin has an 'init' method, initialize and
|
||||
// wait for the callback
|
||||
if( typeof plugin.init === 'function' ) {
|
||||
plugin.init( function() {
|
||||
if( --pluginsToLoad === 0 ) {
|
||||
loadAsyncDependencies();
|
||||
}
|
||||
} );
|
||||
}
|
||||
else {
|
||||
pluginsToLoad -= 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if( pluginsToLoad === 0 ) {
|
||||
loadAsyncDependencies();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all async reveal.js dependencies.
|
||||
*/
|
||||
function loadAsyncDependencies() {
|
||||
|
||||
if( asyncDependencies.length ) {
|
||||
asyncDependencies.forEach( function( s ) {
|
||||
loadScript( s.src, s.callback );
|
||||
} );
|
||||
}
|
||||
|
||||
start();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a JavaScript file from the given URL and executes it.
|
||||
*
|
||||
@ -1512,6 +1548,15 @@
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a new plugin with this reveal.js instance.
|
||||
*/
|
||||
function registerPlugin( id, plugin ) {
|
||||
|
||||
plugins[id] = plugin;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a custom key binding with optional description to
|
||||
* be added to the help screen.
|
||||
@ -5845,12 +5890,13 @@
|
||||
}
|
||||
},
|
||||
|
||||
// Adds a custom key binding
|
||||
// Adds/remvoes a custom key binding
|
||||
addKeyBinding: addKeyBinding,
|
||||
|
||||
// Removes a custom key binding
|
||||
removeKeyBinding: removeKeyBinding,
|
||||
|
||||
// Called by plugins to register/unregister themselves
|
||||
registerPlugin: registerPlugin,
|
||||
|
||||
// Programatically triggers a keyboard event
|
||||
triggerKey: function( keyCode ) {
|
||||
onDocumentKeyDown( { keyCode: keyCode } );
|
||||
|
Reference in New Issue
Block a user