registerPlugin( plugin ) {

		// Backwards compatibility to make reveal.js ~3.9.0
		// plugins work with reveal.js 4.0.0
		if( arguments.length === 2 && typeof arguments[0] === 'string' ) {
			plugin = arguments[1];
			plugin.id = arguments[0];
		}
		// Plugin can optionally be a function which we call
		// to create an instance of the plugin
		else if( typeof plugin === 'function' ) {
			plugin = plugin();
		}

		let id = plugin.id;

		if( typeof id !== 'string' ) {
			console.warn( 'Unrecognized plugin format; can\'t find plugin.id', plugin );
		}
		else if( this.registeredPlugins[id] === undefined ) {
			this.registeredPlugins[id] = plugin;

			// If a plugin is registered after reveal.js is loaded,
			// initialize it right away
			if( this.state === 'loaded' && typeof plugin.init === 'function' ) {
				plugin.init( this.Reveal );
			}
		}
		else {
			console.warn( 'reveal.js: "'+ id +'" plugin has already been registered' );
		}

	}
Registers a new plugin with this reveal.js instance.

reveal.js waits for all registered plugins to initialize
before considering itself ready, as long as the plugin
is registered before calling `Reveal.initialize()`.