From d283f7e661e14d6ae1881fe803e5b4f1ed0689ff Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 24 Jun 2024 13:49:08 -0400 Subject: Add 2024 Guix social talk. --- .../reveal.js/js/controllers/notes.js | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 2024-06-18-guix-social/reveal.js/js/controllers/notes.js (limited to '2024-06-18-guix-social/reveal.js/js/controllers/notes.js') diff --git a/2024-06-18-guix-social/reveal.js/js/controllers/notes.js b/2024-06-18-guix-social/reveal.js/js/controllers/notes.js new file mode 100644 index 0000000..8af918c --- /dev/null +++ b/2024-06-18-guix-social/reveal.js/js/controllers/notes.js @@ -0,0 +1,126 @@ +/** + * 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.isScrollView() && + !this.Reveal.isPrintView() + ) { + 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.isScrollView() && + !this.Reveal.isPrintView() + ) { + 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