/**
* Handles the showing of speaker notes
*/
export default class Notes {
constructor(Reveal) {
this.Reveal = Reveal;
}
render() {
this.element = document.createElement("div");
this.element.className = "speaker-notes";
this.element.setAttribute("data-prevent-swipe", "");
this.element.setAttribute("tabindex", "0");
this.Reveal.getRevealElement().appendChild(this.element);
}
/**
* Called when the reveal.js config is updated.
*/
configure(config, oldConfig) {
if (config.showNotes) {
this.element.setAttribute(
"data-layout",
typeof config.showNotes === "string" ? config.showNotes : "inline"
);
}
}
/**
* Pick up notes from the current slide and display them
* to the viewer.
*
* @see {@link config.showNotes}
*/
update() {
if (
this.Reveal.getConfig().showNotes &&
this.element &&
this.Reveal.getCurrentSlide() &&
!this.Reveal.print.isPrintingPDF()
) {
this.element.innerHTML =
this.getSlideNotes() ||
'No notes on this slide.';
}
}
/**
* Updates the visibility of the speaker notes sidebar that
* is used to share annotated slides. The notes sidebar is
* only visible if showNotes is true and there are notes on
* one or more slides in the deck.
*/
updateVisibility() {
if (
this.Reveal.getConfig().showNotes &&
this.hasNotes() &&
!this.Reveal.print.isPrintingPDF()
) {
this.Reveal.getRevealElement().classList.add("show-notes");
} else {
this.Reveal.getRevealElement().classList.remove("show-notes");
}
}
/**
* Checks if there are speaker notes for ANY slide in the
* presentation.
*/
hasNotes() {
return (
this.Reveal.getSlidesElement().querySelectorAll(
"[data-notes], aside.notes"
).length > 0
);
}
/**
* Checks if this presentation is running inside of the
* speaker notes window.
*
* @return {boolean}
*/
isSpeakerNotesWindow() {
return !!window.location.search.match(/receiver/gi);
}
/**
* Retrieves the speaker notes from a slide. Notes can be
* defined in two ways:
* 1. As a data-notes attribute on the slide
* 2. With