浏览代码

sync server-side speaker notes after notes window opens

Hakim El Hattab 11 年之前
父节点
当前提交
3eb7038a15
共有 3 个文件被更改,包括 26 次插入5 次删除
  1. 6 1
      plugin/notes-server/client.js
  2. 6 2
      plugin/notes-server/index.js
  3. 14 2
      plugin/notes-server/notes.html

+ 6 - 1
plugin/notes-server/client.js

@@ -36,10 +36,15 @@
 			messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
 		}
 
-		socket.emit( 'state', messageData );
+		socket.emit( 'statechanged', messageData );
 
 	}
 
+	// When a new notes window connects, post our current state
+	socket.on( 'connect', function( data ) {
+		post();
+	} );
+
 	// Monitor events that trigger a change in state
 	Reveal.addEventListener( 'slidechanged', post );
 	Reveal.addEventListener( 'fragmentshown', post );

+ 6 - 2
plugin/notes-server/index.js

@@ -16,8 +16,12 @@ var opts = {
 
 io.sockets.on( 'connection', function( socket ) {
 
-	socket.on( 'state', function( state ) {
-		socket.broadcast.emit( 'state', state );
+	socket.on( 'connect', function( data ) {
+		socket.broadcast.emit( 'connect', data );
+	});
+
+	socket.on( 'statechanged', function( data ) {
+		socket.broadcast.emit( 'statechanged', data );
 	});
 
 });

+ 14 - 2
plugin/notes-server/notes.html

@@ -187,7 +187,7 @@
 			var socket = io.connect( window.location.origin ),
 				socketId = '{{socketId}}';
 
-			socket.on( 'state', function( data ) {
+			socket.on( 'statechanged', function( data ) {
 
 				// ignore data from sockets that aren't ours
 				if( data.socketId !== socketId ) { return; }
@@ -206,6 +206,18 @@
 
 			} );
 
+			window.addEventListener( 'message', function( event ) {
+
+				var data = JSON.parse( event.data );
+
+				if( data && data.namespace === 'reveal' ) {
+					if( /ready/.test( data.eventName ) ) {
+						socket.emit( 'connect', { socketId: socketId } );
+					}
+				}
+
+			} );
+
 			/**
 			 * Called when the main window sends an updated state.
 			 */
@@ -266,7 +278,7 @@
 				].join( '&' );
 
 				var hash = '#/' + data.state.indexh + '/' + data.state.indexv;
-				var currentURL = '/?' + params + hash;
+				var currentURL = '/?' + params + '&postMessageEvents=true' + hash;
 				var upcomingURL = '/?' + params + '&controls=false' + hash;
 
 				currentSlide = document.createElement( 'iframe' );