From ad00cfedca9b0a4ad1f7c0e4acd30b8ef65cba01 Mon Sep 17 00:00:00 2001 From: Sharon Klinkenberg Date: Fri, 20 Sep 2024 15:18:34 +0200 Subject: [PATCH] lecture alt nhst added --- .DS_Store | Bin 14340 -> 14340 bytes courses/.DS_Store | Bin 14340 -> 14340 bytes .../alternatives_nhst/Sad-P.webp | Bin .../alternatives_nhst/alternatives_nhst.qmd | 4 +- .../alternatives_nhst.slide.html | 1081 +++++++++ .../figure-revealjs/unnamed-chunk-12-1.png | Bin 0 -> 56552 bytes .../figure-revealjs/unnamed-chunk-13-1.png | Bin 0 -> 80710 bytes .../figure-revealjs/unnamed-chunk-14-1.png | Bin 0 -> 107462 bytes .../libs/clipboard/clipboard.min.js | 7 + .../libs/quarto-html/light-border.css | 1 + .../libs/quarto-html/popper.min.js | 6 + .../libs/quarto-html/quarto-html.min.css | 1 + .../quarto-syntax-highlighting.css | 205 ++ .../libs/quarto-html/tabby.min.js | 418 ++++ .../libs/quarto-html/tippy.css | 1 + .../libs/quarto-html/tippy.umd.min.js | 2 + .../libs/revealjs/dist/reset.css | 30 + .../libs/revealjs/dist/reveal.css | 8 + .../libs/revealjs/dist/reveal.esm.js | 9 + .../libs/revealjs/dist/reveal.esm.js.map | 1 + .../libs/revealjs/dist/reveal.js | 9 + .../libs/revealjs/dist/reveal.js.map | 1 + .../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 + .../libs/revealjs/dist/theme/quarto.css | 8 + .../plugin/highlight/highlight.esm.js | 5 + .../revealjs/plugin/highlight/highlight.js | 5 + .../revealjs/plugin/highlight/monokai.css | 71 + .../libs/revealjs/plugin/highlight/plugin.js | 439 ++++ .../revealjs/plugin/highlight/zenburn.css | 80 + .../revealjs/plugin/markdown/markdown.esm.js | 1 + .../libs/revealjs/plugin/markdown/markdown.js | 1 + .../libs/revealjs/plugin/markdown/plugin.js | 475 ++++ .../libs/revealjs/plugin/math/katex.js | 96 + .../libs/revealjs/plugin/math/math.esm.js | 1 + .../libs/revealjs/plugin/math/math.js | 1 + .../libs/revealjs/plugin/math/mathjax2.js | 89 + .../libs/revealjs/plugin/math/mathjax3.js | 77 + .../libs/revealjs/plugin/math/plugin.js | 15 + .../libs/revealjs/plugin/notes/notes.esm.js | 1 + .../libs/revealjs/plugin/notes/notes.js | 1 + .../libs/revealjs/plugin/notes/plugin.js | 236 ++ .../revealjs/plugin/notes/speaker-view.html | 884 +++++++ .../revealjs/plugin/pdf-export/pdfexport.js | 111 + .../revealjs/plugin/pdf-export/plugin.yml | 2 + .../quarto-line-highlight/line-highlight.css | 31 + .../quarto-line-highlight/line-highlight.js | 351 +++ .../plugin/quarto-line-highlight/plugin.yml | 4 + .../revealjs/plugin/quarto-support/footer.css | 110 + .../revealjs/plugin/quarto-support/plugin.yml | 5 + .../revealjs/plugin/quarto-support/support.js | 338 +++ .../libs/revealjs/plugin/reveal-menu/menu.css | 346 +++ .../libs/revealjs/plugin/reveal-menu/menu.js | 1 + .../revealjs/plugin/reveal-menu/plugin.yml | 9 + .../plugin/reveal-menu/quarto-menu.css | 68 + .../plugin/reveal-menu/quarto-menu.js | 43 + .../libs/revealjs/plugin/search/plugin.js | 243 ++ .../libs/revealjs/plugin/search/search.esm.js | 7 + .../libs/revealjs/plugin/search/search.js | 7 + .../libs/revealjs/plugin/zoom/plugin.js | 264 +++ .../libs/revealjs/plugin/zoom/zoom.esm.js | 4 + .../libs/revealjs/plugin/zoom/zoom.js | 4 + site/courses/SM/2023-2024-S1/SM.html | 4 +- site/courses/SM/2023-2024-S2/SM.html | 14 +- site/courses/SR/2024-2025-S1/SR.html | 14 +- site/courses/SSR/2022-2023/SSR.html | 4 +- site/courses/WSR_PB/2022-2023/WSR_PB.html | 4 +- site/index.html | 4 +- site/search.json | 4 +- .../confidence_interval.html | 662 ++++++ .../confidence_interval.qmd | 50 +- .../figure-html/unnamed-chunk-1-1.png | Bin 0 -> 46067 bytes .../figure-html/unnamed-chunk-2-1.png | Bin 0 -> 70240 bytes .../figure-html/unnamed-chunk-3-1.png | Bin 0 -> 93689 bytes .../libs/bootstrap/bootstrap-icons.css | 2078 +++++++++++++++++ .../libs/bootstrap/bootstrap-icons.woff | Bin 0 -> 176200 bytes .../libs/bootstrap/bootstrap.min.css | 12 + .../libs/bootstrap/bootstrap.min.js | 7 + .../libs/clipboard/clipboard.min.js | 7 + .../libs/quarto-html/anchor.min.js | 9 + .../libs/quarto-html/popper.min.js | 6 + .../quarto-syntax-highlighting.css | 205 ++ .../libs/quarto-html/quarto.js | 908 +++++++ .../libs/quarto-html/tippy.css | 1 + .../libs/quarto-html/tippy.umd.min.js | 2 + 102 files changed, 10280 insertions(+), 29 deletions(-) rename courses/{SM/2023-2024-S2 => SR/2024-2025-S1}/alternatives_nhst/Sad-P.webp (100%) rename courses/{SM/2023-2024-S2 => SR/2024-2025-S1}/alternatives_nhst/alternatives_nhst.qmd (96%) create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst.slide.html create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/figure-revealjs/unnamed-chunk-12-1.png create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/figure-revealjs/unnamed-chunk-13-1.png create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/figure-revealjs/unnamed-chunk-14-1.png create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/clipboard/clipboard.min.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/light-border.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/popper.min.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/quarto-html.min.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/quarto-syntax-highlighting.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tabby.min.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tippy.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tippy.umd.min.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reset.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.esm.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.esm.js.map create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.js.map create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/league-gothic/LICENSE create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.css create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.eot create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.ttf create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/league-gothic/league-gothic.woff create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/LICENSE create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/fonts/source-sans-pro/source-sans-pro.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/theme/quarto.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/highlight/highlight.esm.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/highlight/highlight.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/highlight/monokai.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/highlight/plugin.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/highlight/zenburn.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/markdown/markdown.esm.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/markdown/markdown.js create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/markdown/plugin.js create mode 100755 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/math/katex.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/math/math.esm.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/math/math.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/math/mathjax2.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/math/mathjax3.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/math/plugin.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/notes/notes.esm.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/notes/notes.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/notes/plugin.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/notes/speaker-view.html create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/pdf-export/pdfexport.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/pdf-export/plugin.yml create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/quarto-line-highlight/plugin.yml create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/quarto-support/footer.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/quarto-support/plugin.yml create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/quarto-support/support.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/reveal-menu/menu.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/reveal-menu/menu.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/reveal-menu/plugin.yml create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/reveal-menu/quarto-menu.css create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/reveal-menu/quarto-menu.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/search/plugin.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/search/search.esm.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/search/search.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/zoom/plugin.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/zoom/zoom.esm.js create mode 100644 courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/plugin/zoom/zoom.js create mode 100644 topics/confidence_interval/confidence_interval.html create mode 100644 topics/confidence_interval/confidence_interval_files/figure-html/unnamed-chunk-1-1.png create mode 100644 topics/confidence_interval/confidence_interval_files/figure-html/unnamed-chunk-2-1.png create mode 100644 topics/confidence_interval/confidence_interval_files/figure-html/unnamed-chunk-3-1.png create mode 100644 topics/confidence_interval/confidence_interval_files/libs/bootstrap/bootstrap-icons.css create mode 100644 topics/confidence_interval/confidence_interval_files/libs/bootstrap/bootstrap-icons.woff create mode 100644 topics/confidence_interval/confidence_interval_files/libs/bootstrap/bootstrap.min.css create mode 100644 topics/confidence_interval/confidence_interval_files/libs/bootstrap/bootstrap.min.js create mode 100644 topics/confidence_interval/confidence_interval_files/libs/clipboard/clipboard.min.js create mode 100644 topics/confidence_interval/confidence_interval_files/libs/quarto-html/anchor.min.js create mode 100644 topics/confidence_interval/confidence_interval_files/libs/quarto-html/popper.min.js create mode 100644 topics/confidence_interval/confidence_interval_files/libs/quarto-html/quarto-syntax-highlighting.css create mode 100644 topics/confidence_interval/confidence_interval_files/libs/quarto-html/quarto.js create mode 100644 topics/confidence_interval/confidence_interval_files/libs/quarto-html/tippy.css create mode 100644 topics/confidence_interval/confidence_interval_files/libs/quarto-html/tippy.umd.min.js diff --git a/.DS_Store b/.DS_Store index bcfb83460e63f7439159b7143b7029962c9b242c..2978e7e1cc2a30803d53552bcfcd82396ed11290 100644 GIT binary patch delta 1298 zcmeIwOGs2<6bJD0ziQr_UwUUsM@MVanKE^%$(ejm`N(IfXf>lnqR!~8h9+n7js_Ol zLuz5t;*!`4YEe)`S!PnXDvBtmMOG*+lpc#9f;N>2b(@JGkf0W=`ZoWM^KH&|ey7XV zIvsvjjMwrDmSz0G~oPKw^ROIwavIyZ)q%I+8e%caSPHtgoMfFIO zsL{@z!1as4m6R!6LZ>m`LV+U?Pje}Qil~Absg-t75B1R* zx<=P&i0;v28l!P~OCRVXP0|;dLKq?;LIW-0k$`zHz>H3BBfl5@N8V=N>0ZzEE z1wQP63_m(>09`nULpXxYJ{-eIoWeO=MnA4%0JrfFPw@=TF^&nm#4EhVCw#^v$GB)N zhSPCrTsmjtR&pg=IcE=c&mow!=|}zu&Y@nysfoPQrhZB$iDZx5?sIv(E+X!9#`Kzo z(z4ZS%73q!GM(mVWY8}^^zqp_jESKtpfD02 zr;la1EML%IP!K8bysFS(5P5N!=Xv8FLOq}-G)fcnPKEl4PzZ=c5>l{8WywPUicpLa zm1Zs0!ye#iRB@WnjP3BMK&>j#ZtTHc?8AO^<1l*Ai#`+|#|ahctO|7=7jO}S7{U$Q x#4QZtE*_~|FYr1z^`97(zhdBxa(`jVKt<}62xZD-`oDw!dMDq!8%qP}ZL>S6o4V`Vob&uSa1Q79oF0FV z|Ar$=ELc%&F%*^*$j+>OouS3=^#nSs);AEMRM87!L}?*ov0A&s-n?b2+?}YA+f8lx z37sDIzD9qCr_C2|xZ4BDEJ=fLDH)3v=PfHLE3aPP&=iX2>V(83#^eXaS}-{_+uF#? z+FXgdL|eeK-yKTe>Ud^hOC=tVY`ZxDU+;JMRnvPKXuUw>Zc1dOd~W(59uk5(*%8_ zFEmBdG(+E^LM-CJp@tUe$b=3{P=sQXpbGV9z(zE}hHY?S2V4&9LL2;OM*v+oj3YRT zV>pG=ID-M4!$l0@I&R_??&AqUc!^h-z$D(|13u#`zF}HmLXw~nl7(C$Pbd^t3zb5h zJfqR0K{l8&b$#=j=xaCB*3}pPGRc|OWIQgSph-?K{G=&eQzeULyTai#=X0j#(aKAU zq0}^Oy2;Gs0kba1c$6X}g|lLdo^i|-Wh)uuD#c0)rKf3A*;-a9sWBpP3h%A1(d)U$ z$3#&y{=wvTB0+jgFX%N*(kF#v7Eut90s~C2C;;WCKs9QxPC;nGCTtEvY=;Xi*aO#yX{vXS0p}`z-SJ|5l$h|D!(p0nzFjO8@`> diff --git a/courses/.DS_Store b/courses/.DS_Store index 7c59eeff5d43cf9623dbe807680e6909970e407f..1413e2b7441124b9c425845a57ea7bd5b51d42d2 100644 GIT binary patch delta 56 zcmZoEXernbEXBBea=k<$mw0uxg@KNOk)grlgVNHBos%!h$TN0r=8^u-vYAW4g>SRJ M+)l>L>;`|?0V5X@$p8QV delta 35 rcmZoEXernbEH&9wp>*;NY46QK(mz->b1OLWZT6Mh$+(%_;4eD>^?3~C diff --git a/courses/SM/2023-2024-S2/alternatives_nhst/Sad-P.webp b/courses/SR/2024-2025-S1/alternatives_nhst/Sad-P.webp similarity index 100% rename from courses/SM/2023-2024-S2/alternatives_nhst/Sad-P.webp rename to courses/SR/2024-2025-S1/alternatives_nhst/Sad-P.webp diff --git a/courses/SM/2023-2024-S2/alternatives_nhst/alternatives_nhst.qmd b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst.qmd similarity index 96% rename from courses/SM/2023-2024-S2/alternatives_nhst/alternatives_nhst.qmd rename to courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst.qmd index 9be4ec42..f8a9854a 100644 --- a/courses/SM/2023-2024-S2/alternatives_nhst/alternatives_nhst.qmd +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst.qmd @@ -1,8 +1,8 @@ --- title: "Alternatives to NHST" author: "Klinkenberg" -date: "26 feb 2024" -footer: "SMCR / SMCO" +date: "23 sep 2024" +footer: "Statistical Reasoning 2024-2025" format: html: default revealjs: diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst.slide.html b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst.slide.html new file mode 100644 index 00000000..da006550 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst.slide.html @@ -0,0 +1,1081 @@ + + + + + + + + + + + + + + + Alternatives to NHST + + + + + + + + + + + + + + + + +
+
+ +
+

Alternatives to NHST

+ +
+
+
+Klinkenberg +
+

+ University of Amsterdam +

+
+
+ +

2024-09-23

+
+
+
+

The problem with
P-values

+ +
+
+

There is no problem

+

The problem with P-values is that they are often misunderstood and misinterpreted. The P-value is the probability of observing a sample statistic as or more extreme as the one obtained, given that the null hypothesis is true. It is NOT the probability that the null hypothesis is true. The P-value is NOT a measure of the strength of the evidence against the null hypothesis.

+
+

The misinterpretation is the problem, and not adhering to the Nayman-Pearson paradigm

+
+
+
+

The dance of the P-value

+
+
+
+
+ +
+
+
+
+ +
+ +
+
+
+
+

H0 and HA distribution

+
+ +
+
+
+

G*Power

+

Determine the required sample size for a desired test power, significance level, and effect size.

+
+

G*Power is a tool to compute statistical power analyses for many different \(t\) tests, \(F\) tests, \(\chi^2\) tests, \(z\) tests and some exact tests.

+
+

gpower.hhu.de

+

+
+
+
+

Confidence Interval

+ +
+
+

Testing hypothesis with CI’s

+

Using confidence intervals to test hypotheses is a common practice in scientific research.

+

We can use this knowledge to test hypotheses. If the confidence interval does not contain the null hypothesis value, the null hypothesis can be rejected.

+
+

Note that this is not the same as our decision rule for NHST. In NHST, we compare the p-value to the alpha level. In the case of the confidence interval, we compare the confidence interval to the null hypothesis value.

+
+
+
+

Standard Error

+
+

95% confidence interval

+
+

\[SE = \frac{\text{Standard deviation}}{\text{Square root of sample size}} = \frac{s}{\sqrt{n}}\]

+
    +
  • Lowerbound = \(\bar{x} - 1.96 \times SE\)
  • +
  • Upperbound = \(\bar{x} + 1.96 \times SE\)
  • +
+

+
+
+

Candy weight example

+ +
+
+

Plot CI

+ +
+
+

5 out of 100 samples

+
+
+
+
+

+
+
+
+
+
+
+

Common Misinterpretations

+

Confidence intervals and levels are frequently misunderstood, and published studies have shown that even professional scientists often misinterpret them (Wikipedia, 2024)

+

Hoekstra, Morey, Rouder, & Wagenmakers (2014) administerred the following questionair to 120 researchers.

+
+
+

+
+
+
+
+

+
+
+
+
+
+
+
+
+ +
+

Important

+
+
+

All of the statements are false

+
+
+
+
+
+
+
+
+

Researcher don’t know

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 from Hoekstra et al. (2014)
#TrueFirst-Year Students (n = 442)Master Students (n = 34)Researchers (n = 118)
02%0%3%
16%24%9%
214%18%14%
326%15%25%
430%12%22%
515%21%16%
67%12%11%
+
+
+
+

Conclusion

+
+

Use both NHST and confidence intervals

+
+
+
+

Example

+

+
+

We also studied the validity by comparing the mean ability ratings of children in different grades. We expected a positive relation between grade and ability. Figure 5 shows the average ability rating for each grade and domain. As expected, children in older age groups had a higher rating than children in younger age groups. In all four domains, there is an overall significant effect of grade: addition \(F(5,1456)=1091.4,p<.01,\omega^2=.78\), subtraction \(F(5,1363)=780.5,p<.01,\omega^2=.74\), multiplication \(F(5,1215)=409.6,p<.01,\omega^2=.62\), and \(F(5,973)=223.31,p<.01,\omega^2=.53\) for division. Levene’s tests show differences in variances for the domains multiplication and division. However, the non-parametric Kruskal-Wallis tests also show significant differences for these domains: \(\chi^2(5)=753.28,p<.01\) for multiplication and \(\chi^2(5)=505.17,p<.01\) for division. For all domains, post hoc analyses show significant differences between all grades, except for the differences between grades five and six (Klinkenberg, Straatemeier, & van der Maas, 2011).

+
+ +
+
+
+

End

+ +
+
+

Contact

+ + +

+
+
+

CC BY-NC-SA 4.0

+
CC BY-NC-SA 4.0
+
+
+

+
+
+

References

+
+
+Hoekstra, R., Morey, R. D., Rouder, J. N., & Wagenmakers, E.-J. (2014). Robust misinterpretation of confidence intervals. Psychonomic Bulletin & Review, 21, 1157–1164. +
+
+Klinkenberg, S., Straatemeier, M., & van der Maas, H. L. J. (2011). Computer adaptive practice of maths ability using a new item response model for on the fly ability and difficulty estimation. Computers & Education, 57(2), 1813–1824. https://doi.org/https://doi.org/10.1016/j.compedu.2011.02.003 +
+
+Wikipedia. (2024). Confidence intervalWikipedia, the free encyclopedia. http://en.wikipedia.org/w/index.php?title=Confidence%20interval&oldid=1207611938. +
+
+
+

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/figure-revealjs/unnamed-chunk-12-1.png b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/figure-revealjs/unnamed-chunk-12-1.png new file mode 100644 index 0000000000000000000000000000000000000000..84074b2290183ea98f481214671b5e5a2ce027a1 GIT binary patch literal 56552 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 literal 0 HcmV?d00001 diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/figure-revealjs/unnamed-chunk-13-1.png b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/figure-revealjs/unnamed-chunk-13-1.png new file mode 100644 index 0000000000000000000000000000000000000000..917fb126d9bf52c0957dd82c2d384894bb0149e9 GIT binary patch literal 80710 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 yp#3wre+F&K#{IL>HgDKJ+jEO4{r|wGE%9lbB^L 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%0Dcs_4gK~*~>Di+8 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� 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�≧7<=TJe!#-W_pp56Z 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.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light-border]>.tippy-arrow:after,.tippy-box[data-theme~=light-border]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=light-border]>.tippy-arrow:after{border-color:transparent;border-style:solid}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-arrow:after{border-top-color:rgba(0,8,16,.2);border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:rgba(0,8,16,.2);border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:16px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-arrow:after{border-left-color:rgba(0,8,16,.2);border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:rgba(0,8,16,.2)}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=light-border]>.tippy-svg-arrow{fill:#fff}.tippy-box[data-theme~=light-border]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px} \ No newline at end of file diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/popper.min.js b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/popper.min.js new file mode 100644 index 00000000..e3726d72 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/popper.min.js @@ -0,0 +1,6 @@ +/** + * @popperjs/core v2.11.7 - MIT License + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/quarto-html.min.css b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/quarto-html.min.css new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/quarto-html.min.css @@ -0,0 +1 @@ + diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/quarto-syntax-highlighting.css b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/quarto-syntax-highlighting.css new file mode 100644 index 00000000..b30ce576 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/quarto-syntax-highlighting.css @@ -0,0 +1,205 @@ +/* quarto syntax highlight colors */ +:root { + --quarto-hl-ot-color: #003B4F; + --quarto-hl-at-color: #657422; + --quarto-hl-ss-color: #20794D; + --quarto-hl-an-color: #5E5E5E; + --quarto-hl-fu-color: #4758AB; + --quarto-hl-st-color: #20794D; + --quarto-hl-cf-color: #003B4F; + --quarto-hl-op-color: #5E5E5E; + --quarto-hl-er-color: #AD0000; + --quarto-hl-bn-color: #AD0000; + --quarto-hl-al-color: #AD0000; + --quarto-hl-va-color: #111111; + --quarto-hl-bu-color: inherit; + --quarto-hl-ex-color: inherit; + --quarto-hl-pp-color: #AD0000; + --quarto-hl-in-color: #5E5E5E; + --quarto-hl-vs-color: #20794D; + --quarto-hl-wa-color: #5E5E5E; + --quarto-hl-do-color: #5E5E5E; + --quarto-hl-im-color: #00769E; + --quarto-hl-ch-color: #20794D; + --quarto-hl-dt-color: #AD0000; + --quarto-hl-fl-color: #AD0000; + --quarto-hl-co-color: #5E5E5E; + --quarto-hl-cv-color: #5E5E5E; + --quarto-hl-cn-color: #8f5902; + --quarto-hl-sc-color: #5E5E5E; + --quarto-hl-dv-color: #AD0000; + --quarto-hl-kw-color: #003B4F; +} + +/* other quarto variables */ +:root { + --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +pre > code.sourceCode > span { + color: #003B4F; +} + +code span { + color: #003B4F; +} + +code.sourceCode > span { + color: #003B4F; +} + +div.sourceCode, +div.sourceCode pre.sourceCode { + color: #003B4F; +} + +code span.ot { + color: #003B4F; + font-style: inherit; +} + +code span.at { + color: #657422; + font-style: inherit; +} + +code span.ss { + color: #20794D; + font-style: inherit; +} + +code span.an { + color: #5E5E5E; + font-style: inherit; +} + +code span.fu { + color: #4758AB; + font-style: inherit; +} + +code span.st { + color: #20794D; + font-style: inherit; +} + +code span.cf { + color: #003B4F; + font-weight: bold; + font-style: inherit; +} + +code span.op { + color: #5E5E5E; + font-style: inherit; +} + +code span.er { + color: #AD0000; + font-style: inherit; +} + +code span.bn { + color: #AD0000; + font-style: inherit; +} + +code span.al { + color: #AD0000; + font-style: inherit; +} + +code span.va { + color: #111111; + font-style: inherit; +} + +code span.bu { + font-style: inherit; +} + +code span.ex { + font-style: inherit; +} + +code span.pp { + color: #AD0000; + font-style: inherit; +} + +code span.in { + color: #5E5E5E; + font-style: inherit; +} + +code span.vs { + color: #20794D; + font-style: inherit; +} + +code span.wa { + color: #5E5E5E; + font-style: italic; +} + +code span.do { + color: #5E5E5E; + font-style: italic; +} + +code span.im { + color: #00769E; + font-style: inherit; +} + +code span.ch { + color: #20794D; + font-style: inherit; +} + +code span.dt { + color: #AD0000; + font-style: inherit; +} + +code span.fl { + color: #AD0000; + font-style: inherit; +} + +code span.co { + color: #5E5E5E; + font-style: inherit; +} + +code span.cv { + color: #5E5E5E; + font-style: italic; +} + +code span.cn { + color: #8f5902; + font-style: inherit; +} + +code span.sc { + color: #5E5E5E; + font-style: inherit; +} + +code span.dv { + color: #AD0000; + font-style: inherit; +} + +code span.kw { + color: #003B4F; + font-weight: bold; + font-style: inherit; +} + +.prevent-inlining { + content: " !el.hasAttribute("disabled") && !el.getAttribute("aria-hidden") + ); + }; + + /** + * Remove roles and attributes from a tab and its content + * @param {Node} tab The tab + * @param {Node} content The tab content + * @param {Object} settings User settings and options + */ + var destroyTab = function (tab, content, settings) { + // Remove the generated ID + if (tab.id.slice(0, settings.idPrefix.length) === settings.idPrefix) { + tab.id = ""; + } + + // remove event listener + tab.removeEventListener("focus", focusHandler, true); + + // Remove roles + tab.removeAttribute("role"); + tab.removeAttribute("aria-controls"); + tab.removeAttribute("aria-selected"); + tab.removeAttribute("tabindex"); + tab.closest("li").removeAttribute("role"); + content.removeAttribute("role"); + content.removeAttribute("aria-labelledby"); + content.removeAttribute("hidden"); + }; + + /** + * Add the required roles and attributes to a tab and its content + * @param {Node} tab The tab + * @param {Node} content The tab content + * @param {Object} settings User settings and options + */ + var setupTab = function (tab, content, settings) { + // Give tab an ID if it doesn't already have one + if (!tab.id) { + tab.id = settings.idPrefix + content.id; + } + + // Add roles + tab.setAttribute("role", "tab"); + tab.setAttribute("aria-controls", content.id); + tab.closest("li").setAttribute("role", "presentation"); + content.setAttribute("role", "tabpanel"); + content.setAttribute("aria-labelledby", tab.id); + + // Add selected state + if (tab.matches(settings.default)) { + tab.setAttribute("aria-selected", "true"); + } else { + tab.setAttribute("aria-selected", "false"); + content.setAttribute("hidden", "hidden"); + } + + // add focus event listender + tab.addEventListener("focus", focusHandler); + }; + + /** + * Hide a tab and its content + * @param {Node} newTab The new tab that's replacing it + */ + var hide = function (newTab) { + // Variables + var tabGroup = newTab.closest('[role="tablist"]'); + if (!tabGroup) return {}; + var tab = tabGroup.querySelector('[role="tab"][aria-selected="true"]'); + if (!tab) return {}; + var content = document.querySelector(tab.hash); + + // Hide the tab + tab.setAttribute("aria-selected", "false"); + + // Hide the content + if (!content) return { previousTab: tab }; + content.setAttribute("hidden", "hidden"); + + // Return the hidden tab and content + return { + previousTab: tab, + previousContent: content, + }; + }; + + /** + * Show a tab and its content + * @param {Node} tab The tab + * @param {Node} content The tab content + */ + var show = function (tab, content) { + tab.setAttribute("aria-selected", "true"); + content.removeAttribute("hidden"); + tab.focus(); + }; + + /** + * Toggle a new tab + * @param {Node} tab The tab to show + */ + var toggle = function (tab) { + // Make sure there's a tab to toggle and it's not already active + if (!tab || tab.getAttribute("aria-selected") == "true") return; + + // Variables + var content = document.querySelector(tab.hash); + if (!content) return; + + // Hide active tab and content + var details = hide(tab); + + // Show new tab and content + show(tab, content); + + // Add event details + details.tab = tab; + details.content = content; + + // Emit a custom event + emitEvent(tab, details); + }; + + /** + * Get all of the tabs in a tablist + * @param {Node} tab A tab from the list + * @return {Object} The tabs and the index of the currently active one + */ + var getTabsMap = function (tab) { + var tabGroup = tab.closest('[role="tablist"]'); + var tabs = tabGroup ? tabGroup.querySelectorAll('[role="tab"]') : null; + if (!tabs) return; + return { + tabs: tabs, + index: Array.prototype.indexOf.call(tabs, tab), + }; + }; + + /** + * Switch the active tab based on keyboard activity + * @param {Node} tab The currently active tab + * @param {Key} key The key that was pressed + */ + var switchTabs = function (tab, key) { + // Get a map of tabs + var map = getTabsMap(tab); + if (!map) return; + var length = map.tabs.length - 1; + var index; + + // Go to previous tab + if (["ArrowUp", "ArrowLeft", "Up", "Left"].indexOf(key) > -1) { + index = map.index < 1 ? length : map.index - 1; + } + + // Go to next tab + else if (["ArrowDown", "ArrowRight", "Down", "Right"].indexOf(key) > -1) { + index = map.index === length ? 0 : map.index + 1; + } + + // Go to home + else if (key === "Home") { + index = 0; + } + + // Go to end + else if (key === "End") { + index = length; + } + + // Toggle the tab + toggle(map.tabs[index]); + }; + + /** + * Create the Constructor object + */ + var Constructor = function (selector, options) { + // + // Variables + // + + var publicAPIs = {}; + var settings, tabWrapper; + + // + // Methods + // + + publicAPIs.destroy = function () { + // Get all tabs + var tabs = tabWrapper.querySelectorAll("a"); + + // Add roles to tabs + Array.prototype.forEach.call(tabs, function (tab) { + // Get the tab content + var content = document.querySelector(tab.hash); + if (!content) return; + + // Setup the tab + destroyTab(tab, content, settings); + }); + + // Remove role from wrapper + tabWrapper.removeAttribute("role"); + + // Remove event listeners + document.documentElement.removeEventListener( + "click", + clickHandler, + true + ); + tabWrapper.removeEventListener("keydown", keyHandler, true); + + // Reset variables + settings = null; + tabWrapper = null; + }; + + /** + * Setup the DOM with the proper attributes + */ + publicAPIs.setup = function () { + // Variables + tabWrapper = document.querySelector(selector); + if (!tabWrapper) return; + var tabs = tabWrapper.querySelectorAll("a"); + + // Add role to wrapper + tabWrapper.setAttribute("role", "tablist"); + + // Add roles to tabs. provide dynanmic tab indexes if we are within reveal + var contentTabindexes = + window.document.body.classList.contains("reveal-viewport"); + var nextTabindex = 1; + Array.prototype.forEach.call(tabs, function (tab) { + if (contentTabindexes) { + tab.setAttribute("tabindex", "" + nextTabindex++); + } else { + tab.setAttribute("tabindex", "0"); + } + + // Get the tab content + var content = document.querySelector(tab.hash); + if (!content) return; + + // set tab indexes for content + if (contentTabindexes) { + getKeyboardFocusableElements(content).forEach(function (el) { + el.setAttribute("tabindex", "" + nextTabindex++); + }); + } + + // Setup the tab + setupTab(tab, content, settings); + }); + }; + + /** + * Toggle a tab based on an ID + * @param {String|Node} id The tab to toggle + */ + publicAPIs.toggle = function (id) { + // Get the tab + var tab = id; + if (typeof id === "string") { + tab = document.querySelector( + selector + ' [role="tab"][href*="' + id + '"]' + ); + } + + // Toggle the tab + toggle(tab); + }; + + /** + * Handle click events + */ + var clickHandler = function (event) { + // Only run on toggles + var tab = event.target.closest(selector + ' [role="tab"]'); + if (!tab) return; + + // Prevent link behavior + event.preventDefault(); + + // Toggle the tab + toggle(tab); + }; + + /** + * Handle keydown events + */ + var keyHandler = function (event) { + // Only run if a tab is in focus + var tab = document.activeElement; + if (!tab.matches(selector + ' [role="tab"]')) return; + + // Only run for specific keys + if (["Home", "End"].indexOf(event.key) < 0) return; + + // Switch tabs + switchTabs(tab, event.key); + }; + + /** + * Initialize the instance + */ + var init = function () { + // Merge user options with defaults + settings = extend(defaults, options || {}); + + // Setup the DOM + publicAPIs.setup(); + + // Add event listeners + document.documentElement.addEventListener("click", clickHandler, true); + tabWrapper.addEventListener("keydown", keyHandler, true); + }; + + // + // Initialize and return the Public APIs + // + + init(); + return publicAPIs; + }; + + // + // Return the Constructor + // + + return Constructor; + } +); diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tippy.css b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tippy.css new file mode 100644 index 00000000..e6ae635c --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tippy.css @@ -0,0 +1 @@ +.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tippy.umd.min.js b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tippy.umd.min.js new file mode 100644 index 00000000..ca292be3 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/quarto-html/tippy.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); + diff --git a/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reset.css b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reset.css new file mode 100644 index 00000000..e2385390 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/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/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.css b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.css new file mode 100644 index 00000000..5f80fd09 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/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/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.esm.js b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.esm.js new file mode 100644 index 00000000..f18da895 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/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)},s=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},a=(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,s="")=>{let a=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]=s(unescape(i))}return void 0!==e.dependencies&&delete e.dependencies,e},c=(e,t=0)=>{if(e){let i,s=e.style.height;return e.style.height="0px",e.parentNode.style.height="auto",i=t-e.parentNode.offsetHeight,e.style.height=s+"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 s=e.slideBackgroundElement;if(s){s.style.display="block";let t=e.slideBackgroundContentElement,a=e.getAttribute("data-background-iframe");if(!1===s.hasAttribute("data-loaded")){s.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(a&&!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",a),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(s)&&!/autoplay=(1|true|yes)/gi.test(a)&&n.getAttribute("src")!==a&&n.setAttribute("src",a)}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,s)=>{t(this.Reveal.getSlidesElement(),"iframe["+e+'*="'+i+'"]').forEach((t=>{let i=t.getAttribute(e);i&&-1===i.indexOf(s)&&t.setAttribute(e,i+(/\?/.test(i)?"&":"?")+s)}))};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"),s=!!r(e.target,".present");if(i&&s){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,s={}){s=e({unloadIframes:!0},s),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===s.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(),s="h.v";if("function"==typeof i.slideNumber)t=i.slideNumber(e);else{"string"==typeof i.slideNumber&&(s=i.slideNumber),/c/.test(s)||1!==this.Reveal.getHorizontalSlides().length||(s="c");let a=e&&"uncounted"===e.dataset.visibility?0:1;switch(t=[],s){case"c":t.push(this.Reveal.getSlidePastCount(e)+a);break;case"c/t":t.push(this.Reveal.getSlidePastCount(e)+a,"/",this.Reveal.getTotalSlides());break;default:let i=this.Reveal.getIndices(e);t.push(i.h+a);let n="h/v"===s?"/":".";this.Reveal.isVerticalSlide(e)&&t.push(n,i.v+1)}}let a="#"+this.Reveal.location.getHash(e);return this.formatNumber(t[0],t[1],t[2],a)}formatNumber(e,t,i,s="#"+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 s=e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);if(s)return{r:parseInt(s[1],10),g:parseInt(s[2],10),b:parseInt(s[3],10)};let a=e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);return a?{r:parseInt(a[1],10),g:parseInt(a[2],10),b:parseInt(a[3],10),a:parseFloat(a[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 s=document.createElement("div");return s.className="slide-background-content",i.appendChild(s),t.appendChild(i),e.slideBackgroundElement=i,e.slideBackgroundContentElement=s,this.sync(e),i}sync(e){const t=e.slideBackgroundElement,i=e.slideBackgroundContentElement,s={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"),backgroundRepeat:e.getAttribute("data-background-repeat"),backgroundPosition:e.getAttribute("data-background-position"),backgroundTransition:e.getAttribute("data-background-transition"),backgroundOpacity:e.getAttribute("data-background-opacity")},a=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="",s.background&&(/^(http|file|\/\/)/gi.test(s.background)||/\.(svg|png|jpg|jpeg|gif|bmp)([?#\s]|$)/gi.test(s.background)?e.setAttribute("data-background-image",s.background):t.style.background=s.background),(s.background||s.backgroundColor||s.backgroundImage||s.backgroundVideo||s.backgroundIframe)&&t.setAttribute("data-background-hash",s.background+s.backgroundSize+s.backgroundImage+s.backgroundVideo+s.backgroundIframe+s.backgroundColor+s.backgroundRepeat+s.backgroundPosition+s.backgroundTransition+s.backgroundOpacity),s.backgroundSize&&t.setAttribute("data-background-size",s.backgroundSize),s.backgroundColor&&(t.style.backgroundColor=s.backgroundColor),s.backgroundTransition&&t.setAttribute("data-background-transition",s.backgroundTransition),a&&t.setAttribute("data-preload",""),s.backgroundSize&&(i.style.backgroundSize=s.backgroundSize),s.backgroundRepeat&&(i.style.backgroundRepeat=s.backgroundRepeat),s.backgroundPosition&&(i.style.backgroundPosition=s.backgroundPosition),s.backgroundOpacity&&(i.style.opacity=s.backgroundOpacity);let n=s.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(),s=this.Reveal.getIndices(),a=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"),os.h?i.classList.add(r):(i.classList.add("present"),a=i),(e||o===s.h)&&t(i,".slide-background").forEach(((e,t)=>{e.classList.remove("past","present","future"),ts.v?e.classList.add("future"):(e.classList.add("present"),o===s.h&&(a=e))}))})),this.previousBackground&&this.Reveal.slideContent.stopEmbeddedContent(this.previousBackground,{unloadIframes:!this.Reveal.slideContent.shouldPreload(this.previousBackground)}),a){this.Reveal.slideContent.startEmbeddedContent(a);let e=a.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=a.getAttribute("data-background-hash");i&&i===t&&a!==this.previousBackground&&this.element.classList.add("no-transition"),this.previousBackground=a}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,s=this.Reveal.getHorizontalSlides(),a=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=s.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=a.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(),s=i.indexOf(t),a=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")&&!(s>a?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=s>a?"forward":"backward";let n=this.getAutoAnimatableElements(e,t).map((e=>this.autoAnimateElements(e.from,e.to,e.options||{},i,A++)));if("false"!==t.dataset.autoAnimateUnmatched&&!0===this.Reveal.getConfig().autoAnimateUnmatched){let e=.8*i.duration,s=.2*i.duration;this.getUnmatchedAutoAnimateElements(t).forEach((e=>{let t=this.getAutoAnimateOptions(e,i),s="unmatched";t.duration===i.duration&&t.delay===i.delay||(s="unmatched-"+A++,n.push(`[data-auto-animate="running"] [data-auto-animate-target="${s}"] { transition: opacity ${t.duration}s ease ${t.delay}s; }`)),e.dataset.autoAnimateTarget=s}),this),n.push(`[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${e}s ease ${s}s; }`)}this.autoAnimateStyleSheet.innerHTML=n.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,s,a){e.dataset.autoAnimateTarget="",t.dataset.autoAnimateTarget=a;let n=this.getAutoAnimateOptions(t,s);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"===s.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 s=!1!==i.translate&&(0!==t.x||0!==t.y),a=!1!==i.scale&&(0!==t.scaleX||0!==t.scaleY);if(s||a){let e=[];s&&e.push(`translate(${t.x}px, ${t.y}px)`),a&&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="'+a+'"] {'+Object.keys(r.styles).map((e=>e+": "+r.styles[e]+" !important;")).join("")+'}[data-auto-animate="running"] [data-auto-animate-target="'+a+'"] {'+Object.keys(o.styles).map((e=>e+": "+o.styles[e]+" !important;")).join("")+"}"}return l}getAutoAnimateOptions(t,i){let s={easing:this.Reveal.getConfig().autoAnimateEasing,duration:this.Reveal.getConfig().autoAnimateDuration,delay:0};if(s=e(s,i),t.parentNode){let e=r(t.parentNode,"[data-auto-animate-target]");e&&(s=this.getAutoAnimateOptions(e,s))}return t.dataset.autoAnimateEasing&&(s.easing=t.dataset.autoAnimateEasing),t.dataset.autoAnimateDuration&&(s.duration=parseFloat(t.dataset.autoAnimateDuration)),t.dataset.autoAnimateDelay&&(s.delay=parseFloat(t.dataset.autoAnimateDelay)),s}getAutoAnimatableProperties(e,t,i){let s=this.Reveal.getConfig(),a={styles:[]};if(!1!==i.translate||!1!==i.scale){let e;if("function"==typeof i.measure)e=i.measure(t);else if(s.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}}a.x=e.x,a.y=e.y,a.width=e.width,a.height=e.height}const n=getComputedStyle(t);return(i.styles||s.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&&(a.styles[t.property]=i)})),a}getAutoAnimatableElements(e,t){let i=("function"==typeof this.Reveal.getConfig().autoAnimateMatcher?this.Reveal.getConfig().autoAnimateMatcher:this.getAutoAnimatePairs).call(this,e,t),s=[];return i.filter(((e,t)=>{if(-1===s.indexOf(e.to))return s.push(e.to),!0}))}getAutoAnimatePairs(e,t){let i=[];const s="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,s,(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,s)?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,s,a,n){let r={},o={};[].slice.call(t.querySelectorAll(s)).forEach(((e,t)=>{const i=a(e);"string"==typeof i&&i.length&&(r[i]=r[i]||[],r[i].push(e))})),[].slice.call(i.querySelectorAll(s)).forEach(((t,i)=>{const s=a(t);let l;if(o[s]=o[s]||[],o[s].push(t),r[s]){const e=o[s].length-1,t=r[s].length-1;r[s][e]?(l=r[s][e],r[s][e]=null):r[s][t]&&(l=r[s][t],r[s][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=[],s=[],a=[];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 s.push([e])})),i=i.concat(s);let n=0;return i.forEach((e=>{e.forEach((e=>{a.push(e),e.setAttribute("data-fragment-index",n)})),n++})),!0===t?i:a}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:[]},s=this.Reveal.getCurrentSlide();if(s&&this.Reveal.getConfig().fragments&&(t=t||this.sort(s.querySelectorAll(".fragment"))).length){let a=0;if("number"!=typeof e){let t=this.sort(s.querySelectorAll(".fragment.visible")).pop();t&&(e=parseInt(t.getAttribute("data-fragment-index")||0,10))}Array.from(t).forEach(((t,s)=>{if(t.hasAttribute("data-fragment-index")&&(s=parseInt(t.getAttribute("data-fragment-index"),10)),a=Math.max(a,s),s<=e){let a=t.classList.contains("visible");t.classList.add("visible"),t.classList.remove("current-fragment"),s===e&&(this.Reveal.announceStatus(this.Reveal.getStatusText(t)),t.classList.add("current-fragment"),this.Reveal.slideContent.startEmbeddedContent(t)),a||(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,a),-1),s.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 s=this.sort(i.querySelectorAll(".fragment:not(.disabled)"));if(s.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 a=this.update(e,s);return a.hidden.length&&this.Reveal.dispatchEvent({type:"fragmenthidden",data:{fragment:a.hidden[0],fragments:a.hidden}}),a.shown.length&&this.Reveal.dispatchEvent({type:"fragmentshown",data:{fragment:a.shown[0],fragments:a.shown}}),this.Reveal.controls.update(),this.Reveal.progress.update(),this.Reveal.getConfig().fragmentInURL&&this.Reveal.location.writeURL(),!(!a.shown.length&&!a.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 s=this.Reveal.getIndices();this.Reveal.dispatchEvent({type:"overviewshown",data:{indexh:s.h,indexv:s.v,currentSlide:this.Reveal.getCurrentSlide()}})}}layout(){this.Reveal.getHorizontalSlides().forEach(((e,i)=>{e.setAttribute("data-index-h",i),a(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),a(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")}))})),Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach(((e,i)=>{a(e,"translate3d("+i*this.overviewSlideWidth+"px, 0, 0)"),t(e,".slide-background").forEach(((e,t)=>{a(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=>{a(e,""),e.removeEventListener("click",this.onSlideClicked,!0)})),t(this.Reveal.getBackgroundsElement(),".slide-background").forEach((e=>{a(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,s=!this.Reveal.isAutoSliding();this.Reveal.onUserInput(e);let a=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(a||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(s):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,s;s=1e3,(i="MAX_REPLACE_STATE_FREQUENCY")in(t=this)?Object.defineProperty(t,i,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[i]=s,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,s=e.hashOneBasedIndex?1:0,a=parseInt(i[0],10)-s||0,n=parseInt(i[1],10)-s||0;return e.fragmentInURL&&(t=parseInt(i[2],10),isNaN(t)&&(t=void 0)),{h:a,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(),s=i?i.getAttribute("id"):null;s&&(s=encodeURIComponent(s));let a=this.Reveal.getIndices(e);if(this.Reveal.getConfig().fragmentInURL||(a.f=void 0),"string"==typeof s&&s.length)t="/"+s,a.f>=0&&(t+="/"+a.f);else{let e=this.Reveal.getConfig().hashOneBasedIndex?1:0;(a.h>0||a.v>0||a.f>=0)&&(t+=a.h+e),(a.v>0||a.f>=0)&&(t+="/"+(a.v+e)),a.f>=0&&(t+="/"+a.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,s=Math.floor(e.clientX/this.getMaxWidth()*i);this.Reveal.getConfig().rtl&&(s=i-s);let a=this.Reveal.getIndices(t[s]);this.Reveal.slide(a.h,a.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 s=document.querySelector("head");s.insertBefore(i,s.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=[],s=0;if(t.forEach((e=>{e.condition&&!e.condition()||(e.async?this.asyncDependencies.push(e):i.push(e))})),i.length){s=i.length;const t=t=>{t&&"function"==typeof t.callback&&t.callback(),0==--s&&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 s,a=()=>{0==--i?this.loadAsync().then(e):s()},n=0;s=()=>{let e=t[n++];if("function"==typeof e.init){let t=e.init(this.Reveal);t&&"function"==typeof t.then?t.then(a):a()}else a()},s()}}))}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"),s=e.slideNumber&&/all|print/i.test(e.showSlideNumber),a=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),n=Math.floor(a.width*(1+e.margin)),r=Math.floor(a.height*(1+e.margin)),o=a.width,d=a.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;i.forEach((function(i,a){if(!1===i.classList.contains("stack")){let l=(n-o)/2,c=(r-d)/2;const v=u[a];let p=Math.max(Math.ceil(v/r),1);p=Math.min(p,e.pdfMaxPagesPerSlide),(1===p&&e.center||i.classList.contains("center"))&&(c=Math.max((r-v)/2,0));const m=document.createElement("div");if(g.push(m),m.className="pdf-page",m.style.height=(r+e.pdfPageHeightOffset)*p+"px",h&&(m.style.background=h),m.appendChild(i),i.style.left=l+"px",i.style.top=c+"px",i.style.width=o+"px",this.Reveal.slideContent.layout(i),i.slideBackgroundElement&&m.insertBefore(i.slideBackgroundElement,i),e.showNotes){const t=this.Reveal.getSlideNotes(i);if(t){const i=8,s="string"==typeof e.showNotes?e.showNotes:"inline",a=document.createElement("div");a.classList.add("speaker-notes"),a.classList.add("speaker-notes-pdf"),a.setAttribute("data-layout",s),a.innerHTML=t,"separate-page"===s?g.push(a):(a.style.left=i+"px",a.style.bottom=i+"px",a.style.width=n-2*i+"px",m.appendChild(a))}}if(s){const e=a+1,t=document.createElement("div");t.classList.add("slide-number"),t.classList.add("slide-number-pdf"),t.innerHTML=e,m.appendChild(t)}if(e.pdfSeparateFragments){const e=this.Reveal.fragments.sort(m.querySelectorAll(".fragment"),!0);let t;e.forEach((function(e){t&&t.forEach((function(e){e.classList.remove("current-fragment")})),e.forEach((function(e){e.classList.add("visible","current-fragment")}),this);const i=m.cloneNode(!0);g.push(i),t=e}),this),e.forEach((function(e){e.forEach((function(e){e.classList.remove("visible","current-fragment")}))}))}else t(m,".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,s=e.touches[0].clientY;if(1===e.touches.length&&2!==this.touchStartCount){let a=this.Reveal.availableRoutes({includeFragments:!0}),n=i-this.touchStartX,r=s-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&&a.up?(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.prev():this.Reveal.up()):r<-40&&a.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,s=this.diameter2,a=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,s,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,s,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,s,t,r,n,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(i-14,s-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,a),this.context.fillRect(18,0,10,a)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,a),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),J=new y(h),Q=new k(h),Z=new E(h),G=new L(h),ee=new C(h),te=new x(h),ie=new P(h),se=new N(h),ae=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(),Z.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"),Z.render(),J.render(),se.render(),ae.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"),s="none"===window.getComputedStyle(e).display;"true"===i||s||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",Ht),document.addEventListener("webkitfullscreenchange",Ht)}function Ee(){w.postMessage&&window.addEventListener("message",Dt,!1)}function Re(t){const s={...w};if("object"==typeof t&&e(w,t),!1===h.isReady())return;const a=K.wrapper.querySelectorAll(".slides section").length;K.wrapper.classList.remove(s.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])")),Q.reset(),f&&(f.destroy(),f=null),a>1&&w.autoSlide&&w.autoSlideStoppable&&(f=new B(K.wrapper,(()=>Math.min(Math.max((Date.now()-X)/$,0),1))),f.on("click",Bt),Y=!1),"default"!==w.navigationMode?K.wrapper.setAttribute("data-navigation-mode",w.navigationMode):K.wrapper.removeAttribute("data-navigation-mode"),ce.configure(w,s),le.configure(w,s),ne.configure(w,s),se.configure(w,s),ae.configure(w,s),te.configure(w,s),G.configure(w,s),J.configure(w,s),Ge()}function Se(){window.addEventListener("resize",Ft,!1),w.touch&&de.bind(),w.keyboard&&te.bind(),w.progress&&ae.bind(),w.respondToHashChanges&&ie.bind(),se.bind(),le.bind(),K.slides.addEventListener("click",Tt,!1),K.slides.addEventListener("transitionend",It,!1),K.pauseOverlay.addEventListener("click",Xe,!1),w.focusBodyOnPageVisibilityChange&&document.addEventListener("visibilitychange",zt,!1)}function Ae(){de.unbind(),le.unbind(),te.unbind(),se.unbind(),ae.unbind(),ie.unbind(),window.removeEventListener("resize",Ft,!1),K.slides.removeEventListener("click",Tt,!1),K.slides.removeEventListener("transitionend",It,!1),K.pauseOverlay.removeEventListener("click",Xe,!1)}function ke(){Ae(),Rt(),De(),ce.destroy(),le.destroy(),re.destroy(),ne.destroy(),se.destroy(),ae.destroy(),Z.destroy(),J.destroy(),document.removeEventListener("fullscreenchange",Ht),document.removeEventListener("webkitfullscreenchange",Ht),document.removeEventListener("visibilitychange",zt,!1),window.removeEventListener("message",Dt,!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?a(K.slides,W.layout+" "+W.overview):a(K.slides,W.overview)}function Pe({target:t=K.wrapper,type:i,data:s,bubbles:a=!0}){let n=document.createEvent("HTMLEvents",1,2);return n.initEvent(i,a,!0),e(n,s),t.dispatchEvent(n),t===K.wrapper&&Ne(i),n}function Ne(t,i){if(w.postMessageEvents&&window.parent!==window.self){let s={namespace:"reveal",eventName:t,state:yt()};e(s,i),window.parent.postMessage(JSON.stringify(s),"*")}}function Me(e="a"){Array.from(K.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",qt,!1)}))}function De(e="a"){Array.from(K.wrapper.querySelectorAll(e)).forEach((e=>{/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",qt,!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,s=i.length;t .stretch, section > .r-stretch").forEach((t=>{let s=c(t,i);if(/(img|video)/gi.test(t.nodeName)){const i=t.naturalWidth||t.videoWidth,a=t.naturalHeight||t.videoHeight,n=Math.min(e/i,s/a);t.style.width=i*n+"px",t.style.height=a*n+"px"}else t.style.width=e+"px",t.style.height=s+"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");Rt(),K.wrapper.classList.add("paused"),!1===e&&Pe({type:"paused"})}}function Xe(){const e=K.wrapper.classList.contains("paused");K.wrapper.classList.remove("paused"),Et(),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 Je(e){"boolean"==typeof e?e?At():St():Y?At():St()}function Qe(){return!(!$||Y)}function Ze(e,t,i,s){if(Pe({type:"beforeslidechange",data:{indexh:void 0===e?u:e,indexv:void 0===t?v:t,origin:s}}).defaultPrevented)return;p=m;const a=K.wrapper.querySelectorAll(".slides>section");if(0===a.length)return;void 0!==t||ee.isActive()||(t=Ue(a[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=st(".slides>section",void 0===e?u:e),v=st(".slides>section.present>section",void 0===t?v:t);let l=u!==r||v!==o;l||(p=null);let d=a[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"),at(),He(),ee.isActive()&&ee.update(),void 0!==i&&G.goto(i),p&&p!==m&&(p.classList.remove("present"),p.setAttribute("aria-hidden","true"),Ve()&&setTimeout((()=>{ut().forEach((e=>{Oe(e,0)}))}),0));e:for(let e=0,t=I.length;e{fe(be(m))})),ae.update(),se.update(),ce.update(),Z.update(),Z.updateParallax(),J.update(),G.update(),ie.writeURL(),Et(),h&&(setTimeout((()=>{K.slides.classList.remove("disable-slide-transitions")}),0),w.autoAnimate&&Q.run(p,m))}function Ge(){Ae(),Se(),He(),$=w.autoSlide,Et(),Z.create(),ie.writeURL(),G.sortAll(),se.update(),ae.update(),at(),ce.update(),ce.updateVisibility(),Z.update(!0),J.update(),_.formatEmbeddedContent(),!1===w.autoPlayMedia?_.stopEmbeddedContent(m,{unloadIframes:!1}):_.startEmbeddedContent(m),ee.isActive()&&ee.layout()}function et(e=m){Z.sync(e),G.sync(e),_.load(e),Z.update(),ce.update()}function tt(){ct().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=ct()){e.forEach(((t,i)=>{let s=e[Math.floor(Math.random()*e.length)];s.parentNode===t.parentNode&&t.parentNode.insertBefore(t,s);let a=t.querySelectorAll("section");a.length&&it(a)}))}function st(e,i){let s=t(K.wrapper,e),a=s.length,n=oe.isPrintingPDF();if(a){w.loop&&(i%=a)<0&&(i=a+i),i=Math.max(Math.min(i,a-1),0);for(let e=0;e{e.classList.add("visible"),e.classList.remove("current-fragment")}))):e>i&&(a.classList.add(r?"past":"future"),w.fragments&&t(a,".fragment.visible").forEach((e=>{e.classList.remove("visible","current-fragment")})))}let e=s[i],r=e.classList.contains("present");e.classList.add("present"),e.removeAttribute("hidden"),e.removeAttribute("aria-hidden"),r||Pe({target:e,type:"visible",bubbles:!1});let o=e.getAttribute("data-state");o&&(I=I.concat(o.split(" ")))}else i=0;return i}function at(){let e,i,s=ct(),a=s.length;if(a&&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"),s={left:u>0,right:u0,down:v1&&(s.left=!0,s.right=!0),i.length>1&&(s.up=!0,s.down=!0)),t.length>1&&"linear"===w.navigationMode&&(s.right=s.right||s.down,s.left=s.left||s.up),!0===e){let e=G.availableRoutes();s.left=s.left||e.prev,s.up=s.up||e.prev,s.down=s.down||e.next,s.right=s.right||e.next}if(w.rtl){let e=s.left;s.left=s.right,s.right=e}return s}function rt(e=m){let t=ct(),i=0;e:for(let s=0;s0){let i=.9;t+=m.querySelectorAll(".fragment.visible").length/e.length*i}}return Math.min(t/(e-1),1)}function lt(e){let i,s=u,a=v;if(e){let i=We(e),n=i?e.parentNode:e,r=ct();s=Math.max(r.indexOf(n),0),a=void 0,i&&(a=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:s,v:a,f:i}}function dt(){return t(K.wrapper,'.slides section:not(.stack):not([data-visibility="uncounted"])')}function ct(){return t(K.wrapper,".slides>section")}function ht(){return t(K.wrapper,".slides>section>section")}function ut(){return t(K.wrapper,".slides>section.stack")}function gt(){return ct().length>1}function vt(){return ht().length>1}function pt(){return dt().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()&&!G.availableRoutes().next&&!0!==w.loop||(j=setTimeout((()=>{"function"==typeof w.autoSlideMethod?w.autoSlideMethod():Nt(),Et()}),$),X=Date.now()),f&&f.setPlaying(-1!==j)}}function Rt(){clearTimeout(j),j=-1}function St(){$&&!Y&&(Y=!0,Pe({type:"autoslidepaused"}),clearTimeout(j),f&&f.setPlaying(!1))}function At(){$&&Y&&(Y=!1,Pe({type:"autoslideresumed"}),Et())}function kt({skipFragments:e=!1}={}){A.hasNavigatedHorizontally=!0,w.rtl?(ee.isActive()||e||!1===G.next())&&nt().left&&Ze(u+1,"grid"===w.navigationMode?v:void 0):(ee.isActive()||e||!1===G.prev())&&nt().left&&Ze(u-1,"grid"===w.navigationMode?v:void 0)}function Lt({skipFragments:e=!1}={}){A.hasNavigatedHorizontally=!0,w.rtl?(ee.isActive()||e||!1===G.prev())&&nt().right&&Ze(u-1,"grid"===w.navigationMode?v:void 0):(ee.isActive()||e||!1===G.next())&&nt().right&&Ze(u+1,"grid"===w.navigationMode?v:void 0)}function Ct({skipFragments:e=!1}={}){(ee.isActive()||e||!1===G.prev())&&nt().up&&Ze(u,v-1)}function xt({skipFragments:e=!1}={}){A.hasNavigatedVertically=!0,(ee.isActive()||e||!1===G.next())&&nt().down&&Ze(u,v+1)}function Pt({skipFragments:e=!1}={}){if(e||!1===G.prev())if(nt().up)Ct({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;Ze(u-1,e)}else kt({skipFragments:e})}}function Nt({skipFragments:e=!1}={}){if(A.hasNavigatedHorizontally=!0,A.hasNavigatedVertically=!0,e||!1===G.next()){let t=nt();t.down&&t.right&&w.loop&&Ke()&&(t.down=!1),t.down?xt({skipFragments:e}):w.rtl?kt({skipFragments:e}):Lt({skipFragments:e})}}function Mt(e){w.autoSlideStoppable&&St()}function Dt(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 It(e){"running"===V&&/section/gi.test(e.target.nodeName)&&(V="idle",Pe({type:"slidetransitionend",data:{indexh:u,indexv:v,previousSlide:p,currentSlide:m}}))}function Tt(e){const t=r(e.target,'a[href^="#"]');if(t){const i=t.getAttribute("href"),s=ie.getIndicesFromHash(i);s&&(h.slide(s.h,s.v,s.f),e.preventDefault())}}function Ft(e){He()}function zt(e){!1===document.hidden&&document.activeElement!==document.body&&("function"==typeof document.activeElement.blur&&document.activeElement.blur(),document.body.focus())}function Ht(e){(document.fullscreenElement||document.webkitFullscreenElement)===K.wrapper&&(e.stopImmediatePropagation(),setTimeout((()=>{h.layout(),h.focus.focus()}),1))}function qt(e){if(e.currentTarget&&e.currentTarget.hasAttribute("href")){let t=e.currentTarget.getAttribute("href");t&&(Ie(t),e.preventDefault())}}function Bt(e){$e()&&!1===w.loop?(Ze(0,0),At()):Y?At():St()}const Ot={VERSION:"4.3.1",initialize:he,configure:Re,destroy:ke,sync:Ge,syncSlide:et,syncFragments:G.sync.bind(G),slide:Ze,left:kt,right:Lt,up:Ct,down:xt,prev:Pt,next:Nt,navigateLeft:kt,navigateRight:Lt,navigateUp:Ct,navigateDown:xt,navigatePrev:Pt,navigateNext:Nt,navigateFragment:G.goto.bind(G),prevFragment:G.prev.bind(G),nextFragment:G.next.bind(G),on:Le,off:Ce,addEventListener:Le,removeEventListener:Ce,layout:He,shuffle:it,availableRoutes:nt,availableFragments:G.availableRoutes.bind(G),toggleHelp:Te,toggleOverview:ee.toggle.bind(ee),togglePause:Ye,toggleAutoSlide:Je,isFirstSlide:Ve,isLastSlide:$e,isLastVerticalSlide:Ke,isVerticalSlide:We,isPaused:_e,isAutoSliding:Qe,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:yt,setState:wt,getProgress:ot,getIndices:lt,getSlidesAttributes:pt,getSlidePastCount:rt,getTotalSlides:mt,getSlide:ft,getPreviousSlide:()=>p,getCurrentSlide:()=>m,getSlideBackground:bt,getSlideNotes:ce.getSlideNotes.bind(ce),getSlides:dt,getHorizontalSlides:ct,getVerticalSlides:ht,hasHorizontalSlides:gt,hasVerticalSlides:vt,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:()=>Z.element,registerPlugin:re.registerPlugin.bind(re),hasPlugin:re.hasPlugin.bind(re),getPlugin:re.getPlugin.bind(re),getPlugins:re.getRegisteredPlugins.bind(re)};return e(h,{...Ot,announceStatus:fe,getStatusText:be,print:oe,focus:le,progress:ae,controls:se,location:ie,overview:ee,fragments:G,slideContent:_,slideNumber:J,onUserInput:Mt,closeOverlay:ze,updateSlidesVisibility:at,layoutSlideContents:qe,transformSlides:xe,cueAutoSlide:Et,cancelAutoSlide:Rt}),Ot}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/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.esm.js.map b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/dist/reveal.esm.js.map new file mode 100644 index 00000000..286c75a2 --- /dev/null +++ b/courses/SR/2024-2025-S1/alternatives_nhst/alternatives_nhst_files/libs/revealjs/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\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)([?#\\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.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.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.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// 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\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 doingSlideNumbers = 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\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 slide numbers if `slideNumbers` are enabled\n\t\t\t\tif( doingSlideNumbers ) {\n\t\t\t\t\tconst slideNumber = index + 1;\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 ) {\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\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