60 satır
1,7 KiB
JavaScript
60 satır
1,7 KiB
JavaScript
(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( '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();
|
|
|
|
}());
|