From 09633d37cfd1d8a8bc735c30f0796071425cf2f8 Mon Sep 17 00:00:00 2001 From: chark1es Date: Wed, 20 Mar 2024 03:23:53 -0700 Subject: [PATCH] added bash slides --- package.json | 1 + pnpm-lock.yaml | 32 +- public/bash/POSIX-standard-2017.png | Bin 0 -> 550 bytes public/bash/SCC22TechStack.png | Bin 0 -> 473300 bytes public/bash/css/layout.scss | 69 + public/bash/css/print/paper.scss | 166 + public/bash/css/print/pdf.scss | 159 + public/bash/css/reveal.scss | 2109 ++++++++++++ public/bash/css/theme/README.md | 21 + public/bash/css/theme/source/beige.scss | 44 + .../bash/css/theme/source/black-contrast.scss | 49 + public/bash/css/theme/source/black.scss | 46 + public/bash/css/theme/source/blood.scss | 87 + public/bash/css/theme/source/dracula.scss | 106 + public/bash/css/theme/source/league.scss | 36 + public/bash/css/theme/source/moon.scss | 54 + public/bash/css/theme/source/night.scss | 37 + public/bash/css/theme/source/serif.scss | 41 + public/bash/css/theme/source/simple.scss | 43 + public/bash/css/theme/source/sky.scss | 52 + public/bash/css/theme/source/solarized.scss | 66 + .../bash/css/theme/source/white-contrast.scss | 52 + public/bash/css/theme/source/white.scss | 49 + public/bash/css/theme/template/exposer.scss | 30 + public/bash/css/theme/template/mixins.scss | 45 + public/bash/css/theme/template/settings.scss | 50 + public/bash/css/theme/template/theme.scss | 331 ++ public/bash/gulpfile.js | 321 ++ public/bash/index.html | 1461 ++++++++ public/bash/js/components/playback.js | 165 + public/bash/js/config.js | 332 ++ public/bash/js/controllers/autoanimate.js | 640 ++++ public/bash/js/controllers/backgrounds.js | 439 +++ public/bash/js/controllers/controls.js | 279 ++ public/bash/js/controllers/focus.js | 103 + public/bash/js/controllers/fragments.js | 375 ++ public/bash/js/controllers/jumptoslide.js | 197 ++ public/bash/js/controllers/keyboard.js | 390 +++ public/bash/js/controllers/location.js | 247 ++ public/bash/js/controllers/notes.js | 126 + public/bash/js/controllers/overview.js | 255 ++ public/bash/js/controllers/plugins.js | 254 ++ public/bash/js/controllers/pointer.js | 126 + public/bash/js/controllers/printview.js | 239 ++ public/bash/js/controllers/progress.js | 110 + public/bash/js/controllers/scrollview.js | 919 +++++ public/bash/js/controllers/slidecontent.js | 486 +++ public/bash/js/controllers/slidenumber.js | 139 + public/bash/js/controllers/touch.js | 263 ++ public/bash/js/index.js | 58 + public/bash/js/reveal.js | 3059 +++++++++++++++++ public/bash/js/utils/color.js | 77 + public/bash/js/utils/constants.js | 17 + public/bash/js/utils/device.js | 8 + public/bash/js/utils/loader.js | 46 + public/bash/js/utils/util.js | 313 ++ public/bash/plugin/highlight/highlight.esm.js | 5 + public/bash/plugin/highlight/highlight.js | 5 + public/bash/plugin/highlight/monokai.css | 71 + public/bash/plugin/highlight/plugin.js | 439 +++ public/bash/plugin/highlight/zenburn.css | 80 + public/bash/plugin/markdown/markdown.esm.js | 7 + public/bash/plugin/markdown/markdown.js | 7 + public/bash/plugin/markdown/plugin.js | 491 +++ public/bash/plugin/math/katex.js | 96 + public/bash/plugin/math/math.esm.js | 6 + public/bash/plugin/math/math.js | 1 + public/bash/plugin/math/mathjax2.js | 89 + public/bash/plugin/math/mathjax3.js | 77 + public/bash/plugin/math/plugin.js | 15 + public/bash/plugin/notes/notes.esm.js | 1 + public/bash/plugin/notes/notes.js | 1 + public/bash/plugin/notes/plugin.js | 265 ++ public/bash/plugin/notes/speaker-view.html | 898 +++++ public/bash/plugin/search/plugin.js | 243 ++ public/bash/plugin/search/search.esm.js | 7 + public/bash/plugin/search/search.js | 7 + public/bash/plugin/zoom/plugin.js | 264 ++ public/bash/plugin/zoom/zoom.esm.js | 11 + public/bash/plugin/zoom/zoom.js | 11 + public/bash/test/assets/external-script-a.js | 1 + public/bash/test/assets/external-script-b.js | 1 + public/bash/test/assets/external-script-c.js | 1 + public/bash/test/assets/external-script-d.js | 1 + public/bash/test/simple.md | 12 + public/bash/test/test-auto-animate.html | 167 + public/bash/test/test-dependencies-async.html | 78 + public/bash/test/test-dependencies.html | 55 + public/bash/test/test-grid-navigation.html | 75 + public/bash/test/test-iframe-backgrounds.html | 100 + public/bash/test/test-iframes.html | 104 + public/bash/test/test-markdown.html | 516 +++ .../test/test-multiple-instances-es5.html | 86 + public/bash/test/test-multiple-instances.html | 104 + public/bash/test/test-pdf.html | 97 + public/bash/test/test-plugins.html | 108 + public/bash/test/test-scroll.html | 162 + public/bash/test/test-state.html | 134 + public/bash/test/test.html | 900 +++++ public/bash/yash.jpg | Bin 0 -> 337072 bytes src/components/react/Bash.jsx | 17 + src/pages/bash.astro | 11 + tsconfig.json | 8 +- 103 files changed, 21043 insertions(+), 11 deletions(-) create mode 100644 public/bash/POSIX-standard-2017.png create mode 100644 public/bash/SCC22TechStack.png create mode 100644 public/bash/css/layout.scss create mode 100644 public/bash/css/print/paper.scss create mode 100644 public/bash/css/print/pdf.scss create mode 100644 public/bash/css/reveal.scss create mode 100644 public/bash/css/theme/README.md create mode 100644 public/bash/css/theme/source/beige.scss create mode 100644 public/bash/css/theme/source/black-contrast.scss create mode 100644 public/bash/css/theme/source/black.scss create mode 100644 public/bash/css/theme/source/blood.scss create mode 100644 public/bash/css/theme/source/dracula.scss create mode 100644 public/bash/css/theme/source/league.scss create mode 100644 public/bash/css/theme/source/moon.scss create mode 100644 public/bash/css/theme/source/night.scss create mode 100644 public/bash/css/theme/source/serif.scss create mode 100644 public/bash/css/theme/source/simple.scss create mode 100644 public/bash/css/theme/source/sky.scss create mode 100644 public/bash/css/theme/source/solarized.scss create mode 100644 public/bash/css/theme/source/white-contrast.scss create mode 100644 public/bash/css/theme/source/white.scss create mode 100644 public/bash/css/theme/template/exposer.scss create mode 100644 public/bash/css/theme/template/mixins.scss create mode 100644 public/bash/css/theme/template/settings.scss create mode 100644 public/bash/css/theme/template/theme.scss create mode 100644 public/bash/gulpfile.js create mode 100644 public/bash/index.html create mode 100644 public/bash/js/components/playback.js create mode 100644 public/bash/js/config.js create mode 100644 public/bash/js/controllers/autoanimate.js create mode 100644 public/bash/js/controllers/backgrounds.js create mode 100644 public/bash/js/controllers/controls.js create mode 100644 public/bash/js/controllers/focus.js create mode 100644 public/bash/js/controllers/fragments.js create mode 100644 public/bash/js/controllers/jumptoslide.js create mode 100644 public/bash/js/controllers/keyboard.js create mode 100644 public/bash/js/controllers/location.js create mode 100644 public/bash/js/controllers/notes.js create mode 100644 public/bash/js/controllers/overview.js create mode 100644 public/bash/js/controllers/plugins.js create mode 100644 public/bash/js/controllers/pointer.js create mode 100644 public/bash/js/controllers/printview.js create mode 100644 public/bash/js/controllers/progress.js create mode 100644 public/bash/js/controllers/scrollview.js create mode 100644 public/bash/js/controllers/slidecontent.js create mode 100644 public/bash/js/controllers/slidenumber.js create mode 100644 public/bash/js/controllers/touch.js create mode 100644 public/bash/js/index.js create mode 100644 public/bash/js/reveal.js create mode 100644 public/bash/js/utils/color.js create mode 100644 public/bash/js/utils/constants.js create mode 100644 public/bash/js/utils/device.js create mode 100644 public/bash/js/utils/loader.js create mode 100644 public/bash/js/utils/util.js create mode 100644 public/bash/plugin/highlight/highlight.esm.js create mode 100644 public/bash/plugin/highlight/highlight.js create mode 100644 public/bash/plugin/highlight/monokai.css create mode 100644 public/bash/plugin/highlight/plugin.js create mode 100644 public/bash/plugin/highlight/zenburn.css create mode 100644 public/bash/plugin/markdown/markdown.esm.js create mode 100644 public/bash/plugin/markdown/markdown.js create mode 100644 public/bash/plugin/markdown/plugin.js create mode 100644 public/bash/plugin/math/katex.js create mode 100644 public/bash/plugin/math/math.esm.js create mode 100644 public/bash/plugin/math/math.js create mode 100644 public/bash/plugin/math/mathjax2.js create mode 100644 public/bash/plugin/math/mathjax3.js create mode 100644 public/bash/plugin/math/plugin.js create mode 100644 public/bash/plugin/notes/notes.esm.js create mode 100644 public/bash/plugin/notes/notes.js create mode 100644 public/bash/plugin/notes/plugin.js create mode 100644 public/bash/plugin/notes/speaker-view.html create mode 100644 public/bash/plugin/search/plugin.js create mode 100644 public/bash/plugin/search/search.esm.js create mode 100644 public/bash/plugin/search/search.js create mode 100644 public/bash/plugin/zoom/plugin.js create mode 100644 public/bash/plugin/zoom/zoom.esm.js create mode 100644 public/bash/plugin/zoom/zoom.js create mode 100644 public/bash/test/assets/external-script-a.js create mode 100644 public/bash/test/assets/external-script-b.js create mode 100644 public/bash/test/assets/external-script-c.js create mode 100644 public/bash/test/assets/external-script-d.js create mode 100644 public/bash/test/simple.md create mode 100644 public/bash/test/test-auto-animate.html create mode 100644 public/bash/test/test-dependencies-async.html create mode 100644 public/bash/test/test-dependencies.html create mode 100644 public/bash/test/test-grid-navigation.html create mode 100644 public/bash/test/test-iframe-backgrounds.html create mode 100644 public/bash/test/test-iframes.html create mode 100644 public/bash/test/test-markdown.html create mode 100644 public/bash/test/test-multiple-instances-es5.html create mode 100644 public/bash/test/test-multiple-instances.html create mode 100644 public/bash/test/test-pdf.html create mode 100644 public/bash/test/test-plugins.html create mode 100644 public/bash/test/test-scroll.html create mode 100644 public/bash/test/test-state.html create mode 100644 public/bash/test/test.html create mode 100644 public/bash/yash.jpg create mode 100644 src/components/react/Bash.jsx create mode 100644 src/pages/bash.astro diff --git a/package.json b/package.json index b8dd4da..bf9d36b 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "devDependencies": { "@tailwindcss/forms": "^0.5.7", "@types/jquery": "^3.5.29", + "@types/node": "^20.11.30", "sass": "^1.72.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f76ce6d..2b2acf6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ dependencies: version: 5.0.19 astro: specifier: ^4.5.7 - version: 4.5.7(sass@1.72.0)(typescript@5.4.2) + version: 4.5.7(@types/node@20.11.30)(sass@1.72.0)(typescript@5.4.2) framer-motion: specifier: ^11.0.15 version: 11.0.15(react-dom@18.2.0)(react@18.2.0) @@ -67,6 +67,9 @@ devDependencies: '@types/jquery': specifier: ^3.5.29 version: 3.5.29 + '@types/node': + specifier: ^20.11.30 + version: 20.11.30 sass: specifier: ^1.72.0 version: 1.72.0 @@ -176,7 +179,7 @@ packages: '@astrojs/markdown-remark': 4.3.0 '@mdx-js/mdx': 3.0.1 acorn: 8.11.3 - astro: 4.5.7(sass@1.72.0)(typescript@5.4.2) + astro: 4.5.7(@types/node@20.11.30)(sass@1.72.0)(typescript@5.4.2) es-module-lexer: 1.4.2 estree-util-visit: 2.0.0 github-slugger: 2.0.0 @@ -246,7 +249,7 @@ packages: astro: ^3.0.0 || ^4.0.0 tailwindcss: ^3.0.24 dependencies: - astro: 4.5.7(sass@1.72.0)(typescript@5.4.2) + astro: 4.5.7(@types/node@20.11.30)(sass@1.72.0)(typescript@5.4.2) autoprefixer: 10.4.18(postcss@8.4.37) postcss: 8.4.37 postcss-load-config: 4.0.2(postcss@8.4.37) @@ -884,7 +887,7 @@ packages: resolve: 1.22.8 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 5.1.6(sass@1.72.0) + vite: 5.1.6(@types/node@20.11.30)(sass@1.72.0) transitivePeerDependencies: - preact - supports-color @@ -931,7 +934,7 @@ packages: '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 preact: 10.20.0 - vite: 5.1.6(sass@1.72.0) + vite: 5.1.6(@types/node@20.11.30)(sass@1.72.0) transitivePeerDependencies: - supports-color dev: false @@ -1144,6 +1147,11 @@ packages: '@types/unist': 2.0.10 dev: false + /@types/node@20.11.30: + resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} + dependencies: + undici-types: 5.26.5 + /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} dev: false @@ -1193,7 +1201,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.1) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.1.6(sass@1.72.0) + vite: 5.1.6(@types/node@20.11.30)(sass@1.72.0) transitivePeerDependencies: - supports-color dev: false @@ -1363,7 +1371,7 @@ packages: hasBin: true dev: false - /astro@4.5.7(sass@1.72.0)(typescript@5.4.2): + /astro@4.5.7(@types/node@20.11.30)(sass@1.72.0)(typescript@5.4.2): resolution: {integrity: sha512-Ioeg3TV42dOJvf6GlmykeR3EKZ8+JcnZyJ/X9qDPzVf2OREmtvW0182YCDXQBqwXFRHndZRcHLqinAWjzZYh/A==} engines: {node: '>=18.14.1', npm: '>=6.14.0'} hasBin: true @@ -1424,7 +1432,7 @@ packages: tsconfck: 3.0.3(typescript@5.4.2) unist-util-visit: 5.0.0 vfile: 6.0.1 - vite: 5.1.6(sass@1.72.0) + vite: 5.1.6(@types/node@20.11.30)(sass@1.72.0) vitefu: 0.2.5(vite@5.1.6) which-pm: 2.1.1 yargs-parser: 21.1.1 @@ -4449,6 +4457,9 @@ packages: resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} dev: false + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /unherit@3.0.1: resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==} dev: false @@ -4622,7 +4633,7 @@ packages: vfile-message: 4.0.2 dev: false - /vite@5.1.6(sass@1.72.0): + /vite@5.1.6(@types/node@20.11.30)(sass@1.72.0): resolution: {integrity: sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -4650,6 +4661,7 @@ packages: terser: optional: true dependencies: + '@types/node': 20.11.30 esbuild: 0.19.12 postcss: 8.4.37 rollup: 4.13.0 @@ -4666,7 +4678,7 @@ packages: vite: optional: true dependencies: - vite: 5.1.6(sass@1.72.0) + vite: 5.1.6(@types/node@20.11.30)(sass@1.72.0) dev: false /volar-service-css@0.0.34(@volar/language-service@2.1.3): diff --git a/public/bash/POSIX-standard-2017.png b/public/bash/POSIX-standard-2017.png new file mode 100644 index 0000000000000000000000000000000000000000..5d79128176b82d1f31615d7a9e10da8d095cd2bc GIT binary patch literal 550 zcmV+>0@?kEP)4 z)#fP=y;ZSKA#bII4O>CWm=NDxx{Xf+jI`bC}_zSSkp0 ojrkQC`S$q*xs<>4ui)R3UytVQE0&B9t^fc407*qoM6N<$f_WwP;s5{u literal 0 HcmV?d00001 diff --git a/public/bash/SCC22TechStack.png b/public/bash/SCC22TechStack.png new file mode 100644 index 0000000000000000000000000000000000000000..edb8539fae0dba17e1c0e317c9eba87298b885fd GIT binary patch literal 473300 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%0ANk+21B_;iUc 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

m5>k_Alj~i&m)j*+acW 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

q6%2CT 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

