<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>reveal.js - Test Plugins</title> <link rel="stylesheet" href="../dist/reveal.css"> <link rel="stylesheet" href="../node_modules/qunit/qunit/qunit.css"> <script src="../node_modules/qunit/qunit/qunit.js"></script> </head> <body style="overflow: auto;"> <div id="qunit"></div> <div id="qunit-fixture"></div> <div class="reveal" style="display: none;"> <div class="slides"> <section>Slide content</section> </div> </div> <script src="../dist/reveal.es5.js"></script> <script> QUnit.module( 'Plugins' ); var initCounter = { PluginB: 0, PluginC: 0, PluginD: 0 }; // Plugin with no init method var PluginA = { id: 'PluginA' }; // Plugin with init method var PluginB = { id: 'PluginB', init: function() { initCounter['PluginB'] += 1; } }; // Async plugin with init method var PluginC = { id: 'PluginC', init: function() { return new Promise(function( resolve ) { setTimeout( () => { initCounter['PluginC'] += 1; resolve(); }, 1000 ); }); } }; // Plugin initialized after reveal.js is ready var PluginD = { id: 'PluginD', init: function() { initCounter['PluginD'] += 1; } }; var PluginE = { id: 'PluginE' }; var reveal = new Reveal( document.querySelector( '.reveal' ), { plugins: [ PluginA ] } ); reveal.registerPlugin( PluginB ); reveal.registerPlugin( PluginC ); reveal.initialize(); QUnit.test( 'Can initialize synchronously', function( assert ) { assert.strictEqual( initCounter['PluginB'], 1 ); reveal.registerPlugin( PluginB ); assert.strictEqual( initCounter['PluginB'], 1, 'prevents duplicate registration' ); }); QUnit.test( 'Can initialize asynchronously', function( assert ) { assert.expect( 3 ); var done = assert.async( 2 ); assert.strictEqual( initCounter['PluginC'], 0, 'async plugin not immediately initialized' ); reveal.on( 'ready', function() { assert.strictEqual( initCounter['PluginC'], 1, 'finsihed initializing when reveal.js dispatches "ready"' ); done(); reveal.registerPlugin( PluginD ); assert.strictEqual( initCounter['PluginD'], 1, 'plugin registered after reveal.js is ready still initiailizes' ); done(); }); } ); QUnit.test( 'Can check if plugin is registered', function( assert ) { assert.strictEqual( reveal.hasPlugin( 'PluginA' ), true ); assert.strictEqual( reveal.hasPlugin( 'PluginE' ), false ); reveal.registerPlugin( PluginE ); assert.strictEqual( reveal.hasPlugin( 'PluginE' ), true ); } ); QUnit.test( 'Can retrieve plugin instance', function( assert ) { assert.strictEqual( reveal.getPlugin( 'PluginB' ), PluginB ); } ); </script> </body> </html>