From df25fbebba5fe37e8b94d0d8329a9513a2cb76f9 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Mon, 1 Apr 2019 11:07:11 +0200 Subject: [PATCH] add hasPlugin and getPlugin API methods and tests --- js/reveal.js | 27 ++++++++++++++++++++++++++- test/test-plugins.html | 15 ++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/js/reveal.js b/js/reveal.js index 0437d2dd..09f3af7d 100644 --- a/js/reveal.js +++ b/js/reveal.js @@ -1594,6 +1594,29 @@ } + /** + * Checks if a specific plugin has been registered. + * + * @param {String} id Unique plugin identifier + */ + function hasPlugin( id ) { + + return !!plugins[id]; + + } + + /** + * Returns the specific plugin instance, if a plugin + * with the given ID has been registered. + * + * @param {String} id Unique plugin identifier + */ + function getPlugin( id ) { + + return plugins[id]; + + } + /** * Add a custom key binding with optional description to * be added to the help screen. @@ -5975,8 +5998,10 @@ addKeyBinding: addKeyBinding, removeKeyBinding: removeKeyBinding, - // Called by plugins to register themselves + // API for registering and retrieving plugins registerPlugin: registerPlugin, + hasPlugin: hasPlugin, + getPlugin: getPlugin, // Programatically triggers a keyboard event triggerKey: function( keyCode ) { diff --git a/test/test-plugins.html b/test/test-plugins.html index 13e3692f..dfd65b74 100644 --- a/test/test-plugins.html +++ b/test/test-plugins.html @@ -57,6 +57,8 @@ initCounter['PluginD'] += 1; } }; + var PluginE = {}; + Reveal.registerPlugin( 'PluginA', PluginA ); Reveal.registerPlugin( 'PluginB', PluginB ); Reveal.registerPlugin( 'PluginC', PluginC ); @@ -71,7 +73,7 @@ assert.strictEqual( initCounter['PluginB'], 1, 'prevents duplicate registration' ); }); - QUnit.test( 'Can initialie asynchronously', function( assert ) { + QUnit.test( 'Can initialize asynchronously', function( assert ) { assert.expect( 3 ); var done = assert.async( 2 ); @@ -86,6 +88,17 @@ 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', PluginE ); + assert.strictEqual( Reveal.hasPlugin( 'PluginE' ), true ); + } ); + + QUnit.test( 'Can retrieve plugin instance', function( assert ) { + assert.strictEqual( Reveal.getPlugin( 'PluginB' ), PluginB ); + } );