From a22d00ab25b13b82d19890428f124b4ed3759f92 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Mon, 17 Feb 2014 20:07:41 +0100 Subject: [PATCH] server side notes plugin now supports input via data-notes attribute --- plugin/notes-server/client.js | 45 ++++++++++++++++++++++------------- plugin/notes/notes.js | 21 +++++++++++----- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/plugin/notes-server/client.js b/plugin/notes-server/client.js index 156cb9a8..ee60ff78 100644 --- a/plugin/notes-server/client.js +++ b/plugin/notes-server/client.js @@ -1,12 +1,13 @@ (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 ); + 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 ); // Fires when a fragment is shown Reveal.addEventListener( 'fragmentshown', function( event ) { @@ -23,16 +24,17 @@ fragment : 'previous', socketId : socketId }; - socket.emit('fragmentchanged', fragmentData); + socket.emit( 'fragmentchanged', fragmentData ); } ); // Fires when slide is changed Reveal.addEventListener( 'slidechanged', function( event ) { - var nextindexh; - var nextindexv; - var slideElement = event.currentSlide; + var nextindexh, + nextindexv, + slideElement = event.currentSlide, + notesElement = slideElement.querySelector( 'aside.notes' ); - if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') { + if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) { nextindexh = event.indexh; nextindexv = event.indexv + 1; } else { @@ -40,18 +42,27 @@ nextindexv = 0; } - var notes = slideElement.querySelector('aside.notes'); - var slideData = { - notes : notes ? notes.innerHTML : '', + var messageData = { + notes : '', indexh : event.indexh, indexv : event.indexv, nextindexh : nextindexh, nextindexv : nextindexv, socketId : socketId, - markdown : notes ? typeof notes.getAttribute('data-markdown') === 'string' : false - + markdown : false }; - socket.emit('slidechanged', slideData); + // 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( 'slidechanged', messageData ); } ); }()); diff --git a/plugin/notes/notes.js b/plugin/notes/notes.js index 9a82c3c4..3f68b5dc 100644 --- a/plugin/notes/notes.js +++ b/plugin/notes/notes.js @@ -24,9 +24,7 @@ var RevealNotes = (function() { function post() { var slideElement = Reveal.getCurrentSlide(), slideIndices = Reveal.getIndices(), - messageData; - - var notes = slideElement.querySelector( 'aside.notes' ), + notesElement = slideElement.querySelector( 'aside.notes' ), nextindexh, nextindexv; @@ -38,16 +36,27 @@ var RevealNotes = (function() { nextindexv = 0; } - messageData = { - notes : notes ? notes.innerHTML : '', + var messageData = { + notes : '', indexh : slideIndices.h, indexv : slideIndices.v, indexf : slideIndices.f, nextindexh : nextindexh, nextindexv : nextindexv, - markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false + markdown : false }; + // 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'; + } + notesPopup.postMessage( JSON.stringify( messageData ), '*' ); }