Skip to content

Commit

Permalink
async loading of external markdown, add Reveal.registerPlugin()
Browse files Browse the repository at this point in the history
  • Loading branch information
hakimel committed Mar 1, 2019
1 parent 2130237 commit 4862de2
Show file tree
Hide file tree
Showing 2 changed files with 185 additions and 104 deletions.
104 changes: 75 additions & 29 deletions js/reveal.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {},

Expand Down Expand Up @@ -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();

}
Expand Down Expand Up @@ -489,59 +495,89 @@
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 ) {
loadScript( s.src, function() {

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.
*
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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 } );
Expand Down
Loading

0 comments on commit 4862de2

Please sign in to comment.