From 9538765eade925836f2b5ba0f4aac939df821586 Mon Sep 17 00:00:00 2001 From: Cedric Hoelzl Date: Thu, 5 May 2022 17:04:54 +0200 Subject: [PATCH] Added Slides --- .gitignore | 12 + LICENSE | 19 + README.md | 65 + css/layout.scss | 69 + css/print/paper.scss | 173 + css/print/pdf.scss | 156 + css/reveal.scss | 1827 ++++++ css/theme/README.md | 21 + css/theme/source/beige.scss | 41 + css/theme/source/black.scss | 46 + css/theme/source/blood.scss | 87 + css/theme/source/league.scss | 36 + css/theme/source/moon.scss | 58 + css/theme/source/night.scss | 37 + css/theme/source/serif.scss | 38 + css/theme/source/simple.scss | 40 + css/theme/source/sky.scss | 49 + css/theme/source/solarized.scss | 63 + css/theme/source/white.scss | 46 + css/theme/template/exposer.scss | 28 + css/theme/template/mixins.scss | 45 + css/theme/template/settings.scss | 45 + css/theme/template/theme.scss | 331 + dist/img/build.jpg | Bin 0 -> 70567 bytes dist/img/case_back.png | Bin 0 -> 54215 bytes dist/img/case_front.png | Bin 0 -> 43507 bytes dist/img/cpu.svg | 59 + dist/img/display.svg | 16 + dist/img/esp32d.png | Bin 0 -> 225099 bytes dist/img/espressif.svg | 55 + dist/img/green.svg | 16 + dist/img/i2c.png | Bin 0 -> 16983 bytes dist/img/i2cd.svg | 3 + dist/img/influxdb.svg | 23 + dist/img/lock.svg | 16 + dist/img/meter.svg | 19 + dist/img/openweathermap.png | Bin 0 -> 13005 bytes dist/img/power.svg | 14 + dist/img/sleep.svg | 6 + dist/img/spid.svg | 3 + dist/img/sysd.png | Bin 0 -> 53000 bytes dist/img/sysd.svg | 3 + dist/img/time.svg | 15 + dist/img/timer.svg | 38 + dist/reset.css | 30 + dist/reveal.css | 8 + dist/reveal.esm.js | 9 + dist/reveal.esm.js.map | 1 + dist/reveal.js | 9 + dist/reveal.js.map | 1 + dist/theme/beige.css | 364 ++ dist/theme/black.css | 357 ++ dist/theme/blood.css | 390 ++ dist/theme/fonts/league-gothic/LICENSE | 2 + .../fonts/league-gothic/league-gothic.css | 10 + .../fonts/league-gothic/league-gothic.eot | Bin 0 -> 25696 bytes .../fonts/league-gothic/league-gothic.ttf | Bin 0 -> 64256 bytes .../fonts/league-gothic/league-gothic.woff | Bin 0 -> 30764 bytes dist/theme/fonts/source-sans-pro/LICENSE | 45 + .../source-sans-pro-italic.eot | Bin 0 -> 75720 bytes .../source-sans-pro-italic.ttf | Bin 0 -> 238084 bytes .../source-sans-pro-italic.woff | Bin 0 -> 98556 bytes .../source-sans-pro-regular.eot | Bin 0 -> 88070 bytes .../source-sans-pro-regular.ttf | Bin 0 -> 288008 bytes .../source-sans-pro-regular.woff | Bin 0 -> 114324 bytes .../source-sans-pro-semibold.eot | Bin 0 -> 89897 bytes .../source-sans-pro-semibold.ttf | Bin 0 -> 284640 bytes .../source-sans-pro-semibold.woff | Bin 0 -> 115648 bytes .../source-sans-pro-semibolditalic.eot | Bin 0 -> 75706 bytes .../source-sans-pro-semibolditalic.ttf | Bin 0 -> 240944 bytes .../source-sans-pro-semibolditalic.woff | Bin 0 -> 98816 bytes .../fonts/source-sans-pro/source-sans-pro.css | 39 + dist/theme/league.css | 366 ++ dist/theme/moon.css | 365 ++ dist/theme/night.css | 358 ++ dist/theme/serif.css | 361 ++ dist/theme/simple.css | 360 ++ dist/theme/sky.css | 368 ++ dist/theme/solarized.css | 361 ++ dist/theme/white.css | 357 ++ gulpfile.js | 319 + index.html | 309 + js/components/playback.js | 165 + js/config.js | 293 + js/controllers/autoanimate.js | 634 ++ js/controllers/backgrounds.js | 406 ++ js/controllers/controls.js | 266 + js/controllers/focus.js | 103 + js/controllers/fragments.js | 376 ++ js/controllers/keyboard.js | 392 ++ js/controllers/location.js | 245 + js/controllers/notes.js | 120 + js/controllers/overview.js | 255 + js/controllers/plugins.js | 254 + js/controllers/pointer.js | 129 + js/controllers/print.js | 236 + js/controllers/progress.js | 110 + js/controllers/slidecontent.js | 479 ++ js/controllers/slidenumber.js | 132 + js/controllers/touch.js | 263 + js/index.js | 58 + js/reveal.js | 2810 +++++++++ js/utils/color.js | 77 + js/utils/constants.js | 10 + js/utils/device.js | 8 + js/utils/loader.js | 46 + js/utils/util.js | 297 + package.json | 100 + plugin/highlight/highlight.esm.js | 5 + plugin/highlight/highlight.js | 5 + plugin/highlight/monokai.css | 71 + plugin/highlight/plugin.js | 439 ++ plugin/highlight/zenburn.css | 80 + plugin/markdown/markdown.esm.js | 1 + plugin/markdown/markdown.js | 1 + plugin/markdown/plugin.js | 475 ++ plugin/math/katex.js | 96 + plugin/math/math.esm.js | 1 + plugin/math/math.js | 1 + plugin/math/mathjax2.js | 89 + plugin/math/mathjax3.js | 77 + plugin/math/plugin.js | 15 + plugin/notes/notes.esm.js | 1 + plugin/notes/notes.js | 1 + plugin/notes/plugin.js | 236 + plugin/notes/speaker-view.html | 884 +++ plugin/search/plugin.js | 243 + plugin/search/search.esm.js | 7 + plugin/search/search.js | 7 + plugin/zoom/plugin.js | 264 + plugin/zoom/zoom.esm.js | 4 + plugin/zoom/zoom.js | 4 + yarn.lock | 5328 +++++++++++++++++ 133 files changed, 25006 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 css/layout.scss create mode 100644 css/print/paper.scss create mode 100644 css/print/pdf.scss create mode 100644 css/reveal.scss create mode 100644 css/theme/README.md create mode 100644 css/theme/source/beige.scss create mode 100644 css/theme/source/black.scss create mode 100644 css/theme/source/blood.scss create mode 100644 css/theme/source/league.scss create mode 100644 css/theme/source/moon.scss create mode 100644 css/theme/source/night.scss create mode 100644 css/theme/source/serif.scss create mode 100644 css/theme/source/simple.scss create mode 100644 css/theme/source/sky.scss create mode 100644 css/theme/source/solarized.scss create mode 100644 css/theme/source/white.scss create mode 100644 css/theme/template/exposer.scss create mode 100644 css/theme/template/mixins.scss create mode 100644 css/theme/template/settings.scss create mode 100644 css/theme/template/theme.scss create mode 100644 dist/img/build.jpg create mode 100644 dist/img/case_back.png create mode 100644 dist/img/case_front.png create mode 100644 dist/img/cpu.svg create mode 100644 dist/img/display.svg create mode 100644 dist/img/esp32d.png create mode 100644 dist/img/espressif.svg create mode 100644 dist/img/green.svg create mode 100644 dist/img/i2c.png create mode 100644 dist/img/i2cd.svg create mode 100644 dist/img/influxdb.svg create mode 100644 dist/img/lock.svg create mode 100644 dist/img/meter.svg create mode 100644 dist/img/openweathermap.png create mode 100644 dist/img/power.svg create mode 100644 dist/img/sleep.svg create mode 100644 dist/img/spid.svg create mode 100644 dist/img/sysd.png create mode 100644 dist/img/sysd.svg create mode 100644 dist/img/time.svg create mode 100644 dist/img/timer.svg create mode 100644 dist/reset.css create mode 100644 dist/reveal.css create mode 100644 dist/reveal.esm.js create mode 100644 dist/reveal.esm.js.map create mode 100644 dist/reveal.js create mode 100644 dist/reveal.js.map create mode 100644 dist/theme/beige.css create mode 100644 dist/theme/black.css create mode 100644 dist/theme/blood.css create mode 100644 dist/theme/fonts/league-gothic/LICENSE create mode 100644 dist/theme/fonts/league-gothic/league-gothic.css create mode 100755 dist/theme/fonts/league-gothic/league-gothic.eot create mode 100755 dist/theme/fonts/league-gothic/league-gothic.ttf create mode 100755 dist/theme/fonts/league-gothic/league-gothic.woff create mode 100644 dist/theme/fonts/source-sans-pro/LICENSE create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf create mode 100755 dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff create mode 100644 dist/theme/fonts/source-sans-pro/source-sans-pro.css create mode 100644 dist/theme/league.css create mode 100644 dist/theme/moon.css create mode 100644 dist/theme/night.css create mode 100644 dist/theme/serif.css create mode 100644 dist/theme/simple.css create mode 100644 dist/theme/sky.css create mode 100644 dist/theme/solarized.css create mode 100644 dist/theme/white.css create mode 100644 gulpfile.js create mode 100644 index.html create mode 100644 js/components/playback.js create mode 100644 js/config.js create mode 100644 js/controllers/autoanimate.js create mode 100644 js/controllers/backgrounds.js create mode 100644 js/controllers/controls.js create mode 100644 js/controllers/focus.js create mode 100644 js/controllers/fragments.js create mode 100644 js/controllers/keyboard.js create mode 100644 js/controllers/location.js create mode 100644 js/controllers/notes.js create mode 100644 js/controllers/overview.js create mode 100644 js/controllers/plugins.js create mode 100644 js/controllers/pointer.js create mode 100644 js/controllers/print.js create mode 100644 js/controllers/progress.js create mode 100644 js/controllers/slidecontent.js create mode 100644 js/controllers/slidenumber.js create mode 100644 js/controllers/touch.js create mode 100644 js/index.js create mode 100644 js/reveal.js create mode 100644 js/utils/color.js create mode 100644 js/utils/constants.js create mode 100644 js/utils/device.js create mode 100644 js/utils/loader.js create mode 100644 js/utils/util.js create mode 100644 package.json create mode 100644 plugin/highlight/highlight.esm.js create mode 100644 plugin/highlight/highlight.js create mode 100644 plugin/highlight/monokai.css create mode 100644 plugin/highlight/plugin.js create mode 100644 plugin/highlight/zenburn.css create mode 100644 plugin/markdown/markdown.esm.js create mode 100644 plugin/markdown/markdown.js create mode 100755 plugin/markdown/plugin.js create mode 100755 plugin/math/katex.js create mode 100644 plugin/math/math.esm.js create mode 100644 plugin/math/math.js create mode 100644 plugin/math/mathjax2.js create mode 100644 plugin/math/mathjax3.js create mode 100644 plugin/math/plugin.js create mode 100644 plugin/notes/notes.esm.js create mode 100644 plugin/notes/notes.js create mode 100644 plugin/notes/plugin.js create mode 100644 plugin/notes/speaker-view.html create mode 100644 plugin/search/plugin.js create mode 100644 plugin/search/search.esm.js create mode 100644 plugin/search/search.js create mode 100644 plugin/zoom/plugin.js create mode 100644 plugin/zoom/zoom.esm.js create mode 100644 plugin/zoom/zoom.js create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df66247 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +.idea/ +*.iml +*.iws +*.eml +out/ +.DS_Store +.svn +log/*.log +tmp/** +node_modules/ +.sass-cache +OLD/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f11bb2e --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2011-2022 Hakim El Hattab, http://hakim.se, and reveal.js contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..67754a6 --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +

+ + reveal.js + +

+ + Slides +

+ +reveal.js is an open source HTML presentation framework. It enables anyone with a web browser to create beautiful presentations for free. Check out the live demo at [revealjs.com](https://revealjs.com/). + +The framework comes with a powerful feature set including [nested slides](https://revealjs.com/vertical-slides/), [Markdown support](https://revealjs.com/markdown/), [Auto-Animate](https://revealjs.com/auto-animate/), [PDF export](https://revealjs.com/pdf-export/), [speaker notes](https://revealjs.com/speaker-view/), [LaTeX typesetting](https://revealjs.com/math/), [syntax highlighted code](https://revealjs.com/code/) and an [extensive API](https://revealjs.com/api/). + +--- + +### Sponsors +Hakim's open source work is supported by GitHub sponsors. Special thanks to: +
+ + + +
+ +
+ WorkOS +
+ Your app, enterprise-ready. +
+ Start selling to enterprise customers with just a few lines of code. Add Single Sign-On (and more) in minutes instead of months. +
+
+
+ +
+ Doppler +
+ All your environment variables, in one place +
+ Stop struggling with scattered API keys, hacking together home-brewed tools, and avoiding access controls. Keep your team and servers in sync with Doppler. +
+
+
+
+ +--- + +### Getting started +- 🚀 [Install reveal.js](https://revealjs.com/installation) +- 👀 [View the demo presentation](https://revealjs.com/demo) +- 📖 [Read the documentation](https://revealjs.com/markup/) +- 🖌 [Try the visual editor for reveal.js at Slides.com](https://slides.com/) +- 🎬 [Watch the reveal.js video course (paid)](https://revealjs.com/course) + +--- + +### Online Editor +Want to create your presentation using a visual editor? Try the official reveal.js presentation platform for free at [Slides.com](https://slides.com). It's made by the same people behind reveal.js. + +
+
+ +--- +
+ MIT licensed | Copyright © 2011-2022 Hakim El Hattab, https://hakim.se +
diff --git a/css/layout.scss b/css/layout.scss new file mode 100644 index 0000000..f499fdd --- /dev/null +++ b/css/layout.scss @@ -0,0 +1,69 @@ +/** + * Layout helpers. + */ + +// Stretch an element vertically based on available space +.reveal .stretch, +.reveal .r-stretch { + max-width: none; + max-height: none; +} + +.reveal pre.stretch code, +.reveal pre.r-stretch code { + height: 100%; + max-height: 100%; + box-sizing: border-box; +} + +// Text that auto-fits its container +.reveal .r-fit-text { + display: inline-block; // https://github.com/rikschennink/fitty#performance + white-space: nowrap; +} + +// Stack multiple elements on top of each other +.reveal .r-stack { + display: grid; +} + +.reveal .r-stack > * { + grid-area: 1/1; + margin: auto; +} + +// Horizontal and vertical stacks +.reveal .r-vstack, +.reveal .r-hstack { + display: flex; + + img, video { + min-width: 0; + min-height: 0; + object-fit: contain; + } +} + +.reveal .r-vstack { + flex-direction: column; + align-items: center; + justify-content: center; +} + +.reveal .r-hstack { + flex-direction: row; + align-items: center; + justify-content: center; +} + +// Naming based on tailwindcss +.reveal .items-stretch { align-items: stretch; } +.reveal .items-start { align-items: flex-start; } +.reveal .items-center { align-items: center; } +.reveal .items-end { align-items: flex-end; } + +.reveal .justify-between { justify-content: space-between; } +.reveal .justify-around { justify-content: space-around; } +.reveal .justify-start { justify-content: flex-start; } +.reveal .justify-center { justify-content: center; } +.reveal .justify-end { justify-content: flex-end; } diff --git a/css/print/paper.scss b/css/print/paper.scss new file mode 100644 index 0000000..2ffa3b0 --- /dev/null +++ b/css/print/paper.scss @@ -0,0 +1,173 @@ +/* Default Print Stylesheet Template + by Rob Glazebrook of CSSnewbie.com + Last Updated: June 4, 2008 + + Feel free (nay, compelled) to edit, append, and + manipulate this file as you see fit. */ + +@media print { + html:not(.print-pdf) { + + background: #fff; + width: auto; + height: auto; + overflow: visible; + + body { + background: #fff; + font-size: 20pt; + width: auto; + height: auto; + border: 0; + margin: 0 5%; + padding: 0; + overflow: visible; + float: none !important; + } + + .nestedarrow, + .controls, + .fork-reveal, + .share-reveal, + .state-background, + .reveal .progress, + .reveal .backgrounds, + .reveal .slide-number { + display: none !important; + } + + body, p, td, li { + font-size: 20pt!important; + color: #000; + } + + h1,h2,h3,h4,h5,h6 { + color: #000!important; + height: auto; + line-height: normal; + text-align: left; + letter-spacing: normal; + } + + /* Need to reduce the size of the fonts for printing */ + h1 { font-size: 28pt !important; } + h2 { font-size: 24pt !important; } + h3 { font-size: 22pt !important; } + h4 { font-size: 22pt !important; font-variant: small-caps; } + h5 { font-size: 21pt !important; } + h6 { font-size: 20pt !important; font-style: italic; } + + a:link, + a:visited { + color: #000 !important; + font-weight: bold; + text-decoration: underline; + } + + ul, ol, div, p { + visibility: visible; + position: static; + width: auto; + height: auto; + display: block; + overflow: visible; + margin: 0; + text-align: left !important; + } + .reveal pre, + .reveal table { + margin-left: 0; + margin-right: 0; + } + .reveal pre code { + padding: 20px; + } + .reveal blockquote { + margin: 20px 0; + } + .reveal .slides { + position: static !important; + width: auto !important; + height: auto !important; + + left: 0 !important; + top: 0 !important; + margin-left: 0 !important; + margin-top: 0 !important; + padding: 0 !important; + zoom: 1 !important; + transform: none !important; + + overflow: visible !important; + display: block !important; + + text-align: left !important; + perspective: none; + + perspective-origin: 50% 50%; + } + .reveal .slides section { + visibility: visible !important; + position: static !important; + width: auto !important; + height: auto !important; + display: block !important; + overflow: visible !important; + + left: 0 !important; + top: 0 !important; + margin-left: 0 !important; + margin-top: 0 !important; + padding: 60px 20px !important; + z-index: auto !important; + + opacity: 1 !important; + + page-break-after: always !important; + + transform-style: flat !important; + transform: none !important; + transition: none !important; + } + .reveal .slides section.stack { + padding: 0 !important; + } + .reveal section:last-of-type { + page-break-after: avoid !important; + } + .reveal section .fragment { + opacity: 1 !important; + visibility: visible !important; + + transform: none !important; + } + .reveal section img { + display: block; + margin: 15px 0px; + background: rgba(255,255,255,1); + border: 1px solid #666; + box-shadow: none; + } + + .reveal section small { + font-size: 0.8em; + } + + .reveal .hljs { + max-height: 100%; + white-space: pre-wrap; + word-wrap: break-word; + word-break: break-word; + font-size: 15pt; + } + + .reveal .hljs .hljs-ln-numbers { + white-space: nowrap; + } + + .reveal .hljs td { + font-size: inherit !important; + color: inherit !important; + } + } +} diff --git a/css/print/pdf.scss b/css/print/pdf.scss new file mode 100644 index 0000000..f967845 --- /dev/null +++ b/css/print/pdf.scss @@ -0,0 +1,156 @@ +/** + * This stylesheet is used to print reveal.js + * presentations to PDF. + * + * https://revealjs.com/pdf-export/ + */ + +html.print-pdf { + * { + -webkit-print-color-adjust: exact; + } + + & { + width: 100%; + height: 100%; + overflow: visible; + } + + body { + margin: 0 auto !important; + border: 0; + padding: 0; + float: none !important; + overflow: visible; + } + + /* Remove any elements not needed in print. */ + .nestedarrow, + .reveal .controls, + .reveal .progress, + .reveal .playback, + .reveal.overview, + .state-background { + display: none !important; + } + + .reveal pre code { + overflow: hidden !important; + font-family: Courier, 'Courier New', monospace !important; + } + + .reveal { + width: auto !important; + height: auto !important; + overflow: hidden !important; + } + .reveal .slides { + position: static; + width: 100% !important; + height: auto !important; + zoom: 1 !important; + pointer-events: initial; + + left: auto; + top: auto; + margin: 0 !important; + padding: 0 !important; + + overflow: visible; + display: block; + + perspective: none; + perspective-origin: 50% 50%; + } + + .reveal .slides .pdf-page { + position: relative; + overflow: hidden; + z-index: 1; + + page-break-after: always; + } + + .reveal .slides section { + visibility: visible !important; + display: block !important; + position: absolute !important; + + margin: 0 !important; + padding: 0 !important; + box-sizing: border-box !important; + min-height: 1px; + + opacity: 1 !important; + + transform-style: flat !important; + transform: none !important; + } + + .reveal section.stack { + position: relative !important; + margin: 0 !important; + padding: 0 !important; + page-break-after: avoid !important; + height: auto !important; + min-height: auto !important; + } + + .reveal img { + box-shadow: none; + } + + + /* Slide backgrounds are placed inside of their slide when exporting to PDF */ + .reveal .backgrounds { + display: none; + } + .reveal .slide-background { + display: block !important; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: auto !important; + } + + /* Display slide speaker notes when 'showNotes' is enabled */ + .reveal.show-notes { + max-width: none; + max-height: none; + } + .reveal .speaker-notes-pdf { + display: block; + width: 100%; + height: auto; + max-height: none; + top: auto; + right: auto; + bottom: auto; + left: auto; + z-index: 100; + } + + /* Layout option which makes notes appear on a separate page */ + .reveal .speaker-notes-pdf[data-layout="separate-page"] { + position: relative; + color: inherit; + background-color: transparent; + padding: 20px; + page-break-after: always; + border: 0; + } + + /* Display slide numbers when 'slideNumber' is enabled */ + .reveal .slide-number-pdf { + display: block; + position: absolute; + font-size: 14px; + } + + /* This accessibility tool is not useful in PDF and breaks it visually */ + .aria-status { + display: none; + } +} diff --git a/css/reveal.scss b/css/reveal.scss new file mode 100644 index 0000000..8325c04 --- /dev/null +++ b/css/reveal.scss @@ -0,0 +1,1827 @@ +@use "sass:math"; + +/** + * reveal.js + * http://revealjs.com + * MIT licensed + * + * Copyright (C) Hakim El Hattab, https://hakim.se + */ + +@import 'layout'; + +/********************************************* + * GLOBAL STYLES + *********************************************/ + +html.reveal-full-page { + width: 100%; + height: 100%; + height: 100vh; + height: calc( var(--vh, 1vh) * 100 ); + overflow: hidden; +} + +.reveal-viewport { + height: 100%; + overflow: hidden; + position: relative; + line-height: 1; + margin: 0; + + background-color: #fff; + color: #000; +} + +// Force the presentation to cover the full viewport when we +// enter fullscreen mode. Fixes sizing issues in Safari. +.reveal-viewport:fullscreen { + top: 0 !important; + left: 0 !important; + width: 100% !important; + height: 100% !important; + transform: none !important; +} + + +/********************************************* + * VIEW FRAGMENTS + *********************************************/ + +.reveal .slides section .fragment { + opacity: 0; + visibility: hidden; + transition: all .2s ease; + will-change: opacity; + + &.visible { + opacity: 1; + visibility: inherit; + } + + &.disabled { + transition: none; + } +} + +.reveal .slides section .fragment.grow { + opacity: 1; + visibility: inherit; + + &.visible { + transform: scale( 1.3 ); + } +} + +.reveal .slides section .fragment.shrink { + opacity: 1; + visibility: inherit; + + &.visible { + transform: scale( 0.7 ); + } +} + +.reveal .slides section .fragment.zoom-in { + transform: scale( 0.1 ); + + &.visible { + transform: none; + } +} + +.reveal .slides section .fragment.fade-out { + opacity: 1; + visibility: inherit; + + &.visible { + opacity: 0; + visibility: hidden; + } +} + +.reveal .slides section .fragment.semi-fade-out { + opacity: 1; + visibility: inherit; + + &.visible { + opacity: 0.5; + visibility: inherit; + } +} + +.reveal .slides section .fragment.strike { + opacity: 1; + visibility: inherit; + + &.visible { + text-decoration: line-through; + } +} + +.reveal .slides section .fragment.fade-up { + transform: translate(0, 40px); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .slides section .fragment.fade-down { + transform: translate(0, -40px); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .slides section .fragment.fade-right { + transform: translate(-40px, 0); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .slides section .fragment.fade-left { + transform: translate(40px, 0); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .slides section .fragment.fade-in-then-out, +.reveal .slides section .fragment.current-visible { + opacity: 0; + visibility: hidden; + + &.current-fragment { + opacity: 1; + visibility: inherit; + } +} + +.reveal .slides section .fragment.fade-in-then-semi-out { + opacity: 0; + visibility: hidden; + + &.visible { + opacity: 0.5; + visibility: inherit; + } + + &.current-fragment { + opacity: 1; + visibility: inherit; + } +} + +.reveal .slides section .fragment.highlight-red, +.reveal .slides section .fragment.highlight-current-red, +.reveal .slides section .fragment.highlight-green, +.reveal .slides section .fragment.highlight-current-green, +.reveal .slides section .fragment.highlight-blue, +.reveal .slides section .fragment.highlight-current-blue { + opacity: 1; + visibility: inherit; +} + .reveal .slides section .fragment.highlight-red.visible { + color: #ff2c2d + } + .reveal .slides section .fragment.highlight-green.visible { + color: #17ff2e; + } + .reveal .slides section .fragment.highlight-blue.visible { + color: #1b91ff; + } + +.reveal .slides section .fragment.highlight-current-red.current-fragment { + color: #ff2c2d +} +.reveal .slides section .fragment.highlight-current-green.current-fragment { + color: #17ff2e; +} +.reveal .slides section .fragment.highlight-current-blue.current-fragment { + color: #1b91ff; +} + + +/********************************************* + * DEFAULT ELEMENT STYLES + *********************************************/ + +/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */ +.reveal:after { + content: ''; + font-style: italic; +} + +.reveal iframe { + z-index: 1; +} + +/** Prevents layering issues in certain browser/transition combinations */ +.reveal a { + position: relative; +} + + +/********************************************* + * CONTROLS + *********************************************/ + +@keyframes bounce-right { + 0%, 10%, 25%, 40%, 50% {transform: translateX(0);} + 20% {transform: translateX(10px);} + 30% {transform: translateX(-5px);} +} + +@keyframes bounce-left { + 0%, 10%, 25%, 40%, 50% {transform: translateX(0);} + 20% {transform: translateX(-10px);} + 30% {transform: translateX(5px);} +} + +@keyframes bounce-down { + 0%, 10%, 25%, 40%, 50% {transform: translateY(0);} + 20% {transform: translateY(10px);} + 30% {transform: translateY(-5px);} +} + +$controlArrowSize: 3.6em; +$controlArrowSpacing: 1.4em; +$controlArrowLength: 2.6em; +$controlArrowThickness: 0.5em; +$controlsArrowAngle: 45deg; +$controlsArrowAngleHover: 40deg; +$controlsArrowAngleActive: 36deg; + +@mixin controlsArrowTransform( $angle ) { + &:before { + transform: translateX(($controlArrowSize - $controlArrowLength)*0.5) translateY(($controlArrowSize - $controlArrowThickness)*0.5) rotate( $angle ); + } + + &:after { + transform: translateX(($controlArrowSize - $controlArrowLength)*0.5) translateY(($controlArrowSize - $controlArrowThickness)*0.5) rotate( -$angle ); + } +} + +.reveal .controls { + $spacing: 12px; + + display: none; + position: absolute; + top: auto; + bottom: $spacing; + right: $spacing; + left: auto; + z-index: 11; + color: #000; + pointer-events: none; + font-size: 10px; + + button { + position: absolute; + padding: 0; + background-color: transparent; + border: 0; + outline: 0; + cursor: pointer; + color: currentColor; + transform: scale(.9999); + transition: color 0.2s ease, + opacity 0.2s ease, + transform 0.2s ease; + z-index: 2; // above slides + pointer-events: auto; + font-size: inherit; + + visibility: hidden; + opacity: 0; + + -webkit-appearance: none; + -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 ); + } + + .controls-arrow:before, + .controls-arrow:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: $controlArrowLength; + height: $controlArrowThickness; + border-radius: $controlArrowThickness*0.5; + background-color: currentColor; + + transition: all 0.15s ease, background-color 0.8s ease; + transform-origin: math.div(floor(($controlArrowThickness*0.5)*10), 10) 50%; + will-change: transform; + } + + .controls-arrow { + position: relative; + width: $controlArrowSize; + height: $controlArrowSize; + + @include controlsArrowTransform( $controlsArrowAngle ); + + &:hover { + @include controlsArrowTransform( $controlsArrowAngleHover ); + } + + &:active { + @include controlsArrowTransform( $controlsArrowAngleActive ); + } + } + + .navigate-left { + right: $controlArrowSize + $controlArrowSpacing*2; + bottom: $controlArrowSpacing + $controlArrowSize*0.5; + transform: translateX( -10px ); + + &.highlight { + animation: bounce-left 2s 50 both ease-out; + } + } + + .navigate-right { + right: 0; + bottom: $controlArrowSpacing + $controlArrowSize*0.5; + transform: translateX( 10px ); + + .controls-arrow { + transform: rotate( 180deg ); + } + + &.highlight { + animation: bounce-right 2s 50 both ease-out; + } + } + + .navigate-up { + right: $controlArrowSpacing + $controlArrowSize*0.5; + bottom: $controlArrowSpacing*2 + $controlArrowSize; + transform: translateY( -10px ); + + .controls-arrow { + transform: rotate( 90deg ); + } + } + + .navigate-down { + right: $controlArrowSpacing + $controlArrowSize*0.5; + bottom: -$controlArrowSpacing; + padding-bottom: $controlArrowSpacing; + transform: translateY( 10px ); + + .controls-arrow { + transform: rotate( -90deg ); + } + + &.highlight { + animation: bounce-down 2s 50 both ease-out; + } + } + + // Back arrow style: "faded": + // Deemphasize backwards navigation arrows in favor of drawing + // attention to forwards navigation + &[data-controls-back-arrows="faded"] .navigate-up.enabled { + opacity: 0.3; + + &:hover { + opacity: 1; + } + } + + // Back arrow style: "hidden": + // Never show arrows for backwards navigation + &[data-controls-back-arrows="hidden"] .navigate-up.enabled { + opacity: 0; + visibility: hidden; + } + + // Any control button that can be clicked is "enabled" + .enabled { + visibility: visible; + opacity: 0.9; + cursor: pointer; + transform: none; + } + + // Any control button that leads to showing or hiding + // a fragment + .enabled.fragmented { + opacity: 0.5; + } + + .enabled:hover, + .enabled.fragmented:hover { + opacity: 1; + } +} + +.reveal:not(.rtl) .controls { + // Back arrow style: "faded": + // Deemphasize left arrow + &[data-controls-back-arrows="faded"] .navigate-left.enabled { + opacity: 0.3; + + &:hover { + opacity: 1; + } + } + + // Back arrow style: "hidden": + // Never show left arrow + &[data-controls-back-arrows="hidden"] .navigate-left.enabled { + opacity: 0; + visibility: hidden; + } +} + +.reveal.rtl .controls { + // Back arrow style: "faded": + // Deemphasize right arrow in RTL mode + &[data-controls-back-arrows="faded"] .navigate-right.enabled { + opacity: 0.3; + + &:hover { + opacity: 1; + } + } + + // Back arrow style: "hidden": + // Never show right arrow in RTL mode + &[data-controls-back-arrows="hidden"] .navigate-right.enabled { + opacity: 0; + visibility: hidden; + } +} + +.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-up, +.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-down { + display: none; +} + +// Adjust the layout when there are no vertical slides +.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-left, +.reveal:not(.has-vertical-slides) .controls .navigate-left { + bottom: $controlArrowSpacing; + right: 0.5em + $controlArrowSpacing + $controlArrowSize; +} + +.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-right, +.reveal:not(.has-vertical-slides) .controls .navigate-right { + bottom: $controlArrowSpacing; + right: 0.5em; +} + +// Adjust the layout when there are no horizontal slides +.reveal:not(.has-horizontal-slides) .controls .navigate-up { + right: $controlArrowSpacing; + bottom: $controlArrowSpacing + $controlArrowSize; +} +.reveal:not(.has-horizontal-slides) .controls .navigate-down { + right: $controlArrowSpacing; + bottom: 0.5em; +} + +// Invert arrows based on background color +.reveal.has-dark-background .controls { + color: #fff; +} +.reveal.has-light-background .controls { + color: #000; +} + +// Disable active states on touch devices +.reveal.no-hover .controls .controls-arrow:hover, +.reveal.no-hover .controls .controls-arrow:active { + @include controlsArrowTransform( $controlsArrowAngle ); +} + +// Edge aligned controls layout +@media screen and (min-width: 500px) { + + $spacing: 0.8em; + + .reveal .controls[data-controls-layout="edges"] { + & { + top: 0; + right: 0; + bottom: 0; + left: 0; + } + + .navigate-left, + .navigate-right, + .navigate-up, + .navigate-down { + bottom: auto; + right: auto; + } + + .navigate-left { + top: 50%; + left: $spacing; + margin-top: -$controlArrowSize*0.5; + } + + .navigate-right { + top: 50%; + right: $spacing; + margin-top: -$controlArrowSize*0.5; + } + + .navigate-up { + top: $spacing; + left: 50%; + margin-left: -$controlArrowSize*0.5; + } + + .navigate-down { + bottom: $spacing - $controlArrowSpacing + 0.3em; + left: 50%; + margin-left: -$controlArrowSize*0.5; + } + } + +} + + +/********************************************* + * PROGRESS BAR + *********************************************/ + +.reveal .progress { + position: absolute; + display: none; + height: 3px; + width: 100%; + bottom: 0; + left: 0; + z-index: 10; + + background-color: rgba( 0, 0, 0, 0.2 ); + color: #fff; +} + .reveal .progress:after { + content: ''; + display: block; + position: absolute; + height: 10px; + width: 100%; + top: -10px; + } + .reveal .progress span { + display: block; + height: 100%; + width: 100%; + + background-color: currentColor; + transition: transform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + transform-origin: 0 0; + transform: scaleX(0); + } + +/********************************************* + * SLIDE NUMBER + *********************************************/ + +.reveal .slide-number { + position: absolute; + display: block; + right: 8px; + bottom: 8px; + z-index: 31; + font-family: Helvetica, sans-serif; + font-size: 12px; + line-height: 1; + color: #fff; + background-color: rgba( 0, 0, 0, 0.4 ); + padding: 5px; +} + +.reveal .slide-number a { + color: currentColor; +} + +.reveal .slide-number-delimiter { + margin: 0 3px; +} + +/********************************************* + * SLIDES + *********************************************/ + +.reveal { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + touch-action: pinch-zoom; +} + +// Swiping on an embedded deck should not block page scrolling +.reveal.embedded { + touch-action: pan-y; +} + +.reveal .slides { + position: absolute; + width: 100%; + height: 100%; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: auto; + pointer-events: none; + + overflow: visible; + z-index: 1; + text-align: center; + perspective: 600px; + perspective-origin: 50% 40%; +} + +.reveal .slides>section { + perspective: 600px; +} + +.reveal .slides>section, +.reveal .slides>section>section { + display: none; + position: absolute; + width: 100%; + pointer-events: auto; + + z-index: 10; + transform-style: flat; + transition: transform-origin 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + transform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + visibility 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + opacity 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); +} + +/* Global transition speed settings */ +.reveal[data-transition-speed="fast"] .slides section { + transition-duration: 400ms; +} +.reveal[data-transition-speed="slow"] .slides section { + transition-duration: 1200ms; +} + +/* Slide-specific transition speed overrides */ +.reveal .slides section[data-transition-speed="fast"] { + transition-duration: 400ms; +} +.reveal .slides section[data-transition-speed="slow"] { + transition-duration: 1200ms; +} + +.reveal .slides>section.stack { + padding-top: 0; + padding-bottom: 0; + pointer-events: none; + height: 100%; +} + +.reveal .slides>section.present, +.reveal .slides>section>section.present { + display: block; + z-index: 11; + opacity: 1; +} + +.reveal .slides>section:empty, +.reveal .slides>section>section:empty, +.reveal .slides>section[data-background-interactive], +.reveal .slides>section>section[data-background-interactive] { + pointer-events: none; +} + +.reveal.center, +.reveal.center .slides, +.reveal.center .slides section { + min-height: 0 !important; +} + +/* Don't allow interaction with invisible slides */ +.reveal .slides>section:not(.present), +.reveal .slides>section>section:not(.present) { + pointer-events: none; +} + +.reveal.overview .slides>section, +.reveal.overview .slides>section>section { + pointer-events: auto; +} + +.reveal .slides>section.past, +.reveal .slides>section.future, +.reveal .slides>section>section.past, +.reveal .slides>section>section.future { + opacity: 0; +} + + +/********************************************* + * Mixins for readability of transitions + *********************************************/ + +@mixin transition-global($style) { + .reveal .slides section[data-transition=#{$style}], + .reveal.#{$style} .slides section:not([data-transition]) { + @content; + } +} +@mixin transition-stack($style) { + .reveal .slides section[data-transition=#{$style}].stack, + .reveal.#{$style} .slides section.stack { + @content; + } +} +@mixin transition-horizontal-past($style) { + .reveal .slides>section[data-transition=#{$style}].past, + .reveal .slides>section[data-transition~=#{$style}-out].past, + .reveal.#{$style} .slides>section:not([data-transition]).past { + @content; + } +} +@mixin transition-horizontal-future($style) { + .reveal .slides>section[data-transition=#{$style}].future, + .reveal .slides>section[data-transition~=#{$style}-in].future, + .reveal.#{$style} .slides>section:not([data-transition]).future { + @content; + } +} + +@mixin transition-vertical-past($style) { + .reveal .slides>section>section[data-transition=#{$style}].past, + .reveal .slides>section>section[data-transition~=#{$style}-out].past, + .reveal.#{$style} .slides>section>section:not([data-transition]).past { + @content; + } +} +@mixin transition-vertical-future($style) { + .reveal .slides>section>section[data-transition=#{$style}].future, + .reveal .slides>section>section[data-transition~=#{$style}-in].future, + .reveal.#{$style} .slides>section>section:not([data-transition]).future { + @content; + } +} + +/********************************************* + * SLIDE TRANSITION + * Aliased 'linear' for backwards compatibility + *********************************************/ + +@each $stylename in slide, linear { + @include transition-horizontal-past(#{$stylename}) { + transform: translate(-150%, 0); + } + @include transition-horizontal-future(#{$stylename}) { + transform: translate(150%, 0); + } + @include transition-vertical-past(#{$stylename}) { + transform: translate(0, -150%); + } + @include transition-vertical-future(#{$stylename}) { + transform: translate(0, 150%); + } +} + +/********************************************* + * CONVEX TRANSITION + * Aliased 'default' for backwards compatibility + *********************************************/ + +@each $stylename in default, convex { + @include transition-stack(#{$stylename}) { + transform-style: preserve-3d; + } + + @include transition-horizontal-past(#{$stylename}) { + transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); + } + @include transition-horizontal-future(#{$stylename}) { + transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); + } + @include transition-vertical-past(#{$stylename}) { + transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); + } + @include transition-vertical-future(#{$stylename}) { + transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); + } +} + +/********************************************* + * CONCAVE TRANSITION + *********************************************/ + +@include transition-stack(concave) { + transform-style: preserve-3d; +} + +@include transition-horizontal-past(concave) { + transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); +} +@include transition-horizontal-future(concave) { + transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); +} +@include transition-vertical-past(concave) { + transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); +} +@include transition-vertical-future(concave) { + transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); +} + + +/********************************************* + * ZOOM TRANSITION + *********************************************/ + +@include transition-global(zoom) { + transition-timing-function: ease; +} +@include transition-horizontal-past(zoom) { + visibility: hidden; + transform: scale(16); +} +@include transition-horizontal-future(zoom) { + visibility: hidden; + transform: scale(0.2); +} +@include transition-vertical-past(zoom) { + transform: scale(16); +} +@include transition-vertical-future(zoom) { + transform: scale(0.2); +} + + +/********************************************* + * CUBE TRANSITION + * + * WARNING: + * this is deprecated and will be removed in a + * future version. + *********************************************/ + +.reveal.cube .slides { + perspective: 1300px; +} + +.reveal.cube .slides section { + padding: 30px; + min-height: 700px; + backface-visibility: hidden; + box-sizing: border-box; + transform-style: preserve-3d; +} + .reveal.center.cube .slides section { + min-height: 0; + } + .reveal.cube .slides section:not(.stack):before { + content: ''; + position: absolute; + display: block; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0,0,0,0.1); + border-radius: 4px; + transform: translateZ( -20px ); + } + .reveal.cube .slides section:not(.stack):after { + content: ''; + position: absolute; + display: block; + width: 90%; + height: 30px; + left: 5%; + bottom: 0; + background: none; + z-index: 1; + + border-radius: 4px; + box-shadow: 0px 95px 25px rgba(0,0,0,0.2); + transform: translateZ(-90px) rotateX( 65deg ); + } + +.reveal.cube .slides>section.stack { + padding: 0; + background: none; +} + +.reveal.cube .slides>section.past { + transform-origin: 100% 0%; + transform: translate3d(-100%, 0, 0) rotateY(-90deg); +} + +.reveal.cube .slides>section.future { + transform-origin: 0% 0%; + transform: translate3d(100%, 0, 0) rotateY(90deg); +} + +.reveal.cube .slides>section>section.past { + transform-origin: 0% 100%; + transform: translate3d(0, -100%, 0) rotateX(90deg); +} + +.reveal.cube .slides>section>section.future { + transform-origin: 0% 0%; + transform: translate3d(0, 100%, 0) rotateX(-90deg); +} + + +/********************************************* + * PAGE TRANSITION + * + * WARNING: + * this is deprecated and will be removed in a + * future version. + *********************************************/ + +.reveal.page .slides { + perspective-origin: 0% 50%; + perspective: 3000px; +} + +.reveal.page .slides section { + padding: 30px; + min-height: 700px; + box-sizing: border-box; + transform-style: preserve-3d; +} + .reveal.page .slides section.past { + z-index: 12; + } + .reveal.page .slides section:not(.stack):before { + content: ''; + position: absolute; + display: block; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0,0,0,0.1); + transform: translateZ( -20px ); + } + .reveal.page .slides section:not(.stack):after { + content: ''; + position: absolute; + display: block; + width: 90%; + height: 30px; + left: 5%; + bottom: 0; + background: none; + z-index: 1; + + border-radius: 4px; + box-shadow: 0px 95px 25px rgba(0,0,0,0.2); + + -webkit-transform: translateZ(-90px) rotateX( 65deg ); + } + +.reveal.page .slides>section.stack { + padding: 0; + background: none; +} + +.reveal.page .slides>section.past { + transform-origin: 0% 0%; + transform: translate3d(-40%, 0, 0) rotateY(-80deg); +} + +.reveal.page .slides>section.future { + transform-origin: 100% 0%; + transform: translate3d(0, 0, 0); +} + +.reveal.page .slides>section>section.past { + transform-origin: 0% 0%; + transform: translate3d(0, -40%, 0) rotateX(80deg); +} + +.reveal.page .slides>section>section.future { + transform-origin: 0% 100%; + transform: translate3d(0, 0, 0); +} + + +/********************************************* + * FADE TRANSITION + *********************************************/ + +.reveal .slides section[data-transition=fade], +.reveal.fade .slides section:not([data-transition]), +.reveal.fade .slides>section>section:not([data-transition]) { + transform: none; + transition: opacity 0.5s; +} + + +.reveal.fade.overview .slides section, +.reveal.fade.overview .slides>section>section { + transition: none; +} + + +/********************************************* + * NO TRANSITION + *********************************************/ + +@include transition-global(none) { + transform: none; + transition: none; +} + + +/********************************************* + * PAUSED MODE + *********************************************/ + +.reveal .pause-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: black; + visibility: hidden; + opacity: 0; + z-index: 100; + transition: all 1s ease; +} + +.reveal .pause-overlay .resume-button { + position: absolute; + bottom: 20px; + right: 20px; + color: #ccc; + border-radius: 2px; + padding: 6px 14px; + border: 2px solid #ccc; + font-size: 16px; + background: transparent; + cursor: pointer; + + &:hover { + color: #fff; + border-color: #fff; + } +} + +.reveal.paused .pause-overlay { + visibility: visible; + opacity: 1; +} + + +/********************************************* + * FALLBACK + *********************************************/ + +.reveal .no-transition, +.reveal .no-transition *, +.reveal .slides.disable-slide-transitions section { + transition: none !important; +} + +.reveal .slides.disable-slide-transitions section { + transform: none !important; +} + + +/********************************************* + * PER-SLIDE BACKGROUNDS + *********************************************/ + +.reveal .backgrounds { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + perspective: 600px; +} + .reveal .slide-background { + display: none; + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + visibility: hidden; + overflow: hidden; + + background-color: rgba( 0, 0, 0, 0 ); + + transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + } + + .reveal .slide-background-content { + position: absolute; + width: 100%; + height: 100%; + + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: cover; + } + + .reveal .slide-background.stack { + display: block; + } + + .reveal .slide-background.present { + opacity: 1; + visibility: visible; + z-index: 2; + } + + .print-pdf .reveal .slide-background { + opacity: 1 !important; + visibility: visible !important; + } + +/* Video backgrounds */ +.reveal .slide-background video { + position: absolute; + width: 100%; + height: 100%; + max-width: none; + max-height: none; + top: 0; + left: 0; + object-fit: cover; +} + .reveal .slide-background[data-background-size="contain"] video { + object-fit: contain; + } + +/* Immediate transition style */ +.reveal[data-background-transition=none]>.backgrounds .slide-background:not([data-background-transition]), +.reveal>.backgrounds .slide-background[data-background-transition=none] { + transition: none; +} + +/* Slide */ +.reveal[data-background-transition=slide]>.backgrounds .slide-background:not([data-background-transition]), +.reveal>.backgrounds .slide-background[data-background-transition=slide] { + opacity: 1; +} + .reveal[data-background-transition=slide]>.backgrounds .slide-background.past:not([data-background-transition]), + .reveal>.backgrounds .slide-background.past[data-background-transition=slide] { + transform: translate(-100%, 0); + } + .reveal[data-background-transition=slide]>.backgrounds .slide-background.future:not([data-background-transition]), + .reveal>.backgrounds .slide-background.future[data-background-transition=slide] { + transform: translate(100%, 0); + } + + .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]), + .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide] { + transform: translate(0, -100%); + } + .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]), + .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide] { + transform: translate(0, 100%); + } + + +/* Convex */ +.reveal[data-background-transition=convex]>.backgrounds .slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background.past[data-background-transition=convex] { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); +} +.reveal[data-background-transition=convex]>.backgrounds .slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background.future[data-background-transition=convex] { + opacity: 0; + transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); +} + +.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex] { + opacity: 0; + transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); +} +.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex] { + opacity: 0; + transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); +} + + +/* Concave */ +.reveal[data-background-transition=concave]>.backgrounds .slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background.past[data-background-transition=concave] { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); +} +.reveal[data-background-transition=concave]>.backgrounds .slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background.future[data-background-transition=concave] { + opacity: 0; + transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); +} + +.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave] { + opacity: 0; + transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); +} +.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave] { + opacity: 0; + transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); +} + +/* Zoom */ +.reveal[data-background-transition=zoom]>.backgrounds .slide-background:not([data-background-transition]), +.reveal>.backgrounds .slide-background[data-background-transition=zoom] { + transition-timing-function: ease; +} + +.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background.past[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(16); +} +.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background.future[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(0.2); +} + +.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(16); +} +.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(0.2); +} + + +/* Global transition speed settings */ +.reveal[data-transition-speed="fast"]>.backgrounds .slide-background { + transition-duration: 400ms; +} +.reveal[data-transition-speed="slow"]>.backgrounds .slide-background { + transition-duration: 1200ms; +} + + +/********************************************* + * AUTO ANIMATE + *********************************************/ + +.reveal [data-auto-animate-target^="unmatched"] { + will-change: opacity; +} + +.reveal section[data-auto-animate]:not(.stack):not([data-auto-animate="running"]) [data-auto-animate-target^="unmatched"] { + opacity: 0; +} + + +/********************************************* + * OVERVIEW + *********************************************/ + +.reveal.overview { + perspective-origin: 50% 50%; + perspective: 700px; + + .slides { + // Fixes overview rendering errors in FF48+, not applied to + // other browsers since it degrades performance + -moz-transform-style: preserve-3d; + } + + .slides section { + height: 100%; + top: 0 !important; + opacity: 1 !important; + overflow: hidden; + visibility: visible !important; + cursor: pointer; + box-sizing: border-box; + } + .slides section:hover, + .slides section.present { + outline: 10px solid rgba(150,150,150,0.4); + outline-offset: 10px; + } + .slides section .fragment { + opacity: 1; + transition: none; + } + .slides section:after, + .slides section:before { + display: none !important; + } + .slides>section.stack { + padding: 0; + top: 0 !important; + background: none; + outline: none; + overflow: visible; + } + + .backgrounds { + perspective: inherit; + + // Fixes overview rendering errors in FF48+, not applied to + // other browsers since it degrades performance + -moz-transform-style: preserve-3d; + } + + .backgrounds .slide-background { + opacity: 1; + visibility: visible; + + // This can't be applied to the slide itself in Safari + outline: 10px solid rgba(150,150,150,0.1); + outline-offset: 10px; + } + + .backgrounds .slide-background.stack { + overflow: visible; + } +} + +// Disable transitions transitions while we're activating +// or deactivating the overview mode. +.reveal.overview .slides section, +.reveal.overview-deactivating .slides section { + transition: none; +} + +.reveal.overview .backgrounds .slide-background, +.reveal.overview-deactivating .backgrounds .slide-background { + transition: none; +} + + +/********************************************* + * RTL SUPPORT + *********************************************/ + +.reveal.rtl .slides, +.reveal.rtl .slides h1, +.reveal.rtl .slides h2, +.reveal.rtl .slides h3, +.reveal.rtl .slides h4, +.reveal.rtl .slides h5, +.reveal.rtl .slides h6 { + direction: rtl; + font-family: sans-serif; +} + +.reveal.rtl pre, +.reveal.rtl code { + direction: ltr; +} + +.reveal.rtl ol, +.reveal.rtl ul { + text-align: right; +} + +.reveal.rtl .progress span { + transform-origin: 100% 0; +} + +/********************************************* + * PARALLAX BACKGROUND + *********************************************/ + +.reveal.has-parallax-background .backgrounds { + transition: all 0.8s ease; +} + +/* Global transition speed settings */ +.reveal.has-parallax-background[data-transition-speed="fast"] .backgrounds { + transition-duration: 400ms; +} +.reveal.has-parallax-background[data-transition-speed="slow"] .backgrounds { + transition-duration: 1200ms; +} + + +/********************************************* + * OVERLAY FOR LINK PREVIEWS AND HELP + *********************************************/ + +$overlayHeaderHeight: 40px; +$overlayHeaderPadding: 5px; + +.reveal > .overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; + background: rgba( 0, 0, 0, 0.9 ); + transition: all 0.3s ease; +} + + .reveal > .overlay .spinner { + position: absolute; + display: block; + top: 50%; + left: 50%; + width: 32px; + height: 32px; + margin: -16px 0 0 -16px; + z-index: 10; + background-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D); + + visibility: visible; + opacity: 0.6; + transition: all 0.3s ease; + } + + .reveal > .overlay header { + position: absolute; + left: 0; + top: 0; + width: 100%; + padding: $overlayHeaderPadding; + z-index: 2; + box-sizing: border-box; + } + .reveal > .overlay header a { + display: inline-block; + width: $overlayHeaderHeight; + height: $overlayHeaderHeight; + line-height: 36px; + padding: 0 10px; + float: right; + opacity: 0.6; + + box-sizing: border-box; + } + .reveal > .overlay header a:hover { + opacity: 1; + } + .reveal > .overlay header a .icon { + display: inline-block; + width: 20px; + height: 20px; + + background-position: 50% 50%; + background-size: 100%; + background-repeat: no-repeat; + } + .reveal > .overlay header a.close .icon { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); + } + .reveal > .overlay header a.external .icon { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); + } + + .reveal > .overlay .viewport { + position: absolute; + display: flex; + top: $overlayHeaderHeight + $overlayHeaderPadding*2; + right: 0; + bottom: 0; + left: 0; + } + + .reveal > .overlay.overlay-preview .viewport iframe { + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + border: 0; + + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; + } + + .reveal > .overlay.overlay-preview.loaded .viewport iframe { + opacity: 1; + visibility: visible; + } + + .reveal > .overlay.overlay-preview.loaded .viewport-inner { + position: absolute; + z-index: -1; + left: 0; + top: 45%; + width: 100%; + text-align: center; + letter-spacing: normal; + } + .reveal > .overlay.overlay-preview .x-frame-error { + opacity: 0; + transition: opacity 0.3s ease 0.3s; + } + .reveal > .overlay.overlay-preview.loaded .x-frame-error { + opacity: 1; + } + + .reveal > .overlay.overlay-preview.loaded .spinner { + opacity: 0; + visibility: hidden; + transform: scale(0.2); + } + + .reveal > .overlay.overlay-help .viewport { + overflow: auto; + color: #fff; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner { + width: 600px; + margin: auto; + padding: 20px 20px 80px 20px; + text-align: center; + letter-spacing: normal; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner .title { + font-size: 20px; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner table { + border: 1px solid #fff; + border-collapse: collapse; + font-size: 16px; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner table th, + .reveal > .overlay.overlay-help .viewport .viewport-inner table td { + width: 200px; + padding: 14px; + border: 1px solid #fff; + vertical-align: middle; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner table th { + padding-top: 20px; + padding-bottom: 20px; + } + + +/********************************************* + * PLAYBACK COMPONENT + *********************************************/ + +.reveal .playback { + position: absolute; + left: 15px; + bottom: 20px; + z-index: 30; + cursor: pointer; + transition: all 400ms ease; + -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 ); +} + +.reveal.overview .playback { + opacity: 0; + visibility: hidden; +} + + +/********************************************* + * CODE HIGHLGIHTING + *********************************************/ + +.reveal .hljs { + min-height: 100%; +} + +.reveal .hljs table { + margin: initial; +} + +.reveal .hljs-ln-code, +.reveal .hljs-ln-numbers { + padding: 0; + border: 0; +} + +.reveal .hljs-ln-numbers { + opacity: 0.6; + padding-right: 0.75em; + text-align: right; + vertical-align: top; +} + +.reveal .hljs.has-highlights tr:not(.highlight-line) { + opacity: 0.4; +} + +.reveal .hljs:not(:first-child).fragment { + position: absolute; + top: 0; + left: 0; + width: 100%; + box-sizing: border-box; +} + +.reveal pre[data-auto-animate-target] { + overflow: hidden; +} +.reveal pre[data-auto-animate-target] code { + height: 100%; +} + + +/********************************************* + * ROLLING LINKS + *********************************************/ + +.reveal .roll { + display: inline-block; + line-height: 1.2; + overflow: hidden; + + vertical-align: top; + perspective: 400px; + perspective-origin: 50% 50%; +} + .reveal .roll:hover { + background: none; + text-shadow: none; + } +.reveal .roll span { + display: block; + position: relative; + padding: 0 2px; + + pointer-events: none; + transition: all 400ms ease; + transform-origin: 50% 0%; + transform-style: preserve-3d; + backface-visibility: hidden; +} + .reveal .roll:hover span { + background: rgba(0,0,0,0.5); + transform: translate3d( 0px, 0px, -45px ) rotateX( 90deg ); + } +.reveal .roll span:after { + content: attr(data-title); + + display: block; + position: absolute; + left: 0; + top: 0; + padding: 0 2px; + backface-visibility: hidden; + transform-origin: 50% 0%; + transform: translate3d( 0px, 110%, 0px ) rotateX( -90deg ); +} + + +/********************************************* + * SPEAKER NOTES + *********************************************/ + +$notesWidthPercent: 25%; + +// Hide on-page notes +.reveal aside.notes { + display: none; +} + +// An interface element that can optionally be used to show the +// speaker notes to all viewers, on top of the presentation +.reveal .speaker-notes { + display: none; + position: absolute; + width: math.div($notesWidthPercent, (1 - math.div($notesWidthPercent,100))) * 1%; + height: 100%; + top: 0; + left: 100%; + padding: 14px 18px 14px 18px; + z-index: 1; + font-size: 18px; + line-height: 1.4; + border: 1px solid rgba( 0, 0, 0, 0.05 ); + color: #222; + background-color: #f5f5f5; + overflow: auto; + box-sizing: border-box; + text-align: left; + font-family: Helvetica, sans-serif; + -webkit-overflow-scrolling: touch; + + .notes-placeholder { + color: #ccc; + font-style: italic; + } + + &:focus { + outline: none; + } + + &:before { + content: 'Speaker notes'; + display: block; + margin-bottom: 10px; + opacity: 0.5; + } +} + + +.reveal.show-notes { + max-width: 100% - $notesWidthPercent; + overflow: visible; +} + +.reveal.show-notes .speaker-notes { + display: block; +} + +@media screen and (min-width: 1600px) { + .reveal .speaker-notes { + font-size: 20px; + } +} + +@media screen and (max-width: 1024px) { + .reveal.show-notes { + border-left: 0; + max-width: none; + max-height: 70%; + max-height: 70vh; + overflow: visible; + } + + .reveal.show-notes .speaker-notes { + top: 100%; + left: 0; + width: 100%; + height: 30vh; + border: 0; + } +} + +@media screen and (max-width: 600px) { + .reveal.show-notes { + max-height: 60%; + max-height: 60vh; + } + + .reveal.show-notes .speaker-notes { + top: 100%; + height: 40vh; + } + + .reveal .speaker-notes { + font-size: 14px; + } +} + + +/********************************************* + * ZOOM PLUGIN + *********************************************/ + +.zoomed .reveal *, +.zoomed .reveal *:before, +.zoomed .reveal *:after { + backface-visibility: visible !important; +} + +.zoomed .reveal .progress, +.zoomed .reveal .controls { + opacity: 0; +} + +.zoomed .reveal .roll span { + background: none; +} + +.zoomed .reveal .roll span:after { + visibility: hidden; +} + + +/********************************************* + * PRINT STYLES + *********************************************/ + +@import 'print/pdf.scss'; +@import 'print/paper.scss'; + diff --git a/css/theme/README.md b/css/theme/README.md new file mode 100644 index 0000000..30916c4 --- /dev/null +++ b/css/theme/README.md @@ -0,0 +1,21 @@ +## Dependencies + +Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment installed before proceeding: https://revealjs.com/installation/#full-setup + +## Creating a Theme + +To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled from Sass to CSS (see the [gulpfile](https://github.com/hakimel/reveal.js/blob/master/gulpfile.js)) when you run `npm run build -- css-themes`. + +Each theme file does four things in the following order: + +1. **Include [/css/theme/template/mixins.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/mixins.scss)** +Shared utility functions. + +2. **Include [/css/theme/template/settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss)** +Declares a set of custom variables that the template file (step 4) expects. Can be overridden in step 3. + +3. **Override** +This is where you override the default theme. Either by specifying variables (see [settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss) for reference) or by adding any selectors and styles you please. + +4. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)** +The template theme file which will generate final CSS output based on the currently defined variables. diff --git a/css/theme/source/beige.scss b/css/theme/source/beige.scss new file mode 100644 index 0000000..1f60178 --- /dev/null +++ b/css/theme/source/beige.scss @@ -0,0 +1,41 @@ +/** + * Beige theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$mainColor: #333; +$headingColor: #333; +$headingTextShadow: none; +$backgroundColor: #f7f3de; +$linkColor: #8b743d; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: rgba(79, 64, 28, 0.99); +$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( rgba(247,242,211,1), rgba(255,255,255,1) ); +} + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/black.scss b/css/theme/source/black.scss new file mode 100644 index 0000000..358dc1d --- /dev/null +++ b/css/theme/source/black.scss @@ -0,0 +1,46 @@ +/** + * Black theme for reveal.js. This is the opposite of the 'white' theme. + * + * By Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(./fonts/source-sans-pro/source-sans-pro.css); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #191919; + +$mainColor: #fff; +$headingColor: #fff; + +$mainFontSize: 42px; +$mainFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingFontWeight: 600; +$linkColor: #42affa; +$linkColorHover: lighten( $linkColor, 15% ); +$selectionBackgroundColor: lighten( $linkColor, 25% ); + +$heading1Size: 2.5em; +$heading2Size: 1.6em; +$heading3Size: 1.3em; +$heading4Size: 1.0em; + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#222); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/blood.scss b/css/theme/source/blood.scss new file mode 100644 index 0000000..b5a8679 --- /dev/null +++ b/css/theme/source/blood.scss @@ -0,0 +1,87 @@ +/** + * Blood theme for reveal.js + * Author: Walther http://github.com/Walther + * + * Designed to be used with highlight.js theme + * "monokai_sublime.css" available from + * https://github.com/isagalaev/highlight.js/ + * + * For other themes, change $codeBackground accordingly. + * + */ + + // Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + +// Include theme-specific fonts + +@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic); + +// Colors used in the theme +$blood: #a23; +$coal: #222; +$codeBackground: #23241f; + +$backgroundColor: $coal; + +// Main text +$mainFont: Ubuntu, 'sans-serif'; +$mainColor: #eee; + +// Headings +$headingFont: Ubuntu, 'sans-serif'; +$headingTextShadow: 2px 2px 2px $coal; + +// h1 shadow, borrowed humbly from +// (c) Default theme by Hakim El Hattab +$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +// Links +$linkColor: $blood; +$linkColorHover: lighten( $linkColor, 20% ); + +// Text selection +$selectionBackgroundColor: $blood; +$selectionColor: #fff; + +// Change text colors against dark slide backgrounds +@include light-bg-text-color(#222); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- + +// some overrides after theme template import + +.reveal p { + font-weight: 300; + text-shadow: 1px 1px $coal; +} + +section.has-light-background { + p, h1, h2, h3, h4 { + text-shadow: none; + } +} + +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + font-weight: 700; +} + +.reveal p code { + background-color: $codeBackground; + display: inline-block; + border-radius: 7px; +} + +.reveal small code { + vertical-align: baseline; +} \ No newline at end of file diff --git a/css/theme/source/league.scss b/css/theme/source/league.scss new file mode 100644 index 0000000..ee01258 --- /dev/null +++ b/css/theme/source/league.scss @@ -0,0 +1,36 @@ +/** + * League theme for reveal.js. + * + * This was the default theme pre-3.0.0. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + +// Override theme settings (see ../template/settings.scss) +$headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2); +$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( rgba(28,30,32,1), rgba(85,90,95,1) ); +} + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#222); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/moon.scss b/css/theme/source/moon.scss new file mode 100644 index 0000000..ff2074a --- /dev/null +++ b/css/theme/source/moon.scss @@ -0,0 +1,58 @@ +/** + * Solarized Dark theme for reveal.js. + * Author: Achim Staebler + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + +/** + * Solarized colors by Ethan Schoonover + */ +html * { + color-profile: sRGB; + rendering-intent: auto; +} + +// Solarized colors +$base03: #002b36; +$base02: #073642; +$base01: #586e75; +$base00: #657b83; +$base0: #839496; +$base1: #93a1a1; +$base2: #eee8d5; +$base3: #fdf6e3; +$yellow: #b58900; +$orange: #cb4b16; +$red: #dc322f; +$magenta: #d33682; +$violet: #6c71c4; +$blue: #268bd2; +$cyan: #2aa198; +$green: #859900; + +// Override theme settings (see ../template/settings.scss) +$mainColor: $base1; +$headingColor: $base2; +$headingTextShadow: none; +$backgroundColor: $base03; +$linkColor: $blue; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: $magenta; + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#222); + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/night.scss b/css/theme/source/night.scss new file mode 100644 index 0000000..98a2062 --- /dev/null +++ b/css/theme/source/night.scss @@ -0,0 +1,37 @@ +/** + * Black theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=Montserrat:700); +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #111; + +$mainFont: 'Open Sans', sans-serif; +$linkColor: #e7ad52; +$linkColorHover: lighten( $linkColor, 20% ); +$headingFont: 'Montserrat', Impact, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: -0.03em; +$headingTextTransform: none; +$selectionBackgroundColor: #e7ad52; + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#222); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/css/theme/source/serif.scss b/css/theme/source/serif.scss new file mode 100644 index 0000000..1c8d778 --- /dev/null +++ b/css/theme/source/serif.scss @@ -0,0 +1,38 @@ +/** + * A simple theme for reveal.js presentations, similar + * to the default theme. The accent color is brown. + * + * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; +$mainColor: #000; +$headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; +$headingColor: #383D3D; +$headingTextShadow: none; +$headingTextTransform: none; +$backgroundColor: #F0F1EB; +$linkColor: #51483D; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: #26351C; + +.reveal a { + line-height: 1.3em; +} + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/simple.scss b/css/theme/source/simple.scss new file mode 100644 index 0000000..faf245f --- /dev/null +++ b/css/theme/source/simple.scss @@ -0,0 +1,40 @@ +/** + * A simple theme for reveal.js presentations, similar + * to the default theme. The accent color is darkblue. + * + * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed. + * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Lato', sans-serif; +$mainColor: #000; +$headingFont: 'News Cycle', Impact, sans-serif; +$headingColor: #000; +$headingTextShadow: none; +$headingTextTransform: none; +$backgroundColor: #fff; +$linkColor: #00008B; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: rgba(0, 0, 0, 0.99); + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/css/theme/source/sky.scss b/css/theme/source/sky.scss new file mode 100644 index 0000000..c83b9c0 --- /dev/null +++ b/css/theme/source/sky.scss @@ -0,0 +1,49 @@ +/** + * Sky theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700); + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Open Sans', sans-serif; +$mainColor: #333; +$headingFont: 'Quicksand', sans-serif; +$headingColor: #333; +$headingLetterSpacing: -0.08em; +$headingTextShadow: none; +$backgroundColor: #f7fbfc; +$linkColor: #3b759e; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: #134674; + +// Fix links so they are not cut off +.reveal a { + line-height: 1.3em; +} + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( #add9e4, #f7fbfc ); +} + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/solarized.scss b/css/theme/source/solarized.scss new file mode 100644 index 0000000..8bdf1eb --- /dev/null +++ b/css/theme/source/solarized.scss @@ -0,0 +1,63 @@ +/** + * Solarized Light theme for reveal.js. + * Author: Achim Staebler + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + + +/** + * Solarized colors by Ethan Schoonover + */ +html * { + color-profile: sRGB; + rendering-intent: auto; +} + +// Solarized colors +$base03: #002b36; +$base02: #073642; +$base01: #586e75; +$base00: #657b83; +$base0: #839496; +$base1: #93a1a1; +$base2: #eee8d5; +$base3: #fdf6e3; +$yellow: #b58900; +$orange: #cb4b16; +$red: #dc322f; +$magenta: #d33682; +$violet: #6c71c4; +$blue: #268bd2; +$cyan: #2aa198; +$green: #859900; + +// Override theme settings (see ../template/settings.scss) +$mainColor: $base00; +$headingColor: $base01; +$headingTextShadow: none; +$backgroundColor: $base3; +$linkColor: $blue; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: $magenta; + +// Background generator +// @mixin bodyBackground() { +// @include radial-gradient( rgba($base3,1), rgba(lighten($base3, 20%),1) ); +// } + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/white.scss b/css/theme/source/white.scss new file mode 100644 index 0000000..443d30a --- /dev/null +++ b/css/theme/source/white.scss @@ -0,0 +1,46 @@ +/** + * White theme for reveal.js. This is the opposite of the 'black' theme. + * + * By Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(./fonts/source-sans-pro/source-sans-pro.css); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #fff; + +$mainColor: #222; +$headingColor: #222; + +$mainFontSize: 42px; +$mainFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingFontWeight: 600; +$linkColor: #2a76dd; +$linkColorHover: lighten( $linkColor, 15% ); +$selectionBackgroundColor: lighten( $linkColor, 25% ); + +$heading1Size: 2.5em; +$heading2Size: 1.6em; +$heading3Size: 1.3em; +$heading4Size: 1.0em; + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/template/exposer.scss b/css/theme/template/exposer.scss new file mode 100644 index 0000000..4aec3e8 --- /dev/null +++ b/css/theme/template/exposer.scss @@ -0,0 +1,28 @@ +// Exposes theme's variables for easy re-use in CSS for plugin authors + +:root { + --r-background-color: #{$backgroundColor}; + --r-main-font: #{$mainFont}; + --r-main-font-size: #{$mainFontSize}; + --r-main-color: #{$mainColor}; + --r-block-margin: #{$blockMargin}; + --r-heading-margin: #{$headingMargin}; + --r-heading-font: #{$headingFont}; + --r-heading-color: #{$headingColor}; + --r-heading-line-height: #{$headingLineHeight}; + --r-heading-letter-spacing: #{$headingLetterSpacing}; + --r-heading-text-transform: #{$headingTextTransform}; + --r-heading-text-shadow: #{$headingTextShadow}; + --r-heading-font-weight: #{$headingFontWeight}; + --r-heading1-text-shadow: #{$heading1TextShadow}; + --r-heading1-size: #{$heading1Size}; + --r-heading2-size: #{$heading2Size}; + --r-heading3-size: #{$heading3Size}; + --r-heading4-size: #{$heading4Size}; + --r-code-font: #{$codeFont}; + --r-link-color: #{$linkColor}; + --r-link-color-dark: #{darken($linkColor , 15% )}; + --r-link-color-hover: #{$linkColorHover}; + --r-selection-background-color: #{$selectionBackgroundColor}; + --r-selection-color: #{$selectionColor}; +} diff --git a/css/theme/template/mixins.scss b/css/theme/template/mixins.scss new file mode 100644 index 0000000..17a3db5 --- /dev/null +++ b/css/theme/template/mixins.scss @@ -0,0 +1,45 @@ +@mixin vertical-gradient( $top, $bottom ) { + background: $top; + background: -moz-linear-gradient( top, $top 0%, $bottom 100% ); + background: -webkit-gradient( linear, left top, left bottom, color-stop(0%,$top), color-stop(100%,$bottom) ); + background: -webkit-linear-gradient( top, $top 0%, $bottom 100% ); + background: -o-linear-gradient( top, $top 0%, $bottom 100% ); + background: -ms-linear-gradient( top, $top 0%, $bottom 100% ); + background: linear-gradient( top, $top 0%, $bottom 100% ); +} + +@mixin horizontal-gradient( $top, $bottom ) { + background: $top; + background: -moz-linear-gradient( left, $top 0%, $bottom 100% ); + background: -webkit-gradient( linear, left top, right top, color-stop(0%,$top), color-stop(100%,$bottom) ); + background: -webkit-linear-gradient( left, $top 0%, $bottom 100% ); + background: -o-linear-gradient( left, $top 0%, $bottom 100% ); + background: -ms-linear-gradient( left, $top 0%, $bottom 100% ); + background: linear-gradient( left, $top 0%, $bottom 100% ); +} + +@mixin radial-gradient( $outer, $inner, $type: circle ) { + background: $outer; + background: -moz-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -webkit-gradient( radial, center center, 0px, center center, 100%, color-stop(0%,$inner), color-stop(100%,$outer) ); + background: -webkit-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -o-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -ms-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: radial-gradient( center, $type cover, $inner 0%, $outer 100% ); +} + +@mixin light-bg-text-color( $color ) { + section.has-light-background { + &, h1, h2, h3, h4, h5, h6 { + color: $color; + } + } +} + +@mixin dark-bg-text-color( $color ) { + section.has-dark-background { + &, h1, h2, h3, h4, h5, h6 { + color: $color; + } + } +} \ No newline at end of file diff --git a/css/theme/template/settings.scss b/css/theme/template/settings.scss new file mode 100644 index 0000000..5a917f8 --- /dev/null +++ b/css/theme/template/settings.scss @@ -0,0 +1,45 @@ +// Base settings for all themes that can optionally be +// overridden by the super-theme + +// Background of the presentation +$backgroundColor: #2b2b2b; + +// Primary/body text +$mainFont: 'Lato', sans-serif; +$mainFontSize: 40px; +$mainColor: #eee; + +// Vertical spacing between blocks of text +$blockMargin: 20px; + +// Headings +$headingMargin: 0 0 $blockMargin 0; +$headingFont: 'League Gothic', Impact, sans-serif; +$headingColor: #eee; +$headingLineHeight: 1.2; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingTextShadow: none; +$headingFontWeight: normal; +$heading1TextShadow: $headingTextShadow; + +$heading1Size: 3.77em; +$heading2Size: 2.11em; +$heading3Size: 1.55em; +$heading4Size: 1.00em; + +$codeFont: monospace; + +// Links and actions +$linkColor: #13DAEC; +$linkColorHover: lighten( $linkColor, 20% ); + +// Text selection +$selectionBackgroundColor: #FF5E99; +$selectionColor: #fff; + +// Generates the presentation background, can be overridden +// to return a background image or gradient +@mixin bodyBackground() { + background: $backgroundColor; +} diff --git a/css/theme/template/theme.scss b/css/theme/template/theme.scss new file mode 100644 index 0000000..bc377d3 --- /dev/null +++ b/css/theme/template/theme.scss @@ -0,0 +1,331 @@ +// Base theme template for reveal.js + +/********************************************* + * GLOBAL STYLES + *********************************************/ + +@import "./exposer"; + +.reveal-viewport { + @include bodyBackground(); + background-color: var(--r-background-color); +} + +.reveal { + font-family: var(--r-main-font); + font-size: var(--r-main-font-size); + font-weight: normal; + color: var(--r-main-color); +} + +.reveal ::selection { + color: var(--r-selection-color); + background: var(--r-selection-background-color); + text-shadow: none; +} + +.reveal ::-moz-selection { + color: var(--r-selection-color); + background: var(--r-selection-background-color); + text-shadow: none; +} + +.reveal .slides section, +.reveal .slides section>section { + line-height: 1.3; + font-weight: inherit; +} + +/********************************************* + * HEADERS + *********************************************/ + +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + margin: var(--r-heading-margin); + color: var(--r-heading-color); + + font-family: var(--r-heading-font); + font-weight: var(--r-heading-font-weight); + line-height: var(--r-heading-line-height); + letter-spacing: var(--r-heading-letter-spacing); + + text-transform: var(--r-heading-text-transform); + text-shadow: var(--r-heading-text-shadow); + + word-wrap: break-word; +} + +.reveal h1 {font-size: var(--r-heading1-size); } +.reveal h2 {font-size: var(--r-heading2-size); } +.reveal h3 {font-size: var(--r-heading3-size); } +.reveal h4 {font-size: var(--r-heading4-size); } + +.reveal h1 { + text-shadow: var(--r-heading1-text-shadow); +} + + +/********************************************* + * OTHER + *********************************************/ + +.reveal p { + margin: var(--r-block-margin) 0; + line-height: 1.3; +} + +/* Remove trailing margins after titles */ +.reveal h1:last-child, +.reveal h2:last-child, +.reveal h3:last-child, +.reveal h4:last-child, +.reveal h5:last-child, +.reveal h6:last-child { + margin-bottom: 0; +} + +/* Ensure certain elements are never larger than the slide itself */ +.reveal img, +.reveal video, +.reveal iframe { + max-width: 95%; + max-height: 95%; +} +.reveal strong, +.reveal b { + font-weight: bold; +} + +.reveal em { + font-style: italic; +} + +.reveal ol, +.reveal dl, +.reveal ul { + display: inline-block; + + text-align: left; + margin: 0 0 0 1em; +} + +.reveal ol { + list-style-type: decimal; +} + +.reveal ul { + list-style-type: disc; +} + +.reveal ul ul { + list-style-type: square; +} + +.reveal ul ul ul { + list-style-type: circle; +} + +.reveal ul ul, +.reveal ul ol, +.reveal ol ol, +.reveal ol ul { + display: block; + margin-left: 40px; +} + +.reveal dt { + font-weight: bold; +} + +.reveal dd { + margin-left: 40px; +} + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: var(--r-block-margin) auto; + padding: 5px; + + font-style: italic; + background: rgba(255, 255, 255, 0.05); + box-shadow: 0px 0px 2px rgba(0,0,0,0.2); +} + .reveal blockquote p:first-child, + .reveal blockquote p:last-child { + display: inline-block; + } + +.reveal q { + font-style: italic; +} + +.reveal pre { + display: block; + position: relative; + width: 90%; + margin: var(--r-block-margin) auto; + + text-align: left; + font-size: 0.55em; + font-family: var(--r-code-font); + line-height: 1.2em; + + word-wrap: break-word; + + box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); +} + +.reveal code { + font-family: var(--r-code-font); + text-transform: none; + tab-size: 2; +} + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; +} + +.reveal .code-wrapper { + white-space: normal; +} + +.reveal .code-wrapper code { + white-space: pre; +} + +.reveal table { + margin: auto; + border-collapse: collapse; + border-spacing: 0; +} + +.reveal table th { + font-weight: bold; +} + +.reveal table th, +.reveal table td { + text-align: left; + padding: 0.2em 0.5em 0.2em 0.5em; + border-bottom: 1px solid; +} + +.reveal table th[align="center"], +.reveal table td[align="center"] { + text-align: center; +} + +.reveal table th[align="right"], +.reveal table td[align="right"] { + text-align: right; +} + +.reveal table tbody tr:last-child th, +.reveal table tbody tr:last-child td { + border-bottom: none; +} + +.reveal sup { + vertical-align: super; + font-size: smaller; +} +.reveal sub { + vertical-align: sub; + font-size: smaller; +} + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; +} + +.reveal small * { + vertical-align: top; +} + +.reveal img { + margin: var(--r-block-margin) 0; +} + + +/********************************************* + * LINKS + *********************************************/ + +.reveal a { + color: var(--r-link-color); + text-decoration: none; + transition: color .15s ease; +} + .reveal a:hover { + color: var(--r-link-color-hover); + text-shadow: none; + border: none; + } + +.reveal .roll span:after { + color: #fff; + // background: darken( var(--r-link-color), 15% ); + background: var(--r-link-color-dark); + +} + + +/********************************************* + * Frame helper + *********************************************/ + +.reveal .r-frame { + border: 4px solid var(--r-main-color); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); +} + +.reveal a .r-frame { + transition: all .15s linear; +} + +.reveal a:hover .r-frame { + border-color: var(--r-link-color); + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); +} + + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ + +.reveal .controls { + color: var(--r-link-color); +} + + +/********************************************* + * PROGRESS BAR + *********************************************/ + +.reveal .progress { + background: rgba(0,0,0,0.2); + color: var(--r-link-color); +} + +/********************************************* + * PRINT BACKGROUND + *********************************************/ + @media print { + .backgrounds { + background-color: var(--r-background-color); + } +} diff --git a/dist/img/build.jpg b/dist/img/build.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a786a1a4583bb47640411ad8815855a5a172a32 GIT binary patch literal 70567 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 literal 0 HcmV?d00001 diff --git a/dist/img/case_back.png b/dist/img/case_back.png new file mode 100644 index 0000000000000000000000000000000000000000..568bba9b121ca391b33f23147a12f6bda2d59540 GIT binary patch literal 54215 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 E1Dbbd#{d8T literal 0 HcmV?d00001 diff --git a/dist/img/case_front.png b/dist/img/case_front.png new file mode 100644 index 0000000000000000000000000000000000000000..30cab72571a433cedf7ffc61e67de8d152454bd4 GIT binary patch literal 43507 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dist/img/display.svg b/dist/img/display.svg new file mode 100644 index 0000000..c62b375 --- /dev/null +++ b/dist/img/display.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/dist/img/esp32d.png b/dist/img/esp32d.png new file mode 100644 index 0000000000000000000000000000000000000000..63ab0fe3dfa01aba3e426bd07f77dc9860fe41c7 GIT binary patch literal 225099 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 z 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 literal 0 HcmV?d00001 diff --git a/dist/img/espressif.svg b/dist/img/espressif.svg new file mode 100644 index 0000000..1c26b4e --- /dev/null +++ b/dist/img/espressif.svg @@ -0,0 +1,55 @@ + + + + + + + + image/svg+xml + + + + + + diff --git a/dist/img/green.svg b/dist/img/green.svg new file mode 100644 index 0000000..11373bc --- /dev/null +++ b/dist/img/green.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/dist/img/i2c.png b/dist/img/i2c.png new file mode 100644 index 0000000000000000000000000000000000000000..bdb1c8bdc9b2e9f274f65f8b5586dde1b65b99ea GIT binary patch literal 16983 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�~7`-Gwr3RLGX=uiSJ5r4N-42gAOb#5GD z{gKVFCjiO~{G_+ns{}Y+z4HIUvd*A8%xRcXa0(uMdK*Ff0;TX6HUVmBm`ahB{czyVY&1B3-yofAlhcZb)D)1YwEa2|ZAM z91sQ{X{0q$pp|H_dtJMqVqv^kGNJ;&9ha+A;X+gF8S?v4gT3PfX z=p**Q?{K2m+=B1fc8@OZvNCUy2r)(d7JlkyIPIcWVnwpD!bHA#=O^H#2SkT*xRn(N zOp-Lh%{9Y{YjN*02?xvHKVDrO&109AMiH@HywVhM3+Y&C^^<&g&g>vCc+HJyd%Dv0 zUc~b?`|pCWKF^{1JF=kNF@vthyQUILj}Of3Ft2Byrzs6R?xC!_#==hi@_M-y6KCFh zabbSskbBVNel7eGHO5az!@V=7xjw7@Avdj@f(HvvxtC+L-HeBpt|g$&MEIIGyBr}7 zZ?4JPbz!u&4Mi;>!D2IW*y$I!Aa8OQmF$d?k`jV`oA>;iU31|Ko}{JzqzoWufDfe6D=eH*0FR6jzl)JzQ-1bc%&ff0G(^jws-}(MwqD_9H&_;-&(nk0u)!12U~lZw2wXEa34rs7cyxp zQ-gnGPw0&6(yu`|#+u`>Lg9xJN#kf@v*Xl@qM}ds#|y9xZl?lKq<2K6I=9hS(PL?b zA1Y4J-A;u4%|||WWcso3X!>D7eD82t10_^SQ`DUXTK&c{+hG;cl!63Z zm|!l&R~l>3O@2<{*x1UXav9JyHv4_-*G0<8o0B(xNqM+TO9XJWrhoUO@9m+j>j1@x z-GsEhwj6Kv(}oxGP!2&ZrvUcu=YgKCe}JPEl?sghgUX+Om8SzMw4b9{E9dIZ^C?+%4)xjkM)XrNeIJwHD$7aVK)z4E41Dw8FxgyESz_Wbn= zQWmu{tLq14D6Y;3mmL?OYPfzUA@jx_3k+=Ea4~-@%2FlkC@2!DA?SoHY>1LqLy~ZB zrSt7W-KP+)U*l0k_Q*((5!D~gXiSW)$M<2r&6ZkZU2QlQ3WPPRBc7Ma!}K8tgd6bz zR-ryQ(tt}Jc19M__4WPjZ%^Qd7np-%^N=4O(L0Mjv?H%H^V%GAeHVDjb~)6Rw4A$FH*%@b6rcj|2I_5=H=;dQPqn zO_yF7Cy0w4AERspt@obXnIFxu!SQTEX-ljad5GUjbRe4^ad(M^To*RSC167}a}CXU z;U{sO5yAmCQLEUz+gWAQ^N2SpYgwxR(%N`7Gd7={Xw~f`xm1&~e%-(tgs)W5g+ZhC z)lbV8I+iqHT>MkSkfsr?(2jn345RI+_x2JVAX0h3?!I&{6!|tfT~Y86=&a+T7(d|| z&0010&x5(ZD*R(!j&Gvcf}bomszlOmH&)Hgr}WysrcrL|_`He4XAN3xb#H1e;p7S${My-|GA9wlTcZDw*kR0g!#rDyvW3EyT+{3#bgx$$`n$PbMV`QNRK$`A2-iliZ$za7<7Uo z{6E+dd}g~f@ENT zeaDquk0hwVsIwK(`hvx6u$nEq=V>YTBXUTbkSmw0RCga8jU)zPDVKm;bSd{b3ze`E zXo5%C;ri3)cu~2(>Srxd#OZ2{_Iu^{^em+%0G+?$nX2;S^5CB z7sEH{-vAQ%k9hXWhYi>I@z~S}KRIG|1R{({K_yBK+>fqMp8b(emueC5)>p>!T>>f1`sf{G4Yrt;BaHssd2U3U!MEvwOc|epX(EX%GBIR&}RgjhEnwjOtyxK?H^HedvHshI6Eo&XTnhRoM z>kYK4XP>YNFwR2sB24eP`8e6xrWOzC4`b52um4W8mE>`5qoJ8~J{Z)_a@**hGEoK{ zegC@McjDR?+OjoT0jmXI#d`z9?o-*D6eEDQqbH`Oj?FJ+A`pi&Us7}EY(a5FsH?Q6 zJ7I!!Z%0v*RgX9WAJ}7QvhXO!dm{GN<>o=g)l+deAfl>zX(;6oRC*2&6u^`FHJMaP zDf-M4Urm_JsZm}U)a1gv8S@mrwl=OqsqXKu7G%Z9Sfo;Sgb8`Pd?kzOMKeGgV|r|r zBAhC4S{4vX+PF4TH2IwcWItQ3vbVe_BTuYRI){KmZ;J_KC;LIa$UYWvk#fT|cTVJW z2R(cj_P|@HOV6eQ|52=M{EFII_t9r^@f)Aeh_0#9)XZPl6g7%K2N#!CKPVH4_~xon^6^;0-JPGt(s(hy zLRVjo(mGmS^^szdHFL)xheF{03wzF>c88G&?lt{|iX1J@gP;6Gt29V}YzdlWG%{&w zYMh?;zSxrdH~8$Yf|}$Yl0yYvZmxF^0V&MkMzeN4-|ez?HuG6)dd*d?>ljL0MHBlV zu&m?fvl{Hi?^7Flx)m_HJ5-C(N;clc8r;W zPDE;&Tw;v17&58`TGBWfc<%X32mG8bTyBq1w}3XKcR{|<@)8b9G?i+8*Av^RIS)T< zb@}y-Lkuw4u5SXO+cGMhqA@HHja*sgvCqO=VHPUtMv>qE)xD2vCHPcKcb$DSgBg5O$w$JA}qjF)j=EY{XX4S@Y$-v{wZ{^;`s z)^<;7jVqh!;gn8jX|G!At{fu{&aglde}NVPKKS!NKGl07@xRt>-74vNDPzl`Y~x?} z{38`x{G>kM3~jhkUWgy}zaZo|Wj?1&aTcleC1U_lYO$UdOQoXo=7y_;y***?qhe?b z8Ob`AQZS2o2QLo0T7J;le6#OztQqd6OUc^R)oVVIv~q1AWJ?a$6SZ9uxQj?9Z*JRp zv-cY%yRE-p+>l(d?yL9y#BJ7qs)fYOuZU}<%d@>t-1b>%YgCWV4_FOT55XT}PnKJQ z-Nn&h9*^tg?H_ni21btmL@?{tyxLg^VMm-)bBC9;9fMvQ*Bl;hyv90Ob=Pj}$s(WC zt-$cIJ;3DUZFhD@tv$q+X-^*YH)e8|7u`m*7TApS~$C~6PjmC+X&_ixjV z<)aC-N&GSA7Z>+Nqu&L(1_LrPDW2`qL@~I*TG)j}3+7YE-@Pvv7T+guf;u2cjFJvz zZ?6fFGCX5LW~f{`X6~7M7f|+#$r_eOf-*Iz<{v&btn4Uw(R#_8t6}D9v%@Z4Iqgv` z1(Hi9Ne7fXWIvs+iZg;#ps|VEkns9r+~fGz$_m@fipYyG8`}gK_$SD^<&Im<$pAP? z4%_c+e(uY1a(aDe0HW3`ny4hrsLzwX4Ty}SS?k@9G(Uwx`_AR`V|^n$Qhe93GTUVb zZD7Cgou;GAO{qcBYcBgW)vM=`AZ)q_4p-WI5Ek15{nea9Bxc^-f;K3PLBH}8Wa z;`vkhG{-ZRr_M(4e8VSOzjg41=&!d0&9d!%3vc|hVXAb>$9p=+-I5w>qe(@8&M{Bh z%9mrY&KQ)jb;wFtrO|J7O{Xm;_3{ByZGNpXJr)*{iaS=+Bt;_Rs`p>kTDSR(KFzJV z5f5uOBWU~dcF|nnbVRWjChdjU@c@@47AV&TQ^X`yM%6QTq8W*%=yI|WTU(!2p<0sC zrM$>{0o&C!AM6u^1_ZGK+Zo3H0Jb|%34aM>V(&Cyvp8Rd$_$_qi~4a^*}b@*S{{;I zy*GGZQNuFr@LY6}0LBzDT}tGN8kZ+qh#t(N$4_z*AC}KTh^02|!BtnRI z70e2|9;+LM&FEbFq!b&YE%rGt6M z#eG2bP%2C7trMK5ev^~!^PolO=0>sk7$TYQY8t@J6dbjf>6Z}@R0`(_-|pYj!?(7{ z4MN8M*}Sn`TShKFYAD~KmhWs~XM$;bTYdTv>Q%FjPv!%sTJQ6K+j-e9yIig}dG_Lb zb~Xokx6NaNn$`U9S+o6_Zx}nn-;BAV+N_=OTsWQ%o}*m^ytB|Q4VXp@`*+yt&BHh; z_X}}tx~AYzkzxs^cT@*$WYHzqpLI~G>@BMi;w%52zSbbRhNDH<-&p3QE2(ryv~&VQ zZ+&jClEVGb=xrt5BNUL5|38GS#PJLPQ&m5HaCA62oqZ*JfhNxFY`IyMcNFjxL=Z

M~ITvy+G}?LoNAC;oBG%EHHNBI4UwhB^XJN&K5Abrm_>QKTA&k z_rDlx^#6*nYAwWn^{Bh;31_wr)V<1AY!9Gi8`5Va;Un)R?4U5byIAKi>PkL?oVTZ> zHWQk7JQwi5>L%eKQV7|uc+;BhelGWWu+g9*ahooF-<8Co_)Q^*$EvrZ@O`>t3YJcn z*RloKqE{|Y@Gz&jdpwzuX43AbX^U^58NT0Rgnu}+-b9YPcy zqUOUG{lJK6Zk({W{|-%m9o_u{nu0zox9wq^a3=>&KCl5{yzy|*F8PXaPRi58&=S1- zP}32j0_<96wx~cn8PCq9t*y1lPdttvpeWB}qffS1^r|rLU)d-@R*y#vn5>(t#l~)IXMTS z&CoOX*IAE<7`6>L!|H8C@OiV!Rs4fdEo|5)H&5F$kr$`dNEEJmjkcjeF?g|a!Z_cJ zstFygA$PN4H<-;N*0Zb3<~7y20A78SsFisWz;z2s%5g$HhO*kPK~5eI*%Yez0djJ3 zZf|ezpjr71eK1tkBv$Hvv4zxol6KS<#qq+o^j4uD?LAQ>EF(pdW{q1#Zhb(CW_vaN z`_+hu1^qcql3Y4NlP_vRt%veKQGjaqcBT*SkaRld78WwJDh*|ZM$%$8Gr;~SS4Qev z{`gmJWbNN)=-6R?3O{n008%aHrd_11CA&zDo6Aua2x8`QQQa8)Q`?Nu>p<348VnD% z8^+StNx$j9kR+@nwQ-&sMdN_CV!UE9n|D+hV_Z!A3HJNL6d_@$Zz&Rzm^CZcw&UXB zJfR6ItdrR+i9p<8c-vqK&TzG_8fwM91y%Yv8!suouQL3i>u{p8mhQ1&wob4E@nk)j z!naz=9c%d{a((c0cfsiuHHT3)`?q&8%xFYK}acP$QTrDs%Mzhum(U%T36ZY z=l$++?6aW-TWB(d;=>bMBBVAzPrLm&Y_QwJ$xuNdfcFkyfIz@8Jn1IB>r3-yBsiZI z99mbQamRjv*fZO)|4L?WlmdPrE|t#zYmsi_#Xz&$Y4t6!2}7UBQeAsRB=kc8@PEDw zKwYfXQ)@L#xQJhqYg5@uq*tzE`%j`eN*~>GP5l>9?Zx>|qRJ}FkA4gud>kmM5b8UH&;wI!!$fIxE@=a7P;q@VMT z(ho1;uaz3#ntiFSnKP!Z+BR;LJ$edefqX2Nnz=tZvi?A5N0+v&;^V!n@YieWf zS69UDS+pHQNf(wAZ=P3zs;!}s{@r!pbS54;t-5pN`oDHSjuX&6d>o}nd5YxhVy|^* zyhvlb+*Che8IA6*m%xwlbiAoZ=py*qjLEi9!E`C;m*GGawQY z5_+kz7@H|KX!j*jfOP1ALh_QBJ`_8ZY1ghmKbtUZUE?$YYS)bxw|#=@bw%v{m#8o- zzKz3aXIQO)o=WE+7^<3#EmX-4u&}h;`&cdZ9s*r^f#HAKQu=3mt)o=OhA`L^`R|)w eH3fk$2y5*WU8Z?x0?-de0OZ~%Nta6+2K--{c%;w( literal 0 HcmV?d00001 diff --git a/dist/img/i2cd.svg b/dist/img/i2cd.svg new file mode 100644 index 0000000..809a529 --- /dev/null +++ b/dist/img/i2cd.svg @@ -0,0 +1,3 @@ + + +
I2C Master
I2C Master
SCL
SCL
SDA
SDA
Text is not SVG - cannot display
\ No newline at end of file diff --git a/dist/img/influxdb.svg b/dist/img/influxdb.svg new file mode 100644 index 0000000..c38fd25 --- /dev/null +++ b/dist/img/influxdb.svg @@ -0,0 +1,23 @@ + + + + + + + diff --git a/dist/img/lock.svg b/dist/img/lock.svg new file mode 100644 index 0000000..0696d15 --- /dev/null +++ b/dist/img/lock.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/dist/img/meter.svg b/dist/img/meter.svg new file mode 100644 index 0000000..f2c5c74 --- /dev/null +++ b/dist/img/meter.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/dist/img/openweathermap.png b/dist/img/openweathermap.png new file mode 100644 index 0000000000000000000000000000000000000000..ffde9682cf6a568c9cbb4d8f9b48d77e9956b880 GIT binary patch literal 13005 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 D{|kxk literal 0 HcmV?d00001 diff --git a/dist/img/power.svg b/dist/img/power.svg new file mode 100644 index 0000000..0545c03 --- /dev/null +++ b/dist/img/power.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/dist/img/sleep.svg b/dist/img/sleep.svg new file mode 100644 index 0000000..4b12d56 --- /dev/null +++ b/dist/img/sleep.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/dist/img/spid.svg b/dist/img/spid.svg new file mode 100644 index 0000000..73b2f85 --- /dev/null +++ b/dist/img/spid.svg @@ -0,0 +1,3 @@ + + +
SPI Master
SPI Master
SCL
SCL
MOSI
MOSI
MISO
MISO
CS
CS
Text is not SVG - cannot display
\ No newline at end of file diff --git a/dist/img/sysd.png b/dist/img/sysd.png new file mode 100644 index 0000000000000000000000000000000000000000..5898a669f701dbf337f579946f2b608f2df3bcdb GIT binary patch literal 53000 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 literal 0 HcmV?d00001 diff --git a/dist/img/sysd.svg b/dist/img/sysd.svg new file mode 100644 index 0000000..ec6e6ce --- /dev/null +++ b/dist/img/sysd.svg @@ -0,0 +1,3 @@ + + +
ESP32
ESP32
Sensors
Sensors
Touch Screen
Touch Screen
E-Ink Display
E-Ink Display
I2C
I2C
I2C
I2C
SPI
SPI
Influx DB
Influx DB
OpenWeatherMap
OpenWeatherMap
NTP Server
NTP Server
Telegram
Telegram
HTTPS
HTTPS
HTTPS
HTTPS
HTTPS
HTTPS
HTTPS
HTTPS
UDP
UDP
Text is not SVG - cannot display
\ No newline at end of file diff --git a/dist/img/time.svg b/dist/img/time.svg new file mode 100644 index 0000000..b711f14 --- /dev/null +++ b/dist/img/time.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/dist/img/timer.svg b/dist/img/timer.svg new file mode 100644 index 0000000..594558c --- /dev/null +++ b/dist/img/timer.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dist/reset.css b/dist/reset.css new file mode 100644 index 0000000..e238539 --- /dev/null +++ b/dist/reset.css @@ -0,0 +1,30 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v4.0 | 20180602 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +main, menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, main, menu, nav, section { + display: block; +} \ No newline at end of file diff --git a/dist/reveal.css b/dist/reveal.css new file mode 100644 index 0000000..5f80fd0 --- /dev/null +++ b/dist/reveal.css @@ -0,0 +1,8 @@ +/*! +* reveal.js 4.3.1 +* https://revealjs.com +* MIT licensed +* +* Copyright (C) 2011-2022 Hakim El Hattab, https://hakim.se +*/ +.reveal .r-stretch,.reveal .stretch{max-width:none;max-height:none}.reveal pre.r-stretch code,.reveal pre.stretch code{height:100%;max-height:100%;box-sizing:border-box}.reveal .r-fit-text{display:inline-block;white-space:nowrap}.reveal .r-stack{display:grid}.reveal .r-stack>*{grid-area:1/1;margin:auto}.reveal .r-hstack,.reveal .r-vstack{display:flex}.reveal .r-hstack img,.reveal .r-hstack video,.reveal .r-vstack img,.reveal .r-vstack video{min-width:0;min-height:0;-o-object-fit:contain;object-fit:contain}.reveal .r-vstack{flex-direction:column;align-items:center;justify-content:center}.reveal .r-hstack{flex-direction:row;align-items:center;justify-content:center}.reveal .items-stretch{align-items:stretch}.reveal .items-start{align-items:flex-start}.reveal .items-center{align-items:center}.reveal .items-end{align-items:flex-end}.reveal .justify-between{justify-content:space-between}.reveal .justify-around{justify-content:space-around}.reveal .justify-start{justify-content:flex-start}.reveal .justify-center{justify-content:center}.reveal .justify-end{justify-content:flex-end}html.reveal-full-page{width:100%;height:100%;height:100vh;height:calc(var(--vh,1vh) * 100);overflow:hidden}.reveal-viewport{height:100%;overflow:hidden;position:relative;line-height:1;margin:0;background-color:#fff;color:#000}.reveal-viewport:-webkit-full-screen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal-viewport:-ms-fullscreen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal-viewport:fullscreen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal .slides section .fragment{opacity:0;visibility:hidden;transition:all .2s ease;will-change:opacity}.reveal .slides section .fragment.visible{opacity:1;visibility:inherit}.reveal .slides section .fragment.disabled{transition:none}.reveal .slides section .fragment.grow{opacity:1;visibility:inherit}.reveal .slides section .fragment.grow.visible{transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1;visibility:inherit}.reveal .slides section .fragment.shrink.visible{transform:scale(.7)}.reveal .slides section .fragment.zoom-in{transform:scale(.1)}.reveal .slides section .fragment.zoom-in.visible{transform:none}.reveal .slides section .fragment.fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-out.visible{opacity:0;visibility:hidden}.reveal .slides section .fragment.semi-fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.semi-fade-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.strike{opacity:1;visibility:inherit}.reveal .slides section .fragment.strike.visible{text-decoration:line-through}.reveal .slides section .fragment.fade-up{transform:translate(0,40px)}.reveal .slides section .fragment.fade-up.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-down{transform:translate(0,-40px)}.reveal .slides section .fragment.fade-down.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-right{transform:translate(-40px,0)}.reveal .slides section .fragment.fade-right.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-left{transform:translate(40px,0)}.reveal .slides section .fragment.fade-left.visible{transform:translate(0,0)}.reveal .slides section .fragment.current-visible,.reveal .slides section .fragment.fade-in-then-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.current-visible.current-fragment,.reveal .slides section .fragment.fade-in-then-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.fade-in-then-semi-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-blue,.reveal .slides section .fragment.highlight-current-blue,.reveal .slides section .fragment.highlight-current-green,.reveal .slides section .fragment.highlight-current-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-red{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal .slides section .fragment.highlight-current-red.current-fragment{color:#ff2c2d}.reveal .slides section .fragment.highlight-current-green.current-fragment{color:#17ff2e}.reveal .slides section .fragment.highlight-current-blue.current-fragment{color:#1b91ff}.reveal:after{content:"";font-style:italic}.reveal iframe{z-index:1}.reveal a{position:relative}@keyframes bounce-right{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(10px)}30%{transform:translateX(-5px)}}@keyframes bounce-left{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(-10px)}30%{transform:translateX(5px)}}@keyframes bounce-down{0%,10%,25%,40%,50%{transform:translateY(0)}20%{transform:translateY(10px)}30%{transform:translateY(-5px)}}.reveal .controls{display:none;position:absolute;top:auto;bottom:12px;right:12px;left:auto;z-index:11;color:#000;pointer-events:none;font-size:10px}.reveal .controls button{position:absolute;padding:0;background-color:transparent;border:0;outline:0;cursor:pointer;color:currentColor;transform:scale(.9999);transition:color .2s ease,opacity .2s ease,transform .2s ease;z-index:2;pointer-events:auto;font-size:inherit;visibility:hidden;opacity:0;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.reveal .controls .controls-arrow:after,.reveal .controls .controls-arrow:before{content:"";position:absolute;top:0;left:0;width:2.6em;height:.5em;border-radius:.25em;background-color:currentColor;transition:all .15s ease,background-color .8s ease;transform-origin:.2em 50%;will-change:transform}.reveal .controls .controls-arrow{position:relative;width:3.6em;height:3.6em}.reveal .controls .controls-arrow:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal .controls .controls-arrow:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}.reveal .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(40deg)}.reveal .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-40deg)}.reveal .controls .controls-arrow:active:before{transform:translateX(.5em) translateY(1.55em) rotate(36deg)}.reveal .controls .controls-arrow:active:after{transform:translateX(.5em) translateY(1.55em) rotate(-36deg)}.reveal .controls .navigate-left{right:6.4em;bottom:3.2em;transform:translateX(-10px)}.reveal .controls .navigate-left.highlight{animation:bounce-left 2s 50 both ease-out}.reveal .controls .navigate-right{right:0;bottom:3.2em;transform:translateX(10px)}.reveal .controls .navigate-right .controls-arrow{transform:rotate(180deg)}.reveal .controls .navigate-right.highlight{animation:bounce-right 2s 50 both ease-out}.reveal .controls .navigate-up{right:3.2em;bottom:6.4em;transform:translateY(-10px)}.reveal .controls .navigate-up .controls-arrow{transform:rotate(90deg)}.reveal .controls .navigate-down{right:3.2em;bottom:-1.4em;padding-bottom:1.4em;transform:translateY(10px)}.reveal .controls .navigate-down .controls-arrow{transform:rotate(-90deg)}.reveal .controls .navigate-down.highlight{animation:bounce-down 2s 50 both ease-out}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled{opacity:.3}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled:hover{opacity:1}.reveal .controls[data-controls-back-arrows=hidden] .navigate-up.enabled{opacity:0;visibility:hidden}.reveal .controls .enabled{visibility:visible;opacity:.9;cursor:pointer;transform:none}.reveal .controls .enabled.fragmented{opacity:.5}.reveal .controls .enabled.fragmented:hover,.reveal .controls .enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled{opacity:.3}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=hidden] .navigate-left.enabled{opacity:0;visibility:hidden}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled{opacity:.3}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled:hover{opacity:1}.reveal.rtl .controls[data-controls-back-arrows=hidden] .navigate-right.enabled{opacity:0;visibility:hidden}.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-down,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-up{display:none}.reveal:not(.has-vertical-slides) .controls .navigate-left,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-left{bottom:1.4em;right:5.5em}.reveal:not(.has-vertical-slides) .controls .navigate-right,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-right{bottom:1.4em;right:.5em}.reveal:not(.has-horizontal-slides) .controls .navigate-up{right:1.4em;bottom:5em}.reveal:not(.has-horizontal-slides) .controls .navigate-down{right:1.4em;bottom:.5em}.reveal.has-dark-background .controls{color:#fff}.reveal.has-light-background .controls{color:#000}.reveal.no-hover .controls .controls-arrow:active:before,.reveal.no-hover .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal.no-hover .controls .controls-arrow:active:after,.reveal.no-hover .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}@media screen and (min-width:500px){.reveal .controls[data-controls-layout=edges]{top:0;right:0;bottom:0;left:0}.reveal .controls[data-controls-layout=edges] .navigate-down,.reveal .controls[data-controls-layout=edges] .navigate-left,.reveal .controls[data-controls-layout=edges] .navigate-right,.reveal .controls[data-controls-layout=edges] .navigate-up{bottom:auto;right:auto}.reveal .controls[data-controls-layout=edges] .navigate-left{top:50%;left:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-right{top:50%;right:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-up{top:.8em;left:50%;margin-left:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-down{bottom:-.3em;left:50%;margin-left:-1.8em}}.reveal .progress{position:absolute;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10;background-color:rgba(0,0,0,.2);color:#fff}.reveal .progress:after{content:"";display:block;position:absolute;height:10px;width:100%;top:-10px}.reveal .progress span{display:block;height:100%;width:100%;background-color:currentColor;transition:transform .8s cubic-bezier(.26,.86,.44,.985);transform-origin:0 0;transform:scaleX(0)}.reveal .slide-number{position:absolute;display:block;right:8px;bottom:8px;z-index:31;font-family:Helvetica,sans-serif;font-size:12px;line-height:1;color:#fff;background-color:rgba(0,0,0,.4);padding:5px}.reveal .slide-number a{color:currentColor}.reveal .slide-number-delimiter{margin:0 3px}.reveal{position:relative;width:100%;height:100%;overflow:hidden;touch-action:pinch-zoom}.reveal.embedded{touch-action:pan-y}.reveal .slides{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;margin:auto;pointer-events:none;overflow:visible;z-index:1;text-align:center;perspective:600px;perspective-origin:50% 40%}.reveal .slides>section{perspective:600px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;pointer-events:auto;z-index:10;transform-style:flat;transition:transform-origin .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{transition-duration:.4s}.reveal[data-transition-speed=slow] .slides section{transition-duration:1.2s}.reveal .slides section[data-transition-speed=fast]{transition-duration:.4s}.reveal .slides section[data-transition-speed=slow]{transition-duration:1.2s}.reveal .slides>section.stack{padding-top:0;padding-bottom:0;pointer-events:none;height:100%}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal .slides>section:empty,.reveal .slides>section>section:empty,.reveal .slides>section>section[data-background-interactive],.reveal .slides>section[data-background-interactive]{pointer-events:none}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:0!important}.reveal .slides>section:not(.present),.reveal .slides>section>section:not(.present){pointer-events:none}.reveal.overview .slides>section,.reveal.overview .slides>section>section{pointer-events:auto}.reveal .slides>section.future,.reveal .slides>section.past,.reveal .slides>section>section.future,.reveal .slides>section>section.past{opacity:0}.reveal .slides>section[data-transition=slide].past,.reveal .slides>section[data-transition~=slide-out].past,.reveal.slide .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=slide].future,.reveal .slides>section[data-transition~=slide-in].future,.reveal.slide .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=slide].past,.reveal .slides>section>section[data-transition~=slide-out].past,.reveal.slide .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=slide].future,.reveal .slides>section>section[data-transition~=slide-in].future,.reveal.slide .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides>section[data-transition=linear].past,.reveal .slides>section[data-transition~=linear-out].past,.reveal.linear .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal .slides>section[data-transition~=linear-in].future,.reveal.linear .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal .slides>section>section[data-transition~=linear-out].past,.reveal.linear .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal .slides>section>section[data-transition~=linear-in].future,.reveal.linear .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides section[data-transition=default].stack,.reveal.default .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=default].past,.reveal .slides>section[data-transition~=default-out].past,.reveal.default .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section[data-transition~=default-in].future,.reveal.default .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section[data-transition~=default-out].past,.reveal.default .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section[data-transition~=default-in].future,.reveal.default .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=convex].stack,.reveal.convex .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=convex].past,.reveal .slides>section[data-transition~=convex-out].past,.reveal.convex .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=convex].future,.reveal .slides>section[data-transition~=convex-in].future,.reveal.convex .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=convex].past,.reveal .slides>section>section[data-transition~=convex-out].past,.reveal.convex .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=convex].future,.reveal .slides>section>section[data-transition~=convex-in].future,.reveal.convex .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=concave].stack,.reveal.concave .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=concave].past,.reveal .slides>section[data-transition~=concave-out].past,.reveal.concave .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal .slides>section[data-transition~=concave-in].future,.reveal.concave .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal .slides>section>section[data-transition~=concave-out].past,.reveal.concave .slides>section>section:not([data-transition]).past{transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal .slides>section>section[data-transition~=concave-in].future,.reveal.concave .slides>section>section:not([data-transition]).future{transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides section[data-transition=zoom],.reveal.zoom .slides section:not([data-transition]){transition-timing-function:ease}.reveal .slides>section[data-transition=zoom].past,.reveal .slides>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section:not([data-transition]).past{visibility:hidden;transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal .slides>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section:not([data-transition]).future{visibility:hidden;transform:scale(.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal .slides>section>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section>section:not([data-transition]).past{transform:scale(16)}.reveal .slides>section>section[data-transition=zoom].future,.reveal .slides>section>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section>section:not([data-transition]).future{transform:scale(.2)}.reveal.cube .slides{perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;transform-style:preserve-3d}.reveal.center.cube .slides section{min-height:0}.reveal.cube .slides section:not(.stack):before{content:"";position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:"";position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0 0}.reveal.cube .slides>section.past{transform-origin:100% 0;transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{transform-origin:0 0;transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{transform-origin:0 100%;transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{transform-origin:0 0;transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{perspective-origin:0 50%;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;box-sizing:border-box;transform-style:preserve-3d}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:"";position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:"";position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0 0}.reveal.page .slides>section.past{transform-origin:0 0;transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{transform-origin:100% 0;transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{transform-origin:0 0;transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{transform-origin:0 100%;transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section:not([data-transition]),.reveal.fade .slides>section>section:not([data-transition]){transform:none;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section{transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section:not([data-transition]){transform:none;transition:none}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;transition:all 1s ease}.reveal .pause-overlay .resume-button{position:absolute;bottom:20px;right:20px;color:#ccc;border-radius:2px;padding:6px 14px;border:2px solid #ccc;font-size:16px;background:0 0;cursor:pointer}.reveal .pause-overlay .resume-button:hover{color:#fff;border-color:#fff}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.reveal .no-transition,.reveal .no-transition *,.reveal .slides.disable-slide-transitions section{transition:none!important}.reveal .slides.disable-slide-transitions section{transform:none!important}.reveal .backgrounds{position:absolute;width:100%;height:100%;top:0;left:0;perspective:600px}.reveal .slide-background{display:none;position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;overflow:hidden;background-color:rgba(0,0,0,0);transition:all .8s cubic-bezier(.26,.86,.44,.985)}.reveal .slide-background-content{position:absolute;width:100%;height:100%;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.reveal .slide-background.stack{display:block}.reveal .slide-background.present{opacity:1;visibility:visible;z-index:2}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal .slide-background video{position:absolute;width:100%;height:100%;max-width:none;max-height:none;top:0;left:0;-o-object-fit:cover;object-fit:cover}.reveal .slide-background[data-background-size=contain] video{-o-object-fit:contain;object-fit:contain}.reveal>.backgrounds .slide-background[data-background-transition=none],.reveal[data-background-transition=none]>.backgrounds .slide-background:not([data-background-transition]){transition:none}.reveal>.backgrounds .slide-background[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background:not([data-background-transition]){opacity:1}.reveal>.backgrounds .slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.past:not([data-background-transition]){transform:translate(-100%,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.future:not([data-background-transition]){transform:translate(100%,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){transform:translate(0,-100%)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){transform:translate(0,100%)}.reveal>.backgrounds .slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background:not([data-background-transition]){transition-timing-function:ease}.reveal>.backgrounds .slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{transition-duration:.4s}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{transition-duration:1.2s}.reveal [data-auto-animate-target^=unmatched]{will-change:opacity}.reveal section[data-auto-animate]:not(.stack):not([data-auto-animate=running]) [data-auto-animate-target^=unmatched]{opacity:0}.reveal.overview{perspective-origin:50% 50%;perspective:700px}.reveal.overview .slides{-moz-transform-style:preserve-3d}.reveal.overview .slides section{height:100%;top:0!important;opacity:1!important;overflow:hidden;visibility:visible!important;cursor:pointer;box-sizing:border-box}.reveal.overview .slides section.present,.reveal.overview .slides section:hover{outline:10px solid rgba(150,150,150,.4);outline-offset:10px}.reveal.overview .slides section .fragment{opacity:1;transition:none}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0 0;outline:0;overflow:visible}.reveal.overview .backgrounds{perspective:inherit;-moz-transform-style:preserve-3d}.reveal.overview .backgrounds .slide-background{opacity:1;visibility:visible;outline:10px solid rgba(150,150,150,.1);outline-offset:10px}.reveal.overview .backgrounds .slide-background.stack{overflow:visible}.reveal.overview .slides section,.reveal.overview-deactivating .slides section{transition:none}.reveal.overview .backgrounds .slide-background,.reveal.overview-deactivating .backgrounds .slide-background{transition:none}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl code,.reveal.rtl pre{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{transform-origin:100% 0}.reveal.has-parallax-background .backgrounds{transition:all .8s ease}.reveal.has-parallax-background[data-transition-speed=fast] .backgrounds{transition-duration:.4s}.reveal.has-parallax-background[data-transition-speed=slow] .backgrounds{transition-duration:1.2s}.reveal>.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.9);transition:all .3s ease}.reveal>.overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;transition:all .3s ease}.reveal>.overlay header{position:absolute;left:0;top:0;width:100%;padding:5px;z-index:2;box-sizing:border-box}.reveal>.overlay header a{display:inline-block;width:40px;height:40px;line-height:36px;padding:0 10px;float:right;opacity:.6;box-sizing:border-box}.reveal>.overlay header a:hover{opacity:1}.reveal>.overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal>.overlay header a.close .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC)}.reveal>.overlay header a.external .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==)}.reveal>.overlay .viewport{position:absolute;display:flex;top:50px;right:0;bottom:0;left:0}.reveal>.overlay.overlay-preview .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;transition:all .3s ease}.reveal>.overlay.overlay-preview.loaded .viewport iframe{opacity:1;visibility:visible}.reveal>.overlay.overlay-preview.loaded .viewport-inner{position:absolute;z-index:-1;left:0;top:45%;width:100%;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-preview .x-frame-error{opacity:0;transition:opacity .3s ease .3s}.reveal>.overlay.overlay-preview.loaded .x-frame-error{opacity:1}.reveal>.overlay.overlay-preview.loaded .spinner{opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.overlay.overlay-help .viewport{overflow:auto;color:#fff}.reveal>.overlay.overlay-help .viewport .viewport-inner{width:600px;margin:auto;padding:20px 20px 80px 20px;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-help .viewport .viewport-inner .title{font-size:20px}.reveal>.overlay.overlay-help .viewport .viewport-inner table{border:1px solid #fff;border-collapse:collapse;font-size:16px}.reveal>.overlay.overlay-help .viewport .viewport-inner table td,.reveal>.overlay.overlay-help .viewport .viewport-inner table th{width:200px;padding:14px;border:1px solid #fff;vertical-align:middle}.reveal>.overlay.overlay-help .viewport .viewport-inner table th{padding-top:20px;padding-bottom:20px}.reveal .playback{position:absolute;left:15px;bottom:20px;z-index:30;cursor:pointer;transition:all .4s ease;-webkit-tap-highlight-color:transparent}.reveal.overview .playback{opacity:0;visibility:hidden}.reveal .hljs{min-height:100%}.reveal .hljs table{margin:initial}.reveal .hljs-ln-code,.reveal .hljs-ln-numbers{padding:0;border:0}.reveal .hljs-ln-numbers{opacity:.6;padding-right:.75em;text-align:right;vertical-align:top}.reveal .hljs.has-highlights tr:not(.highlight-line){opacity:.4}.reveal .hljs:not(:first-child).fragment{position:absolute;top:0;left:0;width:100%;box-sizing:border-box}.reveal pre[data-auto-animate-target]{overflow:hidden}.reveal pre[data-auto-animate-target] code{height:100%}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;perspective:400px;perspective-origin:50% 50%}.reveal .roll:hover{background:0 0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;transition:all .4s ease;transform-origin:50% 0;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);transform:translate3d(0,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-origin:50% 0;transform:translate3d(0,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.reveal .speaker-notes{display:none;position:absolute;width:33.3333333333%;height:100%;top:0;left:100%;padding:14px 18px 14px 18px;z-index:1;font-size:18px;line-height:1.4;border:1px solid rgba(0,0,0,.05);color:#222;background-color:#f5f5f5;overflow:auto;box-sizing:border-box;text-align:left;font-family:Helvetica,sans-serif;-webkit-overflow-scrolling:touch}.reveal .speaker-notes .notes-placeholder{color:#ccc;font-style:italic}.reveal .speaker-notes:focus{outline:0}.reveal .speaker-notes:before{content:"Speaker notes";display:block;margin-bottom:10px;opacity:.5}.reveal.show-notes{max-width:75%;overflow:visible}.reveal.show-notes .speaker-notes{display:block}@media screen and (min-width:1600px){.reveal .speaker-notes{font-size:20px}}@media screen and (max-width:1024px){.reveal.show-notes{border-left:0;max-width:none;max-height:70%;max-height:70vh;overflow:visible}.reveal.show-notes .speaker-notes{top:100%;left:0;width:100%;height:30vh;border:0}}@media screen and (max-width:600px){.reveal.show-notes{max-height:60%;max-height:60vh}.reveal.show-notes .speaker-notes{top:100%;height:40vh}.reveal .speaker-notes{font-size:14px}}.zoomed .reveal *,.zoomed .reveal :after,.zoomed .reveal :before{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .controls,.zoomed .reveal .progress{opacity:0}.zoomed .reveal .roll span{background:0 0}.zoomed .reveal .roll span:after{visibility:hidden}html.print-pdf *{-webkit-print-color-adjust:exact}html.print-pdf{width:100%;height:100%;overflow:visible}html.print-pdf body{margin:0 auto!important;border:0;padding:0;float:none!important;overflow:visible}html.print-pdf .nestedarrow,html.print-pdf .reveal .controls,html.print-pdf .reveal .playback,html.print-pdf .reveal .progress,html.print-pdf .reveal.overview,html.print-pdf .state-background{display:none!important}html.print-pdf .reveal pre code{overflow:hidden!important;font-family:Courier,"Courier New",monospace!important}html.print-pdf .reveal{width:auto!important;height:auto!important;overflow:hidden!important}html.print-pdf .reveal .slides{position:static;width:100%!important;height:auto!important;zoom:1!important;pointer-events:initial;left:auto;top:auto;margin:0!important;padding:0!important;overflow:visible;display:block;perspective:none;perspective-origin:50% 50%}html.print-pdf .reveal .slides .pdf-page{position:relative;overflow:hidden;z-index:1;page-break-after:always}html.print-pdf .reveal .slides section{visibility:visible!important;display:block!important;position:absolute!important;margin:0!important;padding:0!important;box-sizing:border-box!important;min-height:1px;opacity:1!important;transform-style:flat!important;transform:none!important}html.print-pdf .reveal section.stack{position:relative!important;margin:0!important;padding:0!important;page-break-after:avoid!important;height:auto!important;min-height:auto!important}html.print-pdf .reveal img{box-shadow:none}html.print-pdf .reveal .backgrounds{display:none}html.print-pdf .reveal .slide-background{display:block!important;position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto!important}html.print-pdf .reveal.show-notes{max-width:none;max-height:none}html.print-pdf .reveal .speaker-notes-pdf{display:block;width:100%;height:auto;max-height:none;top:auto;right:auto;bottom:auto;left:auto;z-index:100}html.print-pdf .reveal .speaker-notes-pdf[data-layout=separate-page]{position:relative;color:inherit;background-color:transparent;padding:20px;page-break-after:always;border:0}html.print-pdf .reveal .slide-number-pdf{display:block;position:absolute;font-size:14px}html.print-pdf .aria-status{display:none}@media print{html:not(.print-pdf){background:#fff;width:auto;height:auto;overflow:visible}html:not(.print-pdf) body{background:#fff;font-size:20pt;width:auto;height:auto;border:0;margin:0 5%;padding:0;overflow:visible;float:none!important}html:not(.print-pdf) .controls,html:not(.print-pdf) .fork-reveal,html:not(.print-pdf) .nestedarrow,html:not(.print-pdf) .reveal .backgrounds,html:not(.print-pdf) .reveal .progress,html:not(.print-pdf) .reveal .slide-number,html:not(.print-pdf) .share-reveal,html:not(.print-pdf) .state-background{display:none!important}html:not(.print-pdf) body,html:not(.print-pdf) li,html:not(.print-pdf) p,html:not(.print-pdf) td{font-size:20pt!important;color:#000}html:not(.print-pdf) h1,html:not(.print-pdf) h2,html:not(.print-pdf) h3,html:not(.print-pdf) h4,html:not(.print-pdf) h5,html:not(.print-pdf) h6{color:#000!important;height:auto;line-height:normal;text-align:left;letter-spacing:normal}html:not(.print-pdf) h1{font-size:28pt!important}html:not(.print-pdf) h2{font-size:24pt!important}html:not(.print-pdf) h3{font-size:22pt!important}html:not(.print-pdf) h4{font-size:22pt!important;font-variant:small-caps}html:not(.print-pdf) h5{font-size:21pt!important}html:not(.print-pdf) h6{font-size:20pt!important;font-style:italic}html:not(.print-pdf) a:link,html:not(.print-pdf) a:visited{color:#000!important;font-weight:700;text-decoration:underline}html:not(.print-pdf) div,html:not(.print-pdf) ol,html:not(.print-pdf) p,html:not(.print-pdf) ul{visibility:visible;position:static;width:auto;height:auto;display:block;overflow:visible;margin:0;text-align:left!important}html:not(.print-pdf) .reveal pre,html:not(.print-pdf) .reveal table{margin-left:0;margin-right:0}html:not(.print-pdf) .reveal pre code{padding:20px}html:not(.print-pdf) .reveal blockquote{margin:20px 0}html:not(.print-pdf) .reveal .slides{position:static!important;width:auto!important;height:auto!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:0!important;zoom:1!important;transform:none!important;overflow:visible!important;display:block!important;text-align:left!important;perspective:none;perspective-origin:50% 50%}html:not(.print-pdf) .reveal .slides section{visibility:visible!important;position:static!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:60px 20px!important;z-index:auto!important;opacity:1!important;page-break-after:always!important;transform-style:flat!important;transform:none!important;transition:none!important}html:not(.print-pdf) .reveal .slides section.stack{padding:0!important}html:not(.print-pdf) .reveal section:last-of-type{page-break-after:avoid!important}html:not(.print-pdf) .reveal section .fragment{opacity:1!important;visibility:visible!important;transform:none!important}html:not(.print-pdf) .reveal section img{display:block;margin:15px 0;background:#fff;border:1px solid #666;box-shadow:none}html:not(.print-pdf) .reveal section small{font-size:.8em}html:not(.print-pdf) .reveal .hljs{max-height:100%;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;font-size:15pt}html:not(.print-pdf) .reveal .hljs .hljs-ln-numbers{white-space:nowrap}html:not(.print-pdf) .reveal .hljs td{font-size:inherit!important;color:inherit!important}} \ No newline at end of file diff --git a/dist/reveal.esm.js b/dist/reveal.esm.js new file mode 100644 index 0000000..493bfc5 --- /dev/null +++ b/dist/reveal.esm.js @@ -0,0 +1,9 @@ +/*! +* reveal.js 4.3.1 +* https://revealjs.com +* MIT licensed +* +* Copyright (C) 2011-2022 Hakim El Hattab, https://hakim.se +*/ +const e=(e,t)=>{for(let i in t)e[i]=t[i];return e},t=(e,t)=>Array.from(e.querySelectorAll(t)),i=(e,t,i)=>{i?e.classList.add(t):e.classList.remove(t)},a=e=>{if("string"==typeof e){if("null"===e)return null;if("true"===e)return!0;if("false"===e)return!1;if(e.match(/^-?[\d\.]+$/))return parseFloat(e)}return e},s=(e,t)=>{e.style.transform=t},n=(e,t)=>{let i=e.matches||e.matchesSelector||e.msMatchesSelector;return!(!i||!i.call(e,t))},r=(e,t)=>{if("function"==typeof e.closest)return e.closest(t);for(;e;){if(n(e,t))return e;e=e.parentNode}return null},o=(e,t,i,a="")=>{let s=e.querySelectorAll("."+i);for(let t=0;t{let t=document.createElement("style");return t.type="text/css",e&&e.length>0&&(t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))),document.head.appendChild(t),t},d=()=>{let e={};location.search.replace(/[A-Z0-9]+?=([\w\.%-]*)/gi,(t=>{e[t.split("=").shift()]=t.split("=").pop()}));for(let t in e){let i=e[t];e[t]=a(unescape(i))}return void 0!==e.dependencies&&delete e.dependencies,e},c=(e,t=0)=>{if(e){let i,a=e.style.height;return e.style.height="0px",e.parentNode.style.height="auto",i=t-e.parentNode.offsetHeight,e.style.height=a+"px",e.parentNode.style.removeProperty("height"),i}return t},h={mp4:"video/mp4",m4a:"video/mp4",ogv:"video/ogg",mpeg:"video/mpeg",webm:"video/webm"},u=navigator.userAgent,g=/(iphone|ipod|ipad|android)/gi.test(u)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1;/chrome/i.test(u)&&/edge/i.test(u);const v=/android/gi.test(u);var p={};Object.defineProperty(p,"__esModule",{value:!0});var m=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e?x(t(document.querySelectorAll(e)),i):x([e],i)[0]}}("undefined"==typeof window?null:window);class b{constructor(e){this.Reveal=e,this.startEmbeddedIframe=this.startEmbeddedIframe.bind(this)}shouldPreload(e){let t=this.Reveal.getConfig().preloadIframes;return"boolean"!=typeof t&&(t=e.hasAttribute("data-preload")),t}load(e,i={}){e.style.display=this.Reveal.getConfig().display,t(e,"img[data-src], video[data-src], audio[data-src], iframe[data-src]").forEach((e=>{("IFRAME"!==e.tagName||this.shouldPreload(e))&&(e.setAttribute("src",e.getAttribute("data-src")),e.setAttribute("data-lazy-loaded",""),e.removeAttribute("data-src"))})),t(e,"video, audio").forEach((e=>{let i=0;t(e,"source[data-src]").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src")),e.removeAttribute("data-src"),e.setAttribute("data-lazy-loaded",""),i+=1})),g&&"VIDEO"===e.tagName&&e.setAttribute("playsinline",""),i>0&&e.load()}));let a=e.slideBackgroundElement;if(a){a.style.display="block";let t=e.slideBackgroundContentElement,s=e.getAttribute("data-background-iframe");if(!1===a.hasAttribute("data-loaded")){a.setAttribute("data-loaded","true");let n=e.getAttribute("data-background-image"),r=e.getAttribute("data-background-video"),o=e.hasAttribute("data-background-video-loop"),l=e.hasAttribute("data-background-video-muted");if(n)/^data:/.test(n.trim())?t.style.backgroundImage=`url(${n.trim()})`:t.style.backgroundImage=n.split(",").map((e=>`url(${encodeURI(e.trim())})`)).join(",");else if(r&&!this.Reveal.isSpeakerNotes()){let e=document.createElement("video");o&&e.setAttribute("loop",""),l&&(e.muted=!0),g&&(e.muted=!0,e.setAttribute("playsinline","")),r.split(",").forEach((t=>{let i=((e="")=>h[e.split(".").pop()])(t);e.innerHTML+=i?``:``})),t.appendChild(e)}else if(s&&!0!==i.excludeIframes){let e=document.createElement("iframe");e.setAttribute("allowfullscreen",""),e.setAttribute("mozallowfullscreen",""),e.setAttribute("webkitallowfullscreen",""),e.setAttribute("allow","autoplay"),e.setAttribute("data-src",s),e.style.width="100%",e.style.height="100%",e.style.maxHeight="100%",e.style.maxWidth="100%",t.appendChild(e)}}let n=t.querySelector("iframe[data-src]");n&&this.shouldPreload(a)&&!/autoplay=(1|true|yes)/gi.test(s)&&n.getAttribute("src")!==s&&n.setAttribute("src",s)}this.layout(e)}layout(e){Array.from(e.querySelectorAll(".r-fit-text")).forEach((e=>{f(e,{minSize:24,maxSize:.8*this.Reveal.getConfig().height,observeMutations:!1,observeWindow:!1})}))}unload(e){e.style.display="none";let i=this.Reveal.getSlideBackground(e);i&&(i.style.display="none",t(i,"iframe[src]").forEach((e=>{e.removeAttribute("src")}))),t(e,"video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]").forEach((e=>{e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")})),t(e,"video[data-lazy-loaded] source[src], audio source[src]").forEach((e=>{e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")}))}formatEmbeddedContent(){let e=(e,i,a)=>{t(this.Reveal.getSlidesElement(),"iframe["+e+'*="'+i+'"]').forEach((t=>{let i=t.getAttribute(e);i&&-1===i.indexOf(a)&&t.setAttribute(e,i+(/\?/.test(i)?"&":"?")+a)}))};e("src","youtube.com/embed/","enablejsapi=1"),e("data-src","youtube.com/embed/","enablejsapi=1"),e("src","player.vimeo.com/","api=1"),e("data-src","player.vimeo.com/","api=1")}startEmbeddedContent(e){e&&!this.Reveal.isSpeakerNotes()&&(t(e,'img[src$=".gif"]').forEach((e=>{e.setAttribute("src",e.getAttribute("src"))})),t(e,"video, audio").forEach((e=>{if(r(e,".fragment")&&!r(e,".fragment.visible"))return;let t=this.Reveal.getConfig().autoPlayMedia;if("boolean"!=typeof t&&(t=e.hasAttribute("data-autoplay")||!!r(e,".slide-background")),t&&"function"==typeof e.play)if(e.readyState>1)this.startEmbeddedMedia({target:e});else if(g){let t=e.play();t&&"function"==typeof t.catch&&!1===e.controls&&t.catch((()=>{e.controls=!0,e.addEventListener("play",(()=>{e.controls=!1}))}))}else e.removeEventListener("loadeddata",this.startEmbeddedMedia),e.addEventListener("loadeddata",this.startEmbeddedMedia)})),t(e,"iframe[src]").forEach((e=>{r(e,".fragment")&&!r(e,".fragment.visible")||this.startEmbeddedIframe({target:e})})),t(e,"iframe[data-src]").forEach((e=>{r(e,".fragment")&&!r(e,".fragment.visible")||e.getAttribute("src")!==e.getAttribute("data-src")&&(e.removeEventListener("load",this.startEmbeddedIframe),e.addEventListener("load",this.startEmbeddedIframe),e.setAttribute("src",e.getAttribute("data-src")))})))}startEmbeddedMedia(e){let t=!!r(e.target,"html"),i=!!r(e.target,".present");t&&i&&(e.target.currentTime=0,e.target.play()),e.target.removeEventListener("loadeddata",this.startEmbeddedMedia)}startEmbeddedIframe(e){let t=e.target;if(t&&t.contentWindow){let i=!!r(e.target,"html"),a=!!r(e.target,".present");if(i&&a){let e=this.Reveal.getConfig().autoPlayMedia;"boolean"!=typeof e&&(e=t.hasAttribute("data-autoplay")||!!r(t,".slide-background")),/youtube\.com\/embed\//.test(t.getAttribute("src"))&&e?t.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*"):/player\.vimeo\.com\//.test(t.getAttribute("src"))&&e?t.contentWindow.postMessage('{"method":"play"}',"*"):t.contentWindow.postMessage("slide:start","*")}}}stopEmbeddedContent(i,a={}){a=e({unloadIframes:!0},a),i&&i.parentNode&&(t(i,"video, audio").forEach((e=>{e.hasAttribute("data-ignore")||"function"!=typeof e.pause||(e.setAttribute("data-paused-by-reveal",""),e.pause())})),t(i,"iframe").forEach((e=>{e.contentWindow&&e.contentWindow.postMessage("slide:stop","*"),e.removeEventListener("load",this.startEmbeddedIframe)})),t(i,'iframe[src*="youtube.com/embed/"]').forEach((e=>{!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*")})),t(i,'iframe[src*="player.vimeo.com/"]').forEach((e=>{!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"method":"pause"}',"*")})),!0===a.unloadIframes&&t(i,"iframe[data-src]").forEach((e=>{e.setAttribute("src","about:blank"),e.removeAttribute("src")})))}}class y{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="slide-number",this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){let i="none";e.slideNumber&&!this.Reveal.isPrintingPDF()&&("all"===e.showSlideNumber||"speaker"===e.showSlideNumber&&this.Reveal.isSpeakerNotes())&&(i="block"),this.element.style.display=i}update(){this.Reveal.getConfig().slideNumber&&this.element&&(this.element.innerHTML=this.getSlideNumber())}getSlideNumber(e=this.Reveal.getCurrentSlide()){let t,i=this.Reveal.getConfig(),a="h.v";if("function"==typeof i.slideNumber)t=i.slideNumber(e);else{"string"==typeof i.slideNumber&&(a=i.slideNumber),/c/.test(a)||1!==this.Reveal.getHorizontalSlides().length||(a="c");let s=e&&"uncounted"===e.dataset.visibility?0:1;switch(t=[],a){case"c":t.push(this.Reveal.getSlidePastCount(e)+s);break;case"c/t":t.push(this.Reveal.getSlidePastCount(e)+s,"/",this.Reveal.getTotalSlides());break;default:let i=this.Reveal.getIndices(e);t.push(i.h+s);let n="h/v"===a?"/":".";this.Reveal.isVerticalSlide(e)&&t.push(n,i.v+1)}}let s="#"+this.Reveal.location.getHash(e);return this.formatNumber(t[0],t[1],t[2],s)}formatNumber(e,t,i,a="#"+this.Reveal.location.getHash()){return"number"!=typeof i||isNaN(i)?`
\n\t\t\t\t\t${e}\n\t\t\t\t\t`:`\n\t\t\t\t\t${e}\n\t\t\t\t\t${t}\n\t\t\t\t\t${i}\n\t\t\t\t\t`}destroy(){this.element.remove()}}const w=e=>{let t=e.match(/^#([0-9a-f]{3})$/i);if(t&&t[1])return t=t[1],{r:17*parseInt(t.charAt(0),16),g:17*parseInt(t.charAt(1),16),b:17*parseInt(t.charAt(2),16)};let i=e.match(/^#([0-9a-f]{6})$/i);if(i&&i[1])return i=i[1],{r:parseInt(i.slice(0,2),16),g:parseInt(i.slice(2,4),16),b:parseInt(i.slice(4,6),16)};let a=e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);if(a)return{r:parseInt(a[1],10),g:parseInt(a[2],10),b:parseInt(a[3],10)};let s=e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);return s?{r:parseInt(s[1],10),g:parseInt(s[2],10),b:parseInt(s[3],10),a:parseFloat(s[4])}:null};class E{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="backgrounds",this.Reveal.getRevealElement().appendChild(this.element)}create(){this.element.innerHTML="",this.element.classList.add("no-transition"),this.Reveal.getHorizontalSlides().forEach((e=>{let i=this.createBackground(e,this.element);t(e,"section").forEach((e=>{this.createBackground(e,i),i.classList.add("stack")}))})),this.Reveal.getConfig().parallaxBackgroundImage?(this.element.style.backgroundImage='url("'+this.Reveal.getConfig().parallaxBackgroundImage+'")',this.element.style.backgroundSize=this.Reveal.getConfig().parallaxBackgroundSize,this.element.style.backgroundRepeat=this.Reveal.getConfig().parallaxBackgroundRepeat,this.element.style.backgroundPosition=this.Reveal.getConfig().parallaxBackgroundPosition,setTimeout((()=>{this.Reveal.getRevealElement().classList.add("has-parallax-background")}),1)):(this.element.style.backgroundImage="",this.Reveal.getRevealElement().classList.remove("has-parallax-background"))}createBackground(e,t){let i=document.createElement("div");i.className="slide-background "+e.className.replace(/present|past|future/,"");let a=document.createElement("div");return a.className="slide-background-content",i.appendChild(a),t.appendChild(i),e.slideBackgroundElement=i,e.slideBackgroundContentElement=a,this.sync(e),i}sync(e){const t=e.slideBackgroundElement,i=e.slideBackgroundContentElement,a={background:e.getAttribute("data-background"),backgroundSize:e.getAttribute("data-background-size"),backgroundImage:e.getAttribute("data-background-image"),backgroundVideo:e.getAttribute("data-background-video"),backgroundIframe:e.getAttribute("data-background-iframe"),backgroundColor:e.getAttribute("data-background-color"),backgroundGradient:e.getAttribute("data-background-gradient"),backgroundRepeat:e.getAttribute("data-background-repeat"),backgroundPosition:e.getAttribute("data-background-position"),backgroundTransition:e.getAttribute("data-background-transition"),backgroundOpacity:e.getAttribute("data-background-opacity")},s=e.hasAttribute("data-preload");e.classList.remove("has-dark-background"),e.classList.remove("has-light-background"),t.removeAttribute("data-loaded"),t.removeAttribute("data-background-hash"),t.removeAttribute("data-background-size"),t.removeAttribute("data-background-transition"),t.style.backgroundColor="",i.style.backgroundSize="",i.style.backgroundRepeat="",i.style.backgroundPosition="",i.style.backgroundImage="",i.style.opacity="",i.innerHTML="",a.background&&(/^(http|file|\/\/)/gi.test(a.background)||/\.(svg|png|jpg|jpeg|gif|bmp|webp)([?#\s]|$)/gi.test(a.background)?e.setAttribute("data-background-image",a.background):t.style.background=a.background),(a.background||a.backgroundColor||a.backgroundGradient||a.backgroundImage||a.backgroundVideo||a.backgroundIframe)&&t.setAttribute("data-background-hash",a.background+a.backgroundSize+a.backgroundImage+a.backgroundVideo+a.backgroundIframe+a.backgroundColor+a.backgroundGradient+a.backgroundRepeat+a.backgroundPosition+a.backgroundTransition+a.backgroundOpacity),a.backgroundSize&&t.setAttribute("data-background-size",a.backgroundSize),a.backgroundColor&&(t.style.backgroundColor=a.backgroundColor),a.backgroundGradient&&(t.style.backgroundImage=a.backgroundGradient),a.backgroundTransition&&t.setAttribute("data-background-transition",a.backgroundTransition),s&&t.setAttribute("data-preload",""),a.backgroundSize&&(i.style.backgroundSize=a.backgroundSize),a.backgroundRepeat&&(i.style.backgroundRepeat=a.backgroundRepeat),a.backgroundPosition&&(i.style.backgroundPosition=a.backgroundPosition),a.backgroundOpacity&&(i.style.opacity=a.backgroundOpacity);let n=a.backgroundColor;if(!n||!w(n)){let e=window.getComputedStyle(t);e&&e.backgroundColor&&(n=e.backgroundColor)}if(n){const t=w(n);t&&0!==t.a&&("string"==typeof(r=n)&&(r=w(r)),(r?(299*r.r+587*r.g+114*r.b)/1e3:null)<128?e.classList.add("has-dark-background"):e.classList.add("has-light-background"))}var r}update(e=!1){let i=this.Reveal.getCurrentSlide(),a=this.Reveal.getIndices(),s=null,n=this.Reveal.getConfig().rtl?"future":"past",r=this.Reveal.getConfig().rtl?"past":"future";if(Array.from(this.element.childNodes).forEach(((i,o)=>{i.classList.remove("past","present","future"),oa.h?i.classList.add(r):(i.classList.add("present"),s=i),(e||o===a.h)&&t(i,".slide-background").forEach(((e,t)=>{e.classList.remove("past","present","future"),ta.v?e.classList.add("future"):(e.classList.add("present"),o===a.h&&(s=e))}))})),this.previousBackground&&this.Reveal.slideContent.stopEmbeddedContent(this.previousBackground,{unloadIframes:!this.Reveal.slideContent.shouldPreload(this.previousBackground)}),s){this.Reveal.slideContent.startEmbeddedContent(s);let e=s.querySelector(".slide-background-content");if(e){let t=e.style.backgroundImage||"";/\.gif/i.test(t)&&(e.style.backgroundImage="",window.getComputedStyle(e).opacity,e.style.backgroundImage=t)}let t=this.previousBackground?this.previousBackground.getAttribute("data-background-hash"):null,i=s.getAttribute("data-background-hash");i&&i===t&&s!==this.previousBackground&&this.element.classList.add("no-transition"),this.previousBackground=s}i&&["has-light-background","has-dark-background"].forEach((e=>{i.classList.contains(e)?this.Reveal.getRevealElement().classList.add(e):this.Reveal.getRevealElement().classList.remove(e)}),this),setTimeout((()=>{this.element.classList.remove("no-transition")}),1)}updateParallax(){let e=this.Reveal.getIndices();if(this.Reveal.getConfig().parallaxBackgroundImage){let t,i,a=this.Reveal.getHorizontalSlides(),s=this.Reveal.getVerticalSlides(),n=this.element.style.backgroundSize.split(" ");1===n.length?t=i=parseInt(n[0],10):(t=parseInt(n[0],10),i=parseInt(n[1],10));let r,o,l=this.element.offsetWidth,d=a.length;r="number"==typeof this.Reveal.getConfig().parallaxBackgroundHorizontal?this.Reveal.getConfig().parallaxBackgroundHorizontal:d>1?(t-l)/(d-1):0,o=r*e.h*-1;let c,h,u=this.element.offsetHeight,g=s.length;c="number"==typeof this.Reveal.getConfig().parallaxBackgroundVertical?this.Reveal.getConfig().parallaxBackgroundVertical:(i-u)/(g-1),h=g>0?c*e.v:0,this.element.style.backgroundPosition=o+"px "+-h+"px"}}destroy(){this.element.remove()}}const R=/registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/,S=/fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;let A=0;class k{constructor(e){this.Reveal=e}run(e,t){this.reset();let i=this.Reveal.getSlides(),a=i.indexOf(t),s=i.indexOf(e);if(e.hasAttribute("data-auto-animate")&&t.hasAttribute("data-auto-animate")&&e.getAttribute("data-auto-animate-id")===t.getAttribute("data-auto-animate-id")&&!(a>s?t:e).hasAttribute("data-auto-animate-restart")){this.autoAnimateStyleSheet=this.autoAnimateStyleSheet||l();let i=this.getAutoAnimateOptions(t);e.dataset.autoAnimate="pending",t.dataset.autoAnimate="pending",i.slideDirection=a>s?"forward":"backward";let n="none"===e.style.display;n&&(e.style.display=this.Reveal.getConfig().display);let r=this.getAutoAnimatableElements(e,t).map((e=>this.autoAnimateElements(e.from,e.to,e.options||{},i,A++)));if(n&&(e.style.display="none"),"false"!==t.dataset.autoAnimateUnmatched&&!0===this.Reveal.getConfig().autoAnimateUnmatched){let e=.8*i.duration,a=.2*i.duration;this.getUnmatchedAutoAnimateElements(t).forEach((e=>{let t=this.getAutoAnimateOptions(e,i),a="unmatched";t.duration===i.duration&&t.delay===i.delay||(a="unmatched-"+A++,r.push(`[data-auto-animate="running"] [data-auto-animate-target="${a}"] { transition: opacity ${t.duration}s ease ${t.delay}s; }`)),e.dataset.autoAnimateTarget=a}),this),r.push(`[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${e}s ease ${a}s; }`)}this.autoAnimateStyleSheet.innerHTML=r.join(""),requestAnimationFrame((()=>{this.autoAnimateStyleSheet&&(getComputedStyle(this.autoAnimateStyleSheet).fontWeight,t.dataset.autoAnimate="running")})),this.Reveal.dispatchEvent({type:"autoanimate",data:{fromSlide:e,toSlide:t,sheet:this.autoAnimateStyleSheet}})}}reset(){t(this.Reveal.getRevealElement(),'[data-auto-animate]:not([data-auto-animate=""])').forEach((e=>{e.dataset.autoAnimate=""})),t(this.Reveal.getRevealElement(),"[data-auto-animate-target]").forEach((e=>{delete e.dataset.autoAnimateTarget})),this.autoAnimateStyleSheet&&this.autoAnimateStyleSheet.parentNode&&(this.autoAnimateStyleSheet.parentNode.removeChild(this.autoAnimateStyleSheet),this.autoAnimateStyleSheet=null)}autoAnimateElements(e,t,i,a,s){e.dataset.autoAnimateTarget="",t.dataset.autoAnimateTarget=s;let n=this.getAutoAnimateOptions(t,a);void 0!==i.delay&&(n.delay=i.delay),void 0!==i.duration&&(n.duration=i.duration),void 0!==i.easing&&(n.easing=i.easing);let r=this.getAutoAnimatableProperties("from",e,i),o=this.getAutoAnimatableProperties("to",t,i);if(t.classList.contains("fragment")&&(delete o.styles.opacity,e.classList.contains("fragment"))){(e.className.match(S)||[""])[0]===(t.className.match(S)||[""])[0]&&"forward"===a.slideDirection&&t.classList.add("visible","disabled")}if(!1!==i.translate||!1!==i.scale){let e=this.Reveal.getScale(),t={x:(r.x-o.x)/e,y:(r.y-o.y)/e,scaleX:r.width/o.width,scaleY:r.height/o.height};t.x=Math.round(1e3*t.x)/1e3,t.y=Math.round(1e3*t.y)/1e3,t.scaleX=Math.round(1e3*t.scaleX)/1e3,t.scaleX=Math.round(1e3*t.scaleX)/1e3;let a=!1!==i.translate&&(0!==t.x||0!==t.y),s=!1!==i.scale&&(0!==t.scaleX||0!==t.scaleY);if(a||s){let e=[];a&&e.push(`translate(${t.x}px, ${t.y}px)`),s&&e.push(`scale(${t.scaleX}, ${t.scaleY})`),r.styles.transform=e.join(" "),r.styles["transform-origin"]="top left",o.styles.transform="none"}}for(let e in o.styles){const t=o.styles[e],i=r.styles[e];t===i?delete o.styles[e]:(!0===t.explicitValue&&(o.styles[e]=t.value),!0===i.explicitValue&&(r.styles[e]=i.value))}let l="",d=Object.keys(o.styles);if(d.length>0){r.styles.transition="none",o.styles.transition=`all ${n.duration}s ${n.easing} ${n.delay}s`,o.styles["transition-property"]=d.join(", "),o.styles["will-change"]=d.join(", "),l='[data-auto-animate-target="'+s+'"] {'+Object.keys(r.styles).map((e=>e+": "+r.styles[e]+" !important;")).join("")+'}[data-auto-animate="running"] [data-auto-animate-target="'+s+'"] {'+Object.keys(o.styles).map((e=>e+": "+o.styles[e]+" !important;")).join("")+"}"}return l}getAutoAnimateOptions(t,i){let a={easing:this.Reveal.getConfig().autoAnimateEasing,duration:this.Reveal.getConfig().autoAnimateDuration,delay:0};if(a=e(a,i),t.parentNode){let e=r(t.parentNode,"[data-auto-animate-target]");e&&(a=this.getAutoAnimateOptions(e,a))}return t.dataset.autoAnimateEasing&&(a.easing=t.dataset.autoAnimateEasing),t.dataset.autoAnimateDuration&&(a.duration=parseFloat(t.dataset.autoAnimateDuration)),t.dataset.autoAnimateDelay&&(a.delay=parseFloat(t.dataset.autoAnimateDelay)),a}getAutoAnimatableProperties(e,t,i){let a=this.Reveal.getConfig(),s={styles:[]};if(!1!==i.translate||!1!==i.scale){let e;if("function"==typeof i.measure)e=i.measure(t);else if(a.center)e=t.getBoundingClientRect();else{let i=this.Reveal.getScale();e={x:t.offsetLeft*i,y:t.offsetTop*i,width:t.offsetWidth*i,height:t.offsetHeight*i}}s.x=e.x,s.y=e.y,s.width=e.width,s.height=e.height}const n=getComputedStyle(t);return(i.styles||a.autoAnimateStyles).forEach((t=>{let i;"string"==typeof t&&(t={property:t}),i=void 0!==t.from&&"from"===e?{value:t.from,explicitValue:!0}:void 0!==t.to&&"to"===e?{value:t.to,explicitValue:!0}:n[t.property],""!==i&&(s.styles[t.property]=i)})),s}getAutoAnimatableElements(e,t){let i=("function"==typeof this.Reveal.getConfig().autoAnimateMatcher?this.Reveal.getConfig().autoAnimateMatcher:this.getAutoAnimatePairs).call(this,e,t),a=[];return i.filter(((e,t)=>{if(-1===a.indexOf(e.to))return a.push(e.to),!0}))}getAutoAnimatePairs(e,t){let i=[];const a="h1, h2, h3, h4, h5, h6, p, li";return this.findAutoAnimateMatches(i,e,t,"[data-id]",(e=>e.nodeName+":::"+e.getAttribute("data-id"))),this.findAutoAnimateMatches(i,e,t,a,(e=>e.nodeName+":::"+e.innerText)),this.findAutoAnimateMatches(i,e,t,"img, video, iframe",(e=>e.nodeName+":::"+(e.getAttribute("src")||e.getAttribute("data-src")))),this.findAutoAnimateMatches(i,e,t,"pre",(e=>e.nodeName+":::"+e.innerText)),i.forEach((e=>{n(e.from,a)?e.options={scale:!1}:n(e.from,"pre")&&(e.options={scale:!1,styles:["width","height"]},this.findAutoAnimateMatches(i,e.from,e.to,".hljs .hljs-ln-code",(e=>e.textContent),{scale:!1,styles:[],measure:this.getLocalBoundingBox.bind(this)}),this.findAutoAnimateMatches(i,e.from,e.to,".hljs .hljs-ln-line[data-line-number]",(e=>e.getAttribute("data-line-number")),{scale:!1,styles:["width"],measure:this.getLocalBoundingBox.bind(this)}))}),this),i}getLocalBoundingBox(e){const t=this.Reveal.getScale();return{x:Math.round(e.offsetLeft*t*100)/100,y:Math.round(e.offsetTop*t*100)/100,width:Math.round(e.offsetWidth*t*100)/100,height:Math.round(e.offsetHeight*t*100)/100}}findAutoAnimateMatches(e,t,i,a,s,n){let r={},o={};[].slice.call(t.querySelectorAll(a)).forEach(((e,t)=>{const i=s(e);"string"==typeof i&&i.length&&(r[i]=r[i]||[],r[i].push(e))})),[].slice.call(i.querySelectorAll(a)).forEach(((t,i)=>{const a=s(t);let l;if(o[a]=o[a]||[],o[a].push(t),r[a]){const e=o[a].length-1,t=r[a].length-1;r[a][e]?(l=r[a][e],r[a][e]=null):r[a][t]&&(l=r[a][t],r[a][t]=null)}l&&e.push({from:l,to:t,options:n})}))}getUnmatchedAutoAnimateElements(e){return[].slice.call(e.children).reduce(((e,t)=>{const i=t.querySelector("[data-auto-animate-target]");return t.hasAttribute("data-auto-animate-target")||i||e.push(t),t.querySelector("[data-auto-animate-target]")&&(e=e.concat(this.getUnmatchedAutoAnimateElements(t))),e}),[])}}class L{constructor(e){this.Reveal=e}configure(e,t){!1===e.fragments?this.disable():!1===t.fragments&&this.enable()}disable(){t(this.Reveal.getSlidesElement(),".fragment").forEach((e=>{e.classList.add("visible"),e.classList.remove("current-fragment")}))}enable(){t(this.Reveal.getSlidesElement(),".fragment").forEach((e=>{e.classList.remove("visible"),e.classList.remove("current-fragment")}))}availableRoutes(){let e=this.Reveal.getCurrentSlide();if(e&&this.Reveal.getConfig().fragments){let t=e.querySelectorAll(".fragment:not(.disabled)"),i=e.querySelectorAll(".fragment:not(.disabled):not(.visible)");return{prev:t.length-i.length>0,next:!!i.length}}return{prev:!1,next:!1}}sort(e,t=!1){e=Array.from(e);let i=[],a=[],s=[];e.forEach((e=>{if(e.hasAttribute("data-fragment-index")){let t=parseInt(e.getAttribute("data-fragment-index"),10);i[t]||(i[t]=[]),i[t].push(e)}else a.push([e])})),i=i.concat(a);let n=0;return i.forEach((e=>{e.forEach((e=>{s.push(e),e.setAttribute("data-fragment-index",n)})),n++})),!0===t?i:s}sortAll(){this.Reveal.getHorizontalSlides().forEach((e=>{let i=t(e,"section");i.forEach(((e,t)=>{this.sort(e.querySelectorAll(".fragment"))}),this),0===i.length&&this.sort(e.querySelectorAll(".fragment"))}))}update(e,t){let i={shown:[],hidden:[]},a=this.Reveal.getCurrentSlide();if(a&&this.Reveal.getConfig().fragments&&(t=t||this.sort(a.querySelectorAll(".fragment"))).length){let s=0;if("number"!=typeof e){let t=this.sort(a.querySelectorAll(".fragment.visible")).pop();t&&(e=parseInt(t.getAttribute("data-fragment-index")||0,10))}Array.from(t).forEach(((t,a)=>{if(t.hasAttribute("data-fragment-index")&&(a=parseInt(t.getAttribute("data-fragment-index"),10)),s=Math.max(s,a),a<=e){let s=t.classList.contains("visible");t.classList.add("visible"),t.classList.remove("current-fragment"),a===e&&(this.Reveal.announceStatus(this.Reveal.getStatusText(t)),t.classList.add("current-fragment"),this.Reveal.slideContent.startEmbeddedContent(t)),s||(i.shown.push(t),this.Reveal.dispatchEvent({target:t,type:"visible",bubbles:!1}))}else{let e=t.classList.contains("visible");t.classList.remove("visible"),t.classList.remove("current-fragment"),e&&(this.Reveal.slideContent.stopEmbeddedContent(t),i.hidden.push(t),this.Reveal.dispatchEvent({target:t,type:"hidden",bubbles:!1}))}})),e="number"==typeof e?e:-1,e=Math.max(Math.min(e,s),-1),a.setAttribute("data-fragment",e)}return i}sync(e=this.Reveal.getCurrentSlide()){return this.sort(e.querySelectorAll(".fragment"))}goto(e,t=0){let i=this.Reveal.getCurrentSlide();if(i&&this.Reveal.getConfig().fragments){let a=this.sort(i.querySelectorAll(".fragment:not(.disabled)"));if(a.length){if("number"!=typeof e){let t=this.sort(i.querySelectorAll(".fragment:not(.disabled).visible")).pop();e=t?parseInt(t.getAttribute("data-fragment-index")||0,10):-1}e+=t;let s=this.update(e,a);return s.hidden.length&&this.Reveal.dispatchEvent({type:"fragmenthidden",data:{fragment:s.hidden[0],fragments:s.hidden}}),s.shown.length&&this.Reveal.dispatchEvent({type:"fragmentshown",data:{fragment:s.shown[0],fragments:s.shown}}),this.Reveal.controls.update(),this.Reveal.progress.update(),this.Reveal.getConfig().fragmentInURL&&this.Reveal.location.writeURL(),!(!s.shown.length&&!s.hidden.length)}}return!1}next(){return this.goto(null,1)}prev(){return this.goto(null,-1)}}class C{constructor(e){this.Reveal=e,this.active=!1,this.onSlideClicked=this.onSlideClicked.bind(this)}activate(){if(this.Reveal.getConfig().overview&&!this.isActive()){this.active=!0,this.Reveal.getRevealElement().classList.add("overview"),this.Reveal.cancelAutoSlide(),this.Reveal.getSlidesElement().appendChild(this.Reveal.getBackgroundsElement()),t(this.Reveal.getRevealElement(),".slides section").forEach((e=>{e.classList.contains("stack")||e.addEventListener("click",this.onSlideClicked,!0)}));const e=70,i=this.Reveal.getComputedSlideSize();this.overviewSlideWidth=i.width+e,this.overviewSlideHeight=i.height+e,this.Reveal.getConfig().rtl&&(this.overviewSlideWidth=-this.overviewSlideWidth),this.Reveal.updateSlidesVisibility(),this.layout(),this.update(),this.Reveal.layout();const a=this.Reveal.getIndices();this.Reveal.dispatchEvent({type:"overviewshown",data:{indexh:a.h,indexv:a.v,currentSlide:this.Reveal.getCurrentSlide()}})}}layout(){this.Reveal.getHorizontalSlides().forEach(((e,i)=>{e.setAttribute("data-index-h",i),s(e,"translate3d("+i*this.overviewSlideWidth+"px, 0, 0)"),e.classList.contains("stack")&&t(e,"section").forEach(((e,t)=>{e.setAttribute("data-index-h",i),e.setAttribute("data-index-v",t),s(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")}))})),Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach(((e,i)=>{s(e,"translate3d("+i*this.overviewSlideWidth+"px, 0, 0)"),t(e,".slide-background").forEach(((e,t)=>{s(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")}))}))}update(){const e=Math.min(window.innerWidth,window.innerHeight),t=Math.max(e/5,150)/e,i=this.Reveal.getIndices();this.Reveal.transformSlides({overview:["scale("+t+")","translateX("+-i.h*this.overviewSlideWidth+"px)","translateY("+-i.v*this.overviewSlideHeight+"px)"].join(" ")})}deactivate(){if(this.Reveal.getConfig().overview){this.active=!1,this.Reveal.getRevealElement().classList.remove("overview"),this.Reveal.getRevealElement().classList.add("overview-deactivating"),setTimeout((()=>{this.Reveal.getRevealElement().classList.remove("overview-deactivating")}),1),this.Reveal.getRevealElement().appendChild(this.Reveal.getBackgroundsElement()),t(this.Reveal.getRevealElement(),".slides section").forEach((e=>{s(e,""),e.removeEventListener("click",this.onSlideClicked,!0)})),t(this.Reveal.getBackgroundsElement(),".slide-background").forEach((e=>{s(e,"")})),this.Reveal.transformSlides({overview:""});const e=this.Reveal.getIndices();this.Reveal.slide(e.h,e.v),this.Reveal.layout(),this.Reveal.cueAutoSlide(),this.Reveal.dispatchEvent({type:"overviewhidden",data:{indexh:e.h,indexv:e.v,currentSlide:this.Reveal.getCurrentSlide()}})}}toggle(e){"boolean"==typeof e?e?this.activate():this.deactivate():this.isActive()?this.deactivate():this.activate()}isActive(){return this.active}onSlideClicked(e){if(this.isActive()){e.preventDefault();let t=e.target;for(;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains("disabled")&&(this.deactivate(),t.nodeName.match(/section/gi))){let e=parseInt(t.getAttribute("data-index-h"),10),i=parseInt(t.getAttribute("data-index-v"),10);this.Reveal.slide(e,i)}}}}class x{constructor(e){this.Reveal=e,this.shortcuts={},this.bindings={},this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onDocumentKeyPress=this.onDocumentKeyPress.bind(this)}configure(e,t){"linear"===e.navigationMode?(this.shortcuts["→ , ↓ , SPACE , N , L , J"]="Next slide",this.shortcuts["← , ↑ , P , H , K"]="Previous slide"):(this.shortcuts["N , SPACE"]="Next slide",this.shortcuts["P , Shift SPACE"]="Previous slide",this.shortcuts["← , H"]="Navigate left",this.shortcuts["→ , L"]="Navigate right",this.shortcuts["↑ , K"]="Navigate up",this.shortcuts["↓ , J"]="Navigate down"),this.shortcuts["Alt + ←/↑/→/↓"]="Navigate without fragments",this.shortcuts["Shift + ←/↑/→/↓"]="Jump to first/last slide",this.shortcuts["B , ."]="Pause",this.shortcuts.F="Fullscreen",this.shortcuts["ESC, O"]="Slide overview"}bind(){document.addEventListener("keydown",this.onDocumentKeyDown,!1),document.addEventListener("keypress",this.onDocumentKeyPress,!1)}unbind(){document.removeEventListener("keydown",this.onDocumentKeyDown,!1),document.removeEventListener("keypress",this.onDocumentKeyPress,!1)}addKeyBinding(e,t){"object"==typeof e&&e.keyCode?this.bindings[e.keyCode]={callback:t,key:e.key,description:e.description}:this.bindings[e]={callback:t,key:null,description:null}}removeKeyBinding(e){delete this.bindings[e]}triggerKey(e){this.onDocumentKeyDown({keyCode:e})}registerKeyboardShortcut(e,t){this.shortcuts[e]=t}getShortcuts(){return this.shortcuts}getBindings(){return this.bindings}onDocumentKeyPress(e){e.shiftKey&&63===e.charCode&&this.Reveal.toggleHelp()}onDocumentKeyDown(e){let t=this.Reveal.getConfig();if("function"==typeof t.keyboardCondition&&!1===t.keyboardCondition(e))return!0;if("focused"===t.keyboardCondition&&!this.Reveal.isFocused())return!0;let i=e.keyCode,a=!this.Reveal.isAutoSliding();this.Reveal.onUserInput(e);let s=document.activeElement&&!0===document.activeElement.isContentEditable,n=document.activeElement&&document.activeElement.tagName&&/input|textarea/i.test(document.activeElement.tagName),r=document.activeElement&&document.activeElement.className&&/speaker-notes/i.test(document.activeElement.className),o=!(-1!==[32,37,38,39,40,78,80].indexOf(e.keyCode)&&e.shiftKey||e.altKey)&&(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey);if(s||n||r||o)return;let l,d=[66,86,190,191];if("object"==typeof t.keyboard)for(l in t.keyboard)"togglePause"===t.keyboard[l]&&d.push(parseInt(l,10));if(this.Reveal.isPaused()&&-1===d.indexOf(i))return!1;let c="linear"===t.navigationMode||!this.Reveal.hasHorizontalSlides()||!this.Reveal.hasVerticalSlides(),h=!1;if("object"==typeof t.keyboard)for(l in t.keyboard)if(parseInt(l,10)===i){let i=t.keyboard[l];"function"==typeof i?i.apply(null,[e]):"string"==typeof i&&"function"==typeof this.Reveal[i]&&this.Reveal[i].call(),h=!0}if(!1===h)for(l in this.bindings)if(parseInt(l,10)===i){let t=this.bindings[l].callback;"function"==typeof t?t.apply(null,[e]):"string"==typeof t&&"function"==typeof this.Reveal[t]&&this.Reveal[t].call(),h=!0}!1===h&&(h=!0,80===i||33===i?this.Reveal.prev({skipFragments:e.altKey}):78===i||34===i?this.Reveal.next({skipFragments:e.altKey}):72===i||37===i?e.shiftKey?this.Reveal.slide(0):!this.Reveal.overview.isActive()&&c?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.left({skipFragments:e.altKey}):76===i||39===i?e.shiftKey?this.Reveal.slide(this.Reveal.getHorizontalSlides().length-1):!this.Reveal.overview.isActive()&&c?this.Reveal.next({skipFragments:e.altKey}):this.Reveal.right({skipFragments:e.altKey}):75===i||38===i?e.shiftKey?this.Reveal.slide(void 0,0):!this.Reveal.overview.isActive()&&c?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.up({skipFragments:e.altKey}):74===i||40===i?e.shiftKey?this.Reveal.slide(void 0,Number.MAX_VALUE):!this.Reveal.overview.isActive()&&c?this.Reveal.next({skipFragments:e.altKey}):this.Reveal.down({skipFragments:e.altKey}):36===i?this.Reveal.slide(0):35===i?this.Reveal.slide(this.Reveal.getHorizontalSlides().length-1):32===i?(this.Reveal.overview.isActive()&&this.Reveal.overview.deactivate(),e.shiftKey?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.next({skipFragments:e.altKey})):58===i||59===i||66===i||86===i||190===i||191===i?this.Reveal.togglePause():70===i?(e=>{let t=(e=e||document.documentElement).requestFullscreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullscreen;t&&t.apply(e)})(t.embedded?this.Reveal.getViewportElement():document.documentElement):65===i?t.autoSlideStoppable&&this.Reveal.toggleAutoSlide(a):h=!1),h?e.preventDefault&&e.preventDefault():27!==i&&79!==i||(!1===this.Reveal.closeOverlay()&&this.Reveal.overview.toggle(),e.preventDefault&&e.preventDefault()),this.Reveal.cueAutoSlide()}}class P{constructor(e){var t,i,a;a=1e3,(i="MAX_REPLACE_STATE_FREQUENCY")in(t=this)?Object.defineProperty(t,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[i]=a,this.Reveal=e,this.writeURLTimeout=0,this.replaceStateTimestamp=0,this.onWindowHashChange=this.onWindowHashChange.bind(this)}bind(){window.addEventListener("hashchange",this.onWindowHashChange,!1)}unbind(){window.removeEventListener("hashchange",this.onWindowHashChange,!1)}getIndicesFromHash(e=window.location.hash){let t=e.replace(/^#\/?/,""),i=t.split("/");if(/^[0-9]*$/.test(i[0])||!t.length){const e=this.Reveal.getConfig();let t,a=e.hashOneBasedIndex?1:0,s=parseInt(i[0],10)-a||0,n=parseInt(i[1],10)-a||0;return e.fragmentInURL&&(t=parseInt(i[2],10),isNaN(t)&&(t=void 0)),{h:s,v:n,f:t}}{let e,i;/\/[-\d]+$/g.test(t)&&(i=parseInt(t.split("/").pop(),10),i=isNaN(i)?void 0:i,t=t.split("/").shift());try{e=document.getElementById(decodeURIComponent(t))}catch(e){}if(e)return{...this.Reveal.getIndices(e),f:i}}return null}readURL(){const e=this.Reveal.getIndices(),t=this.getIndicesFromHash();t?t.h===e.h&&t.v===e.v&&void 0===t.f||this.Reveal.slide(t.h,t.v,t.f):this.Reveal.slide(e.h||0,e.v||0)}writeURL(e){let t=this.Reveal.getConfig(),i=this.Reveal.getCurrentSlide();if(clearTimeout(this.writeURLTimeout),"number"==typeof e)this.writeURLTimeout=setTimeout(this.writeURL,e);else if(i){let e=this.getHash();t.history?window.location.hash=e:t.hash&&("/"===e?this.debouncedReplaceState(window.location.pathname+window.location.search):this.debouncedReplaceState("#"+e))}}replaceState(e){window.history.replaceState(null,null,e),this.replaceStateTimestamp=Date.now()}debouncedReplaceState(e){clearTimeout(this.replaceStateTimeout),Date.now()-this.replaceStateTimestamp>this.MAX_REPLACE_STATE_FREQUENCY?this.replaceState(e):this.replaceStateTimeout=setTimeout((()=>this.replaceState(e)),this.MAX_REPLACE_STATE_FREQUENCY)}getHash(e){let t="/",i=e||this.Reveal.getCurrentSlide(),a=i?i.getAttribute("id"):null;a&&(a=encodeURIComponent(a));let s=this.Reveal.getIndices(e);if(this.Reveal.getConfig().fragmentInURL||(s.f=void 0),"string"==typeof a&&a.length)t="/"+a,s.f>=0&&(t+="/"+s.f);else{let e=this.Reveal.getConfig().hashOneBasedIndex?1:0;(s.h>0||s.v>0||s.f>=0)&&(t+=s.h+e),(s.v>0||s.f>=0)&&(t+="/"+(s.v+e)),s.f>=0&&(t+="/"+s.f)}return t}onWindowHashChange(e){this.readURL()}}class N{constructor(e){this.Reveal=e,this.onNavigateLeftClicked=this.onNavigateLeftClicked.bind(this),this.onNavigateRightClicked=this.onNavigateRightClicked.bind(this),this.onNavigateUpClicked=this.onNavigateUpClicked.bind(this),this.onNavigateDownClicked=this.onNavigateDownClicked.bind(this),this.onNavigatePrevClicked=this.onNavigatePrevClicked.bind(this),this.onNavigateNextClicked=this.onNavigateNextClicked.bind(this)}render(){const e=this.Reveal.getConfig().rtl,i=this.Reveal.getRevealElement();this.element=document.createElement("aside"),this.element.className="controls",this.element.innerHTML=`\n\t\t\t\n\t\t\t\n\t\t\t`,this.Reveal.getRevealElement().appendChild(this.element),this.controlsLeft=t(i,".navigate-left"),this.controlsRight=t(i,".navigate-right"),this.controlsUp=t(i,".navigate-up"),this.controlsDown=t(i,".navigate-down"),this.controlsPrev=t(i,".navigate-prev"),this.controlsNext=t(i,".navigate-next"),this.controlsRightArrow=this.element.querySelector(".navigate-right"),this.controlsLeftArrow=this.element.querySelector(".navigate-left"),this.controlsDownArrow=this.element.querySelector(".navigate-down")}configure(e,t){this.element.style.display=e.controls?"block":"none",this.element.setAttribute("data-controls-layout",e.controlsLayout),this.element.setAttribute("data-controls-back-arrows",e.controlsBackArrows)}bind(){let e=["touchstart","click"];v&&(e=["touchstart"]),e.forEach((e=>{this.controlsLeft.forEach((t=>t.addEventListener(e,this.onNavigateLeftClicked,!1))),this.controlsRight.forEach((t=>t.addEventListener(e,this.onNavigateRightClicked,!1))),this.controlsUp.forEach((t=>t.addEventListener(e,this.onNavigateUpClicked,!1))),this.controlsDown.forEach((t=>t.addEventListener(e,this.onNavigateDownClicked,!1))),this.controlsPrev.forEach((t=>t.addEventListener(e,this.onNavigatePrevClicked,!1))),this.controlsNext.forEach((t=>t.addEventListener(e,this.onNavigateNextClicked,!1)))}))}unbind(){["touchstart","click"].forEach((e=>{this.controlsLeft.forEach((t=>t.removeEventListener(e,this.onNavigateLeftClicked,!1))),this.controlsRight.forEach((t=>t.removeEventListener(e,this.onNavigateRightClicked,!1))),this.controlsUp.forEach((t=>t.removeEventListener(e,this.onNavigateUpClicked,!1))),this.controlsDown.forEach((t=>t.removeEventListener(e,this.onNavigateDownClicked,!1))),this.controlsPrev.forEach((t=>t.removeEventListener(e,this.onNavigatePrevClicked,!1))),this.controlsNext.forEach((t=>t.removeEventListener(e,this.onNavigateNextClicked,!1)))}))}update(){let e=this.Reveal.availableRoutes();[...this.controlsLeft,...this.controlsRight,...this.controlsUp,...this.controlsDown,...this.controlsPrev,...this.controlsNext].forEach((e=>{e.classList.remove("enabled","fragmented"),e.setAttribute("disabled","disabled")})),e.left&&this.controlsLeft.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.right&&this.controlsRight.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.up&&this.controlsUp.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),e.down&&this.controlsDown.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),(e.left||e.up)&&this.controlsPrev.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")})),(e.right||e.down)&&this.controlsNext.forEach((e=>{e.classList.add("enabled"),e.removeAttribute("disabled")}));let t=this.Reveal.getCurrentSlide();if(t){let e=this.Reveal.fragments.availableRoutes();e.prev&&this.controlsPrev.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsNext.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),this.Reveal.isVerticalSlide(t)?(e.prev&&this.controlsUp.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsDown.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}))):(e.prev&&this.controlsLeft.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})),e.next&&this.controlsRight.forEach((e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})))}if(this.Reveal.getConfig().controlsTutorial){let t=this.Reveal.getIndices();!this.Reveal.hasNavigatedVertically()&&e.down?this.controlsDownArrow.classList.add("highlight"):(this.controlsDownArrow.classList.remove("highlight"),this.Reveal.getConfig().rtl?!this.Reveal.hasNavigatedHorizontally()&&e.left&&0===t.v?this.controlsLeftArrow.classList.add("highlight"):this.controlsLeftArrow.classList.remove("highlight"):!this.Reveal.hasNavigatedHorizontally()&&e.right&&0===t.v?this.controlsRightArrow.classList.add("highlight"):this.controlsRightArrow.classList.remove("highlight"))}}destroy(){this.unbind(),this.element.remove()}onNavigateLeftClicked(e){e.preventDefault(),this.Reveal.onUserInput(),"linear"===this.Reveal.getConfig().navigationMode?this.Reveal.prev():this.Reveal.left()}onNavigateRightClicked(e){e.preventDefault(),this.Reveal.onUserInput(),"linear"===this.Reveal.getConfig().navigationMode?this.Reveal.next():this.Reveal.right()}onNavigateUpClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.up()}onNavigateDownClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.down()}onNavigatePrevClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.prev()}onNavigateNextClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.next()}}class M{constructor(e){this.Reveal=e,this.onProgressClicked=this.onProgressClicked.bind(this)}render(){this.element=document.createElement("div"),this.element.className="progress",this.Reveal.getRevealElement().appendChild(this.element),this.bar=document.createElement("span"),this.element.appendChild(this.bar)}configure(e,t){this.element.style.display=e.progress?"block":"none"}bind(){this.Reveal.getConfig().progress&&this.element&&this.element.addEventListener("click",this.onProgressClicked,!1)}unbind(){this.Reveal.getConfig().progress&&this.element&&this.element.removeEventListener("click",this.onProgressClicked,!1)}update(){if(this.Reveal.getConfig().progress&&this.bar){let e=this.Reveal.getProgress();this.Reveal.getTotalSlides()<2&&(e=0),this.bar.style.transform="scaleX("+e+")"}}getMaxWidth(){return this.Reveal.getRevealElement().offsetWidth}onProgressClicked(e){this.Reveal.onUserInput(e),e.preventDefault();let t=this.Reveal.getSlides(),i=t.length,a=Math.floor(e.clientX/this.getMaxWidth()*i);this.Reveal.getConfig().rtl&&(a=i-a);let s=this.Reveal.getIndices(t[a]);this.Reveal.slide(s.h,s.v)}destroy(){this.element.remove()}}class D{constructor(e){this.Reveal=e,this.lastMouseWheelStep=0,this.cursorHidden=!1,this.cursorInactiveTimeout=0,this.onDocumentCursorActive=this.onDocumentCursorActive.bind(this),this.onDocumentMouseScroll=this.onDocumentMouseScroll.bind(this)}configure(e,t){e.mouseWheel?(document.addEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.addEventListener("mousewheel",this.onDocumentMouseScroll,!1)):(document.removeEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.removeEventListener("mousewheel",this.onDocumentMouseScroll,!1)),e.hideInactiveCursor?(document.addEventListener("mousemove",this.onDocumentCursorActive,!1),document.addEventListener("mousedown",this.onDocumentCursorActive,!1)):(this.showCursor(),document.removeEventListener("mousemove",this.onDocumentCursorActive,!1),document.removeEventListener("mousedown",this.onDocumentCursorActive,!1))}showCursor(){this.cursorHidden&&(this.cursorHidden=!1,this.Reveal.getRevealElement().style.cursor="")}hideCursor(){!1===this.cursorHidden&&(this.cursorHidden=!0,this.Reveal.getRevealElement().style.cursor="none")}destroy(){this.showCursor(),document.removeEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.removeEventListener("mousewheel",this.onDocumentMouseScroll,!1),document.removeEventListener("mousemove",this.onDocumentCursorActive,!1),document.removeEventListener("mousedown",this.onDocumentCursorActive,!1)}onDocumentCursorActive(e){this.showCursor(),clearTimeout(this.cursorInactiveTimeout),this.cursorInactiveTimeout=setTimeout(this.hideCursor.bind(this),this.Reveal.getConfig().hideCursorTime)}onDocumentMouseScroll(e){if(Date.now()-this.lastMouseWheelStep>1e3){this.lastMouseWheelStep=Date.now();let t=e.detail||-e.wheelDelta;t>0?this.Reveal.next():t<0&&this.Reveal.prev()}}}const I=(e,t)=>{const i=document.createElement("script");i.type="text/javascript",i.async=!1,i.defer=!1,i.src=e,"function"==typeof t&&(i.onload=i.onreadystatechange=e=>{("load"===e.type||/loaded|complete/.test(i.readyState))&&(i.onload=i.onreadystatechange=i.onerror=null,t())},i.onerror=e=>{i.onload=i.onreadystatechange=i.onerror=null,t(new Error("Failed loading script: "+i.src+"\n"+e))});const a=document.querySelector("head");a.insertBefore(i,a.lastChild)};class T{constructor(e){this.Reveal=e,this.state="idle",this.registeredPlugins={},this.asyncDependencies=[]}load(e,t){return this.state="loading",e.forEach(this.registerPlugin.bind(this)),new Promise((e=>{let i=[],a=0;if(t.forEach((e=>{e.condition&&!e.condition()||(e.async?this.asyncDependencies.push(e):i.push(e))})),i.length){a=i.length;const t=t=>{t&&"function"==typeof t.callback&&t.callback(),0==--a&&this.initPlugins().then(e)};i.forEach((e=>{"string"==typeof e.id?(this.registerPlugin(e),t(e)):"string"==typeof e.src?I(e.src,(()=>t(e))):(console.warn("Unrecognized plugin format",e),t())}))}else this.initPlugins().then(e)}))}initPlugins(){return new Promise((e=>{let t=Object.values(this.registeredPlugins),i=t.length;if(0===i)this.loadAsync().then(e);else{let a,s=()=>{0==--i?this.loadAsync().then(e):a()},n=0;a=()=>{let e=t[n++];if("function"==typeof e.init){let t=e.init(this.Reveal);t&&"function"==typeof t.then?t.then(s):s()}else s()},a()}}))}loadAsync(){return this.state="loaded",this.asyncDependencies.length&&this.asyncDependencies.forEach((e=>{I(e.src,e.callback)})),Promise.resolve()}registerPlugin(e){2===arguments.length&&"string"==typeof arguments[0]?(e=arguments[1]).id=arguments[0]:"function"==typeof e&&(e=e());let t=e.id;"string"!=typeof t?console.warn("Unrecognized plugin format; can't find plugin.id",e):void 0===this.registeredPlugins[t]?(this.registeredPlugins[t]=e,"loaded"===this.state&&"function"==typeof e.init&&e.init(this.Reveal)):console.warn('reveal.js: "'+t+'" plugin has already been registered')}hasPlugin(e){return!!this.registeredPlugins[e]}getPlugin(e){return this.registeredPlugins[e]}getRegisteredPlugins(){return this.registeredPlugins}destroy(){Object.values(this.registeredPlugins).forEach((e=>{"function"==typeof e.destroy&&e.destroy()})),this.registeredPlugins={},this.asyncDependencies=[]}}class F{constructor(e){this.Reveal=e}async setupPDF(){const e=this.Reveal.getConfig(),i=t(this.Reveal.getRevealElement(),".slides section"),a=e.slideNumber&&/all|print/i.test(e.showSlideNumber),s=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),n=Math.floor(s.width*(1+e.margin)),r=Math.floor(s.height*(1+e.margin)),o=s.width,d=s.height;await new Promise(requestAnimationFrame),l("@page{size:"+n+"px "+r+"px; margin: 0px;}"),l(".reveal section>img, .reveal section>video, .reveal section>iframe{max-width: "+o+"px; max-height:"+d+"px}"),document.documentElement.classList.add("print-pdf"),document.body.style.width=n+"px",document.body.style.height=r+"px";const c=document.querySelector(".reveal-viewport");let h;if(c){const e=window.getComputedStyle(c);e&&e.background&&(h=e.background)}await new Promise(requestAnimationFrame),this.Reveal.layoutSlideContents(o,d),await new Promise(requestAnimationFrame);const u=i.map((e=>e.scrollHeight)),g=[],v=i[0].parentNode;let p=1;i.forEach((function(i,s){if(!1===i.classList.contains("stack")){let l=(n-o)/2,c=(r-d)/2;const v=u[s];let m=Math.max(Math.ceil(v/r),1);m=Math.min(m,e.pdfMaxPagesPerSlide),(1===m&&e.center||i.classList.contains("center"))&&(c=Math.max((r-v)/2,0));const f=document.createElement("div");if(g.push(f),f.className="pdf-page",f.style.height=(r+e.pdfPageHeightOffset)*m+"px",h&&(f.style.background=h),f.appendChild(i),i.style.left=l+"px",i.style.top=c+"px",i.style.width=o+"px",this.Reveal.slideContent.layout(i),i.slideBackgroundElement&&f.insertBefore(i.slideBackgroundElement,i),e.showNotes){const t=this.Reveal.getSlideNotes(i);if(t){const i=8,a="string"==typeof e.showNotes?e.showNotes:"inline",s=document.createElement("div");s.classList.add("speaker-notes"),s.classList.add("speaker-notes-pdf"),s.setAttribute("data-layout",a),s.innerHTML=t,"separate-page"===a?g.push(s):(s.style.left=i+"px",s.style.bottom=i+"px",s.style.width=n-2*i+"px",f.appendChild(s))}}if(a){const e=document.createElement("div");e.classList.add("slide-number"),e.classList.add("slide-number-pdf"),e.innerHTML=p++,f.appendChild(e)}if(e.pdfSeparateFragments){const e=this.Reveal.fragments.sort(f.querySelectorAll(".fragment"),!0);let t;e.forEach((function(e,i){t&&t.forEach((function(e){e.classList.remove("current-fragment")})),e.forEach((function(e){e.classList.add("visible","current-fragment")}),this);const s=f.cloneNode(!0);if(a){const e=i+1;s.querySelector(".slide-number-pdf").innerHTML+="."+e}g.push(s),t=e}),this),e.forEach((function(e){e.forEach((function(e){e.classList.remove("visible","current-fragment")}))}))}else t(f,".fragment:not(.fade-out)").forEach((function(e){e.classList.add("visible")}))}}),this),await new Promise(requestAnimationFrame),g.forEach((e=>v.appendChild(e))),this.Reveal.dispatchEvent({type:"pdf-ready"})}isPrintingPDF(){return/print-pdf/gi.test(window.location.search)}}class z{constructor(e){this.Reveal=e,this.touchStartX=0,this.touchStartY=0,this.touchStartCount=0,this.touchCaptured=!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this)}bind(){let e=this.Reveal.getRevealElement();"onpointerdown"in window?(e.addEventListener("pointerdown",this.onPointerDown,!1),e.addEventListener("pointermove",this.onPointerMove,!1),e.addEventListener("pointerup",this.onPointerUp,!1)):window.navigator.msPointerEnabled?(e.addEventListener("MSPointerDown",this.onPointerDown,!1),e.addEventListener("MSPointerMove",this.onPointerMove,!1),e.addEventListener("MSPointerUp",this.onPointerUp,!1)):(e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1))}unbind(){let e=this.Reveal.getRevealElement();e.removeEventListener("pointerdown",this.onPointerDown,!1),e.removeEventListener("pointermove",this.onPointerMove,!1),e.removeEventListener("pointerup",this.onPointerUp,!1),e.removeEventListener("MSPointerDown",this.onPointerDown,!1),e.removeEventListener("MSPointerMove",this.onPointerMove,!1),e.removeEventListener("MSPointerUp",this.onPointerUp,!1),e.removeEventListener("touchstart",this.onTouchStart,!1),e.removeEventListener("touchmove",this.onTouchMove,!1),e.removeEventListener("touchend",this.onTouchEnd,!1)}isSwipePrevented(e){if(n(e,"video, audio"))return!0;for(;e&&"function"==typeof e.hasAttribute;){if(e.hasAttribute("data-prevent-swipe"))return!0;e=e.parentNode}return!1}onTouchStart(e){if(this.isSwipePrevented(e.target))return!0;this.touchStartX=e.touches[0].clientX,this.touchStartY=e.touches[0].clientY,this.touchStartCount=e.touches.length}onTouchMove(e){if(this.isSwipePrevented(e.target))return!0;let t=this.Reveal.getConfig();if(this.touchCaptured)v&&e.preventDefault();else{this.Reveal.onUserInput(e);let i=e.touches[0].clientX,a=e.touches[0].clientY;if(1===e.touches.length&&2!==this.touchStartCount){let s=this.Reveal.availableRoutes({includeFragments:!0}),n=i-this.touchStartX,r=a-this.touchStartY;n>40&&Math.abs(n)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.next():this.Reveal.prev():this.Reveal.left()):n<-40&&Math.abs(n)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.prev():this.Reveal.next():this.Reveal.right()):r>40&&s.up?(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.prev():this.Reveal.up()):r<-40&&s.down&&(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.next():this.Reveal.down()),t.embedded?(this.touchCaptured||this.Reveal.isVerticalSlide())&&e.preventDefault():e.preventDefault()}}}onTouchEnd(e){this.touchCaptured=!1}onPointerDown(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchStart(e))}onPointerMove(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchMove(e))}onPointerUp(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchEnd(e))}}class H{constructor(e){this.Reveal=e,this.onRevealPointerDown=this.onRevealPointerDown.bind(this),this.onDocumentPointerDown=this.onDocumentPointerDown.bind(this)}configure(e,t){e.embedded?this.blur():(this.focus(),this.unbind())}bind(){this.Reveal.getConfig().embedded&&this.Reveal.getRevealElement().addEventListener("pointerdown",this.onRevealPointerDown,!1)}unbind(){this.Reveal.getRevealElement().removeEventListener("pointerdown",this.onRevealPointerDown,!1),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)}focus(){"focus"!==this.state&&(this.Reveal.getRevealElement().classList.add("focused"),document.addEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state="focus"}blur(){"blur"!==this.state&&(this.Reveal.getRevealElement().classList.remove("focused"),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state="blur"}isFocused(){return"focus"===this.state}destroy(){this.Reveal.getRevealElement().classList.remove("focused")}onRevealPointerDown(e){this.focus()}onDocumentPointerDown(e){let t=r(e.target,".reveal");t&&t===this.Reveal.getRevealElement()||this.blur()}}class q{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="speaker-notes",this.element.setAttribute("data-prevent-swipe",""),this.element.setAttribute("tabindex","0"),this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){e.showNotes&&this.element.setAttribute("data-layout","string"==typeof e.showNotes?e.showNotes:"inline")}update(){this.Reveal.getConfig().showNotes&&this.element&&this.Reveal.getCurrentSlide()&&!this.Reveal.print.isPrintingPDF()&&(this.element.innerHTML=this.getSlideNotes()||'No notes on this slide.')}updateVisibility(){this.Reveal.getConfig().showNotes&&this.hasNotes()&&!this.Reveal.print.isPrintingPDF()?this.Reveal.getRevealElement().classList.add("show-notes"):this.Reveal.getRevealElement().classList.remove("show-notes")}hasNotes(){return this.Reveal.getSlidesElement().querySelectorAll("[data-notes], aside.notes").length>0}isSpeakerNotesWindow(){return!!window.location.search.match(/receiver/gi)}getSlideNotes(e=this.Reveal.getCurrentSlide()){if(e.hasAttribute("data-notes"))return e.getAttribute("data-notes");let t=e.querySelector("aside.notes");return t?t.innerHTML:null}destroy(){this.element.remove()}}class B{constructor(e,t){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=e,this.progressCheck=t,this.canvas=document.createElement("canvas"),this.canvas.className="playback",this.canvas.width=this.diameter,this.canvas.height=this.diameter,this.canvas.style.width=this.diameter2+"px",this.canvas.style.height=this.diameter2+"px",this.context=this.canvas.getContext("2d"),this.container.appendChild(this.canvas),this.render()}setPlaying(e){const t=this.playing;this.playing=e,!t&&this.playing?this.animate():this.render()}animate(){const e=this.progress;this.progress=this.progressCheck(),e>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&requestAnimationFrame(this.animate.bind(this))}render(){let e=this.playing?this.progress:0,t=this.diameter2-this.thickness,i=this.diameter2,a=this.diameter2,s=28;this.progressOffset+=.1*(1-this.progressOffset);const n=-Math.PI/2+e*(2*Math.PI),r=-Math.PI/2+this.progressOffset*(2*Math.PI);this.context.save(),this.context.clearRect(0,0,this.diameter,this.diameter),this.context.beginPath(),this.context.arc(i,a,t+4,0,2*Math.PI,!1),this.context.fillStyle="rgba( 0, 0, 0, 0.4 )",this.context.fill(),this.context.beginPath(),this.context.arc(i,a,t,0,2*Math.PI,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="rgba( 255, 255, 255, 0.2 )",this.context.stroke(),this.playing&&(this.context.beginPath(),this.context.arc(i,a,t,r,n,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(i-14,a-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,s),this.context.fillRect(18,0,10,s)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,s),this.context.fillStyle="#fff",this.context.fill()),this.context.restore()}on(e,t){this.canvas.addEventListener(e,t,!1)}off(e,t){this.canvas.removeEventListener(e,t,!1)}destroy(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)}}var O={width:960,height:700,margin:.04,minScale:.2,maxScale:2,controls:!0,controlsTutorial:!0,controlsLayout:"bottom-right",controlsBackArrows:"faded",progress:!0,slideNumber:!1,showSlideNumber:"all",hashOneBasedIndex:!1,hash:!1,respondToHashChanges:!0,history:!1,keyboard:!0,keyboardCondition:null,disableLayout:!1,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,navigationMode:"default",shuffle:!1,fragments:!0,fragmentInURL:!0,embedded:!1,help:!0,pause:!0,showNotes:!1,showHiddenSlides:!1,autoPlayMedia:null,preloadIframes:null,autoAnimate:!0,autoAnimateMatcher:null,autoAnimateEasing:"ease",autoAnimateDuration:1,autoAnimateUnmatched:!0,autoAnimateStyles:["opacity","color","background-color","padding","font-size","line-height","letter-spacing","border-width","border-color","border-radius","outline","outline-offset"],autoSlide:0,autoSlideStoppable:!0,autoSlideMethod:null,defaultTiming:null,mouseWheel:!1,previewLinks:!1,postMessage:!0,postMessageEvents:!1,focusBodyOnPageVisibilityChange:!0,transition:"slide",transitionSpeed:"default",backgroundTransition:"fade",parallaxBackgroundImage:"",parallaxBackgroundSize:"",parallaxBackgroundRepeat:"",parallaxBackgroundPosition:"",parallaxBackgroundHorizontal:null,parallaxBackgroundVertical:null,pdfMaxPagesPerSlide:Number.POSITIVE_INFINITY,pdfSeparateFragments:!0,pdfPageHeightOffset:-1,viewDistance:3,mobileViewDistance:2,display:"block",hideInactiveCursor:!0,hideCursorTime:5e3,dependencies:[],plugins:[]};function U(n,l){arguments.length<2&&(l=arguments[0],n=document.querySelector(".reveal"));const h={};let u,v,p,m,f,w={},S=!1,A={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},I=[],U=1,W={layout:"",overview:""},K={},V="idle",$=0,j=0,X=-1,Y=!1,_=new b(h),G=new y(h),J=new k(h),Q=new E(h),Z=new L(h),ee=new C(h),te=new x(h),ie=new P(h),ae=new N(h),se=new M(h),ne=new D(h),re=new T(h),oe=new F(h),le=new H(h),de=new z(h),ce=new q(h);function he(e){if(!n)throw'Unable to find presentation root (

).';if(K.wrapper=n,K.slides=n.querySelector(".slides"),!K.slides)throw'Unable to find slides container (
).';return w={...O,...w,...l,...e,...d()},ue(),window.addEventListener("load",He,!1),re.load(w.plugins,w.dependencies).then(ge),new Promise((e=>h.on("ready",e)))}function ue(){!0===w.embedded?K.viewport=r(n,".reveal-viewport")||n:(K.viewport=document.body,document.documentElement.classList.add("reveal-full-page")),K.viewport.classList.add("reveal-viewport")}function ge(){S=!0,ve(),pe(),Ee(),ye(),we(),tt(),Re(),ie.readURL(),Q.update(!0),setTimeout((()=>{K.slides.classList.remove("no-transition"),K.wrapper.classList.add("ready"),Pe({type:"ready",data:{indexh:u,indexv:v,currentSlide:m}})}),1),oe.isPrintingPDF()&&(Ae(),"complete"===document.readyState?oe.setupPDF():window.addEventListener("load",(()=>{oe.setupPDF()})))}function ve(){w.showHiddenSlides||t(K.wrapper,'section[data-visibility="hidden"]').forEach((e=>{e.parentNode.removeChild(e)}))}function pe(){K.slides.classList.add("no-transition"),g?K.wrapper.classList.add("no-hover"):K.wrapper.classList.remove("no-hover"),Q.render(),G.render(),ae.render(),se.render(),ce.render(),K.pauseOverlay=o(K.wrapper,"div","pause-overlay",w.controls?'':null),K.statusElement=me(),K.wrapper.setAttribute("role","application")}function me(){let e=K.wrapper.querySelector(".aria-status");return e||(e=document.createElement("div"),e.style.position="absolute",e.style.height="1px",e.style.width="1px",e.style.overflow="hidden",e.style.clip="rect( 1px, 1px, 1px, 1px )",e.classList.add("aria-status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),K.wrapper.appendChild(e)),e}function fe(e){K.statusElement.textContent=e}function be(e){let t="";if(3===e.nodeType)t+=e.textContent;else if(1===e.nodeType){let i=e.getAttribute("aria-hidden"),a="none"===window.getComputedStyle(e).display;"true"===i||a||Array.from(e.childNodes).forEach((e=>{t+=be(e)}))}return t=t.trim(),""===t?"":t+" "}function ye(){setInterval((()=>{0===K.wrapper.scrollTop&&0===K.wrapper.scrollLeft||(K.wrapper.scrollTop=0,K.wrapper.scrollLeft=0)}),1e3)}function we(){document.addEventListener("fullscreenchange",Bt),document.addEventListener("webkitfullscreenchange",Bt)}function Ee(){w.postMessage&&window.addEventListener("message",Tt,!1)}function Re(t){const a={...w};if("object"==typeof t&&e(w,t),!1===h.isReady())return;const s=K.wrapper.querySelectorAll(".slides section").length;K.wrapper.classList.remove(a.transition),K.wrapper.classList.add(w.transition),K.wrapper.setAttribute("data-transition-speed",w.transitionSpeed),K.wrapper.setAttribute("data-background-transition",w.backgroundTransition),K.viewport.style.setProperty("--slide-width",w.width+"px"),K.viewport.style.setProperty("--slide-height",w.height+"px"),w.shuffle&&it(),i(K.wrapper,"embedded",w.embedded),i(K.wrapper,"rtl",w.rtl),i(K.wrapper,"center",w.center),!1===w.pause&&Xe(),w.previewLinks?(Me(),De("[data-preview-link=false]")):(De(),Me("[data-preview-link]:not([data-preview-link=false])")),J.reset(),f&&(f.destroy(),f=null),s>1&&w.autoSlide&&w.autoSlideStoppable&&(f=new B(K.wrapper,(()=>Math.min(Math.max((Date.now()-X)/$,0),1))),f.on("click",Ut),Y=!1),"default"!==w.navigationMode?K.wrapper.setAttribute("data-navigation-mode",w.navigationMode):K.wrapper.removeAttribute("data-navigation-mode"),ce.configure(w,a),le.configure(w,a),ne.configure(w,a),ae.configure(w,a),se.configure(w,a),te.configure(w,a),Z.configure(w,a),G.configure(w,a),Ze()}function Se(){window.addEventListener("resize",Ht,!1),w.touch&&de.bind(),w.keyboard&&te.bind(),w.progress&&se.bind(),w.respondToHashChanges&&ie.bind(),ae.bind(),le.bind(),K.slides.addEventListener("click",zt,!1),K.slides.addEventListener("transitionend",Ft,!1),K.pauseOverlay.addEventListener("click",Xe,!1),w.focusBodyOnPageVisibilityChange&&document.addEventListener("visibilitychange",qt,!1)}function Ae(){de.unbind(),le.unbind(),te.unbind(),ae.unbind(),se.unbind(),ie.unbind(),window.removeEventListener("resize",Ht,!1),K.slides.removeEventListener("click",zt,!1),K.slides.removeEventListener("transitionend",Ft,!1),K.pauseOverlay.removeEventListener("click",Xe,!1)}function ke(){Ae(),At(),De(),ce.destroy(),le.destroy(),re.destroy(),ne.destroy(),ae.destroy(),se.destroy(),Q.destroy(),G.destroy(),document.removeEventListener("fullscreenchange",Bt),document.removeEventListener("webkitfullscreenchange",Bt),document.removeEventListener("visibilitychange",qt,!1),window.removeEventListener("message",Tt,!1),window.removeEventListener("load",He,!1),K.pauseOverlay&&K.pauseOverlay.remove(),K.statusElement&&K.statusElement.remove(),document.documentElement.classList.remove("reveal-full-page"),K.wrapper.classList.remove("ready","center","has-horizontal-slides","has-vertical-slides"),K.wrapper.removeAttribute("data-transition-speed"),K.wrapper.removeAttribute("data-background-transition"),K.viewport.classList.remove("reveal-viewport"),K.viewport.style.removeProperty("--slide-width"),K.viewport.style.removeProperty("--slide-height"),K.slides.style.removeProperty("width"),K.slides.style.removeProperty("height"),K.slides.style.removeProperty("zoom"),K.slides.style.removeProperty("left"),K.slides.style.removeProperty("top"),K.slides.style.removeProperty("bottom"),K.slides.style.removeProperty("right"),K.slides.style.removeProperty("transform"),Array.from(K.wrapper.querySelectorAll(".slides section")).forEach((e=>{e.style.removeProperty("display"),e.style.removeProperty("top"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden")}))}function Le(e,t,i){n.addEventListener(e,t,i)}function Ce(e,t,i){n.removeEventListener(e,t,i)}function xe(e){"string"==typeof e.layout&&(W.layout=e.layout),"string"==typeof e.overview&&(W.overview=e.overview),W.layout?s(K.slides,W.layout+" "+W.overview):s(K.slides,W.overview)}function Pe({target:t=K.wrapper,type:i,data:a,bubbles:s=!0}){let n=document.createEvent("HTMLEvents",1,2);return n.initEvent(i,s,!0),e(n,a),t.dispatchEvent(n),t===K.wrapper&&Ne(i),n}function Ne(t,i){if(w.postMessageEvents&&window.parent!==window.self){let a={namespace:"reveal",eventName:t,state:Et()};e(a,i),window.parent.postMessage(JSON.stringify(a),"*")}}function Me(e="a"){Array.from(K.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",Ot,!1)}))}function De(e="a"){Array.from(K.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",Ot,!1)}))}function Ie(e){ze(),K.overlay=document.createElement("div"),K.overlay.classList.add("overlay"),K.overlay.classList.add("overlay-preview"),K.wrapper.appendChild(K.overlay),K.overlay.innerHTML=`
\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
`,K.overlay.querySelector("iframe").addEventListener("load",(e=>{K.overlay.classList.add("loaded")}),!1),K.overlay.querySelector(".close").addEventListener("click",(e=>{ze(),e.preventDefault()}),!1),K.overlay.querySelector(".external").addEventListener("click",(e=>{ze()}),!1)}function Te(e){"boolean"==typeof e?e?Fe():ze():K.overlay?ze():Fe()}function Fe(){if(w.help){ze(),K.overlay=document.createElement("div"),K.overlay.classList.add("overlay"),K.overlay.classList.add("overlay-help"),K.wrapper.appendChild(K.overlay);let e='

Keyboard Shortcuts


',t=te.getShortcuts(),i=te.getBindings();e+="";for(let i in t)e+=``;for(let t in i)i[t].key&&i[t].description&&(e+=``);e+="
KEYACTION
${i}${t[i]}
${i[t].key}${i[t].description}
",K.overlay.innerHTML=`\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
${e}
\n\t\t\t\t
\n\t\t\t`,K.overlay.querySelector(".close").addEventListener("click",(e=>{ze(),e.preventDefault()}),!1)}}function ze(){return!!K.overlay&&(K.overlay.parentNode.removeChild(K.overlay),K.overlay=null,!0)}function He(){if(K.wrapper&&!oe.isPrintingPDF()){if(!w.disableLayout){g&&!w.embedded&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");const e=Be(),t=U;qe(w.width,w.height),K.slides.style.width=e.width+"px",K.slides.style.height=e.height+"px",U=Math.min(e.presentationWidth/e.width,e.presentationHeight/e.height),U=Math.max(U,w.minScale),U=Math.min(U,w.maxScale),1===U?(K.slides.style.zoom="",K.slides.style.left="",K.slides.style.top="",K.slides.style.bottom="",K.slides.style.right="",xe({layout:""})):(K.slides.style.zoom="",K.slides.style.left="50%",K.slides.style.top="50%",K.slides.style.bottom="auto",K.slides.style.right="auto",xe({layout:"translate(-50%, -50%) scale("+U+")"}));const i=Array.from(K.wrapper.querySelectorAll(".slides section"));for(let t=0,a=i.length;t .stretch, section > .r-stretch").forEach((t=>{let a=c(t,i);if(/(img|video)/gi.test(t.nodeName)){const i=t.naturalWidth||t.videoWidth,s=t.naturalHeight||t.videoHeight,n=Math.min(e/i,a/s);t.style.width=i*n+"px",t.style.height=s*n+"px"}else t.style.width=e+"px",t.style.height=a+"px"}))}function Be(e,t){const i={width:w.width,height:w.height,presentationWidth:e||K.wrapper.offsetWidth,presentationHeight:t||K.wrapper.offsetHeight};return i.presentationWidth-=i.presentationWidth*w.margin,i.presentationHeight-=i.presentationHeight*w.margin,"string"==typeof i.width&&/%$/.test(i.width)&&(i.width=parseInt(i.width,10)/100*i.presentationWidth),"string"==typeof i.height&&/%$/.test(i.height)&&(i.height=parseInt(i.height,10)/100*i.presentationHeight),i}function Oe(e,t){"object"==typeof e&&"function"==typeof e.setAttribute&&e.setAttribute("data-previous-indexv",t||0)}function Ue(e){if("object"==typeof e&&"function"==typeof e.setAttribute&&e.classList.contains("stack")){const t=e.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(e.getAttribute(t)||0,10)}return 0}function We(e=m){return e&&e.parentNode&&!!e.parentNode.nodeName.match(/section/i)}function Ke(){return!(!m||!We(m))&&!m.nextElementSibling}function Ve(){return 0===u&&0===v}function $e(){return!!m&&(!m.nextElementSibling&&(!We(m)||!m.parentNode.nextElementSibling))}function je(){if(w.pause){const e=K.wrapper.classList.contains("paused");At(),K.wrapper.classList.add("paused"),!1===e&&Pe({type:"paused"})}}function Xe(){const e=K.wrapper.classList.contains("paused");K.wrapper.classList.remove("paused"),St(),e&&Pe({type:"resumed"})}function Ye(e){"boolean"==typeof e?e?je():Xe():_e()?Xe():je()}function _e(){return K.wrapper.classList.contains("paused")}function Ge(e){"boolean"==typeof e?e?Lt():kt():Y?Lt():kt()}function Je(){return!(!$||Y)}function Qe(e,t,i,a){if(Pe({type:"beforeslidechange",data:{indexh:void 0===e?u:e,indexv:void 0===t?v:t,origin:a}}).defaultPrevented)return;p=m;const s=K.wrapper.querySelectorAll(".slides>section");if(0===s.length)return;void 0!==t||ee.isActive()||(t=Ue(s[e])),p&&p.parentNode&&p.parentNode.classList.contains("stack")&&Oe(p.parentNode,v);const n=I.concat();I.length=0;let r=u||0,o=v||0;u=at(".slides>section",void 0===e?u:e),v=at(".slides>section.present>section",void 0===t?v:t);let l=u!==r||v!==o;l||(p=null);let d=s[u],c=d.querySelectorAll("section");m=c[v]||d;let h=!1;l&&p&&m&&!ee.isActive()&&(p.hasAttribute("data-auto-animate")&&m.hasAttribute("data-auto-animate")&&p.getAttribute("data-auto-animate-id")===m.getAttribute("data-auto-animate-id")&&!(u>r||v>o?m:p).hasAttribute("data-auto-animate-restart")&&(h=!0,K.slides.classList.add("disable-slide-transitions")),V="running"),rt(),He(),ee.isActive()&&ee.update(),void 0!==i&&Z.goto(i),p&&p!==m&&(p.classList.remove("present"),p.setAttribute("aria-hidden","true"),Ve()&&setTimeout((()=>{vt().forEach((e=>{Oe(e,0)}))}),0));e:for(let e=0,t=I.length;e{fe(be(m))})),se.update(),ae.update(),ce.update(),Q.update(),Q.updateParallax(),G.update(),Z.update(),ie.writeURL(),St(),h&&(setTimeout((()=>{K.slides.classList.remove("disable-slide-transitions")}),0),w.autoAnimate&&J.run(p,m))}function Ze(){Ae(),Se(),He(),$=w.autoSlide,St(),Q.create(),ie.writeURL(),Z.sortAll(),ae.update(),se.update(),rt(),ce.update(),ce.updateVisibility(),Q.update(!0),G.update(),_.formatEmbeddedContent(),!1===w.autoPlayMedia?_.stopEmbeddedContent(m,{unloadIframes:!1}):_.startEmbeddedContent(m),ee.isActive()&&ee.layout()}function et(e=m){Q.sync(e),Z.sync(e),_.load(e),Q.update(),ce.update()}function tt(){ut().forEach((e=>{t(e,"section").forEach(((e,t)=>{t>0&&(e.classList.remove("present"),e.classList.remove("past"),e.classList.add("future"),e.setAttribute("aria-hidden","true"))}))}))}function it(e=ut()){e.forEach(((t,i)=>{let a=e[Math.floor(Math.random()*e.length)];a.parentNode===t.parentNode&&t.parentNode.insertBefore(t,a);let s=t.querySelectorAll("section");s.length&&it(s)}))}function at(e,i){let a=t(K.wrapper,e),s=a.length,n=oe.isPrintingPDF(),r=!1,o=!1;if(s){w.loop&&(i>=s&&(r=!0),(i%=s)<0&&(i=s+i,o=!0)),i=Math.max(Math.min(i,s-1),0);for(let e=0;ei?(t.classList.add(s?"past":"future"),w.fragments&&nt(t)):e===i&&w.fragments&&(r?nt(t):o&&st(t))}let e=a[i],t=e.classList.contains("present");e.classList.add("present"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden"),t||Pe({target:e,type:"visible",bubbles:!1});let l=e.getAttribute("data-state");l&&(I=I.concat(l.split(" ")))}else i=0;return i}function st(e){t(e,".fragment").forEach((e=>{e.classList.add("visible"),e.classList.remove("current-fragment")}))}function nt(e){t(e,".fragment.visible").forEach((e=>{e.classList.remove("visible","current-fragment")}))}function rt(){let e,i,a=ut(),s=a.length;if(s&&void 0!==u){let n=ee.isActive()?10:w.viewDistance;g&&(n=ee.isActive()?6:w.mobileViewDistance),oe.isPrintingPDF()&&(n=Number.MAX_VALUE);for(let r=0;rsection"),i=K.wrapper.querySelectorAll(".slides>section.present>section"),a={left:u>0,right:u0,down:v1&&(a.left=!0,a.right=!0),i.length>1&&(a.up=!0,a.down=!0)),t.length>1&&"linear"===w.navigationMode&&(a.right=a.right||a.down,a.left=a.left||a.up),!0===e){let e=Z.availableRoutes();a.left=a.left||e.prev,a.up=a.up||e.prev,a.down=a.down||e.next,a.right=a.right||e.next}if(w.rtl){let e=a.left;a.left=a.right,a.right=e}return a}function lt(e=m){let t=ut(),i=0;e:for(let a=0;a0){let i=.9;t+=m.querySelectorAll(".fragment.visible").length/e.length*i}}return Math.min(t/(e-1),1)}function ct(e){let i,a=u,s=v;if(e){let i=We(e),n=i?e.parentNode:e,r=ut();a=Math.max(r.indexOf(n),0),s=void 0,i&&(s=Math.max(t(e.parentNode,"section").indexOf(e),0))}if(!e&&m){if(m.querySelectorAll(".fragment").length>0){let e=m.querySelector(".current-fragment");i=e&&e.hasAttribute("data-fragment-index")?parseInt(e.getAttribute("data-fragment-index"),10):m.querySelectorAll(".fragment.visible").length-1}}return{h:a,v:s,f:i}}function ht(){return t(K.wrapper,'.slides section:not(.stack):not([data-visibility="uncounted"])')}function ut(){return t(K.wrapper,".slides>section")}function gt(){return t(K.wrapper,".slides>section>section")}function vt(){return t(K.wrapper,".slides>section.stack")}function pt(){return ut().length>1}function mt(){return gt().length>1}function ft(){return ht().map((e=>{let t={};for(let i=0;i{e.hasAttribute("data-autoplay")&&$&&1e3*e.duration/e.playbackRate>$&&($=1e3*e.duration/e.playbackRate+1e3)}))),!$||Y||_e()||ee.isActive()||$e()&&!Z.availableRoutes().next&&!0!==w.loop||(j=setTimeout((()=>{"function"==typeof w.autoSlideMethod?w.autoSlideMethod():Dt(),St()}),$),X=Date.now()),f&&f.setPlaying(-1!==j)}}function At(){clearTimeout(j),j=-1}function kt(){$&&!Y&&(Y=!0,Pe({type:"autoslidepaused"}),clearTimeout(j),f&&f.setPlaying(!1))}function Lt(){$&&Y&&(Y=!1,Pe({type:"autoslideresumed"}),St())}function Ct({skipFragments:e=!1}={}){A.hasNavigatedHorizontally=!0,w.rtl?(ee.isActive()||e||!1===Z.next())&&ot().left&&Qe(u+1,"grid"===w.navigationMode?v:void 0):(ee.isActive()||e||!1===Z.prev())&&ot().left&&Qe(u-1,"grid"===w.navigationMode?v:void 0)}function xt({skipFragments:e=!1}={}){A.hasNavigatedHorizontally=!0,w.rtl?(ee.isActive()||e||!1===Z.prev())&&ot().right&&Qe(u-1,"grid"===w.navigationMode?v:void 0):(ee.isActive()||e||!1===Z.next())&&ot().right&&Qe(u+1,"grid"===w.navigationMode?v:void 0)}function Pt({skipFragments:e=!1}={}){(ee.isActive()||e||!1===Z.prev())&&ot().up&&Qe(u,v-1)}function Nt({skipFragments:e=!1}={}){A.hasNavigatedVertically=!0,(ee.isActive()||e||!1===Z.next())&&ot().down&&Qe(u,v+1)}function Mt({skipFragments:e=!1}={}){if(e||!1===Z.prev())if(ot().up)Pt({skipFragments:e});else{let i;if(i=w.rtl?t(K.wrapper,".slides>section.future").pop():t(K.wrapper,".slides>section.past").pop(),i&&i.classList.contains("stack")){let e=i.querySelectorAll("section").length-1||void 0;Qe(u-1,e)}else Ct({skipFragments:e})}}function Dt({skipFragments:e=!1}={}){if(A.hasNavigatedHorizontally=!0,A.hasNavigatedVertically=!0,e||!1===Z.next()){let t=ot();t.down&&t.right&&w.loop&&Ke()&&(t.down=!1),t.down?Nt({skipFragments:e}):w.rtl?Ct({skipFragments:e}):xt({skipFragments:e})}}function It(e){w.autoSlideStoppable&&kt()}function Tt(e){let t=e.data;if("string"==typeof t&&"{"===t.charAt(0)&&"}"===t.charAt(t.length-1)&&(t=JSON.parse(t),t.method&&"function"==typeof h[t.method]))if(!1===R.test(t.method)){const e=h[t.method].apply(h,t.args);Ne("callback",{method:t.method,result:e})}else console.warn('reveal.js: "'+t.method+'" is is blacklisted from the postMessage API')}function Ft(e){"running"===V&&/section/gi.test(e.target.nodeName)&&(V="idle",Pe({type:"slidetransitionend",data:{indexh:u,indexv:v,previousSlide:p,currentSlide:m}}))}function zt(e){const t=r(e.target,'a[href^="#"]');if(t){const i=t.getAttribute("href"),a=ie.getIndicesFromHash(i);a&&(h.slide(a.h,a.v,a.f),e.preventDefault())}}function Ht(e){He()}function qt(e){!1===document.hidden&&document.activeElement!==document.body&&("function"==typeof document.activeElement.blur&&document.activeElement.blur(),document.body.focus())}function Bt(e){(document.fullscreenElement||document.webkitFullscreenElement)===K.wrapper&&(e.stopImmediatePropagation(),setTimeout((()=>{h.layout(),h.focus.focus()}),1))}function Ot(e){if(e.currentTarget&&e.currentTarget.hasAttribute("href")){let t=e.currentTarget.getAttribute("href");t&&(Ie(t),e.preventDefault())}}function Ut(e){$e()&&!1===w.loop?(Qe(0,0),Lt()):Y?Lt():kt()}const Wt={VERSION:"4.3.1",initialize:he,configure:Re,destroy:ke,sync:Ze,syncSlide:et,syncFragments:Z.sync.bind(Z),slide:Qe,left:Ct,right:xt,up:Pt,down:Nt,prev:Mt,next:Dt,navigateLeft:Ct,navigateRight:xt,navigateUp:Pt,navigateDown:Nt,navigatePrev:Mt,navigateNext:Dt,navigateFragment:Z.goto.bind(Z),prevFragment:Z.prev.bind(Z),nextFragment:Z.next.bind(Z),on:Le,off:Ce,addEventListener:Le,removeEventListener:Ce,layout:He,shuffle:it,availableRoutes:ot,availableFragments:Z.availableRoutes.bind(Z),toggleHelp:Te,toggleOverview:ee.toggle.bind(ee),togglePause:Ye,toggleAutoSlide:Ge,isFirstSlide:Ve,isLastSlide:$e,isLastVerticalSlide:Ke,isVerticalSlide:We,isPaused:_e,isAutoSliding:Je,isSpeakerNotes:ce.isSpeakerNotesWindow.bind(ce),isOverview:ee.isActive.bind(ee),isFocused:le.isFocused.bind(le),isPrintingPDF:oe.isPrintingPDF.bind(oe),isReady:()=>S,loadSlide:_.load.bind(_),unloadSlide:_.unload.bind(_),showPreview:Ie,hidePreview:ze,addEventListeners:Se,removeEventListeners:Ae,dispatchEvent:Pe,getState:Et,setState:Rt,getProgress:dt,getIndices:ct,getSlidesAttributes:ft,getSlidePastCount:lt,getTotalSlides:bt,getSlide:yt,getPreviousSlide:()=>p,getCurrentSlide:()=>m,getSlideBackground:wt,getSlideNotes:ce.getSlideNotes.bind(ce),getSlides:ht,getHorizontalSlides:ut,getVerticalSlides:gt,hasHorizontalSlides:pt,hasVerticalSlides:mt,hasNavigatedHorizontally:()=>A.hasNavigatedHorizontally,hasNavigatedVertically:()=>A.hasNavigatedVertically,addKeyBinding:te.addKeyBinding.bind(te),removeKeyBinding:te.removeKeyBinding.bind(te),triggerKey:te.triggerKey.bind(te),registerKeyboardShortcut:te.registerKeyboardShortcut.bind(te),getComputedSlideSize:Be,getScale:()=>U,getConfig:()=>w,getQueryHash:d,getSlidePath:ie.getHash.bind(ie),getRevealElement:()=>n,getSlidesElement:()=>K.slides,getViewportElement:()=>K.viewport,getBackgroundsElement:()=>Q.element,registerPlugin:re.registerPlugin.bind(re),hasPlugin:re.hasPlugin.bind(re),getPlugin:re.getPlugin.bind(re),getPlugins:re.getRegisteredPlugins.bind(re)};return e(h,{...Wt,announceStatus:fe,getStatusText:be,print:oe,focus:le,progress:se,controls:ae,location:ie,overview:ee,fragments:Z,slideContent:_,slideNumber:G,onUserInput:It,closeOverlay:ze,updateSlidesVisibility:rt,layoutSlideContents:qe,transformSlides:xe,cueAutoSlide:St,cancelAutoSlide:At}),Wt}let W=U,K=[];W.initialize=e=>(Object.assign(W,new U(document.querySelector(".reveal"),e)),K.map((e=>e(W))),W.initialize()),["configure","on","off","addEventListener","removeEventListener","registerPlugin"].forEach((e=>{W[e]=(...t)=>{K.push((i=>i[e].call(null,...t)))}})),W.isReady=()=>!1,W.VERSION="4.3.1";export default W; +//# sourceMappingURL=reveal.esm.js.map diff --git a/dist/reveal.esm.js.map b/dist/reveal.esm.js.map new file mode 100644 index 0000000..435637a --- /dev/null +++ b/dist/reveal.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reveal.esm.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/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}","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 } 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 children\n\t\tqueryAll( slide, 'video, audio' ).forEach( media => {\n\t\t\tlet sources = 0;\n\n\t\t\tqueryAll( media, 'source[data-src]' ).forEach( source => {\n\t\t\t\tsource.setAttribute( 'src', source.getAttribute( 'data-src' ) );\n\t\t\t\tsource.removeAttribute( 'data-src' );\n\t\t\t\tsource.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\tsources += 1;\n\t\t\t} );\n\n\t\t\t// Enable inline video playback in mobile Safari\n\t\t\tif( isMobile && media.tagName === 'VIDEO' ) {\n\t\t\t\tmedia.setAttribute( 'playsinline', '' );\n\t\t\t}\n\n\t\t\t// If we rewrote sources for this video/audio element, we need\n\t\t\t// to manually tell it to load from its new origin\n\t\t\tif( sources > 0 ) {\n\t\t\t\tmedia.load();\n\t\t\t}\n\t\t} );\n\n\n\t\t// Show the corresponding background element\n\t\tlet background = slide.slideBackgroundElement;\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'block';\n\n\t\t\tlet backgroundContent = slide.slideBackgroundContentElement;\n\t\t\tlet backgroundIframe = slide.getAttribute( 'data-background-iframe' );\n\n\t\t\t// If the background contains media, load it\n\t\t\tif( background.hasAttribute( 'data-loaded' ) === false ) {\n\t\t\t\tbackground.setAttribute( 'data-loaded', 'true' );\n\n\t\t\t\tlet backgroundImage = slide.getAttribute( 'data-background-image' ),\n\t\t\t\t\tbackgroundVideo = slide.getAttribute( 'data-background-video' ),\n\t\t\t\t\tbackgroundVideoLoop = slide.hasAttribute( 'data-background-video-loop' ),\n\t\t\t\t\tbackgroundVideoMuted = slide.hasAttribute( 'data-background-video-muted' );\n\n\t\t\t\t// Images\n\t\t\t\tif( backgroundImage ) {\n\t\t\t\t\t// base64\n\t\t\t\t\tif( /^data:/.test( backgroundImage.trim() ) ) {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = `url(${backgroundImage.trim()})`;\n\t\t\t\t\t}\n\t\t\t\t\t// URL(s)\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = backgroundImage.split( ',' ).map( background => {\n\t\t\t\t\t\t\treturn `url(${encodeURI(background.trim())})`;\n\t\t\t\t\t\t}).join( ',' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Videos\n\t\t\t\telse if ( backgroundVideo && !this.Reveal.isSpeakerNotes() ) {\n\t\t\t\t\tlet video = document.createElement( 'video' );\n\n\t\t\t\t\tif( backgroundVideoLoop ) {\n\t\t\t\t\t\tvideo.setAttribute( 'loop', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif( backgroundVideoMuted ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Enable inline playback in mobile Safari\n\t\t\t\t\t//\n\t\t\t\t\t// Mute is required for video to play when using\n\t\t\t\t\t// swipe gestures to navigate since they don't\n\t\t\t\t\t// count as direct user actions :'(\n\t\t\t\t\tif( isMobile ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t\tvideo.setAttribute( 'playsinline', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support comma separated lists of video sources\n\t\t\t\t\tbackgroundVideo.split( ',' ).forEach( source => {\n\t\t\t\t\t\tlet type = getMimeTypeFromFile( source );\n\t\t\t\t\t\tif( type ) {\n\t\t\t\t\t\t\tvideo.innerHTML += ``;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvideo.innerHTML += ``;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\tbackgroundContent.appendChild( video );\n\t\t\t\t}\n\t\t\t\t// Iframes\n\t\t\t\telse if( backgroundIframe && options.excludeIframes !== true ) {\n\t\t\t\t\tlet iframe = document.createElement( 'iframe' );\n\t\t\t\t\tiframe.setAttribute( 'allowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'mozallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'webkitallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'allow', 'autoplay' );\n\n\t\t\t\t\tiframe.setAttribute( 'data-src', backgroundIframe );\n\n\t\t\t\t\tiframe.style.width = '100%';\n\t\t\t\t\tiframe.style.height = '100%';\n\t\t\t\t\tiframe.style.maxHeight = '100%';\n\t\t\t\t\tiframe.style.maxWidth = '100%';\n\n\t\t\t\t\tbackgroundContent.appendChild( iframe );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start loading preloadable iframes\n\t\t\tlet backgroundIframeElement = backgroundContent.querySelector( 'iframe[data-src]' );\n\t\t\tif( backgroundIframeElement ) {\n\n\t\t\t\t// Check if this iframe is eligible to be preloaded\n\t\t\t\tif( this.shouldPreload( background ) && !/autoplay=(1|true|yes)/gi.test( backgroundIframe ) ) {\n\t\t\t\t\tif( backgroundIframeElement.getAttribute( 'src' ) !== backgroundIframe ) {\n\t\t\t\t\t\tbackgroundIframeElement.setAttribute( 'src', backgroundIframe );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.layout( slide );\n\n\t}\n\n\t/**\n\t * Applies JS-dependent layout helpers for the given slide,\n\t * if there are any.\n\t */\n\tlayout( slide ) {\n\n\t\t// Autosize text with the r-fit-text class based on the\n\t\t// size of its container. This needs to happen after the\n\t\t// slide is visible in order to measure the text.\n\t\tArray.from( slide.querySelectorAll( '.r-fit-text' ) ).forEach( element => {\n\t\t\tfitty( element, {\n\t\t\t\tminSize: 24,\n\t\t\t\tmaxSize: this.Reveal.getConfig().height * 0.8,\n\t\t\t\tobserveMutations: false,\n\t\t\t\tobserveWindow: false\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unloads and hides the given slide. This is called when the\n\t * slide is moved outside of the configured view distance.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tunload( slide ) {\n\n\t\t// Hide the slide element\n\t\tslide.style.display = 'none';\n\n\t\t// Hide the corresponding background element\n\t\tlet background = this.Reveal.getSlideBackground( slide );\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'none';\n\n\t\t\t// Unload any background iframes\n\t\t\tqueryAll( background, 'iframe[src]' ).forEach( element => {\n\t\t\t\telement.removeAttribute( 'src' );\n\t\t\t} );\n\t\t}\n\n\t\t// Reset lazy-loaded media elements with src attributes\n\t\tqueryAll( slide, 'video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]' ).forEach( element => {\n\t\t\telement.setAttribute( 'data-src', element.getAttribute( 'src' ) );\n\t\t\telement.removeAttribute( 'src' );\n\t\t} );\n\n\t\t// Reset lazy-loaded media elements with children\n\t\tqueryAll( slide, 'video[data-lazy-loaded] source[src], audio source[src]' ).forEach( source => {\n\t\t\tsource.setAttribute( 'data-src', source.getAttribute( 'src' ) );\n\t\t\tsource.removeAttribute( 'src' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Enforces origin-specific format rules for embedded media.\n\t */\n\tformatEmbeddedContent() {\n\n\t\tlet _appendParamToIframeSource = ( sourceAttribute, sourceURL, param ) => {\n\t\t\tqueryAll( this.Reveal.getSlidesElement(), 'iframe['+ sourceAttribute +'*=\"'+ sourceURL +'\"]' ).forEach( el => {\n\t\t\t\tlet src = el.getAttribute( sourceAttribute );\n\t\t\t\tif( src && src.indexOf( param ) === -1 ) {\n\t\t\t\t\tel.setAttribute( sourceAttribute, src + ( !/\\?/.test( src ) ? '?' : '&' ) + param );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// YouTube frames must include \"?enablejsapi=1\"\n\t\t_appendParamToIframeSource( 'src', 'youtube.com/embed/', 'enablejsapi=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'youtube.com/embed/', 'enablejsapi=1' );\n\n\t\t// Vimeo frames must include \"?api=1\"\n\t\t_appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' );\n\n\t}\n\n\t/**\n\t * Start playback of any embedded content inside of\n\t * the given element.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstartEmbeddedContent( element ) {\n\n\t\tif( element && !this.Reveal.isSpeakerNotes() ) {\n\n\t\t\t// Restart GIFs\n\t\t\tqueryAll( element, 'img[src$=\".gif\"]' ).forEach( el => {\n\t\t\t\t// Setting the same unchanged source like this was confirmed\n\t\t\t\t// to work in Chrome, FF & Safari\n\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'src' ) );\n\t\t\t} );\n\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = el.hasAttribute( 'data-autoplay' ) || !!closest( el, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\tif( autoplay && typeof el.play === 'function' ) {\n\n\t\t\t\t\t// If the media is ready, start playback\n\t\t\t\t\tif( el.readyState > 1 ) {\n\t\t\t\t\t\tthis.startEmbeddedMedia( { target: el } );\n\t\t\t\t\t}\n\t\t\t\t\t// Mobile devices never fire a loaded event so instead\n\t\t\t\t\t// of waiting, we initiate playback\n\t\t\t\t\telse if( isMobile ) {\n\t\t\t\t\t\tlet promise = el.play();\n\n\t\t\t\t\t\t// If autoplay does not work, ensure that the controls are visible so\n\t\t\t\t\t\t// that the viewer can start the media on their own\n\t\t\t\t\t\tif( promise && typeof promise.catch === 'function' && el.controls === false ) {\n\t\t\t\t\t\t\tpromise.catch( () => {\n\t\t\t\t\t\t\t\tel.controls = true;\n\n\t\t\t\t\t\t\t\t// Once the video does start playing, hide the controls again\n\t\t\t\t\t\t\t\tel.addEventListener( 'play', () => {\n\t\t\t\t\t\t\t\t\tel.controls = false;\n\t\t\t\t\t\t\t\t} );\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\t// If the media isn't loaded, wait before playing\n\t\t\t\t\telse {\n\t\t\t\t\t\tel.removeEventListener( 'loadeddata', this.startEmbeddedMedia ); // remove first to avoid dupes\n\t\t\t\t\t\tel.addEventListener( 'loadeddata', this.startEmbeddedMedia );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Normal iframes\n\t\t\tqueryAll( element, 'iframe[src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.startEmbeddedIframe( { target: el } );\n\t\t\t} );\n\n\t\t\t// Lazy loading iframes\n\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif( el.getAttribute( 'src' ) !== el.getAttribute( 'data-src' ) ) {\n\t\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe ); // remove first to avoid dupes\n\t\t\t\t\tel.addEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'data-src' ) );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Starts playing an embedded video/audio element after\n\t * it has finished loading.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedMedia( event ) {\n\n\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\tif( isAttachedToDOM && isVisible ) {\n\t\t\tevent.target.currentTime = 0;\n\t\t\tevent.target.play();\n\t\t}\n\n\t\tevent.target.removeEventListener( 'loadeddata', this.startEmbeddedMedia );\n\n\t}\n\n\t/**\n\t * \"Starts\" the content of an embedded iframe using the\n\t * postMessage API.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedIframe( event ) {\n\n\t\tlet iframe = event.target;\n\n\t\tif( iframe && iframe.contentWindow ) {\n\n\t\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\t\tif( isAttachedToDOM && isVisible ) {\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = iframe.hasAttribute( 'data-autoplay' ) || !!closest( iframe, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\t// YouTube postMessage API\n\t\t\t\tif( /youtube\\.com\\/embed\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Vimeo postMessage API\n\t\t\t\telse if( /player\\.vimeo\\.com\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"method\":\"play\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Generic postMessage API\n\t\t\t\telse {\n\t\t\t\t\tiframe.contentWindow.postMessage( 'slide:start', '*' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Stop playback of any embedded content inside of\n\t * the targeted slide.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstopEmbeddedContent( element, options = {} ) {\n\n\t\toptions = extend( {\n\t\t\t// Defaults\n\t\t\tunloadIframes: true\n\t\t}, options );\n\n\t\tif( element && element.parentNode ) {\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && typeof el.pause === 'function' ) {\n\t\t\t\t\tel.setAttribute('data-paused-by-reveal', '');\n\t\t\t\t\tel.pause();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Generic postMessage API for non-lazy loaded iframes\n\t\t\tqueryAll( element, 'iframe' ).forEach( el => {\n\t\t\t\tif( el.contentWindow ) el.contentWindow.postMessage( 'slide:stop', '*' );\n\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t});\n\n\t\t\t// YouTube postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"youtube.com/embed/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Vimeo postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"player.vimeo.com/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"method\":\"pause\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif( options.unloadIframes === true ) {\n\t\t\t\t// Unload lazy-loaded iframes\n\t\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\t\t// Only removing the src doesn't actually unload the frame\n\t\t\t\t\t// in all browsers (Firefox) so we set it to blank first\n\t\t\t\t\tel.setAttribute( 'src', 'about:blank' );\n\t\t\t\t\tel.removeAttribute( 'src' );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n","/**\n * Handles the display of reveal.js' optional slide number.\n */\nexport default class SlideNumber {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'slide-number';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tlet slideNumberDisplay = 'none';\n\t\tif( config.slideNumber && !this.Reveal.isPrintingPDF() ) {\n\t\t\tif( config.showSlideNumber === 'all' ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t\telse if( config.showSlideNumber === 'speaker' && this.Reveal.isSpeakerNotes() ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t}\n\n\t\tthis.element.style.display = slideNumberDisplay;\n\n\t}\n\n\t/**\n\t * Updates the slide number to match the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update slide number if enabled\n\t\tif( this.Reveal.getConfig().slideNumber && this.element ) {\n\t\t\tthis.element.innerHTML = this.getSlideNumber();\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the HTML string corresponding to the current slide\n\t * number, including formatting.\n\t */\n\tgetSlideNumber( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet value;\n\t\tlet format = 'h.v';\n\n\t\tif ( typeof config.slideNumber === 'function' ) {\n\t\t\tvalue = config.slideNumber( slide );\n\t\t} else {\n\t\t\t// Check if a custom number format is available\n\t\t\tif( typeof config.slideNumber === 'string' ) {\n\t\t\t\tformat = config.slideNumber;\n\t\t\t}\n\n\t\t\t// If there are ONLY vertical slides in this deck, always use\n\t\t\t// a flattened slide number\n\t\t\tif( !/c/.test( format ) && this.Reveal.getHorizontalSlides().length === 1 ) {\n\t\t\t\tformat = 'c';\n\t\t\t}\n\n\t\t\t// Offset the current slide number by 1 to make it 1-indexed\n\t\t\tlet horizontalOffset = slide && slide.dataset.visibility === 'uncounted' ? 0 : 1;\n\n\t\t\tvalue = [];\n\t\t\tswitch( format ) {\n\t\t\t\tcase 'c':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c/t':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset, '/', this.Reveal.getTotalSlides() );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tlet indices = this.Reveal.getIndices( slide );\n\t\t\t\t\tvalue.push( indices.h + horizontalOffset );\n\t\t\t\t\tlet sep = format === 'h/v' ? '/' : '.';\n\t\t\t\t\tif( this.Reveal.isVerticalSlide( slide ) ) value.push( sep, indices.v + 1 );\n\t\t\t}\n\t\t}\n\n\t\tlet url = '#' + this.Reveal.location.getHash( slide );\n\t\treturn this.formatNumber( value[0], value[1], value[2], url );\n\n\t}\n\n\t/**\n\t * Applies HTML formatting to a slide number before it's\n\t * written to the DOM.\n\t *\n\t * @param {number} a Current slide\n\t * @param {string} delimiter Character to separate slide numbers\n\t * @param {(number|*)} b Total slides\n\t * @param {HTMLElement} [url='#'+locationHash()] The url to link to\n\t * @return {string} HTML string fragment\n\t */\n\tformatNumber( a, delimiter, b, url = '#' + this.Reveal.location.getHash() ) {\n\n\t\tif( typeof b === 'number' && !isNaN( b ) ) {\n\t\t\treturn `\n\t\t\t\t\t${a}\n\t\t\t\t\t${delimiter}\n\t\t\t\t\t${b}\n\t\t\t\t\t`;\n\t\t}\n\t\telse {\n\t\t\treturn `\n\t\t\t\t\t${a}\n\t\t\t\t\t`;\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}","/**\n * Converts various color input formats to an {r:0,g:0,b:0} object.\n *\n * @param {string} color The string representation of a color\n * @example\n * colorToRgb('#000');\n * @example\n * colorToRgb('#000000');\n * @example\n * colorToRgb('rgb(0,0,0)');\n * @example\n * colorToRgb('rgba(0,0,0)');\n *\n * @return {{r: number, g: number, b: number, [a]: number}|null}\n */\nexport const colorToRgb = ( color ) => {\n\n\tlet hex3 = color.match( /^#([0-9a-f]{3})$/i );\n\tif( hex3 && hex3[1] ) {\n\t\thex3 = hex3[1];\n\t\treturn {\n\t\t\tr: parseInt( hex3.charAt( 0 ), 16 ) * 0x11,\n\t\t\tg: parseInt( hex3.charAt( 1 ), 16 ) * 0x11,\n\t\t\tb: parseInt( hex3.charAt( 2 ), 16 ) * 0x11\n\t\t};\n\t}\n\n\tlet hex6 = color.match( /^#([0-9a-f]{6})$/i );\n\tif( hex6 && hex6[1] ) {\n\t\thex6 = hex6[1];\n\t\treturn {\n\t\t\tr: parseInt( hex6.slice( 0, 2 ), 16 ),\n\t\t\tg: parseInt( hex6.slice( 2, 4 ), 16 ),\n\t\t\tb: parseInt( hex6.slice( 4, 6 ), 16 )\n\t\t};\n\t}\n\n\tlet rgb = color.match( /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i );\n\tif( rgb ) {\n\t\treturn {\n\t\t\tr: parseInt( rgb[1], 10 ),\n\t\t\tg: parseInt( rgb[2], 10 ),\n\t\t\tb: parseInt( rgb[3], 10 )\n\t\t};\n\t}\n\n\tlet rgba = color.match( /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\,\\s*([\\d]+|[\\d]*.[\\d]+)\\s*\\)$/i );\n\tif( rgba ) {\n\t\treturn {\n\t\t\tr: parseInt( rgba[1], 10 ),\n\t\t\tg: parseInt( rgba[2], 10 ),\n\t\t\tb: parseInt( rgba[3], 10 ),\n\t\t\ta: parseFloat( rgba[4] )\n\t\t};\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Calculates brightness on a scale of 0-255.\n *\n * @param {string} color See colorToRgb for supported formats.\n * @see {@link colorToRgb}\n */\nexport const colorBrightness = ( color ) => {\n\n\tif( typeof color === 'string' ) color = colorToRgb( color );\n\n\tif( color ) {\n\t\treturn ( color.r * 299 + color.g * 587 + color.b * 114 ) / 1000;\n\t}\n\n\treturn null;\n\n}","import { queryAll } from '../utils/util.js'\nimport { colorToRgb, colorBrightness } from '../utils/color.js'\n\n/**\n * Creates and updates slide backgrounds.\n */\nexport default class Backgrounds {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'backgrounds';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Creates the slide background elements and appends them\n\t * to the background container. One element is created per\n\t * slide no matter if the given slide has visible background.\n\t */\n\tcreate() {\n\n\t\t// Clear prior backgrounds\n\t\tthis.element.innerHTML = '';\n\t\tthis.element.classList.add( 'no-transition' );\n\n\t\t// Iterate over all horizontal slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( slideh => {\n\n\t\t\tlet backgroundStack = this.createBackground( slideh, this.element );\n\n\t\t\t// Iterate over all vertical slides\n\t\t\tqueryAll( slideh, 'section' ).forEach( slidev => {\n\n\t\t\t\tthis.createBackground( slidev, backgroundStack );\n\n\t\t\t\tbackgroundStack.classList.add( 'stack' );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t// Add parallax background if specified\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tthis.element.style.backgroundImage = 'url(\"' + this.Reveal.getConfig().parallaxBackgroundImage + '\")';\n\t\t\tthis.element.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize;\n\t\t\tthis.element.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat;\n\t\t\tthis.element.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition;\n\n\t\t\t// Make sure the below properties are set on the element - these properties are\n\t\t\t// needed for proper transitions to be set on the element via CSS. To remove\n\t\t\t// annoying background slide-in effect when the presentation starts, apply\n\t\t\t// these properties after short time delay\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.add( 'has-parallax-background' );\n\t\t\t}, 1 );\n\n\t\t}\n\t\telse {\n\n\t\t\tthis.element.style.backgroundImage = '';\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'has-parallax-background' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a background for the given slide.\n\t *\n\t * @param {HTMLElement} slide\n\t * @param {HTMLElement} container The element that the background\n\t * should be appended to\n\t * @return {HTMLElement} New background div\n\t */\n\tcreateBackground( slide, container ) {\n\n\t\t// Main slide background element\n\t\tlet element = document.createElement( 'div' );\n\t\telement.className = 'slide-background ' + slide.className.replace( /present|past|future/, '' );\n\n\t\t// Inner background element that wraps images/videos/iframes\n\t\tlet contentElement = document.createElement( 'div' );\n\t\tcontentElement.className = 'slide-background-content';\n\n\t\telement.appendChild( contentElement );\n\t\tcontainer.appendChild( element );\n\n\t\tslide.slideBackgroundElement = element;\n\t\tslide.slideBackgroundContentElement = contentElement;\n\n\t\t// Syncs the background to reflect all current background settings\n\t\tthis.sync( slide );\n\n\t\treturn element;\n\n\t}\n\n\t/**\n\t * Renders all of the visual properties of a slide background\n\t * based on the various background attributes.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tsync( slide ) {\n\n\t\tconst element = slide.slideBackgroundElement,\n\t\t\tcontentElement = slide.slideBackgroundContentElement;\n\n\t\tconst data = {\n\t\t\tbackground: slide.getAttribute( 'data-background' ),\n\t\t\tbackgroundSize: slide.getAttribute( 'data-background-size' ),\n\t\t\tbackgroundImage: slide.getAttribute( 'data-background-image' ),\n\t\t\tbackgroundVideo: slide.getAttribute( 'data-background-video' ),\n\t\t\tbackgroundIframe: slide.getAttribute( 'data-background-iframe' ),\n\t\t\tbackgroundColor: slide.getAttribute( 'data-background-color' ),\n\t\t\tbackgroundGradient: slide.getAttribute( 'data-background-gradient' ),\n\t\t\tbackgroundRepeat: slide.getAttribute( 'data-background-repeat' ),\n\t\t\tbackgroundPosition: slide.getAttribute( 'data-background-position' ),\n\t\t\tbackgroundTransition: slide.getAttribute( 'data-background-transition' ),\n\t\t\tbackgroundOpacity: slide.getAttribute( 'data-background-opacity' ),\n\t\t};\n\n\t\tconst dataPreload = slide.hasAttribute( 'data-preload' );\n\n\t\t// Reset the prior background state in case this is not the\n\t\t// initial sync\n\t\tslide.classList.remove( 'has-dark-background' );\n\t\tslide.classList.remove( 'has-light-background' );\n\n\t\telement.removeAttribute( 'data-loaded' );\n\t\telement.removeAttribute( 'data-background-hash' );\n\t\telement.removeAttribute( 'data-background-size' );\n\t\telement.removeAttribute( 'data-background-transition' );\n\t\telement.style.backgroundColor = '';\n\n\t\tcontentElement.style.backgroundSize = '';\n\t\tcontentElement.style.backgroundRepeat = '';\n\t\tcontentElement.style.backgroundPosition = '';\n\t\tcontentElement.style.backgroundImage = '';\n\t\tcontentElement.style.opacity = '';\n\t\tcontentElement.innerHTML = '';\n\n\t\tif( data.background ) {\n\t\t\t// Auto-wrap image urls in url(...)\n\t\t\tif( /^(http|file|\\/\\/)/gi.test( data.background ) || /\\.(svg|png|jpg|jpeg|gif|bmp|webp)([?#\\s]|$)/gi.test( data.background ) ) {\n\t\t\t\tslide.setAttribute( 'data-background-image', data.background );\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.background = data.background;\n\t\t\t}\n\t\t}\n\n\t\t// Create a hash for this combination of background settings.\n\t\t// This is used to determine when two slide backgrounds are\n\t\t// the same.\n\t\tif( data.background || data.backgroundColor || data.backgroundGradient || data.backgroundImage || data.backgroundVideo || data.backgroundIframe ) {\n\t\t\telement.setAttribute( 'data-background-hash', data.background +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundSize +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundImage +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundVideo +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundIframe +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundColor +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundGradient +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundRepeat +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundPosition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundTransition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundOpacity );\n\t\t}\n\n\t\t// Additional and optional background properties\n\t\tif( data.backgroundSize ) element.setAttribute( 'data-background-size', data.backgroundSize );\n\t\tif( data.backgroundColor ) element.style.backgroundColor = data.backgroundColor;\n\t\tif( data.backgroundGradient ) element.style.backgroundImage = data.backgroundGradient;\n\t\tif( data.backgroundTransition ) element.setAttribute( 'data-background-transition', data.backgroundTransition );\n\n\t\tif( dataPreload ) element.setAttribute( 'data-preload', '' );\n\n\t\t// Background image options are set on the content wrapper\n\t\tif( data.backgroundSize ) contentElement.style.backgroundSize = data.backgroundSize;\n\t\tif( data.backgroundRepeat ) contentElement.style.backgroundRepeat = data.backgroundRepeat;\n\t\tif( data.backgroundPosition ) contentElement.style.backgroundPosition = data.backgroundPosition;\n\t\tif( data.backgroundOpacity ) contentElement.style.opacity = data.backgroundOpacity;\n\n\t\t// If this slide has a background color, we add a class that\n\t\t// signals if it is light or dark. If the slide has no background\n\t\t// color, no class will be added\n\t\tlet contrastColor = data.backgroundColor;\n\n\t\t// If no bg color was found, or it cannot be converted by colorToRgb, check the computed background\n\t\tif( !contrastColor || !colorToRgb( contrastColor ) ) {\n\t\t\tlet computedBackgroundStyle = window.getComputedStyle( element );\n\t\t\tif( computedBackgroundStyle && computedBackgroundStyle.backgroundColor ) {\n\t\t\t\tcontrastColor = computedBackgroundStyle.backgroundColor;\n\t\t\t}\n\t\t}\n\n\t\tif( contrastColor ) {\n\t\t\tconst rgb = colorToRgb( contrastColor );\n\n\t\t\t// Ignore fully transparent backgrounds. Some browsers return\n\t\t\t// rgba(0,0,0,0) when reading the computed background color of\n\t\t\t// an element with no background\n\t\t\tif( rgb && rgb.a !== 0 ) {\n\t\t\t\tif( colorBrightness( contrastColor ) < 128 ) {\n\t\t\t\t\tslide.classList.add( 'has-dark-background' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslide.classList.add( 'has-light-background' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the background elements to reflect the current\n\t * slide.\n\t *\n\t * @param {boolean} includeAll If true, the backgrounds of\n\t * all vertical slides (not just the present) will be updated.\n\t */\n\tupdate( includeAll = false ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tlet currentBackground = null;\n\n\t\t// Reverse past/future classes when in RTL mode\n\t\tlet horizontalPast = this.Reveal.getConfig().rtl ? 'future' : 'past',\n\t\t\thorizontalFuture = this.Reveal.getConfig().rtl ? 'past' : 'future';\n\n\t\t// Update the classes of all backgrounds to match the\n\t\t// states of their slides (past/present/future)\n\t\tArray.from( this.element.childNodes ).forEach( ( backgroundh, h ) => {\n\n\t\t\tbackgroundh.classList.remove( 'past', 'present', 'future' );\n\n\t\t\tif( h < indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalPast );\n\t\t\t}\n\t\t\telse if ( h > indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalFuture );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundh.classList.add( 'present' );\n\n\t\t\t\t// Store a reference to the current background element\n\t\t\t\tcurrentBackground = backgroundh;\n\t\t\t}\n\n\t\t\tif( includeAll || h === indices.h ) {\n\t\t\t\tqueryAll( backgroundh, '.slide-background' ).forEach( ( backgroundv, v ) => {\n\n\t\t\t\t\tbackgroundv.classList.remove( 'past', 'present', 'future' );\n\n\t\t\t\t\tif( v < indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'past' );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( v > indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'future' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundv.classList.add( 'present' );\n\n\t\t\t\t\t\t// Only if this is the present horizontal and vertical slide\n\t\t\t\t\t\tif( h === indices.h ) currentBackground = backgroundv;\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t}\n\n\t\t} );\n\n\t\t// Stop content inside of previous backgrounds\n\t\tif( this.previousBackground ) {\n\n\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( this.previousBackground, { unloadIframes: !this.Reveal.slideContent.shouldPreload( this.previousBackground ) } );\n\n\t\t}\n\n\t\t// Start content in the current background\n\t\tif( currentBackground ) {\n\n\t\t\tthis.Reveal.slideContent.startEmbeddedContent( currentBackground );\n\n\t\t\tlet currentBackgroundContent = currentBackground.querySelector( '.slide-background-content' );\n\t\t\tif( currentBackgroundContent ) {\n\n\t\t\t\tlet backgroundImageURL = currentBackgroundContent.style.backgroundImage || '';\n\n\t\t\t\t// Restart GIFs (doesn't work in Firefox)\n\t\t\t\tif( /\\.gif/i.test( backgroundImageURL ) ) {\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = '';\n\t\t\t\t\twindow.getComputedStyle( currentBackgroundContent ).opacity;\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = backgroundImageURL;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Don't transition between identical backgrounds. This\n\t\t\t// prevents unwanted flicker.\n\t\t\tlet previousBackgroundHash = this.previousBackground ? this.previousBackground.getAttribute( 'data-background-hash' ) : null;\n\t\t\tlet currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' );\n\t\t\tif( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== this.previousBackground ) {\n\t\t\t\tthis.element.classList.add( 'no-transition' );\n\t\t\t}\n\n\t\t\tthis.previousBackground = currentBackground;\n\n\t\t}\n\n\t\t// If there's a background brightness flag for this slide,\n\t\t// bubble it to the .reveal container\n\t\tif( currentSlide ) {\n\t\t\t[ 'has-light-background', 'has-dark-background' ].forEach( classToBubble => {\n\t\t\t\tif( currentSlide.classList.contains( classToBubble ) ) {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.add( classToBubble );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.remove( classToBubble );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t}\n\n\t\t// Allow the first background to apply without transition\n\t\tsetTimeout( () => {\n\t\t\tthis.element.classList.remove( 'no-transition' );\n\t\t}, 1 );\n\n\t}\n\n\t/**\n\t * Updates the position of the parallax background based\n\t * on the current slide index.\n\t */\n\tupdateParallax() {\n\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tlet horizontalSlides = this.Reveal.getHorizontalSlides(),\n\t\t\t\tverticalSlides = this.Reveal.getVerticalSlides();\n\n\t\t\tlet backgroundSize = this.element.style.backgroundSize.split( ' ' ),\n\t\t\t\tbackgroundWidth, backgroundHeight;\n\n\t\t\tif( backgroundSize.length === 1 ) {\n\t\t\t\tbackgroundWidth = backgroundHeight = parseInt( backgroundSize[0], 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundWidth = parseInt( backgroundSize[0], 10 );\n\t\t\t\tbackgroundHeight = parseInt( backgroundSize[1], 10 );\n\t\t\t}\n\n\t\t\tlet slideWidth = this.element.offsetWidth,\n\t\t\t\thorizontalSlideCount = horizontalSlides.length,\n\t\t\t\thorizontalOffsetMultiplier,\n\t\t\t\thorizontalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundHorizontal === 'number' ) {\n\t\t\t\thorizontalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundHorizontal;\n\t\t\t}\n\t\t\telse {\n\t\t\t\thorizontalOffsetMultiplier = horizontalSlideCount > 1 ? ( backgroundWidth - slideWidth ) / ( horizontalSlideCount-1 ) : 0;\n\t\t\t}\n\n\t\t\thorizontalOffset = horizontalOffsetMultiplier * indices.h * -1;\n\n\t\t\tlet slideHeight = this.element.offsetHeight,\n\t\t\t\tverticalSlideCount = verticalSlides.length,\n\t\t\t\tverticalOffsetMultiplier,\n\t\t\t\tverticalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundVertical === 'number' ) {\n\t\t\t\tverticalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundVertical;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tverticalOffsetMultiplier = ( backgroundHeight - slideHeight ) / ( verticalSlideCount-1 );\n\t\t\t}\n\n\t\t\tverticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indices.v : 0;\n\n\t\t\tthis.element.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px';\n\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}\n","\nexport const SLIDES_SELECTOR = '.slides section';\nexport const HORIZONTAL_SLIDES_SELECTOR = '.slides>section';\nexport const VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section';\n\n// Methods that may not be invoked via the postMessage API\nexport const POST_MESSAGE_METHOD_BLACKLIST = /registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/;\n\n// Regex for retrieving the fragment style from a class attribute\nexport const FRAGMENT_STYLE_REGEX = /fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;","import { queryAll, extend, createStyleSheet, matches, closest } from '../utils/util.js'\nimport { FRAGMENT_STYLE_REGEX } from '../utils/constants.js'\n\n// Counter used to generate unique IDs for auto-animated elements\nlet autoAnimateCounter = 0;\n\n/**\n * Automatically animates matching elements across\n * slides with the [data-auto-animate] attribute.\n */\nexport default class AutoAnimate {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Runs an auto-animation between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t */\n\trun( fromSlide, toSlide ) {\n\n\t\t// Clean up after prior animations\n\t\tthis.reset();\n\n\t\tlet allSlides = this.Reveal.getSlides();\n\t\tlet toSlideIndex = allSlides.indexOf( toSlide );\n\t\tlet fromSlideIndex = allSlides.indexOf( fromSlide );\n\n\t\t// Ensure that both slides are auto-animate targets with the same data-auto-animate-id value\n\t\t// (including null if absent on both) and that data-auto-animate-restart isn't set on the\n\t\t// physically latter slide (independent of slide direction)\n\t\tif( fromSlide.hasAttribute( 'data-auto-animate' ) && toSlide.hasAttribute( 'data-auto-animate' )\n\t\t\t\t&& fromSlide.getAttribute( 'data-auto-animate-id' ) === toSlide.getAttribute( 'data-auto-animate-id' ) \n\t\t\t\t&& !( toSlideIndex > fromSlideIndex ? toSlide : fromSlide ).hasAttribute( 'data-auto-animate-restart' ) ) {\n\n\t\t\t// Create a new auto-animate sheet\n\t\t\tthis.autoAnimateStyleSheet = this.autoAnimateStyleSheet || createStyleSheet();\n\n\t\t\tlet animationOptions = this.getAutoAnimateOptions( toSlide );\n\n\t\t\t// Set our starting state\n\t\t\tfromSlide.dataset.autoAnimate = 'pending';\n\t\t\ttoSlide.dataset.autoAnimate = 'pending';\n\n\t\t\t// Flag the navigation direction, needed for fragment buildup\n\t\t\tanimationOptions.slideDirection = toSlideIndex > fromSlideIndex ? 'forward' : 'backward';\n\n\t\t\t// If the from-slide is hidden because it has moved outside\n\t\t\t// the view distance, we need to temporarily show it while\n\t\t\t// measuring\n\t\t\tlet fromSlideIsHidden = fromSlide.style.display === 'none';\n\t\t\tif( fromSlideIsHidden ) fromSlide.style.display = this.Reveal.getConfig().display;\n\n\t\t\t// Inject our auto-animate styles for this transition\n\t\t\tlet css = this.getAutoAnimatableElements( fromSlide, toSlide ).map( elements => {\n\t\t\t\treturn this.autoAnimateElements( elements.from, elements.to, elements.options || {}, animationOptions, autoAnimateCounter++ );\n\t\t\t} );\n\n\t\t\tif( fromSlideIsHidden ) fromSlide.style.display = 'none';\n\n\t\t\t// Animate unmatched elements, if enabled\n\t\t\tif( toSlide.dataset.autoAnimateUnmatched !== 'false' && this.Reveal.getConfig().autoAnimateUnmatched === true ) {\n\n\t\t\t\t// Our default timings for unmatched elements\n\t\t\t\tlet defaultUnmatchedDuration = animationOptions.duration * 0.8,\n\t\t\t\t\tdefaultUnmatchedDelay = animationOptions.duration * 0.2;\n\n\t\t\t\tthis.getUnmatchedAutoAnimateElements( toSlide ).forEach( unmatchedElement => {\n\n\t\t\t\t\tlet unmatchedOptions = this.getAutoAnimateOptions( unmatchedElement, animationOptions );\n\t\t\t\t\tlet id = 'unmatched';\n\n\t\t\t\t\t// If there is a duration or delay set specifically for this\n\t\t\t\t\t// element our unmatched elements should adhere to those\n\t\t\t\t\tif( unmatchedOptions.duration !== animationOptions.duration || unmatchedOptions.delay !== animationOptions.delay ) {\n\t\t\t\t\t\tid = 'unmatched-' + autoAnimateCounter++;\n\t\t\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"${id}\"] { transition: opacity ${unmatchedOptions.duration}s ease ${unmatchedOptions.delay}s; }` );\n\t\t\t\t\t}\n\n\t\t\t\t\tunmatchedElement.dataset.autoAnimateTarget = id;\n\n\t\t\t\t}, this );\n\n\t\t\t\t// Our default transition for unmatched elements\n\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"unmatched\"] { transition: opacity ${defaultUnmatchedDuration}s ease ${defaultUnmatchedDelay}s; }` );\n\n\t\t\t}\n\n\t\t\t// Setting the whole chunk of CSS at once is the most\n\t\t\t// efficient way to do this. Using sheet.insertRule\n\t\t\t// is multiple factors slower.\n\t\t\tthis.autoAnimateStyleSheet.innerHTML = css.join( '' );\n\n\t\t\t// Start the animation next cycle\n\t\t\trequestAnimationFrame( () => {\n\t\t\t\tif( this.autoAnimateStyleSheet ) {\n\t\t\t\t\t// This forces our newly injected styles to be applied in Firefox\n\t\t\t\t\tgetComputedStyle( this.autoAnimateStyleSheet ).fontWeight;\n\n\t\t\t\t\ttoSlide.dataset.autoAnimate = 'running';\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'autoanimate',\n\t\t\t\tdata: {\n\t\t\t\t\tfromSlide,\n\t\t\t\t\ttoSlide,\n\t\t\t\t\tsheet: this.autoAnimateStyleSheet\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Rolls back all changes that we've made to the DOM so\n\t * that as part of animating.\n\t */\n\treset() {\n\n\t\t// Reset slides\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate]:not([data-auto-animate=\"\"])' ).forEach( element => {\n\t\t\telement.dataset.autoAnimate = '';\n\t\t} );\n\n\t\t// Reset elements\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate-target]' ).forEach( element => {\n\t\t\tdelete element.dataset.autoAnimateTarget;\n\t\t} );\n\n\t\t// Remove the animation sheet\n\t\tif( this.autoAnimateStyleSheet && this.autoAnimateStyleSheet.parentNode ) {\n\t\t\tthis.autoAnimateStyleSheet.parentNode.removeChild( this.autoAnimateStyleSheet );\n\t\t\tthis.autoAnimateStyleSheet = null;\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a FLIP animation where the `to` element starts out\n\t * in the `from` element position and animates to its original\n\t * state.\n\t *\n\t * @param {HTMLElement} from\n\t * @param {HTMLElement} to\n\t * @param {Object} elementOptions Options for this element pair\n\t * @param {Object} animationOptions Options set at the slide level\n\t * @param {String} id Unique ID that we can use to identify this\n\t * auto-animate element in the DOM\n\t */\n\tautoAnimateElements( from, to, elementOptions, animationOptions, id ) {\n\n\t\t// 'from' elements are given a data-auto-animate-target with no value,\n\t\t// 'to' elements are are given a data-auto-animate-target with an ID\n\t\tfrom.dataset.autoAnimateTarget = '';\n\t\tto.dataset.autoAnimateTarget = id;\n\n\t\t// Each element may override any of the auto-animate options\n\t\t// like transition easing, duration and delay via data-attributes\n\t\tlet options = this.getAutoAnimateOptions( to, animationOptions );\n\n\t\t// If we're using a custom element matcher the element options\n\t\t// may contain additional transition overrides\n\t\tif( typeof elementOptions.delay !== 'undefined' ) options.delay = elementOptions.delay;\n\t\tif( typeof elementOptions.duration !== 'undefined' ) options.duration = elementOptions.duration;\n\t\tif( typeof elementOptions.easing !== 'undefined' ) options.easing = elementOptions.easing;\n\n\t\tlet fromProps = this.getAutoAnimatableProperties( 'from', from, elementOptions ),\n\t\t\ttoProps = this.getAutoAnimatableProperties( 'to', to, elementOptions );\n\n\t\t// Maintain fragment visibility for matching elements when\n\t\t// we're navigating forwards, this way the viewer won't need\n\t\t// to step through the same fragments twice\n\t\tif( to.classList.contains( 'fragment' ) ) {\n\n\t\t\t// Don't auto-animate the opacity of fragments to avoid\n\t\t\t// conflicts with fragment animations\n\t\t\tdelete toProps.styles['opacity'];\n\n\t\t\tif( from.classList.contains( 'fragment' ) ) {\n\n\t\t\t\tlet fromFragmentStyle = ( from.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\t\t\t\tlet toFragmentStyle = ( to.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\n\t\t\t\t// Only skip the fragment if the fragment animation style\n\t\t\t\t// remains unchanged\n\t\t\t\tif( fromFragmentStyle === toFragmentStyle && animationOptions.slideDirection === 'forward' ) {\n\t\t\t\t\tto.classList.add( 'visible', 'disabled' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// If translation and/or scaling are enabled, css transform\n\t\t// the 'to' element so that it matches the position and size\n\t\t// of the 'from' element\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\n\t\t\tlet presentationScale = this.Reveal.getScale();\n\n\t\t\tlet delta = {\n\t\t\t\tx: ( fromProps.x - toProps.x ) / presentationScale,\n\t\t\t\ty: ( fromProps.y - toProps.y ) / presentationScale,\n\t\t\t\tscaleX: fromProps.width / toProps.width,\n\t\t\t\tscaleY: fromProps.height / toProps.height\n\t\t\t};\n\n\t\t\t// Limit decimal points to avoid 0.0001px blur and stutter\n\t\t\tdelta.x = Math.round( delta.x * 1000 ) / 1000;\n\t\t\tdelta.y = Math.round( delta.y * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\n\t\t\tlet translate = elementOptions.translate !== false && ( delta.x !== 0 || delta.y !== 0 ),\n\t\t\t\tscale = elementOptions.scale !== false && ( delta.scaleX !== 0 || delta.scaleY !== 0 );\n\n\t\t\t// No need to transform if nothing's changed\n\t\t\tif( translate || scale ) {\n\n\t\t\t\tlet transform = [];\n\n\t\t\t\tif( translate ) transform.push( `translate(${delta.x}px, ${delta.y}px)` );\n\t\t\t\tif( scale ) transform.push( `scale(${delta.scaleX}, ${delta.scaleY})` );\n\n\t\t\t\tfromProps.styles['transform'] = transform.join( ' ' );\n\t\t\t\tfromProps.styles['transform-origin'] = 'top left';\n\n\t\t\t\ttoProps.styles['transform'] = 'none';\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Delete all unchanged 'to' styles\n\t\tfor( let propertyName in toProps.styles ) {\n\t\t\tconst toValue = toProps.styles[propertyName];\n\t\t\tconst fromValue = fromProps.styles[propertyName];\n\n\t\t\tif( toValue === fromValue ) {\n\t\t\t\tdelete toProps.styles[propertyName];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// If these property values were set via a custom matcher providing\n\t\t\t\t// an explicit 'from' and/or 'to' value, we always inject those values.\n\t\t\t\tif( toValue.explicitValue === true ) {\n\t\t\t\t\ttoProps.styles[propertyName] = toValue.value;\n\t\t\t\t}\n\n\t\t\t\tif( fromValue.explicitValue === true ) {\n\t\t\t\t\tfromProps.styles[propertyName] = fromValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet css = '';\n\n\t\tlet toStyleProperties = Object.keys( toProps.styles );\n\n\t\t// Only create animate this element IF at least one style\n\t\t// property has changed\n\t\tif( toStyleProperties.length > 0 ) {\n\n\t\t\t// Instantly move to the 'from' state\n\t\t\tfromProps.styles['transition'] = 'none';\n\n\t\t\t// Animate towards the 'to' state\n\t\t\ttoProps.styles['transition'] = `all ${options.duration}s ${options.easing} ${options.delay}s`;\n\t\t\ttoProps.styles['transition-property'] = toStyleProperties.join( ', ' );\n\t\t\ttoProps.styles['will-change'] = toStyleProperties.join( ', ' );\n\n\t\t\t// Build up our custom CSS. We need to override inline styles\n\t\t\t// so we need to make our styles vErY IMPORTANT!1!!\n\t\t\tlet fromCSS = Object.keys( fromProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + fromProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tlet toCSS = Object.keys( toProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + toProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tcss = \t'[data-auto-animate-target=\"'+ id +'\"] {'+ fromCSS +'}' +\n\t\t\t\t\t'[data-auto-animate=\"running\"] [data-auto-animate-target=\"'+ id +'\"] {'+ toCSS +'}';\n\n\t\t}\n\n\t\treturn css;\n\n\t}\n\n\t/**\n\t * Returns the auto-animate options for the given element.\n\t *\n\t * @param {HTMLElement} element Element to pick up options\n\t * from, either a slide or an animation target\n\t * @param {Object} [inheritedOptions] Optional set of existing\n\t * options\n\t */\n\tgetAutoAnimateOptions( element, inheritedOptions ) {\n\n\t\tlet options = {\n\t\t\teasing: this.Reveal.getConfig().autoAnimateEasing,\n\t\t\tduration: this.Reveal.getConfig().autoAnimateDuration,\n\t\t\tdelay: 0\n\t\t};\n\n\t\toptions = extend( options, inheritedOptions );\n\n\t\t// Inherit options from parent elements\n\t\tif( element.parentNode ) {\n\t\t\tlet autoAnimatedParent = closest( element.parentNode, '[data-auto-animate-target]' );\n\t\t\tif( autoAnimatedParent ) {\n\t\t\t\toptions = this.getAutoAnimateOptions( autoAnimatedParent, options );\n\t\t\t}\n\t\t}\n\n\t\tif( element.dataset.autoAnimateEasing ) {\n\t\t\toptions.easing = element.dataset.autoAnimateEasing;\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDuration ) {\n\t\t\toptions.duration = parseFloat( element.dataset.autoAnimateDuration );\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDelay ) {\n\t\t\toptions.delay = parseFloat( element.dataset.autoAnimateDelay );\n\t\t}\n\n\t\treturn options;\n\n\t}\n\n\t/**\n\t * Returns an object containing all of the properties\n\t * that can be auto-animated for the given element and\n\t * their current computed values.\n\t *\n\t * @param {String} direction 'from' or 'to'\n\t */\n\tgetAutoAnimatableProperties( direction, element, elementOptions ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\tlet properties = { styles: [] };\n\n\t\t// Position and size\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\t\t\tlet bounds;\n\n\t\t\t// Custom auto-animate may optionally return a custom tailored\n\t\t\t// measurement function\n\t\t\tif( typeof elementOptions.measure === 'function' ) {\n\t\t\t\tbounds = elementOptions.measure( element );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( config.center ) {\n\t\t\t\t\t// More precise, but breaks when used in combination\n\t\t\t\t\t// with zoom for scaling the deck ¯\\_(ツ)_/¯\n\t\t\t\t\tbounds = element.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet scale = this.Reveal.getScale();\n\t\t\t\t\tbounds = {\n\t\t\t\t\t\tx: element.offsetLeft * scale,\n\t\t\t\t\t\ty: element.offsetTop * scale,\n\t\t\t\t\t\twidth: element.offsetWidth * scale,\n\t\t\t\t\t\theight: element.offsetHeight * scale\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tproperties.x = bounds.x;\n\t\t\tproperties.y = bounds.y;\n\t\t\tproperties.width = bounds.width;\n\t\t\tproperties.height = bounds.height;\n\t\t}\n\n\t\tconst computedStyles = getComputedStyle( element );\n\n\t\t// CSS styles\n\t\t( elementOptions.styles || config.autoAnimateStyles ).forEach( style => {\n\t\t\tlet value;\n\n\t\t\t// `style` is either the property name directly, or an object\n\t\t\t// definition of a style property\n\t\t\tif( typeof style === 'string' ) style = { property: style };\n\n\t\t\tif( typeof style.from !== 'undefined' && direction === 'from' ) {\n\t\t\t\tvalue = { value: style.from, explicitValue: true };\n\t\t\t}\n\t\t\telse if( typeof style.to !== 'undefined' && direction === 'to' ) {\n\t\t\t\tvalue = { value: style.to, explicitValue: true };\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalue = computedStyles[style.property];\n\t\t\t}\n\n\t\t\tif( value !== '' ) {\n\t\t\t\tproperties.styles[style.property] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn properties;\n\n\t}\n\n\t/**\n\t * Get a list of all element pairs that we can animate\n\t * between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t *\n\t * @return {Array} Each value is an array where [0] is\n\t * the element we're animating from and [1] is the\n\t * element we're animating to\n\t */\n\tgetAutoAnimatableElements( fromSlide, toSlide ) {\n\n\t\tlet matcher = typeof this.Reveal.getConfig().autoAnimateMatcher === 'function' ? this.Reveal.getConfig().autoAnimateMatcher : this.getAutoAnimatePairs;\n\n\t\tlet pairs = matcher.call( this, fromSlide, toSlide );\n\n\t\tlet reserved = [];\n\n\t\t// Remove duplicate pairs\n\t\treturn pairs.filter( ( pair, index ) => {\n\t\t\tif( reserved.indexOf( pair.to ) === -1 ) {\n\t\t\t\treserved.push( pair.to );\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Identifies matching elements between slides.\n\t *\n\t * You can specify a custom matcher function by using\n\t * the `autoAnimateMatcher` config option.\n\t */\n\tgetAutoAnimatePairs( fromSlide, toSlide ) {\n\n\t\tlet pairs = [];\n\n\t\tconst codeNodes = 'pre';\n\t\tconst textNodes = 'h1, h2, h3, h4, h5, h6, p, li';\n\t\tconst mediaNodes = 'img, video, iframe';\n\n\t\t// Eplicit matches via data-id\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, '[data-id]', node => {\n\t\t\treturn node.nodeName + ':::' + node.getAttribute( 'data-id' );\n\t\t} );\n\n\t\t// Text\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, textNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\t// Media\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, mediaNodes, node => {\n\t\t\treturn node.nodeName + ':::' + ( node.getAttribute( 'src' ) || node.getAttribute( 'data-src' ) );\n\t\t} );\n\n\t\t// Code\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, codeNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\tpairs.forEach( pair => {\n\n\t\t\t// Disable scale transformations on text nodes, we transition\n\t\t\t// each individual text property instead\n\t\t\tif( matches( pair.from, textNodes ) ) {\n\t\t\t\tpair.options = { scale: false };\n\t\t\t}\n\t\t\t// Animate individual lines of code\n\t\t\telse if( matches( pair.from, codeNodes ) ) {\n\n\t\t\t\t// Transition the code block's width and height instead of scaling\n\t\t\t\t// to prevent its content from being squished\n\t\t\t\tpair.options = { scale: false, styles: [ 'width', 'height' ] };\n\n\t\t\t\t// Lines of code\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-code', node => {\n\t\t\t\t\treturn node.textContent;\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t\t// Line numbers\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-line[data-line-number]', node => {\n\t\t\t\t\treturn node.getAttribute( 'data-line-number' );\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [ 'width' ],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\treturn pairs;\n\n\t}\n\n\t/**\n\t * Helper method which returns a bounding box based on\n\t * the given elements offset coordinates.\n\t *\n\t * @param {HTMLElement} element\n\t * @return {Object} x, y, width, height\n\t */\n\tgetLocalBoundingBox( element ) {\n\n\t\tconst presentationScale = this.Reveal.getScale();\n\n\t\treturn {\n\t\t\tx: Math.round( ( element.offsetLeft * presentationScale ) * 100 ) / 100,\n\t\t\ty: Math.round( ( element.offsetTop * presentationScale ) * 100 ) / 100,\n\t\t\twidth: Math.round( ( element.offsetWidth * presentationScale ) * 100 ) / 100,\n\t\t\theight: Math.round( ( element.offsetHeight * presentationScale ) * 100 ) / 100\n\t\t};\n\n\t}\n\n\t/**\n\t * Finds matching elements between two slides.\n\t *\n\t * @param {Array} pairs \tList of pairs to push matches to\n\t * @param {HTMLElement} fromScope Scope within the from element exists\n\t * @param {HTMLElement} toScope Scope within the to element exists\n\t * @param {String} selector CSS selector of the element to match\n\t * @param {Function} serializer A function that accepts an element and returns\n\t * a stringified ID based on its contents\n\t * @param {Object} animationOptions Optional config options for this pair\n\t */\n\tfindAutoAnimateMatches( pairs, fromScope, toScope, selector, serializer, animationOptions ) {\n\n\t\tlet fromMatches = {};\n\t\tlet toMatches = {};\n\n\t\t[].slice.call( fromScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\tif( typeof key === 'string' && key.length ) {\n\t\t\t\tfromMatches[key] = fromMatches[key] || [];\n\t\t\t\tfromMatches[key].push( element );\n\t\t\t}\n\t\t} );\n\n\t\t[].slice.call( toScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\ttoMatches[key] = toMatches[key] || [];\n\t\t\ttoMatches[key].push( element );\n\n\t\t\tlet fromElement;\n\n\t\t\t// Retrieve the 'from' element\n\t\t\tif( fromMatches[key] ) {\n\t\t\t\tconst pimaryIndex = toMatches[key].length - 1;\n\t\t\t\tconst secondaryIndex = fromMatches[key].length - 1;\n\n\t\t\t\t// If there are multiple identical from elements, retrieve\n\t\t\t\t// the one at the same index as our to-element.\n\t\t\t\tif( fromMatches[key][ pimaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ pimaryIndex ];\n\t\t\t\t\tfromMatches[key][ pimaryIndex ] = null;\n\t\t\t\t}\n\t\t\t\t// If there are no matching from-elements at the same index,\n\t\t\t\t// use the last one.\n\t\t\t\telse if( fromMatches[key][ secondaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ secondaryIndex ];\n\t\t\t\t\tfromMatches[key][ secondaryIndex ] = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we've got a matching pair, push it to the list of pairs\n\t\t\tif( fromElement ) {\n\t\t\t\tpairs.push({\n\t\t\t\t\tfrom: fromElement,\n\t\t\t\t\tto: element,\n\t\t\t\t\toptions: animationOptions\n\t\t\t\t});\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns a all elements within the given scope that should\n\t * be considered unmatched in an auto-animate transition. If\n\t * fading of unmatched elements is turned on, these elements\n\t * will fade when going between auto-animate slides.\n\t *\n\t * Note that parents of auto-animate targets are NOT considerd\n\t * unmatched since fading them would break the auto-animation.\n\t *\n\t * @param {HTMLElement} rootElement\n\t * @return {Array}\n\t */\n\tgetUnmatchedAutoAnimateElements( rootElement ) {\n\n\t\treturn [].slice.call( rootElement.children ).reduce( ( result, element ) => {\n\n\t\t\tconst containsAnimatedElements = element.querySelector( '[data-auto-animate-target]' );\n\n\t\t\t// The element is unmatched if\n\t\t\t// - It is not an auto-animate target\n\t\t\t// - It does not contain any auto-animate targets\n\t\t\tif( !element.hasAttribute( 'data-auto-animate-target' ) && !containsAnimatedElements ) {\n\t\t\t\tresult.push( element );\n\t\t\t}\n\n\t\t\tif( element.querySelector( '[data-auto-animate-target]' ) ) {\n\t\t\t\tresult = result.concat( this.getUnmatchedAutoAnimateElements( element ) );\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}, [] );\n\n\t}\n\n}\n","import { extend, queryAll } from '../utils/util.js'\n\n/**\n * Handles sorting and navigation of slide fragments.\n * Fragments are elements within a slide that are\n * revealed/animated incrementally.\n */\nexport default class Fragments {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.fragments === false ) {\n\t\t\tthis.disable();\n\t\t}\n\t\telse if( oldConfig.fragments === false ) {\n\t\t\tthis.enable();\n\t\t}\n\n\t}\n\n\t/**\n\t * If fragments are disabled in the deck, they should all be\n\t * visible rather than stepped through.\n\t */\n\tdisable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.add( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Reverse of #disable(). Only called if fragments have\n\t * previously been disabled.\n\t */\n\tenable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.remove( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns an object describing the available fragment\n\t * directions.\n\t *\n\t * @return {{prev: boolean, next: boolean}}\n\t */\n\tavailableRoutes() {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\t\t\tlet fragments = currentSlide.querySelectorAll( '.fragment:not(.disabled)' );\n\t\t\tlet hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.disabled):not(.visible)' );\n\n\t\t\treturn {\n\t\t\t\tprev: fragments.length - hiddenFragments.length > 0,\n\t\t\t\tnext: !!hiddenFragments.length\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\treturn { prev: false, next: false };\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a sorted fragments list, ordered by an increasing\n\t * \"data-fragment-index\" attribute.\n\t *\n\t * Fragments will be revealed in the order that they are returned by\n\t * this function, so you can use the index attributes to control the\n\t * order of fragment appearance.\n\t *\n\t * To maintain a sensible default fragment order, fragments are presumed\n\t * to be passed in document order. This function adds a \"fragment-index\"\n\t * attribute to each node if such an attribute is not already present,\n\t * and sets that attribute to an integer value which is the position of\n\t * the fragment within the fragments list.\n\t *\n\t * @param {object[]|*} fragments\n\t * @param {boolean} grouped If true the returned array will contain\n\t * nested arrays for all fragments with the same index\n\t * @return {object[]} sorted Sorted array of fragments\n\t */\n\tsort( fragments, grouped = false ) {\n\n\t\tfragments = Array.from( fragments );\n\n\t\tlet ordered = [],\n\t\t\tunordered = [],\n\t\t\tsorted = [];\n\n\t\t// Group ordered and unordered elements\n\t\tfragments.forEach( fragment => {\n\t\t\tif( fragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\tlet index = parseInt( fragment.getAttribute( 'data-fragment-index' ), 10 );\n\n\t\t\t\tif( !ordered[index] ) {\n\t\t\t\t\tordered[index] = [];\n\t\t\t\t}\n\n\t\t\t\tordered[index].push( fragment );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tunordered.push( [ fragment ] );\n\t\t\t}\n\t\t} );\n\n\t\t// Append fragments without explicit indices in their\n\t\t// DOM order\n\t\tordered = ordered.concat( unordered );\n\n\t\t// Manually count the index up per group to ensure there\n\t\t// are no gaps\n\t\tlet index = 0;\n\n\t\t// Push all fragments in their sorted order to an array,\n\t\t// this flattens the groups\n\t\tordered.forEach( group => {\n\t\t\tgroup.forEach( fragment => {\n\t\t\t\tsorted.push( fragment );\n\t\t\t\tfragment.setAttribute( 'data-fragment-index', index );\n\t\t\t} );\n\n\t\t\tindex ++;\n\t\t} );\n\n\t\treturn grouped === true ? ordered : sorted;\n\n\t}\n\n\t/**\n\t * Sorts and formats all of fragments in the\n\t * presentation.\n\t */\n\tsortAll() {\n\n\t\tthis.Reveal.getHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tlet verticalSlides = queryAll( horizontalSlide, 'section' );\n\t\t\tverticalSlides.forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tthis.sort( verticalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\t}, this );\n\n\t\t\tif( verticalSlides.length === 0 ) this.sort( horizontalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Refreshes the fragments on the current slide so that they\n\t * have the appropriate classes (.visible + .current-fragment).\n\t *\n\t * @param {number} [index] The index of the current fragment\n\t * @param {array} [fragments] Array containing all fragments\n\t * in the current slide\n\t *\n\t * @return {{shown: array, hidden: array}}\n\t */\n\tupdate( index, fragments ) {\n\n\t\tlet changedFragments = {\n\t\t\tshown: [],\n\t\t\thidden: []\n\t\t};\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tfragments = fragments || this.sort( currentSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\tif( fragments.length ) {\n\n\t\t\t\tlet maxIndex = 0;\n\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet currentFragment = this.sort( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();\n\t\t\t\t\tif( currentFragment ) {\n\t\t\t\t\t\tindex = parseInt( currentFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tArray.from( fragments ).forEach( ( el, i ) => {\n\n\t\t\t\t\tif( el.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\t\ti = parseInt( el.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t\t}\n\n\t\t\t\t\tmaxIndex = Math.max( maxIndex, i );\n\n\t\t\t\t\t// Visible fragments\n\t\t\t\t\tif( i <= index ) {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.add( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( i === index ) {\n\t\t\t\t\t\t\t// Announce the fragments one by one to the Screen Reader\n\t\t\t\t\t\t\tthis.Reveal.announceStatus( this.Reveal.getStatusText( el ) );\n\n\t\t\t\t\t\t\tel.classList.add( 'current-fragment' );\n\t\t\t\t\t\t\tthis.Reveal.slideContent.startEmbeddedContent( el );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( !wasVisible ) {\n\t\t\t\t\t\t\tchangedFragments.shown.push( el )\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'visible',\n\t\t\t\t\t\t\t\tbubbles: false\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\t// Hidden fragments\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.remove( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( wasVisible ) {\n\t\t\t\t\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( el );\n\t\t\t\t\t\t\tchangedFragments.hidden.push( el );\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t// Write the current fragment index to the slide
.\n\t\t\t\t// This can be used by end users to apply styles based on\n\t\t\t\t// the current fragment index.\n\t\t\t\tindex = typeof index === 'number' ? index : -1;\n\t\t\t\tindex = Math.max( Math.min( index, maxIndex ), -1 );\n\t\t\t\tcurrentSlide.setAttribute( 'data-fragment', index );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn changedFragments;\n\n\t}\n\n\t/**\n\t * Formats the fragments on the given slide so that they have\n\t * valid indices. Call this if fragments are changed in the DOM\n\t * after reveal.js has already initialized.\n\t *\n\t * @param {HTMLElement} slide\n\t * @return {Array} a list of the HTML fragments that were synced\n\t */\n\tsync( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\treturn this.sort( slide.querySelectorAll( '.fragment' ) );\n\n\t}\n\n\t/**\n\t * Navigate to the specified slide fragment.\n\t *\n\t * @param {?number} index The index of the fragment that\n\t * should be shown, -1 means all are invisible\n\t * @param {number} offset Integer offset to apply to the\n\t * fragment index\n\t *\n\t * @return {boolean} true if a change was made in any\n\t * fragments visibility as part of this call\n\t */\n\tgoto( index, offset = 0 ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tlet fragments = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled)' ) );\n\t\t\tif( fragments.length ) {\n\n\t\t\t\t// If no index is specified, find the current\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet lastVisibleFragment = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled).visible' ) ).pop();\n\n\t\t\t\t\tif( lastVisibleFragment ) {\n\t\t\t\t\t\tindex = parseInt( lastVisibleFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tindex = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply the offset if there is one\n\t\t\t\tindex += offset;\n\n\t\t\t\tlet changedFragments = this.update( index, fragments );\n\n\t\t\t\tif( changedFragments.hidden.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmenthidden',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.hidden[0],\n\t\t\t\t\t\t\tfragments: changedFragments.hidden\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif( changedFragments.shown.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmentshown',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.shown[0],\n\t\t\t\t\t\t\tfragments: changedFragments.shown\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.Reveal.controls.update();\n\t\t\t\tthis.Reveal.progress.update();\n\n\t\t\t\tif( this.Reveal.getConfig().fragmentInURL ) {\n\t\t\t\t\tthis.Reveal.location.writeURL();\n\t\t\t\t}\n\n\t\t\t\treturn !!( changedFragments.shown.length || changedFragments.hidden.length );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Navigate to the next slide fragment.\n\t *\n\t * @return {boolean} true if there was a next fragment,\n\t * false otherwise\n\t */\n\tnext() {\n\n\t\treturn this.goto( null, 1 );\n\n\t}\n\n\t/**\n\t * Navigate to the previous slide fragment.\n\t *\n\t * @return {boolean} true if there was a previous fragment,\n\t * false otherwise\n\t */\n\tprev() {\n\n\t\treturn this.goto( null, -1 );\n\n\t}\n\n}","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { extend, queryAll, transformElement } from '../utils/util.js'\n\n/**\n * Handles all logic related to the overview mode\n * (birds-eye view of all slides).\n */\nexport default class Overview {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.active = false;\n\n\t\tthis.onSlideClicked = this.onSlideClicked.bind( this );\n\n\t}\n\n\t/**\n\t * Displays the overview of slides (quick nav) by scaling\n\t * down and arranging all slide elements.\n\t */\n\tactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview && !this.isActive() ) {\n\n\t\t\tthis.active = true;\n\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview' );\n\n\t\t\t// Don't auto-slide while in overview mode\n\t\t\tthis.Reveal.cancelAutoSlide();\n\n\t\t\t// Move the backgrounds element into the slide container to\n\t\t\t// that the same scaling is applied\n\t\t\tthis.Reveal.getSlidesElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clicking on an overview slide navigates to it\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\tif( !slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\tslide.addEventListener( 'click', this.onSlideClicked, true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Calculate slide sizes\n\t\t\tconst margin = 70;\n\t\t\tconst slideSize = this.Reveal.getComputedSlideSize();\n\t\t\tthis.overviewSlideWidth = slideSize.width + margin;\n\t\t\tthis.overviewSlideHeight = slideSize.height + margin;\n\n\t\t\t// Reverse in RTL mode\n\t\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\t\tthis.overviewSlideWidth = -this.overviewSlideWidth;\n\t\t\t}\n\n\t\t\tthis.Reveal.updateSlidesVisibility();\n\n\t\t\tthis.layout();\n\t\t\tthis.update();\n\n\t\t\tthis.Reveal.layout();\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\t// Notify observers of the overview showing\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewshown',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uses CSS transforms to position all slides in a grid for\n\t * display inside of the overview mode.\n\t */\n\tlayout() {\n\n\t\t// Layout slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( ( hslide, h ) => {\n\t\t\thslide.setAttribute( 'data-index-h', h );\n\t\t\ttransformElement( hslide, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tif( hslide.classList.contains( 'stack' ) ) {\n\n\t\t\t\tqueryAll( hslide, 'section' ).forEach( ( vslide, v ) => {\n\t\t\t\t\tvslide.setAttribute( 'data-index-h', h );\n\t\t\t\t\tvslide.setAttribute( 'data-index-v', v );\n\n\t\t\t\t\ttransformElement( vslide, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\n\t\t// Layout slide backgrounds\n\t\tArray.from( this.Reveal.getBackgroundsElement().childNodes ).forEach( ( hbackground, h ) => {\n\t\t\ttransformElement( hbackground, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tqueryAll( hbackground, '.slide-background' ).forEach( ( vbackground, v ) => {\n\t\t\t\ttransformElement( vbackground, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Moves the overview viewport to the current slides.\n\t * Called each time the current slide changes.\n\t */\n\tupdate() {\n\n\t\tconst vmin = Math.min( window.innerWidth, window.innerHeight );\n\t\tconst scale = Math.max( vmin / 5, 150 ) / vmin;\n\t\tconst indices = this.Reveal.getIndices();\n\n\t\tthis.Reveal.transformSlides( {\n\t\t\toverview: [\n\t\t\t\t'scale('+ scale +')',\n\t\t\t\t'translateX('+ ( -indices.h * this.overviewSlideWidth ) +'px)',\n\t\t\t\t'translateY('+ ( -indices.v * this.overviewSlideHeight ) +'px)'\n\t\t\t].join( ' ' )\n\t\t} );\n\n\t}\n\n\t/**\n\t * Exits the slide overview and enters the currently\n\t * active slide.\n\t */\n\tdeactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview ) {\n\n\t\t\tthis.active = false;\n\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview' );\n\n\t\t\t// Temporarily add a class so that transitions can do different things\n\t\t\t// depending on whether they are exiting/entering overview, or just\n\t\t\t// moving from slide to slide\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview-deactivating' );\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview-deactivating' );\n\t\t\t}, 1 );\n\n\t\t\t// Move the background element back out\n\t\t\tthis.Reveal.getRevealElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clean up changes made to slides\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\ttransformElement( slide, '' );\n\n\t\t\t\tslide.removeEventListener( 'click', this.onSlideClicked, true );\n\t\t\t} );\n\n\t\t\t// Clean up changes made to backgrounds\n\t\t\tqueryAll( this.Reveal.getBackgroundsElement(), '.slide-background' ).forEach( background => {\n\t\t\t\ttransformElement( background, '' );\n\t\t\t} );\n\n\t\t\tthis.Reveal.transformSlides( { overview: '' } );\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\tthis.Reveal.slide( indices.h, indices.v );\n\t\t\tthis.Reveal.layout();\n\t\t\tthis.Reveal.cueAutoSlide();\n\n\t\t\t// Notify observers of the overview hiding\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewhidden',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the slide overview mode on and off.\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 * overview is open, false means it's closed.\n\t */\n\ttoggle( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? this.activate() : this.deactivate();\n\t\t}\n\t\telse {\n\t\t\tthis.isActive() ? this.deactivate() : this.activate();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the overview is currently active.\n\t *\n\t * @return {Boolean} true if the overview is active,\n\t * false otherwise\n\t */\n\tisActive() {\n\n\t\treturn this.active;\n\n\t}\n\n\t/**\n\t * Invoked when a slide is and we're in the overview.\n\t *\n\t * @param {object} event\n\t */\n\tonSlideClicked( event ) {\n\n\t\tif( this.isActive() ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tlet element = event.target;\n\n\t\t\twhile( element && !element.nodeName.match( /section/gi ) ) {\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\tif( element && !element.classList.contains( 'disabled' ) ) {\n\n\t\t\t\tthis.deactivate();\n\n\t\t\t\tif( element.nodeName.match( /section/gi ) ) {\n\t\t\t\t\tlet h = parseInt( element.getAttribute( 'data-index-h' ), 10 ),\n\t\t\t\t\t\tv = parseInt( element.getAttribute( 'data-index-v' ), 10 );\n\n\t\t\t\t\tthis.Reveal.slide( h, v );\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t}\n\n}","import { enterFullscreen } from '../utils/util.js'\n\n/**\n * Handles all reveal.js keyboard interactions.\n */\nexport default class Keyboard {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// A key:value map of keyboard keys and descriptions of\n\t\t// the actions they trigger\n\t\tthis.shortcuts = {};\n\n\t\t// Holds custom key code mappings\n\t\tthis.bindings = {};\n\n\t\tthis.onDocumentKeyDown = this.onDocumentKeyDown.bind( this );\n\t\tthis.onDocumentKeyPress = this.onDocumentKeyPress.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.navigationMode === 'linear' ) {\n\t\t\tthis.shortcuts['→ , ↓ , SPACE , N , L , J'] = 'Next slide';\n\t\t\tthis.shortcuts['← , ↑ , P , H , K'] = 'Previous slide';\n\t\t}\n\t\telse {\n\t\t\tthis.shortcuts['N , SPACE'] = 'Next slide';\n\t\t\tthis.shortcuts['P , Shift SPACE'] = 'Previous slide';\n\t\t\tthis.shortcuts['← , H'] = 'Navigate left';\n\t\t\tthis.shortcuts['→ , L'] = 'Navigate right';\n\t\t\tthis.shortcuts['↑ , K'] = 'Navigate up';\n\t\t\tthis.shortcuts['↓ , J'] = 'Navigate down';\n\t\t}\n\n\t\tthis.shortcuts['Alt + ←/↑/→/↓'] = 'Navigate without fragments';\n\t\tthis.shortcuts['Shift + ←/↑/→/↓'] = 'Jump to first/last slide';\n\t\tthis.shortcuts['B , .'] = 'Pause';\n\t\tthis.shortcuts['F'] = 'Fullscreen';\n\t\tthis.shortcuts['ESC, O'] = 'Slide overview';\n\n\t}\n\n\t/**\n\t * Starts listening for keyboard events.\n\t */\n\tbind() {\n\n\t\tdocument.addEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.addEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Stops listening for keyboard events.\n\t */\n\tunbind() {\n\n\t\tdocument.removeEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.removeEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Add a custom key binding with optional description to\n\t * be added to the help screen.\n\t */\n\taddKeyBinding( binding, callback ) {\n\n\t\tif( typeof binding === 'object' && binding.keyCode ) {\n\t\t\tthis.bindings[binding.keyCode] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: binding.key,\n\t\t\t\tdescription: binding.description\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tthis.bindings[binding] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: null,\n\t\t\t\tdescription: null\n\t\t\t};\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes the specified custom key binding.\n\t */\n\tremoveKeyBinding( keyCode ) {\n\n\t\tdelete this.bindings[keyCode];\n\n\t}\n\n\t/**\n\t * Programmatically triggers a keyboard event\n\t *\n\t * @param {int} keyCode\n\t */\n\ttriggerKey( keyCode ) {\n\n\t\tthis.onDocumentKeyDown( { keyCode } );\n\n\t}\n\n\t/**\n\t * Registers a new shortcut to include in the help overlay\n\t *\n\t * @param {String} key\n\t * @param {String} value\n\t */\n\tregisterKeyboardShortcut( key, value ) {\n\n\t\tthis.shortcuts[key] = value;\n\n\t}\n\n\tgetShortcuts() {\n\n\t\treturn this.shortcuts;\n\n\t}\n\n\tgetBindings() {\n\n\t\treturn this.bindings;\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keypress' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyPress( event ) {\n\n\t\t// Check if the pressed key is question mark\n\t\tif( event.shiftKey && event.charCode === 63 ) {\n\t\t\tthis.Reveal.toggleHelp();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keydown' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyDown( event ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// If there's a condition specified and it returns false,\n\t\t// ignore this event\n\t\tif( typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If keyboardCondition is set, only capture keyboard events\n\t\t// for embedded decks when they are focused\n\t\tif( config.keyboardCondition === 'focused' && !this.Reveal.isFocused() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Shorthand\n\t\tlet keyCode = event.keyCode;\n\n\t\t// Remember if auto-sliding was paused so we can toggle it\n\t\tlet autoSlideWasPaused = !this.Reveal.isAutoSliding();\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\t// Is there a focused element that could be using the keyboard?\n\t\tlet activeElementIsCE = document.activeElement && document.activeElement.isContentEditable === true;\n\t\tlet activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test( document.activeElement.tagName );\n\t\tlet activeElementIsNotes = document.activeElement && document.activeElement.className && /speaker-notes/i.test( document.activeElement.className);\n\n\t\t// Whitelist certain modifiers for slide navigation shortcuts\n\t\tlet isNavigationKey = [32, 37, 38, 39, 40, 78, 80].indexOf( event.keyCode ) !== -1;\n\n\t\t// Prevent all other events when a modifier is pressed\n\t\tlet unusedModifier = \t!( isNavigationKey && event.shiftKey || event.altKey ) &&\n\t\t\t\t\t\t\t\t( event.shiftKey || event.altKey || event.ctrlKey || event.metaKey );\n\n\t\t// Disregard the event if there's a focused element or a\n\t\t// keyboard modifier key is present\n\t\tif( activeElementIsCE || activeElementIsInput || activeElementIsNotes || unusedModifier ) return;\n\n\t\t// While paused only allow resume keyboard events; 'b', 'v', '.'\n\t\tlet resumeKeyCodes = [66,86,190,191];\n\t\tlet key;\n\n\t\t// Custom key bindings for togglePause should be able to resume\n\t\tif( typeof config.keyboard === 'object' ) {\n\t\t\tfor( key in config.keyboard ) {\n\t\t\t\tif( config.keyboard[key] === 'togglePause' ) {\n\t\t\t\t\tresumeKeyCodes.push( parseInt( key, 10 ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif( this.Reveal.isPaused() && resumeKeyCodes.indexOf( keyCode ) === -1 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Use linear navigation if we're configured to OR if\n\t\t// the presentation is one-dimensional\n\t\tlet useLinearMode = config.navigationMode === 'linear' || !this.Reveal.hasHorizontalSlides() || !this.Reveal.hasVerticalSlides();\n\n\t\tlet triggered = false;\n\n\t\t// 1. User defined key bindings\n\t\tif( typeof config.keyboard === 'object' ) {\n\n\t\t\tfor( key in config.keyboard ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet value = config.keyboard[ key ];\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof value === 'function' ) {\n\t\t\t\t\t\tvalue.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof value === 'string' && typeof this.Reveal[ value ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ value ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// 2. Registered custom key bindings\n\t\tif( triggered === false ) {\n\n\t\t\tfor( key in this.bindings ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet action = this.bindings[ key ].callback;\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof action === 'function' ) {\n\t\t\t\t\t\taction.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof action === 'string' && typeof this.Reveal[ action ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ action ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 3. System defined key bindings\n\t\tif( triggered === false ) {\n\n\t\t\t// Assume true and try to prove false\n\t\t\ttriggered = true;\n\n\t\t\t// P, PAGE UP\n\t\t\tif( keyCode === 80 || keyCode === 33 ) {\n\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// N, PAGE DOWN\n\t\t\telse if( keyCode === 78 || keyCode === 34 ) {\n\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// H, LEFT\n\t\t\telse if( keyCode === 72 || keyCode === 37 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.left({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// L, RIGHT\n\t\t\telse if( keyCode === 76 || keyCode === 39 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.right({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// K, UP\n\t\t\telse if( keyCode === 75 || keyCode === 38 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.up({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// J, DOWN\n\t\t\telse if( keyCode === 74 || keyCode === 40 ) {\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, Number.MAX_VALUE );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.down({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// HOME\n\t\t\telse if( keyCode === 36 ) {\n\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t}\n\t\t\t// END\n\t\t\telse if( keyCode === 35 ) {\n\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t}\n\t\t\t// SPACE\n\t\t\telse if( keyCode === 32 ) {\n\t\t\t\tif( this.Reveal.overview.isActive() ) {\n\t\t\t\t\tthis.Reveal.overview.deactivate();\n\t\t\t\t}\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.prev({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TWO-SPOT, SEMICOLON, B, V, PERIOD, LOGITECH PRESENTER TOOLS \"BLACK SCREEN\" BUTTON\n\t\t\telse if( keyCode === 58 || keyCode === 59 || keyCode === 66 || keyCode === 86 || keyCode === 190 || keyCode === 191 ) {\n\t\t\t\tthis.Reveal.togglePause();\n\t\t\t}\n\t\t\t// F\n\t\t\telse if( keyCode === 70 ) {\n\t\t\t\tenterFullscreen( config.embedded ? this.Reveal.getViewportElement() : document.documentElement );\n\t\t\t}\n\t\t\t// A\n\t\t\telse if( keyCode === 65 ) {\n\t\t\t\tif ( config.autoSlideStoppable ) {\n\t\t\t\t\tthis.Reveal.toggleAutoSlide( autoSlideWasPaused );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttriggered = false;\n\t\t\t}\n\n\t\t}\n\n\t\t// If the input resulted in a triggered action we should prevent\n\t\t// the browsers default behavior\n\t\tif( triggered ) {\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\t\t// ESC or O key\n\t\telse if( keyCode === 27 || keyCode === 79 ) {\n\t\t\tif( this.Reveal.closeOverlay() === false ) {\n\t\t\t\tthis.Reveal.overview.toggle();\n\t\t\t}\n\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\n\t\t// If auto-sliding is enabled we need to cue up\n\t\t// another timeout\n\t\tthis.Reveal.cueAutoSlide();\n\n\t}\n\n}","/**\n * Reads and writes the URL based on reveal.js' current state.\n */\nexport default class Location {\n\n\t// The minimum number of milliseconds that must pass between\n\t// calls to history.replaceState\n\tMAX_REPLACE_STATE_FREQUENCY = 1000\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Delays updates to the URL due to a Chrome thumbnailer bug\n\t\tthis.writeURLTimeout = 0;\n\n\t\tthis.replaceStateTimestamp = 0;\n\n\t\tthis.onWindowHashChange = this.onWindowHashChange.bind( this );\n\n\t}\n\n\tbind() {\n\n\t\twindow.addEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\tunbind() {\n\n\t\twindow.removeEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\t/**\n\t * Returns the slide indices for the given hash link.\n\t *\n\t * @param {string} [hash] the hash string that we want to\n\t * find the indices for\n\t *\n\t * @returns slide indices or null\n\t */\n\tgetIndicesFromHash( hash=window.location.hash ) {\n\n\t\t// Attempt to parse the hash as either an index or name\n\t\tlet name = hash.replace( /^#\\/?/, '' );\n\t\tlet bits = name.split( '/' );\n\n\t\t// If the first bit is not fully numeric and there is a name we\n\t\t// can assume that this is a named link\n\t\tif( !/^[0-9]*$/.test( bits[0] ) && name.length ) {\n\t\t\tlet element;\n\n\t\t\tlet f;\n\n\t\t\t// Parse named links with fragments (#/named-link/2)\n\t\t\tif( /\\/[-\\d]+$/g.test( name ) ) {\n\t\t\t\tf = parseInt( name.split( '/' ).pop(), 10 );\n\t\t\t\tf = isNaN(f) ? undefined : f;\n\t\t\t\tname = name.split( '/' ).shift();\n\t\t\t}\n\n\t\t\t// Ensure the named link is a valid HTML ID attribute\n\t\t\ttry {\n\t\t\t\telement = document.getElementById( decodeURIComponent( name ) );\n\t\t\t}\n\t\t\tcatch ( error ) { }\n\n\t\t\tif( element ) {\n\t\t\t\treturn { ...this.Reveal.getIndices( element ), f };\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst config = this.Reveal.getConfig();\n\t\t\tlet hashIndexBase = config.hashOneBasedIndex ? 1 : 0;\n\n\t\t\t// Read the index components of the hash\n\t\t\tlet h = ( parseInt( bits[0], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tv = ( parseInt( bits[1], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tf;\n\n\t\t\tif( config.fragmentInURL ) {\n\t\t\t\tf = parseInt( bits[2], 10 );\n\t\t\t\tif( isNaN( f ) ) {\n\t\t\t\t\tf = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { h, v, f };\n\t\t}\n\n\t\t// The hash couldn't be parsed or no matching named link was found\n\t\treturn null\n\n\t}\n\n\t/**\n\t * Reads the current URL (hash) and navigates accordingly.\n\t */\n\treadURL() {\n\n\t\tconst currentIndices = this.Reveal.getIndices();\n\t\tconst newIndices = this.getIndicesFromHash();\n\n\t\tif( newIndices ) {\n\t\t\tif( ( newIndices.h !== currentIndices.h || newIndices.v !== currentIndices.v || newIndices.f !== undefined ) ) {\n\t\t\t\t\tthis.Reveal.slide( newIndices.h, newIndices.v, newIndices.f );\n\t\t\t}\n\t\t}\n\t\t// If no new indices are available, we're trying to navigate to\n\t\t// a slide hash that does not exist\n\t\telse {\n\t\t\tthis.Reveal.slide( currentIndices.h || 0, currentIndices.v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the page URL (hash) to reflect the current\n\t * state.\n\t *\n\t * @param {number} delay The time in ms to wait before\n\t * writing the hash\n\t */\n\twriteURL( delay ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\n\t\t// Make sure there's never more than one timeout running\n\t\tclearTimeout( this.writeURLTimeout );\n\n\t\t// If a delay is specified, timeout this call\n\t\tif( typeof delay === 'number' ) {\n\t\t\tthis.writeURLTimeout = setTimeout( this.writeURL, delay );\n\t\t}\n\t\telse if( currentSlide ) {\n\n\t\t\tlet hash = this.getHash();\n\n\t\t\t// If we're configured to push to history OR the history\n\t\t\t// API is not avaialble.\n\t\t\tif( config.history ) {\n\t\t\t\twindow.location.hash = hash;\n\t\t\t}\n\t\t\t// If we're configured to reflect the current slide in the\n\t\t\t// URL without pushing to history.\n\t\t\telse if( config.hash ) {\n\t\t\t\t// If the hash is empty, don't add it to the URL\n\t\t\t\tif( hash === '/' ) {\n\t\t\t\t\tthis.debouncedReplaceState( window.location.pathname + window.location.search );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.debouncedReplaceState( '#' + hash );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// UPDATE: The below nuking of all hash changes breaks\n\t\t\t// anchors on pages where reveal.js is running. Removed\n\t\t\t// in 4.0. Why was it here in the first place? ¯\\_(ツ)_/¯\n\t\t\t//\n\t\t\t// If history and hash are both disabled, a hash may still\n\t\t\t// be added to the URL by clicking on a href with a hash\n\t\t\t// target. Counter this by always removing the hash.\n\t\t\t// else {\n\t\t\t// \twindow.history.replaceState( null, null, window.location.pathname + window.location.search );\n\t\t\t// }\n\n\t\t}\n\n\t}\n\n\treplaceState( url ) {\n\n\t\twindow.history.replaceState( null, null, url );\n\t\tthis.replaceStateTimestamp = Date.now();\n\n\t}\n\n\tdebouncedReplaceState( url ) {\n\n\t\tclearTimeout( this.replaceStateTimeout );\n\n\t\tif( Date.now() - this.replaceStateTimestamp > this.MAX_REPLACE_STATE_FREQUENCY ) {\n\t\t\tthis.replaceState( url );\n\t\t}\n\t\telse {\n\t\t\tthis.replaceStateTimeout = setTimeout( () => this.replaceState( url ), this.MAX_REPLACE_STATE_FREQUENCY );\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a hash URL that will resolve to the given slide location.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to link to\n\t */\n\tgetHash( slide ) {\n\n\t\tlet url = '/';\n\n\t\t// Attempt to create a named link based on the slide's ID\n\t\tlet s = slide || this.Reveal.getCurrentSlide();\n\t\tlet id = s ? s.getAttribute( 'id' ) : null;\n\t\tif( id ) {\n\t\t\tid = encodeURIComponent( id );\n\t\t}\n\n\t\tlet index = this.Reveal.getIndices( slide );\n\t\tif( !this.Reveal.getConfig().fragmentInURL ) {\n\t\t\tindex.f = undefined;\n\t\t}\n\n\t\t// If the current slide has an ID, use that as a named link,\n\t\t// but we don't support named links with a fragment index\n\t\tif( typeof id === 'string' && id.length ) {\n\t\t\turl = '/' + id;\n\n\t\t\t// If there is also a fragment, append that at the end\n\t\t\t// of the named link, like: #/named-link/2\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\t\t// Otherwise use the /h/v index\n\t\telse {\n\t\t\tlet hashIndexBase = this.Reveal.getConfig().hashOneBasedIndex ? 1 : 0;\n\t\t\tif( index.h > 0 || index.v > 0 || index.f >= 0 ) url += index.h + hashIndexBase;\n\t\t\tif( index.v > 0 || index.f >= 0 ) url += '/' + (index.v + hashIndexBase );\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\n\t\treturn url;\n\n\t}\n\n\t/**\n\t * Handler for the window level 'hashchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tonWindowHashChange( event ) {\n\n\t\tthis.readURL();\n\n\t}\n\n}","import { queryAll } from '../utils/util.js'\nimport { isAndroid } from '../utils/device.js'\n\n/**\n * Manages our presentation controls. This includes both\n * the built-in control arrows as well as event monitoring\n * of any elements within the presentation with either of the\n * following helper classes:\n * - .navigate-up\n * - .navigate-right\n * - .navigate-down\n * - .navigate-left\n * - .navigate-next\n * - .navigate-prev\n */\nexport default class Controls {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onNavigateLeftClicked = this.onNavigateLeftClicked.bind( this );\n\t\tthis.onNavigateRightClicked = this.onNavigateRightClicked.bind( this );\n\t\tthis.onNavigateUpClicked = this.onNavigateUpClicked.bind( this );\n\t\tthis.onNavigateDownClicked = this.onNavigateDownClicked.bind( this );\n\t\tthis.onNavigatePrevClicked = this.onNavigatePrevClicked.bind( this );\n\t\tthis.onNavigateNextClicked = this.onNavigateNextClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tconst rtl = this.Reveal.getConfig().rtl;\n\t\tconst revealElement = this.Reveal.getRevealElement();\n\n\t\tthis.element = document.createElement( 'aside' );\n\t\tthis.element.className = 'controls';\n\t\tthis.element.innerHTML =\n\t\t\t`\n\t\t\t\n\t\t\t\n\t\t\t`;\n\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\t// There can be multiple instances of controls throughout the page\n\t\tthis.controlsLeft = queryAll( revealElement, '.navigate-left' );\n\t\tthis.controlsRight = queryAll( revealElement, '.navigate-right' );\n\t\tthis.controlsUp = queryAll( revealElement, '.navigate-up' );\n\t\tthis.controlsDown = queryAll( revealElement, '.navigate-down' );\n\t\tthis.controlsPrev = queryAll( revealElement, '.navigate-prev' );\n\t\tthis.controlsNext = queryAll( revealElement, '.navigate-next' );\n\n\t\t// The left, right and down arrows in the standard reveal.js controls\n\t\tthis.controlsRightArrow = this.element.querySelector( '.navigate-right' );\n\t\tthis.controlsLeftArrow = this.element.querySelector( '.navigate-left' );\n\t\tthis.controlsDownArrow = this.element.querySelector( '.navigate-down' );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.controls ? 'block' : 'none';\n\n\t\tthis.element.setAttribute( 'data-controls-layout', config.controlsLayout );\n\t\tthis.element.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );\n\n\t}\n\n\tbind() {\n\n\t\t// Listen to both touch and click events, in case the device\n\t\t// supports both\n\t\tlet pointerEvents = [ 'touchstart', 'click' ];\n\n\t\t// Only support touch for Android, fixes double navigations in\n\t\t// stock browser\n\t\tif( isAndroid ) {\n\t\t\tpointerEvents = [ 'touchstart' ];\n\t\t}\n\n\t\tpointerEvents.forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.addEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.addEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.addEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.addEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.addEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.addEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\tunbind() {\n\n\t\t[ 'touchstart', 'click' ].forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.removeEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.removeEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.removeEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.removeEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.removeEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.removeEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates the state of all control/navigation arrows.\n\t */\n\tupdate() {\n\n\t\tlet routes = this.Reveal.availableRoutes();\n\n\t\t// Remove the 'enabled' class from all directions\n\t\t[...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext].forEach( node => {\n\t\t\tnode.classList.remove( 'enabled', 'fragmented' );\n\n\t\t\t// Set 'disabled' attribute on all directions\n\t\t\tnode.setAttribute( 'disabled', 'disabled' );\n\t\t} );\n\n\t\t// Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons\n\t\tif( routes.left ) this.controlsLeft.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right ) this.controlsRight.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.up ) this.controlsUp.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.down ) this.controlsDown.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Prev/next buttons\n\t\tif( routes.left || routes.up ) this.controlsPrev.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right || routes.down ) this.controlsNext.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Highlight fragment directions\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide ) {\n\n\t\t\tlet fragmentsRoutes = this.Reveal.fragments.availableRoutes();\n\n\t\t\t// Always apply fragment decorator to prev/next buttons\n\t\t\tif( fragmentsRoutes.prev ) this.controlsPrev.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\tif( fragmentsRoutes.next ) this.controlsNext.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t\t// Apply fragment decorators to directional buttons based on\n\t\t\t// what slide axis they are in\n\t\t\tif( this.Reveal.isVerticalSlide( currentSlide ) ) {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsUp.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsDown.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsLeft.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsRight.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\n\t\t}\n\n\t\tif( this.Reveal.getConfig().controlsTutorial ) {\n\n\t\t\tlet indices = this.Reveal.getIndices();\n\n\t\t\t// Highlight control arrows with an animation to ensure\n\t\t\t// that the viewer knows how to navigate\n\t\t\tif( !this.Reveal.hasNavigatedVertically() && routes.down ) {\n\t\t\t\tthis.controlsDownArrow.classList.add( 'highlight' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.controlsDownArrow.classList.remove( 'highlight' );\n\n\t\t\t\tif( this.Reveal.getConfig().rtl ) {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.left && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.right && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy() {\n\n\t\tthis.unbind();\n\t\tthis.element.remove();\n\n\t}\n\n\t/**\n\t * Event handlers for navigation control buttons.\n\t */\n\tonNavigateLeftClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.prev();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.left();\n\t\t}\n\n\t}\n\n\tonNavigateRightClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.next();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.right();\n\t\t}\n\n\t}\n\n\tonNavigateUpClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.up();\n\n\t}\n\n\tonNavigateDownClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.down();\n\n\t}\n\n\tonNavigatePrevClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.prev();\n\n\t}\n\n\tonNavigateNextClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.next();\n\n\t}\n\n\n}","/**\n * Creates a visual progress bar for the presentation.\n */\nexport default class Progress {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onProgressClicked = this.onProgressClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'progress';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\tthis.bar = document.createElement( 'span' );\n\t\tthis.element.appendChild( this.bar );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.progress ? 'block' : 'none';\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.addEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tif ( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.removeEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the progress bar to reflect the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update progress if enabled\n\t\tif( this.Reveal.getConfig().progress && this.bar ) {\n\n\t\t\tlet scale = this.Reveal.getProgress();\n\n\t\t\t// Don't fill the progress bar if there's only one slide\n\t\t\tif( this.Reveal.getTotalSlides() < 2 ) {\n\t\t\t\tscale = 0;\n\t\t\t}\n\n\t\t\tthis.bar.style.transform = 'scaleX('+ scale +')';\n\n\t\t}\n\n\t}\n\n\tgetMaxWidth() {\n\n\t\treturn this.Reveal.getRevealElement().offsetWidth;\n\n\t}\n\n\t/**\n\t * Clicking on the progress bar results in a navigation to the\n\t * closest approximate horizontal slide using this equation:\n\t *\n\t * ( clickX / presentationWidth ) * numberOfSlides\n\t *\n\t * @param {object} event\n\t */\n\tonProgressClicked( event ) {\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\tevent.preventDefault();\n\n\t\tlet slides = this.Reveal.getSlides();\n\t\tlet slidesTotal = slides.length;\n\t\tlet slideIndex = Math.floor( ( event.clientX / this.getMaxWidth() ) * slidesTotal );\n\n\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\tslideIndex = slidesTotal - slideIndex;\n\t\t}\n\n\t\tlet targetIndices = this.Reveal.getIndices(slides[slideIndex]);\n\t\tthis.Reveal.slide( targetIndices.h, targetIndices.v );\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\n\n}","/**\n * Handles hiding of the pointer/cursor when inactive.\n */\nexport default class Pointer {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Throttles mouse wheel navigation\n\t\tthis.lastMouseWheelStep = 0;\n\n\t\t// Is the mouse pointer currently hidden from view\n\t\tthis.cursorHidden = false;\n\n\t\t// Timeout used to determine when the cursor is inactive\n\t\tthis.cursorInactiveTimeout = 0;\n\n\t\tthis.onDocumentCursorActive = this.onDocumentCursorActive.bind( this );\n\t\tthis.onDocumentMouseScroll = this.onDocumentMouseScroll.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.mouseWheel ) {\n\t\t\tdocument.addEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.addEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\t\telse {\n\t\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\n\t\t// Auto-hide the mouse pointer when its inactive\n\t\tif( config.hideInactiveCursor ) {\n\t\t\tdocument.addEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.addEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\t\telse {\n\t\t\tthis.showCursor();\n\n\t\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Shows the mouse pointer after it has been hidden with\n\t * #hideCursor.\n\t */\n\tshowCursor() {\n\n\t\tif( this.cursorHidden ) {\n\t\t\tthis.cursorHidden = false;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = '';\n\t\t}\n\n\t}\n\n\t/**\n\t * Hides the mouse pointer when it's on top of the .reveal\n\t * container.\n\t */\n\thideCursor() {\n\n\t\tif( this.cursorHidden === false ) {\n\t\t\tthis.cursorHidden = true;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = 'none';\n\t\t}\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.showCursor();\n\n\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false );\n\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\n\t}\n\n\t/**\n\t * Called whenever there is mouse input at the document level\n\t * to determine if the cursor is active or not.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentCursorActive( event ) {\n\n\t\tthis.showCursor();\n\n\t\tclearTimeout( this.cursorInactiveTimeout );\n\n\t\tthis.cursorInactiveTimeout = setTimeout( this.hideCursor.bind( this ), this.Reveal.getConfig().hideCursorTime );\n\n\t}\n\n\t/**\n\t * Handles mouse wheel scrolling, throttled to avoid skipping\n\t * multiple slides.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentMouseScroll( event ) {\n\n\t\tif( Date.now() - this.lastMouseWheelStep > 1000 ) {\n\n\t\t\tthis.lastMouseWheelStep = Date.now();\n\n\t\t\tlet delta = event.detail || -event.wheelDelta;\n\t\t\tif( delta > 0 ) {\n\t\t\t\tthis.Reveal.next();\n\t\t\t}\n\t\t\telse if( delta < 0 ) {\n\t\t\t\tthis.Reveal.prev();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}","/**\n * Loads a JavaScript file from the given URL and executes it.\n *\n * @param {string} url Address of the .js file to load\n * @param {function} callback Method to invoke when the script\n * has loaded and executed\n */\nexport const loadScript = ( url, callback ) => {\n\n\tconst script = document.createElement( 'script' );\n\tscript.type = 'text/javascript';\n\tscript.async = false;\n\tscript.defer = false;\n\tscript.src = url;\n\n\tif( typeof callback === 'function' ) {\n\n\t\t// Success callback\n\t\tscript.onload = script.onreadystatechange = event => {\n\t\t\tif( event.type === 'load' || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t// Kill event listeners\n\t\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\t\tcallback();\n\n\t\t\t}\n\t\t};\n\n\t\t// Error callback\n\t\tscript.onerror = err => {\n\n\t\t\t// Kill event listeners\n\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\tcallback( new Error( 'Failed loading script: ' + script.src + '\\n' + err ) );\n\n\t\t};\n\n\t}\n\n\t// Append the script at the end of \n\tconst head = document.querySelector( 'head' );\n\thead.insertBefore( script, head.lastChild );\n\n}","import { loadScript } from '../utils/loader.js'\n\n/**\n * Manages loading and registering of reveal.js plugins.\n */\nexport default class Plugins {\n\n\tconstructor( reveal ) {\n\n\t\tthis.Reveal = reveal;\n\n\t\t// Flags our current state (idle -> loading -> loaded)\n\t\tthis.state = 'idle';\n\n\t\t// An id:instance map of currently registed plugins\n\t\tthis.registeredPlugins = {};\n\n\t\tthis.asyncDependencies = [];\n\n\t}\n\n\t/**\n\t * Loads reveal.js dependencies, registers and\n\t * initializes plugins.\n\t *\n\t * Plugins are direct references to a reveal.js plugin\n\t * object that we register and initialize after any\n\t * synchronous dependencies have loaded.\n\t *\n\t * Dependencies are defined via the 'dependencies' config\n\t * option and will be loaded prior to starting reveal.js.\n\t * Some dependencies may have an 'async' flag, if so they\n\t * will load after reveal.js has been started up.\n\t */\n\tload( plugins, dependencies ) {\n\n\t\tthis.state = 'loading';\n\n\t\tplugins.forEach( this.registerPlugin.bind( this ) );\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet scripts = [],\n\t\t\t\tscriptsToLoad = 0;\n\n\t\t\tdependencies.forEach( s => {\n\t\t\t\t// Load if there's no condition or the condition is truthy\n\t\t\t\tif( !s.condition || s.condition() ) {\n\t\t\t\t\tif( s.async ) {\n\t\t\t\t\t\tthis.asyncDependencies.push( s );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tscripts.push( s );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif( scripts.length ) {\n\t\t\t\tscriptsToLoad = scripts.length;\n\n\t\t\t\tconst scriptLoadedCallback = (s) => {\n\t\t\t\t\tif( s && typeof s.callback === 'function' ) s.callback();\n\n\t\t\t\t\tif( --scriptsToLoad === 0 ) {\n\t\t\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Load synchronous scripts\n\t\t\t\tscripts.forEach( s => {\n\t\t\t\t\tif( typeof s.id === 'string' ) {\n\t\t\t\t\t\tthis.registerPlugin( s );\n\t\t\t\t\t\tscriptLoadedCallback( s );\n\t\t\t\t\t}\n\t\t\t\t\telse if( typeof s.src === 'string' ) {\n\t\t\t\t\t\tloadScript( s.src, () => scriptLoadedCallback(s) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.warn( 'Unrecognized plugin format', s );\n\t\t\t\t\t\tscriptLoadedCallback();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Initializes our plugins and waits for them to be ready\n\t * before proceeding.\n\t */\n\tinitPlugins() {\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet pluginValues = Object.values( this.registeredPlugins );\n\t\t\tlet pluginsToInitialize = pluginValues.length;\n\n\t\t\t// If there are no plugins, skip this step\n\t\t\tif( pluginsToInitialize === 0 ) {\n\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t}\n\t\t\t// ... otherwise initialize plugins\n\t\t\telse {\n\n\t\t\t\tlet initNextPlugin;\n\n\t\t\t\tlet afterPlugInitialized = () => {\n\t\t\t\t\tif( --pluginsToInitialize === 0 ) {\n\t\t\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tinitNextPlugin();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet i = 0;\n\n\t\t\t\t// Initialize plugins serially\n\t\t\t\tinitNextPlugin = () => {\n\n\t\t\t\t\tlet plugin = pluginValues[i++];\n\n\t\t\t\t\t// If the plugin has an 'init' method, invoke it\n\t\t\t\t\tif( typeof plugin.init === 'function' ) {\n\t\t\t\t\t\tlet promise = plugin.init( this.Reveal );\n\n\t\t\t\t\t\t// If the plugin returned a Promise, wait for it\n\t\t\t\t\t\tif( promise && typeof promise.then === 'function' ) {\n\t\t\t\t\t\t\tpromise.then( afterPlugInitialized );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tafterPlugInitialized();\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\tafterPlugInitialized();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tinitNextPlugin();\n\n\t\t\t}\n\n\t\t} )\n\n\t}\n\n\t/**\n\t * Loads all async reveal.js dependencies.\n\t */\n\tloadAsync() {\n\n\t\tthis.state = 'loaded';\n\n\t\tif( this.asyncDependencies.length ) {\n\t\t\tthis.asyncDependencies.forEach( s => {\n\t\t\t\tloadScript( s.src, s.callback );\n\t\t\t} );\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n\t/**\n\t * Registers a new plugin with this reveal.js instance.\n\t *\n\t * reveal.js waits for all regisered plugins to initialize\n\t * before considering itself ready, as long as the plugin\n\t * is registered before calling `Reveal.initialize()`.\n\t */\n\tregisterPlugin( plugin ) {\n\n\t\t// Backwards compatibility to make reveal.js ~3.9.0\n\t\t// plugins work with reveal.js 4.0.0\n\t\tif( arguments.length === 2 && typeof arguments[0] === 'string' ) {\n\t\t\tplugin = arguments[1];\n\t\t\tplugin.id = arguments[0];\n\t\t}\n\t\t// Plugin can optionally be a function which we call\n\t\t// to create an instance of the plugin\n\t\telse if( typeof plugin === 'function' ) {\n\t\t\tplugin = plugin();\n\t\t}\n\n\t\tlet id = plugin.id;\n\n\t\tif( typeof id !== 'string' ) {\n\t\t\tconsole.warn( 'Unrecognized plugin format; can\\'t find plugin.id', plugin );\n\t\t}\n\t\telse if( this.registeredPlugins[id] === undefined ) {\n\t\t\tthis.registeredPlugins[id] = plugin;\n\n\t\t\t// If a plugin is registered after reveal.js is loaded,\n\t\t\t// initialize it right away\n\t\t\tif( this.state === 'loaded' && typeof plugin.init === 'function' ) {\n\t\t\t\tplugin.init( this.Reveal );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.warn( 'reveal.js: \"'+ id +'\" plugin has already been registered' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if a specific plugin has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\thasPlugin( id ) {\n\n\t\treturn !!this.registeredPlugins[id];\n\n\t}\n\n\t/**\n\t * Returns the specific plugin instance, if a plugin\n\t * with the given ID has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\tgetPlugin( id ) {\n\n\t\treturn this.registeredPlugins[id];\n\n\t}\n\n\tgetRegisteredPlugins() {\n\n\t\treturn this.registeredPlugins;\n\n\t}\n\n\tdestroy() {\n\n\t\tObject.values( this.registeredPlugins ).forEach( plugin => {\n\t\t\tif( typeof plugin.destroy === 'function' ) {\n\t\t\t\tplugin.destroy();\n\t\t\t}\n\t\t} );\n\n\t\tthis.registeredPlugins = {};\n\t\tthis.asyncDependencies = [];\n\n\t}\n\n}\n","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { queryAll, createStyleSheet } from '../utils/util.js'\n\n/**\n * Setups up our presentation for printing/exporting to PDF.\n */\nexport default class Print {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Configures the presentation for printing to a static\n\t * PDF.\n\t */\n\tasync setupPDF() {\n\n\t\tconst config = this.Reveal.getConfig();\n\t\tconst slides = queryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR )\n\n\t\t// Compute slide numbers now, before we start duplicating slides\n\t\tconst injectPageNumbers = config.slideNumber && /all|print/i.test( config.showSlideNumber );\n\n\t\tconst slideSize = this.Reveal.getComputedSlideSize( window.innerWidth, window.innerHeight );\n\n\t\t// Dimensions of the PDF pages\n\t\tconst pageWidth = Math.floor( slideSize.width * ( 1 + config.margin ) ),\n\t\t\tpageHeight = Math.floor( slideSize.height * ( 1 + config.margin ) );\n\n\t\t// Dimensions of slides within the pages\n\t\tconst slideWidth = slideSize.width,\n\t\t\tslideHeight = slideSize.height;\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\t// Let the browser know what page size we want to print\n\t\tcreateStyleSheet( '@page{size:'+ pageWidth +'px '+ pageHeight +'px; margin: 0px;}' );\n\n\t\t// Limit the size of certain elements to the dimensions of the slide\n\t\tcreateStyleSheet( '.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: '+ slideWidth +'px; max-height:'+ slideHeight +'px}' );\n\n\t\tdocument.documentElement.classList.add( 'print-pdf' );\n\t\tdocument.body.style.width = pageWidth + 'px';\n\t\tdocument.body.style.height = pageHeight + 'px';\n\n\t\tconst viewportElement = document.querySelector( '.reveal-viewport' );\n\t\tlet presentationBackground;\n\t\tif( viewportElement ) {\n\t\t\tconst viewportStyles = window.getComputedStyle( viewportElement );\n\t\t\tif( viewportStyles && viewportStyles.background ) {\n\t\t\t\tpresentationBackground = viewportStyles.background;\n\t\t\t}\n\t\t}\n\n\t\t// Make sure stretch elements fit on slide\n\t\tawait new Promise( requestAnimationFrame );\n\t\tthis.Reveal.layoutSlideContents( slideWidth, slideHeight );\n\n\t\t// Batch scrollHeight access to prevent layout thrashing\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tconst slideScrollHeights = slides.map( slide => slide.scrollHeight );\n\n\t\tconst pages = [];\n\t\tconst pageContainer = slides[0].parentNode;\n\t\tlet slideNumber = 1;\n\n\t\t// Slide and slide background layout\n\t\tslides.forEach( function( slide, index ) {\n\n\t\t\t// Vertical stacks are not centred since their section\n\t\t\t// children will be\n\t\t\tif( slide.classList.contains( 'stack' ) === false ) {\n\t\t\t\t// Center the slide inside of the page, giving the slide some margin\n\t\t\t\tlet left = ( pageWidth - slideWidth ) / 2;\n\t\t\t\tlet top = ( pageHeight - slideHeight ) / 2;\n\n\t\t\t\tconst contentHeight = slideScrollHeights[ index ];\n\t\t\t\tlet numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 );\n\n\t\t\t\t// Adhere to configured pages per slide limit\n\t\t\t\tnumberOfPages = Math.min( numberOfPages, config.pdfMaxPagesPerSlide );\n\n\t\t\t\t// Center slides vertically\n\t\t\t\tif( numberOfPages === 1 && config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\ttop = Math.max( ( pageHeight - contentHeight ) / 2, 0 );\n\t\t\t\t}\n\n\t\t\t\t// Wrap the slide in a page element and hide its overflow\n\t\t\t\t// so that no page ever flows onto another\n\t\t\t\tconst page = document.createElement( 'div' );\n\t\t\t\tpages.push( page );\n\n\t\t\t\tpage.className = 'pdf-page';\n\t\t\t\tpage.style.height = ( ( pageHeight + config.pdfPageHeightOffset ) * numberOfPages ) + 'px';\n\n\t\t\t\t// Copy the presentation-wide background to each individual\n\t\t\t\t// page when printing\n\t\t\t\tif( presentationBackground ) {\n\t\t\t\t\tpage.style.background = presentationBackground;\n\t\t\t\t}\n\n\t\t\t\tpage.appendChild( slide );\n\n\t\t\t\t// Position the slide inside of the page\n\t\t\t\tslide.style.left = left + 'px';\n\t\t\t\tslide.style.top = top + 'px';\n\t\t\t\tslide.style.width = slideWidth + 'px';\n\n\t\t\t\t// Re-run the slide layout so that r-fit-text is applied based on\n\t\t\t\t// the printed slide size\n\t\t\t\tthis.Reveal.slideContent.layout( slide )\n\n\t\t\t\tif( slide.slideBackgroundElement ) {\n\t\t\t\t\tpage.insertBefore( slide.slideBackgroundElement, slide );\n\t\t\t\t}\n\n\t\t\t\t// Inject notes if `showNotes` is enabled\n\t\t\t\tif( config.showNotes ) {\n\n\t\t\t\t\t// Are there notes for this slide?\n\t\t\t\t\tconst notes = this.Reveal.getSlideNotes( slide );\n\t\t\t\t\tif( notes ) {\n\n\t\t\t\t\t\tconst notesSpacing = 8;\n\t\t\t\t\t\tconst notesLayout = typeof config.showNotes === 'string' ? config.showNotes : 'inline';\n\t\t\t\t\t\tconst notesElement = document.createElement( 'div' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes-pdf' );\n\t\t\t\t\t\tnotesElement.setAttribute( 'data-layout', notesLayout );\n\t\t\t\t\t\tnotesElement.innerHTML = notes;\n\n\t\t\t\t\t\tif( notesLayout === 'separate-page' ) {\n\t\t\t\t\t\t\tpages.push( notesElement );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnotesElement.style.left = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.bottom = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.width = ( pageWidth - notesSpacing*2 ) + 'px';\n\t\t\t\t\t\t\tpage.appendChild( notesElement );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Inject page numbers if `slideNumbers` are enabled\n\t\t\t\tif( injectPageNumbers ) {\n\t\t\t\t\tconst numberElement = document.createElement( 'div' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number-pdf' );\n\t\t\t\t\tnumberElement.innerHTML = slideNumber++;\n\t\t\t\t\tpage.appendChild( numberElement );\n\t\t\t\t}\n\n\t\t\t\t// Copy page and show fragments one after another\n\t\t\t\tif( config.pdfSeparateFragments ) {\n\n\t\t\t\t\t// Each fragment 'group' is an array containing one or more\n\t\t\t\t\t// fragments. Multiple fragments that appear at the same time\n\t\t\t\t\t// are part of the same group.\n\t\t\t\t\tconst fragmentGroups = this.Reveal.fragments.sort( page.querySelectorAll( '.fragment' ), true );\n\n\t\t\t\t\tlet previousFragmentStep;\n\n\t\t\t\t\tfragmentGroups.forEach( function( fragments, index ) {\n\n\t\t\t\t\t\t// Remove 'current-fragment' from the previous group\n\t\t\t\t\t\tif( previousFragmentStep ) {\n\t\t\t\t\t\t\tpreviousFragmentStep.forEach( function( fragment ) {\n\t\t\t\t\t\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show the fragments for the current index\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.add( 'visible', 'current-fragment' );\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t\t// Create a separate page for the current fragment state\n\t\t\t\t\t\tconst clonedPage = page.cloneNode( true );\n\n\t\t\t\t\t\t// Inject unique page numbers for fragments\n\t\t\t\t\t\tif( injectPageNumbers ) {\n\t\t\t\t\t\t\tconst numberElement = clonedPage.querySelector( '.slide-number-pdf' );\n\t\t\t\t\t\t\tconst fragmentNumber = index + 1;\n\t\t\t\t\t\t\tnumberElement.innerHTML += '.' + fragmentNumber;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpages.push( clonedPage );\n\n\t\t\t\t\t\tpreviousFragmentStep = fragments;\n\n\t\t\t\t\t}, this );\n\n\t\t\t\t\t// Reset the first/original page so that all fragments are hidden\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\t\t\t\t// Show all fragments\n\t\t\t\telse {\n\t\t\t\t\tqueryAll( page, '.fragment:not(.fade-out)' ).forEach( function( fragment ) {\n\t\t\t\t\t\tfragment.classList.add( 'visible' );\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tpages.forEach( page => pageContainer.appendChild( page ) );\n\n\t\t// Notify subscribers that the PDF layout is good to go\n\t\tthis.Reveal.dispatchEvent({ type: 'pdf-ready' });\n\n\t}\n\n\t/**\n\t * Checks if this instance is being used to print a PDF.\n\t */\n\tisPrintingPDF() {\n\n\t\treturn ( /print-pdf/gi ).test( window.location.search );\n\n\t}\n\n}\n","import { isAndroid } from '../utils/device.js'\nimport { matches } from '../utils/util.js'\n\nconst SWIPE_THRESHOLD = 40;\n\n/**\n * Controls all touch interactions and navigations for\n * a presentation.\n */\nexport default class Touch {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Holds information about the currently ongoing touch interaction\n\t\tthis.touchStartX = 0;\n\t\tthis.touchStartY = 0;\n\t\tthis.touchStartCount = 0;\n\t\tthis.touchCaptured = false;\n\n\t\tthis.onPointerDown = this.onPointerDown.bind( this );\n\t\tthis.onPointerMove = this.onPointerMove.bind( this );\n\t\tthis.onPointerUp = this.onPointerUp.bind( this );\n\t\tthis.onTouchStart = this.onTouchStart.bind( this );\n\t\tthis.onTouchMove = this.onTouchMove.bind( this );\n\t\tthis.onTouchEnd = this.onTouchEnd.bind( this );\n\n\t}\n\n\t/**\n\t *\n\t */\n\tbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\tif( 'onpointerdown' in window ) {\n\t\t\t// Use W3C pointer events\n\t\t\trevealElement.addEventListener( 'pointerdown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'pointermove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'pointerup', this.onPointerUp, false );\n\t\t}\n\t\telse if( window.navigator.msPointerEnabled ) {\n\t\t\t// IE 10 uses prefixed version of pointer events\n\t\t\trevealElement.addEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'MSPointerUp', this.onPointerUp, false );\n\t\t}\n\t\telse {\n\t\t\t// Fall back to touch events\n\t\t\trevealElement.addEventListener( 'touchstart', this.onTouchStart, false );\n\t\t\trevealElement.addEventListener( 'touchmove', this.onTouchMove, false );\n\t\t\trevealElement.addEventListener( 'touchend', this.onTouchEnd, false );\n\t\t}\n\n\t}\n\n\t/**\n\t *\n\t */\n\tunbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\trevealElement.removeEventListener( 'pointerdown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'pointermove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'pointerup', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'MSPointerUp', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'touchstart', this.onTouchStart, false );\n\t\trevealElement.removeEventListener( 'touchmove', this.onTouchMove, false );\n\t\trevealElement.removeEventListener( 'touchend', this.onTouchEnd, false );\n\n\t}\n\n\t/**\n\t * Checks if the target element prevents the triggering of\n\t * swipe navigation.\n\t */\n\tisSwipePrevented( target ) {\n\n\t\t// Prevent accidental swipes when scrubbing timelines\n\t\tif( matches( target, 'video, audio' ) ) return true;\n\n\t\twhile( target && typeof target.hasAttribute === 'function' ) {\n\t\t\tif( target.hasAttribute( 'data-prevent-swipe' ) ) return true;\n\t\t\ttarget = target.parentNode;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchstart' event, enables support for\n\t * swipe and pinch gestures.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchStart( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tthis.touchStartX = event.touches[0].clientX;\n\t\tthis.touchStartY = event.touches[0].clientY;\n\t\tthis.touchStartCount = event.touches.length;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchmove' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchMove( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// Each touch should only trigger one action\n\t\tif( !this.touchCaptured ) {\n\t\t\tthis.Reveal.onUserInput( event );\n\n\t\t\tlet currentX = event.touches[0].clientX;\n\t\t\tlet currentY = event.touches[0].clientY;\n\n\t\t\t// There was only one touch point, look for a swipe\n\t\t\tif( event.touches.length === 1 && this.touchStartCount !== 2 ) {\n\n\t\t\t\tlet availableRoutes = this.Reveal.availableRoutes({ includeFragments: true });\n\n\t\t\t\tlet deltaX = currentX - this.touchStartX,\n\t\t\t\t\tdeltaY = currentY - this.touchStartY;\n\n\t\t\t\tif( deltaX > SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.prev();\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\tthis.Reveal.left();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaX < -SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.next();\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\tthis.Reveal.right();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY > SWIPE_THRESHOLD && availableRoutes.up ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.up();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY < -SWIPE_THRESHOLD && availableRoutes.down ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.down();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If we're embedded, only block touch events if they have\n\t\t\t\t// triggered an action\n\t\t\t\tif( config.embedded ) {\n\t\t\t\t\tif( this.touchCaptured || this.Reveal.isVerticalSlide() ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Not embedded? Block them all to avoid needless tossing\n\t\t\t\t// around of the viewport in iOS\n\t\t\t\telse {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\t// There's a bug with swiping on some Android devices unless\n\t\t// the default action is always prevented\n\t\telse if( isAndroid ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the 'touchend' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchEnd( event ) {\n\n\t\tthis.touchCaptured = false;\n\n\t}\n\n\t/**\n\t * Convert pointer down to touch start.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerDown( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchStart( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer move to touch move.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerMove( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchMove( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer up to touch end.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerUp( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchEnd( event );\n\t\t}\n\n\t}\n\n}","import { closest } from '../utils/util.js'\n\n/**\n * Manages focus when a presentation is embedded. This\n * helps us only capture keyboard from the presentation\n * a user is currently interacting with in a page where\n * multiple presentations are embedded.\n */\n\nconst STATE_FOCUS = 'focus';\nconst STATE_BLUR = 'blur';\n\nexport default class Focus {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onRevealPointerDown = this.onRevealPointerDown.bind( this );\n\t\tthis.onDocumentPointerDown = this.onDocumentPointerDown.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.embedded ) {\n\t\t\tthis.blur();\n\t\t}\n\t\telse {\n\t\t\tthis.focus();\n\t\t\tthis.unbind();\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().embedded ) {\n\t\t\tthis.Reveal.getRevealElement().addEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tthis.Reveal.getRevealElement().removeEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\n\t}\n\n\tfocus() {\n\n\t\tif( this.state !== STATE_FOCUS ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'focused' );\n\t\t\tdocument.addEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_FOCUS;\n\n\t}\n\n\tblur() {\n\n\t\tif( this.state !== STATE_BLUR ) {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\n\t\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_BLUR;\n\n\t}\n\n\tisFocused() {\n\n\t\treturn this.state === STATE_FOCUS;\n\n\t}\n\n\tdestroy() {\n\n\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\n\n\t}\n\n\tonRevealPointerDown( event ) {\n\n\t\tthis.focus();\n\n\t}\n\n\tonDocumentPointerDown( event ) {\n\n\t\tlet revealElement = closest( event.target, '.reveal' );\n\t\tif( !revealElement || revealElement !== this.Reveal.getRevealElement() ) {\n\t\t\tthis.blur();\n\t\t}\n\n\t}\n\n}","/**\n * Handles the showing and \n */\nexport default class Notes {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'speaker-notes';\n\t\tthis.element.setAttribute( 'data-prevent-swipe', '' );\n\t\tthis.element.setAttribute( 'tabindex', '0' );\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.showNotes ) {\n\t\t\tthis.element.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Pick up notes from the current slide and display them\n\t * to the viewer.\n\t *\n\t * @see {@link config.showNotes}\n\t */\n\tupdate() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.element && this.Reveal.getCurrentSlide() && !this.Reveal.print.isPrintingPDF() ) {\n\n\t\t\tthis.element.innerHTML = this.getSlideNotes() || 'No notes on this slide.';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the visibility of the speaker notes sidebar that\n\t * is used to share annotated slides. The notes sidebar is\n\t * only visible if showNotes is true and there are notes on\n\t * one or more slides in the deck.\n\t */\n\tupdateVisibility() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.hasNotes() && !this.Reveal.print.isPrintingPDF() ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'show-notes' );\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'show-notes' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if there are speaker notes for ANY slide in the\n\t * presentation.\n\t */\n\thasNotes() {\n\n\t\treturn this.Reveal.getSlidesElement().querySelectorAll( '[data-notes], aside.notes' ).length > 0;\n\n\t}\n\n\t/**\n\t * Checks if this presentation is running inside of the\n\t * speaker notes window.\n\t *\n\t * @return {boolean}\n\t */\n\tisSpeakerNotesWindow() {\n\n\t\treturn !!window.location.search.match( /receiver/gi );\n\n\t}\n\n\t/**\n\t * Retrieves the speaker notes from a slide. Notes can be\n\t * defined in two ways:\n\t * 1. As a data-notes attribute on the slide
\n\t * 2. As an