Add bundler-friendly dependency injection

master
quilicicf 2019-11-08 13:31:28 +01:00
parent 3f95a21009
commit d378ab2e63
No known key found for this signature in database
GPG Key ID: 0561A23A57B55DE1
3 changed files with 31 additions and 13 deletions

View File

@ -522,6 +522,13 @@ You can add your own extensions using the same syntax. The following properties
- **callback**: [optional] Function to execute when the script has loaded - **callback**: [optional] Function to execute when the script has loaded
- **condition**: [optional] Function which must return true for the script to be loaded - **condition**: [optional] Function which must return true for the script to be loaded
You can additionally use the following syntax, in case you are using a bundler:
- **id**: the id of the plugin to load
- **plugin**: the plugin object to load. It is the plugin implementation that can contain an `init` function
- **async**: [optional] Flags if the script should load after reveal.js has started, defaults to false
- **callback**: [optional] Function to execute when the script has loaded
- **condition**: [optional] Function which must return true for the script to be loaded
### Ready Event ### Ready Event
A `ready` event is fired when reveal.js has loaded all non-async dependencies and is ready to start navigating. To check if reveal.js is already 'ready' you can call `Reveal.isReady()`. A `ready` event is fired when reveal.js has loaded all non-async dependencies and is ready to start navigating. To check if reveal.js is already 'ready' you can call `Reveal.isReady()`.

View File

@ -48,17 +48,22 @@ export default class Plugins {
if( scripts.length ) { if( scripts.length ) {
scriptsToLoad = scripts.length; scriptsToLoad = scripts.length;
const scriptLoadedCallback = (s) => {
if( typeof s.callback === 'function' ) s.callback();
if( --scriptsToLoad === 0 ) {
this.initPlugins().then( resolve );
}
};
// Load synchronous scripts // Load synchronous scripts
scripts.forEach( s => { scripts.forEach( s => {
loadScript( s.src, () => { if (s.id) {
this.registerPlugin(s.id, s.plugin);
if( typeof s.callback === 'function' ) s.callback(); scriptLoadedCallback(s);
} else {
if( --scriptsToLoad === 0 ) { loadScript( s.src, () => scriptLoadedCallback(s));
this.initPlugins().then( resolve ); }
}
} );
} ); } );
} }
else { else {
@ -129,7 +134,13 @@ export default class Plugins {
if( this.asyncDependencies.length ) { if( this.asyncDependencies.length ) {
this.asyncDependencies.forEach( s => { this.asyncDependencies.forEach( s => {
loadScript( s.src, s.callback ); if (s.id) {
this.registerPlugin(s.id, s.plugin);
if (typeof s.plugin.init === 'function') { s.plugin.init(); }
if (typeof s.callback === 'function') { s.callback(); }
} else {
loadScript( s.src, s.callback );
}
} ); } );
} }
@ -190,4 +201,4 @@ export default class Plugins {
} }
} }

View File

@ -180,7 +180,7 @@ export default function( revealElement, options ) {
// Flags if we should use zoom instead of transform to scale // Flags if we should use zoom instead of transform to scale
// up slides. Zoom produces crisper results but has a lot of // up slides. Zoom produces crisper results but has a lot of
// xbrowser quirks so we only use it in whitelsited browsers. // xbrowser quirks so we only use it in white-listed browsers.
features.zoom = 'zoom' in testElement.style && !isMobileDevice && features.zoom = 'zoom' in testElement.style && !isMobileDevice &&
( isChrome || /Version\/[\d\.]+.*Safari/.test( UA ) ); ( isChrome || /Version\/[\d\.]+.*Safari/.test( UA ) );
@ -5675,4 +5675,4 @@ export default function( revealElement, options ) {
return Reveal; return Reveal;
}; };