Add bundler-friendly dependency injection
This commit is contained in:
parent
3f95a21009
commit
d378ab2e63
3 changed files with 31 additions and 13 deletions
|
@ -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()`.
|
||||||
|
|
|
@ -48,17 +48,22 @@ export default class Plugins {
|
||||||
if( scripts.length ) {
|
if( scripts.length ) {
|
||||||
scriptsToLoad = scripts.length;
|
scriptsToLoad = scripts.length;
|
||||||
|
|
||||||
// Load synchronous scripts
|
const scriptLoadedCallback = (s) => {
|
||||||
scripts.forEach( s => {
|
|
||||||
loadScript( s.src, () => {
|
|
||||||
|
|
||||||
if( typeof s.callback === 'function' ) s.callback();
|
if( typeof s.callback === 'function' ) s.callback();
|
||||||
|
|
||||||
if( --scriptsToLoad === 0 ) {
|
if( --scriptsToLoad === 0 ) {
|
||||||
this.initPlugins().then( resolve );
|
this.initPlugins().then( resolve );
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} );
|
// Load synchronous scripts
|
||||||
|
scripts.forEach( s => {
|
||||||
|
if (s.id) {
|
||||||
|
this.registerPlugin(s.id, s.plugin);
|
||||||
|
scriptLoadedCallback(s);
|
||||||
|
} else {
|
||||||
|
loadScript( s.src, () => scriptLoadedCallback(s));
|
||||||
|
}
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
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 => {
|
||||||
|
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 );
|
loadScript( s.src, s.callback );
|
||||||
|
}
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 ) );
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue