server side notes plugin now supports input via data-notes attribute

This commit is contained in:
Hakim El Hattab 2014-02-17 20:07:41 +01:00
parent 9478d03cf6
commit a22d00ab25
2 changed files with 43 additions and 23 deletions

View file

@ -1,12 +1,13 @@
(function() { (function() {
// don't emit events from inside the previews themselves // 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 socket = io.connect( window.location.origin );
var socketId = Math.random().toString().slice(2); var socketId = Math.random().toString().slice( 2 );
console.log('View slide notes at ' + window.location.origin + '/notes/' + socketId); console.log( 'View slide notes at ' + window.location.origin + '/notes/' + socketId );
window.open(window.location.origin + '/notes/' + socketId, 'notes-' + socketId);
window.open( window.location.origin + '/notes/' + socketId, 'notes-' + socketId );
// Fires when a fragment is shown // Fires when a fragment is shown
Reveal.addEventListener( 'fragmentshown', function( event ) { Reveal.addEventListener( 'fragmentshown', function( event ) {
@ -23,16 +24,17 @@
fragment : 'previous', fragment : 'previous',
socketId : socketId socketId : socketId
}; };
socket.emit('fragmentchanged', fragmentData); socket.emit( 'fragmentchanged', fragmentData );
} ); } );
// Fires when slide is changed // Fires when slide is changed
Reveal.addEventListener( 'slidechanged', function( event ) { Reveal.addEventListener( 'slidechanged', function( event ) {
var nextindexh; var nextindexh,
var nextindexv; nextindexv,
var slideElement = event.currentSlide; 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; nextindexh = event.indexh;
nextindexv = event.indexv + 1; nextindexv = event.indexv + 1;
} else { } else {
@ -40,18 +42,27 @@
nextindexv = 0; nextindexv = 0;
} }
var notes = slideElement.querySelector('aside.notes'); var messageData = {
var slideData = { notes : '',
notes : notes ? notes.innerHTML : '',
indexh : event.indexh, indexh : event.indexh,
indexv : event.indexv, indexv : event.indexv,
nextindexh : nextindexh, nextindexh : nextindexh,
nextindexv : nextindexv, nextindexv : nextindexv,
socketId : socketId, 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 );
} ); } );
}()); }());

View file

@ -24,9 +24,7 @@ var RevealNotes = (function() {
function post() { function post() {
var slideElement = Reveal.getCurrentSlide(), var slideElement = Reveal.getCurrentSlide(),
slideIndices = Reveal.getIndices(), slideIndices = Reveal.getIndices(),
messageData; notesElement = slideElement.querySelector( 'aside.notes' ),
var notes = slideElement.querySelector( 'aside.notes' ),
nextindexh, nextindexh,
nextindexv; nextindexv;
@ -38,16 +36,27 @@ var RevealNotes = (function() {
nextindexv = 0; nextindexv = 0;
} }
messageData = { var messageData = {
notes : notes ? notes.innerHTML : '', notes : '',
indexh : slideIndices.h, indexh : slideIndices.h,
indexv : slideIndices.v, indexv : slideIndices.v,
indexf : slideIndices.f, indexf : slideIndices.f,
nextindexh : nextindexh, nextindexh : nextindexh,
nextindexv : nextindexv, 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 ), '*' ); notesPopup.postMessage( JSON.stringify( messageData ), '*' );
} }