diff options
Diffstat (limited to 'presentation/plugin/notes-server/client.js')
-rw-r--r-- | presentation/plugin/notes-server/client.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/presentation/plugin/notes-server/client.js b/presentation/plugin/notes-server/client.js new file mode 100644 index 0000000..6a4d2e4 --- /dev/null +++ b/presentation/plugin/notes-server/client.js @@ -0,0 +1,67 @@ +(function () { + + // don't emit events from inside the previews themselves + if (window.location.search.match(/receiver/gi)) { + return; + } + + var socket = io.connect(window.location.origin), + 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); + + /** + * 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() + }; + + // Look for notes defined in a slide attribute + if (slideElement.hasAttribute('data-notes')) { + messageData.notes = slideElement.getAttribute('data-notes'); + } + + // Look for notes defined in an aside element + if (notesElement) { + messageData.notes = notesElement.innerHTML; + messageData.markdown = typeof notesElement.getAttribute('data-markdown') === 'string'; + } + + socket.emit('statechanged', messageData); + + } + + // When a new notes window connects, post our current state + socket.on('new-subscriber', function (data) { + post(); + }); + + // When the state changes from inside of the speaker view + socket.on('statechanged-speaker', function (data) { + Reveal.setState(data.state); + }); + + // 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(); + +}()); |