bubble all reveal.js events to parent window through postMessage
This commit is contained in:
		
							
								
								
									
										18
									
								
								js/reveal.js
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								js/reveal.js
									
									
									
									
									
								
							| @@ -568,10 +568,11 @@ var Reveal = (function(){ | |||||||
| 		window.addEventListener( 'message', function ( event ) { | 		window.addEventListener( 'message', function ( event ) { | ||||||
| 			var data = JSON.parse( event.data ); | 			var data = JSON.parse( event.data ); | ||||||
| 			var method = Reveal[data.method]; | 			var method = Reveal[data.method]; | ||||||
|  |  | ||||||
| 			if( typeof method === 'function' ) { | 			if( typeof method === 'function' ) { | ||||||
| 				method.apply( Reveal, data.args ); | 				method.apply( Reveal, data.args ); | ||||||
| 			} | 			} | ||||||
| 		}, false); | 		}, false ); | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -957,13 +958,22 @@ var Reveal = (function(){ | |||||||
| 	 * Dispatches an event of the specified type from the | 	 * Dispatches an event of the specified type from the | ||||||
| 	 * reveal DOM element. | 	 * reveal DOM element. | ||||||
| 	 */ | 	 */ | ||||||
| 	function dispatchEvent( type, properties ) { | 	function dispatchEvent( type, args ) { | ||||||
|  |  | ||||||
| 		var event = document.createEvent( "HTMLEvents", 1, 2 ); | 		var event = document.createEvent( 'HTMLEvents', 1, 2 ); | ||||||
| 		event.initEvent( type, true, true ); | 		event.initEvent( type, true, true ); | ||||||
| 		extend( event, properties ); | 		extend( event, args ); | ||||||
| 		dom.wrapper.dispatchEvent( event ); | 		dom.wrapper.dispatchEvent( event ); | ||||||
|  |  | ||||||
|  | 		// If we're in an iframe, post each reveal.js event to the | ||||||
|  | 		// parent window. Used by the notes plugin | ||||||
|  | 		if( window.parent !== window.self ) { | ||||||
|  | 			// Remove arguments that can't be stringified (circular structures) | ||||||
|  | 			if( args && args.currentSlide ) delete args.currentSlide; | ||||||
|  | 			if( args && args.previousSlide ) delete args.previousSlide; | ||||||
|  | 			window.parent.postMessage( JSON.stringify({ namespace: 'reveal', eventName: type, eventArgs: args || null }), '*' ); | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user