Skip to content

Commit

Permalink
Support multiple aside notes elements per slide
Browse files Browse the repository at this point in the history
So far, multiple notes per slide are only supported if they are
attached to fragments (without fragments, only the first aside notes
element on a slide is displayed).  With this commit, the contents of
all notes on a slide are displayed (except for fragments with notes,
for which, as before, only each fragment's first/single note is
displayed).
  • Loading branch information
lechten committed Sep 16, 2021
1 parent 90bbe8b commit f9ce61e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 13 deletions.
16 changes: 10 additions & 6 deletions js/controllers/notes.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Handles the showing and
* Handles the showing of speaker notes
*/
export default class Notes {

Expand Down Expand Up @@ -89,7 +89,7 @@ export default class Notes {
* Retrieves the speaker notes from a slide. Notes can be
* defined in two ways:
* 1. As a data-notes attribute on the slide <section>
* 2. As an <aside class="notes"> inside of the slide
* 2. With <aside class="notes"> elements inside the slide
*
* @param {HTMLElement} [slide=currentSlide]
* @return {(string|null)}
Expand All @@ -101,10 +101,14 @@ export default class Notes {
return slide.getAttribute( 'data-notes' );
}

// ... or using an <aside class="notes"> element
let notesElement = slide.querySelector( 'aside.notes' );
if( notesElement ) {
return notesElement.innerHTML;
// ... or using <aside class="notes"> elements
let notesElements = slide.querySelectorAll( 'aside.notes' );
if( notesElements ) {
let notes = "";
for (let i = 0; i < notesElements.length; i++) {
notes += notesElements[i].innerHTML + "\n";
}
return notes;
}

return null;
Expand Down
22 changes: 15 additions & 7 deletions plugin/notes/plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ const Plugin = () => {
function post( event ) {

let slideElement = deck.getCurrentSlide(),
notesElement = slideElement.querySelector( 'aside.notes' ),
notesElements = slideElement.querySelectorAll( 'aside.notes' ),
fragmentElement = slideElement.querySelector( '.current-fragment' );

let messageData = {
Expand All @@ -108,21 +108,29 @@ const Plugin = () => {
if( fragmentElement ) {
let fragmentNotes = fragmentElement.querySelector( 'aside.notes' );
if( fragmentNotes ) {
notesElement = fragmentNotes;
messageData.notes = fragmentNotes.innerHTML;
messageData.markdown = typeof fragmentNotes.getAttribute( 'data-markdown' ) === 'string';

// Ignore other slide notes
notesElements = null;
}
else if( fragmentElement.hasAttribute( 'data-notes' ) ) {
messageData.notes = fragmentElement.getAttribute( 'data-notes' );
messageData.whitespace = 'pre-wrap';

// In case there are slide notes
notesElement = null;
notesElements = null;
}
}

// Look for notes defined in an aside element
if( notesElement ) {
messageData.notes = notesElement.innerHTML;
messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
// Look for notes defined in aside elements
if( notesElements ) {
let notes = "";
for (let i = 0; i < notesElements.length; i++) {
notes += notesElements[i].innerHTML + "\n";
}
messageData.notes = notes;
messageData.markdown = typeof notesElements[0].getAttribute( 'data-markdown' ) === 'string';
}

popup.postMessage( JSON.stringify( messageData ), '*' );
Expand Down

0 comments on commit f9ce61e

Please sign in to comment.