4e0d34413b
Now any Hugo section can be configured to generate a presentation without altering its type, and the theme is more easily copied into existing sites without conflicting with any preexisting layouts.
65 lines
1.8 KiB
JavaScript
Executable file
65 lines
1.8 KiB
JavaScript
Executable file
(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();
|
|
|
|
}());
|