/** * 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