files/reveal.js/plugin/notes-server/client.js in reveal-ck-0.5.1 vs files/reveal.js/plugin/notes-server/client.js in reveal-ck-0.6.0

- old
+ new

@@ -1,57 +1,60 @@ (function() { + // don't emit events from inside the previews themselves - if ( window.location.search.match( /receiver/gi ) ) { return; } + if( window.location.search.match( /receiver/gi ) ) { return; } - var socket = io.connect(window.location.origin); - var socketId = Math.random().toString().slice(2); - - console.log('View slide notes at ' + window.location.origin + '/notes/' + socketId); - window.open(window.location.origin + '/notes/' + socketId, 'notes-' + socketId); + var socket = io.connect( window.location.origin ), + socketId = Math.random().toString().slice( 2 ); - // Fires when a fragment is shown - Reveal.addEventListener( 'fragmentshown', function( event ) { - var fragmentData = { - fragment : 'next', - socketId : socketId - }; - socket.emit('fragmentchanged', fragmentData); - } ); + console.log( 'View slide notes at ' + window.location.origin + '/notes/' + socketId ); - // Fires when a fragment is hidden - Reveal.addEventListener( 'fragmenthidden', function( event ) { - var fragmentData = { - fragment : 'previous', - socketId : socketId + window.open( window.location.origin + '/notes/' + socketId, 'notes-' + socketId ); + + /** + * Posts the current slide data to the notes window + */ + function post() { + + var slideElement = Reveal.getCurrentSlide(), + notesElement = slideElement.querySelector( 'aside.notes' ); + + var messageData = { + notes: '', + markdown: false, + socketId: socketId, + state: Reveal.getState() }; - socket.emit('fragmentchanged', fragmentData); - } ); - // Fires when slide is changed - Reveal.addEventListener( 'slidechanged', function( event ) { - var nextindexh; - var nextindexv; - var slideElement = event.currentSlide; + // Look for notes defined in a slide attribute + if( slideElement.hasAttribute( 'data-notes' ) ) { + messageData.notes = slideElement.getAttribute( 'data-notes' ); + } - if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') { - nextindexh = event.indexh; - nextindexv = event.indexv + 1; - } else { - nextindexh = event.indexh + 1; - nextindexv = 0; + // Look for notes defined in an aside element + if( notesElement ) { + messageData.notes = notesElement.innerHTML; + messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string'; } - var notes = slideElement.querySelector('aside.notes'); - var slideData = { - notes : notes ? notes.innerHTML : '', - indexh : event.indexh, - indexv : event.indexv, - nextindexh : nextindexh, - nextindexv : nextindexv, - socketId : socketId, - markdown : notes ? typeof notes.getAttribute('data-markdown') === 'string' : false + socket.emit( 'statechanged', messageData ); - }; + } - socket.emit('slidechanged', slideData); + // 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 ); + Reveal.addEventListener( 'fragmenthidden', post ); + Reveal.addEventListener( 'overviewhidden', post ); + Reveal.addEventListener( 'overviewshown', post ); + Reveal.addEventListener( 'paused', post ); + Reveal.addEventListener( 'resumed', post ); + + // Post the initial state + post(); + }());