^9vZaHd-pDmWWTh3?LGO20&qTj>a5(Ga23F$N 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�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

%+~(o3BugJ}4_tAvbvZ#P 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�Npxi5wj_1wyz@z8{cMirEWFZ zT$V(urK`>Urp;|tYfOM(^PLARS*7GVPbWIulT3AI)Y z@C+jwZogy#_<5q^3X? za(_TPlaC36{JcFC((S2B#BumJOWdgK{)g}fz-Z`uKbbKNDCL;(PoL;KNSJ-^Drr>i z8>@U380#Pbk9VI1xGDcsSfeDpXb4SOwjVjiF?Ja^69u!xetzvvpZS;S*f#^kq?B0W zA*d?@Klwf33j@vA7`q7`a?)juw!boyBPlvpP#5Po7hu-(O0os~l_g_xX; zgnmd8v%6l$t@TrH$eY5<2@Tvql59{L?rX9SZJCDKX6=W%U?FflK_la|KF+l{?Gt=; z`iROHeKcQ7Fx+eaI^AyF-;Xl{Hb`KzIu)X!3HXh_CaDD$W5{gVB8#VxOw|G(puK&P ze98=1#@4%c-Qvg3=6F3-7_-6eh|KTW$-k_BmTuLe$E=%atk-Y&#Aao~DyzSQS|5)3 zuiJ{B;q!U&b~ac7w=a8{uuAnUE>Wqz?W942&_VeFF(V5XiSkb6tr_SmBQ2pHY4jUG z#jYoNyGlQeyya17lj!J7q>w#mtFh>H>2q+G?CMzZL#!0lC}}ine~jj^sKH?lVtx64 zxO>Z}xR$kDJ3)fGLvVMu;O_1Y!QFyeaQEOAEI0&r2~KdA#@*d5XR`Ks&)M%@`}g2@?H)JraW_8V~>$&cB)_6YqUnD?aXx4K9(tA4USONiMq~q3CQ4WIRGm4mcd?b%) z03NLInB(#I!kW7=j5&ViHm1JTFn@GEA7*3zQlZ(AiL&^!Um=@oY^}rew+2Ul*e~#> zv`(nmxArW7u@J2$sAIeJWAsvP*nVfKS%ri4`nQ_3Ny2Wm!OX;Ssnz%W(?zk(zR11n zhjyS&JZfIpT86EcFyIYh(XrsJq@>bkd{TDs1Evsul7F?|0Ad|S3qBH846=tPj#SoT zG8L~qoK#-#v-XA!Umr}}AISnBgzPHaB`Y!6MoEQo?w7BKI-iZZ!`{n_c;dTtanD=6 z-p0=RDhD1KKkTjf$;OnB?^p9d2#aAXK=;+-9!7q*s^6);Q9Sa^&P)CT6daINE(M~R={A687lu`C!qB?r>`_4T(g|*pbEv4$(EC*6~@(s$=;R;WI+-@d|1FQ7ZX(U$Hm!frKCz-cT zNX?OD5+HAMH(x7f9Zur|pGio8Zd(RmaLG$TzVYzKCOZzL4fZ!wKJMM?6Os3n*>|~3 zRtto!ceT5WJOoL=TM}%A-f@Py?%{WPMMEP#J;E={yZ4{)?!4FceDw#4F~r{?wh3u_ zqq^{B;^dtuZFoiFA~Ss^o`v4RCUIo3l1{l9b-LyM%q?23?T)ZiG>eUI2vL|$V)qGcl7gWo9@7SO{9K>}Lg?jPotM-eyCA&TQXo-K=wXqKsQ z+f!fca89`>Wzgc9clSBb`S`-g`(v!T@9gVXzwQZ}2$S1Mo>e zT7Fw)7_fQQ*_eP*3B;)@aZ{SqSLUVRSd`-*ZZqIg128>D%Rp{Z!l`~cz`?j>FuN#! zA7?xr4pTBV8Eb>A`FtQel)#V*ES;FMdTMg_E5OoFFW-MIOR8C z5QnQ?aS{2_ue^&f)_Obs`p$mQt$y1-tLk>{xCK#z-5&s)kUtifd7C0_9E-3PvjUj`|ybAH1%l=^k zT6K6Kc|wW+V39xBt)F>n0}25_f_$}uuQfH#r3p$iV5CDchKB_78C+qCcl4&S#A7nh z({1{5;hx-fVA&o^6A9h{B(#4WE=5il7dC4_>`>Ad@*2IH@!vyrz7nhK!eSZh<<_uk zS_srAnx3N*=}i(A*8)KR3qrn8u6~A|v`89&cj$*j#MQ zFe)5pn$fi1s#q#mlG&|e7`UQtof1^%T%rh2koBuDhyJ~jb(2Rl4Fj^7r{jq}y7}SA z40dbCxe&&59XqFE%=)(s5?t{JMCN19hOlYGZMYaxa%pV( zWeHda-z;-K7n1d09hg3+#=mcHMqez}MzpW+dF6oEO|}IElGiBNRQL=qXfFV<)~_0T zNW(G2+n}s&b0DlTo)qeK!6{Ygpbf~>WAWT(DpAeNEU6?=6;Lwr{^K85<2uXYH-BQ2 zb=)P&;Tlq$lNSssk9)8_SPe#2^BCtQ1Zn13fS~vw z;_(eM=6`l~p-j$d4G3em>s8dAjJW|%wI}!OU!DnaySYh<%5kX{2!ba7^v4`+u^8!n zJ|ApuE)yAUUL~&!zoEhXNEUYp&oUT@LOARgK;&@aa;({{;3G8c4$tF_Yy9pwST6zu zfhgbVq4}}z!&-ck31>y)nUfI<uYvj0WqnvquU#X{%j+fi(o)ZE z!rNJ56LAQl@3h4H-on+;Q={f=KCUREzWY%2O6B^s3c5egVE0@8zA8!p|B4OKaYtF@8$1{qaL^S&OdL z9GzCw9n8ibO<&uU!yPkAR?ixP+oZi$vhzcjFK2uUs-t$QjUhwat4*e@CB>QSDjzZi z#nm=1(kVkW6^co$)Ud{jF;Xf>q|Z@r@mTulwA6r#QZ!iCgWqa87i@I4L9iQ|5pa;D zfPbh6MeJ-bqE(YjaTMD}ILwW?f+#v5?R+Gw)4fkMtYQ2Or4msj%|UpW_*rK>RpWSt z_#ii~q!vr4xltPzaSXSla4ss(iCg;BczM5KnB6E3W6I$Icw95=^x5Or6K1a0!bQON zu9Ss8{PS0_Q7}%v0yK40MVafp7!<@9Hx&?(x%yc}v(h+Y_s3^$-YHEpcr`P6g@#(^ ze8ueiE|F6L-p-^tEA}8F*g<0SwTN%;hU468G%BvxgJlz~^qG@AdbTfX_*2f)N$myx zYTr+MqYC1ECnnn7r^gR6KmMeC%wOWi?cP)}CEUn^;eS@-SKpeM!*2yY$=SjJgB&}T zCB7p_RNda$@(~*>yon-$L>lMgU6b_s8fx7rjzy%~;kC!nPzUZN%8~pvkn>5UB0tdT zhM8S^W3?Ts-@(kFc74`wXaOA6{RP_4vR$TympRV|ncQp*`BO|7vpIq>R)h}!yu(EU zeMY((Liq>d6^57OHxVseQgBj4r6oe4O&V*eU+a~g>y0hkp_k>_{7Y!eA!>A_93OnS zr{m3%OZ42NWUkI9tb0aEJa)ylItQBm%-<~#6nSxt#Y~-F9!fjA%}+;wzV;M&N{e<$ zDk^ci4hbR5JC{};J-WKyx0zEA@9DKZtV^RfyMIK`^U~_+tsY~ciRlTn`jE%xRp{2~ zf0^h>RBF+8BJ}dqWD=>nF{JY2Xtcd_AcFMfXg2<~MZGSc5|4P9AY0!_Fqosfx^Gq{ z2KgjLj~D2dC*x&W@*9& zw0VMIk8D)5ln~4>RDaGWtTeP8@EpFicIoD6mQIoBeg`X*#3P}uaHg|3dstIqF^cMNKjQYV$_O+T#Lk=NlER)&i9W*p&|CIP0;d8FcH*Z6TyHg*i z(Z_z^yPk`w&2zY3!RRHlPcuQ~OV0lLn6f@0%Y=VZTm`%aCOTDHPVw6Q57lbo8kZT4xeZE+}3+y!I$ihG1KLjJJZYl~9JMi4Sue7y(k4739%W(K*hSxj+zPt+G(%#_z;9Sb2s&>J%NPXg+##rqn_)P!-e&y{+%HL@f{Gl z$FXa)*xTF^v~5~p9^4GxuQ$SI2w$i0;%FXo!7{E5fVGU^>vF4&LR(cg{?bG}A@B|! zILL+P1Y9~!0D|E9H-fM(fKoiEal0|Sjd}s2*$=HT946)s)+P)*BTZ0zjo84MDoQ#` z8V*U3JuO?&+qY zr(N#wUI;((+zMDcXMRV-_O99Xl&w5Af{BREcZ3mu103>kLaaAfsR0p%J6X0+L*&=HES&jz~x-iv^W9Sd` z{Dz{M3h~q%oLmLeGIM=RKRiI1{9JbKE+XBsCZQk<(F8P?>C$bl+tWk?mlIBOTA8Yc zT|K@}QoFJ^;N*e|u4Ep9?rCq^OaQi7(01~+#fG;n&cMKbLA?Lnef(dGZmpZx38ECayN2?3?uKaWiiOz7<_qoQ#BwS)h$%{u@_Y8?pI z`6mt&Cm08uuRzgWg#UH&|F!WhK7f_^|Mc*X%}Aamw+3nep}L?K3auIZP$F$>Zv@VC z`>GS|e;m}?NB3x$ptQkLV18G((}Q+UM&VJ41PF-0gFPXV`Y&hRe?IFC$l0}Rm97?k zC{VADc#mDK-6#btzR-C%nWX?EJaq8w(QE2YzkgoQQ)FnBc)gA)~WjS!V}rSM%Va_;gL zq+~jEKPmcG*Yk_S;pi5Ks=9LJ_PeNgzBtcqdpd1R*qkPNgN%&beG->;Pg+e+Lg-nX z6stH(K*wchV2yt5q&)+&n6bC?JNZakp`Y@fkY3{!uTlp4fSJ|jC=x(soCM591wDF@ zOuq+tTqpeAk&%iI@X*u0eHD@Da~qbwxZUPuW#Pk%Khe$+@MAdgZnP>mSMoR?5P3Kc zyjN~>;HOSybTbjT_+53E6n1P(IX(ygG2}A+jAWJxy&t+S5{q{B@EQw>BzQn;-HGy% z>b8ZxfIn3r=LqSG`|X|_HvZhk3S zMSgJ~TuO%rVEAFL5EU|S+tJ5zbodoA9t+3C;!i>yj$-(%m>#B~vpMTmTK@?C7}X~l zRekP{zRCurY@F6B{PE4z1p=NrO7-McJ!QzWrpQoL;C|HvXMW`&dAdg0GaY{wxs*$M zBo;uqBlDlneAmH<#rWqfvTOF@#)sSMHG$cT(^gT($tUfG{miHLaFrHiQIN}Kgsj=& zVBj4aiZJ4tt9t{bLiS)v^HmwAE4-L1(=QbhC^T$NfLe`0@dTYk@jM(X%as_-%jl} z>g~%U!b16%kjt`=P^}8@W)>E^Yv>Z)isXVnyjk%3^PpSMto3|>L-kY*P+2&X%pRHf zuu-mBs;vST4v4Z^+{dZ!CiX&VhxWlN#D}c9eX)d>Eqe-=K5(YmTmg>N?O%U z^}s`u;+R1bl~SH)e4B@p)Y|ImrI2^0L!%|D*-$b)sKBMnz86$f^?ZHhB9+aXmR*|& zm?;)a4ID=fTF!2cILYKQxprHg?yi*J7NNl2I(7Ir@vCeGzs%`MCu0sE8{zYEm!6|b zGsu9-!UyhJcOPgVQp;eMPM6`OosaF~9e4`<8_(jMOp-=6IdS0;sXq7ug=C`nC)kmF$SqHqlx@k28;8pjfXx?*dnQqYLTv zzNg_OMT=DmaH))R27bCtq*O5dHKpcs+-nIejV6-nm_2YAfoU~5mJK^xtevf-1P`kZ z2S;jbFJ75n0{BTJ7Bx{0*{kLUcsyEt+`gLwzj!@~o2JB>Vf}U|ZfdQ%?+4Rw>+!(K zO8nd?uJmry!49AysuAH{ZF`9H6j@97V#%M_!d^D$b=J=T>Z$eJoI&c(VD`I!ZO&H$ zgAsUCELEqWP3w@{OW-~o1^UMwPJDx(BNX@ZRcdO$n$Zf;;;$Efvhb5Rwtnbjm0N0-cOa;RX~LlOpwFhls*L}+8&|4r+HsJ-y zaGPD!wF>ogWjGdSP6!XEqiL%@_puF>Xjeyhs82YQqYovdH$(BB`@PM2aKd>#nI$?IG+mZ`$vVR{hZ@(BOJ5S~Ps zo%04b0yQd@B$$p!K$WfODqb1nZHG2!9bdD?DeH~wdG&p4^nP{(v(&Bn;SqX%{EbmX z*Z1LuliT|`C`_LM9>>K>b;=@$tHG_Czp&?!akaY8Q`Z}df8s$0$H)Bg@UlkzN#YD4 z;^y>kn8$g*#B=%g2CD7WrPvM<88SRr?Jj-1PNN^ncuWQOu{W7n_5ZK{!S)&??Cw3& zwrd|^uo*Ad5{h=_5qh)Sy0VxLpk92}SJF7VI&_~NLYSS36jHR453wBqThJAL_ftCg zG?ubVr`T9J&sv1R=`)2hCSBsNfc`XF-GZ`i=j?d)ABD~x&Jk?mdXdM9uBMmaES^uU z9oDN}GiY8q2&lP}z$y^|zf%;QR)emmmlw{4+r_16bJgdw3^O@|e0`tCp(#_^0&_P7 zsZz{aK#5X}+)kw9GcUu2QJ2D?m+X{OI#j$NLgsaAV(BD zO@^{{0Bw~usMDI0QLE86-{kiFmN>lMs}>1JytenN6R4C(ELZZHduPu_7M*vk{oMYN$%uq7g7K<&-JPU- zh|Z8Y)7S4`chE7I0y>Wfw^+Mf;-Eo(r|VQ^WH!46!Oy*6Mq`dgx3-JTE{Sbd@^usL z@*eQOV-2+EIv`*eG2tp+mW1{#a!r@a|jk#<cs1`^iO@-B*?J*_+Tu{2A7aMe#+L1T8FK<`~iCNAG zu-YrCd?#jibPu z#_nmf14wI_DaD5K~tU?UMN z?9u5`Kq2C@qP$Bz&y#;I%B?o!rRRx0oAB4AZy8T`pX>Els^ydWCI zvn1vB2Nwo(IrXYFvO5s`JFYTo;ba>1q0=I$8iZBYIGQWg-*)5fx2{w(JoFJAlV1|0$& zv?O985&hVJYsw;hONTQ(-cD?Z_q8f-}!*nG9^B+wV8N3(c;Z*0q7 zdtdkTcyf16U0q^OIb0- z`Y+YYLZW`Uw;HXgoh2~MFjy2~Zn(4^{{H*2nv7Mo$tly)Vhix@P~x!OswYP@k+-1!?`{@qeRCGL^W<_i$$GhEOR7vf6G5c zJ*EqMA9M#4J*GU6f%|wqqzfRnM+}!r)0{Ul)|tr6t_6|j^A z@_Lly&KgXi(k2r8)9=G6LYkT<75T?WtkwNS!&umCvBA133U>yC4YLj@k)5TH(jZ@j zBn}Z~l4FNIdWMV~`6Xw}Rwp$a9+x*$&t>zQQlCao3p?0HD1uQy8)IGfHAO|nSJB2n zFb7DD!0HBO@VQ9vHVIK|)kSg~Y=N~l)_|32$bO7?SU{#CX^YW42K%|$vqLxBraT#p zF?9Bv7l+ZUs&ZFhta4>>wA(eT<*PXk0@_k#`v=_Esuxyv1ybY~YlyCO{*`D+7oZ4C z{}_-yrNfxL>2-Fw=CmpznN-hQWZ7f#^=6Ba+>bBd$>qN(V$$5Pw#elW_y*vvmXFc2 z8L55^bG4ac4GnN)(#^#O40#l?Y4kv0c_ZHwKoBI~>iI-r!NtRlrEfjK#!i1ryRw;t zjCm3?`5&{*38g`nroEz2lpDb)urAF5CNj5Ysgh=U9`ogJbzXMtVuV-qjC)G@IEUDq zr^N#O14QJ@i_;#z10E{0Js1<1f(mo^;K!)=7=-br(2jXIm*b%C;1@;G;=!UbF5sSSF8CbuGV8g=RZSRAA7*5R@^F-iBk zO1(^eaIXFt9M+w#Z2Vofe-qaDAHNA}CXlb{%aS3v5QS+=Ef%~<>h~KgSA?a3C_!Fa z^}xY?2&0Pt?uJgjiMX+m!|>1nK7&;(#;IZ6;=dF$o5)`W``xN5c8#Ith#&xW%TjKV zEo+c(vx2C-2<21 z8z0Xhx}?vfO-Mgtthz#@%dVb4lJ<7>)APt$)RUiw+#VVAdIMweXo;G&31(c>Z0S<# zrpDS3V;dmuH01ik$T#G>W}A1kEH<|w-#%lWr6{y|!GLekF$L_n;+1A9y^PB=yTf z|0Av{2FOiEYHt(A6wa58X0cSCB;FSS<7^0M;>Iz1KIcSnggQP>Ny4x1;gu-D2!3ko zAlYBhwU)Xc-*%9`+aNf^oo#NkQWl8IR3Gr(sYPn9S%5F}sQJ~2)Z={MhZnRpiou72O;gW!G z|KLad;+v1V{1*c@6PCRf`~yzj@3=73q{hhG+q_bd&18<3 z;6!YYB5i`5OihpXH-4cm3h1}fh()Aaq$DD|Z?n5`LX)?xkIvv2=A`dT@@Z`tipgs2 zRS{{d;4qtE+Da1tRbP@mz$??XLG_*U4zp=XU6cE04Z1_R zAu#!!Ec1~RT=+50NdWlH2ork;P9xl%8JxLfKppfBBCma52~{uozP3SP%={w)rNkHq zZd(h;^^`pTRa_oE8yV#dCWvXbUK2t~=QHYkhn8){?p7K}3h%PDi%-GH;5KGMvG*3Z z%fUR|XpS{X$ybsX!#dS|)ySeAj3WFk-X5{1yHUIDgORNTbaSxV8RuxdxagD$LU3$J zZW-VM+vv=P>MW)Xcv;U9l`o^M4*0m|lHSvHwr)h)5Z@C$6w71d@Vp*o<9;09X`PdZ z;E#}N%RYP*e%`*!UBm5zqU%^M`g5zj266NFq1(Pvw1J$X;-w-qLp#J;*A z_VgTwOPIyV!kpa)QBmUk6&!EI81Cx(ZH8FfZR4lK&oK5)?N|tT*xAp*+AC{WcNqP- z2J8r9TJqGl0~g0C4CkCjud=G~(Pv?-@$KTIoZ<++lLp80<`YzCmR~L4k8qrB+lA!0 zX(noc(Uasm#GgV|6a9xc#ZSnZfw@Q?Q`iFWa{-<>=X9ipLo06&Q$w>XDTB4*(HJvd z1TU;-6so7#KR)5lEbs$DPc+=q`--ojxK|J(l;vS{w-xChH2G1C>HEpbR{MvSLC~Z% z^w3z0`lwa}{+KBT;bp)h+hsu{c=HZD+He>&1Q_ zmlEA(x1F)~J56P&(Y7MMyAlTHPKi`F|Hs#U#oXRG z?+xdX%e(+mg-C->ZohLV@gQe?JA7Brwc*PBr~ijS5_WE?H5oGz1rj3`0R-eq+Q|Sl z>>h%nWB`MJY#_XGD~SgUgNio@c_TfY(k9ql`zco*BKcL=sFe6qGgUE~J9=_NehJ;Y znoVpP7oTGM$yjy8&)M9UwrBdYASUY|j@DZF+k@IYIVH@XE)g!{^#OKbGK}CVMZ`5@jKn{S5H7?g=met3j5CK|r?$6||pV+zIaf7&F zDP?DS(0Smtzlf0aZ(zsl-0Ac6O3t4Lj6M*GmU?4lld( zS22cp5&PV9QXxBo$6^in?*Xxncu*fOtd^DJrC2>@BMzO^ayGMY0;21#Is#ae*M;RE z%}2Fd9Nk14YNa~c2OHWpp#9x+%@AA=GsPrDpBcHT&Rrt7v*nDOZf?s&SxZN73j??R~z+5kel{=`Ty<2RX@G)5L9 zkSAe+Q@j0B?V!O>STHZwvvJmJE6|)IVL9)lIh?P2AX@mez#9XP(z05@bYfkJ3NX0;KBJNkM5Ae#2dY@Rs9g6&wZfJI7_jQ4h zH7`1}Oqn>C>|D7SZ>CkyJG>)(5eVTCATxa_XE0>r{k%Q9%wP-Z@0fYRag1P4T%dmA zkKK2>NU1I8fTUs5^7g|!Y&yH;He1o3W!7%}3(S;wAEMrB*l335^jJ929`B9BjB;!rO1<&>`hAg#L+S*(l%#G+UmtBVa*5&eSdE zG@Y?Bc;lmvX83Vv%P!C51d7xz_K=l_&kh+Ha_?vvqOm#qpl1MKPb%2>DVw+b_fVpm ztN@Oikzxaqn}uGIT9q;c~M zd)LJijqKh=1yz5Z%Fg`;D-Q*}mg?Icx4@g(x!85@qC*2QPDX-9mXl;N{k#d`8wRk>ZaF8W%H$2ucZtFNqyUdBp(Tf zbBTEgK+}mYHC04+l>UQKhU2e26rvnym@UHC4j*r7j2;lfq*O2Z8i$jh1NQ7UXU@p| zvOiK}BCLt4=7~3P#RS7Vj5J5e*;zUv)V6z`wCviHxjfG?zFtZx@nH}M2L+SJK@m3# z;p4f%5jX}l5-;Ongew#`iLpC`X=;$*1@a5GSF@qD!E0_p2R7B)VD}Pt@BB=rZrh%_ zBX}6}d%4ks#Tc~h?w>Rp)v=)wce9yZ4$8e|2|wX3<0;d3;}tM-SWfX#ok03Xf>FRVo-h$HS>#xQL~U^FjG%EbrD95(g@tJ^M;m)e-5DH zQEik6w&ATER1ijewy0We zPg|?ETSBI{(#y%)&Iv$xn8H1YK*U6n8{s_6O0ZBp=@yhO zH1ioXwoTo=smAP8m^OXPnYw0!T#$jS4GjC4)%T(~;<`qhEMH3)eVBbw<5gUUGw5h( zZ|F65fGH7I&lxWfxjZB5U;dk1f%xcd)|=~=>JQXT6N>TpXjP0~!s*Qs665-4=Tdh@ zUmw;4%K<)#xqwctm?|VK(v}y(KBmYL649h%2nvn^p4~v(HzG*)Zxrqa^qCO`a5j;9lFs z-jof9ub#wXLGPj{42~MXj@(0&C_(8W-Ovp(M?{)O z1IF|h+G@1vn_A^TvNl@ZVgXNnI)H97*$14sm}-N;s&1}oYl#$)%R`#Wae*` z2``?$X`@v9>LFB6sX;cy(5D{}<-o+0XwrAU zP39;m3^rITFbhA9K2lG!+O2Yadn$jp=mAU*S3aND-cXEnQ{{9Z;La3(09w8nDH;PgXH6zAf>f1M#eLEHQr#2lyByB z_j6HtMK|L_(D$0HQGe1sMI?zf?63@c*>n#0gTp>6ggkc>gEO?ce{8 zqRAD`zc+%v-}@`RnVzJHJh1-@G4y?Km-Qde8vy&{zDcFN30^Y&6Z`?Fw^8$d+tvTO z^TOdk3!(DgHu}Fm`L{PD8RP$3O7yQi4?^_^9A#@~lFQH6%DznIevipDA zUH5tj04J=vTcN?@utm5$1jb^tYP87+PCR!1?I@~v-ZVugE$&jK;|VgQ->AWvn!fBr z=(c#PeeMq6l5yw;HfZ#Gg4E#&ir4y&E zrUpmxz*Bz(2z|+0@t@kHRd=u|Rg*@`Nzpf>M!#I984$Gj>``D<=#&e4v*!0FDI%#% zdKhy}a*?G_`m5UvX-57db;V^AC^<5Ok(W~)al{Qk;|DWdT$ z-mhv8bV@+S zCUzU6*J=VhKd@N!IygW20ek~2It>X=gKd1VQhp1Fys|Y7}x#5xrcWCDe zM5~2?)T$wX4KcZD$huU^!o4(Y80kfifzS^he0^Ev!(sW{HZD~| zzBTmj9mbiIsE{hmjY{y3LD%EuYU6=IyO$46hrLP>$BLcKyhLw?JTl~T5>R~3S@H?k zhFm;8P7a+u>l>mNMDGvf$NLR?axH#;G9M(*=J;FI;|ZXWJQAzA0e-AS0IW*XBp(WS ziBchlebt(+3|m`L^me-QPco3yZ0XxrwLHH?aZlxsPOmN6;^CQUyf>1hu~h$}emHw| zMYg^M=q}LK ztRmRdYz;QXqb4w7WJWf%%smSbEwDOp-s{OYx72eL!yJ)89!yVAe&S(%S+YT}xinGX#N0r zIX1f|T{@dxP>aja=hAsLGK$r{>U@cxJ_GVe*WPCxFAmwqB)hp$Fo>?HXGc&e)MGyn zGK?rv5)vXfPL_Ipts(|O`Q$sI^$rXehm6}~^7!e0EPLF`F&dm8{&{K(NuJpL<$%OS zvlGR9JS%jS(o@*ep40A_hxqoAl?Eja8r>EmAt9mK_Ksh-(-)0Vze7+gq1MG>?L$R6 zCkEE({$?=2Zq`Jl9PR8`&j--v<_?u^9^u5i2|jH9ZT;bUJ$!r&O<8@n;NyXIC?v(^ z&tlhgOjyb%jCeC>1D+R~QBG73(>(4wO*wjpux-HYF3VJ?O z7DYc@^9y6qHk~M!BGq&~%X=K#<^J=$#q^BfgCE)xlmEF8_9x*>Vt;kR*%Ga<2H}=3 z4x#`}+97BFwL*tYrTu1HV4P{u7}xWb39C@mNfLq#4E25ZSJ8D__5X{ zbgh743tFvI6*JB5hS_a{Wj~n~>UR9|?6H5Kgu~&ny?gpCdcD;gQH-HKO%e;&^urqC zMsHfJWK$y5oLJze`iVw2g>TagW!f55`q7wAkT$U06`+fIyTNzZvlW4QUVeo)e5fTQ zB@@&|fsD~dI}08(6t|ed)U19-w`=#ITx5-byUJU*y?Wo`-T&}|1-fmR*?jyx^&sc* z;`adSH?W4Xr`mspMT#u#Z@;RqqoZ>l=u)W6jwp%Vd+$fOm_}KZn%j;rq`%$>4RSl} zMW>WV5LXqv9>sJ2mKk-{`J|pn!IPj@s!IKZ?d0p2-X}C>g?^x$oGfn+mkz;4!vi1A z_Ay+_1-G#&k9R*KNT%0|*_If><}{P-kmMLY*i*_sSU53~BugJUS@!5i!|P@o^k2VUo%#e=#H{*JwZ?%Cq$@FhEHhLRc` z`CQ{yo7WwItdkRk)`O6$@{{8Ehrkeck)cg;rp>(#D)B!gq@+qBou59XrIkp!)?3Xo zS**Xq#=|3}p@FU49l;O^_XmH(>h+j$A%?{K*pJ>60n{~T3|e(T zk*!Ct;A2VGaMZrZ@7X8-NBMQ;8{0AbVko24yz0-V@boZT7~=^M;qS4cr2 z#3z=xbR#@_ktSD}$yNGDTb?c#)IM0^Yfa%R*NWd6I=8sz+3y3u28S%>TQI)342Oq8 zxpa@=gaGPeqK#8N?fvOa9&X8>pA6w%iA}Mp{C=-PVJ5$L$fikxzCC?CMf527tMLhv zD8@nm9G9}yX0-LxG2=c~f_*++^h4G^m8VjxDRBRzbV=IeIo|zKsKH`tUk2g~n%FNM z?q|($Oauo1uU|bIVG5GH+c3sTEnhtQy@8_Z`_v}2tfl&MGIB_r0JrasJsEci>&GO7_$Umr`wK zOf*~8_~QY4{Z}B_@#-Bd{ya1gzCe$B9|1=}o)9w+g&~t#$K}+?eAP2RK*c7dB>l@x-_y3~<6l>Ws1cg0*&}~={>T18 zu3ST_i9}7AT3J9fsh_H?AJ;K9;$&>2R|~h+dV`*D$jPBaD4?7VpRZgC`xQX`TIa5_ zond00T|BNUP;Gcs?Qxzt3=EnmLzzEsXo&BYyCa*9aHm%?V0C`g#|NW?7sg`cW~bzp9Ar+1jKe@cM1YdZfq7Pj zb_UQ~J$=p}%BgkAi-$Gwj}F-rS!N5mtkQD3lm+h9Njm2x7k4ZK#M?%!iOZT(_Zw|j zlEvJ= z(i9+&Ie)3fA9RuZmZV>c*R$`_pE_m>URO#aj?7sJ>Jii+_Cc4OY z68OT%rVk64+1S3t7{v|_V?mUh&ifHX!6R%OZ2b6yIZU3O$~GVh6$(bVD62i3L>sBa z&)WNtY9b)(876lG&Q?jzNtUs*erwXO)EmYC_AQ8KXR|=u8<+5bt=FHhVjshveN-v*RIgOE`|tqLOx&V!SA5S z&rdK(--}~`j=^gwIe+T6;Q^#PQ-YbdT>Q_k` z$R!LF2@4mQpax6on%zTEVDAW-ba{Owf0#ueqO0wp77v|H8`_$NS81nub8&{WDFfdy zf+R#JR7?=3%k6M$!L&gz+VW{e{5Z7r5k9K$0`PcLV<)ZdkZFoX;WzXohp=4x8H=f& z{l}2SYGo8Q6<%gMYdxx^eMdQzCDrcdf7}$)7G&);)cP|GVxt~K;=bGkaO<|B{8F!y+ZFq!H@Js7#2`-w^1)4dR?MmsEwvHFF4^FT-+Wm#iZHZm%iS}I z1gASN>hhTmT67^|H<+3Bg4ef&AJh)enQJVjw4=j zLRsQ*rna$D7JEj3_=}@js=*!c!F`chnF){HEgxV~gg+%)#(00AAsVGZomL!ojG)t? z9Depfce7Up&f))qPLjj9s)ThnKK8dF&Czc~xX3*u4aP5r3;NI7Zs<4(74J~+@eveA zQs=7-2689BNvz`WhtxTRw|rO=ZN^OISy=)?TgzaLJ92T^EkmTxUPn!)2^*PTvKQ~8 z+^%F>k2p)#9pIvTnKjPyX3esEE{kAaLBr`YqrlLs3Lqei#vL)iTB5|{NB}H@b zG4k1a&Al^-kO$E%wgmkKv%^Gy!^4sk)2nhzD@4;Oat-S%ITsdYE zHLPe0BV;-zH6`Q)6)ud?XEt7xZr2U6<0j636kqvjFK{x_PmuUB^Dh=7X7P$|)WJOO zjzg^26mG9IJE>Cxl9wRGYqmD+B5ioh;kZ!8Dd+_dr`bwIATyoN{=P-;yHE_L4jLD7 zo-_G>-POf75IwpC&Wo$7IF7QTnN&_@OAG0*D#RN*H>+DJ+m|5GZ)$paw&d+{2OXwq zv70FtH7I&GR4QaIlsrN|k>FkTMUvo^ z^Q3mfFH4+)hvZO!7)ygNGNlToAV$Q^Sz9c| zJE%UW~!gutAJ{~CcnR%kvg(y$YshdFms$93ktQZ^$;DPR9*EvHR}2PlwP>ae;?KWxG-}Bg zKkC*ye?gNklIFub8|bIe9WUgnG0U!XIvz>0sgyF_s)N~L;br({TNLjI(x8_c{CNWX zsPyw|EyVvDzysgb4z6w}Qu#7TRN*LVNJ2nqhEx3!Cah~wT7to%x=PMTu#ARKB=nhEAnQn6qs>Sd0Z?9N@gi!8a9mxn0E z=eA&*w*tYe-@c5GZM%)42N+UsuSU7<@6rCK#>iu+>Oa(`?N3=}SbCys>)Qyw0D ztZjtx&Y4rk#qSdxo#^4QE%fzkkbC+g%pvFS+9cPQH)pma+4=p1$^9h)5`ioT@B&zm z%1^j{DwW*7cZVFH79y3%$uxa|ejAc~m)euen6pqAx3q5ATs$mr%aMEcAD|bt!BPk^ z6YBUocQK3}1~>|SiDc*OD9QoQoLYE!PM?dtU) z?7GVGy-L(IqB31Ko3-!=J#-YuPoEV&8s2Ws8U||eHj)TP1SA3y0g1qy5LmKeEpEib zh^#WJuG9w`f92Gz;$}=7)n*3}$$m-Xd?>ZaOy?3jI5^B}mzil>(dPFB5&2uhBX|wu z)>)eZw^8soMi_OnIyZvqtl9OuB$>0G0Re~TJ5KBpGTf0Oh1E|QKXsz^4Mb9s@eSy`>p=uRFf#fp7|@Z+a( z<7TXe@mVAV0Q{*IolV%-sa$avuWwXW!wl_Bc)#xbB0;jZ1O{R4+5mcRx+9veH){AL z?Ci#?YKY&4WHV?-j)Y+jNv&gvSnJoQ0ek!LaB*=XL$MJml6{wI0=&os?CiO7f>^g{ z(*_pZ&EYW7F-MYp@xmocojx7WM9y_7TGYRvjhOeJSFh%oWb-`P8GYS`4S4+MF{V&| z>^@fMa>)deH-6o@EA{X;$E=w?s{4Qg1MvxWur+YAc#Y-ZVN}ch@WDfB0j5j+YTJox zRjPUN=~A-TP2BaeGbbW zU5Rv8%`#1%$2KDTzY~w*j6HA52B9n=cNjZT1nzlo&^>5d2=&R1r8Qei7_9Po{h$B* zSEEmMI`$RQDs2uK7Z0uq7ug#bH-*P~2sFES!6YJ)TUy5yrW z(AN6BUD`V%*?vp?DWVaRrwidWF76aPDXio2Y#2%1`59r##BsvA>V1uOMzY`61-z^C#K*^D`ixn) z6mc2JNy#WrH3!X`nULw3Jt|kO^sY{u@8doqZU?(J`5r846DU%pDE+sI=o!D1!vr&Qm~ zYb%?jz0V;@_WMLzo=YMi5s(N-1SA3y0f~S_Kq4R!kO)WwiZlZM2Uu`7R-Tq_yZ`_I M07*qoM6N<$f~r)JF#rGn literal 0 HcmV?d00001 diff --git a/public/bash/css/layout.scss b/public/bash/css/layout.scss new file mode 100644 index 0000000..f499fdd --- /dev/null +++ b/public/bash/css/layout.scss @@ -0,0 +1,69 @@ +/** + * Layout helpers. + */ + +// Stretch an element vertically based on available space +.reveal .stretch, +.reveal .r-stretch { + max-width: none; + max-height: none; +} + +.reveal pre.stretch code, +.reveal pre.r-stretch code { + height: 100%; + max-height: 100%; + box-sizing: border-box; +} + +// Text that auto-fits its container +.reveal .r-fit-text { + display: inline-block; // https://github.com/rikschennink/fitty#performance + white-space: nowrap; +} + +// Stack multiple elements on top of each other +.reveal .r-stack { + display: grid; +} + +.reveal .r-stack > * { + grid-area: 1/1; + margin: auto; +} + +// Horizontal and vertical stacks +.reveal .r-vstack, +.reveal .r-hstack { + display: flex; + + img, video { + min-width: 0; + min-height: 0; + object-fit: contain; + } +} + +.reveal .r-vstack { + flex-direction: column; + align-items: center; + justify-content: center; +} + +.reveal .r-hstack { + flex-direction: row; + align-items: center; + justify-content: center; +} + +// Naming based on tailwindcss +.reveal .items-stretch { align-items: stretch; } +.reveal .items-start { align-items: flex-start; } +.reveal .items-center { align-items: center; } +.reveal .items-end { align-items: flex-end; } + +.reveal .justify-between { justify-content: space-between; } +.reveal .justify-around { justify-content: space-around; } +.reveal .justify-start { justify-content: flex-start; } +.reveal .justify-center { justify-content: center; } +.reveal .justify-end { justify-content: flex-end; } diff --git a/public/bash/css/print/paper.scss b/public/bash/css/print/paper.scss new file mode 100644 index 0000000..32fab8a --- /dev/null +++ b/public/bash/css/print/paper.scss @@ -0,0 +1,166 @@ + +@media print { + html:not(.print-pdf) { + overflow: visible; + width: auto; + height: auto; + + body { + margin: 0; + padding: 0; + overflow: visible; + } + } + + html:not(.print-pdf) .reveal { + background: #fff; + font-size: 20pt; + + .controls, + .state-background, + .progress, + .backgrounds, + .slide-number { + display: none !important; + } + + p, td, li { + font-size: 20pt!important; + color: #000; + } + + h1,h2,h3,h4,h5,h6 { + color: #000!important; + height: auto; + line-height: normal; + text-align: left; + letter-spacing: normal; + } + + h1 { font-size: 28pt !important; } + h2 { font-size: 24pt !important; } + h3 { font-size: 22pt !important; } + h4 { font-size: 22pt !important; font-variant: small-caps; } + h5 { font-size: 21pt !important; } + h6 { font-size: 20pt !important; font-style: italic; } + + a:link, + a:visited { + color: #000 !important; + font-weight: bold; + text-decoration: underline; + } + + ul, ol, div, p { + visibility: visible; + position: static; + width: auto; + height: auto; + display: block; + overflow: visible; + margin: 0; + text-align: left !important; + } + pre, + table { + margin-left: 0; + margin-right: 0; + } + pre code { + padding: 20px; + } + blockquote { + margin: 20px 0; + } + + .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%; + } + .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; + } + .slides section.stack { + padding: 0 !important; + } + .slides section:last-of-type { + page-break-after: avoid !important; + } + .slides section .fragment { + opacity: 1 !important; + visibility: visible !important; + + transform: none !important; + } + + .r-fit-text { + white-space: normal !important; + } + + section img { + display: block; + margin: 15px 0px; + background: rgba(255,255,255,1); + border: 1px solid #666; + box-shadow: none; + } + + section small { + font-size: 0.8em; + } + + .hljs { + max-height: 100%; + white-space: pre-wrap; + word-wrap: break-word; + word-break: break-word; + font-size: 15pt; + } + + .hljs .hljs-ln-numbers { + white-space: nowrap; + } + + .hljs td { + font-size: inherit !important; + color: inherit !important; + } + } +} diff --git a/public/bash/css/print/pdf.scss b/public/bash/css/print/pdf.scss new file mode 100644 index 0000000..0a1c2bf --- /dev/null +++ b/public/bash/css/print/pdf.scss @@ -0,0 +1,159 @@ +/** + * This stylesheet is used to print reveal.js + * presentations to PDF. + * + * https://revealjs.com/pdf-export/ + */ + +html.reveal-print { + * { + -webkit-print-color-adjust: exact; + } + + & { + width: 100%; + height: 100%; + overflow: visible; + } + + body { + margin: 0 auto !important; + border: 0; + padding: 0; + float: none !important; + overflow: visible; + } + + /* Remove any elements not needed in print. */ + .nestedarrow, + .reveal .controls, + .reveal .progress, + .reveal .playback, + .reveal.overview, + .state-background { + display: none !important; + } + + .reveal pre code { + overflow: hidden !important; + } + + .reveal { + width: auto !important; + height: auto !important; + overflow: hidden !important; + } + .reveal .slides { + position: static; + width: 100% !important; + height: auto !important; + zoom: 1 !important; + pointer-events: initial; + + left: auto; + top: auto; + margin: 0 !important; + padding: 0 !important; + + overflow: visible; + display: block; + + perspective: none; + perspective-origin: 50% 50%; + } + + .reveal .slides .pdf-page { + position: relative; + overflow: hidden; + z-index: 1; + + page-break-after: always; + } + + .reveal .slides .pdf-page:last-of-type { + page-break-after: avoid; + } + + .reveal .slides section { + visibility: visible !important; + display: block !important; + position: absolute !important; + + margin: 0 !important; + padding: 0 !important; + box-sizing: border-box !important; + min-height: 1px; + + opacity: 1 !important; + + transform-style: flat !important; + transform: none !important; + } + + .reveal section.stack { + position: relative !important; + margin: 0 !important; + padding: 0 !important; + page-break-after: avoid !important; + height: auto !important; + min-height: auto !important; + } + + .reveal img { + box-shadow: none; + } + + /* Slide backgrounds are placed inside of their slide when exporting to PDF */ + .reveal .backgrounds { + display: none; + } + .reveal .slide-background { + display: block !important; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: auto !important; + } + + /* Display slide speaker notes when 'showNotes' is enabled */ + .reveal.show-notes { + max-width: none; + max-height: none; + } + .reveal .speaker-notes-pdf { + display: block; + width: 100%; + height: auto; + max-height: none; + top: auto; + right: auto; + bottom: auto; + left: auto; + z-index: 100; + } + + /* Layout option which makes notes appear on a separate page */ + .reveal .speaker-notes-pdf[data-layout="separate-page"] { + position: relative; + color: inherit; + background-color: transparent; + padding: 20px; + page-break-after: always; + border: 0; + } + + /* Display slide numbers when 'slideNumber' is enabled */ + .reveal .slide-number-pdf { + display: block; + position: absolute; + font-size: 14px; + visibility: visible; + } + + /* This accessibility tool is not useful in PDF and breaks it visually */ + .aria-status { + display: none; + } +} diff --git a/public/bash/css/reveal.scss b/public/bash/css/reveal.scss new file mode 100644 index 0000000..0a3ade7 --- /dev/null +++ b/public/bash/css/reveal.scss @@ -0,0 +1,2109 @@ +@use "sass:math"; + +/** + * reveal.js + * http://revealjs.com + * MIT licensed + * + * Copyright (C) Hakim El Hattab, https://hakim.se + */ + +@import 'layout'; + +/********************************************* + * GLOBAL STYLES + *********************************************/ + +html.reveal-full-page { + width: 100%; + height: 100%; + height: 100vh; + height: calc( var(--vh, 1vh) * 100 ); + height: 100svh; + overflow: hidden; +} + +.reveal-viewport { + height: 100%; + overflow: hidden; + position: relative; + line-height: 1; + margin: 0; + + background-color: #fff; + color: #000; + + --r-controls-spacing: 12px; +} + +// Force the presentation to cover the full viewport when we +// enter fullscreen mode. Fixes sizing issues in Safari. +.reveal-viewport:fullscreen { + top: 0 !important; + left: 0 !important; + width: 100% !important; + height: 100% !important; + transform: none !important; +} + + +/********************************************* + * VIEW FRAGMENTS + *********************************************/ + +.reveal .fragment { + transition: all .2s ease; + + &:not(.custom) { + opacity: 0; + visibility: hidden; + will-change: opacity; + } + + &.visible { + opacity: 1; + visibility: inherit; + } + + &.disabled { + transition: none; + } +} + +.reveal .fragment.grow { + opacity: 1; + visibility: inherit; + + &.visible { + transform: scale( 1.3 ); + } +} + +.reveal .fragment.shrink { + opacity: 1; + visibility: inherit; + + &.visible { + transform: scale( 0.7 ); + } +} + +.reveal .fragment.zoom-in { + transform: scale( 0.1 ); + + &.visible { + transform: none; + } +} + +.reveal .fragment.fade-out { + opacity: 1; + visibility: inherit; + + &.visible { + opacity: 0; + visibility: hidden; + } +} + +.reveal .fragment.semi-fade-out { + opacity: 1; + visibility: inherit; + + &.visible { + opacity: 0.5; + visibility: inherit; + } +} + +.reveal .fragment.strike { + opacity: 1; + visibility: inherit; + + &.visible { + text-decoration: line-through; + } +} + +.reveal .fragment.fade-up { + transform: translate(0, 40px); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .fragment.fade-down { + transform: translate(0, -40px); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .fragment.fade-right { + transform: translate(-40px, 0); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .fragment.fade-left { + transform: translate(40px, 0); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .fragment.fade-in-then-out, +.reveal .fragment.current-visible { + opacity: 0; + visibility: hidden; + + &.current-fragment { + opacity: 1; + visibility: inherit; + } +} + +.reveal .fragment.fade-in-then-semi-out { + opacity: 0; + visibility: hidden; + + &.visible { + opacity: 0.5; + visibility: inherit; + } + + &.current-fragment { + opacity: 1; + visibility: inherit; + } +} + +.reveal .fragment.highlight-red, +.reveal .fragment.highlight-current-red, +.reveal .fragment.highlight-green, +.reveal .fragment.highlight-current-green, +.reveal .fragment.highlight-blue, +.reveal .fragment.highlight-current-blue { + opacity: 1; + visibility: inherit; +} + .reveal .fragment.highlight-red.visible { + color: #ff2c2d + } + .reveal .fragment.highlight-green.visible { + color: #17ff2e; + } + .reveal .fragment.highlight-blue.visible { + color: #1b91ff; + } + +.reveal .fragment.highlight-current-red.current-fragment { + color: #ff2c2d +} +.reveal .fragment.highlight-current-green.current-fragment { + color: #17ff2e; +} +.reveal .fragment.highlight-current-blue.current-fragment { + color: #1b91ff; +} + + +/********************************************* + * DEFAULT ELEMENT STYLES + *********************************************/ + +/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */ +.reveal:after { + content: ''; + font-style: italic; +} + +.reveal iframe { + z-index: 1; +} + +/** Prevents layering issues in certain browser/transition combinations */ +.reveal a { + position: relative; +} + + +/********************************************* + * CONTROLS + *********************************************/ + +@keyframes bounce-right { + 0%, 10%, 25%, 40%, 50% {transform: translateX(0);} + 20% {transform: translateX(10px);} + 30% {transform: translateX(-5px);} +} + +@keyframes bounce-left { + 0%, 10%, 25%, 40%, 50% {transform: translateX(0);} + 20% {transform: translateX(-10px);} + 30% {transform: translateX(5px);} +} + +@keyframes bounce-down { + 0%, 10%, 25%, 40%, 50% {transform: translateY(0);} + 20% {transform: translateY(10px);} + 30% {transform: translateY(-5px);} +} + +$controlArrowSize: 3.6em; +$controlArrowSpacing: 1.4em; +$controlArrowLength: 2.6em; +$controlArrowThickness: 0.5em; +$controlsArrowAngle: 45deg; +$controlsArrowAngleHover: 40deg; +$controlsArrowAngleActive: 36deg; + +@mixin controlsArrowTransform( $angle ) { + &:before { + transform: translateX(($controlArrowSize - $controlArrowLength)*0.5) translateY(($controlArrowSize - $controlArrowThickness)*0.5) rotate( $angle ); + } + + &:after { + transform: translateX(($controlArrowSize - $controlArrowLength)*0.5) translateY(($controlArrowSize - $controlArrowThickness)*0.5) rotate( -$angle ); + } +} + +.reveal .controls { + display: none; + position: absolute; + top: auto; + bottom: var(--r-controls-spacing); + right: var(--r-controls-spacing); + left: auto; + z-index: 11; + color: #000; + pointer-events: none; + font-size: 10px; + + button { + position: absolute; + padding: 0; + background-color: transparent; + border: 0; + outline: 0; + cursor: pointer; + color: currentColor; + transform: scale(.9999); + transition: color 0.2s ease, + opacity 0.2s ease, + transform 0.2s ease; + z-index: 2; // above slides + pointer-events: auto; + font-size: inherit; + + visibility: hidden; + opacity: 0; + + -webkit-appearance: none; + -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 ); + } + + .controls-arrow:before, + .controls-arrow:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: $controlArrowLength; + height: $controlArrowThickness; + border-radius: $controlArrowThickness*0.5; + background-color: currentColor; + + transition: all 0.15s ease, background-color 0.8s ease; + transform-origin: math.div(floor(($controlArrowThickness*0.5)*10), 10) 50%; + will-change: transform; + } + + .controls-arrow { + position: relative; + width: $controlArrowSize; + height: $controlArrowSize; + + @include controlsArrowTransform( $controlsArrowAngle ); + + &:hover { + @include controlsArrowTransform( $controlsArrowAngleHover ); + } + + &:active { + @include controlsArrowTransform( $controlsArrowAngleActive ); + } + } + + .navigate-left { + right: $controlArrowSize + $controlArrowSpacing*2; + bottom: $controlArrowSpacing + $controlArrowSize*0.5; + transform: translateX( -10px ); + + &.highlight { + animation: bounce-left 2s 50 both ease-out; + } + } + + .navigate-right { + right: 0; + bottom: $controlArrowSpacing + $controlArrowSize*0.5; + transform: translateX( 10px ); + + .controls-arrow { + transform: rotate( 180deg ); + } + + &.highlight { + animation: bounce-right 2s 50 both ease-out; + } + } + + .navigate-up { + right: $controlArrowSpacing + $controlArrowSize*0.5; + bottom: $controlArrowSpacing*2 + $controlArrowSize; + transform: translateY( -10px ); + + .controls-arrow { + transform: rotate( 90deg ); + } + } + + .navigate-down { + right: $controlArrowSpacing + $controlArrowSize*0.5; + bottom: -$controlArrowSpacing; + padding-bottom: $controlArrowSpacing; + transform: translateY( 10px ); + + .controls-arrow { + transform: rotate( -90deg ); + } + + &.highlight { + animation: bounce-down 2s 50 both ease-out; + } + } + + // Back arrow style: "faded": + // Deemphasize backwards navigation arrows in favor of drawing + // attention to forwards navigation + &[data-controls-back-arrows="faded"] .navigate-up.enabled { + opacity: 0.3; + + &:hover { + opacity: 1; + } + } + + // Back arrow style: "hidden": + // Never show arrows for backwards navigation + &[data-controls-back-arrows="hidden"] .navigate-up.enabled { + opacity: 0; + visibility: hidden; + } + + // Any control button that can be clicked is "enabled" + .enabled { + visibility: visible; + opacity: 0.9; + cursor: pointer; + transform: none; + } + + // Any control button that leads to showing or hiding + // a fragment + .enabled.fragmented { + opacity: 0.5; + } + + .enabled:hover, + .enabled.fragmented:hover { + opacity: 1; + } +} + +.reveal:not(.rtl) .controls { + // Back arrow style: "faded": + // Deemphasize left arrow + &[data-controls-back-arrows="faded"] .navigate-left.enabled { + opacity: 0.3; + + &:hover { + opacity: 1; + } + } + + // Back arrow style: "hidden": + // Never show left arrow + &[data-controls-back-arrows="hidden"] .navigate-left.enabled { + opacity: 0; + visibility: hidden; + } +} + +.reveal.rtl .controls { + // Back arrow style: "faded": + // Deemphasize right arrow in RTL mode + &[data-controls-back-arrows="faded"] .navigate-right.enabled { + opacity: 0.3; + + &:hover { + opacity: 1; + } + } + + // Back arrow style: "hidden": + // Never show right arrow in RTL mode + &[data-controls-back-arrows="hidden"] .navigate-right.enabled { + opacity: 0; + visibility: hidden; + } +} + +.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-up, +.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-down { + display: none; +} + +// Adjust the layout when there are no vertical slides +.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-left, +.reveal:not(.has-vertical-slides) .controls .navigate-left { + bottom: $controlArrowSpacing; + right: 0.5em + $controlArrowSpacing + $controlArrowSize; +} + +.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-right, +.reveal:not(.has-vertical-slides) .controls .navigate-right { + bottom: $controlArrowSpacing; + right: 0.5em; +} + +// Adjust the layout when there are no horizontal slides +.reveal:not(.has-horizontal-slides) .controls .navigate-up { + right: $controlArrowSpacing; + bottom: $controlArrowSpacing + $controlArrowSize; +} +.reveal:not(.has-horizontal-slides) .controls .navigate-down { + right: $controlArrowSpacing; + bottom: 0.5em; +} + +// Invert arrows based on background color +.reveal.has-dark-background .controls { + color: #fff; +} +.reveal.has-light-background .controls { + color: #000; +} + +// Disable active states on touch devices +.reveal.no-hover .controls .controls-arrow:hover, +.reveal.no-hover .controls .controls-arrow:active { + @include controlsArrowTransform( $controlsArrowAngle ); +} + +// Edge aligned controls layout +@media screen and (min-width: 500px) { + + .reveal-viewport { + --r-controls-spacing: 0.8em; + } + + .reveal .controls[data-controls-layout="edges"] { + & { + top: 0; + right: 0; + bottom: 0; + left: 0; + } + + .navigate-left, + .navigate-right, + .navigate-up, + .navigate-down { + bottom: auto; + right: auto; + } + + .navigate-left { + top: 50%; + left: var(--r-controls-spacing); + margin-top: -$controlArrowSize*0.5; + } + + .navigate-right { + top: 50%; + right: var(--r-controls-spacing); + margin-top: -$controlArrowSize*0.5; + } + + .navigate-up { + top: var(--r-controls-spacing); + left: 50%; + margin-left: -$controlArrowSize*0.5; + } + + .navigate-down { + bottom: calc(var(--r-controls-spacing) - #{$controlArrowSpacing} + 0.3em); + left: 50%; + margin-left: -$controlArrowSize*0.5; + } + } + +} + + +/********************************************* + * PROGRESS BAR + *********************************************/ + +.reveal .progress { + position: absolute; + display: none; + height: 3px; + width: 100%; + bottom: 0; + left: 0; + z-index: 10; + + background-color: rgba( 0, 0, 0, 0.2 ); + color: #fff; +} + .reveal .progress:after { + content: ''; + display: block; + position: absolute; + height: 10px; + width: 100%; + top: -10px; + } + .reveal .progress span { + display: block; + height: 100%; + width: 100%; + + background-color: currentColor; + transition: transform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + transform-origin: 0 0; + transform: scaleX(0); + } + +/********************************************* + * SLIDE NUMBER + *********************************************/ + +.reveal .slide-number { + position: absolute; + display: block; + right: 8px; + bottom: 8px; + z-index: 31; + font-family: Helvetica, sans-serif; + font-size: 12px; + line-height: 1; + color: #fff; + background-color: rgba( 0, 0, 0, 0.4 ); + padding: 5px; +} + +.reveal .slide-number a { + color: currentColor; +} + +.reveal .slide-number-delimiter { + margin: 0 3px; +} + +/********************************************* + * SLIDES + *********************************************/ + +.reveal { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + touch-action: pinch-zoom; +} + +// Swiping on an embedded deck should not block page scrolling +.reveal.embedded { + touch-action: pan-y; +} + +.reveal .slides { + position: absolute; + width: 100%; + height: 100%; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: auto; + pointer-events: none; + + overflow: visible; + z-index: 1; + text-align: center; + perspective: 600px; + perspective-origin: 50% 40%; +} + +.reveal .slides>section { + perspective: 600px; +} + +.reveal .slides>section, +.reveal .slides>section>section { + display: none; + position: absolute; + width: 100%; + pointer-events: auto; + + z-index: 10; + transform-style: flat; + transition: transform-origin 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + transform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + visibility 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + opacity 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); +} + +/* Global transition speed settings */ +.reveal[data-transition-speed="fast"] .slides section { + transition-duration: 400ms; +} +.reveal[data-transition-speed="slow"] .slides section { + transition-duration: 1200ms; +} + +/* Slide-specific transition speed overrides */ +.reveal .slides section[data-transition-speed="fast"] { + transition-duration: 400ms; +} +.reveal .slides section[data-transition-speed="slow"] { + transition-duration: 1200ms; +} + +.reveal .slides>section.stack { + padding-top: 0; + padding-bottom: 0; + pointer-events: none; + height: 100%; +} + +.reveal .slides>section.present, +.reveal .slides>section>section.present { + display: block; + z-index: 11; + opacity: 1; +} + +.reveal .slides>section:empty, +.reveal .slides>section>section:empty, +.reveal .slides>section[data-background-interactive], +.reveal .slides>section>section[data-background-interactive] { + pointer-events: none; +} + +.reveal.center, +.reveal.center .slides, +.reveal.center .slides section { + min-height: 0 !important; +} + +/* Don't allow interaction with invisible slides */ +.reveal .slides>section:not(.present), +.reveal .slides>section>section:not(.present) { + pointer-events: none; +} + +.reveal.overview .slides>section, +.reveal.overview .slides>section>section { + pointer-events: auto; +} + +.reveal .slides>section.past, +.reveal .slides>section.future, +.reveal .slides>section.past>section, +.reveal .slides>section.future>section, +.reveal .slides>section>section.past, +.reveal .slides>section>section.future { + opacity: 0; +} + + +/********************************************* + * Mixins for readability of transitions + *********************************************/ + +@mixin transition-global($style) { + .reveal .slides section[data-transition=#{$style}], + .reveal.#{$style} .slides section:not([data-transition]) { + @content; + } +} +@mixin transition-stack($style) { + .reveal .slides section[data-transition=#{$style}].stack, + .reveal.#{$style} .slides section.stack { + @content; + } +} +@mixin transition-horizontal-past($style) { + .reveal .slides>section[data-transition=#{$style}].past, + .reveal .slides>section[data-transition~=#{$style}-out].past, + .reveal.#{$style} .slides>section:not([data-transition]).past { + @content; + } +} +@mixin transition-horizontal-future($style) { + .reveal .slides>section[data-transition=#{$style}].future, + .reveal .slides>section[data-transition~=#{$style}-in].future, + .reveal.#{$style} .slides>section:not([data-transition]).future { + @content; + } +} + +@mixin transition-vertical-past($style) { + .reveal .slides>section>section[data-transition=#{$style}].past, + .reveal .slides>section>section[data-transition~=#{$style}-out].past, + .reveal.#{$style} .slides>section>section:not([data-transition]).past { + @content; + } +} +@mixin transition-vertical-future($style) { + .reveal .slides>section>section[data-transition=#{$style}].future, + .reveal .slides>section>section[data-transition~=#{$style}-in].future, + .reveal.#{$style} .slides>section>section:not([data-transition]).future { + @content; + } +} + +/********************************************* + * SLIDE TRANSITION + * Aliased 'linear' for backwards compatibility + *********************************************/ + +@each $stylename in slide, linear { + @include transition-horizontal-past(#{$stylename}) { + transform: translate(-150%, 0); + } + @include transition-horizontal-future(#{$stylename}) { + transform: translate(150%, 0); + } + @include transition-vertical-past(#{$stylename}) { + transform: translate(0, -150%); + } + @include transition-vertical-future(#{$stylename}) { + transform: translate(0, 150%); + } +} + +/********************************************* + * CONVEX TRANSITION + * Aliased 'default' for backwards compatibility + *********************************************/ + +@each $stylename in default, convex { + @include transition-stack(#{$stylename}) { + transform-style: preserve-3d; + } + + @include transition-horizontal-past(#{$stylename}) { + transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); + } + @include transition-horizontal-future(#{$stylename}) { + transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); + } + @include transition-vertical-past(#{$stylename}) { + transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); + } + @include transition-vertical-future(#{$stylename}) { + transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); + } +} + +/********************************************* + * CONCAVE TRANSITION + *********************************************/ + +@include transition-stack(concave) { + transform-style: preserve-3d; +} + +@include transition-horizontal-past(concave) { + transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); +} +@include transition-horizontal-future(concave) { + transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); +} +@include transition-vertical-past(concave) { + transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); +} +@include transition-vertical-future(concave) { + transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); +} + + +/********************************************* + * ZOOM TRANSITION + *********************************************/ + +@include transition-global(zoom) { + transition-timing-function: ease; +} +@include transition-horizontal-past(zoom) { + visibility: hidden; + transform: scale(16); +} +@include transition-horizontal-future(zoom) { + visibility: hidden; + transform: scale(0.2); +} +@include transition-vertical-past(zoom) { + transform: scale(16); +} +@include transition-vertical-future(zoom) { + transform: scale(0.2); +} + + +/********************************************* + * CUBE TRANSITION + * + * WARNING: + * this is deprecated and will be removed in a + * future version. + *********************************************/ + +.reveal.cube .slides { + perspective: 1300px; +} + +.reveal.cube .slides section { + padding: 30px; + min-height: 700px; + backface-visibility: hidden; + box-sizing: border-box; + transform-style: preserve-3d; +} + .reveal.center.cube .slides section { + min-height: 0; + } + .reveal.cube .slides section:not(.stack):before { + content: ''; + position: absolute; + display: block; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0,0,0,0.1); + border-radius: 4px; + transform: translateZ( -20px ); + } + .reveal.cube .slides section:not(.stack):after { + content: ''; + position: absolute; + display: block; + width: 90%; + height: 30px; + left: 5%; + bottom: 0; + background: none; + z-index: 1; + + border-radius: 4px; + box-shadow: 0px 95px 25px rgba(0,0,0,0.2); + transform: translateZ(-90px) rotateX( 65deg ); + } + +.reveal.cube .slides>section.stack { + padding: 0; + background: none; +} + +.reveal.cube .slides>section.past { + transform-origin: 100% 0%; + transform: translate3d(-100%, 0, 0) rotateY(-90deg); +} + +.reveal.cube .slides>section.future { + transform-origin: 0% 0%; + transform: translate3d(100%, 0, 0) rotateY(90deg); +} + +.reveal.cube .slides>section>section.past { + transform-origin: 0% 100%; + transform: translate3d(0, -100%, 0) rotateX(90deg); +} + +.reveal.cube .slides>section>section.future { + transform-origin: 0% 0%; + transform: translate3d(0, 100%, 0) rotateX(-90deg); +} + + +/********************************************* + * PAGE TRANSITION + * + * WARNING: + * this is deprecated and will be removed in a + * future version. + *********************************************/ + +.reveal.page .slides { + perspective-origin: 0% 50%; + perspective: 3000px; +} + +.reveal.page .slides section { + padding: 30px; + min-height: 700px; + box-sizing: border-box; + transform-style: preserve-3d; +} + .reveal.page .slides section.past { + z-index: 12; + } + .reveal.page .slides section:not(.stack):before { + content: ''; + position: absolute; + display: block; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0,0,0,0.1); + transform: translateZ( -20px ); + } + .reveal.page .slides section:not(.stack):after { + content: ''; + position: absolute; + display: block; + width: 90%; + height: 30px; + left: 5%; + bottom: 0; + background: none; + z-index: 1; + + border-radius: 4px; + box-shadow: 0px 95px 25px rgba(0,0,0,0.2); + + -webkit-transform: translateZ(-90px) rotateX( 65deg ); + } + +.reveal.page .slides>section.stack { + padding: 0; + background: none; +} + +.reveal.page .slides>section.past { + transform-origin: 0% 0%; + transform: translate3d(-40%, 0, 0) rotateY(-80deg); +} + +.reveal.page .slides>section.future { + transform-origin: 100% 0%; + transform: translate3d(0, 0, 0); +} + +.reveal.page .slides>section>section.past { + transform-origin: 0% 0%; + transform: translate3d(0, -40%, 0) rotateX(80deg); +} + +.reveal.page .slides>section>section.future { + transform-origin: 0% 100%; + transform: translate3d(0, 0, 0); +} + + +/********************************************* + * FADE TRANSITION + *********************************************/ + +.reveal .slides section[data-transition=fade], +.reveal.fade .slides section:not([data-transition]), +.reveal.fade .slides>section>section:not([data-transition]) { + transform: none; + transition: opacity 0.5s; +} + + +.reveal.fade.overview .slides section, +.reveal.fade.overview .slides>section>section { + transition: none; +} + + +/********************************************* + * NO TRANSITION + *********************************************/ + +@include transition-global(none) { + transform: none; + transition: none; +} + + +/********************************************* + * PAUSED MODE + *********************************************/ + +.reveal .pause-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: black; + visibility: hidden; + opacity: 0; + z-index: 100; + transition: all 1s ease; +} + +.reveal .pause-overlay .resume-button { + position: absolute; + bottom: 20px; + right: 20px; + color: #ccc; + border-radius: 2px; + padding: 6px 14px; + border: 2px solid #ccc; + font-size: 16px; + background: transparent; + cursor: pointer; + + &:hover { + color: #fff; + border-color: #fff; + } +} + +.reveal.paused .pause-overlay { + visibility: visible; + opacity: 1; +} + + +/********************************************* + * FALLBACK + *********************************************/ + +.reveal .no-transition, +.reveal .no-transition *, +.reveal .slides.disable-slide-transitions section { + transition: none !important; +} + +.reveal .slides.disable-slide-transitions section { + transform: none !important; +} + + +/********************************************* + * PER-SLIDE BACKGROUNDS + *********************************************/ + +.reveal .backgrounds { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + perspective: 600px; +} + .reveal .slide-background { + display: none; + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + visibility: hidden; + overflow: hidden; + + background-color: rgba( 0, 0, 0, 0 ); + + transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + } + + .reveal .slide-background-content { + position: absolute; + width: 100%; + height: 100%; + + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: cover; + } + + .reveal .slide-background.stack { + display: block; + } + + .reveal .slide-background.present { + opacity: 1; + visibility: visible; + z-index: 2; + } + + .print-pdf .reveal .slide-background { + opacity: 1 !important; + visibility: visible !important; + } + +/* Video backgrounds */ +.reveal .slide-background video { + position: absolute; + width: 100%; + height: 100%; + max-width: none; + max-height: none; + top: 0; + left: 0; + object-fit: cover; +} + .reveal .slide-background[data-background-size="contain"] video { + object-fit: contain; + } + +/* Immediate transition style */ +.reveal[data-background-transition=none]>.backgrounds .slide-background:not([data-background-transition]), +.reveal>.backgrounds .slide-background[data-background-transition=none] { + transition: none; +} + +/* Slide */ +.reveal[data-background-transition=slide]>.backgrounds .slide-background:not([data-background-transition]), +.reveal>.backgrounds .slide-background[data-background-transition=slide] { + opacity: 1; +} + .reveal[data-background-transition=slide]>.backgrounds .slide-background.past:not([data-background-transition]), + .reveal>.backgrounds .slide-background.past[data-background-transition=slide] { + transform: translate(-100%, 0); + } + .reveal[data-background-transition=slide]>.backgrounds .slide-background.future:not([data-background-transition]), + .reveal>.backgrounds .slide-background.future[data-background-transition=slide] { + transform: translate(100%, 0); + } + + .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]), + .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide] { + transform: translate(0, -100%); + } + .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]), + .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide] { + transform: translate(0, 100%); + } + + +/* Convex */ +.reveal[data-background-transition=convex]>.backgrounds .slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background.past[data-background-transition=convex] { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); +} +.reveal[data-background-transition=convex]>.backgrounds .slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background.future[data-background-transition=convex] { + opacity: 0; + transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); +} + +.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex] { + opacity: 0; + transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); +} +.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex] { + opacity: 0; + transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); +} + + +/* Concave */ +.reveal[data-background-transition=concave]>.backgrounds .slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background.past[data-background-transition=concave] { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); +} +.reveal[data-background-transition=concave]>.backgrounds .slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background.future[data-background-transition=concave] { + opacity: 0; + transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); +} + +.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave] { + opacity: 0; + transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); +} +.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave] { + opacity: 0; + transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); +} + +/* Zoom */ +.reveal[data-background-transition=zoom]>.backgrounds .slide-background:not([data-background-transition]), +.reveal>.backgrounds .slide-background[data-background-transition=zoom] { + transition-timing-function: ease; +} + +.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background.past[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(16); +} +.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background.future[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(0.2); +} + +.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(16); +} +.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]), +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(0.2); +} + + +/* Global transition speed settings */ +.reveal[data-transition-speed="fast"]>.backgrounds .slide-background { + transition-duration: 400ms; +} +.reveal[data-transition-speed="slow"]>.backgrounds .slide-background { + transition-duration: 1200ms; +} + + +/********************************************* + * AUTO ANIMATE + *********************************************/ + +.reveal [data-auto-animate-target^="unmatched"] { + will-change: opacity; +} + +.reveal section[data-auto-animate]:not(.stack):not([data-auto-animate="running"]) [data-auto-animate-target^="unmatched"] { + opacity: 0; +} + + +/********************************************* + * OVERVIEW + *********************************************/ + +.reveal.overview { + perspective-origin: 50% 50%; + perspective: 700px; + + .slides { + // Fixes overview rendering errors in FF48+, not applied to + // other browsers since it degrades performance + -moz-transform-style: preserve-3d; + } + + .slides section { + height: 100%; + top: 0 !important; + opacity: 1 !important; + overflow: hidden; + visibility: visible !important; + cursor: pointer; + box-sizing: border-box; + } + .slides section:hover, + .slides section.present { + outline: 10px solid rgba(150,150,150,0.4); + outline-offset: 10px; + } + .slides section .fragment { + opacity: 1; + transition: none; + } + .slides section:after, + .slides section:before { + display: none !important; + } + .slides>section.stack { + padding: 0; + top: 0 !important; + background: none; + outline: none; + overflow: visible; + } + + .backgrounds { + perspective: inherit; + + // Fixes overview rendering errors in FF48+, not applied to + // other browsers since it degrades performance + -moz-transform-style: preserve-3d; + } + + .backgrounds .slide-background { + opacity: 1; + visibility: visible; + + // This can't be applied to the slide itself in Safari + outline: 10px solid rgba(150,150,150,0.1); + outline-offset: 10px; + } + + .backgrounds .slide-background.stack { + overflow: visible; + } +} + +// Disable transitions transitions while we're activating +// or deactivating the overview mode. +.reveal.overview .slides section, +.reveal.overview-deactivating .slides section { + transition: none; +} + +.reveal.overview .backgrounds .slide-background, +.reveal.overview-deactivating .backgrounds .slide-background { + transition: none; +} + + +/********************************************* + * RTL SUPPORT + *********************************************/ + +.reveal.rtl .slides, +.reveal.rtl .slides h1, +.reveal.rtl .slides h2, +.reveal.rtl .slides h3, +.reveal.rtl .slides h4, +.reveal.rtl .slides h5, +.reveal.rtl .slides h6 { + direction: rtl; + font-family: sans-serif; +} + +.reveal.rtl pre, +.reveal.rtl code { + direction: ltr; +} + +.reveal.rtl ol, +.reveal.rtl ul { + text-align: right; +} + +.reveal.rtl .progress span { + transform-origin: 100% 0; +} + +/********************************************* + * PARALLAX BACKGROUND + *********************************************/ + +.reveal.has-parallax-background .backgrounds { + transition: all 0.8s ease; +} + +/* Global transition speed settings */ +.reveal.has-parallax-background[data-transition-speed="fast"] .backgrounds { + transition-duration: 400ms; +} +.reveal.has-parallax-background[data-transition-speed="slow"] .backgrounds { + transition-duration: 1200ms; +} + + +/********************************************* + * OVERLAY FOR LINK PREVIEWS AND HELP + *********************************************/ + +$overlayHeaderHeight: 40px; +$overlayHeaderPadding: 5px; + +.reveal > .overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; + background: rgba( 0, 0, 0, 0.95 ); + backdrop-filter: blur( 6px ); + transition: all 0.3s ease; +} + + .reveal > .overlay .spinner { + position: absolute; + display: block; + top: 50%; + left: 50%; + width: 32px; + height: 32px; + margin: -16px 0 0 -16px; + z-index: 10; + background-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D); + + visibility: visible; + opacity: 0.6; + transition: all 0.3s ease; + } + + .reveal > .overlay header { + position: absolute; + left: 0; + top: 0; + width: 100%; + padding: $overlayHeaderPadding; + z-index: 2; + box-sizing: border-box; + } + .reveal > .overlay header a { + display: inline-block; + width: $overlayHeaderHeight; + height: $overlayHeaderHeight; + line-height: 36px; + padding: 0 10px; + float: right; + opacity: 0.6; + + box-sizing: border-box; + } + .reveal > .overlay header a:hover { + opacity: 1; + } + .reveal > .overlay header a .icon { + display: inline-block; + width: 20px; + height: 20px; + + background-position: 50% 50%; + background-size: 100%; + background-repeat: no-repeat; + } + .reveal > .overlay header a.close .icon { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); + } + .reveal > .overlay header a.external .icon { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); + } + + .reveal > .overlay .viewport { + position: absolute; + display: flex; + top: $overlayHeaderHeight + $overlayHeaderPadding*2; + right: 0; + bottom: 0; + left: 0; + } + + .reveal > .overlay.overlay-preview .viewport iframe { + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + border: 0; + + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; + } + + .reveal > .overlay.overlay-preview.loaded .viewport iframe { + opacity: 1; + visibility: visible; + } + + .reveal > .overlay.overlay-preview.loaded .viewport-inner { + position: absolute; + z-index: -1; + left: 0; + top: 45%; + width: 100%; + text-align: center; + letter-spacing: normal; + } + .reveal > .overlay.overlay-preview .x-frame-error { + opacity: 0; + transition: opacity 0.3s ease 0.3s; + } + .reveal > .overlay.overlay-preview.loaded .x-frame-error { + opacity: 1; + } + + .reveal > .overlay.overlay-preview.loaded .spinner { + opacity: 0; + visibility: hidden; + transform: scale(0.2); + } + + .reveal > .overlay.overlay-help .viewport { + overflow: auto; + color: #fff; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner { + width: 600px; + margin: auto; + padding: 20px 20px 80px 20px; + text-align: center; + letter-spacing: normal; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner .title { + font-size: 20px; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner table { + border: 1px solid #fff; + border-collapse: collapse; + font-size: 16px; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner table th, + .reveal > .overlay.overlay-help .viewport .viewport-inner table td { + width: 200px; + padding: 14px; + border: 1px solid #fff; + vertical-align: middle; + } + + .reveal > .overlay.overlay-help .viewport .viewport-inner table th { + padding-top: 20px; + padding-bottom: 20px; + } + +/********************************************* + * PLAYBACK COMPONENT + *********************************************/ + +.reveal .playback { + position: absolute; + left: 15px; + bottom: 20px; + z-index: 30; + cursor: pointer; + transition: all 400ms ease; + -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 ); +} + +.reveal.overview .playback { + opacity: 0; + visibility: hidden; +} + + +/********************************************* + * CODE HIGHLGIHTING + *********************************************/ + +.reveal .hljs { + min-height: 100%; +} + +.reveal .hljs table { + margin: initial; +} + +.reveal .hljs-ln-code, +.reveal .hljs-ln-numbers { + padding: 0; + border: 0; +} + +.reveal .hljs-ln-numbers { + opacity: 0.6; + padding-right: 0.75em; + text-align: right; + vertical-align: top; +} + +.reveal .hljs.has-highlights tr:not(.highlight-line) { + opacity: 0.4; +} + +.reveal .hljs.has-highlights.fragment { + transition: all .2s ease; +} + +.reveal .hljs:not(:first-child).fragment { + position: absolute; + top: 0; + left: 0; + width: 100%; + box-sizing: border-box; +} + +.reveal pre[data-auto-animate-target] { + overflow: hidden; +} +.reveal pre[data-auto-animate-target] code { + height: 100%; +} + + +/********************************************* + * ROLLING LINKS + *********************************************/ + +.reveal .roll { + display: inline-block; + line-height: 1.2; + overflow: hidden; + + vertical-align: top; + perspective: 400px; + perspective-origin: 50% 50%; +} + .reveal .roll:hover { + background: none; + text-shadow: none; + } +.reveal .roll span { + display: block; + position: relative; + padding: 0 2px; + + pointer-events: none; + transition: all 400ms ease; + transform-origin: 50% 0%; + transform-style: preserve-3d; + backface-visibility: hidden; +} + .reveal .roll:hover span { + background: rgba(0,0,0,0.5); + transform: translate3d( 0px, 0px, -45px ) rotateX( 90deg ); + } +.reveal .roll span:after { + content: attr(data-title); + + display: block; + position: absolute; + left: 0; + top: 0; + padding: 0 2px; + backface-visibility: hidden; + transform-origin: 50% 0%; + transform: translate3d( 0px, 110%, 0px ) rotateX( -90deg ); +} + + +/********************************************* + * SPEAKER NOTES + *********************************************/ + +$notesWidthPercent: 25%; + +// Hide on-page notes +.reveal aside.notes { + display: none; +} + +// An interface element that can optionally be used to show the +// speaker notes to all viewers, on top of the presentation +.reveal .speaker-notes { + display: none; + position: absolute; + width: math.div($notesWidthPercent, (1 - math.div($notesWidthPercent,100))) * 1%; + height: 100%; + top: 0; + left: 100%; + padding: 14px 18px 14px 18px; + z-index: 1; + font-size: 18px; + line-height: 1.4; + border: 1px solid rgba( 0, 0, 0, 0.05 ); + color: #222; + background-color: #f5f5f5; + overflow: auto; + box-sizing: border-box; + text-align: left; + font-family: Helvetica, sans-serif; + -webkit-overflow-scrolling: touch; + + .notes-placeholder { + color: #ccc; + font-style: italic; + } + + &:focus { + outline: none; + } + + &:before { + content: 'Speaker notes'; + display: block; + margin-bottom: 10px; + opacity: 0.5; + } +} + + +.reveal.show-notes { + max-width: 100% - $notesWidthPercent; + overflow: visible; +} + +.reveal.show-notes .speaker-notes { + display: block; +} + +@media screen and (min-width: 1600px) { + .reveal .speaker-notes { + font-size: 20px; + } +} + +@media screen and (max-width: 1024px) { + .reveal.show-notes { + border-left: 0; + max-width: none; + max-height: 70%; + max-height: 70vh; + overflow: visible; + } + + .reveal.show-notes .speaker-notes { + top: 100%; + left: 0; + width: 100%; + height: 30vh; + border: 0; + } +} + +@media screen and (max-width: 600px) { + .reveal.show-notes { + max-height: 60%; + max-height: 60vh; + } + + .reveal.show-notes .speaker-notes { + top: 100%; + height: 40vh; + } + + .reveal .speaker-notes { + font-size: 14px; + } +} + + +/********************************************* + * JUMP-TO-SLIDE COMPONENT + *********************************************/ + + .reveal .jump-to-slide { + position: absolute; + top: 15px; + left: 15px; + z-index: 30; + font-size: 32px; + -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 ); +} + +.reveal .jump-to-slide-input { + background: transparent; + padding: 8px; + font-size: inherit; + color: currentColor; + border: 0; +} +.reveal .jump-to-slide-input::placeholder { + color: currentColor; + opacity: 0.5; +} + +.reveal.has-dark-background .jump-to-slide-input { + color: #fff; +} +.reveal.has-light-background .jump-to-slide-input { + color: #222; +} + +.reveal .jump-to-slide-input:focus { + outline: none; +} + + +/********************************************* + * ZOOM PLUGIN + *********************************************/ + +.zoomed .reveal *, +.zoomed .reveal *:before, +.zoomed .reveal *:after { + backface-visibility: visible !important; +} + +.zoomed .reveal .progress, +.zoomed .reveal .controls { + opacity: 0; +} + +.zoomed .reveal .roll span { + background: none; +} + +.zoomed .reveal .roll span:after { + visibility: hidden; +} + + +/********************************************* + * SCROLL VIEW + *********************************************/ +.reveal-viewport.loading-scroll-mode { + visibility: hidden; +} + +.reveal-viewport.reveal-scroll { + & { + margin: 0 auto; + overflow: auto; + overflow-x: hidden; + overflow-y: auto; + z-index: 1; + + --r-scrollbar-width: 7px; + --r-scrollbar-trigger-size: 5px; + --r-controls-spacing: 8px; + } + + @media screen and (max-width: 500px) { + --r-scrollbar-width: 3px; + --r-scrollbar-trigger-size: 3px; + } + + .controls, + .progress, + .playback, + .backgrounds, + .slide-number, + .speaker-notes { + display: none !important; + } + + .overlay, + .pause-overlay { + position: fixed; + } + + .reveal { + overflow: visible; + touch-action: manipulation; + } + + .slides { + position: static; + pointer-events: initial; + + left: auto; + top: auto; + width: 100% !important; + margin: 0; + padding: 0; + + overflow: visible; + display: block; + + perspective: none; + perspective-origin: 50% 50%; + } + + .scroll-page { + position: relative; + width: 100%; + height: calc(var(--page-height) + var(--page-scroll-padding)); + z-index: 1; + overflow: visible; + } + + .scroll-page-sticky { + position: sticky; + height: var(--page-height); + top: 0px; + } + + .scroll-page-content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + } + + .scroll-page section { + visibility: visible !important; + display: block !important; + position: absolute !important; + width: var(--slide-width) !important; + height: var(--slide-height) !important; + top: 50% !important; + left: 50% !important; + opacity: 1 !important; + transform: scale(var(--slide-scale)) translate(-50%, -50%) !important; + transform-style: flat !important; + transform-origin: 0 0 !important; + } + + .slide-background { + display: block !important; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: auto !important; + visibility: visible; + opacity: 1; + touch-action: manipulation; + } +} + +// Chromium +.reveal-viewport.reveal-scroll[data-scrollbar="true"]::-webkit-scrollbar, +.reveal-viewport.reveal-scroll[data-scrollbar="auto"]::-webkit-scrollbar { + display: none; +} + +// Firefox +.reveal-viewport.reveal-scroll[data-scrollbar="true"], +.reveal-viewport.reveal-scroll[data-scrollbar="auto"] { + scrollbar-width: none; +} + +.reveal.has-dark-background, +.reveal-viewport.has-dark-background { + --r-overlay-element-bg-color: 240, 240, 240; + --r-overlay-element-fg-color: 0, 0, 0; +} +.reveal.has-light-background, +.reveal-viewport.has-light-background { + --r-overlay-element-bg-color: 0, 0, 0; + --r-overlay-element-fg-color: 240, 240, 240; +} + +.reveal-viewport.reveal-scroll .scrollbar { + position: sticky; + top: 50%; + z-index: 20; + opacity: 0; + transition: all 0.3s ease; + + &.visible, + &:hover { + opacity: 1; + } + + .scrollbar-inner { + position: absolute; + width: var(--r-scrollbar-width); + height: calc(var(--viewport-height) - var(--r-controls-spacing) * 2); + right: var(--r-controls-spacing); + top: 0; + transform: translateY(-50%); + border-radius: var(--r-scrollbar-width); + z-index: 10; + } + + .scrollbar-playhead { + position: absolute; + width: var(--r-scrollbar-width); + height: var(--r-scrollbar-width); + top: 0; + left: 0; + border-radius: var(--r-scrollbar-width); + background-color: rgba(var(--r-overlay-element-bg-color), 1); + z-index: 11; + transition: background-color 0.2s ease; + } + + .scrollbar-slide { + position: absolute; + width: 100%; + background-color: rgba(var(--r-overlay-element-bg-color), 0.2); + box-shadow: 0 0 0px 1px rgba(var(--r-overlay-element-fg-color), 0.1); + border-radius: var(--r-scrollbar-width); + transition: background-color 0.2s ease; + } + + // Hit area + .scrollbar-slide:after { + content: ''; + position: absolute; + width: 200%; + height: 100%; + top: 0; + left: -50%; + background: rgba( 0, 0, 0, 0 ); + z-index: -1; + } + + .scrollbar-slide:hover, + .scrollbar-slide.active { + background-color: rgba(var(--r-overlay-element-bg-color), 0.4); + } + + .scrollbar-trigger { + position: absolute; + width: 100%; + transition: background-color 0.2s ease; + } + + .scrollbar-slide.active.has-triggers { + background-color: rgba(var(--r-overlay-element-bg-color), 0.4); + z-index: 10; + } + + .scrollbar-slide.active .scrollbar-trigger:after { + content: ''; + position: absolute; + width: var(--r-scrollbar-trigger-size); + height: var(--r-scrollbar-trigger-size); + border-radius: 20px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: rgba(var(--r-overlay-element-bg-color), 1); + transition: transform 0.2s ease, opacity 0.2s ease; + opacity: 0.4; + } + + .scrollbar-slide.active .scrollbar-trigger.active:after, + .scrollbar-slide.active .scrollbar-trigger.active ~ .scrollbar-trigger:after { + opacity: 1; + } + + .scrollbar-slide.active .scrollbar-trigger ~ .scrollbar-trigger.active:after { + transform: translate(calc( var(--r-scrollbar-width) * -2), 0); + background-color: rgba(var(--r-overlay-element-bg-color), 1); + } +} + + +/********************************************* + * PRINT STYLES + *********************************************/ + +@import 'print/pdf.scss'; +@import 'print/paper.scss'; + diff --git a/public/bash/css/theme/README.md b/public/bash/css/theme/README.md new file mode 100644 index 0000000..30916c4 --- /dev/null +++ b/public/bash/css/theme/README.md @@ -0,0 +1,21 @@ +## Dependencies + +Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment installed before proceeding: https://revealjs.com/installation/#full-setup + +## Creating a Theme + +To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled from Sass to CSS (see the [gulpfile](https://github.com/hakimel/reveal.js/blob/master/gulpfile.js)) when you run `npm run build -- css-themes`. + +Each theme file does four things in the following order: + +1. **Include [/css/theme/template/mixins.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/mixins.scss)** +Shared utility functions. + +2. **Include [/css/theme/template/settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss)** +Declares a set of custom variables that the template file (step 4) expects. Can be overridden in step 3. + +3. **Override** +This is where you override the default theme. Either by specifying variables (see [settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss) for reference) or by adding any selectors and styles you please. + +4. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)** +The template theme file which will generate final CSS output based on the currently defined variables. diff --git a/public/bash/css/theme/source/beige.scss b/public/bash/css/theme/source/beige.scss new file mode 100644 index 0000000..7598b94 --- /dev/null +++ b/public/bash/css/theme/source/beige.scss @@ -0,0 +1,44 @@ +/** + * Beige theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$mainColor: #333; +$headingColor: #333; +$headingTextShadow: none; +$backgroundColor: #f7f3de; +$linkColor: #8b743d; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: rgba(79, 64, 28, 0.99); +$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +$overlayElementBgColor: 0, 0, 0; +$overlayElementFgColor: 240, 240, 240; + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( rgba(247,242,211,1), rgba(255,255,255,1) ); +} + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/black-contrast.scss b/public/bash/css/theme/source/black-contrast.scss new file mode 100644 index 0000000..9e1a2ca --- /dev/null +++ b/public/bash/css/theme/source/black-contrast.scss @@ -0,0 +1,49 @@ +/** + * Black compact & high contrast reveal.js theme, with headers not in capitals. + * + * By Peter Kehl. Based on black.(s)css by Hakim El Hattab, http://hakim.se + * + * - Keep the source similar to black.css - for easy comparison. + * - $mainFontSize controls code blocks, too (although under some ratio). + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(./fonts/source-sans-pro/source-sans-pro.css); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #000000; + +$mainColor: #fff; +$headingColor: #fff; + +$mainFontSize: 42px; +$mainFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingFontWeight: 600; +$linkColor: #42affa; +$linkColorHover: lighten( $linkColor, 15% ); +$selectionBackgroundColor: lighten( $linkColor, 25% ); + +$heading1Size: 2.5em; +$heading2Size: 1.6em; +$heading3Size: 1.3em; +$heading4Size: 1.0em; + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#000); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/black.scss b/public/bash/css/theme/source/black.scss new file mode 100644 index 0000000..7c655c4 --- /dev/null +++ b/public/bash/css/theme/source/black.scss @@ -0,0 +1,46 @@ +/** + * Black theme for reveal.js. This is the opposite of the 'white' theme. + * + * By Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(./fonts/source-sans-pro/source-sans-pro.css); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #191919; + +$mainColor: #fff; +$headingColor: #fff; + +$mainFontSize: 42px; +$mainFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingFontWeight: 600; +$linkColor: #42affa; +$linkColorHover: lighten( $linkColor, 15% ); +$selectionBackgroundColor: rgba( $linkColor, 0.75 ); + +$heading1Size: 2.5em; +$heading2Size: 1.6em; +$heading3Size: 1.3em; +$heading4Size: 1.0em; + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#222); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/blood.scss b/public/bash/css/theme/source/blood.scss new file mode 100644 index 0000000..b5a8679 --- /dev/null +++ b/public/bash/css/theme/source/blood.scss @@ -0,0 +1,87 @@ +/** + * Blood theme for reveal.js + * Author: Walther http://github.com/Walther + * + * Designed to be used with highlight.js theme + * "monokai_sublime.css" available from + * https://github.com/isagalaev/highlight.js/ + * + * For other themes, change $codeBackground accordingly. + * + */ + + // Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + +// Include theme-specific fonts + +@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic); + +// Colors used in the theme +$blood: #a23; +$coal: #222; +$codeBackground: #23241f; + +$backgroundColor: $coal; + +// Main text +$mainFont: Ubuntu, 'sans-serif'; +$mainColor: #eee; + +// Headings +$headingFont: Ubuntu, 'sans-serif'; +$headingTextShadow: 2px 2px 2px $coal; + +// h1 shadow, borrowed humbly from +// (c) Default theme by Hakim El Hattab +$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +// Links +$linkColor: $blood; +$linkColorHover: lighten( $linkColor, 20% ); + +// Text selection +$selectionBackgroundColor: $blood; +$selectionColor: #fff; + +// Change text colors against dark slide backgrounds +@include light-bg-text-color(#222); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- + +// some overrides after theme template import + +.reveal p { + font-weight: 300; + text-shadow: 1px 1px $coal; +} + +section.has-light-background { + p, h1, h2, h3, h4 { + text-shadow: none; + } +} + +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + font-weight: 700; +} + +.reveal p code { + background-color: $codeBackground; + display: inline-block; + border-radius: 7px; +} + +.reveal small code { + vertical-align: baseline; +} \ No newline at end of file diff --git a/public/bash/css/theme/source/dracula.scss b/public/bash/css/theme/source/dracula.scss new file mode 100644 index 0000000..ae968b8 --- /dev/null +++ b/public/bash/css/theme/source/dracula.scss @@ -0,0 +1,106 @@ +/** + * Dracula Dark theme for reveal.js. + * Based on https://draculatheme.com + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +$systemFontsSansSerif: -apple-system, + BlinkMacSystemFont, + avenir next, + avenir, + segoe ui, + helvetica neue, + helvetica, + Cantarell, + Ubuntu, + roboto, + noto, + arial, + sans-serif; +$systemFontsMono: Menlo, + Consolas, + Monaco, + Liberation Mono, + Lucida Console, + monospace; + +/** + * Dracula colors by Zeno Rocha + * https://draculatheme.com/contribute + */ +html * { + color-profile: sRGB; + rendering-intent: auto; +} + +$background: #282A36; +$foreground: #F8F8F2; +$selection: #44475A; +$comment: #6272A4; +$red: #FF5555; +$orange: #FFB86C; +$yellow: #F1FA8C; +$green: #50FA7B; +$purple: #BD93F9; +$cyan: #8BE9FD; +$pink: #FF79C6; + + + +// Override theme settings (see ../template/settings.scss) +$mainColor: $foreground; +$headingColor: $purple; +$headingTextShadow: none; +$headingTextTransform: none; +$backgroundColor: $background; +$linkColor: $pink; +$linkColorHover: $cyan; +$selectionBackgroundColor: $selection; +$inlineCodeColor: $green; +$listBulletColor: $cyan; + +$mainFont: $systemFontsSansSerif; +$codeFont: "Fira Code", $systemFontsMono; + +// Change text colors against light slide backgrounds +@include light-bg-text-color($background); + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- + +// Define additional color effects based on Dracula spec +// https://spec.draculatheme.com/ +:root { + --r-bold-color: #{$orange}; + --r-italic-color: #{$yellow}; + --r-inline-code-color: #{$inlineCodeColor}; + --r-list-bullet-color: #{$listBulletColor}; +} + +.reveal { + strong, b { + color: var(--r-bold-color); + } + em, i, blockquote { + color: var(--r-italic-color); + } + code { + color: var(--r-inline-code-color); + } + // Dracula colored list bullets and numbers + ul, ol { + li::marker { + color: var(--r-list-bullet-color); + } + } +} + diff --git a/public/bash/css/theme/source/league.scss b/public/bash/css/theme/source/league.scss new file mode 100644 index 0000000..ee01258 --- /dev/null +++ b/public/bash/css/theme/source/league.scss @@ -0,0 +1,36 @@ +/** + * League theme for reveal.js. + * + * This was the default theme pre-3.0.0. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + +// Override theme settings (see ../template/settings.scss) +$headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2); +$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( rgba(28,30,32,1), rgba(85,90,95,1) ); +} + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#222); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/moon.scss b/public/bash/css/theme/source/moon.scss new file mode 100644 index 0000000..59ef0a9 --- /dev/null +++ b/public/bash/css/theme/source/moon.scss @@ -0,0 +1,54 @@ +/** + * Solarized Dark theme for reveal.js. + * Author: Achim Staebler + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + +/** + * Solarized colors by Ethan Schoonover + */ + +// Solarized colors +$base03: #002b36; +$base02: #073642; +$base01: #586e75; +$base00: #657b83; +$base0: #839496; +$base1: #93a1a1; +$base2: #eee8d5; +$base3: #fdf6e3; +$yellow: #b58900; +$orange: #cb4b16; +$red: #dc322f; +$magenta: #d33682; +$violet: #6c71c4; +$blue: #268bd2; +$cyan: #2aa198; +$green: #859900; + +// Override theme settings (see ../template/settings.scss) +$mainColor: $base1; +$headingColor: $base2; +$headingTextShadow: none; +$backgroundColor: $base03; +$linkColor: $blue; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: $magenta; + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#222); + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/night.scss b/public/bash/css/theme/source/night.scss new file mode 100644 index 0000000..98a2062 --- /dev/null +++ b/public/bash/css/theme/source/night.scss @@ -0,0 +1,37 @@ +/** + * Black theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=Montserrat:700); +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #111; + +$mainFont: 'Open Sans', sans-serif; +$linkColor: #e7ad52; +$linkColorHover: lighten( $linkColor, 20% ); +$headingFont: 'Montserrat', Impact, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: -0.03em; +$headingTextTransform: none; +$selectionBackgroundColor: #e7ad52; + +// Change text colors against light slide backgrounds +@include light-bg-text-color(#222); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/public/bash/css/theme/source/serif.scss b/public/bash/css/theme/source/serif.scss new file mode 100644 index 0000000..babec4d --- /dev/null +++ b/public/bash/css/theme/source/serif.scss @@ -0,0 +1,41 @@ +/** + * A simple theme for reveal.js presentations, similar + * to the default theme. The accent color is brown. + * + * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; +$mainColor: #000; +$headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; +$headingColor: #383D3D; +$headingTextShadow: none; +$headingTextTransform: none; +$backgroundColor: #F0F1EB; +$linkColor: #51483D; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: #26351C; + +$overlayElementBgColor: 0, 0, 0; +$overlayElementFgColor: 240, 240, 240; + +.reveal a { + line-height: 1.3em; +} + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/simple.scss b/public/bash/css/theme/source/simple.scss new file mode 100644 index 0000000..51a21af --- /dev/null +++ b/public/bash/css/theme/source/simple.scss @@ -0,0 +1,43 @@ +/** + * A simple theme for reveal.js presentations, similar + * to the default theme. The accent color is darkblue. + * + * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed. + * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Lato', sans-serif; +$mainColor: #000; +$headingFont: 'News Cycle', Impact, sans-serif; +$headingColor: #000; +$headingTextShadow: none; +$headingTextTransform: none; +$backgroundColor: #fff; +$linkColor: #00008B; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: rgba(0, 0, 0, 0.99); + +$overlayElementBgColor: 0, 0, 0; +$overlayElementFgColor: 240, 240, 240; + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/public/bash/css/theme/source/sky.scss b/public/bash/css/theme/source/sky.scss new file mode 100644 index 0000000..457e9e5 --- /dev/null +++ b/public/bash/css/theme/source/sky.scss @@ -0,0 +1,52 @@ +/** + * Sky theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700); + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Open Sans', sans-serif; +$mainColor: #333; +$headingFont: 'Quicksand', sans-serif; +$headingColor: #333; +$headingLetterSpacing: -0.08em; +$headingTextShadow: none; +$backgroundColor: #f7fbfc; +$linkColor: #3b759e; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: #134674; + +$overlayElementBgColor: 0, 0, 0; +$overlayElementFgColor: 240, 240, 240; + +// Fix links so they are not cut off +.reveal a { + line-height: 1.3em; +} + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( #add9e4, #f7fbfc ); +} + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/solarized.scss b/public/bash/css/theme/source/solarized.scss new file mode 100644 index 0000000..f325345 --- /dev/null +++ b/public/bash/css/theme/source/solarized.scss @@ -0,0 +1,66 @@ +/** + * Solarized Light theme for reveal.js. + * Author: Achim Staebler + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + + +/** + * Solarized colors by Ethan Schoonover + */ +html * { + color-profile: sRGB; + rendering-intent: auto; +} + +// Solarized colors +$base03: #002b36; +$base02: #073642; +$base01: #586e75; +$base00: #657b83; +$base0: #839496; +$base1: #93a1a1; +$base2: #eee8d5; +$base3: #fdf6e3; +$yellow: #b58900; +$orange: #cb4b16; +$red: #dc322f; +$magenta: #d33682; +$violet: #6c71c4; +$blue: #268bd2; +$cyan: #2aa198; +$green: #859900; + +// Override theme settings (see ../template/settings.scss) +$mainColor: $base00; +$headingColor: $base01; +$headingTextShadow: none; +$backgroundColor: $base3; +$linkColor: $blue; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: $magenta; + +$overlayElementBgColor: 0, 0, 0; +$overlayElementFgColor: 240, 240, 240; + +// Background generator +// @mixin bodyBackground() { +// @include radial-gradient( rgba($base3,1), rgba(lighten($base3, 20%),1) ); +// } + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/white-contrast.scss b/public/bash/css/theme/source/white-contrast.scss new file mode 100644 index 0000000..e22007e --- /dev/null +++ b/public/bash/css/theme/source/white-contrast.scss @@ -0,0 +1,52 @@ +/** + * White compact & high contrast reveal.js theme, with headers not in capitals. + * + * By Peter Kehl. Based on white.(s)css by Hakim El Hattab, http://hakim.se + * + * - Keep the source similar to black.css - for easy comparison. + * - $mainFontSize controls code blocks, too (although under some ratio). + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(./fonts/source-sans-pro/source-sans-pro.css); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #fff; + +$mainColor: #000; +$headingColor: #000; + +$mainFontSize: 42px; +$mainFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingFontWeight: 600; +$linkColor: #2a76dd; +$linkColorHover: lighten( $linkColor, 15% ); +$selectionBackgroundColor: lighten( $linkColor, 25% ); + +$heading1Size: 2.5em; +$heading2Size: 1.6em; +$heading3Size: 1.3em; +$heading4Size: 1.0em; + +$overlayElementBgColor: 0, 0, 0; +$overlayElementFgColor: 240, 240, 240; + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/source/white.scss b/public/bash/css/theme/source/white.scss new file mode 100644 index 0000000..a2b1292 --- /dev/null +++ b/public/bash/css/theme/source/white.scss @@ -0,0 +1,49 @@ +/** + * White theme for reveal.js. This is the opposite of the 'black' theme. + * + * By Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(./fonts/source-sans-pro/source-sans-pro.css); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #fff; + +$mainColor: #222; +$headingColor: #222; + +$mainFontSize: 42px; +$mainFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingFontWeight: 600; +$linkColor: #2a76dd; +$linkColorHover: lighten( $linkColor, 15% ); +$selectionBackgroundColor: lighten( $linkColor, 25% ); + +$heading1Size: 2.5em; +$heading2Size: 1.6em; +$heading3Size: 1.3em; +$heading4Size: 1.0em; + +$overlayElementBgColor: 0, 0, 0; +$overlayElementFgColor: 240, 240, 240; + +// Change text colors against dark slide backgrounds +@include dark-bg-text-color(#fff); + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/public/bash/css/theme/template/exposer.scss b/public/bash/css/theme/template/exposer.scss new file mode 100644 index 0000000..2e9288d --- /dev/null +++ b/public/bash/css/theme/template/exposer.scss @@ -0,0 +1,30 @@ +// Exposes theme's variables for easy re-use in CSS for plugin authors + +:root { + --r-background-color: #{$backgroundColor}; + --r-main-font: #{$mainFont}; + --r-main-font-size: #{$mainFontSize}; + --r-main-color: #{$mainColor}; + --r-block-margin: #{$blockMargin}; + --r-heading-margin: #{$headingMargin}; + --r-heading-font: #{$headingFont}; + --r-heading-color: #{$headingColor}; + --r-heading-line-height: #{$headingLineHeight}; + --r-heading-letter-spacing: #{$headingLetterSpacing}; + --r-heading-text-transform: #{$headingTextTransform}; + --r-heading-text-shadow: #{$headingTextShadow}; + --r-heading-font-weight: #{$headingFontWeight}; + --r-heading1-text-shadow: #{$heading1TextShadow}; + --r-heading1-size: #{$heading1Size}; + --r-heading2-size: #{$heading2Size}; + --r-heading3-size: #{$heading3Size}; + --r-heading4-size: #{$heading4Size}; + --r-code-font: #{$codeFont}; + --r-link-color: #{$linkColor}; + --r-link-color-dark: #{darken($linkColor , 15% )}; + --r-link-color-hover: #{$linkColorHover}; + --r-selection-background-color: #{$selectionBackgroundColor}; + --r-selection-color: #{$selectionColor}; + --r-overlay-element-bg-color: #{$overlayElementBgColor}; + --r-overlay-element-fg-color: #{$overlayElementFgColor}; +} diff --git a/public/bash/css/theme/template/mixins.scss b/public/bash/css/theme/template/mixins.scss new file mode 100644 index 0000000..17a3db5 --- /dev/null +++ b/public/bash/css/theme/template/mixins.scss @@ -0,0 +1,45 @@ +@mixin vertical-gradient( $top, $bottom ) { + background: $top; + background: -moz-linear-gradient( top, $top 0%, $bottom 100% ); + background: -webkit-gradient( linear, left top, left bottom, color-stop(0%,$top), color-stop(100%,$bottom) ); + background: -webkit-linear-gradient( top, $top 0%, $bottom 100% ); + background: -o-linear-gradient( top, $top 0%, $bottom 100% ); + background: -ms-linear-gradient( top, $top 0%, $bottom 100% ); + background: linear-gradient( top, $top 0%, $bottom 100% ); +} + +@mixin horizontal-gradient( $top, $bottom ) { + background: $top; + background: -moz-linear-gradient( left, $top 0%, $bottom 100% ); + background: -webkit-gradient( linear, left top, right top, color-stop(0%,$top), color-stop(100%,$bottom) ); + background: -webkit-linear-gradient( left, $top 0%, $bottom 100% ); + background: -o-linear-gradient( left, $top 0%, $bottom 100% ); + background: -ms-linear-gradient( left, $top 0%, $bottom 100% ); + background: linear-gradient( left, $top 0%, $bottom 100% ); +} + +@mixin radial-gradient( $outer, $inner, $type: circle ) { + background: $outer; + background: -moz-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -webkit-gradient( radial, center center, 0px, center center, 100%, color-stop(0%,$inner), color-stop(100%,$outer) ); + background: -webkit-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -o-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -ms-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: radial-gradient( center, $type cover, $inner 0%, $outer 100% ); +} + +@mixin light-bg-text-color( $color ) { + section.has-light-background { + &, h1, h2, h3, h4, h5, h6 { + color: $color; + } + } +} + +@mixin dark-bg-text-color( $color ) { + section.has-dark-background { + &, h1, h2, h3, h4, h5, h6 { + color: $color; + } + } +} \ No newline at end of file diff --git a/public/bash/css/theme/template/settings.scss b/public/bash/css/theme/template/settings.scss new file mode 100644 index 0000000..3d54ac8 --- /dev/null +++ b/public/bash/css/theme/template/settings.scss @@ -0,0 +1,50 @@ +// Base settings for all themes that can optionally be +// overridden by the super-theme + +// Background of the presentation +$backgroundColor: #2b2b2b; + +// Primary/body text +$mainFont: 'Lato', sans-serif; +$mainFontSize: 40px; +$mainColor: #eee; + +// Vertical spacing between blocks of text +$blockMargin: 20px; + +// Headings +$headingMargin: 0 0 $blockMargin 0; +$headingFont: 'League Gothic', Impact, sans-serif; +$headingColor: #eee; +$headingLineHeight: 1.2; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingTextShadow: none; +$headingFontWeight: normal; +$heading1TextShadow: $headingTextShadow; + +$heading1Size: 3.77em; +$heading2Size: 2.11em; +$heading3Size: 1.55em; +$heading4Size: 1.00em; + +$codeFont: monospace; + +// Links and actions +$linkColor: #13DAEC; +$linkColorHover: lighten( $linkColor, 20% ); + +// Text selection +$selectionBackgroundColor: #FF5E99; +$selectionColor: #fff; + +// Colors used for UI elements that are overlaid on top of +// the presentation +$overlayElementBgColor: 240, 240, 240; +$overlayElementFgColor: 0, 0, 0; + +// Generates the presentation background, can be overridden +// to return a background image or gradient +@mixin bodyBackground() { + background: $backgroundColor; +} diff --git a/public/bash/css/theme/template/theme.scss b/public/bash/css/theme/template/theme.scss new file mode 100644 index 0000000..bc377d3 --- /dev/null +++ b/public/bash/css/theme/template/theme.scss @@ -0,0 +1,331 @@ +// Base theme template for reveal.js + +/********************************************* + * GLOBAL STYLES + *********************************************/ + +@import "./exposer"; + +.reveal-viewport { + @include bodyBackground(); + background-color: var(--r-background-color); +} + +.reveal { + font-family: var(--r-main-font); + font-size: var(--r-main-font-size); + font-weight: normal; + color: var(--r-main-color); +} + +.reveal ::selection { + color: var(--r-selection-color); + background: var(--r-selection-background-color); + text-shadow: none; +} + +.reveal ::-moz-selection { + color: var(--r-selection-color); + background: var(--r-selection-background-color); + text-shadow: none; +} + +.reveal .slides section, +.reveal .slides section>section { + line-height: 1.3; + font-weight: inherit; +} + +/********************************************* + * HEADERS + *********************************************/ + +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + margin: var(--r-heading-margin); + color: var(--r-heading-color); + + font-family: var(--r-heading-font); + font-weight: var(--r-heading-font-weight); + line-height: var(--r-heading-line-height); + letter-spacing: var(--r-heading-letter-spacing); + + text-transform: var(--r-heading-text-transform); + text-shadow: var(--r-heading-text-shadow); + + word-wrap: break-word; +} + +.reveal h1 {font-size: var(--r-heading1-size); } +.reveal h2 {font-size: var(--r-heading2-size); } +.reveal h3 {font-size: var(--r-heading3-size); } +.reveal h4 {font-size: var(--r-heading4-size); } + +.reveal h1 { + text-shadow: var(--r-heading1-text-shadow); +} + + +/********************************************* + * OTHER + *********************************************/ + +.reveal p { + margin: var(--r-block-margin) 0; + line-height: 1.3; +} + +/* Remove trailing margins after titles */ +.reveal h1:last-child, +.reveal h2:last-child, +.reveal h3:last-child, +.reveal h4:last-child, +.reveal h5:last-child, +.reveal h6:last-child { + margin-bottom: 0; +} + +/* Ensure certain elements are never larger than the slide itself */ +.reveal img, +.reveal video, +.reveal iframe { + max-width: 95%; + max-height: 95%; +} +.reveal strong, +.reveal b { + font-weight: bold; +} + +.reveal em { + font-style: italic; +} + +.reveal ol, +.reveal dl, +.reveal ul { + display: inline-block; + + text-align: left; + margin: 0 0 0 1em; +} + +.reveal ol { + list-style-type: decimal; +} + +.reveal ul { + list-style-type: disc; +} + +.reveal ul ul { + list-style-type: square; +} + +.reveal ul ul ul { + list-style-type: circle; +} + +.reveal ul ul, +.reveal ul ol, +.reveal ol ol, +.reveal ol ul { + display: block; + margin-left: 40px; +} + +.reveal dt { + font-weight: bold; +} + +.reveal dd { + margin-left: 40px; +} + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: var(--r-block-margin) auto; + padding: 5px; + + font-style: italic; + background: rgba(255, 255, 255, 0.05); + box-shadow: 0px 0px 2px rgba(0,0,0,0.2); +} + .reveal blockquote p:first-child, + .reveal blockquote p:last-child { + display: inline-block; + } + +.reveal q { + font-style: italic; +} + +.reveal pre { + display: block; + position: relative; + width: 90%; + margin: var(--r-block-margin) auto; + + text-align: left; + font-size: 0.55em; + font-family: var(--r-code-font); + line-height: 1.2em; + + word-wrap: break-word; + + box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); +} + +.reveal code { + font-family: var(--r-code-font); + text-transform: none; + tab-size: 2; +} + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; +} + +.reveal .code-wrapper { + white-space: normal; +} + +.reveal .code-wrapper code { + white-space: pre; +} + +.reveal table { + margin: auto; + border-collapse: collapse; + border-spacing: 0; +} + +.reveal table th { + font-weight: bold; +} + +.reveal table th, +.reveal table td { + text-align: left; + padding: 0.2em 0.5em 0.2em 0.5em; + border-bottom: 1px solid; +} + +.reveal table th[align="center"], +.reveal table td[align="center"] { + text-align: center; +} + +.reveal table th[align="right"], +.reveal table td[align="right"] { + text-align: right; +} + +.reveal table tbody tr:last-child th, +.reveal table tbody tr:last-child td { + border-bottom: none; +} + +.reveal sup { + vertical-align: super; + font-size: smaller; +} +.reveal sub { + vertical-align: sub; + font-size: smaller; +} + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; +} + +.reveal small * { + vertical-align: top; +} + +.reveal img { + margin: var(--r-block-margin) 0; +} + + +/********************************************* + * LINKS + *********************************************/ + +.reveal a { + color: var(--r-link-color); + text-decoration: none; + transition: color .15s ease; +} + .reveal a:hover { + color: var(--r-link-color-hover); + text-shadow: none; + border: none; + } + +.reveal .roll span:after { + color: #fff; + // background: darken( var(--r-link-color), 15% ); + background: var(--r-link-color-dark); + +} + + +/********************************************* + * Frame helper + *********************************************/ + +.reveal .r-frame { + border: 4px solid var(--r-main-color); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); +} + +.reveal a .r-frame { + transition: all .15s linear; +} + +.reveal a:hover .r-frame { + border-color: var(--r-link-color); + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); +} + + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ + +.reveal .controls { + color: var(--r-link-color); +} + + +/********************************************* + * PROGRESS BAR + *********************************************/ + +.reveal .progress { + background: rgba(0,0,0,0.2); + color: var(--r-link-color); +} + +/********************************************* + * PRINT BACKGROUND + *********************************************/ + @media print { + .backgrounds { + background-color: var(--r-background-color); + } +} diff --git a/public/bash/gulpfile.js b/public/bash/gulpfile.js new file mode 100644 index 0000000..003616e --- /dev/null +++ b/public/bash/gulpfile.js @@ -0,0 +1,321 @@ +const pkg = require('./package.json') +const glob = require('glob') +const yargs = require('yargs') +const through = require('through2'); +const qunit = require('node-qunit-puppeteer') + +const {rollup} = require('rollup') +const terser = require('@rollup/plugin-terser') +const babel = require('@rollup/plugin-babel').default +const commonjs = require('@rollup/plugin-commonjs') +const resolve = require('@rollup/plugin-node-resolve').default +const sass = require('sass') + +const gulp = require('gulp') +const tap = require('gulp-tap') +const zip = require('gulp-zip') +const header = require('gulp-header') +const eslint = require('gulp-eslint') +const minify = require('gulp-clean-css') +const connect = require('gulp-connect') +const autoprefixer = require('gulp-autoprefixer') + +const root = yargs.argv.root || '.' +const port = yargs.argv.port || 8000 +const host = yargs.argv.host || 'localhost' + +const banner = `/*! +* reveal.js ${pkg.version} +* ${pkg.homepage} +* MIT licensed +* +* Copyright (C) 2011-2024 Hakim El Hattab, https://hakim.se +*/\n` + +// Prevents warnings from opening too many test pages +process.setMaxListeners(20); + +const babelConfig = { + babelHelpers: 'bundled', + ignore: ['node_modules'], + compact: false, + extensions: ['.js', '.html'], + plugins: [ + 'transform-html-import-to-string' + ], + presets: [[ + '@babel/preset-env', + { + corejs: 3, + useBuiltIns: 'usage', + modules: false + } + ]] +}; + +// Our ES module bundle only targets newer browsers with +// module support. Browsers are targeted explicitly instead +// of using the "esmodule: true" target since that leads to +// polyfilling older browsers and a larger bundle. +const babelConfigESM = JSON.parse( JSON.stringify( babelConfig ) ); +babelConfigESM.presets[0][1].targets = { browsers: [ + 'last 2 Chrome versions', + 'last 2 Safari versions', + 'last 2 iOS versions', + 'last 2 Firefox versions', + 'last 2 Edge versions', +] }; + +let cache = {}; + +// Creates a bundle with broad browser support, exposed +// as UMD +gulp.task('js-es5', () => { + return rollup({ + cache: cache.umd, + input: 'js/index.js', + plugins: [ + resolve(), + commonjs(), + babel( babelConfig ), + terser() + ] + }).then( bundle => { + cache.umd = bundle.cache; + return bundle.write({ + name: 'Reveal', + file: './dist/reveal.js', + format: 'umd', + banner: banner, + sourcemap: true + }); + }); +}) + +// Creates an ES module bundle +gulp.task('js-es6', () => { + return rollup({ + cache: cache.esm, + input: 'js/index.js', + plugins: [ + resolve(), + commonjs(), + babel( babelConfigESM ), + terser() + ] + }).then( bundle => { + cache.esm = bundle.cache; + return bundle.write({ + file: './dist/reveal.esm.js', + format: 'es', + banner: banner, + sourcemap: true + }); + }); +}) +gulp.task('js', gulp.parallel('js-es5', 'js-es6')); + +// Creates a UMD and ES module bundle for each of our +// built-in plugins +gulp.task('plugins', () => { + return Promise.all([ + { name: 'RevealHighlight', input: './plugin/highlight/plugin.js', output: './plugin/highlight/highlight' }, + { name: 'RevealMarkdown', input: './plugin/markdown/plugin.js', output: './plugin/markdown/markdown' }, + { name: 'RevealSearch', input: './plugin/search/plugin.js', output: './plugin/search/search' }, + { name: 'RevealNotes', input: './plugin/notes/plugin.js', output: './plugin/notes/notes' }, + { name: 'RevealZoom', input: './plugin/zoom/plugin.js', output: './plugin/zoom/zoom' }, + { name: 'RevealMath', input: './plugin/math/plugin.js', output: './plugin/math/math' }, + ].map( plugin => { + return rollup({ + cache: cache[plugin.input], + input: plugin.input, + plugins: [ + resolve(), + commonjs(), + babel({ + ...babelConfig, + ignore: [/node_modules\/(?!(highlight\.js|marked)\/).*/], + }), + terser() + ] + }).then( bundle => { + cache[plugin.input] = bundle.cache; + bundle.write({ + file: plugin.output + '.esm.js', + name: plugin.name, + format: 'es' + }) + + bundle.write({ + file: plugin.output + '.js', + name: plugin.name, + format: 'umd' + }) + }); + } )); +}) + +// a custom pipeable step to transform Sass to CSS +function compileSass() { + return through.obj( ( vinylFile, encoding, callback ) => { + const transformedFile = vinylFile.clone(); + + sass.render({ + data: transformedFile.contents.toString(), + file: transformedFile.path, + }, ( err, result ) => { + if( err ) { + callback(err); + } + else { + transformedFile.extname = '.css'; + transformedFile.contents = result.css; + callback( null, transformedFile ); + } + }); + }); +} + +gulp.task('css-themes', () => gulp.src(['./css/theme/source/*.{sass,scss}']) + .pipe(compileSass()) + .pipe(gulp.dest('./dist/theme'))) + +gulp.task('css-core', () => gulp.src(['css/reveal.scss']) + .pipe(compileSass()) + .pipe(autoprefixer()) + .pipe(minify({compatibility: 'ie9'})) + .pipe(header(banner)) + .pipe(gulp.dest('./dist'))) + +gulp.task('css', gulp.parallel('css-themes', 'css-core')) + +gulp.task('qunit', () => { + + let serverConfig = { + root, + port: 8009, + host: 'localhost', + name: 'test-server' + } + + let server = connect.server( serverConfig ) + + let testFiles = glob.sync('test/*.html' ) + + let totalTests = 0; + let failingTests = 0; + + let tests = Promise.all( testFiles.map( filename => { + return new Promise( ( resolve, reject ) => { + qunit.runQunitPuppeteer({ + targetUrl: `http://${serverConfig.host}:${serverConfig.port}/${filename}`, + timeout: 20000, + redirectConsole: false, + puppeteerArgs: ['--allow-file-access-from-files'] + }) + .then(result => { + if( result.stats.failed > 0 ) { + console.log(`${'!'} ${filename} [${result.stats.passed}/${result.stats.total}] in ${result.stats.runtime}ms`.red); + // qunit.printResultSummary(result, console); + qunit.printFailedTests(result, console); + } + else { + console.log(`${'✔'} ${filename} [${result.stats.passed}/${result.stats.total}] in ${result.stats.runtime}ms`.green); + } + + totalTests += result.stats.total; + failingTests += result.stats.failed; + + resolve(); + }) + .catch(error => { + console.error(error); + reject(); + }); + } ) + } ) ); + + return new Promise( ( resolve, reject ) => { + + tests.then( () => { + if( failingTests > 0 ) { + reject( new Error(`${failingTests}/${totalTests} tests failed`.red) ); + } + else { + console.log(`${'✔'} Passed ${totalTests} tests`.green.bold); + resolve(); + } + } ) + .catch( () => { + reject(); + } ) + .finally( () => { + server.close(); + } ); + + } ); +} ) + +gulp.task('eslint', () => gulp.src(['./js/**', 'gulpfile.js']) + .pipe(eslint()) + .pipe(eslint.format())) + +gulp.task('test', gulp.series( 'eslint', 'qunit' )) + +gulp.task('default', gulp.series(gulp.parallel('js', 'css', 'plugins'), 'test')) + +gulp.task('build', gulp.parallel('js', 'css', 'plugins')) + +gulp.task('package', gulp.series(() => + + gulp.src( + [ + './index.html', + './dist/**', + './lib/**', + './images/**', + './plugin/**', + './**/*.md' + ], + { base: './' } + ) + .pipe(zip('reveal-js-presentation.zip')).pipe(gulp.dest('./')) + +)) + +gulp.task('reload', () => gulp.src(['index.html']) + .pipe(connect.reload())); + +gulp.task('serve', () => { + + connect.server({ + root: root, + port: port, + host: host, + livereload: true + }) + + const slidesRoot = root.endsWith('/') ? root : root + '/' + gulp.watch([ + slidesRoot + '**/*.html', + slidesRoot + '**/*.md', + `!${slidesRoot}**/node_modules/**`, // ignore node_modules + ], gulp.series('reload')) + + gulp.watch(['js/**'], gulp.series('js', 'reload', 'eslint')) + + gulp.watch(['plugin/**/plugin.js', 'plugin/**/*.html'], gulp.series('plugins', 'reload')) + + gulp.watch([ + 'css/theme/source/**/*.{sass,scss}', + 'css/theme/template/*.{sass,scss}', + ], gulp.series('css-themes', 'reload')) + + gulp.watch([ + 'css/*.scss', + 'css/print/*.{sass,scss,css}' + ], gulp.series('css-core', 'reload')) + + gulp.watch(['test/*.html'], gulp.series('test')) + +}) diff --git a/public/bash/index.html b/public/bash/index.html new file mode 100644 index 0000000..59cf3da --- /dev/null +++ b/public/bash/index.html @@ -0,0 +1,1461 @@ + + + + + + + reveal.js + + + + + + + + + + +

+
+
+

+ IEEE Bash Scripting +

+ +

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

Compiled vs Interpreted Example

+
+
+

program.c

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ 
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$
+
+
+
+ +
+

Compiled vs Interpreted Example

+
+
+

program.c

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ gcc program.c -o program
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$
+
+
+
+ +
+

Compiled vs Interpreted Example

+
+
+

program.c program

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ gcc program.c -o program
+$ 
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$ 
+
+
+
+ +
+

Compiled vs Interpreted Example

+
+
+

program.c program

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ gcc program.c -o program
+$ ./program
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$ 
+
+
+
+ +
+

Compiled vs Interpreted Example

+
+
+

program.c program

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ gcc program.c -o program
+$ ./program
+The answer to life, the universe, and everything is 42
+$
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$ 
+
+
+
+ +
+

Compiled vs Interpreted Example

+
+
+

program.c program

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ gcc program.c -o program
+$ ./program
+The answer to life, the universe, and everything is 42
+$
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$ python program.py
+
+
+
+ +
+

Compiled vs Interpreted Example

+
+
+

program.c program

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ gcc program.c -o program
+$ ./program
+The answer to life, the universe, and everything is 42
+$
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$ python program.py
+                
+
+
+
+ +
+

Compiled vs Interpreted Example

+
+
+

program.c program

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ gcc program.c -o program
+$ ./program
+The answer to life, the universe, and everything is 42
+$
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$ python program.py
+The answer to life, the universe, and everything: 42
+                
+
+
+
+ +
+

Compiled vs Interpreted Example

+
+
+

program.c program

+
#include <stdio.h>
+int main() {
+  int a = 36;
+  int b = 6;
+  printf("The answer to life, the universe,\
+  and everything: %d\n", a+b);
+  return 0;
+}
+                
+
$ gcc program.c -o program
+$ ./program
+The answer to life, the universe, and everything is 42
+$
+ +
+
+

program.py

+
a = 36;
+b = 6;
+print("The answer to life, the universe,\
+ and everything: {}".format(a+b))
+                
+
$ python program.py
+The answer to life, the universe, and everything: 42
+$
+
+
+
+ +
+ + +
+
+

Python Shell

+
$ python
+
+
+

Python Shell

+
$ python
+>>>
+          
+
+
+

Python Shell

+
$ python
+>>> a = 36
+          
+
+
+

Python Shell

+
$ python
+>>> a = 36
+>>>
+          
+
+
+

Python Shell

+
$ python
+>>> a = 36
+>>> b = 6
+          
+
+
+

Python Shell

+
$ python
+>>> a = 36
+>>> b = 6
+>>>
+          
+
+
+

Python Shell

+
$ python
+>>> a = 36
+>>> b = 6
+>>> print("The answer to life, the universe, and everything: {}".format(a+b))
+          
+
+
+

Python Shell

+
$ python
+>>> a = 36
+>>> b = 6
+>>> print("The answer to life, the universe, and everything: {}".format(a+b))
+The answer to life, the universe, and everything: 42
+>>>
+          
+
+
+

Python Shell

+
$ python
+>>> a = 36
+>>> b = 6
+>>> print("The answer to life, the universe, and everything: {}".format(a+b))
+The answer to life, the universe, and everything: 42
+>>> a+b
+          
+
+
+

Python Shell

+
$ python
+>>> a = 36
+>>> b = 6
+>>> print("The answer to life, the universe, and everything: {}".format(a+b))
+The answer to life, the universe, and everything: 42
+>>> a+b
+42
+>>>
+          
+
+
+ + + + + + +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

Shells

+
MacOS
+
    +
  • zsh
  • +
  • bash
  • +
+
+
+

Shells

+
Windows
+
    +
  • Command Prompt
  • +
  • Windows PowerShell
  • +
+
+
+

Shells

+
Linux
+
    +
  • bash
  • +
  • dash
  • +
  • zsh
  • +
  • ksh
  • +
+

Unix systems can do

cat /etc/shells

+
+
+ + +
+

POSIX IEEE 1003.1 (2017)

+ +
+ +
+

Most POSIX Compliant Shell

+
+
+
Yash
+ +
+ + + +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + + + +
+ +
+ +
+
+

Control Logic

+

If Statement:

+
if COMMAND; then
+  # Insert more commands here
+fi
+
+
+

Control Logic

+

If Statement:

+
if COMMAND; then
+  # Insert more commands here
+fi
+
+if COMMAND; then
+  # Insert more commands here
+else
+  # Do otherwise
+fi
+
+
+

Control Logic

+

If Statement:

+
if COMMAND; then
+  # Insert more commands here
+fi
+
+if COMMAND; then
+  # Insert more commands here
+else
+  # Do otherwise
+fi
+
+if [[ 2 -eq 2 ]]; then
+  # Insert more commands here
+else
+  # Do otherwise
+fi
+
+
+

Control Logic

+

And and Or:

+
if [[ "$STRING1" == "$STRING2" && "$STRING1" == "$STRING3" ]]; then
+  printf "%s is equal to both strings" "$STRING1"
+fi
+
+
+

Control Logic

+

And and Or:

+
if [[ "$STRING1" == "$STRING2" || "$STRING1" == "$STRING3" ]]; then
+  printf "%s is equal to either string" "$STRING1"
+fi
+
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+

Writing a Bash Script

+
$ notepad++ script.sh
+
#!/bin/bash
+
+
+

Writing a Bash Script

+
$ notepad++ script.sh
+
#!/usr/bin/env bash
+
+
+

Writing a Bash Script

+
$ notepad++ script.sh
+
#!/usr/bin/env bash
+# Comment1: Today is a good day
+
+echo "Hi there"
+VAR1="21"
+...
+
+
+

Writing a Bash Script

+
$ notepad++ script.sh
+$ bash script.sh
+Hi there
+...
+$
+
#!/usr/bin/env bash
+# Comment1: Today is a good day
+
+echo "Hi there"
+VAR1="21"
+...
+
+
+

Writing a Bash Script

+
$ notepad++ script.sh
+$ chmod +x script.sh
+$ ./script.sh
+Hi there
+...
+$
+
#!/usr/bin/env bash
+# Comment1: Today is a good day
+
+echo "Hi there"
+VAR1="21"
+...
+
+
+ +
+

Scripts

+
#!/bin/bash --
+
+
+control='ok'
+
+adddir() {
+  [[ -d $1 ]] || mkdir $1;
+}
+
+add_class() {
+
+  # make the directories for seperate classes
+  adddir Material/$1 && ln -sL ../../Material/$1 Classes/$1/Material
+  adddir Homework/$1 && ln -sL ../../Homework/$1 Classes/$1/Homework
+  adddir Textbooks/$1 && ln -sL ../../Textbooks/$1 Classes/$1/Textbooks
+
+
+  if [[ -f Material/$1/syllabus.pdf ]] then
+    # a little scuffed but looks for regex assuming only 1 will meet
+    ln -sL ../../Material/*yllabus*.pdf Material/$1/syllabus.pdf
+  fi
+}
+
+add_textbook() {
+  book=$(basename $1)
+  class=''
+
+  # Check that Classes is not empty
+  if [[ ! -d Classes/ ]] || [[ ! $(ls Classes/) ]]; then
+    printf 'You are missing some Classes to setup\n'
+    printf 'Please add that first\n'
+    exit
+  fi
+
+  # choose class
+  printf 'Choose a class: \n'
+  printf '     %s\n' $(ls -d Classes/*/ | cut -d \/ -f2) #, funny this prints like a loop for every element of these
+  printf ' : '
+  read -r class
+  if [[ ! -d Classes/$class ]]; then
+    printf 'That is not a class!\n'
+    printf 'Exiting...\n'
+    exit 1;
+  fi
+
+
+  mv -i $1 $HOME/Documents/School/Textbooks/
+  ln -s $HOME/Documents/School/Textbooks/${book} $(pwd -P)/Textbooks/$class/
+}
+
+usage() {
+  printf '%s:
+
+  Usage: %s [-c] [-h] [-t]
+
+  Options:
+    -c    Add a class
+    -h    Show help (this message)
+    -t    Add a textbook. Takes in a textbook, moves to ~/Documents/School/Textbooks
+          and then creates a soft link in the classes Textbook directory.
+          %s -t /path/to/textbook 
+
+' $0 $0 $0
+  exit 1
+}
+
+
+# check you are in the right place
+if [[ $(basename $(dirname $(pwd))) != 'School' ]]; then
+  printf 'You are not in the a Sem/Quarter directory!'
+  usage
+fi
+
+while getopts ":hct:" arg; do
+  case "${arg}" in
+    c) 
+      control=''
+      ;;
+    t) 
+      # give a way to read the next argument
+      if [[ -z ${OPTARG} ]]; then
+        usage
+      fi 
+      add_textbook ${OPTARG}
+      exit 0;
+      ;;
+    h) 
+      usage
+      ;;
+    *)
+      usage
+      ;;
+  esac
+done
+
+# Need to choose classes
+if [[ ! -d Classes/ ]] || [[ $control != 'ok' ]]; then
+  # add the directory if not existent
+  adddir Classes
+
+  # add classes with a prompt
+  printf 'Set a class %s, bro: ' $(whoami)
+  read -r control
+  adddir Classes/$control
+
+  while [[ $control != 'ok' ]]; do
+    printf 'Add another class or say "ok" to finish [ok]: ' 
+    # if read then overwrite control
+    read -r control
+    [[ $control != 'ok' ]] && adddir Classes/$control  
+  done
+
+else
+  printf 'Classes/ already exists. Perhaps you meant to use [-c] flag.\n'
+  usage
+fi
+
+
+# Add the dirs if they are not there yet
+adddir Material
+adddir Homework
+adddir Textbooks
+
+for i in $(ls -d Classes/*/ | cut -d \/ -f2); do
+
+  # check if class hasn't been edited
+  if [[ ! $(ls Classes/$i/) ]]; then
+    printf 'Adding class %s\n' $i
+    add_class $i
+  fi
+
+done
+
+printf 'done'
+
+ +
+
https://devhints.io/bash
+

+ - functions, associative arrays, string substition, etc. + - Look at a good cheatsheet +

+
+ + + +
+

Simple Info

+
#!/bin/bash
+KERNEL="$(uname -r)"
+MEM="$(free -h | awk '/^Mem:/ {print $2}')"
+
+echo "Hostname: " $HOSTNAME
+echo "Username: " $USER
+echo "Kernel Version: " $KERNEL
+echo "Total Memory: " $MEM
+
+
+
+

Simple Number Comparison

+
#!/bin/bash
+age=18
+if [ "$age" -ge 18 ]; then
+    echo "You are an adult."
+else
+    echo "You are a minor."
+fi
+
+
+
+

Create a zip

+
#!/bin/bash
+backup_dir="/path/to/backup"
+source_dir="/path/to/source"
+zip -r "$backup_dir/$backup_file" "$source_dir"
+
+
+
+

Simple Find and Replace

+
#!/usr/bin/env bash
+# Demo 1
+
+BADNAME="myVar"
+GOODNAME="my_var"
+for i in $(find . -type f); do
+  if [[ "$i" != "./script.sh" ]]; then
+    if grep "$BADNAME"  $i > /dev/null; then
+      echo "Found in the phrase in ${i}";
+      sed -i "s/$BADNAME/$GOODNAME/g" $i > /dev/null;
+    fi
+  fi
+done
+
+
+ + + + + +
+
+
Http Server
+
$ ls 
+Downloads/  Documents/  Videos/  ...
+
+
+
Http Server
+
$ cd Downloads/
+
+
+
Http Server
+
$ ls 
+Bash-Workshop.jpg  Me-Playing-The-Saxophone.mp3  some-papers/
+
+
+
Http Server
+
$ ip a | grep inet
+inet 127.0.0.1/8 scope host lo
+inet6 ::1/128 scope host proto kernel_lo 
+inet 100.80.134.178/20 brd 100.80.143.255 scope global dynamic noprefixroute wlp2s0
+inet6 fe80::3977:6f8:fbce:e909/64 scope link noprefixroute
+
$ ifconfig a | grep inet
+
+
+
Http Server
+
$ python -m http.server
+Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
+127.0.0.1 - - [12/Mar/2024 10:28:39] "GET / HTTP/1.1" 200 -
+127.0.0.1 - - [12/Mar/2024 10:28:41] "GET /Me-Playing-The-Saxophone.mp3 HTTP/1.1" 200 -
+
+
+ +
+
+
WGet
+

CSE Courses: cseweb.ucsd/classes

+ +
+
+
WGet
+

https://cseweb.ucsd.edu/classes/fa23/cse120-a/

+ +
+
+
WGet
+

https://cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/mem.pdf

+ +
+
+
WGet
+
$ cd Downloads
+$ ls
+Bash-Workshop.jpg  Me-Playing-The-Saxophone.mp3  some-papers
+$ 

+          
+
+
WGet
+
$ cd Downloads
+$ ls
+Bash-Workshop.jpg  Me-Playing-The-Saxophone.mp3  some-papers
+$ wget https://cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/mem.pdf
+
+
+
WGet
+
$ cd Downloads
+$ ls
+Bash-Workshop.jpg  Me-Playing-The-Saxophone.mp3  some-papers
+$ wget https://cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/mem.pdf
+--2024-03-12 11:27:28--  https://cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/mem.pdf
+Resolving cseweb.ucsd.edu (cseweb.ucsd.edu)... 132.239.8.30
+Connecting to cseweb.ucsd.edu (cseweb.ucsd.edu)|132.239.8.30|:443... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 2497853 (2.4M) [application/pdf]
+Saving to: ‘mem.pdf’
+
+mem.pdf                                                   100%[=====================================================================================================================================>]   2.38M  6.58MB/s    in 0.4s    
+
+2024-03-12 11:27:30 (6.58 MB/s) - ‘mem.pdf’ saved [2497853/2497853]
+$ clear 
+
+
+
WGet
+
$ ls 
+Bash-Workshop.jpg  Me-Playing-The-Saxophone.mp3  mem.pdf  some-papers
+$ 
+
+ +
+
Get CSE Class Slides
+
#!/usr/bin/bash -x 
+location="cseweb.ucsd.edu/classes/fa23/cse120-a/lectures/"
+
+wget -r -np -R "index.html*" https://$location
+class_list=$(ls -rt ./$location)
+
+
+count=1
+for i in $class_list; do
+
+  mv -n ./$location/$i ./${count}_${i}
+  count=$((count + 1))
+
+done
+
+
+rm -rf cseweb.ucsd.edu
+
+
+
+ + +
+
+

wget and http server

+ +
+
+

wget and http server

+ +
$ mkdir temp/
+$ cd temp
+$ wget -k -r -p https://supercomputing-club.sdsc.edu/
+
+
+

wget and http server

+ +
$ python -m http.server
+
+
+

wget and http server

+ +
$ python -m http.server
+

Try visiting localhost:8000 if you completed these steps

+
+
+ +
+

Get every Canvas file from your course!

+ +
#!/usr/bin/env bash
+
+COURSE_ID="123456"
+API_TOKEN="12345~..."
+
+mkdir -p files/
+
+FILES=$(
+	curl \
+	-X GET \
+	-H "Authorization: Bearer $API_TOKEN" \
+		https://canvas.ucsd.edu/api/v1/courses/$COURSE_ID/files | \
+		jq -r '.[] | "\(.filename),\(.url)"'
+)
+
+echo "$FILES" | while IFS= read -r line; do
+	FILENAME=$(echo $line | awk -F',' '{print $1}')
+	URL=$(echo $line | awk -F',' '{print $2}')
+	echo "Downloading $FILENAME..."
+	curl -s "$URL" -o "$FILENAME"
+	mv "$FILENAME" "files/$FILENAME"
+done
+
+echo "Done! All your files are in the 'files/' directory."
+
+
+ + + + +
+

Bash in Supercomputing

+

Most computers run some Unix derivative

+
+
+

Student Cluster Competition 2022 Tech Stack

+
+
+

SCC Applications Coming Soon!

+
+
+

Our Site

+ https://supercomputing-club.sdsc.edu/ + +
+
+

Thank you

+ https://ieeeucsd.org/ +
+ https://supercomputing-club.sdsc.edu/ +
+ https://www.sdsc.edu/ +
+ + +
+ + + + + + + + + + + diff --git a/public/bash/js/components/playback.js b/public/bash/js/components/playback.js new file mode 100644 index 0000000..06fa7ba --- /dev/null +++ b/public/bash/js/components/playback.js @@ -0,0 +1,165 @@ +/** + * UI component that lets the use control auto-slide + * playback via play/pause. + */ +export default class Playback { + + /** + * @param {HTMLElement} container The component will append + * itself to this + * @param {function} progressCheck A method which will be + * called frequently to get the current playback progress on + * a range of 0-1 + */ + constructor( container, progressCheck ) { + + // Cosmetics + this.diameter = 100; + this.diameter2 = this.diameter/2; + this.thickness = 6; + + // Flags if we are currently playing + this.playing = false; + + // Current progress on a 0-1 range + this.progress = 0; + + // Used to loop the animation smoothly + this.progressOffset = 1; + + this.container = container; + this.progressCheck = progressCheck; + + 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( value ) { + + const wasPlaying = this.playing; + + this.playing = value; + + // Start repainting if we weren't already + if( !wasPlaying && this.playing ) { + this.animate(); + } + else { + this.render(); + } + + } + + animate() { + + const progressBefore = this.progress; + + this.progress = this.progressCheck(); + + // When we loop, offset the progress so that it eases + // smoothly rather than immediately resetting + if( progressBefore > 0.8 && this.progress < 0.2 ) { + this.progressOffset = this.progress; + } + + this.render(); + + if( this.playing ) { + requestAnimationFrame( this.animate.bind( this ) ); + } + + } + + /** + * Renders the current progress and playback state. + */ + render() { + + let progress = this.playing ? this.progress : 0, + radius = ( this.diameter2 ) - this.thickness, + x = this.diameter2, + y = this.diameter2, + iconSize = 28; + + // Ease towards 1 + this.progressOffset += ( 1 - this.progressOffset ) * 0.1; + + const endAngle = ( - Math.PI / 2 ) + ( progress * ( Math.PI * 2 ) ); + const startAngle = ( - Math.PI / 2 ) + ( this.progressOffset * ( Math.PI * 2 ) ); + + this.context.save(); + this.context.clearRect( 0, 0, this.diameter, this.diameter ); + + // Solid background color + this.context.beginPath(); + this.context.arc( x, y, radius + 4, 0, Math.PI * 2, false ); + this.context.fillStyle = 'rgba( 0, 0, 0, 0.4 )'; + this.context.fill(); + + // Draw progress track + this.context.beginPath(); + this.context.arc( x, y, radius, 0, Math.PI * 2, false ); + this.context.lineWidth = this.thickness; + this.context.strokeStyle = 'rgba( 255, 255, 255, 0.2 )'; + this.context.stroke(); + + if( this.playing ) { + // Draw progress on top of track + this.context.beginPath(); + this.context.arc( x, y, radius, startAngle, endAngle, false ); + this.context.lineWidth = this.thickness; + this.context.strokeStyle = '#fff'; + this.context.stroke(); + } + + this.context.translate( x - ( iconSize / 2 ), y - ( iconSize / 2 ) ); + + // Draw play/pause icons + if( this.playing ) { + this.context.fillStyle = '#fff'; + this.context.fillRect( 0, 0, iconSize / 2 - 4, iconSize ); + this.context.fillRect( iconSize / 2 + 4, 0, iconSize / 2 - 4, iconSize ); + } + else { + this.context.beginPath(); + this.context.translate( 4, 0 ); + this.context.moveTo( 0, 0 ); + this.context.lineTo( iconSize - 4, iconSize / 2 ); + this.context.lineTo( 0, iconSize ); + this.context.fillStyle = '#fff'; + this.context.fill(); + } + + this.context.restore(); + + } + + on( type, listener ) { + this.canvas.addEventListener( type, listener, false ); + } + + off( type, listener ) { + this.canvas.removeEventListener( type, listener, false ); + } + + destroy() { + + this.playing = false; + + if( this.canvas.parentNode ) { + this.container.removeChild( this.canvas ); + } + + } + +} \ No newline at end of file diff --git a/public/bash/js/config.js b/public/bash/js/config.js new file mode 100644 index 0000000..0df53a1 --- /dev/null +++ b/public/bash/js/config.js @@ -0,0 +1,332 @@ +/** + * The default reveal.js config object. + */ +export default { + + // The "normal" size of the presentation, aspect ratio will be preserved + // when the presentation is scaled to fit different resolutions + width: 960, + height: 700, + // width: 1920, // too small font + // height: 1080, + + // Factor of the display size that should remain empty around the content + margin: 0.01, + + // Bounds for smallest/largest possible scale to apply to content + minScale: 0.2, + maxScale: 2.0, + + // Display presentation control arrows + controls: true, + + // Help the user learn the controls by providing hints, for example by + // bouncing the down arrow when they first encounter a vertical slide + controlsTutorial: true, + + // Determines where controls appear, "edges" or "bottom-right" + controlsLayout: 'bottom-right', + + // Visibility rule for backwards navigation arrows; "faded", "hidden" + // or "visible" + controlsBackArrows: 'faded', + + // Display a presentation progress bar + progress: true, + + // Display the page number of the current slide + // - true: Show slide number + // - false: Hide slide number + // + // Can optionally be set as a string that specifies the number formatting: + // - "h.v": Horizontal . vertical slide number (default) + // - "h/v": Horizontal / vertical slide number + // - "c": Flattened slide number + // - "c/t": Flattened slide number / total slides + // + // Alternatively, you can provide a function that returns the slide + // number for the current slide. The function should take in a slide + // object and return an array with one string [slideNumber] or + // three strings [n1,delimiter,n2]. See #formatSlideNumber(). + slideNumber: true, + + // Can be used to limit the contexts in which the slide number appears + // - "all": Always show the slide number + // - "print": Only when printing to PDF + // - "speaker": Only in the speaker view + showSlideNumber: 'all', + + // Use 1 based indexing for # links to match slide number (default is zero + // based) + hashOneBasedIndex: false, + + // Add the current slide number to the URL hash so that reloading the + // page/copying the URL will return you to the same slide + hash: false, + + // Flags if we should monitor the hash and change slides accordingly + respondToHashChanges: true, + + // Enable support for jump-to-slide navigation shortcuts + jumpToSlide: true, + + // Push each slide change to the browser history. Implies `hash: true` + history: false, + + // Enable keyboard shortcuts for navigation + keyboard: true, + + // Optional function that blocks keyboard events when retuning false + // + // If you set this to 'focused', we will only capture keyboard events + // for embedded decks when they are in focus + keyboardCondition: null, + + // Disables the default reveal.js slide layout (scaling and centering) + // so that you can use custom CSS layout + disableLayout: false, + + // Enable the slide overview mode + overview: true, + + // Vertical centering of slides + center: true, + + // Enables touch navigation on devices with touch input + touch: true, + + // Loop the presentation + loop: false, + + // Change the presentation direction to be RTL + rtl: false, + + // Changes the behavior of our navigation directions. + // + // "default" + // Left/right arrow keys step between horizontal slides, up/down + // arrow keys step between vertical slides. Space key steps through + // all slides (both horizontal and vertical). + // + // "linear" + // Removes the up/down arrows. Left/right arrows step through all + // slides (both horizontal and vertical). + // + // "grid" + // When this is enabled, stepping left/right from a vertical stack + // to an adjacent vertical stack will land you at the same vertical + // index. + // + // Consider a deck with six slides ordered in two vertical stacks: + // 1.1 2.1 + // 1.2 2.2 + // 1.3 2.3 + // + // If you're on slide 1.3 and navigate right, you will normally move + // from 1.3 -> 2.1. If "grid" is used, the same navigation takes you + // from 1.3 -> 2.3. + navigationMode: 'default', + + // Randomizes the order of slides each time the presentation loads + shuffle: false, + + // Turns fragments on and off globally + fragments: true, + + // Flags whether to include the current fragment in the URL, + // so that reloading brings you to the same fragment position + fragmentInURL: true, + + // Flags if the presentation is running in an embedded mode, + // i.e. contained within a limited portion of the screen + embedded: false, + + // Flags if we should show a help overlay when the question-mark + // key is pressed + help: true, + + // Flags if it should be possible to pause the presentation (blackout) + pause: true, + + // Flags if speaker notes should be visible to all viewers + showNotes: false, + + // Flags if slides with data-visibility="hidden" should be kep visible + showHiddenSlides: false, + + // Global override for autoplaying embedded media (video/audio/iframe) + // - null: Media will only autoplay if data-autoplay is present + // - true: All media will autoplay, regardless of individual setting + // - false: No media will autoplay, regardless of individual setting + autoPlayMedia: null, + + // Global override for preloading lazy-loaded iframes + // - null: Iframes with data-src AND data-preload will be loaded when within + // the viewDistance, iframes with only data-src will be loaded when visible + // - true: All iframes with data-src will be loaded when within the viewDistance + // - false: All iframes with data-src will be loaded only when visible + preloadIframes: null, + + // Can be used to globally disable auto-animation + autoAnimate: true, + + // Optionally provide a custom element matcher that will be + // used to dictate which elements we can animate between. + autoAnimateMatcher: null, + + // Default settings for our auto-animate transitions, can be + // overridden per-slide or per-element via data arguments + autoAnimateEasing: 'ease', + autoAnimateDuration: 1.0, + autoAnimateUnmatched: true, + + // CSS properties that can be auto-animated. Position & scale + // is matched separately so there's no need to include styles + // like top/right/bottom/left, width/height or margin. + autoAnimateStyles: [ + 'opacity', + 'color', + 'background-color', + 'padding', + 'font-size', + 'line-height', + 'letter-spacing', + 'border-width', + 'border-color', + 'border-radius', + 'outline', + 'outline-offset' + ], + + // Controls automatic progression to the next slide + // - 0: Auto-sliding only happens if the data-autoslide HTML attribute + // is present on the current slide or fragment + // - 1+: All slides will progress automatically at the given interval + // - false: No auto-sliding, even if data-autoslide is present + autoSlide: 0, + + // Stop auto-sliding after user input + autoSlideStoppable: true, + + // Use this method for navigation when auto-sliding (defaults to navigateNext) + autoSlideMethod: null, + + // Specify the average time in seconds that you think you will spend + // presenting each slide. This is used to show a pacing timer in the + // speaker view + defaultTiming: null, + + // Enable slide navigation via mouse wheel + mouseWheel: false, + + // Opens links in an iframe preview overlay + // Add `data-preview-link` and `data-preview-link="false"` to customise each link + // individually + previewLinks: false, + + // Exposes the reveal.js API through window.postMessage + postMessage: true, + + // Dispatches all reveal.js events to the parent window through postMessage + postMessageEvents: false, + + // Focuses body when page changes visibility to ensure keyboard shortcuts work + focusBodyOnPageVisibilityChange: true, + + // Transition style + transition: 'slide', // none/fade/slide/convex/concave/zoom + + // Transition speed + transitionSpeed: 'default', // default/fast/slow + + // Transition style for full page slide backgrounds + backgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom + + // Parallax background image + parallaxBackgroundImage: '', // CSS syntax, e.g. "a.jpg" + + // Parallax background size + parallaxBackgroundSize: '', // CSS syntax, e.g. "3000px 2000px" + + // Parallax background repeat + parallaxBackgroundRepeat: '', // repeat/repeat-x/repeat-y/no-repeat/initial/inherit + + // Parallax background position + parallaxBackgroundPosition: '', // CSS syntax, e.g. "top left" + + // Amount of pixels to move the parallax background per slide step + parallaxBackgroundHorizontal: null, + parallaxBackgroundVertical: null, + + // Can be used to initialize reveal.js in one of the following views: + // - print: Render the presentation so that it can be printed to PDF + // - scroll: Show the presentation as a tall scrollable page with scroll + // triggered animations + view: null, + + // Adjusts the height of each slide in the scroll view. + // - full: Each slide is as tall as the viewport + // - compact: Slides are as small as possible, allowing multiple slides + // to be visible in parallel on tall devices + scrollLayout: 'full', + + // Control how scroll snapping works in the scroll view. + // - false: No snapping, scrolling is continuous + // - proximity: Snap when close to a slide + // - mandatory: Always snap to the closest slide + // + // Only applies to presentations in scroll view. + scrollSnap: 'mandatory', + + // Enables and configure the scroll view progress bar. + // - 'auto': Show the scrollbar while scrolling, hide while idle + // - true: Always show the scrollbar + // - false: Never show the scrollbar + scrollProgress: 'auto', + + // Automatically activate the scroll view when we the viewport falls + // below the given width. + scrollActivationWidth: 435, + + // The maximum number of pages a single slide can expand onto when printing + // to PDF, unlimited by default + pdfMaxPagesPerSlide: Number.POSITIVE_INFINITY, + + // Prints each fragment on a separate slide + pdfSeparateFragments: true, + + // Offset used to reduce the height of content within exported PDF pages. + // This exists to account for environment differences based on how you + // print to PDF. CLI printing options, like phantomjs and wkpdf, can end + // on precisely the total height of the document whereas in-browser + // printing has to end one pixel before. + pdfPageHeightOffset: -1, + + // Number of slides away from the current that are visible + viewDistance: 3, + + // Number of slides away from the current that are visible on mobile + // devices. It is advisable to set this to a lower number than + // viewDistance in order to save resources. + mobileViewDistance: 2, + + // The display mode that will be used to show slides + display: 'block', + + // Hide cursor if inactive + hideInactiveCursor: true, + + // Time before the cursor is hidden (in ms) + hideCursorTime: 5000, + + // Should we automatically sort and set indices for fragments + // at each sync? (See Reveal.sync) + sortFragmentsOnSync: true, + + // Script dependencies to load + dependencies: [], + + // Plugin objects to register and use for this presentation + plugins: [] + +} diff --git a/public/bash/js/controllers/autoanimate.js b/public/bash/js/controllers/autoanimate.js new file mode 100644 index 0000000..3fd2c99 --- /dev/null +++ b/public/bash/js/controllers/autoanimate.js @@ -0,0 +1,640 @@ +import { queryAll, extend, createStyleSheet, matches, closest } from '../utils/util.js' +import { FRAGMENT_STYLE_REGEX } from '../utils/constants.js' + +// Counter used to generate unique IDs for auto-animated elements +let autoAnimateCounter = 0; + +/** + * Automatically animates matching elements across + * slides with the [data-auto-animate] attribute. + */ +export default class AutoAnimate { + + constructor( Reveal ) { + + this.Reveal = Reveal; + + } + + /** + * Runs an auto-animation between the given slides. + * + * @param {HTMLElement} fromSlide + * @param {HTMLElement} toSlide + */ + run( fromSlide, toSlide ) { + + // Clean up after prior animations + this.reset(); + + let allSlides = this.Reveal.getSlides(); + let toSlideIndex = allSlides.indexOf( toSlide ); + let fromSlideIndex = allSlides.indexOf( fromSlide ); + + // Ensure that both slides are auto-animate targets with the same data-auto-animate-id value + // (including null if absent on both) and that data-auto-animate-restart isn't set on the + // physically latter slide (independent of slide direction) + if( fromSlide.hasAttribute( 'data-auto-animate' ) && toSlide.hasAttribute( 'data-auto-animate' ) + && fromSlide.getAttribute( 'data-auto-animate-id' ) === toSlide.getAttribute( 'data-auto-animate-id' ) + && !( toSlideIndex > fromSlideIndex ? toSlide : fromSlide ).hasAttribute( 'data-auto-animate-restart' ) ) { + + // Create a new auto-animate sheet + this.autoAnimateStyleSheet = this.autoAnimateStyleSheet || createStyleSheet(); + + let animationOptions = this.getAutoAnimateOptions( toSlide ); + + // Set our starting state + fromSlide.dataset.autoAnimate = 'pending'; + toSlide.dataset.autoAnimate = 'pending'; + + // Flag the navigation direction, needed for fragment buildup + animationOptions.slideDirection = toSlideIndex > fromSlideIndex ? 'forward' : 'backward'; + + // If the from-slide is hidden because it has moved outside + // the view distance, we need to temporarily show it while + // measuring + let fromSlideIsHidden = fromSlide.style.display === 'none'; + if( fromSlideIsHidden ) fromSlide.style.display = this.Reveal.getConfig().display; + + // Inject our auto-animate styles for this transition + let css = this.getAutoAnimatableElements( fromSlide, toSlide ).map( elements => { + return this.autoAnimateElements( elements.from, elements.to, elements.options || {}, animationOptions, autoAnimateCounter++ ); + } ); + + if( fromSlideIsHidden ) fromSlide.style.display = 'none'; + + // Animate unmatched elements, if enabled + if( toSlide.dataset.autoAnimateUnmatched !== 'false' && this.Reveal.getConfig().autoAnimateUnmatched === true ) { + + // Our default timings for unmatched elements + let defaultUnmatchedDuration = animationOptions.duration * 0.8, + defaultUnmatchedDelay = animationOptions.duration * 0.2; + + this.getUnmatchedAutoAnimateElements( toSlide ).forEach( unmatchedElement => { + + let unmatchedOptions = this.getAutoAnimateOptions( unmatchedElement, animationOptions ); + let id = 'unmatched'; + + // If there is a duration or delay set specifically for this + // element our unmatched elements should adhere to those + if( unmatchedOptions.duration !== animationOptions.duration || unmatchedOptions.delay !== animationOptions.delay ) { + id = 'unmatched-' + autoAnimateCounter++; + css.push( `[data-auto-animate="running"] [data-auto-animate-target="${id}"] { transition: opacity ${unmatchedOptions.duration}s ease ${unmatchedOptions.delay}s; }` ); + } + + unmatchedElement.dataset.autoAnimateTarget = id; + + }, this ); + + // Our default transition for unmatched elements + css.push( `[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${defaultUnmatchedDuration}s ease ${defaultUnmatchedDelay}s; }` ); + + } + + // Setting the whole chunk of CSS at once is the most + // efficient way to do this. Using sheet.insertRule + // is multiple factors slower. + this.autoAnimateStyleSheet.innerHTML = css.join( '' ); + + // Start the animation next cycle + requestAnimationFrame( () => { + if( this.autoAnimateStyleSheet ) { + // This forces our newly injected styles to be applied in Firefox + getComputedStyle( this.autoAnimateStyleSheet ).fontWeight; + + toSlide.dataset.autoAnimate = 'running'; + } + } ); + + this.Reveal.dispatchEvent({ + type: 'autoanimate', + data: { + fromSlide, + toSlide, + sheet: this.autoAnimateStyleSheet + } + }); + + } + + } + + /** + * Rolls back all changes that we've made to the DOM so + * that as part of animating. + */ + reset() { + + // Reset slides + queryAll( this.Reveal.getRevealElement(), '[data-auto-animate]:not([data-auto-animate=""])' ).forEach( element => { + element.dataset.autoAnimate = ''; + } ); + + // Reset elements + queryAll( this.Reveal.getRevealElement(), '[data-auto-animate-target]' ).forEach( element => { + delete element.dataset.autoAnimateTarget; + } ); + + // Remove the animation sheet + if( this.autoAnimateStyleSheet && this.autoAnimateStyleSheet.parentNode ) { + this.autoAnimateStyleSheet.parentNode.removeChild( this.autoAnimateStyleSheet ); + this.autoAnimateStyleSheet = null; + } + + } + + /** + * Creates a FLIP animation where the `to` element starts out + * in the `from` element position and animates to its original + * state. + * + * @param {HTMLElement} from + * @param {HTMLElement} to + * @param {Object} elementOptions Options for this element pair + * @param {Object} animationOptions Options set at the slide level + * @param {String} id Unique ID that we can use to identify this + * auto-animate element in the DOM + */ + autoAnimateElements( from, to, elementOptions, animationOptions, id ) { + + // 'from' elements are given a data-auto-animate-target with no value, + // 'to' elements are are given a data-auto-animate-target with an ID + from.dataset.autoAnimateTarget = ''; + to.dataset.autoAnimateTarget = id; + + // Each element may override any of the auto-animate options + // like transition easing, duration and delay via data-attributes + let options = this.getAutoAnimateOptions( to, animationOptions ); + + // If we're using a custom element matcher the element options + // may contain additional transition overrides + if( typeof elementOptions.delay !== 'undefined' ) options.delay = elementOptions.delay; + if( typeof elementOptions.duration !== 'undefined' ) options.duration = elementOptions.duration; + if( typeof elementOptions.easing !== 'undefined' ) options.easing = elementOptions.easing; + + let fromProps = this.getAutoAnimatableProperties( 'from', from, elementOptions ), + toProps = this.getAutoAnimatableProperties( 'to', to, elementOptions ); + + // Maintain fragment visibility for matching elements when + // we're navigating forwards, this way the viewer won't need + // to step through the same fragments twice + if( to.classList.contains( 'fragment' ) ) { + + // Don't auto-animate the opacity of fragments to avoid + // conflicts with fragment animations + delete toProps.styles['opacity']; + + if( from.classList.contains( 'fragment' ) ) { + + let fromFragmentStyle = ( from.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0]; + let toFragmentStyle = ( to.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0]; + + // Only skip the fragment if the fragment animation style + // remains unchanged + if( fromFragmentStyle === toFragmentStyle && animationOptions.slideDirection === 'forward' ) { + to.classList.add( 'visible', 'disabled' ); + } + + } + + } + + // If translation and/or scaling are enabled, css transform + // the 'to' element so that it matches the position and size + // of the 'from' element + if( elementOptions.translate !== false || elementOptions.scale !== false ) { + + let presentationScale = this.Reveal.getScale(); + + let delta = { + x: ( fromProps.x - toProps.x ) / presentationScale, + y: ( fromProps.y - toProps.y ) / presentationScale, + scaleX: fromProps.width / toProps.width, + scaleY: fromProps.height / toProps.height + }; + + // Limit decimal points to avoid 0.0001px blur and stutter + delta.x = Math.round( delta.x * 1000 ) / 1000; + delta.y = Math.round( delta.y * 1000 ) / 1000; + delta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000; + delta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000; + + let translate = elementOptions.translate !== false && ( delta.x !== 0 || delta.y !== 0 ), + scale = elementOptions.scale !== false && ( delta.scaleX !== 0 || delta.scaleY !== 0 ); + + // No need to transform if nothing's changed + if( translate || scale ) { + + let transform = []; + + if( translate ) transform.push( `translate(${delta.x}px, ${delta.y}px)` ); + if( scale ) transform.push( `scale(${delta.scaleX}, ${delta.scaleY})` ); + + fromProps.styles['transform'] = transform.join( ' ' ); + fromProps.styles['transform-origin'] = 'top left'; + + toProps.styles['transform'] = 'none'; + + } + + } + + // Delete all unchanged 'to' styles + for( let propertyName in toProps.styles ) { + const toValue = toProps.styles[propertyName]; + const fromValue = fromProps.styles[propertyName]; + + if( toValue === fromValue ) { + delete toProps.styles[propertyName]; + } + else { + // If these property values were set via a custom matcher providing + // an explicit 'from' and/or 'to' value, we always inject those values. + if( toValue.explicitValue === true ) { + toProps.styles[propertyName] = toValue.value; + } + + if( fromValue.explicitValue === true ) { + fromProps.styles[propertyName] = fromValue.value; + } + } + } + + let css = ''; + + let toStyleProperties = Object.keys( toProps.styles ); + + // Only create animate this element IF at least one style + // property has changed + if( toStyleProperties.length > 0 ) { + + // Instantly move to the 'from' state + fromProps.styles['transition'] = 'none'; + + // Animate towards the 'to' state + toProps.styles['transition'] = `all ${options.duration}s ${options.easing} ${options.delay}s`; + toProps.styles['transition-property'] = toStyleProperties.join( ', ' ); + toProps.styles['will-change'] = toStyleProperties.join( ', ' ); + + // Build up our custom CSS. We need to override inline styles + // so we need to make our styles vErY IMPORTANT!1!! + let fromCSS = Object.keys( fromProps.styles ).map( propertyName => { + return propertyName + ': ' + fromProps.styles[propertyName] + ' !important;'; + } ).join( '' ); + + let toCSS = Object.keys( toProps.styles ).map( propertyName => { + return propertyName + ': ' + toProps.styles[propertyName] + ' !important;'; + } ).join( '' ); + + css = '[data-auto-animate-target="'+ id +'"] {'+ fromCSS +'}' + + '[data-auto-animate="running"] [data-auto-animate-target="'+ id +'"] {'+ toCSS +'}'; + + } + + return css; + + } + + /** + * Returns the auto-animate options for the given element. + * + * @param {HTMLElement} element Element to pick up options + * from, either a slide or an animation target + * @param {Object} [inheritedOptions] Optional set of existing + * options + */ + getAutoAnimateOptions( element, inheritedOptions ) { + + let options = { + easing: this.Reveal.getConfig().autoAnimateEasing, + duration: this.Reveal.getConfig().autoAnimateDuration, + delay: 0 + }; + + options = extend( options, inheritedOptions ); + + // Inherit options from parent elements + if( element.parentNode ) { + let autoAnimatedParent = closest( element.parentNode, '[data-auto-animate-target]' ); + if( autoAnimatedParent ) { + options = this.getAutoAnimateOptions( autoAnimatedParent, options ); + } + } + + if( element.dataset.autoAnimateEasing ) { + options.easing = element.dataset.autoAnimateEasing; + } + + if( element.dataset.autoAnimateDuration ) { + options.duration = parseFloat( element.dataset.autoAnimateDuration ); + } + + if( element.dataset.autoAnimateDelay ) { + options.delay = parseFloat( element.dataset.autoAnimateDelay ); + } + + return options; + + } + + /** + * Returns an object containing all of the properties + * that can be auto-animated for the given element and + * their current computed values. + * + * @param {String} direction 'from' or 'to' + */ + getAutoAnimatableProperties( direction, element, elementOptions ) { + + let config = this.Reveal.getConfig(); + + let properties = { styles: [] }; + + // Position and size + if( elementOptions.translate !== false || elementOptions.scale !== false ) { + let bounds; + + // Custom auto-animate may optionally return a custom tailored + // measurement function + if( typeof elementOptions.measure === 'function' ) { + bounds = elementOptions.measure( element ); + } + else { + if( config.center ) { + // More precise, but breaks when used in combination + // with zoom for scaling the deck ¯\_(ツ)_/¯ + bounds = element.getBoundingClientRect(); + } + else { + let scale = this.Reveal.getScale(); + bounds = { + x: element.offsetLeft * scale, + y: element.offsetTop * scale, + width: element.offsetWidth * scale, + height: element.offsetHeight * scale + }; + } + } + + properties.x = bounds.x; + properties.y = bounds.y; + properties.width = bounds.width; + properties.height = bounds.height; + } + + const computedStyles = getComputedStyle( element ); + + // CSS styles + ( elementOptions.styles || config.autoAnimateStyles ).forEach( style => { + let value; + + // `style` is either the property name directly, or an object + // definition of a style property + if( typeof style === 'string' ) style = { property: style }; + + if( typeof style.from !== 'undefined' && direction === 'from' ) { + value = { value: style.from, explicitValue: true }; + } + else if( typeof style.to !== 'undefined' && direction === 'to' ) { + value = { value: style.to, explicitValue: true }; + } + else { + // Use a unitless value for line-height so that it inherits properly + if( style.property === 'line-height' ) { + value = parseFloat( computedStyles['line-height'] ) / parseFloat( computedStyles['font-size'] ); + } + + if( isNaN(value) ) { + value = computedStyles[style.property]; + } + } + + if( value !== '' ) { + properties.styles[style.property] = value; + } + } ); + + return properties; + + } + + /** + * Get a list of all element pairs that we can animate + * between the given slides. + * + * @param {HTMLElement} fromSlide + * @param {HTMLElement} toSlide + * + * @return {Array} Each value is an array where [0] is + * the element we're animating from and [1] is the + * element we're animating to + */ + getAutoAnimatableElements( fromSlide, toSlide ) { + + let matcher = typeof this.Reveal.getConfig().autoAnimateMatcher === 'function' ? this.Reveal.getConfig().autoAnimateMatcher : this.getAutoAnimatePairs; + + let pairs = matcher.call( this, fromSlide, toSlide ); + + let reserved = []; + + // Remove duplicate pairs + return pairs.filter( ( pair, index ) => { + if( reserved.indexOf( pair.to ) === -1 ) { + reserved.push( pair.to ); + return true; + } + } ); + + } + + /** + * Identifies matching elements between slides. + * + * You can specify a custom matcher function by using + * the `autoAnimateMatcher` config option. + */ + getAutoAnimatePairs( fromSlide, toSlide ) { + + let pairs = []; + + const codeNodes = 'pre'; + const textNodes = 'h1, h2, h3, h4, h5, h6, p, li'; + const mediaNodes = 'img, video, iframe'; + + // Explicit matches via data-id + this.findAutoAnimateMatches( pairs, fromSlide, toSlide, '[data-id]', node => { + return node.nodeName + ':::' + node.getAttribute( 'data-id' ); + } ); + + // Text + this.findAutoAnimateMatches( pairs, fromSlide, toSlide, textNodes, node => { + return node.nodeName + ':::' + node.innerText; + } ); + + // Media + this.findAutoAnimateMatches( pairs, fromSlide, toSlide, mediaNodes, node => { + return node.nodeName + ':::' + ( node.getAttribute( 'src' ) || node.getAttribute( 'data-src' ) ); + } ); + + // Code + this.findAutoAnimateMatches( pairs, fromSlide, toSlide, codeNodes, node => { + return node.nodeName + ':::' + node.innerText; + } ); + + pairs.forEach( pair => { + // Disable scale transformations on text nodes, we transition + // each individual text property instead + if( matches( pair.from, textNodes ) ) { + pair.options = { scale: false }; + } + // Animate individual lines of code + else if( matches( pair.from, codeNodes ) ) { + + // Transition the code block's width and height instead of scaling + // to prevent its content from being squished + pair.options = { scale: false, styles: [ 'width', 'height' ] }; + + // Lines of code + this.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-code', node => { + return node.textContent; + }, { + scale: false, + styles: [], + measure: this.getLocalBoundingBox.bind( this ) + } ); + + // Line numbers + this.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-numbers[data-line-number]', node => { + return node.getAttribute( 'data-line-number' ); + }, { + scale: false, + styles: [ 'width' ], + measure: this.getLocalBoundingBox.bind( this ) + } ); + + } + + }, this ); + + return pairs; + + } + + /** + * Helper method which returns a bounding box based on + * the given elements offset coordinates. + * + * @param {HTMLElement} element + * @return {Object} x, y, width, height + */ + getLocalBoundingBox( element ) { + + const presentationScale = this.Reveal.getScale(); + + return { + x: Math.round( ( element.offsetLeft * presentationScale ) * 100 ) / 100, + y: Math.round( ( element.offsetTop * presentationScale ) * 100 ) / 100, + width: Math.round( ( element.offsetWidth * presentationScale ) * 100 ) / 100, + height: Math.round( ( element.offsetHeight * presentationScale ) * 100 ) / 100 + }; + + } + + /** + * Finds matching elements between two slides. + * + * @param {Array} pairs List of pairs to push matches to + * @param {HTMLElement} fromScope Scope within the from element exists + * @param {HTMLElement} toScope Scope within the to element exists + * @param {String} selector CSS selector of the element to match + * @param {Function} serializer A function that accepts an element and returns + * a stringified ID based on its contents + * @param {Object} animationOptions Optional config options for this pair + */ + findAutoAnimateMatches( pairs, fromScope, toScope, selector, serializer, animationOptions ) { + + let fromMatches = {}; + let toMatches = {}; + + [].slice.call( fromScope.querySelectorAll( selector ) ).forEach( ( element, i ) => { + const key = serializer( element ); + if( typeof key === 'string' && key.length ) { + fromMatches[key] = fromMatches[key] || []; + fromMatches[key].push( element ); + } + } ); + + [].slice.call( toScope.querySelectorAll( selector ) ).forEach( ( element, i ) => { + const key = serializer( element ); + toMatches[key] = toMatches[key] || []; + toMatches[key].push( element ); + + let fromElement; + + // Retrieve the 'from' element + if( fromMatches[key] ) { + const primaryIndex = toMatches[key].length - 1; + const secondaryIndex = fromMatches[key].length - 1; + + // If there are multiple identical from elements, retrieve + // the one at the same index as our to-element. + if( fromMatches[key][ primaryIndex ] ) { + fromElement = fromMatches[key][ primaryIndex ]; + fromMatches[key][ primaryIndex ] = null; + } + // If there are no matching from-elements at the same index, + // use the last one. + else if( fromMatches[key][ secondaryIndex ] ) { + fromElement = fromMatches[key][ secondaryIndex ]; + fromMatches[key][ secondaryIndex ] = null; + } + } + + // If we've got a matching pair, push it to the list of pairs + if( fromElement ) { + pairs.push({ + from: fromElement, + to: element, + options: animationOptions + }); + } + } ); + + } + + /** + * Returns a all elements within the given scope that should + * be considered unmatched in an auto-animate transition. If + * fading of unmatched elements is turned on, these elements + * will fade when going between auto-animate slides. + * + * Note that parents of auto-animate targets are NOT considered + * unmatched since fading them would break the auto-animation. + * + * @param {HTMLElement} rootElement + * @return {Array} + */ + getUnmatchedAutoAnimateElements( rootElement ) { + + return [].slice.call( rootElement.children ).reduce( ( result, element ) => { + + const containsAnimatedElements = element.querySelector( '[data-auto-animate-target]' ); + + // The element is unmatched if + // - It is not an auto-animate target + // - It does not contain any auto-animate targets + if( !element.hasAttribute( 'data-auto-animate-target' ) && !containsAnimatedElements ) { + result.push( element ); + } + + if( element.querySelector( '[data-auto-animate-target]' ) ) { + result = result.concat( this.getUnmatchedAutoAnimateElements( element ) ); + } + + return result; + + }, [] ); + + } + +} diff --git a/public/bash/js/controllers/backgrounds.js b/public/bash/js/controllers/backgrounds.js new file mode 100644 index 0000000..3277eac --- /dev/null +++ b/public/bash/js/controllers/backgrounds.js @@ -0,0 +1,439 @@ +import { queryAll } from '../utils/util.js' +import { colorToRgb, colorBrightness } from '../utils/color.js' + +/** + * Creates and updates slide backgrounds. + */ +export default class Backgrounds { + + constructor( Reveal ) { + + this.Reveal = Reveal; + + } + + render() { + + this.element = document.createElement( 'div' ); + this.element.className = 'backgrounds'; + this.Reveal.getRevealElement().appendChild( this.element ); + + } + + /** + * Creates the slide background elements and appends them + * to the background container. One element is created per + * slide no matter if the given slide has visible background. + */ + create() { + + // Clear prior backgrounds + this.element.innerHTML = ''; + this.element.classList.add( 'no-transition' ); + + // Iterate over all horizontal slides + this.Reveal.getHorizontalSlides().forEach( slideh => { + + let backgroundStack = this.createBackground( slideh, this.element ); + + // Iterate over all vertical slides + queryAll( slideh, 'section' ).forEach( slidev => { + + this.createBackground( slidev, backgroundStack ); + + backgroundStack.classList.add( 'stack' ); + + } ); + + } ); + + // Add parallax background if specified + if( 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; + + // Make sure the below properties are set on the element - these properties are + // needed for proper transitions to be set on the element via CSS. To remove + // annoying background slide-in effect when the presentation starts, apply + // these properties after short time delay + setTimeout( () => { + this.Reveal.getRevealElement().classList.add( 'has-parallax-background' ); + }, 1 ); + + } + else { + + this.element.style.backgroundImage = ''; + this.Reveal.getRevealElement().classList.remove( 'has-parallax-background' ); + + } + + } + + /** + * Creates a background for the given slide. + * + * @param {HTMLElement} slide + * @param {HTMLElement} container The element that the background + * should be appended to + * @return {HTMLElement} New background div + */ + createBackground( slide, container ) { + + // Main slide background element + let element = document.createElement( 'div' ); + element.className = 'slide-background ' + slide.className.replace( /present|past|future/, '' ); + + // Inner background element that wraps images/videos/iframes + let contentElement = document.createElement( 'div' ); + contentElement.className = 'slide-background-content'; + + element.appendChild( contentElement ); + container.appendChild( element ); + + slide.slideBackgroundElement = element; + slide.slideBackgroundContentElement = contentElement; + + // Syncs the background to reflect all current background settings + this.sync( slide ); + + return element; + + } + + /** + * Renders all of the visual properties of a slide background + * based on the various background attributes. + * + * @param {HTMLElement} slide + */ + sync( slide ) { + + const element = slide.slideBackgroundElement, + contentElement = slide.slideBackgroundContentElement; + + const data = { + background: slide.getAttribute( 'data-background' ), + backgroundSize: slide.getAttribute( 'data-background-size' ), + backgroundImage: slide.getAttribute( 'data-background-image' ), + backgroundVideo: slide.getAttribute( 'data-background-video' ), + backgroundIframe: slide.getAttribute( 'data-background-iframe' ), + backgroundColor: slide.getAttribute( 'data-background-color' ), + backgroundGradient: slide.getAttribute( 'data-background-gradient' ), + backgroundRepeat: slide.getAttribute( 'data-background-repeat' ), + backgroundPosition: slide.getAttribute( 'data-background-position' ), + backgroundTransition: slide.getAttribute( 'data-background-transition' ), + backgroundOpacity: slide.getAttribute( 'data-background-opacity' ), + }; + + const dataPreload = slide.hasAttribute( 'data-preload' ); + + // Reset the prior background state in case this is not the + // initial sync + slide.classList.remove( 'has-dark-background' ); + slide.classList.remove( 'has-light-background' ); + + element.removeAttribute( 'data-loaded' ); + element.removeAttribute( 'data-background-hash' ); + element.removeAttribute( 'data-background-size' ); + element.removeAttribute( 'data-background-transition' ); + element.style.backgroundColor = ''; + + contentElement.style.backgroundSize = ''; + contentElement.style.backgroundRepeat = ''; + contentElement.style.backgroundPosition = ''; + contentElement.style.backgroundImage = ''; + contentElement.style.opacity = ''; + contentElement.innerHTML = ''; + + if( data.background ) { + // Auto-wrap image urls in url(...) + if( /^(http|file|\/\/)/gi.test( data.background ) || /\.(svg|png|jpg|jpeg|gif|bmp|webp)([?#\s]|$)/gi.test( data.background ) ) { + slide.setAttribute( 'data-background-image', data.background ); + } + else { + element.style.background = data.background; + } + } + + // Create a hash for this combination of background settings. + // This is used to determine when two slide backgrounds are + // the same. + if( data.background || data.backgroundColor || data.backgroundGradient || data.backgroundImage || data.backgroundVideo || data.backgroundIframe ) { + element.setAttribute( 'data-background-hash', data.background + + data.backgroundSize + + data.backgroundImage + + data.backgroundVideo + + data.backgroundIframe + + data.backgroundColor + + data.backgroundGradient + + data.backgroundRepeat + + data.backgroundPosition + + data.backgroundTransition + + data.backgroundOpacity ); + } + + // Additional and optional background properties + if( data.backgroundSize ) element.setAttribute( 'data-background-size', data.backgroundSize ); + if( data.backgroundColor ) element.style.backgroundColor = data.backgroundColor; + if( data.backgroundGradient ) element.style.backgroundImage = data.backgroundGradient; + if( data.backgroundTransition ) element.setAttribute( 'data-background-transition', data.backgroundTransition ); + + if( dataPreload ) element.setAttribute( 'data-preload', '' ); + + // Background image options are set on the content wrapper + if( data.backgroundSize ) contentElement.style.backgroundSize = data.backgroundSize; + if( data.backgroundRepeat ) contentElement.style.backgroundRepeat = data.backgroundRepeat; + if( data.backgroundPosition ) contentElement.style.backgroundPosition = data.backgroundPosition; + if( data.backgroundOpacity ) contentElement.style.opacity = data.backgroundOpacity; + + const contrastClass = this.getContrastClass( slide ); + + if( typeof contrastClass === 'string' ) { + slide.classList.add( contrastClass ); + } + + } + + /** + * Returns a class name that can be applied to a slide to indicate + * if it has a light or dark background. + * + * @param {*} slide + * + * @returns {string|null} + */ + getContrastClass( slide ) { + + const element = slide.slideBackgroundElement; + + // If this slide has a background color, we add a class that + // signals if it is light or dark. If the slide has no background + // color, no class will be added + let contrastColor = slide.getAttribute( 'data-background-color' ); + + // If no bg color was found, or it cannot be converted by colorToRgb, check the computed background + if( !contrastColor || !colorToRgb( contrastColor ) ) { + let computedBackgroundStyle = window.getComputedStyle( element ); + if( computedBackgroundStyle && computedBackgroundStyle.backgroundColor ) { + contrastColor = computedBackgroundStyle.backgroundColor; + } + } + + if( contrastColor ) { + const rgb = colorToRgb( contrastColor ); + + // Ignore fully transparent backgrounds. Some browsers return + // rgba(0,0,0,0) when reading the computed background color of + // an element with no background + if( rgb && rgb.a !== 0 ) { + if( colorBrightness( contrastColor ) < 128 ) { + return 'has-dark-background'; + } + else { + return 'has-light-background'; + } + } + } + + return null; + + } + + /** + * Bubble the 'has-light-background'/'has-dark-background' classes. + */ + bubbleSlideContrastClassToElement( slide, target ) { + + [ 'has-light-background', 'has-dark-background' ].forEach( classToBubble => { + if( slide.classList.contains( classToBubble ) ) { + target.classList.add( classToBubble ); + } + else { + target.classList.remove( classToBubble ); + } + }, this ); + + } + + /** + * Updates the background elements to reflect the current + * slide. + * + * @param {boolean} includeAll If true, the backgrounds of + * all vertical slides (not just the present) will be updated. + */ + update( includeAll = false ) { + + let currentSlide = this.Reveal.getCurrentSlide(); + let indices = this.Reveal.getIndices(); + + let currentBackground = null; + + // Reverse past/future classes when in RTL mode + let horizontalPast = this.Reveal.getConfig().rtl ? 'future' : 'past', + horizontalFuture = this.Reveal.getConfig().rtl ? 'past' : 'future'; + + // Update the classes of all backgrounds to match the + // states of their slides (past/present/future) + Array.from( this.element.childNodes ).forEach( ( backgroundh, h ) => { + + backgroundh.classList.remove( 'past', 'present', 'future' ); + + if( h < indices.h ) { + backgroundh.classList.add( horizontalPast ); + } + else if ( h > indices.h ) { + backgroundh.classList.add( horizontalFuture ); + } + else { + backgroundh.classList.add( 'present' ); + + // Store a reference to the current background element + currentBackground = backgroundh; + } + + if( includeAll || h === indices.h ) { + queryAll( backgroundh, '.slide-background' ).forEach( ( backgroundv, v ) => { + + backgroundv.classList.remove( 'past', 'present', 'future' ); + + const indexv = typeof indices.v === 'number' ? indices.v : 0; + + if( v < indexv ) { + backgroundv.classList.add( 'past' ); + } + else if ( v > indexv ) { + backgroundv.classList.add( 'future' ); + } + else { + backgroundv.classList.add( 'present' ); + + // Only if this is the present horizontal and vertical slide + if( h === indices.h ) currentBackground = backgroundv; + } + + } ); + } + + } ); + + // Stop content inside of previous backgrounds + if( this.previousBackground ) { + + this.Reveal.slideContent.stopEmbeddedContent( this.previousBackground, { unloadIframes: !this.Reveal.slideContent.shouldPreload( this.previousBackground ) } ); + + } + + // Start content in the current background + if( currentBackground ) { + + this.Reveal.slideContent.startEmbeddedContent( currentBackground ); + + let currentBackgroundContent = currentBackground.querySelector( '.slide-background-content' ); + if( currentBackgroundContent ) { + + let backgroundImageURL = currentBackgroundContent.style.backgroundImage || ''; + + // Restart GIFs (doesn't work in Firefox) + if( /\.gif/i.test( backgroundImageURL ) ) { + currentBackgroundContent.style.backgroundImage = ''; + window.getComputedStyle( currentBackgroundContent ).opacity; + currentBackgroundContent.style.backgroundImage = backgroundImageURL; + } + + } + + // Don't transition between identical backgrounds. This + // prevents unwanted flicker. + let previousBackgroundHash = this.previousBackground ? this.previousBackground.getAttribute( 'data-background-hash' ) : null; + let currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' ); + if( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== this.previousBackground ) { + this.element.classList.add( 'no-transition' ); + } + + this.previousBackground = currentBackground; + + } + + // If there's a background brightness flag for this slide, + // bubble it to the .reveal container + if( currentSlide ) { + this.bubbleSlideContrastClassToElement( currentSlide, this.Reveal.getRevealElement() ); + } + + // Allow the first background to apply without transition + setTimeout( () => { + this.element.classList.remove( 'no-transition' ); + }, 1 ); + + } + + /** + * Updates the position of the parallax background based + * on the current slide index. + */ + updateParallax() { + + let indices = this.Reveal.getIndices(); + + if( this.Reveal.getConfig().parallaxBackgroundImage ) { + + let horizontalSlides = this.Reveal.getHorizontalSlides(), + verticalSlides = this.Reveal.getVerticalSlides(); + + let backgroundSize = this.element.style.backgroundSize.split( ' ' ), + backgroundWidth, backgroundHeight; + + if( backgroundSize.length === 1 ) { + backgroundWidth = backgroundHeight = parseInt( backgroundSize[0], 10 ); + } + else { + backgroundWidth = parseInt( backgroundSize[0], 10 ); + backgroundHeight = parseInt( backgroundSize[1], 10 ); + } + + let slideWidth = this.element.offsetWidth, + horizontalSlideCount = horizontalSlides.length, + horizontalOffsetMultiplier, + horizontalOffset; + + if( typeof this.Reveal.getConfig().parallaxBackgroundHorizontal === 'number' ) { + horizontalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundHorizontal; + } + else { + horizontalOffsetMultiplier = horizontalSlideCount > 1 ? ( backgroundWidth - slideWidth ) / ( horizontalSlideCount-1 ) : 0; + } + + horizontalOffset = horizontalOffsetMultiplier * indices.h * -1; + + let slideHeight = this.element.offsetHeight, + verticalSlideCount = verticalSlides.length, + verticalOffsetMultiplier, + verticalOffset; + + if( typeof this.Reveal.getConfig().parallaxBackgroundVertical === 'number' ) { + verticalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundVertical; + } + else { + verticalOffsetMultiplier = ( backgroundHeight - slideHeight ) / ( verticalSlideCount-1 ); + } + + verticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indices.v : 0; + + this.element.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px'; + + } + + } + + destroy() { + + this.element.remove(); + + } + +} diff --git a/public/bash/js/controllers/controls.js b/public/bash/js/controllers/controls.js new file mode 100644 index 0000000..3d150da --- /dev/null +++ b/public/bash/js/controllers/controls.js @@ -0,0 +1,279 @@ +import { queryAll, enterFullscreen } from '../utils/util.js' +import { isAndroid } from '../utils/device.js' + +/** + * Manages our presentation controls. This includes both + * the built-in control arrows as well as event monitoring + * of any elements within the presentation with either of the + * following helper classes: + * - .navigate-up + * - .navigate-right + * - .navigate-down + * - .navigate-left + * - .navigate-next + * - .navigate-prev + * - .enter-fullscreen + */ +export default class Controls { + + constructor( Reveal ) { + + this.Reveal = Reveal; + + 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 ); + this.onEnterFullscreen = this.onEnterFullscreen.bind( this ); + + } + + render() { + + const rtl = this.Reveal.getConfig().rtl; + const revealElement = this.Reveal.getRevealElement(); + + this.element = document.createElement( 'aside' ); + this.element.className = 'controls'; + this.element.innerHTML = + ` + + + `; + + this.Reveal.getRevealElement().appendChild( this.element ); + + // There can be multiple instances of controls throughout the page + this.controlsLeft = queryAll( revealElement, '.navigate-left' ); + this.controlsRight = queryAll( revealElement, '.navigate-right' ); + this.controlsUp = queryAll( revealElement, '.navigate-up' ); + this.controlsDown = queryAll( revealElement, '.navigate-down' ); + this.controlsPrev = queryAll( revealElement, '.navigate-prev' ); + this.controlsNext = queryAll( revealElement, '.navigate-next' ); + this.controlsFullscreen = queryAll( revealElement, '.enter-fullscreen' ); + + // The left, right and down arrows in the standard reveal.js controls + this.controlsRightArrow = this.element.querySelector( '.navigate-right' ); + this.controlsLeftArrow = this.element.querySelector( '.navigate-left' ); + this.controlsDownArrow = this.element.querySelector( '.navigate-down' ); + + } + + /** + * Called when the reveal.js config is updated. + */ + configure( config, oldConfig ) { + + this.element.style.display = config.controls ? 'block' : 'none'; + + this.element.setAttribute( 'data-controls-layout', config.controlsLayout ); + this.element.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows ); + + } + + bind() { + + // Listen to both touch and click events, in case the device + // supports both + let pointerEvents = [ 'touchstart', 'click' ]; + + // Only support touch for Android, fixes double navigations in + // stock browser + if( isAndroid ) { + pointerEvents = [ 'touchstart' ]; + } + + pointerEvents.forEach( eventName => { + this.controlsLeft.forEach( el => el.addEventListener( eventName, this.onNavigateLeftClicked, false ) ); + this.controlsRight.forEach( el => el.addEventListener( eventName, this.onNavigateRightClicked, false ) ); + this.controlsUp.forEach( el => el.addEventListener( eventName, this.onNavigateUpClicked, false ) ); + this.controlsDown.forEach( el => el.addEventListener( eventName, this.onNavigateDownClicked, false ) ); + this.controlsPrev.forEach( el => el.addEventListener( eventName, this.onNavigatePrevClicked, false ) ); + this.controlsNext.forEach( el => el.addEventListener( eventName, this.onNavigateNextClicked, false ) ); + this.controlsFullscreen.forEach( el => el.addEventListener( eventName, this.onEnterFullscreen, false ) ); + } ); + + } + + unbind() { + + [ 'touchstart', 'click' ].forEach( eventName => { + this.controlsLeft.forEach( el => el.removeEventListener( eventName, this.onNavigateLeftClicked, false ) ); + this.controlsRight.forEach( el => el.removeEventListener( eventName, this.onNavigateRightClicked, false ) ); + this.controlsUp.forEach( el => el.removeEventListener( eventName, this.onNavigateUpClicked, false ) ); + this.controlsDown.forEach( el => el.removeEventListener( eventName, this.onNavigateDownClicked, false ) ); + this.controlsPrev.forEach( el => el.removeEventListener( eventName, this.onNavigatePrevClicked, false ) ); + this.controlsNext.forEach( el => el.removeEventListener( eventName, this.onNavigateNextClicked, false ) ); + this.controlsFullscreen.forEach( el => el.removeEventListener( eventName, this.onEnterFullscreen, false ) ); + } ); + + } + + /** + * Updates the state of all control/navigation arrows. + */ + update() { + + let routes = this.Reveal.availableRoutes(); + + // Remove the 'enabled' class from all directions + [...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext].forEach( node => { + node.classList.remove( 'enabled', 'fragmented' ); + + // Set 'disabled' attribute on all directions + node.setAttribute( 'disabled', 'disabled' ); + } ); + + // Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons + if( routes.left ) this.controlsLeft.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); + if( routes.right ) this.controlsRight.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); + if( routes.up ) this.controlsUp.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); + if( routes.down ) this.controlsDown.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); + + // Prev/next buttons + if( routes.left || routes.up ) this.controlsPrev.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); + if( routes.right || routes.down ) this.controlsNext.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } ); + + // Highlight fragment directions + let currentSlide = this.Reveal.getCurrentSlide(); + if( currentSlide ) { + + let fragmentsRoutes = this.Reveal.fragments.availableRoutes(); + + // Always apply fragment decorator to prev/next buttons + if( fragmentsRoutes.prev ) this.controlsPrev.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); + if( fragmentsRoutes.next ) this.controlsNext.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); + + // Apply fragment decorators to directional buttons based on + // what slide axis they are in + if( this.Reveal.isVerticalSlide( currentSlide ) ) { + if( fragmentsRoutes.prev ) this.controlsUp.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); + if( fragmentsRoutes.next ) this.controlsDown.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); + } + else { + if( fragmentsRoutes.prev ) this.controlsLeft.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); + if( fragmentsRoutes.next ) this.controlsRight.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } ); + } + + } + + if( this.Reveal.getConfig().controlsTutorial ) { + + let indices = this.Reveal.getIndices(); + + // Highlight control arrows with an animation to ensure + // that the viewer knows how to navigate + if( !this.Reveal.hasNavigatedVertically() && routes.down ) { + this.controlsDownArrow.classList.add( 'highlight' ); + } + else { + this.controlsDownArrow.classList.remove( 'highlight' ); + + if( this.Reveal.getConfig().rtl ) { + + if( !this.Reveal.hasNavigatedHorizontally() && routes.left && indices.v === 0 ) { + this.controlsLeftArrow.classList.add( 'highlight' ); + } + else { + this.controlsLeftArrow.classList.remove( 'highlight' ); + } + + } else { + + if( !this.Reveal.hasNavigatedHorizontally() && routes.right && indices.v === 0 ) { + this.controlsRightArrow.classList.add( 'highlight' ); + } + else { + this.controlsRightArrow.classList.remove( 'highlight' ); + } + } + } + } + } + + destroy() { + + this.unbind(); + this.element.remove(); + + } + + /** + * Event handlers for navigation control buttons. + */ + onNavigateLeftClicked( event ) { + + event.preventDefault(); + this.Reveal.onUserInput(); + + if( this.Reveal.getConfig().navigationMode === 'linear' ) { + this.Reveal.prev(); + } + else { + this.Reveal.left(); + } + + } + + onNavigateRightClicked( event ) { + + event.preventDefault(); + this.Reveal.onUserInput(); + + if( this.Reveal.getConfig().navigationMode === 'linear' ) { + this.Reveal.next(); + } + else { + this.Reveal.right(); + } + + } + + onNavigateUpClicked( event ) { + + event.preventDefault(); + this.Reveal.onUserInput(); + + this.Reveal.up(); + + } + + onNavigateDownClicked( event ) { + + event.preventDefault(); + this.Reveal.onUserInput(); + + this.Reveal.down(); + + } + + onNavigatePrevClicked( event ) { + + event.preventDefault(); + this.Reveal.onUserInput(); + + this.Reveal.prev(); + + } + + onNavigateNextClicked( event ) { + + event.preventDefault(); + this.Reveal.onUserInput(); + + this.Reveal.next(); + + } + + onEnterFullscreen( event ) { + + const config = this.Reveal.getConfig(); + const viewport = this.Reveal.getViewportElement(); + + enterFullscreen( config.embedded ? viewport : viewport.parentElement ); + + } + +} \ No newline at end of file diff --git a/public/bash/js/controllers/focus.js b/public/bash/js/controllers/focus.js new file mode 100644 index 0000000..3e68c3f --- /dev/null +++ b/public/bash/js/controllers/focus.js @@ -0,0 +1,103 @@ +import { closest } from '../utils/util.js' + +/** + * Manages focus when a presentation is embedded. This + * helps us only capture keyboard from the presentation + * a user is currently interacting with in a page where + * multiple presentations are embedded. + */ + +const STATE_FOCUS = 'focus'; +const STATE_BLUR = 'blur'; + +export default class Focus { + + constructor( Reveal ) { + + this.Reveal = Reveal; + + this.onRevealPointerDown = this.onRevealPointerDown.bind( this ); + this.onDocumentPointerDown = this.onDocumentPointerDown.bind( this ); + + } + + /** + * Called when the reveal.js config is updated. + */ + configure( config, oldConfig ) { + + if( config.embedded ) { + this.blur(); + } + else { + this.focus(); + this.unbind(); + } + + } + + bind() { + + if( this.Reveal.getConfig().embedded ) { + this.Reveal.getRevealElement().addEventListener( 'pointerdown', this.onRevealPointerDown, false ); + } + + } + + unbind() { + + this.Reveal.getRevealElement().removeEventListener( 'pointerdown', this.onRevealPointerDown, false ); + document.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false ); + + } + + focus() { + + if( this.state !== STATE_FOCUS ) { + this.Reveal.getRevealElement().classList.add( 'focused' ); + document.addEventListener( 'pointerdown', this.onDocumentPointerDown, false ); + } + + this.state = STATE_FOCUS; + + } + + blur() { + + if( this.state !== STATE_BLUR ) { + this.Reveal.getRevealElement().classList.remove( 'focused' ); + document.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false ); + } + + this.state = STATE_BLUR; + + } + + isFocused() { + + return this.state === STATE_FOCUS; + + } + + destroy() { + + this.Reveal.getRevealElement().classList.remove( 'focused' ); + + } + + onRevealPointerDown( event ) { + + this.focus(); + + } + + onDocumentPointerDown( event ) { + + let revealElement = closest( event.target, '.reveal' ); + if( !revealElement || revealElement !== this.Reveal.getRevealElement() ) { + this.blur(); + } + + } + +} \ No newline at end of file diff --git a/public/bash/js/controllers/fragments.js b/public/bash/js/controllers/fragments.js new file mode 100644 index 0000000..0a84530 --- /dev/null +++ b/public/bash/js/controllers/fragments.js @@ -0,0 +1,375 @@ +import { extend, queryAll } from '../utils/util.js' + +/** + * Handles sorting and navigation of slide fragments. + * Fragments are elements within a slide that are + * revealed/animated incrementally. + */ +export default class Fragments { + + constructor( Reveal ) { + + this.Reveal = Reveal; + + } + + /** + * Called when the reveal.js config is updated. + */ + configure( config, oldConfig ) { + + if( config.fragments === false ) { + this.disable(); + } + else if( oldConfig.fragments === false ) { + this.enable(); + } + + } + + /** + * If fragments are disabled in the deck, they should all be + * visible rather than stepped through. + */ + disable() { + + queryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => { + element.classList.add( 'visible' ); + element.classList.remove( 'current-fragment' ); + } ); + + } + + /** + * Reverse of #disable(). Only called if fragments have + * previously been disabled. + */ + enable() { + + queryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => { + element.classList.remove( 'visible' ); + element.classList.remove( 'current-fragment' ); + } ); + + } + + /** + * Returns an object describing the available fragment + * directions. + * + * @return {{prev: boolean, next: boolean}} + */ + availableRoutes() { + + let currentSlide = this.Reveal.getCurrentSlide(); + if( currentSlide && this.Reveal.getConfig().fragments ) { + let fragments = currentSlide.querySelectorAll( '.fragment:not(.disabled)' ); + let hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.disabled):not(.visible)' ); + + return { + prev: fragments.length - hiddenFragments.length > 0, + next: !!hiddenFragments.length + }; + } + else { + return { prev: false, next: false }; + } + + } + + /** + * Return a sorted fragments list, ordered by an increasing + * "data-fragment-index" attribute. + * + * Fragments will be revealed in the order that they are returned by + * this function, so you can use the index attributes to control the + * order of fragment appearance. + * + * To maintain a sensible default fragment order, fragments are presumed + * to be passed in document order. This function adds a "fragment-index" + * attribute to each node if such an attribute is not already present, + * and sets that attribute to an integer value which is the position of + * the fragment within the fragments list. + * + * @param {object[]|*} fragments + * @param {boolean} grouped If true the returned array will contain + * nested arrays for all fragments with the same index + * @return {object[]} sorted Sorted array of fragments + */ + sort( fragments, grouped = false ) { + + fragments = Array.from( fragments ); + + let ordered = [], + unordered = [], + sorted = []; + + // Group ordered and unordered elements + fragments.forEach( fragment => { + if( fragment.hasAttribute( 'data-fragment-index' ) ) { + let index = parseInt( fragment.getAttribute( 'data-fragment-index' ), 10 ); + + if( !ordered[index] ) { + ordered[index] = []; + } + + ordered[index].push( fragment ); + } + else { + unordered.push( [ fragment ] ); + } + } ); + + // Append fragments without explicit indices in their + // DOM order + ordered = ordered.concat( unordered ); + + // Manually count the index up per group to ensure there + // are no gaps + let index = 0; + + // Push all fragments in their sorted order to an array, + // this flattens the groups + ordered.forEach( group => { + group.forEach( fragment => { + sorted.push( fragment ); + fragment.setAttribute( 'data-fragment-index', index ); + } ); + + index ++; + } ); + + return grouped === true ? ordered : sorted; + + } + + /** + * Sorts and formats all of fragments in the + * presentation. + */ + sortAll() { + + this.Reveal.getHorizontalSlides().forEach( horizontalSlide => { + + let verticalSlides = queryAll( horizontalSlide, 'section' ); + verticalSlides.forEach( ( verticalSlide, y ) => { + + this.sort( verticalSlide.querySelectorAll( '.fragment' ) ); + + }, this ); + + if( verticalSlides.length === 0 ) this.sort( horizontalSlide.querySelectorAll( '.fragment' ) ); + + } ); + + } + + /** + * Refreshes the fragments on the current slide so that they + * have the appropriate classes (.visible + .current-fragment). + * + * @param {number} [index] The index of the current fragment + * @param {array} [fragments] Array containing all fragments + * in the current slide + * + * @return {{shown: array, hidden: array}} + */ + update( index, fragments, slide = this.Reveal.getCurrentSlide() ) { + + let changedFragments = { + shown: [], + hidden: [] + }; + + if( slide && this.Reveal.getConfig().fragments ) { + + fragments = fragments || this.sort( slide.querySelectorAll( '.fragment' ) ); + + if( fragments.length ) { + + let maxIndex = 0; + + if( typeof index !== 'number' ) { + let currentFragment = this.sort( slide.querySelectorAll( '.fragment.visible' ) ).pop(); + if( currentFragment ) { + index = parseInt( currentFragment.getAttribute( 'data-fragment-index' ) || 0, 10 ); + } + } + + Array.from( fragments ).forEach( ( el, i ) => { + + if( el.hasAttribute( 'data-fragment-index' ) ) { + i = parseInt( el.getAttribute( 'data-fragment-index' ), 10 ); + } + + maxIndex = Math.max( maxIndex, i ); + + // Visible fragments + if( i <= index ) { + let wasVisible = el.classList.contains( 'visible' ) + el.classList.add( 'visible' ); + el.classList.remove( 'current-fragment' ); + + if( i === index ) { + // Announce the fragments one by one to the Screen Reader + this.Reveal.announceStatus( this.Reveal.getStatusText( el ) ); + + el.classList.add( 'current-fragment' ); + this.Reveal.slideContent.startEmbeddedContent( el ); + } + + if( !wasVisible ) { + changedFragments.shown.push( el ) + this.Reveal.dispatchEvent({ + target: el, + type: 'visible', + bubbles: false + }); + } + } + // Hidden fragments + else { + let wasVisible = el.classList.contains( 'visible' ) + el.classList.remove( 'visible' ); + el.classList.remove( 'current-fragment' ); + + if( wasVisible ) { + this.Reveal.slideContent.stopEmbeddedContent( el ); + changedFragments.hidden.push( el ); + this.Reveal.dispatchEvent({ + target: el, + type: 'hidden', + bubbles: false + }); + } + } + + } ); + + // Write the current fragment index to the slide
. + // This can be used by end users to apply styles based on + // the current fragment index. + index = typeof index === 'number' ? index : -1; + index = Math.max( Math.min( index, maxIndex ), -1 ); + slide.setAttribute( 'data-fragment', index ); + + } + + } + + if( changedFragments.hidden.length ) { + this.Reveal.dispatchEvent({ + type: 'fragmenthidden', + data: { + fragment: changedFragments.hidden[0], + fragments: changedFragments.hidden + } + }); + } + + if( changedFragments.shown.length ) { + this.Reveal.dispatchEvent({ + type: 'fragmentshown', + data: { + fragment: changedFragments.shown[0], + fragments: changedFragments.shown + } + }); + } + + return changedFragments; + + } + + /** + * Formats the fragments on the given slide so that they have + * valid indices. Call this if fragments are changed in the DOM + * after reveal.js has already initialized. + * + * @param {HTMLElement} slide + * @return {Array} a list of the HTML fragments that were synced + */ + sync( slide = this.Reveal.getCurrentSlide() ) { + + return this.sort( slide.querySelectorAll( '.fragment' ) ); + + } + + /** + * Navigate to the specified slide fragment. + * + * @param {?number} index The index of the fragment that + * should be shown, -1 means all are invisible + * @param {number} offset Integer offset to apply to the + * fragment index + * + * @return {boolean} true if a change was made in any + * fragments visibility as part of this call + */ + goto( index, offset = 0 ) { + + let currentSlide = this.Reveal.getCurrentSlide(); + if( currentSlide && this.Reveal.getConfig().fragments ) { + + let fragments = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled)' ) ); + if( fragments.length ) { + + // If no index is specified, find the current + if( typeof index !== 'number' ) { + let lastVisibleFragment = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled).visible' ) ).pop(); + + if( lastVisibleFragment ) { + index = parseInt( lastVisibleFragment.getAttribute( 'data-fragment-index' ) || 0, 10 ); + } + else { + index = -1; + } + } + + // Apply the offset if there is one + index += offset; + + let changedFragments = this.update( index, fragments ); + + this.Reveal.controls.update(); + this.Reveal.progress.update(); + + if( this.Reveal.getConfig().fragmentInURL ) { + this.Reveal.location.writeURL(); + } + + return !!( changedFragments.shown.length || changedFragments.hidden.length ); + + } + + } + + return false; + + } + + /** + * Navigate to the next slide fragment. + * + * @return {boolean} true if there was a next fragment, + * false otherwise + */ + next() { + + return this.goto( null, 1 ); + + } + + /** + * Navigate to the previous slide fragment. + * + * @return {boolean} true if there was a previous fragment, + * false otherwise + */ + prev() { + + return this.goto( null, -1 ); + + } + +} \ No newline at end of file diff --git a/public/bash/js/controllers/jumptoslide.js b/public/bash/js/controllers/jumptoslide.js new file mode 100644 index 0000000..5a63260 --- /dev/null +++ b/public/bash/js/controllers/jumptoslide.js @@ -0,0 +1,197 @@ +import { + SLIDE_NUMBER_FORMAT_CURRENT, + SLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL +} from "../utils/constants"; + +/** + * Makes it possible to jump to a slide by entering its + * slide number or id. + */ +export default class JumpToSlide { + + constructor( Reveal ) { + + this.Reveal = Reveal; + + this.onInput = this.onInput.bind( this ); + this.onBlur = this.onBlur.bind( this ); + this.onKeyDown = this.onKeyDown.bind( this ); + + } + + render() { + + this.element = document.createElement( 'div' ); + this.element.className = 'jump-to-slide'; + + this.jumpInput = document.createElement( 'input' ); + this.jumpInput.type = 'text'; + this.jumpInput.className = 'jump-to-slide-input'; + this.jumpInput.placeholder = 'Jump to slide'; + this.jumpInput.addEventListener( 'input', this.onInput ); + this.jumpInput.addEventListener( 'keydown', this.onKeyDown ); + this.jumpInput.addEventListener( 'blur', this.onBlur ); + + this.element.appendChild( this.jumpInput ); + + } + + show() { + + this.indicesOnShow = this.Reveal.getIndices(); + + this.Reveal.getRevealElement().appendChild( this.element ); + this.jumpInput.focus(); + + } + + hide() { + + if( this.isVisible() ) { + this.element.remove(); + this.jumpInput.value = ''; + + clearTimeout( this.jumpTimeout ); + delete this.jumpTimeout; + } + + } + + isVisible() { + + return !!this.element.parentNode; + + } + + /** + * Parses the current input and jumps to the given slide. + */ + jump() { + + clearTimeout( this.jumpTimeout ); + delete this.jumpTimeout; + + let query = this.jumpInput.value.trim( '' ); + let indices; + + // When slide numbers are formatted to be a single linear mumber + // (instead of showing a separate horizontal/vertical index) we + // use the same format for slide jumps + if( /^\d+$/.test( query ) ) { + const slideNumberFormat = this.Reveal.getConfig().slideNumber; + if( slideNumberFormat === SLIDE_NUMBER_FORMAT_CURRENT || slideNumberFormat === SLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL ) { + const slide = this.Reveal.getSlides()[ parseInt( query, 10 ) - 1 ]; + if( slide ) { + indices = this.Reveal.getIndices( slide ); + } + } + } + + if( !indices ) { + // If the query uses "horizontal.vertical" format, convert to + // "horizontal/vertical" so that our URL parser can understand + if( /^\d+\.\d+$/.test( query ) ) { + query = query.replace( '.', '/' ); + } + + indices = this.Reveal.location.getIndicesFromHash( query, { oneBasedIndex: true } ); + } + + // Still no valid index? Fall back on a text search + if( !indices && /\S+/i.test( query ) && query.length > 1 ) { + indices = this.search( query ); + } + + if( indices && query !== '' ) { + this.Reveal.slide( indices.h, indices.v, indices.f ); + return true; + } + else { + this.Reveal.slide( this.indicesOnShow.h, this.indicesOnShow.v, this.indicesOnShow.f ); + return false; + } + + } + + jumpAfter( delay ) { + + clearTimeout( this.jumpTimeout ); + this.jumpTimeout = setTimeout( () => this.jump(), delay ); + + } + + /** + * A lofi search that looks for the given query in all + * of our slides and returns the first match. + */ + search( query ) { + + const regex = new RegExp( '\\b' + query.trim() + '\\b', 'i' ); + + const slide = this.Reveal.getSlides().find( ( slide ) => { + return regex.test( slide.innerText ); + } ); + + if( slide ) { + return this.Reveal.getIndices( slide ); + } + else { + return null; + } + + } + + /** + * Reverts back to the slide we were on when jump to slide was + * invoked. + */ + cancel() { + + this.Reveal.slide( this.indicesOnShow.h, this.indicesOnShow.v, this.indicesOnShow.f ); + this.hide(); + + } + + confirm() { + + this.jump(); + this.hide(); + + } + + destroy() { + + this.jumpInput.removeEventListener( 'input', this.onInput ); + this.jumpInput.removeEventListener( 'keydown', this.onKeyDown ); + this.jumpInput.removeEventListener( 'blur', this.onBlur ); + + this.element.remove(); + + } + + onKeyDown( event ) { + + if( event.keyCode === 13 ) { + this.confirm(); + } + else if( event.keyCode === 27 ) { + this.cancel(); + + event.stopImmediatePropagation(); + } + + } + + onInput( event ) { + + this.jumpAfter( 200 ); + + } + + onBlur() { + + setTimeout( () => this.hide(), 1 ); + + } + +} \ No newline at end of file diff --git a/public/bash/js/controllers/keyboard.js b/public/bash/js/controllers/keyboard.js new file mode 100644 index 0000000..fe6c487 --- /dev/null +++ b/public/bash/js/controllers/keyboard.js @@ -0,0 +1,390 @@ +import { enterFullscreen } from '../utils/util.js' + +/** + * Handles all reveal.js keyboard interactions. + */ +export default class Keyboard { + + constructor( Reveal ) { + + this.Reveal = Reveal; + + // A key:value map of keyboard keys and descriptions of + // the actions they trigger + this.shortcuts = {}; + + // Holds custom key code mappings + this.bindings = {}; + + this.onDocumentKeyDown = this.onDocumentKeyDown.bind( this ); + + } + + /** + * Called when the reveal.js config is updated. + */ + configure( config, oldConfig ) { + + if( config.navigationMode === 'linear' ) { + this.shortcuts['→ , ↓ , SPACE , N , L , J'] = 'Next slide'; + this.shortcuts['← , ↑ , P , H , K'] = 'Previous slide'; + } + else { + 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['G'] = 'Jump to slide'; + this.shortcuts['ESC, O'] = 'Slide overview'; + + } + + /** + * Starts listening for keyboard events. + */ + bind() { + + document.addEventListener( 'keydown', this.onDocumentKeyDown, false ); + + } + + /** + * Stops listening for keyboard events. + */ + unbind() { + + document.removeEventListener( 'keydown', this.onDocumentKeyDown, false ); + + } + + /** + * Add a custom key binding with optional description to + * be added to the help screen. + */ + addKeyBinding( binding, callback ) { + + if( typeof binding === 'object' && binding.keyCode ) { + this.bindings[binding.keyCode] = { + callback: callback, + key: binding.key, + description: binding.description + }; + } + else { + this.bindings[binding] = { + callback: callback, + key: null, + description: null + }; + } + + } + + /** + * Removes the specified custom key binding. + */ + removeKeyBinding( keyCode ) { + + delete this.bindings[keyCode]; + + } + + /** + * Programmatically triggers a keyboard event + * + * @param {int} keyCode + */ + triggerKey( keyCode ) { + + this.onDocumentKeyDown( { keyCode } ); + + } + + /** + * Registers a new shortcut to include in the help overlay + * + * @param {String} key + * @param {String} value + */ + registerKeyboardShortcut( key, value ) { + + this.shortcuts[key] = value; + + } + + getShortcuts() { + + return this.shortcuts; + + } + + getBindings() { + + return this.bindings; + + } + + /** + * Handler for the document level 'keydown' event. + * + * @param {object} event + */ + onDocumentKeyDown( event ) { + + let config = this.Reveal.getConfig(); + + // If there's a condition specified and it returns false, + // ignore this event + if( typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false ) { + return true; + } + + // If keyboardCondition is set, only capture keyboard events + // for embedded decks when they are focused + if( config.keyboardCondition === 'focused' && !this.Reveal.isFocused() ) { + return true; + } + + // Shorthand + let keyCode = event.keyCode; + + // Remember if auto-sliding was paused so we can toggle it + let autoSlideWasPaused = !this.Reveal.isAutoSliding(); + + this.Reveal.onUserInput( event ); + + // Is there a focused element that could be using the keyboard? + let activeElementIsCE = document.activeElement && document.activeElement.isContentEditable === true; + let activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test( document.activeElement.tagName ); + let activeElementIsNotes = document.activeElement && document.activeElement.className && /speaker-notes/i.test( document.activeElement.className); + + // Whitelist certain modifiers for slide navigation shortcuts + let keyCodeUsesModifier = [32, 37, 38, 39, 40, 78, 80, 191].indexOf( event.keyCode ) !== -1; + + // Prevent all other events when a modifier is pressed + let unusedModifier = !( keyCodeUsesModifier && event.shiftKey || event.altKey ) && + ( event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ); + + // Disregard the event if there's a focused element or a + // keyboard modifier key is present + if( activeElementIsCE || activeElementIsInput || activeElementIsNotes || unusedModifier ) return; + + // While paused only allow resume keyboard events; 'b', 'v', '.' + let resumeKeyCodes = [66,86,190,191,112]; + let key; + + // Custom key bindings for togglePause should be able to resume + if( typeof config.keyboard === 'object' ) { + for( key in config.keyboard ) { + if( config.keyboard[key] === 'togglePause' ) { + resumeKeyCodes.push( parseInt( key, 10 ) ); + } + } + } + + if( this.Reveal.isPaused() && resumeKeyCodes.indexOf( keyCode ) === -1 ) { + return false; + } + + // Use linear navigation if we're configured to OR if + // the presentation is one-dimensional + let useLinearMode = config.navigationMode === 'linear' || !this.Reveal.hasHorizontalSlides() || !this.Reveal.hasVerticalSlides(); + + let triggered = false; + + // 1. User defined key bindings + if( typeof config.keyboard === 'object' ) { + + for( key in config.keyboard ) { + + // Check if this binding matches the pressed key + if( parseInt( key, 10 ) === keyCode ) { + + let value = config.keyboard[ key ]; + + // Callback function + if( typeof value === 'function' ) { + value.apply( null, [ event ] ); + } + // String shortcuts to reveal.js API + else if( typeof value === 'string' && typeof this.Reveal[ value ] === 'function' ) { + this.Reveal[ value ].call(); + } + + triggered = true; + + } + + } + + } + + // 2. Registered custom key bindings + if( triggered === false ) { + + for( key in this.bindings ) { + + // Check if this binding matches the pressed key + if( parseInt( key, 10 ) === keyCode ) { + + let action = this.bindings[ key ].callback; + + // Callback function + if( typeof action === 'function' ) { + action.apply( null, [ event ] ); + } + // String shortcuts to reveal.js API + else if( typeof action === 'string' && typeof this.Reveal[ action ] === 'function' ) { + this.Reveal[ action ].call(); + } + + triggered = true; + } + } + } + + // 3. System defined key bindings + if( triggered === false ) { + + // Assume true and try to prove false + triggered = true; + + // P, PAGE UP + if( keyCode === 80 || keyCode === 33 ) { + this.Reveal.prev({skipFragments: event.altKey}); + } + // N, PAGE DOWN + else if( keyCode === 78 || keyCode === 34 ) { + this.Reveal.next({skipFragments: event.altKey}); + } + // H, LEFT + else if( keyCode === 72 || keyCode === 37 ) { + if( event.shiftKey ) { + this.Reveal.slide( 0 ); + } + else if( !this.Reveal.overview.isActive() && useLinearMode ) { + this.Reveal.prev({skipFragments: event.altKey}); + } + else { + this.Reveal.left({skipFragments: event.altKey}); + } + } + // L, RIGHT + else if( keyCode === 76 || keyCode === 39 ) { + if( event.shiftKey ) { + this.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 ); + } + else if( !this.Reveal.overview.isActive() && useLinearMode ) { + this.Reveal.next({skipFragments: event.altKey}); + } + else { + this.Reveal.right({skipFragments: event.altKey}); + } + } + // K, UP + else if( keyCode === 75 || keyCode === 38 ) { + if( event.shiftKey ) { + this.Reveal.slide( undefined, 0 ); + } + else if( !this.Reveal.overview.isActive() && useLinearMode ) { + this.Reveal.prev({skipFragments: event.altKey}); + } + else { + this.Reveal.up({skipFragments: event.altKey}); + } + } + // J, DOWN + else if( keyCode === 74 || keyCode === 40 ) { + if( event.shiftKey ) { + this.Reveal.slide( undefined, Number.MAX_VALUE ); + } + else if( !this.Reveal.overview.isActive() && useLinearMode ) { + this.Reveal.next({skipFragments: event.altKey}); + } + else { + this.Reveal.down({skipFragments: event.altKey}); + } + } + // HOME + else if( keyCode === 36 ) { + this.Reveal.slide( 0 ); + } + // END + else if( keyCode === 35 ) { + this.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 ); + } + // SPACE + else if( keyCode === 32 ) { + if( this.Reveal.overview.isActive() ) { + this.Reveal.overview.deactivate(); + } + if( event.shiftKey ) { + this.Reveal.prev({skipFragments: event.altKey}); + } + else { + this.Reveal.next({skipFragments: event.altKey}); + } + } + // TWO-SPOT, SEMICOLON, B, V, PERIOD, LOGITECH PRESENTER TOOLS "BLACK SCREEN" BUTTON + else if( [58, 59, 66, 86, 190].includes( keyCode ) || ( keyCode === 191 && !event.shiftKey ) ) { + this.Reveal.togglePause(); + } + // F + else if( keyCode === 70 ) { + enterFullscreen( config.embedded ? this.Reveal.getViewportElement() : document.documentElement ); + } + // A + else if( keyCode === 65 ) { + if( config.autoSlideStoppable ) { + this.Reveal.toggleAutoSlide( autoSlideWasPaused ); + } + } + // G + else if( keyCode === 71 ) { + if( config.jumpToSlide ) { + this.Reveal.toggleJumpToSlide(); + } + } + // ? + else if( keyCode === 191 && event.shiftKey ) { + this.Reveal.toggleHelp(); + } + // F1 + else if( keyCode === 112 ) { + this.Reveal.toggleHelp(); + } + else { + triggered = false; + } + + } + + // If the input resulted in a triggered action we should prevent + // the browsers default behavior + if( triggered ) { + event.preventDefault && event.preventDefault(); + } + // ESC or O key + else if( keyCode === 27 || keyCode === 79 ) { + if( this.Reveal.closeOverlay() === false ) { + this.Reveal.overview.toggle(); + } + + event.preventDefault && event.preventDefault(); + } + + // If auto-sliding is enabled we need to cue up + // another timeout + this.Reveal.cueAutoSlide(); + + } + +} diff --git a/public/bash/js/controllers/location.js b/public/bash/js/controllers/location.js new file mode 100644 index 0000000..2299d47 --- /dev/null +++ b/public/bash/js/controllers/location.js @@ -0,0 +1,247 @@ +/** + * Reads and writes the URL based on reveal.js' current state. + */ +export default class Location { + + // The minimum number of milliseconds that must pass between + // calls to history.replaceState + MAX_REPLACE_STATE_FREQUENCY = 1000 + + constructor( Reveal ) { + + this.Reveal = Reveal; + + // Delays updates to the URL due to a Chrome thumbnailer bug + this.writeURLTimeout = 0; + + this.replaceStateTimestamp = 0; + + this.onWindowHashChange = this.onWindowHashChange.bind( this ); + + } + + bind() { + + window.addEventListener( 'hashchange', this.onWindowHashChange, false ); + + } + + unbind() { + + window.removeEventListener( 'hashchange', this.onWindowHashChange, false ); + + } + + /** + * Returns the slide indices for the given hash link. + * + * @param {string} [hash] the hash string that we want to + * find the indices for + * + * @returns slide indices or null + */ + getIndicesFromHash( hash=window.location.hash, options={} ) { + + // Attempt to parse the hash as either an index or name + let name = hash.replace( /^#\/?/, '' ); + let bits = name.split( '/' ); + + // If the first bit is not fully numeric and there is a name we + // can assume that this is a named link + if( !/^[0-9]*$/.test( bits[0] ) && name.length ) { + let slide; + + let f; + + // Parse named links with fragments (#/named-link/2) + if( /\/[-\d]+$/g.test( name ) ) { + f = parseInt( name.split( '/' ).pop(), 10 ); + f = isNaN(f) ? undefined : f; + name = name.split( '/' ).shift(); + } + + // Ensure the named link is a valid HTML ID attribute + try { + slide = document + .getElementById( decodeURIComponent( name ) ) + .closest('.slides section'); + } + catch ( error ) { } + + if( slide ) { + return { ...this.Reveal.getIndices( slide ), f }; + } + } + else { + const config = this.Reveal.getConfig(); + let hashIndexBase = config.hashOneBasedIndex || options.oneBasedIndex ? 1 : 0; + + // Read the index components of the hash + let h = ( parseInt( bits[0], 10 ) - hashIndexBase ) || 0, + v = ( parseInt( bits[1], 10 ) - hashIndexBase ) || 0, + f; + + if( config.fragmentInURL ) { + f = parseInt( bits[2], 10 ); + if( isNaN( f ) ) { + f = undefined; + } + } + + return { h, v, f }; + } + + // The hash couldn't be parsed or no matching named link was found + return null + + } + + /** + * Reads the current URL (hash) and navigates accordingly. + */ + readURL() { + + const currentIndices = this.Reveal.getIndices(); + const newIndices = this.getIndicesFromHash(); + + if( newIndices ) { + if( ( newIndices.h !== currentIndices.h || newIndices.v !== currentIndices.v || newIndices.f !== undefined ) ) { + this.Reveal.slide( newIndices.h, newIndices.v, newIndices.f ); + } + } + // If no new indices are available, we're trying to navigate to + // a slide hash that does not exist + else { + this.Reveal.slide( currentIndices.h || 0, currentIndices.v || 0 ); + } + + } + + /** + * Updates the page URL (hash) to reflect the current + * state. + * + * @param {number} delay The time in ms to wait before + * writing the hash + */ + writeURL( delay ) { + + let config = this.Reveal.getConfig(); + let currentSlide = this.Reveal.getCurrentSlide(); + + // Make sure there's never more than one timeout running + clearTimeout( this.writeURLTimeout ); + + // If a delay is specified, timeout this call + if( typeof delay === 'number' ) { + this.writeURLTimeout = setTimeout( this.writeURL, delay ); + } + else if( currentSlide ) { + + let hash = this.getHash(); + + // If we're configured to push to history OR the history + // API is not available. + if( config.history ) { + window.location.hash = hash; + } + // If we're configured to reflect the current slide in the + // URL without pushing to history. + else if( config.hash ) { + // If the hash is empty, don't add it to the URL + if( hash === '/' ) { + this.debouncedReplaceState( window.location.pathname + window.location.search ); + } + else { + this.debouncedReplaceState( '#' + hash ); + } + } + // UPDATE: The below nuking of all hash changes breaks + // anchors on pages where reveal.js is running. Removed + // in 4.0. Why was it here in the first place? ¯\_(ツ)_/¯ + // + // If history and hash are both disabled, a hash may still + // be added to the URL by clicking on a href with a hash + // target. Counter this by always removing the hash. + // else { + // window.history.replaceState( null, null, window.location.pathname + window.location.search ); + // } + + } + + } + + replaceState( url ) { + + window.history.replaceState( null, null, url ); + this.replaceStateTimestamp = Date.now(); + + } + + debouncedReplaceState( url ) { + + clearTimeout( this.replaceStateTimeout ); + + if( Date.now() - this.replaceStateTimestamp > this.MAX_REPLACE_STATE_FREQUENCY ) { + this.replaceState( url ); + } + else { + this.replaceStateTimeout = setTimeout( () => this.replaceState( url ), this.MAX_REPLACE_STATE_FREQUENCY ); + } + + } + + /** + * Return a hash URL that will resolve to the given slide location. + * + * @param {HTMLElement} [slide=currentSlide] The slide to link to + */ + getHash( slide ) { + + let url = '/'; + + // Attempt to create a named link based on the slide's ID + let s = slide || this.Reveal.getCurrentSlide(); + let id = s ? s.getAttribute( 'id' ) : null; + if( id ) { + id = encodeURIComponent( id ); + } + + let index = this.Reveal.getIndices( slide ); + if( !this.Reveal.getConfig().fragmentInURL ) { + index.f = undefined; + } + + // If the current slide has an ID, use that as a named link, + // but we don't support named links with a fragment index + if( typeof id === 'string' && id.length ) { + url = '/' + id; + + // If there is also a fragment, append that at the end + // of the named link, like: #/named-link/2 + if( index.f >= 0 ) url += '/' + index.f; + } + // Otherwise use the /h/v index + else { + let hashIndexBase = this.Reveal.getConfig().hashOneBasedIndex ? 1 : 0; + if( index.h > 0 || index.v > 0 || index.f >= 0 ) url += index.h + hashIndexBase; + if( index.v > 0 || index.f >= 0 ) url += '/' + (index.v + hashIndexBase ); + if( index.f >= 0 ) url += '/' + index.f; + } + + return url; + + } + + /** + * Handler for the window level 'hashchange' event. + * + * @param {object} [event] + */ + onWindowHashChange( event ) { + + this.readURL(); + + } + +} \ No newline at end of file diff --git a/public/bash/js/controllers/notes.js b/public/bash/js/controllers/notes.js new file mode 100644 index 0000000..8af918c --- /dev/null +++ b/public/bash/js/controllers/notes.js @@ -0,0 +1,126 @@ +/** + * Handles the showing of speaker notes + */ +export default class Notes { + + constructor( Reveal ) { + + this.Reveal = Reveal; + + } + + render() { + + this.element = document.createElement( 'div' ); + this.element.className = 'speaker-notes'; + this.element.setAttribute( 'data-prevent-swipe', '' ); + this.element.setAttribute( 'tabindex', '0' ); + this.Reveal.getRevealElement().appendChild( this.element ); + + } + + /** + * Called when the reveal.js config is updated. + */ + configure( config, oldConfig ) { + + if( config.showNotes ) { + this.element.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' ); + } + + } + + /** + * Pick up notes from the current slide and display them + * to the viewer. + * + * @see {@link config.showNotes} + */ + update() { + + if( this.Reveal.getConfig().showNotes && + this.element && this.Reveal.getCurrentSlide() && + !this.Reveal.isScrollView() && + !this.Reveal.isPrintView() + ) { + this.element.innerHTML = this.getSlideNotes() || 'No notes on this slide.'; + } + + } + + /** + * Updates the visibility of the speaker notes sidebar that + * is used to share annotated slides. The notes sidebar is + * only visible if showNotes is true and there are notes on + * one or more slides in the deck. + */ + updateVisibility() { + + if( this.Reveal.getConfig().showNotes && + this.hasNotes() && + !this.Reveal.isScrollView() && + !this.Reveal.isPrintView() + ) { + this.Reveal.getRevealElement().classList.add( 'show-notes' ); + } + else { + this.Reveal.getRevealElement().classList.remove( 'show-notes' ); + } + + } + + /** + * Checks if there are speaker notes for ANY slide in the + * presentation. + */ + hasNotes() { + + return this.Reveal.getSlidesElement().querySelectorAll( '[data-notes], aside.notes' ).length > 0; + + } + + /** + * Checks if this presentation is running inside of the + * speaker notes window. + * + * @return {boolean} + */ + isSpeakerNotesWindow() { + + return !!window.location.search.match( /receiver/gi ); + + } + + /** + * Retrieves the speaker notes from a slide. Notes can be + * defined in two ways: + * 1. As a data-notes attribute on the slide
+ * 2. With