).';\n\n\t\t// Cache references to key DOM elements\n\t\tdom.wrapper = revealElement;\n\t\tdom.slides = revealElement.querySelector( '.slides' );\n\n\t\tif( !dom.slides ) throw 'Unable to find slides container (
).';\n\n\t\t// Compose our config object in order of increasing precedence:\n\t\t// 1. Default reveal.js options\n\t\t// 2. Options provided via Reveal.configure() prior to\n\t\t// initialization\n\t\t// 3. Options passed to the Reveal constructor\n\t\t// 4. Options passed to Reveal.initialize\n\t\t// 5. Query params\n\t\tconfig = { ...defaultConfig, ...config, ...options, ...initOptions, ...Util.getQueryHash() };\n\n\t\tsetViewport();\n\n\t\t// Force a layout when the whole page, incl fonts, has loaded\n\t\twindow.addEventListener( 'load', layout, false );\n\n\t\t// Register plugins and load dependencies, then move on to #start()\n\t\tplugins.load( config.plugins, config.dependencies ).then( start );\n\n\t\treturn new Promise( resolve => Reveal.on( 'ready', resolve ) );\n\n\t}\n\n\t/**\n\t * Encase the presentation in a reveal.js viewport. The\n\t * extent of the viewport differs based on configuration.\n\t */\n\tfunction setViewport() {\n\n\t\t// Embedded decks use the reveal element as their viewport\n\t\tif( config.embedded === true ) {\n\t\t\tdom.viewport = Util.closest( revealElement, '.reveal-viewport' ) || revealElement;\n\t\t}\n\t\t// Full-page decks use the body as their viewport\n\t\telse {\n\t\t\tdom.viewport = document.body;\n\t\t\tdocument.documentElement.classList.add( 'reveal-full-page' );\n\t\t}\n\n\t\tdom.viewport.classList.add( 'reveal-viewport' );\n\n\t}\n\n\t/**\n\t * Starts up reveal.js by binding input events and navigating\n\t * to the current URL deeplink if there is one.\n\t */\n\tfunction start() {\n\n\t\tready = true;\n\n\t\t// Remove slides hidden with data-visibility\n\t\tremoveHiddenSlides();\n\n\t\t// Make sure we've got all the DOM elements we need\n\t\tsetupDOM();\n\n\t\t// Listen to messages posted to this window\n\t\tsetupPostMessage();\n\n\t\t// Prevent the slides from being scrolled out of view\n\t\tsetupScrollPrevention();\n\n\t\t// Adds bindings for fullscreen mode\n\t\tsetupFullscreen();\n\n\t\t// Resets all vertical slides so that only the first is visible\n\t\tresetVerticalSlides();\n\n\t\t// Updates the presentation to match the current configuration values\n\t\tconfigure();\n\n\t\t// Read the initial hash\n\t\tlocation.readURL();\n\n\t\t// Create slide backgrounds\n\t\tbackgrounds.update( true );\n\n\t\t// Notify listeners that the presentation is ready but use a 1ms\n\t\t// timeout to ensure it's not fired synchronously after #initialize()\n\t\tsetTimeout( () => {\n\t\t\t// Enable transitions now that we're loaded\n\t\t\tdom.slides.classList.remove( 'no-transition' );\n\n\t\t\tdom.wrapper.classList.add( 'ready' );\n\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'ready',\n\t\t\t\tdata: {\n\t\t\t\t\tindexh,\n\t\t\t\t\tindexv,\n\t\t\t\t\tcurrentSlide\n\t\t\t\t}\n\t\t\t});\n\t\t}, 1 );\n\n\t\t// Special setup and config is required when printing to PDF\n\t\tif( print.isPrintingPDF() ) {\n\t\t\tremoveEventListeners();\n\n\t\t\t// The document needs to have loaded for the PDF layout\n\t\t\t// measurements to be accurate\n\t\t\tif( document.readyState === 'complete' ) {\n\t\t\t\tprint.setupPDF();\n\t\t\t}\n\t\t\telse {\n\t\t\t\twindow.addEventListener( 'load', () => {\n\t\t\t\t\tprint.setupPDF();\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes all slides with data-visibility=\"hidden\". This\n\t * is done right before the rest of the presentation is\n\t * initialized.\n\t *\n\t * If you want to show all hidden slides, initialize\n\t * reveal.js with showHiddenSlides set to true.\n\t */\n\tfunction removeHiddenSlides() {\n\n\t\tif( !config.showHiddenSlides ) {\n\t\t\tUtil.queryAll( dom.wrapper, 'section[data-visibility=\"hidden\"]' ).forEach( slide => {\n\t\t\t\tslide.parentNode.removeChild( slide );\n\t\t\t} );\n\t\t}\n\n\t}\n\n\t/**\n\t * Finds and stores references to DOM elements which are\n\t * required by the presentation. If a required element is\n\t * not found, it is created.\n\t */\n\tfunction setupDOM() {\n\n\t\t// Prevent transitions while we're loading\n\t\tdom.slides.classList.add( 'no-transition' );\n\n\t\tif( Device.isMobile ) {\n\t\t\tdom.wrapper.classList.add( 'no-hover' );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.classList.remove( 'no-hover' );\n\t\t}\n\n\t\tbackgrounds.render();\n\t\tslideNumber.render();\n\t\tjumpToSlide.render();\n\t\tcontrols.render();\n\t\tprogress.render();\n\t\tnotes.render();\n\n\t\t// Overlay graphic which is displayed during the paused mode\n\t\tdom.pauseOverlay = Util.createSingletonNode( dom.wrapper, 'div', 'pause-overlay', config.controls ? '
' : null );\n\n\t\tdom.statusElement = createStatusElement();\n\n\t\tdom.wrapper.setAttribute( 'role', 'application' );\n\t}\n\n\t/**\n\t * Creates a hidden div with role aria-live to announce the\n\t * current slide content. Hide the div off-screen to make it\n\t * available only to Assistive Technologies.\n\t *\n\t * @return {HTMLElement}\n\t */\n\tfunction createStatusElement() {\n\n\t\tlet statusElement = dom.wrapper.querySelector( '.aria-status' );\n\t\tif( !statusElement ) {\n\t\t\tstatusElement = document.createElement( 'div' );\n\t\t\tstatusElement.style.position = 'absolute';\n\t\t\tstatusElement.style.height = '1px';\n\t\t\tstatusElement.style.width = '1px';\n\t\t\tstatusElement.style.overflow = 'hidden';\n\t\t\tstatusElement.style.clip = 'rect( 1px, 1px, 1px, 1px )';\n\t\t\tstatusElement.classList.add( 'aria-status' );\n\t\t\tstatusElement.setAttribute( 'aria-live', 'polite' );\n\t\t\tstatusElement.setAttribute( 'aria-atomic','true' );\n\t\t\tdom.wrapper.appendChild( statusElement );\n\t\t}\n\t\treturn statusElement;\n\n\t}\n\n\t/**\n\t * Announces the given text to screen readers.\n\t */\n\tfunction announceStatus( value ) {\n\n\t\tdom.statusElement.textContent = value;\n\n\t}\n\n\t/**\n\t * Converts the given HTML element into a string of text\n\t * that can be announced to a screen reader. Hidden\n\t * elements are excluded.\n\t */\n\tfunction getStatusText( node ) {\n\n\t\tlet text = '';\n\n\t\t// Text node\n\t\tif( node.nodeType === 3 ) {\n\t\t\ttext += node.textContent;\n\t\t}\n\t\t// Element node\n\t\telse if( node.nodeType === 1 ) {\n\n\t\t\tlet isAriaHidden = node.getAttribute( 'aria-hidden' );\n\t\t\tlet isDisplayHidden = window.getComputedStyle( node )['display'] === 'none';\n\t\t\tif( isAriaHidden !== 'true' && !isDisplayHidden ) {\n\n\t\t\t\tArray.from( node.childNodes ).forEach( child => {\n\t\t\t\t\ttext += getStatusText( child );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\ttext = text.trim();\n\n\t\treturn text === '' ? '' : text + ' ';\n\n\t}\n\n\t/**\n\t * This is an unfortunate necessity. Some actions – such as\n\t * an input field being focused in an iframe or using the\n\t * keyboard to expand text selection beyond the bounds of\n\t * a slide – can trigger our content to be pushed out of view.\n\t * This scrolling can not be prevented by hiding overflow in\n\t * CSS (we already do) so we have to resort to repeatedly\n\t * checking if the slides have been offset :(\n\t */\n\tfunction setupScrollPrevention() {\n\n\t\tsetInterval( () => {\n\t\t\tif( dom.wrapper.scrollTop !== 0 || dom.wrapper.scrollLeft !== 0 ) {\n\t\t\t\tdom.wrapper.scrollTop = 0;\n\t\t\t\tdom.wrapper.scrollLeft = 0;\n\t\t\t}\n\t\t}, 1000 );\n\n\t}\n\n\t/**\n\t * After entering fullscreen we need to force a layout to\n\t * get our presentations to scale correctly. This behavior\n\t * is inconsistent across browsers but a force layout seems\n\t * to normalize it.\n\t */\n\tfunction setupFullscreen() {\n\n\t\tdocument.addEventListener( 'fullscreenchange', onFullscreenChange );\n\t\tdocument.addEventListener( 'webkitfullscreenchange', onFullscreenChange );\n\n\t}\n\n\t/**\n\t * Registers a listener to postMessage events, this makes it\n\t * possible to call all reveal.js API methods from another\n\t * window. For example:\n\t *\n\t * revealWindow.postMessage( JSON.stringify({\n\t * method: 'slide',\n\t * args: [ 2 ]\n\t * }), '*' );\n\t */\n\tfunction setupPostMessage() {\n\n\t\tif( config.postMessage ) {\n\t\t\twindow.addEventListener( 'message', onPostMessage, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies the configuration settings from the config\n\t * object. May be called multiple times.\n\t *\n\t * @param {object} options\n\t */\n\tfunction configure( options ) {\n\n\t\tconst oldConfig = { ...config }\n\n\t\t// New config options may be passed when this method\n\t\t// is invoked through the API after initialization\n\t\tif( typeof options === 'object' ) Util.extend( config, options );\n\n\t\t// Abort if reveal.js hasn't finished loading, config\n\t\t// changes will be applied automatically once ready\n\t\tif( Reveal.isReady() === false ) return;\n\n\t\tconst numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;\n\n\t\t// The transition is added as a class on the .reveal element\n\t\tdom.wrapper.classList.remove( oldConfig.transition );\n\t\tdom.wrapper.classList.add( config.transition );\n\n\t\tdom.wrapper.setAttribute( 'data-transition-speed', config.transitionSpeed );\n\t\tdom.wrapper.setAttribute( 'data-background-transition', config.backgroundTransition );\n\n\t\t// Expose our configured slide dimensions as custom props\n\t\tdom.viewport.style.setProperty( '--slide-width', config.width + 'px' );\n\t\tdom.viewport.style.setProperty( '--slide-height', config.height + 'px' );\n\n\t\tif( config.shuffle ) {\n\t\t\tshuffle();\n\t\t}\n\n\t\tUtil.toggleClass( dom.wrapper, 'embedded', config.embedded );\n\t\tUtil.toggleClass( dom.wrapper, 'rtl', config.rtl );\n\t\tUtil.toggleClass( dom.wrapper, 'center', config.center );\n\n\t\t// Exit the paused mode if it was configured off\n\t\tif( config.pause === false ) {\n\t\t\tresume();\n\t\t}\n\n\t\t// Iframe link previews\n\t\tif( config.previewLinks ) {\n\t\t\tenablePreviewLinks();\n\t\t\tdisablePreviewLinks( '[data-preview-link=false]' );\n\t\t}\n\t\telse {\n\t\t\tdisablePreviewLinks();\n\t\t\tenablePreviewLinks( '[data-preview-link]:not([data-preview-link=false])' );\n\t\t}\n\n\t\t// Reset all changes made by auto-animations\n\t\tautoAnimate.reset();\n\n\t\t// Remove existing auto-slide controls\n\t\tif( autoSlidePlayer ) {\n\t\t\tautoSlidePlayer.destroy();\n\t\t\tautoSlidePlayer = null;\n\t\t}\n\n\t\t// Generate auto-slide controls if needed\n\t\tif( numberOfSlides > 1 && config.autoSlide && config.autoSlideStoppable ) {\n\t\t\tautoSlidePlayer = new Playback( dom.wrapper, () => {\n\t\t\t\treturn Math.min( Math.max( ( Date.now() - autoSlideStartTime ) / autoSlide, 0 ), 1 );\n\t\t\t} );\n\n\t\t\tautoSlidePlayer.on( 'click', onAutoSlidePlayerClick );\n\t\t\tautoSlidePaused = false;\n\t\t}\n\n\t\t// Add the navigation mode to the DOM so we can adjust styling\n\t\tif( config.navigationMode !== 'default' ) {\n\t\t\tdom.wrapper.setAttribute( 'data-navigation-mode', config.navigationMode );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.removeAttribute( 'data-navigation-mode' );\n\t\t}\n\n\t\tnotes.configure( config, oldConfig );\n\t\tfocus.configure( config, oldConfig );\n\t\tpointer.configure( config, oldConfig );\n\t\tcontrols.configure( config, oldConfig );\n\t\tprogress.configure( config, oldConfig );\n\t\tkeyboard.configure( config, oldConfig );\n\t\tfragments.configure( config, oldConfig );\n\t\tslideNumber.configure( config, oldConfig );\n\n\t\tsync();\n\n\t}\n\n\t/**\n\t * Binds all event listeners.\n\t */\n\tfunction addEventListeners() {\n\n\t\teventsAreBound = true;\n\n\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\t\tif( config.touch ) touch.bind();\n\t\tif( config.keyboard ) keyboard.bind();\n\t\tif( config.progress ) progress.bind();\n\t\tif( config.respondToHashChanges ) location.bind();\n\t\tcontrols.bind();\n\t\tfocus.bind();\n\n\t\tdom.slides.addEventListener( 'click', onSlidesClicked, false );\n\t\tdom.slides.addEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.addEventListener( 'click', resume, false );\n\n\t\tif( config.focusBodyOnPageVisibilityChange ) {\n\t\t\tdocument.addEventListener( 'visibilitychange', onPageVisibilityChange, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Unbinds all event listeners.\n\t */\n\tfunction removeEventListeners() {\n\n\t\teventsAreBound = false;\n\n\t\ttouch.unbind();\n\t\tfocus.unbind();\n\t\tkeyboard.unbind();\n\t\tcontrols.unbind();\n\t\tprogress.unbind();\n\t\tlocation.unbind();\n\n\t\twindow.removeEventListener( 'resize', onWindowResize, false );\n\n\t\tdom.slides.removeEventListener( 'click', onSlidesClicked, false );\n\t\tdom.slides.removeEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.removeEventListener( 'click', resume, false );\n\n\t}\n\n\t/**\n\t * Uninitializes reveal.js by undoing changes made to the\n\t * DOM and removing all event listeners.\n\t */\n\tfunction destroy() {\n\n\t\tremoveEventListeners();\n\t\tcancelAutoSlide();\n\t\tdisablePreviewLinks();\n\n\t\t// Destroy controllers\n\t\tnotes.destroy();\n\t\tfocus.destroy();\n\t\tplugins.destroy();\n\t\tpointer.destroy();\n\t\tcontrols.destroy();\n\t\tprogress.destroy();\n\t\tbackgrounds.destroy();\n\t\tslideNumber.destroy();\n\t\tjumpToSlide.destroy();\n\n\t\t// Remove event listeners\n\t\tdocument.removeEventListener( 'fullscreenchange', onFullscreenChange );\n\t\tdocument.removeEventListener( 'webkitfullscreenchange', onFullscreenChange );\n\t\tdocument.removeEventListener( 'visibilitychange', onPageVisibilityChange, false );\n\t\twindow.removeEventListener( 'message', onPostMessage, false );\n\t\twindow.removeEventListener( 'load', layout, false );\n\n\t\t// Undo DOM changes\n\t\tif( dom.pauseOverlay ) dom.pauseOverlay.remove();\n\t\tif( dom.statusElement ) dom.statusElement.remove();\n\n\t\tdocument.documentElement.classList.remove( 'reveal-full-page' );\n\n\t\tdom.wrapper.classList.remove( 'ready', 'center', 'has-horizontal-slides', 'has-vertical-slides' );\n\t\tdom.wrapper.removeAttribute( 'data-transition-speed' );\n\t\tdom.wrapper.removeAttribute( 'data-background-transition' );\n\n\t\tdom.viewport.classList.remove( 'reveal-viewport' );\n\t\tdom.viewport.style.removeProperty( '--slide-width' );\n\t\tdom.viewport.style.removeProperty( '--slide-height' );\n\n\t\tdom.slides.style.removeProperty( 'width' );\n\t\tdom.slides.style.removeProperty( 'height' );\n\t\tdom.slides.style.removeProperty( 'zoom' );\n\t\tdom.slides.style.removeProperty( 'left' );\n\t\tdom.slides.style.removeProperty( 'top' );\n\t\tdom.slides.style.removeProperty( 'bottom' );\n\t\tdom.slides.style.removeProperty( 'right' );\n\t\tdom.slides.style.removeProperty( 'transform' );\n\n\t\tArray.from( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( slide => {\n\t\t\tslide.style.removeProperty( 'display' );\n\t\t\tslide.style.removeProperty( 'top' );\n\t\t\tslide.removeAttribute( 'hidden' );\n\t\t\tslide.removeAttribute( 'aria-hidden' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Adds a listener to one of our custom reveal.js events,\n\t * like slidechanged.\n\t */\n\tfunction on( type, listener, useCapture ) {\n\n\t\trevealElement.addEventListener( type, listener, useCapture );\n\n\t}\n\n\t/**\n\t * Unsubscribes from a reveal.js event.\n\t */\n\tfunction off( type, listener, useCapture ) {\n\n\t\trevealElement.removeEventListener( type, listener, useCapture );\n\n\t}\n\n\t/**\n\t * Applies CSS transforms to the slides container. The container\n\t * is transformed from two separate sources: layout and the overview\n\t * mode.\n\t *\n\t * @param {object} transforms\n\t */\n\tfunction transformSlides( transforms ) {\n\n\t\t// Pick up new transforms from arguments\n\t\tif( typeof transforms.layout === 'string' ) slidesTransform.layout = transforms.layout;\n\t\tif( typeof transforms.overview === 'string' ) slidesTransform.overview = transforms.overview;\n\n\t\t// Apply the transforms to the slides container\n\t\tif( slidesTransform.layout ) {\n\t\t\tUtil.transformElement( dom.slides, slidesTransform.layout + ' ' + slidesTransform.overview );\n\t\t}\n\t\telse {\n\t\t\tUtil.transformElement( dom.slides, slidesTransform.overview );\n\t\t}\n\n\t}\n\n\t/**\n\t * Dispatches an event of the specified type from the\n\t * reveal DOM element.\n\t */\n\tfunction dispatchEvent({ target=dom.wrapper, type, data, bubbles=true }) {\n\n\t\tlet event = document.createEvent( 'HTMLEvents', 1, 2 );\n\t\tevent.initEvent( type, bubbles, true );\n\t\tUtil.extend( event, data );\n\t\ttarget.dispatchEvent( event );\n\n\t\tif( target === dom.wrapper ) {\n\t\t\t// If we're in an iframe, post each reveal.js event to the\n\t\t\t// parent window. Used by the notes plugin\n\t\t\tdispatchPostMessage( type );\n\t\t}\n\n\t\treturn event;\n\n\t}\n\n\t/**\n\t * Dispatched a postMessage of the given type from our window.\n\t */\n\tfunction dispatchPostMessage( type, data ) {\n\n\t\tif( config.postMessageEvents && window.parent !== window.self ) {\n\t\t\tlet message = {\n\t\t\t\tnamespace: 'reveal',\n\t\t\t\teventName: type,\n\t\t\t\tstate: getState()\n\t\t\t};\n\n\t\t\tUtil.extend( message, data );\n\n\t\t\twindow.parent.postMessage( JSON.stringify( message ), '*' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Bind preview frame links.\n\t *\n\t * @param {string} [selector=a] - selector for anchors\n\t */\n\tfunction enablePreviewLinks( selector = 'a' ) {\n\n\t\tArray.from( dom.wrapper.querySelectorAll( selector ) ).forEach( element => {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.addEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unbind preview frame links.\n\t */\n\tfunction disablePreviewLinks( selector = 'a' ) {\n\n\t\tArray.from( dom.wrapper.querySelectorAll( selector ) ).forEach( element => {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.removeEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Opens a preview window for the target URL.\n\t *\n\t * @param {string} url - url for preview iframe src\n\t */\n\tfunction showPreview( url ) {\n\n\t\tcloseOverlay();\n\n\t\tdom.overlay = document.createElement( 'div' );\n\t\tdom.overlay.classList.add( 'overlay' );\n\t\tdom.overlay.classList.add( 'overlay-preview' );\n\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\tdom.overlay.innerHTML =\n\t\t\t`
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tUnable to load iframe. This is likely due to the site's policy (x-frame-options).\n\t\t\t\t\n\t\t\t
`;\n\n\t\tdom.overlay.querySelector( 'iframe' ).addEventListener( 'load', event => {\n\t\t\tdom.overlay.classList.add( 'loaded' );\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', event => {\n\t\t\tcloseOverlay();\n\t\t\tevent.preventDefault();\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.external' ).addEventListener( 'click', event => {\n\t\t\tcloseOverlay();\n\t\t}, false );\n\n\t}\n\n\t/**\n\t * Open or close help overlay window.\n\t *\n\t * @param {Boolean} [override] Flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * help is open, false means it's closed.\n\t */\n\tfunction toggleHelp( override ){\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? showHelp() : closeOverlay();\n\t\t}\n\t\telse {\n\t\t\tif( dom.overlay ) {\n\t\t\t\tcloseOverlay();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tshowHelp();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Opens an overlay window with help material.\n\t */\n\tfunction showHelp() {\n\n\t\tif( config.help ) {\n\n\t\t\tcloseOverlay();\n\n\t\t\tdom.overlay = document.createElement( 'div' );\n\t\t\tdom.overlay.classList.add( 'overlay' );\n\t\t\tdom.overlay.classList.add( 'overlay-help' );\n\t\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\t\tlet html = '
Keyboard Shortcuts
';\n\n\t\t\tlet shortcuts = keyboard.getShortcuts(),\n\t\t\t\tbindings = keyboard.getBindings();\n\n\t\t\thtml += '
KEY | ACTION | ';\n\t\t\tfor( let key in shortcuts ) {\n\t\t\t\thtml += `${key} | ${shortcuts[ key ]} |
`;\n\t\t\t}\n\n\t\t\t// Add custom key bindings that have associated descriptions\n\t\t\tfor( let binding in bindings ) {\n\t\t\t\tif( bindings[binding].key && bindings[binding].description ) {\n\t\t\t\t\thtml += `${bindings[binding].key} | ${bindings[binding].description} |
`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thtml += '
';\n\n\t\t\tdom.overlay.innerHTML = `\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
${html}
\n\t\t\t\t
\n\t\t\t`;\n\n\t\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', event => {\n\t\t\t\tcloseOverlay();\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Closes any currently open overlay.\n\t */\n\tfunction closeOverlay() {\n\n\t\tif( dom.overlay ) {\n\t\t\tdom.overlay.parentNode.removeChild( dom.overlay );\n\t\t\tdom.overlay = null;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Applies JavaScript-controlled layout rules to the\n\t * presentation.\n\t */\n\tfunction layout() {\n\n\t\tif( dom.wrapper && !print.isPrintingPDF() ) {\n\n\t\t\tif( !config.disableLayout ) {\n\n\t\t\t\t// On some mobile devices '100vh' is taller than the visible\n\t\t\t\t// viewport which leads to part of the presentation being\n\t\t\t\t// cut off. To work around this we define our own '--vh' custom\n\t\t\t\t// property where 100x adds up to the correct height.\n\t\t\t\t//\n\t\t\t\t// https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n\t\t\t\tif( Device.isMobile && !config.embedded ) {\n\t\t\t\t\tdocument.documentElement.style.setProperty( '--vh', ( window.innerHeight * 0.01 ) + 'px' );\n\t\t\t\t}\n\n\t\t\t\tconst size = getComputedSlideSize();\n\n\t\t\t\tconst oldScale = scale;\n\n\t\t\t\t// Layout the contents of the slides\n\t\t\t\tlayoutSlideContents( config.width, config.height );\n\n\t\t\t\tdom.slides.style.width = size.width + 'px';\n\t\t\t\tdom.slides.style.height = size.height + 'px';\n\n\t\t\t\t// Determine scale of content to fit within available space\n\t\t\t\tscale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height );\n\n\t\t\t\t// Respect max/min scale settings\n\t\t\t\tscale = Math.max( scale, config.minScale );\n\t\t\t\tscale = Math.min( scale, config.maxScale );\n\n\t\t\t\t// Don't apply any scaling styles if scale is 1\n\t\t\t\tif( scale === 1 ) {\n\t\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\t\tdom.slides.style.left = '';\n\t\t\t\t\tdom.slides.style.top = '';\n\t\t\t\t\tdom.slides.style.bottom = '';\n\t\t\t\t\tdom.slides.style.right = '';\n\t\t\t\t\ttransformSlides( { layout: '' } );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\t\tdom.slides.style.left = '50%';\n\t\t\t\t\tdom.slides.style.top = '50%';\n\t\t\t\t\tdom.slides.style.bottom = 'auto';\n\t\t\t\t\tdom.slides.style.right = 'auto';\n\t\t\t\t\ttransformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );\n\t\t\t\t}\n\n\t\t\t\t// Select all slides, vertical and horizontal\n\t\t\t\tconst slides = Array.from( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) );\n\n\t\t\t\tfor( let i = 0, len = slides.length; i < len; i++ ) {\n\t\t\t\t\tconst slide = slides[ i ];\n\n\t\t\t\t\t// Don't bother updating invisible slides\n\t\t\t\t\tif( slide.style.display === 'none' ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif( config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\t\t// Vertical stacks are not centred since their section\n\t\t\t\t\t\t// children will be\n\t\t\t\t\t\tif( slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\t\t\tslide.style.top = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tslide.style.top = Math.max( ( size.height - slide.scrollHeight ) / 2, 0 ) + 'px';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tslide.style.top = '';\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif( oldScale !== scale ) {\n\t\t\t\t\tdispatchEvent({\n\t\t\t\t\t\ttype: 'resize',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\toldScale,\n\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\tsize\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdom.viewport.style.setProperty( '--slide-scale', scale );\n\n\t\t\tprogress.update();\n\t\t\tbackgrounds.updateParallax();\n\n\t\t\tif( overview.isActive() ) {\n\t\t\t\toverview.update();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies layout logic to the contents of all slides in\n\t * the presentation.\n\t *\n\t * @param {string|number} width\n\t * @param {string|number} height\n\t */\n\tfunction layoutSlideContents( width, height ) {\n\n\t\t// Handle sizing of elements with the 'r-stretch' class\n\t\tUtil.queryAll( dom.slides, 'section > .stretch, section > .r-stretch' ).forEach( element => {\n\n\t\t\t// Determine how much vertical space we can use\n\t\t\tlet remainingHeight = Util.getRemainingHeight( element, height );\n\n\t\t\t// Consider the aspect ratio of media elements\n\t\t\tif( /(img|video)/gi.test( element.nodeName ) ) {\n\t\t\t\tconst nw = element.naturalWidth || element.videoWidth,\n\t\t\t\t\t nh = element.naturalHeight || element.videoHeight;\n\n\t\t\t\tconst es = Math.min( width / nw, remainingHeight / nh );\n\n\t\t\t\telement.style.width = ( nw * es ) + 'px';\n\t\t\t\telement.style.height = ( nh * es ) + 'px';\n\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.width = width + 'px';\n\t\t\t\telement.style.height = remainingHeight + 'px';\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Calculates the computed pixel size of our slides. These\n\t * values are based on the width and height configuration\n\t * options.\n\t *\n\t * @param {number} [presentationWidth=dom.wrapper.offsetWidth]\n\t * @param {number} [presentationHeight=dom.wrapper.offsetHeight]\n\t */\n\tfunction getComputedSlideSize( presentationWidth, presentationHeight ) {\n\n\t\tconst size = {\n\t\t\t// Slide size\n\t\t\twidth: config.width,\n\t\t\theight: config.height,\n\n\t\t\t// Presentation size\n\t\t\tpresentationWidth: presentationWidth || dom.wrapper.offsetWidth,\n\t\t\tpresentationHeight: presentationHeight || dom.wrapper.offsetHeight\n\t\t};\n\n\t\t// Reduce available space by margin\n\t\tsize.presentationWidth -= ( size.presentationWidth * config.margin );\n\t\tsize.presentationHeight -= ( size.presentationHeight * config.margin );\n\n\t\t// Slide width may be a percentage of available width\n\t\tif( typeof size.width === 'string' && /%$/.test( size.width ) ) {\n\t\t\tsize.width = parseInt( size.width, 10 ) / 100 * size.presentationWidth;\n\t\t}\n\n\t\t// Slide height may be a percentage of available height\n\t\tif( typeof size.height === 'string' && /%$/.test( size.height ) ) {\n\t\t\tsize.height = parseInt( size.height, 10 ) / 100 * size.presentationHeight;\n\t\t}\n\n\t\treturn size;\n\n\t}\n\n\t/**\n\t * Stores the vertical index of a stack so that the same\n\t * vertical slide can be selected when navigating to and\n\t * from the stack.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t * @param {string|number} [v=0] Index to memorize\n\t */\n\tfunction setPreviousVerticalIndex( stack, v ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' ) {\n\t\t\tstack.setAttribute( 'data-previous-indexv', v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Retrieves the vertical index which was stored using\n\t * #setPreviousVerticalIndex() or 0 if no previous index\n\t * exists.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t */\n\tfunction getPreviousVerticalIndex( stack ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' && stack.classList.contains( 'stack' ) ) {\n\t\t\t// Prefer manually defined start-indexv\n\t\t\tconst attributeName = stack.hasAttribute( 'data-start-indexv' ) ? 'data-start-indexv' : 'data-previous-indexv';\n\n\t\t\treturn parseInt( stack.getAttribute( attributeName ) || 0, 10 );\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Checks if the current or specified slide is vertical\n\t * (nested within another slide).\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to check\n\t * orientation of\n\t * @return {Boolean}\n\t */\n\tfunction isVerticalSlide( slide = currentSlide ) {\n\n\t\treturn slide && slide.parentNode && !!slide.parentNode.nodeName.match( /section/i );\n\n\t}\n\n\t/**\n\t * Returns true if we're on the last slide in the current\n\t * vertical stack.\n\t */\n\tfunction isLastVerticalSlide() {\n\n\t\tif( currentSlide && isVerticalSlide( currentSlide ) ) {\n\t\t\t// Does this slide have a next sibling?\n\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns true if we're currently on the first slide in\n\t * the presentation.\n\t */\n\tfunction isFirstSlide() {\n\n\t\treturn indexh === 0 && indexv === 0;\n\n\t}\n\n\t/**\n\t * Returns true if we're currently on the last slide in\n\t * the presenation. If the last slide is a stack, we only\n\t * consider this the last slide if it's at the end of the\n\t * stack.\n\t */\n\tfunction isLastSlide() {\n\n\t\tif( currentSlide ) {\n\t\t\t// Does this slide have a next sibling?\n\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\t// If it's vertical, does its parent have a next sibling?\n\t\t\tif( isVerticalSlide( currentSlide ) && currentSlide.parentNode.nextElementSibling ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Enters the paused mode which fades everything on screen to\n\t * black.\n\t */\n\tfunction pause() {\n\n\t\tif( config.pause ) {\n\t\t\tconst wasPaused = dom.wrapper.classList.contains( 'paused' );\n\n\t\t\tcancelAutoSlide();\n\t\t\tdom.wrapper.classList.add( 'paused' );\n\n\t\t\tif( wasPaused === false ) {\n\t\t\t\tdispatchEvent({ type: 'paused' });\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Exits from the paused mode.\n\t */\n\tfunction resume() {\n\n\t\tconst wasPaused = dom.wrapper.classList.contains( 'paused' );\n\t\tdom.wrapper.classList.remove( 'paused' );\n\n\t\tcueAutoSlide();\n\n\t\tif( wasPaused ) {\n\t\t\tdispatchEvent({ type: 'resumed' });\n\t\t}\n\n\t}\n\n\t/**\n\t * Toggles the paused mode on and off.\n\t */\n\tfunction togglePause( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? pause() : resume();\n\t\t}\n\t\telse {\n\t\t\tisPaused() ? resume() : pause();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if we are currently in the paused mode.\n\t *\n\t * @return {Boolean}\n\t */\n\tfunction isPaused() {\n\n\t\treturn dom.wrapper.classList.contains( 'paused' );\n\n\t}\n\n\t/**\n\t * Toggles visibility of the jump-to-slide UI.\n\t */\n\tfunction toggleJumpToSlide( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? jumpToSlide.show() : jumpToSlide.hide();\n\t\t}\n\t\telse {\n\t\t\tjumpToSlide.isVisible() ? jumpToSlide.hide() : jumpToSlide.show();\n\t\t}\n\n\t}\n\n\t/**\n\t * Toggles the auto slide mode on and off.\n\t *\n\t * @param {Boolean} [override] Flag which sets the desired state.\n\t * True means autoplay starts, false means it stops.\n\t */\n\n\tfunction toggleAutoSlide( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t\telse {\n\t\t\tautoSlidePaused ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the auto slide mode is currently on.\n\t *\n\t * @return {Boolean}\n\t */\n\tfunction isAutoSliding() {\n\n\t\treturn !!( autoSlide && !autoSlidePaused );\n\n\t}\n\n\t/**\n\t * Steps from the current point in the presentation to the\n\t * slide which matches the specified horizontal and vertical\n\t * indices.\n\t *\n\t * @param {number} [h=indexh] Horizontal index of the target slide\n\t * @param {number} [v=indexv] Vertical index of the target slide\n\t * @param {number} [f] Index of a fragment within the\n\t * target slide to activate\n\t * @param {number} [origin] Origin for use in multimaster environments\n\t */\n\tfunction slide( h, v, f, origin ) {\n\n\t\t// Dispatch an event before the slide\n\t\tconst slidechange = dispatchEvent({\n\t\t\ttype: 'beforeslidechange',\n\t\t\tdata: {\n\t\t\t\tindexh: h === undefined ? indexh : h,\n\t\t\t\tindexv: v === undefined ? indexv : v,\n\t\t\t\torigin\n\t\t\t}\n\t\t});\n\n\t\t// Abort if this slide change was prevented by an event listener\n\t\tif( slidechange.defaultPrevented ) return;\n\n\t\t// Remember where we were at before\n\t\tpreviousSlide = currentSlide;\n\n\t\t// Query all horizontal slides in the deck\n\t\tconst horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );\n\n\t\t// Abort if there are no slides\n\t\tif( horizontalSlides.length === 0 ) return;\n\n\t\t// If no vertical index is specified and the upcoming slide is a\n\t\t// stack, resume at its previous vertical index\n\t\tif( v === undefined && !overview.isActive() ) {\n\t\t\tv = getPreviousVerticalIndex( horizontalSlides[ h ] );\n\t\t}\n\n\t\t// If we were on a vertical stack, remember what vertical index\n\t\t// it was on so we can resume at the same position when returning\n\t\tif( previousSlide && previousSlide.parentNode && previousSlide.parentNode.classList.contains( 'stack' ) ) {\n\t\t\tsetPreviousVerticalIndex( previousSlide.parentNode, indexv );\n\t\t}\n\n\t\t// Remember the state before this slide\n\t\tconst stateBefore = state.concat();\n\n\t\t// Reset the state array\n\t\tstate.length = 0;\n\n\t\tlet indexhBefore = indexh || 0,\n\t\t\tindexvBefore = indexv || 0;\n\n\t\t// Activate and transition to the new slide\n\t\tindexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h );\n\t\tindexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v );\n\n\t\t// Dispatch an event if the slide changed\n\t\tlet slideChanged = ( indexh !== indexhBefore || indexv !== indexvBefore );\n\n\t\t// Ensure that the previous slide is never the same as the current\n\t\tif( !slideChanged ) previousSlide = null;\n\n\t\t// Find the current horizontal slide and any possible vertical slides\n\t\t// within it\n\t\tlet currentHorizontalSlide = horizontalSlides[ indexh ],\n\t\t\tcurrentVerticalSlides = currentHorizontalSlide.querySelectorAll( 'section' );\n\n\t\t// Store references to the previous and current slides\n\t\tcurrentSlide = currentVerticalSlides[ indexv ] || currentHorizontalSlide;\n\n\t\tlet autoAnimateTransition = false;\n\n\t\t// Detect if we're moving between two auto-animated slides\n\t\tif( slideChanged && previousSlide && currentSlide && !overview.isActive() ) {\n\n\t\t\t// If this is an auto-animated transition, we disable the\n\t\t\t// regular slide transition\n\t\t\t//\n\t\t\t// Note 20-03-2020:\n\t\t\t// This needs to happen before we update slide visibility,\n\t\t\t// otherwise transitions will still run in Safari.\n\t\t\tif( previousSlide.hasAttribute( 'data-auto-animate' ) && currentSlide.hasAttribute( 'data-auto-animate' )\n\t\t\t\t\t&& previousSlide.getAttribute( 'data-auto-animate-id' ) === currentSlide.getAttribute( 'data-auto-animate-id' )\n\t\t\t\t\t&& !( ( indexh > indexhBefore || indexv > indexvBefore ) ? currentSlide : previousSlide ).hasAttribute( 'data-auto-animate-restart' ) ) {\n\n\t\t\t\tautoAnimateTransition = true;\n\t\t\t\tdom.slides.classList.add( 'disable-slide-transitions' );\n\t\t\t}\n\n\t\t\ttransition = 'running';\n\n\t\t}\n\n\t\t// Update the visibility of slides now that the indices have changed\n\t\tupdateSlidesVisibility();\n\n\t\tlayout();\n\n\t\t// Update the overview if it's currently active\n\t\tif( overview.isActive() ) {\n\t\t\toverview.update();\n\t\t}\n\n\t\t// Show fragment, if specified\n\t\tif( typeof f !== 'undefined' ) {\n\t\t\tfragments.goto( f );\n\t\t}\n\n\t\t// Solves an edge case where the previous slide maintains the\n\t\t// 'present' class when navigating between adjacent vertical\n\t\t// stacks\n\t\tif( previousSlide && previousSlide !== currentSlide ) {\n\t\t\tpreviousSlide.classList.remove( 'present' );\n\t\t\tpreviousSlide.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t// Reset all slides upon navigate to home\n\t\t\tif( isFirstSlide() ) {\n\t\t\t\t// Launch async task\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tgetVerticalStacks().forEach( slide => {\n\t\t\t\t\t\tsetPreviousVerticalIndex( slide, 0 );\n\t\t\t\t\t} );\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t}\n\n\t\t// Apply the new state\n\t\tstateLoop: for( let i = 0, len = state.length; i < len; i++ ) {\n\t\t\t// Check if this state existed on the previous slide. If it\n\t\t\t// did, we will avoid adding it repeatedly\n\t\t\tfor( let j = 0; j < stateBefore.length; j++ ) {\n\t\t\t\tif( stateBefore[j] === state[i] ) {\n\t\t\t\t\tstateBefore.splice( j, 1 );\n\t\t\t\t\tcontinue stateLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdom.viewport.classList.add( state[i] );\n\n\t\t\t// Dispatch custom event matching the state's name\n\t\t\tdispatchEvent({ type: state[i] });\n\t\t}\n\n\t\t// Clean up the remains of the previous state\n\t\twhile( stateBefore.length ) {\n\t\t\tdom.viewport.classList.remove( stateBefore.pop() );\n\t\t}\n\n\t\tif( slideChanged ) {\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'slidechanged',\n\t\t\t\tdata: {\n\t\t\t\t\tindexh,\n\t\t\t\t\tindexv,\n\t\t\t\t\tpreviousSlide,\n\t\t\t\t\tcurrentSlide,\n\t\t\t\t\torigin\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Handle embedded content\n\t\tif( slideChanged || !previousSlide ) {\n\t\t\tslideContent.stopEmbeddedContent( previousSlide );\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t}\n\n\t\t// Announce the current slide contents to screen readers\n\t\t// Use animation frame to prevent getComputedStyle in getStatusText\n\t\t// from triggering layout mid-frame\n\t\trequestAnimationFrame( () => {\n\t\t\tannounceStatus( getStatusText( currentSlide ) );\n\t\t});\n\n\t\tprogress.update();\n\t\tcontrols.update();\n\t\tnotes.update();\n\t\tbackgrounds.update();\n\t\tbackgrounds.updateParallax();\n\t\tslideNumber.update();\n\t\tfragments.update();\n\n\t\t// Update the URL hash\n\t\tlocation.writeURL();\n\n\t\tcueAutoSlide();\n\n\t\t// Auto-animation\n\t\tif( autoAnimateTransition ) {\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tdom.slides.classList.remove( 'disable-slide-transitions' );\n\t\t\t}, 0 );\n\n\t\t\tif( config.autoAnimate ) {\n\t\t\t\t// Run the auto-animation between our slides\n\t\t\t\tautoAnimate.run( previousSlide, currentSlide );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Syncs the presentation with the current DOM. Useful\n\t * when new slides or control elements are added or when\n\t * the configuration has changed.\n\t */\n\tfunction sync() {\n\n\t\t// Subscribe to input\n\t\tremoveEventListeners();\n\t\taddEventListeners();\n\n\t\t// Force a layout to make sure the current config is accounted for\n\t\tlayout();\n\n\t\t// Reflect the current autoSlide value\n\t\tautoSlide = config.autoSlide;\n\n\t\t// Start auto-sliding if it's enabled\n\t\tcueAutoSlide();\n\n\t\t// Re-create all slide backgrounds\n\t\tbackgrounds.create();\n\n\t\t// Write the current hash to the URL\n\t\tlocation.writeURL();\n\n\t\tif( config.sortFragmentsOnSync === true ) {\n\t\t\tfragments.sortAll();\n\t\t}\n\n\t\tcontrols.update();\n\t\tprogress.update();\n\n\t\tupdateSlidesVisibility();\n\n\t\tnotes.update();\n\t\tnotes.updateVisibility();\n\t\tbackgrounds.update( true );\n\t\tslideNumber.update();\n\t\tslideContent.formatEmbeddedContent();\n\n\t\t// Start or stop embedded content depending on global config\n\t\tif( config.autoPlayMedia === false ) {\n\t\t\tslideContent.stopEmbeddedContent( currentSlide, { unloadIframes: false } );\n\t\t}\n\t\telse {\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t}\n\n\t\tif( overview.isActive() ) {\n\t\t\toverview.layout();\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates reveal.js to keep in sync with new slide attributes. For\n\t * example, if you add a new `data-background-image` you can call\n\t * this to have reveal.js render the new background image.\n\t *\n\t * Similar to #sync() but more efficient when you only need to\n\t * refresh a specific slide.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tfunction syncSlide( slide = currentSlide ) {\n\n\t\tbackgrounds.sync( slide );\n\t\tfragments.sync( slide );\n\n\t\tslideContent.load( slide );\n\n\t\tbackgrounds.update();\n\t\tnotes.update();\n\n\t}\n\n\t/**\n\t * Resets all vertical slides so that only the first\n\t * is visible.\n\t */\n\tfunction resetVerticalSlides() {\n\n\t\tgetHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tUtil.queryAll( horizontalSlide, 'section' ).forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tif( y > 0 ) {\n\t\t\t\t\tverticalSlide.classList.remove( 'present' );\n\t\t\t\t\tverticalSlide.classList.remove( 'past' );\n\t\t\t\t\tverticalSlide.classList.add( 'future' );\n\t\t\t\t\tverticalSlide.setAttribute( 'aria-hidden', 'true' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Randomly shuffles all slides in the deck.\n\t */\n\tfunction shuffle( slides = getHorizontalSlides() ) {\n\n\t\tslides.forEach( ( slide, i ) => {\n\n\t\t\t// Insert the slide next to a randomly picked sibling slide\n\t\t\t// slide. This may cause the slide to insert before itself,\n\t\t\t// but that's not an issue.\n\t\t\tlet beforeSlide = slides[ Math.floor( Math.random() * slides.length ) ];\n\t\t\tif( beforeSlide.parentNode === slide.parentNode ) {\n\t\t\t\tslide.parentNode.insertBefore( slide, beforeSlide );\n\t\t\t}\n\n\t\t\t// Randomize the order of vertical slides (if there are any)\n\t\t\tlet verticalSlides = slide.querySelectorAll( 'section' );\n\t\t\tif( verticalSlides.length ) {\n\t\t\t\tshuffle( verticalSlides );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates one dimension of slides by showing the slide\n\t * with the specified index.\n\t *\n\t * @param {string} selector A CSS selector that will fetch\n\t * the group of slides we are working with\n\t * @param {number} index The index of the slide that should be\n\t * shown\n\t *\n\t * @return {number} The index of the slide that is now shown,\n\t * might differ from the passed in index if it was out of\n\t * bounds.\n\t */\n\tfunction updateSlides( selector, index ) {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tlet slides = Util.queryAll( dom.wrapper, selector ),\n\t\t\tslidesLength = slides.length;\n\n\t\tlet printMode = print.isPrintingPDF();\n\t\tlet loopedForwards = false;\n\t\tlet loopedBackwards = false;\n\n\t\tif( slidesLength ) {\n\n\t\t\t// Should the index loop?\n\t\t\tif( config.loop ) {\n\t\t\t\tif( index >= slidesLength ) loopedForwards = true;\n\n\t\t\t\tindex %= slidesLength;\n\n\t\t\t\tif( index < 0 ) {\n\t\t\t\t\tindex = slidesLength + index;\n\t\t\t\t\tloopedBackwards = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Enforce max and minimum index bounds\n\t\t\tindex = Math.max( Math.min( index, slidesLength - 1 ), 0 );\n\n\t\t\tfor( let i = 0; i < slidesLength; i++ ) {\n\t\t\t\tlet element = slides[i];\n\n\t\t\t\tlet reverse = config.rtl && !isVerticalSlide( element );\n\n\t\t\t\t// Avoid .remove() with multiple args for IE11 support\n\t\t\t\telement.classList.remove( 'past' );\n\t\t\t\telement.classList.remove( 'present' );\n\t\t\t\telement.classList.remove( 'future' );\n\n\t\t\t\t// http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute\n\t\t\t\telement.setAttribute( 'hidden', '' );\n\t\t\t\telement.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t\t// If this element contains vertical slides\n\t\t\t\tif( element.querySelector( 'section' ) ) {\n\t\t\t\t\telement.classList.add( 'stack' );\n\t\t\t\t}\n\n\t\t\t\t// If we're printing static slides, all slides are \"present\"\n\t\t\t\tif( printMode ) {\n\t\t\t\t\telement.classList.add( 'present' );\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif( i < index ) {\n\t\t\t\t\t// Any element previous to index is given the 'past' class\n\t\t\t\t\telement.classList.add( reverse ? 'future' : 'past' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\t// Show all fragments in prior slides\n\t\t\t\t\t\tshowFragmentsIn( element );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( i > index ) {\n\t\t\t\t\t// Any element subsequent to index is given the 'future' class\n\t\t\t\t\telement.classList.add( reverse ? 'past' : 'future' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\t// Hide all fragments in future slides\n\t\t\t\t\t\thideFragmentsIn( element );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Update the visibility of fragments when a presentation loops\n\t\t\t\t// in either direction\n\t\t\t\telse if( i === index && config.fragments ) {\n\t\t\t\t\tif( loopedForwards ) {\n\t\t\t\t\t\thideFragmentsIn( element );\n\t\t\t\t\t}\n\t\t\t\t\telse if( loopedBackwards ) {\n\t\t\t\t\t\tshowFragmentsIn( element );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet slide = slides[index];\n\t\t\tlet wasPresent = slide.classList.contains( 'present' );\n\n\t\t\t// Mark the current slide as present\n\t\t\tslide.classList.add( 'present' );\n\t\t\tslide.removeAttribute( 'hidden' );\n\t\t\tslide.removeAttribute( 'aria-hidden' );\n\n\t\t\tif( !wasPresent ) {\n\t\t\t\t// Dispatch an event indicating the slide is now visible\n\t\t\t\tdispatchEvent({\n\t\t\t\t\ttarget: slide,\n\t\t\t\t\ttype: 'visible',\n\t\t\t\t\tbubbles: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If this slide has a state associated with it, add it\n\t\t\t// onto the current state of the deck\n\t\t\tlet slideState = slide.getAttribute( 'data-state' );\n\t\t\tif( slideState ) {\n\t\t\t\tstate = state.concat( slideState.split( ' ' ) );\n\t\t\t}\n\n\t\t}\n\t\telse {\n\t\t\t// Since there are no slides we can't be anywhere beyond the\n\t\t\t// zeroth index\n\t\t\tindex = 0;\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Shows all fragment elements within the given contaienr.\n\t */\n\tfunction showFragmentsIn( container ) {\n\n\t\tUtil.queryAll( container, '.fragment' ).forEach( fragment => {\n\t\t\tfragment.classList.add( 'visible' );\n\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Hides all fragment elements within the given contaienr.\n\t */\n\tfunction hideFragmentsIn( container ) {\n\n\t\tUtil.queryAll( container, '.fragment.visible' ).forEach( fragment => {\n\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Optimization method; hide all slides that are far away\n\t * from the present slide.\n\t */\n\tfunction updateSlidesVisibility() {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tlet horizontalSlides = getHorizontalSlides(),\n\t\t\thorizontalSlidesLength = horizontalSlides.length,\n\t\t\tdistanceX,\n\t\t\tdistanceY;\n\n\t\tif( horizontalSlidesLength && typeof indexh !== 'undefined' ) {\n\n\t\t\t// The number of steps away from the present slide that will\n\t\t\t// be visible\n\t\t\tlet viewDistance = overview.isActive() ? 10 : config.viewDistance;\n\n\t\t\t// Shorten the view distance on devices that typically have\n\t\t\t// less resources\n\t\t\tif( Device.isMobile ) {\n\t\t\t\tviewDistance = overview.isActive() ? 6 : config.mobileViewDistance;\n\t\t\t}\n\n\t\t\t// All slides need to be visible when exporting to PDF\n\t\t\tif( print.isPrintingPDF() ) {\n\t\t\t\tviewDistance = Number.MAX_VALUE;\n\t\t\t}\n\n\t\t\tfor( let x = 0; x < horizontalSlidesLength; x++ ) {\n\t\t\t\tlet horizontalSlide = horizontalSlides[x];\n\n\t\t\t\tlet verticalSlides = Util.queryAll( horizontalSlide, 'section' ),\n\t\t\t\t\tverticalSlidesLength = verticalSlides.length;\n\n\t\t\t\t// Determine how far away this slide is from the present\n\t\t\t\tdistanceX = Math.abs( ( indexh || 0 ) - x ) || 0;\n\n\t\t\t\t// If the presentation is looped, distance should measure\n\t\t\t\t// 1 between the first and last slides\n\t\t\t\tif( config.loop ) {\n\t\t\t\t\tdistanceX = Math.abs( ( ( indexh || 0 ) - x ) % ( horizontalSlidesLength - viewDistance ) ) || 0;\n\t\t\t\t}\n\n\t\t\t\t// Show the horizontal slide if it's within the view distance\n\t\t\t\tif( distanceX < viewDistance ) {\n\t\t\t\t\tslideContent.load( horizontalSlide );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslideContent.unload( horizontalSlide );\n\t\t\t\t}\n\n\t\t\t\tif( verticalSlidesLength ) {\n\n\t\t\t\t\tlet oy = getPreviousVerticalIndex( horizontalSlide );\n\n\t\t\t\t\tfor( let y = 0; y < verticalSlidesLength; y++ ) {\n\t\t\t\t\t\tlet verticalSlide = verticalSlides[y];\n\n\t\t\t\t\t\tdistanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy );\n\n\t\t\t\t\t\tif( distanceX + distanceY < viewDistance ) {\n\t\t\t\t\t\t\tslideContent.load( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tslideContent.unload( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flag if there are ANY vertical slides, anywhere in the deck\n\t\t\tif( hasVerticalSlides() ) {\n\t\t\t\tdom.wrapper.classList.add( 'has-vertical-slides' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.wrapper.classList.remove( 'has-vertical-slides' );\n\t\t\t}\n\n\t\t\t// Flag if there are ANY horizontal slides, anywhere in the deck\n\t\t\tif( hasHorizontalSlides() ) {\n\t\t\t\tdom.wrapper.classList.add( 'has-horizontal-slides' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.wrapper.classList.remove( 'has-horizontal-slides' );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Determine what available routes there are for navigation.\n\t *\n\t * @return {{left: boolean, right: boolean, up: boolean, down: boolean}}\n\t */\n\tfunction availableRoutes({ includeFragments = false } = {}) {\n\n\t\tlet horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ),\n\t\t\tverticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR );\n\n\t\tlet routes = {\n\t\t\tleft: indexh > 0,\n\t\t\tright: indexh < horizontalSlides.length - 1,\n\t\t\tup: indexv > 0,\n\t\t\tdown: indexv < verticalSlides.length - 1\n\t\t};\n\n\t\t// Looped presentations can always be navigated as long as\n\t\t// there are slides available\n\t\tif( config.loop ) {\n\t\t\tif( horizontalSlides.length > 1 ) {\n\t\t\t\troutes.left = true;\n\t\t\t\troutes.right = true;\n\t\t\t}\n\n\t\t\tif( verticalSlides.length > 1 ) {\n\t\t\t\troutes.up = true;\n\t\t\t\troutes.down = true;\n\t\t\t}\n\t\t}\n\n\t\tif ( horizontalSlides.length > 1 && config.navigationMode === 'linear' ) {\n\t\t\troutes.right = routes.right || routes.down;\n\t\t\troutes.left = routes.left || routes.up;\n\t\t}\n\n\t\t// If includeFragments is set, a route will be considered\n\t\t// available if either a slid OR fragment is available in\n\t\t// the given direction\n\t\tif( includeFragments === true ) {\n\t\t\tlet fragmentRoutes = fragments.availableRoutes();\n\t\t\troutes.left = routes.left || fragmentRoutes.prev;\n\t\t\troutes.up = routes.up || fragmentRoutes.prev;\n\t\t\troutes.down = routes.down || fragmentRoutes.next;\n\t\t\troutes.right = routes.right || fragmentRoutes.next;\n\t\t}\n\n\t\t// Reverse horizontal controls for rtl\n\t\tif( config.rtl ) {\n\t\t\tlet left = routes.left;\n\t\t\troutes.left = routes.right;\n\t\t\troutes.right = left;\n\t\t}\n\n\t\treturn routes;\n\n\t}\n\n\t/**\n\t * Returns the number of past slides. This can be used as a global\n\t * flattened index for slides.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide we're counting before\n\t *\n\t * @return {number} Past slide count\n\t */\n\tfunction getSlidePastCount( slide = currentSlide ) {\n\n\t\tlet horizontalSlides = getHorizontalSlides();\n\n\t\t// The number of past slides\n\t\tlet pastCount = 0;\n\n\t\t// Step through all slides and count the past ones\n\t\tmainLoop: for( let i = 0; i < horizontalSlides.length; i++ ) {\n\n\t\t\tlet horizontalSlide = horizontalSlides[i];\n\t\t\tlet verticalSlides = horizontalSlide.querySelectorAll( 'section' );\n\n\t\t\tfor( let j = 0; j < verticalSlides.length; j++ ) {\n\n\t\t\t\t// Stop as soon as we arrive at the present\n\t\t\t\tif( verticalSlides[j] === slide ) {\n\t\t\t\t\tbreak mainLoop;\n\t\t\t\t}\n\n\t\t\t\t// Don't count slides with the \"uncounted\" class\n\t\t\t\tif( verticalSlides[j].dataset.visibility !== 'uncounted' ) {\n\t\t\t\t\tpastCount++;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Stop as soon as we arrive at the present\n\t\t\tif( horizontalSlide === slide ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Don't count the wrapping section for vertical slides and\n\t\t\t// slides marked as uncounted\n\t\t\tif( horizontalSlide.classList.contains( 'stack' ) === false && horizontalSlide.dataset.visibility !== 'uncounted' ) {\n\t\t\t\tpastCount++;\n\t\t\t}\n\n\t\t}\n\n\t\treturn pastCount;\n\n\t}\n\n\t/**\n\t * Returns a value ranging from 0-1 that represents\n\t * how far into the presentation we have navigated.\n\t *\n\t * @return {number}\n\t */\n\tfunction getProgress() {\n\n\t\t// The number of past and total slides\n\t\tlet totalCount = getTotalSlides();\n\t\tlet pastCount = getSlidePastCount();\n\n\t\tif( currentSlide ) {\n\n\t\t\tlet allFragments = currentSlide.querySelectorAll( '.fragment' );\n\n\t\t\t// If there are fragments in the current slide those should be\n\t\t\t// accounted for in the progress.\n\t\t\tif( allFragments.length > 0 ) {\n\t\t\t\tlet visibleFragments = currentSlide.querySelectorAll( '.fragment.visible' );\n\n\t\t\t\t// This value represents how big a portion of the slide progress\n\t\t\t\t// that is made up by its fragments (0-1)\n\t\t\t\tlet fragmentWeight = 0.9;\n\n\t\t\t\t// Add fragment progress to the past slide count\n\t\t\t\tpastCount += ( visibleFragments.length / allFragments.length ) * fragmentWeight;\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.min( pastCount / ( totalCount - 1 ), 1 );\n\n\t}\n\n\t/**\n\t * Retrieves the h/v location and fragment of the current,\n\t * or specified, slide.\n\t *\n\t * @param {HTMLElement} [slide] If specified, the returned\n\t * index will be for this slide rather than the currently\n\t * active one\n\t *\n\t * @return {{h: number, v: number, f: number}}\n\t */\n\tfunction getIndices( slide ) {\n\n\t\t// By default, return the current indices\n\t\tlet h = indexh,\n\t\t\tv = indexv,\n\t\t\tf;\n\n\t\t// If a slide is specified, return the indices of that slide\n\t\tif( slide ) {\n\t\t\tlet isVertical = isVerticalSlide( slide );\n\t\t\tlet slideh = isVertical ? slide.parentNode : slide;\n\n\t\t\t// Select all horizontal slides\n\t\t\tlet horizontalSlides = getHorizontalSlides();\n\n\t\t\t// Now that we know which the horizontal slide is, get its index\n\t\t\th = Math.max( horizontalSlides.indexOf( slideh ), 0 );\n\n\t\t\t// Assume we're not vertical\n\t\t\tv = undefined;\n\n\t\t\t// If this is a vertical slide, grab the vertical index\n\t\t\tif( isVertical ) {\n\t\t\t\tv = Math.max( Util.queryAll( slide.parentNode, 'section' ).indexOf( slide ), 0 );\n\t\t\t}\n\t\t}\n\n\t\tif( !slide && currentSlide ) {\n\t\t\tlet hasFragments = currentSlide.querySelectorAll( '.fragment' ).length > 0;\n\t\t\tif( hasFragments ) {\n\t\t\t\tlet currentFragment = currentSlide.querySelector( '.current-fragment' );\n\t\t\t\tif( currentFragment && currentFragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\tf = parseInt( currentFragment.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tf = currentSlide.querySelectorAll( '.fragment.visible' ).length - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { h, v, f };\n\n\t}\n\n\t/**\n\t * Retrieves all slides in this presentation.\n\t */\n\tfunction getSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, SLIDES_SELECTOR + ':not(.stack):not([data-visibility=\"uncounted\"])' );\n\n\t}\n\n\t/**\n\t * Returns a list of all horizontal slides in the deck. Each\n\t * vertical stack is included as one horizontal slide in the\n\t * resulting array.\n\t */\n\tfunction getHorizontalSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR );\n\n\t}\n\n\t/**\n\t * Returns all vertical slides that exist within this deck.\n\t */\n\tfunction getVerticalSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, '.slides>section>section' );\n\n\t}\n\n\t/**\n\t * Returns all vertical stacks (each stack can contain multiple slides).\n\t */\n\tfunction getVerticalStacks() {\n\n\t\treturn Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.stack');\n\n\t}\n\n\t/**\n\t * Returns true if there are at least two horizontal slides.\n\t */\n\tfunction hasHorizontalSlides() {\n\n\t\treturn getHorizontalSlides().length > 1;\n\t}\n\n\t/**\n\t * Returns true if there are at least two vertical slides.\n\t */\n\tfunction hasVerticalSlides() {\n\n\t\treturn getVerticalSlides().length > 1;\n\n\t}\n\n\t/**\n\t * Returns an array of objects where each object represents the\n\t * attributes on its respective slide.\n\t */\n\tfunction getSlidesAttributes() {\n\n\t\treturn getSlides().map( slide => {\n\n\t\t\tlet attributes = {};\n\t\t\tfor( let i = 0; i < slide.attributes.length; i++ ) {\n\t\t\t\tlet attribute = slide.attributes[ i ];\n\t\t\t\tattributes[ attribute.name ] = attribute.value;\n\t\t\t}\n\t\t\treturn attributes;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Retrieves the total number of slides in this presentation.\n\t *\n\t * @return {number}\n\t */\n\tfunction getTotalSlides() {\n\n\t\treturn getSlides().length;\n\n\t}\n\n\t/**\n\t * Returns the slide element matching the specified index.\n\t *\n\t * @return {HTMLElement}\n\t */\n\tfunction getSlide( x, y ) {\n\n\t\tlet horizontalSlide = getHorizontalSlides()[ x ];\n\t\tlet verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' );\n\n\t\tif( verticalSlides && verticalSlides.length && typeof y === 'number' ) {\n\t\t\treturn verticalSlides ? verticalSlides[ y ] : undefined;\n\t\t}\n\n\t\treturn horizontalSlide;\n\n\t}\n\n\t/**\n\t * Returns the background element for the given slide.\n\t * All slides, even the ones with no background properties\n\t * defined, have a background element so as long as the\n\t * index is valid an element will be returned.\n\t *\n\t * @param {mixed} x Horizontal background index OR a slide\n\t * HTML element\n\t * @param {number} y Vertical background index\n\t * @return {(HTMLElement[]|*)}\n\t */\n\tfunction getSlideBackground( x, y ) {\n\n\t\tlet slide = typeof x === 'number' ? getSlide( x, y ) : x;\n\t\tif( slide ) {\n\t\t\treturn slide.slideBackgroundElement;\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\t/**\n\t * Retrieves the current state of the presentation as\n\t * an object. This state can then be restored at any\n\t * time.\n\t *\n\t * @return {{indexh: number, indexv: number, indexf: number, paused: boolean, overview: boolean}}\n\t */\n\tfunction getState() {\n\n\t\tlet indices = getIndices();\n\n\t\treturn {\n\t\t\tindexh: indices.h,\n\t\t\tindexv: indices.v,\n\t\t\tindexf: indices.f,\n\t\t\tpaused: isPaused(),\n\t\t\toverview: overview.isActive()\n\t\t};\n\n\t}\n\n\t/**\n\t * Restores the presentation to the given state.\n\t *\n\t * @param {object} state As generated by getState()\n\t * @see {@link getState} generates the parameter `state`\n\t */\n\tfunction setState( state ) {\n\n\t\tif( typeof state === 'object' ) {\n\t\t\tslide( Util.deserialize( state.indexh ), Util.deserialize( state.indexv ), Util.deserialize( state.indexf ) );\n\n\t\t\tlet pausedFlag = Util.deserialize( state.paused ),\n\t\t\t\toverviewFlag = Util.deserialize( state.overview );\n\n\t\t\tif( typeof pausedFlag === 'boolean' && pausedFlag !== isPaused() ) {\n\t\t\t\ttogglePause( pausedFlag );\n\t\t\t}\n\n\t\t\tif( typeof overviewFlag === 'boolean' && overviewFlag !== overview.isActive() ) {\n\t\t\t\toverview.toggle( overviewFlag );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Cues a new automated slide if enabled in the config.\n\t */\n\tfunction cueAutoSlide() {\n\n\t\tcancelAutoSlide();\n\n\t\tif( currentSlide && config.autoSlide !== false ) {\n\n\t\t\tlet fragment = currentSlide.querySelector( '.current-fragment' );\n\n\t\t\t// When the slide first appears there is no \"current\" fragment so\n\t\t\t// we look for a data-autoslide timing on the first fragment\n\t\t\tif( !fragment ) fragment = currentSlide.querySelector( '.fragment' );\n\n\t\t\tlet fragmentAutoSlide = fragment ? fragment.getAttribute( 'data-autoslide' ) : null;\n\t\t\tlet parentAutoSlide = currentSlide.parentNode ? currentSlide.parentNode.getAttribute( 'data-autoslide' ) : null;\n\t\t\tlet slideAutoSlide = currentSlide.getAttribute( 'data-autoslide' );\n\n\t\t\t// Pick value in the following priority order:\n\t\t\t// 1. Current fragment's data-autoslide\n\t\t\t// 2. Current slide's data-autoslide\n\t\t\t// 3. Parent slide's data-autoslide\n\t\t\t// 4. Global autoSlide setting\n\t\t\tif( fragmentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( fragmentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( slideAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( slideAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( parentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( parentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tautoSlide = config.autoSlide;\n\n\t\t\t\t// If there are media elements with data-autoplay,\n\t\t\t\t// automatically set the autoSlide duration to the\n\t\t\t\t// length of that media. Not applicable if the slide\n\t\t\t\t// is divided up into fragments.\n\t\t\t\t// playbackRate is accounted for in the duration.\n\t\t\t\tif( currentSlide.querySelectorAll( '.fragment' ).length === 0 ) {\n\t\t\t\t\tUtil.queryAll( currentSlide, 'video, audio' ).forEach( el => {\n\t\t\t\t\t\tif( el.hasAttribute( 'data-autoplay' ) ) {\n\t\t\t\t\t\t\tif( autoSlide && (el.duration * 1000 / el.playbackRate ) > autoSlide ) {\n\t\t\t\t\t\t\t\tautoSlide = ( el.duration * 1000 / el.playbackRate ) + 1000;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cue the next auto-slide if:\n\t\t\t// - There is an autoSlide value\n\t\t\t// - Auto-sliding isn't paused by the user\n\t\t\t// - The presentation isn't paused\n\t\t\t// - The overview isn't active\n\t\t\t// - The presentation isn't over\n\t\t\tif( autoSlide && !autoSlidePaused && !isPaused() && !overview.isActive() && ( !isLastSlide() || fragments.availableRoutes().next || config.loop === true ) ) {\n\t\t\t\tautoSlideTimeout = setTimeout( () => {\n\t\t\t\t\tif( typeof config.autoSlideMethod === 'function' ) {\n\t\t\t\t\t\tconfig.autoSlideMethod()\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnavigateNext();\n\t\t\t\t\t}\n\t\t\t\t\tcueAutoSlide();\n\t\t\t\t}, autoSlide );\n\t\t\t\tautoSlideStartTime = Date.now();\n\t\t\t}\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( autoSlideTimeout !== -1 );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Cancels any ongoing request to auto-slide.\n\t */\n\tfunction cancelAutoSlide() {\n\n\t\tclearTimeout( autoSlideTimeout );\n\t\tautoSlideTimeout = -1;\n\n\t}\n\n\tfunction pauseAutoSlide() {\n\n\t\tif( autoSlide && !autoSlidePaused ) {\n\t\t\tautoSlidePaused = true;\n\t\t\tdispatchEvent({ type: 'autoslidepaused' });\n\t\t\tclearTimeout( autoSlideTimeout );\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( false );\n\t\t\t}\n\t\t}\n\n\t}\n\n\tfunction resumeAutoSlide() {\n\n\t\tif( autoSlide && autoSlidePaused ) {\n\t\t\tautoSlidePaused = false;\n\t\t\tdispatchEvent({ type: 'autoslideresumed' });\n\t\t\tcueAutoSlide();\n\t\t}\n\n\t}\n\n\tfunction navigateLeft({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().left ) {\n\t\t\t\tslide( indexh + 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().left ) {\n\t\t\tslide( indexh - 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t}\n\n\t}\n\n\tfunction navigateRight({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().right ) {\n\t\t\t\tslide( indexh - 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().right ) {\n\t\t\tslide( indexh + 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t}\n\n\t}\n\n\tfunction navigateUp({skipFragments=false}={}) {\n\n\t\t// Prioritize hiding fragments\n\t\tif( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().up ) {\n\t\t\tslide( indexh, indexv - 1 );\n\t\t}\n\n\t}\n\n\tfunction navigateDown({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Prioritize revealing fragments\n\t\tif( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().down ) {\n\t\t\tslide( indexh, indexv + 1 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Navigates backwards, prioritized in the following order:\n\t * 1) Previous fragment\n\t * 2) Previous vertical slide\n\t * 3) Previous horizontal slide\n\t */\n\tfunction navigatePrev({skipFragments=false}={}) {\n\n\t\t// Prioritize revealing fragments\n\t\tif( skipFragments || fragments.prev() === false ) {\n\t\t\tif( availableRoutes().up ) {\n\t\t\t\tnavigateUp({skipFragments});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Fetch the previous horizontal slide, if there is one\n\t\t\t\tlet previousSlide;\n\n\t\t\t\tif( config.rtl ) {\n\t\t\t\t\tpreviousSlide = Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.future' ).pop();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpreviousSlide = Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.past' ).pop();\n\t\t\t\t}\n\n\t\t\t\t// When going backwards and arriving on a stack we start\n\t\t\t\t// at the bottom of the stack\n\t\t\t\tif( previousSlide && previousSlide.classList.contains( 'stack' ) ) {\n\t\t\t\t\tlet v = ( previousSlide.querySelectorAll( 'section' ).length - 1 ) || undefined;\n\t\t\t\t\tlet h = indexh - 1;\n\t\t\t\t\tslide( h, v );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnavigateLeft({skipFragments});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * The reverse of #navigatePrev().\n\t */\n\tfunction navigateNext({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Prioritize revealing fragments\n\t\tif( skipFragments || fragments.next() === false ) {\n\n\t\t\tlet routes = availableRoutes();\n\n\t\t\t// When looping is enabled `routes.down` is always available\n\t\t\t// so we need a separate check for when we've reached the\n\t\t\t// end of a stack and should move horizontally\n\t\t\tif( routes.down && routes.right && config.loop && isLastVerticalSlide() ) {\n\t\t\t\troutes.down = false;\n\t\t\t}\n\n\t\t\tif( routes.down ) {\n\t\t\t\tnavigateDown({skipFragments});\n\t\t\t}\n\t\t\telse if( config.rtl ) {\n\t\t\t\tnavigateLeft({skipFragments});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnavigateRight({skipFragments});\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ----------------------------- EVENTS -------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t/**\n\t * Called by all event handlers that are based on user\n\t * input.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onUserInput( event ) {\n\n\t\tif( config.autoSlideStoppable ) {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t* Listener for post message events posted to this window.\n\t*/\n\tfunction onPostMessage( event ) {\n\n\t\tlet data = event.data;\n\n\t\t// Make sure we're dealing with JSON\n\t\tif( typeof data === 'string' && data.charAt( 0 ) === '{' && data.charAt( data.length - 1 ) === '}' ) {\n\t\t\tdata = JSON.parse( data );\n\n\t\t\t// Check if the requested method can be found\n\t\t\tif( data.method && typeof Reveal[data.method] === 'function' ) {\n\n\t\t\t\tif( POST_MESSAGE_METHOD_BLACKLIST.test( data.method ) === false ) {\n\n\t\t\t\t\tconst result = Reveal[data.method].apply( Reveal, data.args );\n\n\t\t\t\t\t// Dispatch a postMessage event with the returned value from\n\t\t\t\t\t// our method invocation for getter functions\n\t\t\t\t\tdispatchPostMessage( 'callback', { method: data.method, result: result } );\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.warn( 'reveal.js: \"'+ data.method +'\" is is blacklisted from the postMessage API' );\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Event listener for transition end on the current slide.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onTransitionEnd( event ) {\n\n\t\tif( transition === 'running' && /section/gi.test( event.target.nodeName ) ) {\n\t\t\ttransition = 'idle';\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'slidetransitionend',\n\t\t\t\tdata: { indexh, indexv, previousSlide, currentSlide }\n\t\t\t});\n\t\t}\n\n\t}\n\n\t/**\n\t * A global listener for all click events inside of the\n\t * .slides container.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onSlidesClicked( event ) {\n\n\t\tconst anchor = Util.closest( event.target, 'a[href^=\"#\"]' );\n\n\t\t// If a hash link is clicked, we find the target slide\n\t\t// and navigate to it. We previously relied on 'hashchange'\n\t\t// for links like these but that prevented media with\n\t\t// audio tracks from playing in mobile browsers since it\n\t\t// wasn't considered a direct interaction with the document.\n\t\tif( anchor ) {\n\t\t\tconst hash = anchor.getAttribute( 'href' );\n\t\t\tconst indices = location.getIndicesFromHash( hash );\n\n\t\t\tif( indices ) {\n\t\t\t\tReveal.slide( indices.h, indices.v, indices.f );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the window level 'resize' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onWindowResize( event ) {\n\n\t\tlayout();\n\n\t}\n\n\t/**\n\t * Handle for the window level 'visibilitychange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onPageVisibilityChange( event ) {\n\n\t\t// If, after clicking a link or similar and we're coming back,\n\t\t// focus the document.body to ensure we can use keyboard shortcuts\n\t\tif( document.hidden === false && document.activeElement !== document.body ) {\n\t\t\t// Not all elements support .blur() - SVGs among them.\n\t\t\tif( typeof document.activeElement.blur === 'function' ) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\t\tdocument.body.focus();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'fullscreenchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onFullscreenChange( event ) {\n\n\t\tlet element = document.fullscreenElement || document.webkitFullscreenElement;\n\t\tif( element === dom.wrapper ) {\n\t\t\tevent.stopImmediatePropagation();\n\n\t\t\t// Timeout to avoid layout shift in Safari\n\t\t\tsetTimeout( () => {\n\t\t\t\tReveal.layout();\n\t\t\t\tReveal.focus.focus(); // focus.focus :'(\n\t\t\t}, 1 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles clicks on links that are set to preview in the\n\t * iframe overlay.\n\t *\n\t * @param {object} event\n\t */\n\tfunction onPreviewLinkClicked( event ) {\n\n\t\tif( event.currentTarget && event.currentTarget.hasAttribute( 'href' ) ) {\n\t\t\tlet url = event.currentTarget.getAttribute( 'href' );\n\t\t\tif( url ) {\n\t\t\t\tshowPreview( url );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles click on the auto-sliding controls element.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onAutoSlidePlayerClick( event ) {\n\n\t\t// Replay\n\t\tif( isLastSlide() && config.loop === false ) {\n\t\t\tslide( 0, 0 );\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Resume\n\t\telse if( autoSlidePaused ) {\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Pause\n\t\telse {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ------------------------------- API --------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t// The public reveal.js API\n\tconst API = {\n\t\tVERSION,\n\n\t\tinitialize,\n\t\tconfigure,\n\t\tdestroy,\n\n\t\tsync,\n\t\tsyncSlide,\n\t\tsyncFragments: fragments.sync.bind( fragments ),\n\n\t\t// Navigation methods\n\t\tslide,\n\t\tleft: navigateLeft,\n\t\tright: navigateRight,\n\t\tup: navigateUp,\n\t\tdown: navigateDown,\n\t\tprev: navigatePrev,\n\t\tnext: navigateNext,\n\n\t\t// Navigation aliases\n\t\tnavigateLeft, navigateRight, navigateUp, navigateDown, navigatePrev, navigateNext,\n\n\t\t// Fragment methods\n\t\tnavigateFragment: fragments.goto.bind( fragments ),\n\t\tprevFragment: fragments.prev.bind( fragments ),\n\t\tnextFragment: fragments.next.bind( fragments ),\n\n\t\t// Event binding\n\t\ton,\n\t\toff,\n\n\t\t// Legacy event binding methods left in for backwards compatibility\n\t\taddEventListener: on,\n\t\tremoveEventListener: off,\n\n\t\t// Forces an update in slide layout\n\t\tlayout,\n\n\t\t// Randomizes the order of slides\n\t\tshuffle,\n\n\t\t// Returns an object with the available routes as booleans (left/right/top/bottom)\n\t\tavailableRoutes,\n\n\t\t// Returns an object with the available fragments as booleans (prev/next)\n\t\tavailableFragments: fragments.availableRoutes.bind( fragments ),\n\n\t\t// Toggles a help overlay with keyboard shortcuts\n\t\ttoggleHelp,\n\n\t\t// Toggles the overview mode on/off\n\t\ttoggleOverview: overview.toggle.bind( overview ),\n\n\t\t// Toggles the \"black screen\" mode on/off\n\t\ttogglePause,\n\n\t\t// Toggles the auto slide mode on/off\n\t\ttoggleAutoSlide,\n\n\t\t// Toggles visibility of the jump-to-slide UI\n\t\ttoggleJumpToSlide,\n\n\t\t// Slide navigation checks\n\t\tisFirstSlide,\n\t\tisLastSlide,\n\t\tisLastVerticalSlide,\n\t\tisVerticalSlide,\n\n\t\t// State checks\n\t\tisPaused,\n\t\tisAutoSliding,\n\t\tisSpeakerNotes: notes.isSpeakerNotesWindow.bind( notes ),\n\t\tisOverview: overview.isActive.bind( overview ),\n\t\tisFocused: focus.isFocused.bind( focus ),\n\t\tisPrintingPDF: print.isPrintingPDF.bind( print ),\n\n\t\t// Checks if reveal.js has been loaded and is ready for use\n\t\tisReady: () => ready,\n\n\t\t// Slide preloading\n\t\tloadSlide: slideContent.load.bind( slideContent ),\n\t\tunloadSlide: slideContent.unload.bind( slideContent ),\n\n\t\t// Preview management\n\t\tshowPreview,\n\t\thidePreview: closeOverlay,\n\n\t\t// Adds or removes all internal event listeners\n\t\taddEventListeners,\n\t\tremoveEventListeners,\n\t\tdispatchEvent,\n\n\t\t// Facility for persisting and restoring the presentation state\n\t\tgetState,\n\t\tsetState,\n\n\t\t// Presentation progress on range of 0-1\n\t\tgetProgress,\n\n\t\t// Returns the indices of the current, or specified, slide\n\t\tgetIndices,\n\n\t\t// Returns an Array of key:value maps of the attributes of each\n\t\t// slide in the deck\n\t\tgetSlidesAttributes,\n\n\t\t// Returns the number of slides that we have passed\n\t\tgetSlidePastCount,\n\n\t\t// Returns the total number of slides\n\t\tgetTotalSlides,\n\n\t\t// Returns the slide element at the specified index\n\t\tgetSlide,\n\n\t\t// Returns the previous slide element, may be null\n\t\tgetPreviousSlide: () => previousSlide,\n\n\t\t// Returns the current slide element\n\t\tgetCurrentSlide: () => currentSlide,\n\n\t\t// Returns the slide background element at the specified index\n\t\tgetSlideBackground,\n\n\t\t// Returns the speaker notes string for a slide, or null\n\t\tgetSlideNotes: notes.getSlideNotes.bind( notes ),\n\n\t\t// Returns an Array of all slides\n\t\tgetSlides,\n\n\t\t// Returns an array with all horizontal/vertical slides in the deck\n\t\tgetHorizontalSlides,\n\t\tgetVerticalSlides,\n\n\t\t// Checks if the presentation contains two or more horizontal\n\t\t// and vertical slides\n\t\thasHorizontalSlides,\n\t\thasVerticalSlides,\n\n\t\t// Checks if the deck has navigated on either axis at least once\n\t\thasNavigatedHorizontally: () => navigationHistory.hasNavigatedHorizontally,\n\t\thasNavigatedVertically: () => navigationHistory.hasNavigatedVertically,\n\n\t\t// Adds/removes a custom key binding\n\t\taddKeyBinding: keyboard.addKeyBinding.bind( keyboard ),\n\t\tremoveKeyBinding: keyboard.removeKeyBinding.bind( keyboard ),\n\n\t\t// Programmatically triggers a keyboard event\n\t\ttriggerKey: keyboard.triggerKey.bind( keyboard ),\n\n\t\t// Registers a new shortcut to include in the help overlay\n\t\tregisterKeyboardShortcut: keyboard.registerKeyboardShortcut.bind( keyboard ),\n\n\t\tgetComputedSlideSize,\n\n\t\t// Returns the current scale of the presentation content\n\t\tgetScale: () => scale,\n\n\t\t// Returns the current configuration object\n\t\tgetConfig: () => config,\n\n\t\t// Helper method, retrieves query string as a key:value map\n\t\tgetQueryHash: Util.getQueryHash,\n\n\t\t// Returns the path to the current slide as represented in the URL\n\t\tgetSlidePath: location.getHash.bind( location ),\n\n\t\t// Returns reveal.js DOM elements\n\t\tgetRevealElement: () => revealElement,\n\t\tgetSlidesElement: () => dom.slides,\n\t\tgetViewportElement: () => dom.viewport,\n\t\tgetBackgroundsElement: () => backgrounds.element,\n\n\t\t// API for registering and retrieving plugins\n\t\tregisterPlugin: plugins.registerPlugin.bind( plugins ),\n\t\thasPlugin: plugins.hasPlugin.bind( plugins ),\n\t\tgetPlugin: plugins.getPlugin.bind( plugins ),\n\t\tgetPlugins: plugins.getRegisteredPlugins.bind( plugins )\n\n\t};\n\n\t// Our internal API which controllers have access to\n\tUtil.extend( Reveal, {\n\t\t...API,\n\n\t\t// Methods for announcing content to screen readers\n\t\tannounceStatus,\n\t\tgetStatusText,\n\n\t\t// Controllers\n\t\tprint,\n\t\tfocus,\n\t\tprogress,\n\t\tcontrols,\n\t\tlocation,\n\t\toverview,\n\t\tfragments,\n\t\tslideContent,\n\t\tslideNumber,\n\n\t\tonUserInput,\n\t\tcloseOverlay,\n\t\tupdateSlidesVisibility,\n\t\tlayoutSlideContents,\n\t\ttransformSlides,\n\t\tcueAutoSlide,\n\t\tcancelAutoSlide\n\t} );\n\n\treturn API;\n\n};\n","import Deck, { VERSION } from './reveal.js'\n\n/**\n * Expose the Reveal class to the window. To create a\n * new instance:\n * let deck = new Reveal( document.querySelector( '.reveal' ), {\n * controls: false\n * } );\n * deck.initialize().then(() => {\n * // reveal.js is ready\n * });\n */\nlet Reveal = Deck;\n\n\n/**\n * The below is a thin shell that mimics the pre 4.0\n * reveal.js API and ensures backwards compatibility.\n * This API only allows for one Reveal instance per\n * page, whereas the new API above lets you run many\n * presentations on the same page.\n *\n * Reveal.initialize( { controls: false } ).then(() => {\n * // reveal.js is ready\n * });\n */\n\nlet enqueuedAPICalls = [];\n\nReveal.initialize = options => {\n\n\t// Create our singleton reveal.js instance\n\tObject.assign( Reveal, new Deck( document.querySelector( '.reveal' ), options ) );\n\n\t// Invoke any enqueued API calls\n\tenqueuedAPICalls.map( method => method( Reveal ) );\n\n\treturn Reveal.initialize();\n\n}\n\n/**\n * The pre 4.0 API let you add event listener before\n * initializing. We maintain the same behavior by\n * queuing up premature API calls and invoking all\n * of them when Reveal.initialize is called.\n */\n[ 'configure', 'on', 'off', 'addEventListener', 'removeEventListener', 'registerPlugin' ].forEach( method => {\n\tReveal[method] = ( ...args ) => {\n\t\tenqueuedAPICalls.push( deck => deck[method].call( null, ...args ) );\n\t}\n} );\n\nReveal.isReady = () => false;\n\nReveal.VERSION = VERSION;\n\nexport default Reveal;"],"names":["extend","a","b","i","queryAll","el","selector","Array","from","querySelectorAll","toggleClass","className","value","classList","add","remove","deserialize","match","parseFloat","transformElement","element","transform","style","matches","target","matchesMethod","matchesSelector","msMatchesSelector","call","closest","parentNode","createSingletonNode","container","tagname","classname","innerHTML","nodes","length","testNode","node","document","createElement","appendChild","createStyleSheet","tag","type","styleSheet","cssText","createTextNode","head","getQueryHash","query","location","search","replace","split","shift","pop","unescape","getRemainingHeight","height","newHeight","oldHeight","offsetHeight","removeProperty","fileExtensionToMimeMap","UA","navigator","userAgent","isMobile","test","platform","maxTouchPoints","isAndroid","Object","defineProperty","fitty_module","_extends","assign","arguments","source","key","prototype","hasOwnProperty","w","toArray","nl","slice","DrawState","fitties","redrawFrame","requestRedraw","cancelAnimationFrame","requestAnimationFrame","redraw","filter","f","dirty","active","redrawAll","forEach","styleComputed","computeStyle","shouldPreStyle","applyStyle","fittiesToRedraw","shouldRedraw","calculateStyles","markAsClean","dispatchFitEvent","availableWidth","clientWidth","currentWidth","scrollWidth","previousFontSize","currentFontSize","Math","min","max","minSize","maxSize","whiteSpace","multiLine","getComputedStyle","getPropertyValue","display","preStyle","preStyleTestCompleted","fontSize","dispatchEvent","CustomEvent","detail","oldValue","newValue","scaleFactor","fit","destroy","_","observeMutations","observer","disconnect","originalStyle","subscribe","unsubscribe","MutationObserver","observe","defaultOptions","subtree","childList","characterData","resizeDebounce","onWindowResized","clearTimeout","setTimeout","fitty","observeWindowDelay","events","set","enabled","method","e","observeWindow","fitAll","fittyCreate","elements","options","fittyOptions","publicFitties","map","newbie","push","init","unfreeze","freeze","undefined","window","SlideContent","constructor","Reveal","startEmbeddedIframe","this","bind","shouldPreload","preload","getConfig","preloadIframes","hasAttribute","load","slide","tagName","setAttribute","getAttribute","removeAttribute","media","sources","background","slideBackgroundElement","backgroundContent","slideBackgroundContentElement","backgroundIframe","backgroundImage","backgroundVideo","backgroundVideoLoop","backgroundVideoMuted","trim","url","encodeURI","c","charCodeAt","toString","toUpperCase","encodeRFC3986URI","decodeURI","join","isSpeakerNotes","video","muted","filename","getMimeTypeFromFile","excludeIframes","iframe","width","maxHeight","maxWidth","backgroundIframeElement","querySelector","layout","scopeElement","unload","getSlideBackground","formatEmbeddedContent","_appendParamToIframeSource","sourceAttribute","sourceURL","param","getSlidesElement","src","indexOf","startEmbeddedContent","autoplay","autoPlayMedia","play","readyState","startEmbeddedMedia","promise","catch","controls","addEventListener","removeEventListener","event","isAttachedToDOM","isVisible","currentTime","contentWindow","postMessage","stopEmbeddedContent","unloadIframes","pause","SlideNumber","render","getRevealElement","configure","config","oldConfig","slideNumberDisplay","slideNumber","isPrintingPDF","showSlideNumber","update","getSlideNumber","getCurrentSlide","format","getHorizontalSlides","horizontalOffset","dataset","visibility","getSlidePastCount","getTotalSlides","indices","getIndices","h","sep","isVerticalSlide","v","getHash","formatNumber","delimiter","isNaN","JumpToSlide","onInput","onBlur","onKeyDown","jumpInput","placeholder","show","indicesOnShow","focus","hide","jumpTimeout","jump","getIndicesFromHash","oneBasedIndex","jumpAfter","delay","regex","RegExp","getSlides","find","innerText","cancel","confirm","keyCode","stopImmediatePropagation","colorToRgb","color","hex3","r","parseInt","charAt","g","hex6","rgb","rgba","Backgrounds","create","slideh","backgroundStack","createBackground","slidev","parallaxBackgroundImage","backgroundSize","parallaxBackgroundSize","backgroundRepeat","parallaxBackgroundRepeat","backgroundPosition","parallaxBackgroundPosition","contentElement","sync","data","backgroundColor","backgroundGradient","backgroundTransition","backgroundOpacity","dataPreload","opacity","contrastColor","computedBackgroundStyle","includeAll","currentSlide","currentBackground","horizontalPast","rtl","horizontalFuture","childNodes","backgroundh","backgroundv","previousBackground","slideContent","currentBackgroundContent","backgroundImageURL","previousBackgroundHash","currentBackgroundHash","classToBubble","contains","updateParallax","backgroundWidth","backgroundHeight","horizontalSlides","verticalSlides","getVerticalSlides","horizontalOffsetMultiplier","slideWidth","offsetWidth","horizontalSlideCount","parallaxBackgroundHorizontal","verticalOffsetMultiplier","verticalOffset","slideHeight","verticalSlideCount","parallaxBackgroundVertical","SLIDES_SELECTOR","HORIZONTAL_SLIDES_SELECTOR","VERTICAL_SLIDES_SELECTOR","POST_MESSAGE_METHOD_BLACKLIST","FRAGMENT_STYLE_REGEX","autoAnimateCounter","AutoAnimate","run","fromSlide","toSlide","reset","allSlides","toSlideIndex","fromSlideIndex","autoAnimateStyleSheet","animationOptions","getAutoAnimateOptions","autoAnimate","slideDirection","fromSlideIsHidden","css","getAutoAnimatableElements","autoAnimateElements","to","autoAnimateUnmatched","defaultUnmatchedDuration","duration","defaultUnmatchedDelay","getUnmatchedAutoAnimateElements","unmatchedElement","unmatchedOptions","id","autoAnimateTarget","fontWeight","sheet","removeChild","elementOptions","easing","fromProps","getAutoAnimatableProperties","toProps","styles","translate","scale","presentationScale","getScale","delta","x","y","scaleX","scaleY","round","propertyName","toValue","fromValue","explicitValue","toStyleProperties","keys","inheritedOptions","autoAnimateEasing","autoAnimateDuration","autoAnimatedParent","autoAnimateDelay","direction","properties","bounds","measure","center","getBoundingClientRect","offsetLeft","offsetTop","computedStyles","autoAnimateStyles","property","pairs","autoAnimateMatcher","getAutoAnimatePairs","reserved","pair","index","textNodes","findAutoAnimateMatches","nodeName","textContent","getLocalBoundingBox","fromScope","toScope","serializer","fromMatches","toMatches","fromElement","primaryIndex","secondaryIndex","rootElement","children","reduce","result","containsAnimatedElements","concat","Fragments","fragments","disable","enable","availableRoutes","hiddenFragments","prev","next","sort","grouped","ordered","unordered","sorted","fragment","group","sortAll","horizontalSlide","verticalSlide","changedFragments","shown","hidden","maxIndex","currentFragment","wasVisible","announceStatus","getStatusText","bubbles","goto","offset","lastVisibleFragment","progress","fragmentInURL","writeURL","Overview","onSlideClicked","activate","overview","isActive","cancelAutoSlide","getBackgroundsElement","margin","slideSize","getComputedSlideSize","overviewSlideWidth","overviewSlideHeight","updateSlidesVisibility","hslide","vslide","hbackground","vbackground","vmin","innerWidth","innerHeight","transformSlides","deactivate","cueAutoSlide","toggle","override","preventDefault","Keyboard","shortcuts","bindings","onDocumentKeyDown","onDocumentKeyPress","navigationMode","unbind","addKeyBinding","binding","callback","description","removeKeyBinding","triggerKey","registerKeyboardShortcut","getShortcuts","getBindings","shiftKey","charCode","toggleHelp","keyboardCondition","isFocused","autoSlideWasPaused","isAutoSliding","onUserInput","activeElementIsCE","activeElement","isContentEditable","activeElementIsInput","activeElementIsNotes","unusedModifier","altKey","ctrlKey","metaKey","resumeKeyCodes","keyboard","isPaused","useLinearMode","hasHorizontalSlides","hasVerticalSlides","triggered","apply","action","skipFragments","left","right","up","Number","MAX_VALUE","down","togglePause","requestMethod","documentElement","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","enterFullscreen","embedded","getViewportElement","autoSlideStoppable","toggleAutoSlide","jumpToSlide","toggleJumpToSlide","closeOverlay","Location","writeURLTimeout","replaceStateTimestamp","onWindowHashChange","hash","name","bits","hashIndexBase","hashOneBasedIndex","getElementById","decodeURIComponent","error","readURL","currentIndices","newIndices","history","debouncedReplaceState","pathname","replaceState","Date","now","replaceStateTimeout","MAX_REPLACE_STATE_FREQUENCY","s","encodeURIComponent","Controls","onNavigateLeftClicked","onNavigateRightClicked","onNavigateUpClicked","onNavigateDownClicked","onNavigatePrevClicked","onNavigateNextClicked","revealElement","controlsLeft","controlsRight","controlsUp","controlsDown","controlsPrev","controlsNext","controlsRightArrow","controlsLeftArrow","controlsDownArrow","controlsLayout","controlsBackArrows","pointerEvents","eventName","routes","fragmentsRoutes","controlsTutorial","hasNavigatedVertically","hasNavigatedHorizontally","Progress","onProgressClicked","bar","getProgress","getMaxWidth","slides","slidesTotal","slideIndex","floor","clientX","targetIndices","Pointer","lastMouseWheelStep","cursorHidden","cursorInactiveTimeout","onDocumentCursorActive","onDocumentMouseScroll","mouseWheel","hideInactiveCursor","showCursor","cursor","hideCursor","hideCursorTime","wheelDelta","loadScript","script","async","defer","onload","onreadystatechange","onerror","err","Error","insertBefore","lastChild","Plugins","reveal","state","registeredPlugins","asyncDependencies","plugins","dependencies","registerPlugin","Promise","resolve","scripts","scriptsToLoad","condition","scriptLoadedCallback","initPlugins","then","console","warn","pluginValues","values","pluginsToInitialize","loadAsync","initNextPlugin","afterPlugInitialized","plugin","hasPlugin","getPlugin","getRegisteredPlugins","Print","injectPageNumbers","pageWidth","pageHeight","body","viewportElement","presentationBackground","viewportStyles","layoutSlideContents","slideScrollHeights","scrollHeight","pages","pageContainer","top","contentHeight","numberOfPages","ceil","pdfMaxPagesPerSlide","page","pdfPageHeightOffset","showNotes","notes","getSlideNotes","notesSpacing","notesLayout","notesElement","bottom","numberElement","pdfSeparateFragments","fragmentGroups","previousFragmentStep","clonedPage","cloneNode","fragmentNumber","Touch","touchStartX","touchStartY","touchStartCount","touchCaptured","onPointerDown","onPointerMove","onPointerUp","onTouchStart","onTouchMove","onTouchEnd","msPointerEnabled","isSwipePrevented","touches","clientY","currentX","currentY","includeFragments","deltaX","deltaY","abs","pointerType","MSPOINTER_TYPE_TOUCH","STATE_FOCUS","STATE_BLUR","Focus","onRevealPointerDown","onDocumentPointerDown","blur","Notes","print","updateVisibility","hasNotes","isSpeakerNotesWindow","notesElements","Playback","progressCheck","diameter","diameter2","thickness","playing","progressOffset","canvas","context","getContext","setPlaying","wasPlaying","animate","progressBefore","radius","iconSize","endAngle","PI","startAngle","save","clearRect","beginPath","arc","fillStyle","fill","lineWidth","strokeStyle","stroke","fillRect","moveTo","lineTo","restore","on","listener","off","minScale","maxScale","respondToHashChanges","disableLayout","touch","loop","shuffle","help","showHiddenSlides","autoSlide","autoSlideMethod","defaultTiming","previewLinks","postMessageEvents","focusBodyOnPageVisibilityChange","transition","transitionSpeed","POSITIVE_INFINITY","viewDistance","mobileViewDistance","sortFragmentsOnSync","VERSION","indexh","indexv","previousSlide","autoSlidePlayer","ready","navigationHistory","slidesTransform","dom","autoSlideTimeout","autoSlideStartTime","autoSlidePaused","backgrounds","pointer","initialize","initOptions","wrapper","defaultConfig","Util","setViewport","start","viewport","removeHiddenSlides","setupDOM","setupPostMessage","setupScrollPrevention","setupFullscreen","resetVerticalSlides","removeEventListeners","setupPDF","Device","pauseOverlay","statusElement","createStatusElement","position","overflow","clip","text","nodeType","isAriaHidden","isDisplayHidden","child","setInterval","scrollTop","scrollLeft","onFullscreenChange","onPostMessage","isReady","numberOfSlides","setProperty","resume","enablePreviewLinks","disablePreviewLinks","onAutoSlidePlayerClick","addEventListeners","onWindowResize","onSlidesClicked","onTransitionEnd","onPageVisibilityChange","useCapture","transforms","createEvent","initEvent","dispatchPostMessage","parent","self","message","namespace","getState","JSON","stringify","onPreviewLinkClicked","showPreview","overlay","showHelp","html","size","oldScale","presentationWidth","presentationHeight","zoom","len","remainingHeight","nw","naturalWidth","videoWidth","nh","naturalHeight","videoHeight","es","setPreviousVerticalIndex","stack","getPreviousVerticalIndex","attributeName","isLastVerticalSlide","nextElementSibling","isFirstSlide","isLastSlide","wasPaused","resumeAutoSlide","pauseAutoSlide","origin","defaultPrevented","stateBefore","indexhBefore","indexvBefore","updateSlides","slideChanged","currentHorizontalSlide","currentVerticalSlides","autoAnimateTransition","getVerticalStacks","stateLoop","j","splice","syncSlide","beforeSlide","random","slidesLength","printMode","loopedForwards","loopedBackwards","reverse","showFragmentsIn","hideFragmentsIn","wasPresent","slideState","distanceX","distanceY","horizontalSlidesLength","verticalSlidesLength","oy","fragmentRoutes","pastCount","mainLoop","totalCount","allFragments","fragmentWeight","isVertical","getSlidesAttributes","attributes","attribute","getSlide","indexf","paused","setState","pausedFlag","overviewFlag","fragmentAutoSlide","parentAutoSlide","slideAutoSlide","playbackRate","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","navigatePrev","parse","args","anchor","fullscreenElement","webkitFullscreenElement","currentTarget","API","syncFragments","navigateFragment","prevFragment","nextFragment","availableFragments","toggleOverview","isOverview","loadSlide","unloadSlide","hidePreview","getPreviousSlide","getSlidePath","getPlugins","Deck","enqueuedAPICalls","deck"],"mappings":"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"}
+{"version":3,"file":"reveal.js","sources":["../js/utils/util.js","../js/utils/device.js","../node_modules/fitty/dist/fitty.module.js","../js/controllers/slidecontent.js","../js/controllers/slidenumber.js","../js/controllers/jumptoslide.js","../js/utils/color.js","../js/controllers/backgrounds.js","../js/utils/constants.js","../js/controllers/autoanimate.js","../js/controllers/fragments.js","../js/controllers/overview.js","../js/controllers/keyboard.js","../js/controllers/location.js","../js/controllers/controls.js","../js/controllers/progress.js","../js/controllers/pointer.js","../js/utils/loader.js","../js/controllers/plugins.js","../js/controllers/print.js","../js/controllers/touch.js","../js/controllers/focus.js","../js/controllers/notes.js","../js/components/playback.js","../js/config.js","../js/reveal.js","../js/index.js"],"sourcesContent":["/**\n * Extend object a with the properties of object b.\n * If there's a conflict, object b takes precedence.\n *\n * @param {object} a\n * @param {object} b\n */\nexport const extend = ( a, b ) => {\n\n\tfor( let i in b ) {\n\t\ta[ i ] = b[ i ];\n\t}\n\n\treturn a;\n\n}\n\n/**\n * querySelectorAll but returns an Array.\n */\nexport const queryAll = ( el, selector ) => {\n\n\treturn Array.from( el.querySelectorAll( selector ) );\n\n}\n\n/**\n * classList.toggle() with cross browser support\n */\nexport const toggleClass = ( el, className, value ) => {\n\tif( value ) {\n\t\tel.classList.add( className );\n\t}\n\telse {\n\t\tel.classList.remove( className );\n\t}\n}\n\n/**\n * Utility for deserializing a value.\n *\n * @param {*} value\n * @return {*}\n */\nexport const deserialize = ( value ) => {\n\n\tif( typeof value === 'string' ) {\n\t\tif( value === 'null' ) return null;\n\t\telse if( value === 'true' ) return true;\n\t\telse if( value === 'false' ) return false;\n\t\telse if( value.match( /^-?[\\d\\.]+$/ ) ) return parseFloat( value );\n\t}\n\n\treturn value;\n\n}\n\n/**\n * Measures the distance in pixels between point a\n * and point b.\n *\n * @param {object} a point with x/y properties\n * @param {object} b point with x/y properties\n *\n * @return {number}\n */\nexport const distanceBetween = ( a, b ) => {\n\n\tlet dx = a.x - b.x,\n\t\tdy = a.y - b.y;\n\n\treturn Math.sqrt( dx*dx + dy*dy );\n\n}\n\n/**\n * Applies a CSS transform to the target element.\n *\n * @param {HTMLElement} element\n * @param {string} transform\n */\nexport const transformElement = ( element, transform ) => {\n\n\telement.style.transform = transform;\n\n}\n\n/**\n * Element.matches with IE support.\n *\n * @param {HTMLElement} target The element to match\n * @param {String} selector The CSS selector to match\n * the element against\n *\n * @return {Boolean}\n */\nexport const matches = ( target, selector ) => {\n\n\tlet matchesMethod = target.matches || target.matchesSelector || target.msMatchesSelector;\n\n\treturn !!( matchesMethod && matchesMethod.call( target, selector ) );\n\n}\n\n/**\n * Find the closest parent that matches the given\n * selector.\n *\n * @param {HTMLElement} target The child element\n * @param {String} selector The CSS selector to match\n * the parents against\n *\n * @return {HTMLElement} The matched parent or null\n * if no matching parent was found\n */\nexport const closest = ( target, selector ) => {\n\n\t// Native Element.closest\n\tif( typeof target.closest === 'function' ) {\n\t\treturn target.closest( selector );\n\t}\n\n\t// Polyfill\n\twhile( target ) {\n\t\tif( matches( target, selector ) ) {\n\t\t\treturn target;\n\t\t}\n\n\t\t// Keep searching\n\t\ttarget = target.parentNode;\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Handling the fullscreen functionality via the fullscreen API\n *\n * @see http://fullscreen.spec.whatwg.org/\n * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode\n */\nexport const enterFullscreen = element => {\n\n\telement = element || document.documentElement;\n\n\t// Check which implementation is available\n\tlet requestMethod = element.requestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullScreen ||\n\t\t\t\t\t\telement.mozRequestFullScreen ||\n\t\t\t\t\t\telement.msRequestFullscreen;\n\n\tif( requestMethod ) {\n\t\trequestMethod.apply( element );\n\t}\n\n}\n\n/**\n * Creates an HTML element and returns a reference to it.\n * If the element already exists the existing instance will\n * be returned.\n *\n * @param {HTMLElement} container\n * @param {string} tagname\n * @param {string} classname\n * @param {string} innerHTML\n *\n * @return {HTMLElement}\n */\nexport const createSingletonNode = ( container, tagname, classname, innerHTML='' ) => {\n\n\t// Find all nodes matching the description\n\tlet nodes = container.querySelectorAll( '.' + classname );\n\n\t// Check all matches to find one which is a direct child of\n\t// the specified container\n\tfor( let i = 0; i < nodes.length; i++ ) {\n\t\tlet testNode = nodes[i];\n\t\tif( testNode.parentNode === container ) {\n\t\t\treturn testNode;\n\t\t}\n\t}\n\n\t// If no node was found, create it now\n\tlet node = document.createElement( tagname );\n\tnode.className = classname;\n\tnode.innerHTML = innerHTML;\n\tcontainer.appendChild( node );\n\n\treturn node;\n\n}\n\n/**\n * Injects the given CSS styles into the DOM.\n *\n * @param {string} value\n */\nexport const createStyleSheet = ( value ) => {\n\n\tlet tag = document.createElement( 'style' );\n\ttag.type = 'text/css';\n\n\tif( value && value.length > 0 ) {\n\t\tif( tag.styleSheet ) {\n\t\t\ttag.styleSheet.cssText = value;\n\t\t}\n\t\telse {\n\t\t\ttag.appendChild( document.createTextNode( value ) );\n\t\t}\n\t}\n\n\tdocument.head.appendChild( tag );\n\n\treturn tag;\n\n}\n\n/**\n * Returns a key:value hash of all query params.\n */\nexport const getQueryHash = () => {\n\n\tlet query = {};\n\n\tlocation.search.replace( /[A-Z0-9]+?=([\\w\\.%-]*)/gi, a => {\n\t\tquery[ a.split( '=' ).shift() ] = a.split( '=' ).pop();\n\t} );\n\n\t// Basic deserialization\n\tfor( let i in query ) {\n\t\tlet value = query[ i ];\n\n\t\tquery[ i ] = deserialize( unescape( value ) );\n\t}\n\n\t// Do not accept new dependencies via query config to avoid\n\t// the potential of malicious script injection\n\tif( typeof query['dependencies'] !== 'undefined' ) delete query['dependencies'];\n\n\treturn query;\n\n}\n\n/**\n * Returns the remaining height within the parent of the\n * target element.\n *\n * remaining height = [ configured parent height ] - [ current parent height ]\n *\n * @param {HTMLElement} element\n * @param {number} [height]\n */\nexport const getRemainingHeight = ( element, height = 0 ) => {\n\n\tif( element ) {\n\t\tlet newHeight, oldHeight = element.style.height;\n\n\t\t// Change the .stretch element height to 0 in order find the height of all\n\t\t// the other elements\n\t\telement.style.height = '0px';\n\n\t\t// In Overview mode, the parent (.slide) height is set of 700px.\n\t\t// Restore it temporarily to its natural height.\n\t\telement.parentNode.style.height = 'auto';\n\n\t\tnewHeight = height - element.parentNode.offsetHeight;\n\n\t\t// Restore the old height, just in case\n\t\telement.style.height = oldHeight + 'px';\n\n\t\t// Clear the parent (.slide) height. .removeProperty works in IE9+\n\t\telement.parentNode.style.removeProperty('height');\n\n\t\treturn newHeight;\n\t}\n\n\treturn height;\n\n}\n\nconst fileExtensionToMimeMap = {\n\t'mp4': 'video/mp4',\n\t'm4a': 'video/mp4',\n\t'ogv': 'video/ogg',\n\t'mpeg': 'video/mpeg',\n\t'webm': 'video/webm'\n}\n\n/**\n * Guess the MIME type for common file formats.\n */\nexport const getMimeTypeFromFile = ( filename='' ) => {\n\treturn fileExtensionToMimeMap[filename.split('.').pop()]\n}\n\n/**\n * Encodes a string for RFC3986-compliant URL format.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI#encoding_for_rfc3986\n *\n * @param {string} url\n */\nexport const encodeRFC3986URI = ( url='' ) => {\n\treturn encodeURI(url)\n\t .replace(/%5B/g, \"[\")\n\t .replace(/%5D/g, \"]\")\n\t .replace(\n\t\t/[!'()*]/g,\n\t\t(c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`\n\t );\n}","const UA = navigator.userAgent;\n\nexport const isMobile = /(iphone|ipod|ipad|android)/gi.test( UA ) ||\n\t\t\t\t\t\t( navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 ); // iPadOS\n\nexport const isChrome = /chrome/i.test( UA ) && !/edge/i.test( UA );\n\nexport const isAndroid = /android/gi.test( UA );","/*\n * fitty v2.3.3 - Snugly resizes text to fit its parent container\n * Copyright (c) 2020 Rik Schennink
(https://pqina.nl/)\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = function (w) {\n\n // no window, early exit\n if (!w) return;\n\n // node list to array helper method\n var toArray = function toArray(nl) {\n return [].slice.call(nl);\n };\n\n // states\n var DrawState = {\n IDLE: 0,\n DIRTY_CONTENT: 1,\n DIRTY_LAYOUT: 2,\n DIRTY: 3\n };\n\n // all active fitty elements\n var fitties = [];\n\n // group all redraw calls till next frame, we cancel each frame request when a new one comes in. If no support for request animation frame, this is an empty function and supports for fitty stops.\n var redrawFrame = null;\n var requestRedraw = 'requestAnimationFrame' in w ? function () {\n w.cancelAnimationFrame(redrawFrame);\n redrawFrame = w.requestAnimationFrame(function () {\n return redraw(fitties.filter(function (f) {\n return f.dirty && f.active;\n }));\n });\n } : function () {};\n\n // sets all fitties to dirty so they are redrawn on the next redraw loop, then calls redraw\n var redrawAll = function redrawAll(type) {\n return function () {\n fitties.forEach(function (f) {\n return f.dirty = type;\n });\n requestRedraw();\n };\n };\n\n // redraws fitties so they nicely fit their parent container\n var redraw = function redraw(fitties) {\n\n // getting info from the DOM at this point should not trigger a reflow, let's gather as much intel as possible before triggering a reflow\n\n // check if styles of all fitties have been computed\n fitties.filter(function (f) {\n return !f.styleComputed;\n }).forEach(function (f) {\n f.styleComputed = computeStyle(f);\n });\n\n // restyle elements that require pre-styling, this triggers a reflow, please try to prevent by adding CSS rules (see docs)\n fitties.filter(shouldPreStyle).forEach(applyStyle);\n\n // we now determine which fitties should be redrawn\n var fittiesToRedraw = fitties.filter(shouldRedraw);\n\n // we calculate final styles for these fitties\n fittiesToRedraw.forEach(calculateStyles);\n\n // now we apply the calculated styles from our previous loop\n fittiesToRedraw.forEach(function (f) {\n applyStyle(f);\n markAsClean(f);\n });\n\n // now we dispatch events for all restyled fitties\n fittiesToRedraw.forEach(dispatchFitEvent);\n };\n\n var markAsClean = function markAsClean(f) {\n return f.dirty = DrawState.IDLE;\n };\n\n var calculateStyles = function calculateStyles(f) {\n\n // get available width from parent node\n f.availableWidth = f.element.parentNode.clientWidth;\n\n // the space our target element uses\n f.currentWidth = f.element.scrollWidth;\n\n // remember current font size\n f.previousFontSize = f.currentFontSize;\n\n // let's calculate the new font size\n f.currentFontSize = Math.min(Math.max(f.minSize, f.availableWidth / f.currentWidth * f.previousFontSize), f.maxSize);\n\n // if allows wrapping, only wrap when at minimum font size (otherwise would break container)\n f.whiteSpace = f.multiLine && f.currentFontSize === f.minSize ? 'normal' : 'nowrap';\n };\n\n // should always redraw if is not dirty layout, if is dirty layout, only redraw if size has changed\n var shouldRedraw = function shouldRedraw(f) {\n return f.dirty !== DrawState.DIRTY_LAYOUT || f.dirty === DrawState.DIRTY_LAYOUT && f.element.parentNode.clientWidth !== f.availableWidth;\n };\n\n // every fitty element is tested for invalid styles\n var computeStyle = function computeStyle(f) {\n\n // get style properties\n var style = w.getComputedStyle(f.element, null);\n\n // get current font size in pixels (if we already calculated it, use the calculated version)\n f.currentFontSize = parseFloat(style.getPropertyValue('font-size'));\n\n // get display type and wrap mode\n f.display = style.getPropertyValue('display');\n f.whiteSpace = style.getPropertyValue('white-space');\n };\n\n // determines if this fitty requires initial styling, can be prevented by applying correct styles through CSS\n var shouldPreStyle = function shouldPreStyle(f) {\n\n var preStyle = false;\n\n // if we already tested for prestyling we don't have to do it again\n if (f.preStyleTestCompleted) return false;\n\n // should have an inline style, if not, apply\n if (!/inline-/.test(f.display)) {\n preStyle = true;\n f.display = 'inline-block';\n }\n\n // to correctly calculate dimensions the element should have whiteSpace set to nowrap\n if (f.whiteSpace !== 'nowrap') {\n preStyle = true;\n f.whiteSpace = 'nowrap';\n }\n\n // we don't have to do this twice\n f.preStyleTestCompleted = true;\n\n return preStyle;\n };\n\n // apply styles to single fitty\n var applyStyle = function applyStyle(f) {\n f.element.style.whiteSpace = f.whiteSpace;\n f.element.style.display = f.display;\n f.element.style.fontSize = f.currentFontSize + 'px';\n };\n\n // dispatch a fit event on a fitty\n var dispatchFitEvent = function dispatchFitEvent(f) {\n f.element.dispatchEvent(new CustomEvent('fit', {\n detail: {\n oldValue: f.previousFontSize,\n newValue: f.currentFontSize,\n scaleFactor: f.currentFontSize / f.previousFontSize\n }\n }));\n };\n\n // fit method, marks the fitty as dirty and requests a redraw (this will also redraw any other fitty marked as dirty)\n var fit = function fit(f, type) {\n return function () {\n f.dirty = type;\n if (!f.active) return;\n requestRedraw();\n };\n };\n\n var init = function init(f) {\n\n // save some of the original CSS properties before we change them\n f.originalStyle = {\n whiteSpace: f.element.style.whiteSpace,\n display: f.element.style.display,\n fontSize: f.element.style.fontSize\n };\n\n // should we observe DOM mutations\n observeMutations(f);\n\n // this is a new fitty so we need to validate if it's styles are in order\n f.newbie = true;\n\n // because it's a new fitty it should also be dirty, we want it to redraw on the first loop\n f.dirty = true;\n\n // we want to be able to update this fitty\n fitties.push(f);\n };\n\n var destroy = function destroy(f) {\n return function () {\n\n // remove from fitties array\n fitties = fitties.filter(function (_) {\n return _.element !== f.element;\n });\n\n // stop observing DOM\n if (f.observeMutations) f.observer.disconnect();\n\n // reset the CSS properties we changes\n f.element.style.whiteSpace = f.originalStyle.whiteSpace;\n f.element.style.display = f.originalStyle.display;\n f.element.style.fontSize = f.originalStyle.fontSize;\n };\n };\n\n // add a new fitty, does not redraw said fitty\n var subscribe = function subscribe(f) {\n return function () {\n if (f.active) return;\n f.active = true;\n requestRedraw();\n };\n };\n\n // remove an existing fitty\n var unsubscribe = function unsubscribe(f) {\n return function () {\n return f.active = false;\n };\n };\n\n var observeMutations = function observeMutations(f) {\n\n // no observing?\n if (!f.observeMutations) return;\n\n // start observing mutations\n f.observer = new MutationObserver(fit(f, DrawState.DIRTY_CONTENT));\n\n // start observing\n f.observer.observe(f.element, f.observeMutations);\n };\n\n // default mutation observer settings\n var mutationObserverDefaultSetting = {\n subtree: true,\n childList: true,\n characterData: true\n };\n\n // default fitty options\n var defaultOptions = {\n minSize: 16,\n maxSize: 512,\n multiLine: true,\n observeMutations: 'MutationObserver' in w ? mutationObserverDefaultSetting : false\n };\n\n // array of elements in, fitty instances out\n function fittyCreate(elements, options) {\n\n // set options object\n var fittyOptions = _extends({}, defaultOptions, options);\n\n // create fitties\n var publicFitties = elements.map(function (element) {\n\n // create fitty instance\n var f = _extends({}, fittyOptions, {\n\n // internal options for this fitty\n element: element,\n active: true\n });\n\n // initialise this fitty\n init(f);\n\n // expose API\n return {\n element: element,\n fit: fit(f, DrawState.DIRTY),\n unfreeze: subscribe(f),\n freeze: unsubscribe(f),\n unsubscribe: destroy(f)\n };\n });\n\n // call redraw on newly initiated fitties\n requestRedraw();\n\n // expose fitties\n return publicFitties;\n }\n\n // fitty creation function\n function fitty(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n // if target is a string\n return typeof target === 'string' ?\n\n // treat it as a querySelector\n fittyCreate(toArray(document.querySelectorAll(target)), options) :\n\n // create single fitty\n fittyCreate([target], options)[0];\n }\n\n // handles viewport changes, redraws all fitties, but only does so after a timeout\n var resizeDebounce = null;\n var onWindowResized = function onWindowResized() {\n w.clearTimeout(resizeDebounce);\n resizeDebounce = w.setTimeout(redrawAll(DrawState.DIRTY_LAYOUT), fitty.observeWindowDelay);\n };\n\n // define observe window property, so when we set it to true or false events are automatically added and removed\n var events = ['resize', 'orientationchange'];\n Object.defineProperty(fitty, 'observeWindow', {\n set: function set(enabled) {\n var method = (enabled ? 'add' : 'remove') + 'EventListener';\n events.forEach(function (e) {\n w[method](e, onWindowResized);\n });\n }\n });\n\n // fitty global properties (by setting observeWindow to true the events above get added)\n fitty.observeWindow = true;\n fitty.observeWindowDelay = 100;\n\n // public fit all method, will force redraw no matter what\n fitty.fitAll = redrawAll(DrawState.DIRTY);\n\n // export our fitty function, we don't want to keep it to our selves\n return fitty;\n}(typeof window === 'undefined' ? null : window);","import { extend, queryAll, closest, getMimeTypeFromFile, encodeRFC3986URI } from '../utils/util.js'\nimport { isMobile } from '../utils/device.js'\n\nimport fitty from 'fitty';\n\n/**\n * Handles loading, unloading and playback of slide\n * content such as images, videos and iframes.\n */\nexport default class SlideContent {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.startEmbeddedIframe = this.startEmbeddedIframe.bind( this );\n\n\t}\n\n\t/**\n\t * Should the given element be preloaded?\n\t * Decides based on local element attributes and global config.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tshouldPreload( element ) {\n\n\t\t// Prefer an explicit global preload setting\n\t\tlet preload = this.Reveal.getConfig().preloadIframes;\n\n\t\t// If no global setting is available, fall back on the element's\n\t\t// own preload setting\n\t\tif( typeof preload !== 'boolean' ) {\n\t\t\tpreload = element.hasAttribute( 'data-preload' );\n\t\t}\n\n\t\treturn preload;\n\t}\n\n\t/**\n\t * Called when the given slide is within the configured view\n\t * distance. Shows the slide element and loads any content\n\t * that is set to load lazily (data-src).\n\t *\n\t * @param {HTMLElement} slide Slide to show\n\t */\n\tload( slide, options = {} ) {\n\n\t\t// Show the slide element\n\t\tslide.style.display = this.Reveal.getConfig().display;\n\n\t\t// Media elements with data-src attributes\n\t\tqueryAll( slide, 'img[data-src], video[data-src], audio[data-src], iframe[data-src]' ).forEach( element => {\n\t\t\tif( element.tagName !== 'IFRAME' || this.shouldPreload( element ) ) {\n\t\t\t\telement.setAttribute( 'src', element.getAttribute( 'data-src' ) );\n\t\t\t\telement.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\telement.removeAttribute( 'data-src' );\n\t\t\t}\n\t\t} );\n\n\t\t// Media elements with