|
|
@ -7,11 +7,34 @@ var RevealNotes = (function() { |
|
|
|
function openNotes() { |
|
|
|
var notesPopup = window.open( 'plugin/notes/notes.html', 'reveal.js - Notes', 'width=1120,height=850' ); |
|
|
|
|
|
|
|
Reveal.addEventListener( 'slidechanged', post ); |
|
|
|
// Fires when slide is changed
|
|
|
|
Reveal.addEventListener( 'slidechanged', function( event ) { |
|
|
|
post('slidechanged'); |
|
|
|
} ); |
|
|
|
|
|
|
|
// Fires when a fragment is shown
|
|
|
|
Reveal.addEventListener( 'fragmentshown', function( event ) { |
|
|
|
post('fragmentshown'); |
|
|
|
} ); |
|
|
|
|
|
|
|
// Fires when a fragment is hidden
|
|
|
|
Reveal.addEventListener( 'fragmenthidden', function( event ) { |
|
|
|
post('fragmenthidden'); |
|
|
|
} ); |
|
|
|
|
|
|
|
// Posts the current slide data to the notes window
|
|
|
|
function post() { |
|
|
|
/** |
|
|
|
* Posts the current slide data to the notes window |
|
|
|
* |
|
|
|
* @param {String} eventType Expecting 'slidechanged', 'fragmentshown' |
|
|
|
* or 'fragmenthidden' set in the events above to define the needed |
|
|
|
* slideDate. |
|
|
|
*/ |
|
|
|
function post( eventType ) { |
|
|
|
var slideElement = Reveal.getCurrentSlide(), |
|
|
|
messageData; |
|
|
|
|
|
|
|
if( eventType === 'slidechanged' ) { |
|
|
|
var notes = slideElement.querySelector( 'aside.notes' ), |
|
|
|
indexh = Reveal.getIndices().h, |
|
|
|
indexv = Reveal.getIndices().v, |
|
|
|
nextindexh, |
|
|
@ -25,9 +48,7 @@ var RevealNotes = (function() { |
|
|
|
nextindexv = 0; |
|
|
|
} |
|
|
|
|
|
|
|
var notes = slideElement.querySelector( 'aside.notes' ); |
|
|
|
|
|
|
|
var slideData = { |
|
|
|
messageData = { |
|
|
|
notes : notes ? notes.innerHTML : '', |
|
|
|
indexh : indexh, |
|
|
|
indexv : indexv, |
|
|
@ -35,22 +56,25 @@ var RevealNotes = (function() { |
|
|
|
nextindexv : nextindexv, |
|
|
|
markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false |
|
|
|
}; |
|
|
|
|
|
|
|
notesPopup.postMessage( JSON.stringify( slideData ), '*' ); |
|
|
|
} |
|
|
|
else if( eventType === 'fragmentshown' ) { |
|
|
|
messageData = { |
|
|
|
fragment : 'next' |
|
|
|
}; |
|
|
|
} |
|
|
|
else if( eventType === 'fragmenthidden' ) { |
|
|
|
messageData = { |
|
|
|
fragment : 'prev' |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
// The main presentation is kept in sync when navigating the
|
|
|
|
// note slides so that the popup may be used as a remote
|
|
|
|
window.addEventListener( 'message', function( event ) { |
|
|
|
var data = JSON.parse( event.data ); |
|
|
|
|
|
|
|
if( data && typeof data.indexh === 'number' && typeof data.indexv === 'number' ) { |
|
|
|
Reveal.slide( data.indexh, data.indexv ); |
|
|
|
notesPopup.postMessage( JSON.stringify( messageData ), '*' ); |
|
|
|
} |
|
|
|
} ); |
|
|
|
|
|
|
|
// Navigate to the current slide when the notes are loaded
|
|
|
|
notesPopup.addEventListener( 'load', post, false ); |
|
|
|
notesPopup.addEventListener( 'load', function( event ) { |
|
|
|
post('slidechanged'); |
|
|
|
}, false ); |
|
|
|
} |
|
|
|
|
|
|
|
// If the there's a 'notes' query set, open directly
|
|
|
@ -70,5 +94,5 @@ var RevealNotes = (function() { |
|
|
|
} |
|
|
|
}, false ); |
|
|
|
|
|
|
|
return { open: openNotes } |
|
|
|
return { open: openNotes }; |
|
|
|
})(); |