Browse Source

add hasPlugin and getPlugin API methods and tests

Hakim El Hattab 5 years ago
parent
commit
df25fbebba
2 changed files with 40 additions and 2 deletions
  1. 26 1
      js/reveal.js
  2. 14 1
      test/test-plugins.html

+ 26 - 1
js/reveal.js

@@ -1595,6 +1595,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 ) {

+ 14 - 1
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 );
+			} );
 		</script>
 
 	</body>