├── .gitignore
├── __presentation-slides
├── .github
│ ├── FUNDING.yml
│ ├── workflows
│ │ └── js.yml
│ └── CONTRIBUTING.md
├── test
│ ├── assets
│ │ ├── external-script-a.js
│ │ ├── external-script-b.js
│ │ ├── external-script-c.js
│ │ └── external-script-d.js
│ ├── simple.md
│ ├── test-dependencies.html
│ ├── test-grid-navigation.html
│ ├── test-dependencies-async.html
│ ├── test-pdf.html
│ ├── test-multiple-instances-es5.html
│ ├── test-destroy.html
│ ├── test-multiple-instances.html
│ ├── test-plugins.html
│ ├── test-iframes.html
│ ├── test-iframe-backgrounds.html
│ ├── test-state.html
│ ├── test-scroll.html
│ └── test-auto-animate.html
├── .npmignore
├── examples
│ ├── assets
│ │ ├── beeping.txt
│ │ ├── image1.png
│ │ ├── image2.png
│ │ └── beeping.wav
│ ├── markdown.md
│ ├── barebones.html
│ ├── media.html
│ ├── transitions.html
│ ├── multiple-presentations.html
│ ├── backgrounds.html
│ ├── scroll.html
│ └── layout-helpers.html
├── dist
│ ├── theme
│ │ └── fonts
│ │ │ ├── league-gothic
│ │ │ ├── LICENSE
│ │ │ ├── league-gothic.eot
│ │ │ ├── league-gothic.ttf
│ │ │ ├── league-gothic.woff
│ │ │ └── league-gothic.css
│ │ │ └── source-sans-pro
│ │ │ ├── source-sans-pro-italic.eot
│ │ │ ├── source-sans-pro-italic.ttf
│ │ │ ├── source-sans-pro-italic.woff
│ │ │ ├── source-sans-pro-regular.eot
│ │ │ ├── source-sans-pro-regular.ttf
│ │ │ ├── source-sans-pro-regular.woff
│ │ │ ├── source-sans-pro-semibold.eot
│ │ │ ├── source-sans-pro-semibold.ttf
│ │ │ ├── source-sans-pro-semibold.woff
│ │ │ ├── source-sans-pro-semibolditalic.eot
│ │ │ ├── source-sans-pro-semibolditalic.ttf
│ │ │ ├── source-sans-pro-semibolditalic.woff
│ │ │ ├── source-sans-pro.css
│ │ │ └── LICENSE
│ └── reset.css
├── .gitignore
├── images
│ ├── ebook.jpg
│ ├── discord.png
│ ├── background.png
│ ├── css-box-model.png
│ ├── dom_structure.png
│ ├── html_timeline.png
│ ├── promotional.png
│ ├── html_evolution.png
│ ├── browser_rendering.png
│ ├── html_css_javascript_interaction.png
│ └── html_css_javascript_project_structure.png
├── js
│ ├── utils
│ │ ├── device.js
│ │ ├── constants.js
│ │ ├── loader.js
│ │ └── color.js
│ ├── index.js
│ ├── controllers
│ │ ├── focus.js
│ │ ├── progress.js
│ │ ├── notes.js
│ │ ├── pointer.js
│ │ ├── slidenumber.js
│ │ └── jumptoslide.js
│ └── components
│ │ └── playback.js
├── plugin
│ ├── math
│ │ ├── plugin.js
│ │ ├── mathjax2.js
│ │ ├── mathjax3.js
│ │ ├── katex.js
│ │ ├── math.esm.js
│ │ └── math.js
│ ├── highlight
│ │ ├── monokai.css
│ │ └── zenburn.css
│ ├── search
│ │ ├── search.esm.js
│ │ └── search.js
│ └── zoom
│ │ ├── zoom.esm.js
│ │ └── zoom.js
├── README.md
├── LICENSE
├── css
│ ├── theme
│ │ ├── source
│ │ │ ├── night.scss
│ │ │ ├── league.scss
│ │ │ ├── serif.scss
│ │ │ ├── black.scss
│ │ │ ├── white.scss
│ │ │ ├── simple.scss
│ │ │ ├── moon.scss
│ │ │ ├── sky.scss
│ │ │ ├── beige.scss
│ │ │ ├── black-contrast.scss
│ │ │ ├── white-contrast.scss
│ │ │ ├── solarized.scss
│ │ │ ├── blood.scss
│ │ │ └── dracula.scss
│ │ ├── template
│ │ │ ├── exposer.scss
│ │ │ ├── settings.scss
│ │ │ └── mixins.scss
│ │ └── README.md
│ ├── layout.scss
│ └── print
│ │ ├── pdf.scss
│ │ └── paper.scss
└── package.json
├── images
├── ebook.jpg
├── discord.png
├── promotional.png
├── css-box-model.png
├── dom_structure.png
├── html_evolution.png
├── html_timeline.png
├── browser_rendering.png
├── html_css_javascript_interaction.png
└── html_css_javascript_project_structure.png
├── __extra-resources
├── file-api.pdf
├── webrtc-api.pdf
├── fallback-fix.pdf
├── screen-readers.pdf
├── canonical-links.pdf
├── mobile-simulator.pdf
├── meta-tags-checking.pdf
├── caching-on-meta-problems.pdf
├── offline-testing-and-docs.pdf
├── online-tutorials-guides.pdf
├── developer-tools-extensions.pdf
├── media-capture-streams-api.pdf
├── our-community-social-media.pdf
├── cross-browser-compatibility.pdf
├── online-courses-learning-platforms.pdf
├── community-forums-discussion-platforms.pdf
├── webrtc-api.md
├── online-tutorials-guides.md
├── offline-testing-and-docs.md
├── preload-as.md
├── developer-tools-extensions.md
├── media-capture-streams-api.md
├── community-forums-discussion-platforms.md
├── file-api.md
├── online-courses-learning-platforms.md
├── our-community-social-media.md
├── cross-browser-compatibility.md
└── javascript-frameworks.md
├── .editorconfig
└── .github
└── FUNDING.yml
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .qodo
3 |
--------------------------------------------------------------------------------
/__presentation-slides/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [hakimel]
2 |
--------------------------------------------------------------------------------
/__presentation-slides/test/assets/external-script-a.js:
--------------------------------------------------------------------------------
1 | window.externalScriptSequence += 'A';
--------------------------------------------------------------------------------
/__presentation-slides/test/assets/external-script-b.js:
--------------------------------------------------------------------------------
1 | window.externalScriptSequence += 'B';
--------------------------------------------------------------------------------
/__presentation-slides/test/assets/external-script-c.js:
--------------------------------------------------------------------------------
1 | window.externalScriptSequence += 'C';
--------------------------------------------------------------------------------
/__presentation-slides/test/assets/external-script-d.js:
--------------------------------------------------------------------------------
1 | window.externalScriptSequence += 'D';
--------------------------------------------------------------------------------
/__presentation-slides/.npmignore:
--------------------------------------------------------------------------------
1 | /test
2 | /examples
3 | .github
4 | .sass-cache
5 | gulpfile.js
6 |
--------------------------------------------------------------------------------
/images/ebook.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/ebook.jpg
--------------------------------------------------------------------------------
/images/discord.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/discord.png
--------------------------------------------------------------------------------
/__presentation-slides/examples/assets/beeping.txt:
--------------------------------------------------------------------------------
1 | Source: https://freesound.org/people/fennelliott/sounds/379419/
2 | License: CC0 (public domain)
--------------------------------------------------------------------------------
/images/promotional.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/promotional.png
--------------------------------------------------------------------------------
/images/css-box-model.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/css-box-model.png
--------------------------------------------------------------------------------
/images/dom_structure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/dom_structure.png
--------------------------------------------------------------------------------
/images/html_evolution.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/html_evolution.png
--------------------------------------------------------------------------------
/images/html_timeline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/html_timeline.png
--------------------------------------------------------------------------------
/__presentation-slides/test/simple.md:
--------------------------------------------------------------------------------
1 | ## Slide 1.1
2 |
3 | ```js
4 | var a = 1;
5 | ```
6 |
7 |
8 | ## Slide 1.2
9 |
10 |
11 |
12 | ## Slide 2
--------------------------------------------------------------------------------
/images/browser_rendering.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/browser_rendering.png
--------------------------------------------------------------------------------
/__extra-resources/file-api.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/file-api.pdf
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/league-gothic/LICENSE:
--------------------------------------------------------------------------------
1 | SIL Open Font License (OFL)
2 | http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
3 |
--------------------------------------------------------------------------------
/__extra-resources/webrtc-api.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/webrtc-api.pdf
--------------------------------------------------------------------------------
/__extra-resources/fallback-fix.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/fallback-fix.pdf
--------------------------------------------------------------------------------
/__extra-resources/screen-readers.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/screen-readers.pdf
--------------------------------------------------------------------------------
/__presentation-slides/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | *.iml
3 | *.iws
4 | *.eml
5 | out/
6 | .DS_Store
7 | .svn
8 | log/*.log
9 | tmp/**
10 | node_modules/
11 | .sass-cache
--------------------------------------------------------------------------------
/__extra-resources/canonical-links.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/canonical-links.pdf
--------------------------------------------------------------------------------
/__extra-resources/mobile-simulator.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/mobile-simulator.pdf
--------------------------------------------------------------------------------
/__presentation-slides/images/ebook.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/ebook.jpg
--------------------------------------------------------------------------------
/__extra-resources/meta-tags-checking.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/meta-tags-checking.pdf
--------------------------------------------------------------------------------
/__presentation-slides/images/discord.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/discord.png
--------------------------------------------------------------------------------
/__presentation-slides/images/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/background.png
--------------------------------------------------------------------------------
/images/html_css_javascript_interaction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/html_css_javascript_interaction.png
--------------------------------------------------------------------------------
/__extra-resources/caching-on-meta-problems.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/caching-on-meta-problems.pdf
--------------------------------------------------------------------------------
/__extra-resources/offline-testing-and-docs.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/offline-testing-and-docs.pdf
--------------------------------------------------------------------------------
/__extra-resources/online-tutorials-guides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/online-tutorials-guides.pdf
--------------------------------------------------------------------------------
/__presentation-slides/images/css-box-model.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/css-box-model.png
--------------------------------------------------------------------------------
/__presentation-slides/images/dom_structure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/dom_structure.png
--------------------------------------------------------------------------------
/__presentation-slides/images/html_timeline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/html_timeline.png
--------------------------------------------------------------------------------
/__presentation-slides/images/promotional.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/promotional.png
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 | [*]
3 | charset = utf-8
4 | end_of_line = lf
5 | insert_final_newline = true
6 | trim_trailing_whitespace = true
7 | indent_style = tab
8 | indent_size = 2
9 |
--------------------------------------------------------------------------------
/__extra-resources/developer-tools-extensions.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/developer-tools-extensions.pdf
--------------------------------------------------------------------------------
/__extra-resources/media-capture-streams-api.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/media-capture-streams-api.pdf
--------------------------------------------------------------------------------
/__extra-resources/our-community-social-media.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/our-community-social-media.pdf
--------------------------------------------------------------------------------
/__presentation-slides/examples/assets/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/examples/assets/image1.png
--------------------------------------------------------------------------------
/__presentation-slides/examples/assets/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/examples/assets/image2.png
--------------------------------------------------------------------------------
/__presentation-slides/images/html_evolution.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/html_evolution.png
--------------------------------------------------------------------------------
/images/html_css_javascript_project_structure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/images/html_css_javascript_project_structure.png
--------------------------------------------------------------------------------
/__extra-resources/cross-browser-compatibility.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/cross-browser-compatibility.pdf
--------------------------------------------------------------------------------
/__presentation-slides/examples/assets/beeping.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/examples/assets/beeping.wav
--------------------------------------------------------------------------------
/__presentation-slides/images/browser_rendering.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/browser_rendering.png
--------------------------------------------------------------------------------
/__extra-resources/online-courses-learning-platforms.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/online-courses-learning-platforms.pdf
--------------------------------------------------------------------------------
/__extra-resources/community-forums-discussion-platforms.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__extra-resources/community-forums-discussion-platforms.pdf
--------------------------------------------------------------------------------
/__presentation-slides/images/html_css_javascript_interaction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/html_css_javascript_interaction.png
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/league-gothic/league-gothic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/league-gothic/league-gothic.eot
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/league-gothic/league-gothic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/league-gothic/league-gothic.ttf
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/league-gothic/league-gothic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/league-gothic/league-gothic.woff
--------------------------------------------------------------------------------
/__presentation-slides/images/html_css_javascript_project_structure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/images/html_css_javascript_project_structure.png
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ditectrev/Awesome-HTML-Book-Course-HyperText-Markup-Language-HTML/HEAD/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff
--------------------------------------------------------------------------------
/__extra-resources/webrtc-api.md:
--------------------------------------------------------------------------------
1 | # WebRTC API
2 |
3 | [Learn more about the WebRTC API and how to play with different settings using `getUserMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia). This link provides detailed documentation and examples to help you explore the API further.
4 |
--------------------------------------------------------------------------------
/__presentation-slides/js/utils/device.js:
--------------------------------------------------------------------------------
1 | const UA = navigator.userAgent;
2 |
3 | export const isMobile = /(iphone|ipod|ipad|android)/gi.test( UA ) ||
4 | ( navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 ); // iPadOS
5 |
6 | export const isChrome = /chrome/i.test( UA ) && !/edge/i.test( UA );
7 |
8 | export const isAndroid = /android/gi.test( UA );
--------------------------------------------------------------------------------
/__extra-resources/online-tutorials-guides.md:
--------------------------------------------------------------------------------
1 | # Online Tutorials and Guides
2 |
3 | During the recording, I showed you multiple resources for online tutorials and guides you can use as additional resources. Here are the links:
4 |
5 | - [MDN Web Docs (Mozilla Developer Network)](https://developer.mozilla.org/)
6 | - [W3Schools](https://www.w3schools.com/)
7 | - [web.dev](https://web.dev/)
8 |
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/league-gothic/league-gothic.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'League Gothic';
3 | src: url('./league-gothic.eot');
4 | src: url('./league-gothic.eot?#iefix') format('embedded-opentype'),
5 | url('./league-gothic.woff') format('woff'),
6 | url('./league-gothic.ttf') format('truetype');
7 |
8 | font-weight: normal;
9 | font-style: normal;
10 | }
11 |
--------------------------------------------------------------------------------
/__presentation-slides/plugin/math/plugin.js:
--------------------------------------------------------------------------------
1 | import {KaTeX} from "./katex";
2 | import {MathJax2} from "./mathjax2";
3 | import {MathJax3} from "./mathjax3";
4 |
5 | const defaultTypesetter = MathJax2;
6 |
7 | /*!
8 | * This plugin is a wrapper for the MathJax2,
9 | * MathJax3 and KaTeX typesetter plugins.
10 | */
11 | export default Plugin = Object.assign( defaultTypesetter(), {
12 | KaTeX,
13 | MathJax2,
14 | MathJax3
15 | } );
--------------------------------------------------------------------------------
/__extra-resources/offline-testing-and-docs.md:
--------------------------------------------------------------------------------
1 | # Offline Testing and Documentation for Service Workers
2 |
3 | [Learn about Service Workers](https://web.dev/learn/pwa/service-workers)
4 |
5 | To simulate offline testing on your own machine, aside from disabling Wi-Fi, you can use Chrome DevTools. Open the DevTools, navigate to the **Network** tab, and select **"Offline"** from the dropdown menu where **"No throttling"** is selected by default.
6 |
--------------------------------------------------------------------------------
/__presentation-slides/README.md:
--------------------------------------------------------------------------------
1 | # Presentation Theme
2 |
3 | This repository acts as a presentation theme for our courses.
4 |
5 | ## Instruction
6 |
7 | 1. `git clone https://github.com/Ditectrev/__presentation-slides` in the repository of our book & course, and keep it like that without changing the name, so the slides are always visible on top of the list of fiels & folders.
8 | 2. Follow [https://revealjs.com](https://revealjs.com) how to use the software to make presentations.
9 |
--------------------------------------------------------------------------------
/__presentation-slides/examples/markdown.md:
--------------------------------------------------------------------------------
1 | # Markdown Demo
2 |
3 |
4 |
5 | ## External 1.1
6 |
7 | Content 1.1
8 |
9 | Note: This will only appear in the speaker notes window.
10 |
11 |
12 | ## External 1.2
13 |
14 | Content 1.2
15 |
16 |
17 |
18 | ## External 2
19 |
20 | Content 2.1
21 |
22 |
23 |
24 | ## External 3.1
25 |
26 | Content 3.1
27 |
28 |
29 | ## External 3.2
30 |
31 | Content 3.2
32 |
33 |
34 | ## External 3.3 (Image)
35 |
36 | 
37 |
38 |
39 | ## External 3.4 (Math)
40 |
41 | `\[ J(\theta_0,\theta_1) = \sum_{i=0} \]`
42 |
--------------------------------------------------------------------------------
/__extra-resources/preload-as.md:
--------------------------------------------------------------------------------
1 | # Issue with Code
2 |
3 | We apologize for the inconvenience caused during the recording when the code example didn't work as expected.
4 | This issue has been identified as a bug and has been reported to CodeSandbox.
5 | You can track the progress of the issue here: [CodeSandbox Issue #8610](https://github.com/codesandbox/codesandbox-client/issues/8610).
6 |
7 | For further reference and to deepen your understanding, you can consult the relevant documentation on MDN:
8 | [MDN Web Docs - rel="preload"](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/preload).
9 |
10 | Thank you for your patience and understanding!
11 |
--------------------------------------------------------------------------------
/__presentation-slides/.github/workflows/js.yml:
--------------------------------------------------------------------------------
1 | name: tests
2 |
3 | on:
4 | - push
5 |
6 | permissions:
7 | contents: read
8 |
9 | jobs:
10 | build:
11 | runs-on: ubuntu-latest
12 |
13 | strategy:
14 | matrix:
15 | node-version:
16 | - 18
17 | - 20
18 |
19 | steps:
20 | - uses: actions/checkout@v4
21 |
22 | - name: Use Node.js ${{ matrix.node-version }}
23 | uses: actions/setup-node@v4
24 | with:
25 | node-version: ${{ matrix.node-version }}
26 |
27 | - run: npm install
28 | - run: npm run build --if-present
29 | - run: npm test
30 | env:
31 | CI: true
32 |
--------------------------------------------------------------------------------
/__extra-resources/developer-tools-extensions.md:
--------------------------------------------------------------------------------
1 | # Developer Tools Extensions
2 |
3 | During the recording, the website [StatCounter](https://gs.statcounter.com/) was shared to showcase the market share for browsers such as Chrome, Edge, Firefox, Opera, and Safari.
4 |
5 | ## Additional Uses of StatCounter
6 |
7 | StatCounter is also used for:
8 |
9 | - Conducting market research on browser usage trends.
10 | - Analyzing operating system market share.
11 | - Tracking mobile device and desktop usage statistics.
12 | - Understanding search engine popularity across regions.
13 | - Monitoring screen resolution trends for responsive design considerations.
14 | - Gaining insights into technology adoption and user behavior.
15 |
16 | This data can help developers and businesses make informed decisions about platform support and optimization.
17 |
--------------------------------------------------------------------------------
/__presentation-slides/examples/barebones.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | reveal.js - Barebones
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Barebones Presentation
15 | This example contains the bare minimum includes and markup required to run a reveal.js presentation.
16 |
17 |
18 |
19 | No Theme
20 | There's no theme included, so it will fall back on browser defaults.
21 |
22 |
23 |
24 |
25 |
26 |
27 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/__extra-resources/media-capture-streams-api.md:
--------------------------------------------------------------------------------
1 | # Media Capture and Streams API - Additional Resources
2 |
3 | Here are some useful documentation links we visited during the recording. Feel free to explore and experiment with the options:
4 |
5 | 1. [MDN: HTML Attribute Reference - `accept`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/accept)
6 | 2. [MDN: HTML Attribute Reference - `capture`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/capture)
7 |
8 | Additionally, we referred to a popular Stack Overflow discussion where it was clarified that the `capture` attribute does not require the value `"camera"`:
9 |
10 | - [Stack Overflow: HTML5 Input Type File Accept Image Capture Camera Display as Image](https://stackoverflow.com/questions/23916566/html5-input-type-file-accept-image-capture-camera-display-as-image-rat)
11 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: Ditectrev
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
12 | polar: # Replace with a single Polar username
13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
15 |
--------------------------------------------------------------------------------
/__extra-resources/community-forums-discussion-platforms.md:
--------------------------------------------------------------------------------
1 | # Community Forums and Discussion Platforms
2 |
3 | When it comes to connecting with other developers, sharing knowledge, and solving problems, there are several great platforms to explore:
4 |
5 | ## [Stack Overflow](https://stackoverflow.com/)
6 |
7 | Stack Overflow is the go-to platform for developers worldwide. It’s a question-and-answer site where you can ask technical questions, share solutions, and learn from a vast community of experienced developers.
8 |
9 | ## [DEV Community](https://dev.to/)
10 |
11 | DEV Community is a fantastic alternative to [Medium](https://medium.com), but specifically tailored for developers. It’s a place to share articles, tutorials, and insights, as well as engage in discussions with like-minded individuals.
12 |
13 | Both platforms are excellent resources for growing your skills and staying connected with the developer community.
14 |
--------------------------------------------------------------------------------
/__extra-resources/file-api.md:
--------------------------------------------------------------------------------
1 | # File API and Related Topics
2 |
3 | During the recording, I mentioned the **File API** class and referred to the MDN documentation for the ` ` element. You can read more about it here: [MDN Docs - ` {
9 |
10 | const script = document.createElement( 'script' );
11 | script.type = 'text/javascript';
12 | script.async = false;
13 | script.defer = false;
14 | script.src = url;
15 |
16 | if( typeof callback === 'function' ) {
17 |
18 | // Success callback
19 | script.onload = script.onreadystatechange = event => {
20 | if( event.type === 'load' || /loaded|complete/.test( script.readyState ) ) {
21 |
22 | // Kill event listeners
23 | script.onload = script.onreadystatechange = script.onerror = null;
24 |
25 | callback();
26 |
27 | }
28 | };
29 |
30 | // Error callback
31 | script.onerror = err => {
32 |
33 | // Kill event listeners
34 | script.onload = script.onreadystatechange = script.onerror = null;
35 |
36 | callback( new Error( 'Failed loading script: ' + script.src + '\n' + err ) );
37 |
38 | };
39 |
40 | }
41 |
42 | // Append the script at the end of
43 | const head = document.querySelector( 'head' );
44 | head.insertBefore( script, head.lastChild );
45 |
46 | }
--------------------------------------------------------------------------------
/__presentation-slides/plugin/highlight/zenburn.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov
4 | based on dark.css by Ivan Sagalaev
5 |
6 | */
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #3f3f3f;
13 | color: #dcdcdc;
14 | }
15 |
16 | .hljs-keyword,
17 | .hljs-selector-tag,
18 | .hljs-tag {
19 | color: #e3ceab;
20 | }
21 |
22 | .hljs-template-tag {
23 | color: #dcdcdc;
24 | }
25 |
26 | .hljs-number {
27 | color: #8cd0d3;
28 | }
29 |
30 | .hljs-variable,
31 | .hljs-template-variable,
32 | .hljs-attribute {
33 | color: #efdcbc;
34 | }
35 |
36 | .hljs-literal {
37 | color: #efefaf;
38 | }
39 |
40 | .hljs-subst {
41 | color: #8f8f8f;
42 | }
43 |
44 | .hljs-title,
45 | .hljs-name,
46 | .hljs-selector-id,
47 | .hljs-selector-class,
48 | .hljs-section,
49 | .hljs-type {
50 | color: #efef8f;
51 | }
52 |
53 | .hljs-symbol,
54 | .hljs-bullet,
55 | .hljs-link {
56 | color: #dca3a3;
57 | }
58 |
59 | .hljs-deletion,
60 | .hljs-string,
61 | .hljs-built_in,
62 | .hljs-builtin-name {
63 | color: #cc9393;
64 | }
65 |
66 | .hljs-addition,
67 | .hljs-comment,
68 | .hljs-quote,
69 | .hljs-meta {
70 | color: #7f9f7f;
71 | }
72 |
73 |
74 | .hljs-emphasis {
75 | font-style: italic;
76 | }
77 |
78 | .hljs-strong {
79 | font-weight: bold;
80 | }
81 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/league.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * League theme for reveal.js.
3 | *
4 | * This was the default theme pre-3.0.0.
5 | *
6 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
7 | */
8 |
9 |
10 | // Default mixins and settings -----------------
11 | @import "../template/mixins";
12 | @import "../template/settings";
13 | // ---------------------------------------------
14 |
15 |
16 |
17 | // Include theme-specific fonts
18 | @import url(./fonts/league-gothic/league-gothic.css);
19 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
20 |
21 | // Override theme settings (see ../template/settings.scss)
22 | $headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2);
23 | $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);
24 |
25 | // Background generator
26 | @mixin bodyBackground() {
27 | @include radial-gradient( rgba(28,30,32,1), rgba(85,90,95,1) );
28 | }
29 |
30 | // Change text colors against light slide backgrounds
31 | @include light-bg-text-color(#222);
32 |
33 |
34 | // Theme template ------------------------------
35 | @import "../template/theme";
36 | // ---------------------------------------------
37 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/serif.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * A simple theme for reveal.js presentations, similar
3 | * to the default theme. The accent color is brown.
4 | *
5 | * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed.
6 | */
7 |
8 |
9 | // Default mixins and settings -----------------
10 | @use "sass:color";
11 | @import "../template/mixins";
12 | @import "../template/settings";
13 | // ---------------------------------------------
14 |
15 |
16 |
17 | // Override theme settings (see ../template/settings.scss)
18 | $mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
19 | $mainColor: #000;
20 | $headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
21 | $headingColor: #383D3D;
22 | $headingTextShadow: none;
23 | $headingTextTransform: none;
24 | $backgroundColor: #F0F1EB;
25 | $linkColor: #51483D;
26 | $linkColorHover: color.scale( $linkColor, $lightness: 20% );
27 | $selectionBackgroundColor: #26351C;
28 |
29 | $overlayElementBgColor: 0, 0, 0;
30 | $overlayElementFgColor: 240, 240, 240;
31 |
32 | .reveal a {
33 | line-height: 1.3em;
34 | }
35 |
36 | // Change text colors against dark slide backgrounds
37 | @include dark-bg-text-color(#fff);
38 |
39 |
40 | // Theme template ------------------------------
41 | @import "../template/theme";
42 | // ---------------------------------------------
43 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/template/exposer.scss:
--------------------------------------------------------------------------------
1 | // Exposes theme's variables for easy re-use in CSS for plugin authors
2 |
3 | @use "sass:color";
4 |
5 | :root {
6 | --r-background-color: #{$backgroundColor};
7 | --r-main-font: #{$mainFont};
8 | --r-main-font-size: #{$mainFontSize};
9 | --r-main-color: #{$mainColor};
10 | --r-block-margin: #{$blockMargin};
11 | --r-heading-margin: #{$headingMargin};
12 | --r-heading-font: #{$headingFont};
13 | --r-heading-color: #{$headingColor};
14 | --r-heading-line-height: #{$headingLineHeight};
15 | --r-heading-letter-spacing: #{$headingLetterSpacing};
16 | --r-heading-text-transform: #{$headingTextTransform};
17 | --r-heading-text-shadow: #{$headingTextShadow};
18 | --r-heading-font-weight: #{$headingFontWeight};
19 | --r-heading1-text-shadow: #{$heading1TextShadow};
20 | --r-heading1-size: #{$heading1Size};
21 | --r-heading2-size: #{$heading2Size};
22 | --r-heading3-size: #{$heading3Size};
23 | --r-heading4-size: #{$heading4Size};
24 | --r-code-font: #{$codeFont};
25 | --r-link-color: #{$linkColor};
26 | --r-link-color-dark: #{color.scale( $linkColor, $lightness: -15% )};
27 | --r-link-color-hover: #{$linkColorHover};
28 | --r-selection-background-color: #{$selectionBackgroundColor};
29 | --r-selection-color: #{$selectionColor};
30 | --r-overlay-element-bg-color: #{$overlayElementBgColor};
31 | --r-overlay-element-fg-color: #{$overlayElementFgColor};
32 | }
33 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-dependencies.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Dependencies
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/black.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Black theme for reveal.js. This is the opposite of the 'white' theme.
3 | *
4 | * By Hakim El Hattab, http://hakim.se
5 | */
6 |
7 |
8 | // Default mixins and settings -----------------
9 | @use "sass:color";
10 | @import "../template/mixins";
11 | @import "../template/settings";
12 | // ---------------------------------------------
13 |
14 |
15 | // Include theme-specific fonts
16 | @import url(./fonts/source-sans-pro/source-sans-pro.css);
17 |
18 |
19 | // Override theme settings (see ../template/settings.scss)
20 | $backgroundColor: #191919;
21 |
22 | $mainColor: #fff;
23 | $headingColor: #fff;
24 |
25 | $mainFontSize: 42px;
26 | $mainFont: 'Source Sans Pro', Helvetica, sans-serif;
27 | $headingFont: 'Source Sans Pro', Helvetica, sans-serif;
28 | $headingTextShadow: none;
29 | $headingLetterSpacing: normal;
30 | $headingTextTransform: uppercase;
31 | $headingFontWeight: 600;
32 | $linkColor: #42affa;
33 | $linkColorHover: color.scale( $linkColor, $lightness: 15% );
34 | $selectionBackgroundColor: rgba( $linkColor, 0.75 );
35 |
36 | $heading1Size: 2.5em;
37 | $heading2Size: 1.6em;
38 | $heading3Size: 1.3em;
39 | $heading4Size: 1.0em;
40 |
41 | // Change text colors against light slide backgrounds
42 | @include light-bg-text-color(#222);
43 |
44 |
45 | // Theme template ------------------------------
46 | @import "../template/theme";
47 | // ---------------------------------------------
48 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/template/settings.scss:
--------------------------------------------------------------------------------
1 | @use "sass:color";
2 |
3 | // Base settings for all themes that can optionally be
4 | // overridden by the super-theme
5 |
6 | // Background of the presentation
7 | $backgroundColor: #2b2b2b;
8 |
9 | // Primary/body text
10 | $mainFont: 'Lato', sans-serif;
11 | $mainFontSize: 40px;
12 | $mainColor: #eee;
13 |
14 | // Vertical spacing between blocks of text
15 | $blockMargin: 20px;
16 |
17 | // Headings
18 | $headingMargin: 0 0 $blockMargin 0;
19 | $headingFont: 'League Gothic', Impact, sans-serif;
20 | $headingColor: #eee;
21 | $headingLineHeight: 1.2;
22 | $headingLetterSpacing: normal;
23 | $headingTextTransform: uppercase;
24 | $headingTextShadow: none;
25 | $headingFontWeight: normal;
26 | $heading1TextShadow: $headingTextShadow;
27 |
28 | $heading1Size: 3.77em;
29 | $heading2Size: 2.11em;
30 | $heading3Size: 1.55em;
31 | $heading4Size: 1.00em;
32 |
33 | $codeFont: monospace;
34 |
35 | // Links and actions
36 | $linkColor: #13DAEC;
37 | $linkColorHover: color.scale( $linkColor, $lightness: 20% );
38 |
39 | // Text selection
40 | $selectionBackgroundColor: #FF5E99;
41 | $selectionColor: #fff;
42 |
43 | // Colors used for UI elements that are overlaid on top of
44 | // the presentation
45 | $overlayElementBgColor: 240, 240, 240;
46 | $overlayElementFgColor: 0, 0, 0;
47 |
48 | // Generates the presentation background, can be overridden
49 | // to return a background image or gradient
50 | @mixin bodyBackground() {
51 | background: $backgroundColor;
52 | }
53 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/white.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * White theme for reveal.js. This is the opposite of the 'black' theme.
3 | *
4 | * By Hakim El Hattab, http://hakim.se
5 | */
6 |
7 |
8 | // Default mixins and settings -----------------
9 | @use "sass:color";
10 | @import "../template/mixins";
11 | @import "../template/settings";
12 | // ---------------------------------------------
13 |
14 |
15 | // Include theme-specific fonts
16 | @import url(./fonts/source-sans-pro/source-sans-pro.css);
17 |
18 |
19 | // Override theme settings (see ../template/settings.scss)
20 | $backgroundColor: #fff;
21 |
22 | $mainColor: #222;
23 | $headingColor: #222;
24 |
25 | $mainFontSize: 42px;
26 | $mainFont: 'Source Sans Pro', Helvetica, sans-serif;
27 | $headingFont: 'Source Sans Pro', Helvetica, sans-serif;
28 | $headingTextShadow: none;
29 | $headingLetterSpacing: normal;
30 | $headingTextTransform: uppercase;
31 | $headingFontWeight: 600;
32 | $linkColor: #2a76dd;
33 | $linkColorHover: color.scale( $linkColor, $lightness: 15% );
34 | $selectionBackgroundColor: color.scale( $linkColor, $lightness: 25% );
35 |
36 | $heading1Size: 2.5em;
37 | $heading2Size: 1.6em;
38 | $heading3Size: 1.3em;
39 | $heading4Size: 1.0em;
40 |
41 | $overlayElementBgColor: 0, 0, 0;
42 | $overlayElementFgColor: 240, 240, 240;
43 |
44 | // Change text colors against dark slide backgrounds
45 | @include dark-bg-text-color(#fff);
46 |
47 |
48 | // Theme template ------------------------------
49 | @import "../template/theme";
50 | // ---------------------------------------------
51 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/simple.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * A simple theme for reveal.js presentations, similar
3 | * to the default theme. The accent color is darkblue.
4 | *
5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
7 | */
8 |
9 |
10 | // Default mixins and settings -----------------
11 | @use "sass:color";
12 | @import "../template/mixins";
13 | @import "../template/settings";
14 | // ---------------------------------------------
15 |
16 |
17 |
18 | // Include theme-specific fonts
19 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
20 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
21 |
22 |
23 | // Override theme settings (see ../template/settings.scss)
24 | $mainFont: 'Lato', sans-serif;
25 | $mainColor: #000;
26 | $headingFont: 'News Cycle', Impact, sans-serif;
27 | $headingColor: #000;
28 | $headingTextShadow: none;
29 | $headingTextTransform: none;
30 | $backgroundColor: #fff;
31 | $linkColor: #00008B;
32 | $linkColorHover: color.scale( $linkColor, $lightness: 20% );
33 | $selectionBackgroundColor: rgba(0, 0, 0, 0.99);
34 |
35 | $overlayElementBgColor: 0, 0, 0;
36 | $overlayElementFgColor: 240, 240, 240;
37 |
38 | // Change text colors against dark slide backgrounds
39 | @include dark-bg-text-color(#fff);
40 |
41 |
42 | // Theme template ------------------------------
43 | @import "../template/theme";
44 | // ---------------------------------------------
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/moon.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Solarized Dark theme for reveal.js.
3 | * Author: Achim Staebler
4 | */
5 |
6 |
7 | // Default mixins and settings -----------------
8 | @use "sass:color";
9 | @import "../template/mixins";
10 | @import "../template/settings";
11 | // ---------------------------------------------
12 |
13 |
14 |
15 | // Include theme-specific fonts
16 | @import url(./fonts/league-gothic/league-gothic.css);
17 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
18 |
19 | /**
20 | * Solarized colors by Ethan Schoonover
21 | */
22 |
23 | // Solarized colors
24 | $base03: #002b36;
25 | $base02: #073642;
26 | $base01: #586e75;
27 | $base00: #657b83;
28 | $base0: #839496;
29 | $base1: #93a1a1;
30 | $base2: #eee8d5;
31 | $base3: #fdf6e3;
32 | $yellow: #b58900;
33 | $orange: #cb4b16;
34 | $red: #dc322f;
35 | $magenta: #d33682;
36 | $violet: #6c71c4;
37 | $blue: #268bd2;
38 | $cyan: #2aa198;
39 | $green: #859900;
40 |
41 | // Override theme settings (see ../template/settings.scss)
42 | $mainColor: $base1;
43 | $headingColor: $base2;
44 | $headingTextShadow: none;
45 | $backgroundColor: $base03;
46 | $linkColor: $blue;
47 | $linkColorHover: color.scale( $linkColor, $lightness: 20% );
48 | $selectionBackgroundColor: $magenta;
49 |
50 | // Change text colors against light slide backgrounds
51 | @include light-bg-text-color(#222);
52 |
53 | // Theme template ------------------------------
54 | @import "../template/theme";
55 | // ---------------------------------------------
56 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/sky.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Sky theme for reveal.js.
3 | *
4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
5 | */
6 |
7 |
8 | // Default mixins and settings -----------------
9 | @use "sass:color";
10 | @import "../template/mixins";
11 | @import "../template/settings";
12 | // ---------------------------------------------
13 |
14 |
15 |
16 | // Include theme-specific fonts
17 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
18 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
19 |
20 |
21 | // Override theme settings (see ../template/settings.scss)
22 | $mainFont: 'Open Sans', sans-serif;
23 | $mainColor: #333;
24 | $headingFont: 'Quicksand', sans-serif;
25 | $headingColor: #333;
26 | $headingLetterSpacing: -0.08em;
27 | $headingTextShadow: none;
28 | $backgroundColor: #f7fbfc;
29 | $linkColor: #3b759e;
30 | $linkColorHover: color.scale( $linkColor, $lightness: 20% );
31 | $selectionBackgroundColor: #134674;
32 |
33 | $overlayElementBgColor: 0, 0, 0;
34 | $overlayElementFgColor: 240, 240, 240;
35 |
36 | // Fix links so they are not cut off
37 | .reveal a {
38 | line-height: 1.3em;
39 | }
40 |
41 | // Background generator
42 | @mixin bodyBackground() {
43 | @include radial-gradient( #add9e4, #f7fbfc );
44 | }
45 |
46 | // Change text colors against dark slide backgrounds
47 | @include dark-bg-text-color(#fff);
48 |
49 |
50 |
51 | // Theme template ------------------------------
52 | @import "../template/theme";
53 | // ---------------------------------------------
54 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/beige.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Beige theme for reveal.js.
3 | *
4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
5 | */
6 |
7 |
8 | // Default mixins and settings -----------------
9 | @use "sass:color";
10 | @import "../template/mixins";
11 | @import "../template/settings";
12 | // ---------------------------------------------
13 |
14 |
15 |
16 | // Include theme-specific fonts
17 | @import url(./fonts/league-gothic/league-gothic.css);
18 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
19 |
20 |
21 | // Override theme settings (see ../template/settings.scss)
22 | $mainColor: #333;
23 | $headingColor: #333;
24 | $headingTextShadow: none;
25 | $backgroundColor: #f7f3de;
26 | $linkColor: #8b743d;
27 | $linkColorHover: color.scale( $linkColor, $lightness: 20% );
28 | $selectionBackgroundColor: rgba(79, 64, 28, 0.99);
29 | $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);
30 |
31 | $overlayElementBgColor: 0, 0, 0;
32 | $overlayElementFgColor: 240, 240, 240;
33 |
34 | // Background generator
35 | @mixin bodyBackground() {
36 | @include radial-gradient( rgba(247,242,211,1), rgba(255,255,255,1) );
37 | }
38 |
39 | // Change text colors against dark slide backgrounds
40 | @include dark-bg-text-color(#fff);
41 |
42 |
43 | // Theme template ------------------------------
44 | @import "../template/theme";
45 | // ---------------------------------------------
46 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/README.md:
--------------------------------------------------------------------------------
1 | ## Dependencies
2 |
3 | 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
4 |
5 | ## Creating a Theme
6 |
7 | 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`.
8 |
9 | Each theme file does four things in the following order:
10 |
11 | 1. **Include [/css/theme/template/mixins.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/mixins.scss)**
12 | Shared utility functions.
13 |
14 | 2. **Include [/css/theme/template/settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss)**
15 | Declares a set of custom variables that the template file (step 4) expects. Can be overridden in step 3.
16 |
17 | 3. **Override**
18 | 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.
19 |
20 | 4. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)**
21 | The template theme file which will generate final CSS output based on the currently defined variables.
22 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/black-contrast.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Black compact & high contrast reveal.js theme, with headers not in capitals.
3 | *
4 | * By Peter Kehl. Based on black.(s)css by Hakim El Hattab, http://hakim.se
5 | *
6 | * - Keep the source similar to black.css - for easy comparison.
7 | * - $mainFontSize controls code blocks, too (although under some ratio).
8 | */
9 |
10 |
11 | // Default mixins and settings -----------------
12 | @use "sass:color";
13 | @import "../template/mixins";
14 | @import "../template/settings";
15 | // ---------------------------------------------
16 |
17 |
18 | // Include theme-specific fonts
19 | @import url(./fonts/source-sans-pro/source-sans-pro.css);
20 |
21 |
22 | // Override theme settings (see ../template/settings.scss)
23 | $backgroundColor: #000000;
24 |
25 | $mainColor: #fff;
26 | $headingColor: #fff;
27 |
28 | $mainFontSize: 42px;
29 | $mainFont: 'Source Sans Pro', Helvetica, sans-serif;
30 | $headingFont: 'Source Sans Pro', Helvetica, sans-serif;
31 | $headingTextShadow: none;
32 | $headingLetterSpacing: normal;
33 | $headingTextTransform: uppercase;
34 | $headingFontWeight: 600;
35 | $linkColor: #42affa;
36 | $linkColorHover: color.scale( $linkColor, $lightness: 15% );
37 | $selectionBackgroundColor: color.scale( $linkColor, $lightness: 25% );
38 |
39 | $heading1Size: 2.5em;
40 | $heading2Size: 1.6em;
41 | $heading3Size: 1.3em;
42 | $heading4Size: 1.0em;
43 |
44 | // Change text colors against light slide backgrounds
45 | @include light-bg-text-color(#000);
46 |
47 |
48 | // Theme template ------------------------------
49 | @import "../template/theme";
50 | // ---------------------------------------------
51 |
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/source-sans-pro.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Source Sans Pro';
3 | src: url('./source-sans-pro-regular.eot');
4 | src: url('./source-sans-pro-regular.eot?#iefix') format('embedded-opentype'),
5 | url('./source-sans-pro-regular.woff') format('woff'),
6 | url('./source-sans-pro-regular.ttf') format('truetype');
7 | font-weight: normal;
8 | font-style: normal;
9 | }
10 |
11 | @font-face {
12 | font-family: 'Source Sans Pro';
13 | src: url('./source-sans-pro-italic.eot');
14 | src: url('./source-sans-pro-italic.eot?#iefix') format('embedded-opentype'),
15 | url('./source-sans-pro-italic.woff') format('woff'),
16 | url('./source-sans-pro-italic.ttf') format('truetype');
17 | font-weight: normal;
18 | font-style: italic;
19 | }
20 |
21 | @font-face {
22 | font-family: 'Source Sans Pro';
23 | src: url('./source-sans-pro-semibold.eot');
24 | src: url('./source-sans-pro-semibold.eot?#iefix') format('embedded-opentype'),
25 | url('./source-sans-pro-semibold.woff') format('woff'),
26 | url('./source-sans-pro-semibold.ttf') format('truetype');
27 | font-weight: 600;
28 | font-style: normal;
29 | }
30 |
31 | @font-face {
32 | font-family: 'Source Sans Pro';
33 | src: url('./source-sans-pro-semibolditalic.eot');
34 | src: url('./source-sans-pro-semibolditalic.eot?#iefix') format('embedded-opentype'),
35 | url('./source-sans-pro-semibolditalic.woff') format('woff'),
36 | url('./source-sans-pro-semibolditalic.ttf') format('truetype');
37 | font-weight: 600;
38 | font-style: italic;
39 | }
40 |
--------------------------------------------------------------------------------
/__extra-resources/online-courses-learning-platforms.md:
--------------------------------------------------------------------------------
1 | # Learning Platforms for Online Courses
2 |
3 | During the class recording, only [Coursera](https://www.coursera.org/) and [Udemy](https://www.udemy.com/) were mentioned as online learning platforms. However, there are many more platforms available for learning online. Here are some additional options:
4 |
5 | - **[edX](https://www.edx.org/):** Offers courses from top universities and institutions worldwide.
6 | - **[Khan Academy](https://www.khanacademy.org/):** Provides free courses on a variety of subjects, including math, science, and programming.
7 | - **[Pluralsight](https://www.pluralsight.com/):** Focuses on technology and creative skills, with courses for developers, IT professionals, and designers.
8 | - **[LinkedIn Learning](https://www.linkedin.com/learning/):** Offers professional development courses in business, technology, and creative fields.
9 | - **[Codecademy](https://www.codecademy.com/):** Specializes in interactive coding lessons for beginners and advanced learners.
10 | - **[Skillshare](https://www.skillshare.com/):** Features creative and professional courses, including design, photography, and business.
11 | - **[FutureLearn](https://www.futurelearn.com/):** Provides a wide range of courses from universities and cultural institutions.
12 | - **[Treehouse](https://teamtreehouse.com/):** Focuses on web development, programming, and design.
13 | - **[MIT OpenCourseWare](https://ocw.mit.edu/):** Free access to course materials from MIT.
14 | - **[The Odin Project](https://www.theodinproject.com/):** A free, open-source curriculum for learning web development.
15 |
16 | These platforms offer diverse learning opportunities for various interests and skill levels.
17 |
--------------------------------------------------------------------------------
/__presentation-slides/js/index.js:
--------------------------------------------------------------------------------
1 | import Deck, { VERSION } from './reveal.js'
2 |
3 | /**
4 | * Expose the Reveal class to the window. To create a
5 | * new instance:
6 | * let deck = new Reveal( document.querySelector( '.reveal' ), {
7 | * controls: false
8 | * } );
9 | * deck.initialize().then(() => {
10 | * // reveal.js is ready
11 | * });
12 | */
13 | let Reveal = Deck;
14 |
15 |
16 | /**
17 | * The below is a thin shell that mimics the pre 4.0
18 | * reveal.js API and ensures backwards compatibility.
19 | * This API only allows for one Reveal instance per
20 | * page, whereas the new API above lets you run many
21 | * presentations on the same page.
22 | *
23 | * Reveal.initialize( { controls: false } ).then(() => {
24 | * // reveal.js is ready
25 | * });
26 | */
27 |
28 | let enqueuedAPICalls = [];
29 |
30 | Reveal.initialize = options => {
31 |
32 | // Create our singleton reveal.js instance
33 | Object.assign( Reveal, new Deck( document.querySelector( '.reveal' ), options ) );
34 |
35 | // Invoke any enqueued API calls
36 | enqueuedAPICalls.map( method => method( Reveal ) );
37 |
38 | return Reveal.initialize();
39 |
40 | }
41 |
42 | /**
43 | * The pre 4.0 API let you add event listener before
44 | * initializing. We maintain the same behavior by
45 | * queuing up premature API calls and invoking all
46 | * of them when Reveal.initialize is called.
47 | */
48 | [ 'configure', 'on', 'off', 'addEventListener', 'removeEventListener', 'registerPlugin' ].forEach( method => {
49 | Reveal[method] = ( ...args ) => {
50 | enqueuedAPICalls.push( deck => deck[method].call( null, ...args ) );
51 | }
52 | } );
53 |
54 | Reveal.isReady = () => false;
55 |
56 | Reveal.VERSION = VERSION;
57 |
58 | export default Reveal;
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/white-contrast.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * White compact & high contrast reveal.js theme, with headers not in capitals.
3 | *
4 | * By Peter Kehl. Based on white.(s)css by Hakim El Hattab, http://hakim.se
5 | *
6 | * - Keep the source similar to black.css - for easy comparison.
7 | * - $mainFontSize controls code blocks, too (although under some ratio).
8 | */
9 |
10 |
11 | // Default mixins and settings -----------------
12 | @use "sass:color";
13 | @import "../template/mixins";
14 | @import "../template/settings";
15 | // ---------------------------------------------
16 |
17 |
18 | // Include theme-specific fonts
19 | @import url(./fonts/source-sans-pro/source-sans-pro.css);
20 |
21 |
22 | // Override theme settings (see ../template/settings.scss)
23 | $backgroundColor: #fff;
24 |
25 | $mainColor: #000;
26 | $headingColor: #000;
27 |
28 | $mainFontSize: 42px;
29 | $mainFont: 'Source Sans Pro', Helvetica, sans-serif;
30 | $headingFont: 'Source Sans Pro', Helvetica, sans-serif;
31 | $headingTextShadow: none;
32 | $headingLetterSpacing: normal;
33 | $headingTextTransform: uppercase;
34 | $headingFontWeight: 600;
35 | $linkColor: #2a76dd;
36 | $linkColorHover: color.scale( $linkColor, $lightness: 15% );
37 | $selectionBackgroundColor: color.scale( $linkColor, $lightness: 25% );
38 |
39 | $heading1Size: 2.5em;
40 | $heading2Size: 1.6em;
41 | $heading3Size: 1.3em;
42 | $heading4Size: 1.0em;
43 |
44 | $overlayElementBgColor: 0, 0, 0;
45 | $overlayElementFgColor: 240, 240, 240;
46 |
47 | // Change text colors against dark slide backgrounds
48 | @include dark-bg-text-color(#fff);
49 |
50 |
51 | // Theme template ------------------------------
52 | @import "../template/theme";
53 | // ---------------------------------------------
54 |
--------------------------------------------------------------------------------
/__presentation-slides/css/layout.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Layout helpers.
3 | */
4 |
5 | // Stretch an element vertically based on available space
6 | .reveal .stretch,
7 | .reveal .r-stretch {
8 | max-width: none;
9 | max-height: none;
10 | }
11 |
12 | .reveal pre.stretch code,
13 | .reveal pre.r-stretch code {
14 | height: 100%;
15 | max-height: 100%;
16 | box-sizing: border-box;
17 | }
18 |
19 | // Text that auto-fits its container
20 | .reveal .r-fit-text {
21 | display: inline-block; // https://github.com/rikschennink/fitty#performance
22 | white-space: nowrap;
23 | }
24 |
25 | // Stack multiple elements on top of each other
26 | .reveal .r-stack {
27 | display: grid;
28 | grid-template-rows: 100%;
29 | }
30 |
31 | .reveal .r-stack > * {
32 | grid-area: 1/1;
33 | margin: auto;
34 | }
35 |
36 | // Horizontal and vertical stacks
37 | .reveal .r-vstack,
38 | .reveal .r-hstack {
39 | display: flex;
40 |
41 | img, video {
42 | min-width: 0;
43 | min-height: 0;
44 | object-fit: contain;
45 | }
46 | }
47 |
48 | .reveal .r-vstack {
49 | flex-direction: column;
50 | align-items: center;
51 | justify-content: center;
52 | }
53 |
54 | .reveal .r-hstack {
55 | flex-direction: row;
56 | align-items: center;
57 | justify-content: center;
58 | }
59 |
60 | // Naming based on tailwindcss
61 | .reveal .items-stretch { align-items: stretch; }
62 | .reveal .items-start { align-items: flex-start; }
63 | .reveal .items-center { align-items: center; }
64 | .reveal .items-end { align-items: flex-end; }
65 |
66 | .reveal .justify-between { justify-content: space-between; }
67 | .reveal .justify-around { justify-content: space-around; }
68 | .reveal .justify-start { justify-content: flex-start; }
69 | .reveal .justify-center { justify-content: center; }
70 | .reveal .justify-end { justify-content: flex-end; }
71 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/solarized.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Solarized Light theme for reveal.js.
3 | * Author: Achim Staebler
4 | */
5 |
6 |
7 | // Default mixins and settings -----------------
8 | @use "sass:color";
9 | @import "../template/mixins";
10 | @import "../template/settings";
11 | // ---------------------------------------------
12 |
13 |
14 |
15 | // Include theme-specific fonts
16 | @import url(./fonts/league-gothic/league-gothic.css);
17 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
18 |
19 |
20 | /**
21 | * Solarized colors by Ethan Schoonover
22 | */
23 | html * {
24 | color-profile: sRGB;
25 | rendering-intent: auto;
26 | }
27 |
28 | // Solarized colors
29 | $base03: #002b36;
30 | $base02: #073642;
31 | $base01: #586e75;
32 | $base00: #657b83;
33 | $base0: #839496;
34 | $base1: #93a1a1;
35 | $base2: #eee8d5;
36 | $base3: #fdf6e3;
37 | $yellow: #b58900;
38 | $orange: #cb4b16;
39 | $red: #dc322f;
40 | $magenta: #d33682;
41 | $violet: #6c71c4;
42 | $blue: #268bd2;
43 | $cyan: #2aa198;
44 | $green: #859900;
45 |
46 | // Override theme settings (see ../template/settings.scss)
47 | $mainColor: $base00;
48 | $headingColor: $base01;
49 | $headingTextShadow: none;
50 | $backgroundColor: $base3;
51 | $linkColor: $blue;
52 | $linkColorHover: color.scale( $linkColor, $lightness: 20% );
53 | $selectionBackgroundColor: $magenta;
54 |
55 | $overlayElementBgColor: 0, 0, 0;
56 | $overlayElementFgColor: 240, 240, 240;
57 |
58 | // Background generator
59 | // @mixin bodyBackground() {
60 | // @include radial-gradient( rgba($base3,1), rgba(lighten($base3, 20%),1) );
61 | // }
62 |
63 |
64 |
65 | // Theme template ------------------------------
66 | @import "../template/theme";
67 | // ---------------------------------------------
68 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/template/mixins.scss:
--------------------------------------------------------------------------------
1 | @mixin vertical-gradient( $top, $bottom ) {
2 | background: $top;
3 | background: -moz-linear-gradient( top, $top 0%, $bottom 100% );
4 | background: -webkit-gradient( linear, left top, left bottom, color-stop(0%,$top), color-stop(100%,$bottom) );
5 | background: -webkit-linear-gradient( top, $top 0%, $bottom 100% );
6 | background: -o-linear-gradient( top, $top 0%, $bottom 100% );
7 | background: -ms-linear-gradient( top, $top 0%, $bottom 100% );
8 | background: linear-gradient( top, $top 0%, $bottom 100% );
9 | }
10 |
11 | @mixin horizontal-gradient( $top, $bottom ) {
12 | background: $top;
13 | background: -moz-linear-gradient( left, $top 0%, $bottom 100% );
14 | background: -webkit-gradient( linear, left top, right top, color-stop(0%,$top), color-stop(100%,$bottom) );
15 | background: -webkit-linear-gradient( left, $top 0%, $bottom 100% );
16 | background: -o-linear-gradient( left, $top 0%, $bottom 100% );
17 | background: -ms-linear-gradient( left, $top 0%, $bottom 100% );
18 | background: linear-gradient( left, $top 0%, $bottom 100% );
19 | }
20 |
21 | @mixin radial-gradient( $outer, $inner, $type: circle ) {
22 | background: $outer;
23 | background: -moz-radial-gradient( center, $type cover, $inner 0%, $outer 100% );
24 | background: -webkit-gradient( radial, center center, 0px, center center, 100%, color-stop(0%,$inner), color-stop(100%,$outer) );
25 | background: -webkit-radial-gradient( center, $type cover, $inner 0%, $outer 100% );
26 | background: -o-radial-gradient( center, $type cover, $inner 0%, $outer 100% );
27 | background: -ms-radial-gradient( center, $type cover, $inner 0%, $outer 100% );
28 | background: radial-gradient( center, $type cover, $inner 0%, $outer 100% );
29 | }
30 |
31 | @mixin light-bg-text-color( $color ) {
32 | section.has-light-background {
33 | &, h1, h2, h3, h4, h5, h6 {
34 | color: $color;
35 | }
36 | }
37 | }
38 |
39 | @mixin dark-bg-text-color( $color ) {
40 | section.has-dark-background {
41 | &, h1, h2, h3, h4, h5, h6 {
42 | color: $color;
43 | }
44 | }
45 | }
--------------------------------------------------------------------------------
/__presentation-slides/js/utils/color.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Converts various color input formats to an {r:0,g:0,b:0} object.
3 | *
4 | * @param {string} color The string representation of a color
5 | * @example
6 | * colorToRgb('#000');
7 | * @example
8 | * colorToRgb('#000000');
9 | * @example
10 | * colorToRgb('rgb(0,0,0)');
11 | * @example
12 | * colorToRgb('rgba(0,0,0)');
13 | *
14 | * @return {{r: number, g: number, b: number, [a]: number}|null}
15 | */
16 | export const colorToRgb = ( color ) => {
17 |
18 | let hex3 = color.match( /^#([0-9a-f]{3})$/i );
19 | if( hex3 && hex3[1] ) {
20 | hex3 = hex3[1];
21 | return {
22 | r: parseInt( hex3.charAt( 0 ), 16 ) * 0x11,
23 | g: parseInt( hex3.charAt( 1 ), 16 ) * 0x11,
24 | b: parseInt( hex3.charAt( 2 ), 16 ) * 0x11
25 | };
26 | }
27 |
28 | let hex6 = color.match( /^#([0-9a-f]{6})$/i );
29 | if( hex6 && hex6[1] ) {
30 | hex6 = hex6[1];
31 | return {
32 | r: parseInt( hex6.slice( 0, 2 ), 16 ),
33 | g: parseInt( hex6.slice( 2, 4 ), 16 ),
34 | b: parseInt( hex6.slice( 4, 6 ), 16 )
35 | };
36 | }
37 |
38 | let rgb = color.match( /^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i );
39 | if( rgb ) {
40 | return {
41 | r: parseInt( rgb[1], 10 ),
42 | g: parseInt( rgb[2], 10 ),
43 | b: parseInt( rgb[3], 10 )
44 | };
45 | }
46 |
47 | let rgba = color.match( /^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i );
48 | if( rgba ) {
49 | return {
50 | r: parseInt( rgba[1], 10 ),
51 | g: parseInt( rgba[2], 10 ),
52 | b: parseInt( rgba[3], 10 ),
53 | a: parseFloat( rgba[4] )
54 | };
55 | }
56 |
57 | return null;
58 |
59 | }
60 |
61 | /**
62 | * Calculates brightness on a scale of 0-255.
63 | *
64 | * @param {string} color See colorToRgb for supported formats.
65 | * @see {@link colorToRgb}
66 | */
67 | export const colorBrightness = ( color ) => {
68 |
69 | if( typeof color === 'string' ) color = colorToRgb( color );
70 |
71 | if( color ) {
72 | return ( color.r * 299 + color.g * 587 + color.b * 114 ) / 1000;
73 | }
74 |
75 | return null;
76 |
77 | }
--------------------------------------------------------------------------------
/__presentation-slides/examples/media.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Video, Audio and Iframes
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Examples of embedded Video, Audio and Iframes
23 |
24 |
25 |
29 |
30 |
31 | Iframe Background
32 |
33 |
34 |
38 |
39 |
40 | Background Video
41 |
42 |
43 |
44 | Auto-playing audio
45 |
46 |
47 |
48 |
49 | Audio inside slide fragments
50 |
54 |
58 |
59 |
60 |
61 | Audio with controls
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/__extra-resources/our-community-social-media.md:
--------------------------------------------------------------------------------
1 | # Ditectrev Social Media, Community, and Online Platforms
2 |
3 | Stay connected with Ditectrev through our social media platforms, join our community on Discord, explore our online shops, and check out our educational resources and apps!
4 |
5 | ## Social Media
6 |
7 | - **Facebook**: [https://facebook.com/Ditectrev](https://facebook.com/Ditectrev)
8 | - **GitHub**: [https://github.com/Ditectrev](https://github.com/Ditectrev)
9 | - **Instagram**: [https://instagram.com/Ditectrev](https://instagram.com/Ditectrev)
10 | - **LinkedIn**: [https://linkedin.com/company/Ditectrev](https://linkedin.com/company/Ditectrev)
11 | - **Reddit**: [https://www.reddit.com/user/Ditectrev/](https://www.reddit.com/user/Ditectrev/)
12 | - **X**: [https://x.com/Ditectrev](https://x.com/Ditectrev)
13 | - **YouTube**: [https://www.youtube.com/@Ditectrev](https://www.youtube.com/@Ditectrev)
14 |
15 | ## Join Us on Discord
16 |
17 | - **Discord**: [https://discord.gg/RFjtXKfJy3](https://discord.gg/RFjtXKfJy3)
18 |
19 | ## Online Shops
20 |
21 | - **Ditectrev Shop**: [https://shop.ditectrev.com](https://shop.ditectrev.com)
22 | - **eBay**: [https://ebay.com/usr/Ditectrev](https://ebay.com/usr/Ditectrev)
23 | - **Etsy**: [https://ditectrev.etsy.com](https://ditectrev.etsy.com)
24 |
25 | ## Educational Platforms
26 |
27 | - **Ditectrev Education**: [https://education.ditectrev.com](https://education.ditectrev.com)
28 | - **Udemy**: [https://www.udemy.com/user/social-ditectrev/](https://www.udemy.com/user/social-ditectrev/)
29 |
30 | ## Mobile Apps
31 |
32 | - **Google Play Books**: [https://play.google.com/store/books/author?id=Daniel+Danielecki](https://play.google.com/store/books/author?id=Daniel+Danielecki)
33 | - **iOS App**: [https://apps.apple.com/app/cloudmaster-swift/id6503601139](https://apps.apple.com/app/cloudmaster-swift/id6503601139)
34 |
35 | ## CodeSandbox
36 |
37 | - **CodeSandbox**: [https://codesandbox.io/u/Ditectrev](https://codesandbox.io/u/Ditectrev)
38 |
39 | ## Support Us on Patreon
40 |
41 | - **Patreon**: [https://patreon.com/c/Ditectrev](https://patreon.com/c/Ditectrev)
42 |
43 | Follow us to stay updated, shop for exclusive items, learn with us, and be part of our growing community!
44 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-grid-navigation.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Grid
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
30 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/__extra-resources/cross-browser-compatibility.md:
--------------------------------------------------------------------------------
1 | # Cross-Browser Compatibility
2 |
3 | When working on web development projects, ensuring cross-browser compatibility is crucial. This involves making sure that your website or application works seamlessly across different browsers and their versions.
4 |
5 | ## Tools for Cross-Browser Compatibility
6 |
7 | ### 1. [Modernizr](https://github.com/Modernizr/Modernizr)
8 |
9 | Modernizr is a powerful JavaScript library that helps detect HTML5 and CSS3 features in the user's browser. By using Modernizr, you can conditionally load polyfills or apply specific styles based on the features supported by the browser.
10 |
11 | #### Key Features:
12 |
13 | - Detects support for over 40 HTML5 and CSS3 features.
14 | - Provides a simple API for feature detection.
15 | - Allows developers to write fallback code for unsupported features.
16 |
17 | #### Example Usage:
18 |
19 | ```html
20 |
21 |
28 | ```
29 |
30 | ### 2. [Can I Use](https://caniuse.com/)
31 |
32 | While Modernizr is a great tool for runtime feature detection, the best tool for checking browser support during development is [Can I Use](https://caniuse.com/). This website provides up-to-date information on the compatibility of HTML, CSS, JavaScript, and other web technologies across different browsers.
33 |
34 | #### Why Can I Use is the Best Tool:
35 |
36 | - Comprehensive database of browser support for web technologies.
37 | - Easy-to-use search functionality.
38 | - Regularly updated with the latest browser versions and features.
39 | - Includes usage statistics to help prioritize features based on audience.
40 |
41 | #### Example Workflow:
42 |
43 | 1. Search for a feature (e.g., `flexbox`) on [Can I Use](https://caniuse.com/).
44 | 2. Review the compatibility table to see which browsers support the feature.
45 | 3. Use the information to decide whether to implement the feature or provide fallbacks.
46 |
47 | ---
48 |
49 | By combining tools like Modernizr and Can I Use, you can ensure a smooth user experience across a wide range of browsers and devices.
50 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-dependencies-async.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Async Dependencies
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
76 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/__presentation-slides/examples/transitions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Slide Transitions
8 |
9 |
10 |
11 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
36 |
37 |
38 | data-transition: zoom
39 |
40 |
41 |
42 | data-transition: zoom-in fade-out
43 |
44 |
45 |
48 |
49 |
50 | data-transition: convex
51 |
52 |
53 |
54 | data-transition: convex-in concave-out
55 |
56 |
57 |
58 |
61 |
62 | data-transition: concave
63 |
64 |
65 | data-transition: convex-in fade-out
66 |
67 |
70 |
71 |
72 |
73 | data-transition: none
74 |
75 |
76 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
95 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/blood.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Blood theme for reveal.js
3 | * Author: Walther http://github.com/Walther
4 | *
5 | * Designed to be used with highlight.js theme
6 | * "monokai_sublime.css" available from
7 | * https://github.com/isagalaev/highlight.js/
8 | *
9 | * For other themes, change $codeBackground accordingly.
10 | *
11 | */
12 |
13 | // Default mixins and settings -----------------
14 | @use "sass:color";
15 | @import "../template/mixins";
16 | @import "../template/settings";
17 | // ---------------------------------------------
18 |
19 | // Include theme-specific fonts
20 |
21 | @import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);
22 |
23 | // Colors used in the theme
24 | $blood: #a23;
25 | $coal: #222;
26 | $codeBackground: #23241f;
27 |
28 | $backgroundColor: $coal;
29 |
30 | // Main text
31 | $mainFont: Ubuntu, 'sans-serif';
32 | $mainColor: #eee;
33 |
34 | // Headings
35 | $headingFont: Ubuntu, 'sans-serif';
36 | $headingTextShadow: 2px 2px 2px $coal;
37 |
38 | // h1 shadow, borrowed humbly from
39 | // (c) Default theme by Hakim El Hattab
40 | $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);
41 |
42 | // Links
43 | $linkColor: $blood;
44 | $linkColorHover: color.scale( $linkColor, $lightness: 20% );
45 |
46 | // Text selection
47 | $selectionBackgroundColor: $blood;
48 | $selectionColor: #fff;
49 |
50 | // Change text colors against dark slide backgrounds
51 | @include light-bg-text-color(#222);
52 |
53 |
54 | // Theme template ------------------------------
55 | @import "../template/theme";
56 | // ---------------------------------------------
57 |
58 | // some overrides after theme template import
59 |
60 | .reveal p {
61 | font-weight: 300;
62 | text-shadow: 1px 1px $coal;
63 | }
64 |
65 | section.has-light-background {
66 | p, h1, h2, h3, h4 {
67 | text-shadow: none;
68 | }
69 | }
70 |
71 | .reveal h1,
72 | .reveal h2,
73 | .reveal h3,
74 | .reveal h4,
75 | .reveal h5,
76 | .reveal h6 {
77 | font-weight: 700;
78 | }
79 |
80 | .reveal p code {
81 | background-color: $codeBackground;
82 | display: inline-block;
83 | border-radius: 7px;
84 | }
85 |
86 | .reveal small code {
87 | vertical-align: baseline;
88 | }
--------------------------------------------------------------------------------
/__presentation-slides/test/test-pdf.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test PDF exports
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | 1
25 |
26 |
27 |
28 |
39 |
40 |
41 |
42 | 3.1
43 |
44 | 4.1
45 | 4.2
46 | 4.3
47 |
48 |
49 |
50 |
57 |
58 |
59 | 3.3
60 |
61 | 3.3.1
62 | 3.3.2
63 | 3.3.3
64 |
65 |
66 |
67 |
68 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
95 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-multiple-instances-es5.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Iframes
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/__presentation-slides/plugin/math/mathjax2.js:
--------------------------------------------------------------------------------
1 | /**
2 | * A plugin which enables rendering of math equations inside
3 | * of reveal.js slides. Essentially a thin wrapper for MathJax.
4 | *
5 | * @author Hakim El Hattab
6 | */
7 | export const MathJax2 = () => {
8 |
9 | // The reveal.js instance this plugin is attached to
10 | let deck;
11 |
12 | let defaultOptions = {
13 | messageStyle: 'none',
14 | tex2jax: {
15 | inlineMath: [ [ '$', '$' ], [ '\\(', '\\)' ] ],
16 | skipTags: [ 'script', 'noscript', 'style', 'textarea', 'pre' ]
17 | },
18 | skipStartupTypeset: true
19 | };
20 |
21 | function loadScript( url, callback ) {
22 |
23 | let head = document.querySelector( 'head' );
24 | let script = document.createElement( 'script' );
25 | script.type = 'text/javascript';
26 | script.src = url;
27 |
28 | // Wrapper for callback to make sure it only fires once
29 | let finish = () => {
30 | if( typeof callback === 'function' ) {
31 | callback.call();
32 | callback = null;
33 | }
34 | }
35 |
36 | script.onload = finish;
37 |
38 | // IE
39 | script.onreadystatechange = () => {
40 | if ( this.readyState === 'loaded' ) {
41 | finish();
42 | }
43 | }
44 |
45 | // Normal browsers
46 | head.appendChild( script );
47 |
48 | }
49 |
50 | return {
51 | id: 'mathjax2',
52 |
53 | init: function( reveal ) {
54 |
55 | deck = reveal;
56 |
57 | let revealOptions = deck.getConfig().mathjax2 || deck.getConfig().math || {};
58 |
59 | let options = { ...defaultOptions, ...revealOptions };
60 | let mathjax = options.mathjax || 'https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js';
61 | let config = options.config || 'TeX-AMS_HTML-full';
62 | let url = mathjax + '?config=' + config;
63 |
64 | options.tex2jax = { ...defaultOptions.tex2jax, ...revealOptions.tex2jax };
65 |
66 | options.mathjax = options.config = null;
67 |
68 | loadScript( url, function() {
69 |
70 | MathJax.Hub.Config( options );
71 |
72 | // Typeset followed by an immediate reveal.js layout since
73 | // the typesetting process could affect slide height
74 | MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, deck.getRevealElement() ] );
75 | MathJax.Hub.Queue( deck.layout );
76 |
77 | // Reprocess equations in slides when they turn visible
78 | deck.on( 'slidechanged', function( event ) {
79 |
80 | MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] );
81 |
82 | } );
83 |
84 | } );
85 |
86 | }
87 | }
88 |
89 | };
90 |
--------------------------------------------------------------------------------
/__presentation-slides/js/controllers/focus.js:
--------------------------------------------------------------------------------
1 | import { closest } from '../utils/util.js'
2 |
3 | /**
4 | * Manages focus when a presentation is embedded. This
5 | * helps us only capture keyboard from the presentation
6 | * a user is currently interacting with in a page where
7 | * multiple presentations are embedded.
8 | */
9 |
10 | const STATE_FOCUS = 'focus';
11 | const STATE_BLUR = 'blur';
12 |
13 | export default class Focus {
14 |
15 | constructor( Reveal ) {
16 |
17 | this.Reveal = Reveal;
18 |
19 | this.onRevealPointerDown = this.onRevealPointerDown.bind( this );
20 | this.onDocumentPointerDown = this.onDocumentPointerDown.bind( this );
21 |
22 | }
23 |
24 | /**
25 | * Called when the reveal.js config is updated.
26 | */
27 | configure( config, oldConfig ) {
28 |
29 | if( config.embedded ) {
30 | this.blur();
31 | }
32 | else {
33 | this.focus();
34 | this.unbind();
35 | }
36 |
37 | }
38 |
39 | bind() {
40 |
41 | if( this.Reveal.getConfig().embedded ) {
42 | this.Reveal.getRevealElement().addEventListener( 'pointerdown', this.onRevealPointerDown, false );
43 | }
44 |
45 | }
46 |
47 | unbind() {
48 |
49 | this.Reveal.getRevealElement().removeEventListener( 'pointerdown', this.onRevealPointerDown, false );
50 | document.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );
51 |
52 | }
53 |
54 | focus() {
55 |
56 | if( this.state !== STATE_FOCUS ) {
57 | this.Reveal.getRevealElement().classList.add( 'focused' );
58 | document.addEventListener( 'pointerdown', this.onDocumentPointerDown, false );
59 | }
60 |
61 | this.state = STATE_FOCUS;
62 |
63 | }
64 |
65 | blur() {
66 |
67 | if( this.state !== STATE_BLUR ) {
68 | this.Reveal.getRevealElement().classList.remove( 'focused' );
69 | document.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );
70 | }
71 |
72 | this.state = STATE_BLUR;
73 |
74 | }
75 |
76 | isFocused() {
77 |
78 | return this.state === STATE_FOCUS;
79 |
80 | }
81 |
82 | destroy() {
83 |
84 | this.Reveal.getRevealElement().classList.remove( 'focused' );
85 |
86 | }
87 |
88 | onRevealPointerDown( event ) {
89 |
90 | this.focus();
91 |
92 | }
93 |
94 | onDocumentPointerDown( event ) {
95 |
96 | let revealElement = closest( event.target, '.reveal' );
97 | if( !revealElement || revealElement !== this.Reveal.getRevealElement() ) {
98 | this.blur();
99 | }
100 |
101 | }
102 |
103 | }
--------------------------------------------------------------------------------
/__presentation-slides/plugin/math/mathjax3.js:
--------------------------------------------------------------------------------
1 | /**
2 | * A plugin which enables rendering of math equations inside
3 | * of reveal.js slides. Essentially a thin wrapper for MathJax 3
4 | *
5 | * @author Hakim El Hattab
6 | * @author Gerhard Burger
7 | */
8 | export const MathJax3 = () => {
9 |
10 | // The reveal.js instance this plugin is attached to
11 | let deck;
12 |
13 | let defaultOptions = {
14 | tex: {
15 | inlineMath: [ [ '$', '$' ], [ '\\(', '\\)' ] ]
16 | },
17 | options: {
18 | skipHtmlTags: [ 'script', 'noscript', 'style', 'textarea', 'pre' ]
19 | },
20 | startup: {
21 | ready: () => {
22 | MathJax.startup.defaultReady();
23 | MathJax.startup.promise.then(() => {
24 | deck.layout();
25 | });
26 | }
27 | }
28 | };
29 |
30 | function loadScript( url, callback ) {
31 |
32 | let script = document.createElement( 'script' );
33 | script.type = "text/javascript"
34 | script.id = "MathJax-script"
35 | script.src = url;
36 | script.async = true
37 |
38 | // Wrapper for callback to make sure it only fires once
39 | script.onload = () => {
40 | if (typeof callback === 'function') {
41 | callback.call();
42 | callback = null;
43 | }
44 | };
45 |
46 | document.head.appendChild( script );
47 |
48 | }
49 |
50 | return {
51 | id: 'mathjax3',
52 | init: function(reveal) {
53 |
54 | deck = reveal;
55 |
56 | let revealOptions = deck.getConfig().mathjax3 || {};
57 | let options = {...defaultOptions, ...revealOptions};
58 | options.tex = {...defaultOptions.tex, ...revealOptions.tex}
59 | options.options = {...defaultOptions.options, ...revealOptions.options}
60 | options.startup = {...defaultOptions.startup, ...revealOptions.startup}
61 |
62 | let url = options.mathjax || 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js';
63 | options.mathjax = null;
64 |
65 | window.MathJax = options;
66 |
67 | loadScript( url, function() {
68 | // Reprocess equations in slides when they turn visible
69 | deck.addEventListener( 'slidechanged', function( event ) {
70 | MathJax.typeset();
71 | } );
72 | } );
73 |
74 | }
75 | }
76 |
77 | };
78 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-destroy.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Dependencies
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
24 |
25 |
30 |
31 |
95 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/__presentation-slides/css/theme/source/dracula.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Dracula Dark theme for reveal.js.
3 | * Based on https://draculatheme.com
4 | */
5 |
6 |
7 | // Default mixins and settings -----------------
8 | @import "../template/mixins";
9 | @import "../template/settings";
10 | // ---------------------------------------------
11 |
12 |
13 |
14 | // Include theme-specific fonts
15 | $systemFontsSansSerif: -apple-system,
16 | BlinkMacSystemFont,
17 | avenir next,
18 | avenir,
19 | segoe ui,
20 | helvetica neue,
21 | helvetica,
22 | Cantarell,
23 | Ubuntu,
24 | roboto,
25 | noto,
26 | arial,
27 | sans-serif;
28 | $systemFontsMono: Menlo,
29 | Consolas,
30 | Monaco,
31 | Liberation Mono,
32 | Lucida Console,
33 | monospace;
34 |
35 | /**
36 | * Dracula colors by Zeno Rocha
37 | * https://draculatheme.com/contribute
38 | */
39 | html * {
40 | color-profile: sRGB;
41 | rendering-intent: auto;
42 | }
43 |
44 | $background: #282A36;
45 | $foreground: #F8F8F2;
46 | $selection: #44475A;
47 | $comment: #6272A4;
48 | $red: #FF5555;
49 | $orange: #FFB86C;
50 | $yellow: #F1FA8C;
51 | $green: #50FA7B;
52 | $purple: #BD93F9;
53 | $cyan: #8BE9FD;
54 | $pink: #FF79C6;
55 |
56 |
57 |
58 | // Override theme settings (see ../template/settings.scss)
59 | $mainColor: $foreground;
60 | $headingColor: $purple;
61 | $headingTextShadow: none;
62 | $headingTextTransform: none;
63 | $backgroundColor: $background;
64 | $linkColor: $pink;
65 | $linkColorHover: $cyan;
66 | $selectionBackgroundColor: $selection;
67 | $inlineCodeColor: $green;
68 | $listBulletColor: $cyan;
69 |
70 | $mainFont: $systemFontsSansSerif;
71 | $codeFont: "Fira Code", $systemFontsMono;
72 |
73 | // Change text colors against light slide backgrounds
74 | @include light-bg-text-color($background);
75 |
76 | // Theme template ------------------------------
77 | @import "../template/theme";
78 | // ---------------------------------------------
79 |
80 | // Define additional color effects based on Dracula spec
81 | // https://spec.draculatheme.com/
82 | :root {
83 | --r-bold-color: #{$orange};
84 | --r-italic-color: #{$yellow};
85 | --r-inline-code-color: #{$inlineCodeColor};
86 | --r-list-bullet-color: #{$listBulletColor};
87 | }
88 |
89 | .reveal {
90 | strong, b {
91 | color: var(--r-bold-color);
92 | }
93 | em, i, blockquote {
94 | color: var(--r-italic-color);
95 | }
96 | code {
97 | color: var(--r-inline-code-color);
98 | }
99 | // Dracula colored list bullets and numbers
100 | ul, ol {
101 | li::marker {
102 | color: var(--r-list-bullet-color);
103 | }
104 | }
105 | }
106 |
107 |
--------------------------------------------------------------------------------
/__presentation-slides/js/controllers/progress.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Creates a visual progress bar for the presentation.
3 | */
4 | export default class Progress {
5 |
6 | constructor( Reveal ) {
7 |
8 | this.Reveal = Reveal;
9 |
10 | this.onProgressClicked = this.onProgressClicked.bind( this );
11 |
12 | }
13 |
14 | render() {
15 |
16 | this.element = document.createElement( 'div' );
17 | this.element.className = 'progress';
18 | this.Reveal.getRevealElement().appendChild( this.element );
19 |
20 | this.bar = document.createElement( 'span' );
21 | this.element.appendChild( this.bar );
22 |
23 | }
24 |
25 | /**
26 | * Called when the reveal.js config is updated.
27 | */
28 | configure( config, oldConfig ) {
29 |
30 | this.element.style.display = config.progress ? 'block' : 'none';
31 |
32 | }
33 |
34 | bind() {
35 |
36 | if( this.Reveal.getConfig().progress && this.element ) {
37 | this.element.addEventListener( 'click', this.onProgressClicked, false );
38 | }
39 |
40 | }
41 |
42 | unbind() {
43 |
44 | if ( this.Reveal.getConfig().progress && this.element ) {
45 | this.element.removeEventListener( 'click', this.onProgressClicked, false );
46 | }
47 |
48 | }
49 |
50 | /**
51 | * Updates the progress bar to reflect the current slide.
52 | */
53 | update() {
54 |
55 | // Update progress if enabled
56 | if( this.Reveal.getConfig().progress && this.bar ) {
57 |
58 | let scale = this.Reveal.getProgress();
59 |
60 | // Don't fill the progress bar if there's only one slide
61 | if( this.Reveal.getTotalSlides() < 2 ) {
62 | scale = 0;
63 | }
64 |
65 | this.bar.style.transform = 'scaleX('+ scale +')';
66 |
67 | }
68 |
69 | }
70 |
71 | getMaxWidth() {
72 |
73 | return this.Reveal.getRevealElement().offsetWidth;
74 |
75 | }
76 |
77 | /**
78 | * Clicking on the progress bar results in a navigation to the
79 | * closest approximate horizontal slide using this equation:
80 | *
81 | * ( clickX / presentationWidth ) * numberOfSlides
82 | *
83 | * @param {object} event
84 | */
85 | onProgressClicked( event ) {
86 |
87 | this.Reveal.onUserInput( event );
88 |
89 | event.preventDefault();
90 |
91 | let slides = this.Reveal.getSlides();
92 | let slidesTotal = slides.length;
93 | let slideIndex = Math.floor( ( event.clientX / this.getMaxWidth() ) * slidesTotal );
94 |
95 | if( this.Reveal.getConfig().rtl ) {
96 | slideIndex = slidesTotal - slideIndex;
97 | }
98 |
99 | let targetIndices = this.Reveal.getIndices(slides[slideIndex]);
100 | this.Reveal.slide( targetIndices.h, targetIndices.v );
101 |
102 | }
103 |
104 | destroy() {
105 |
106 | this.element.remove();
107 |
108 | }
109 |
110 | }
--------------------------------------------------------------------------------
/__presentation-slides/plugin/search/search.esm.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Handles finding a text string anywhere in the slides and showing the next occurrence to the user
3 | * by navigatating to that slide and highlighting it.
4 | *
5 | * @author Jon Snyder , February 2013
6 | */
7 | const e=()=>{let e,t,n,l,o,i,r;function s(){t=document.createElement("div"),t.classList.add("searchbox"),t.style.position="absolute",t.style.top="10px",t.style.right="10px",t.style.zIndex=10,t.innerHTML=' \n\t\t',n=t.querySelector(".searchinput"),n.style.width="240px",n.style.fontSize="14px",n.style.padding="4px 6px",n.style.color="#000",n.style.background="#fff",n.style.borderRadius="2px",n.style.border="0",n.style.outline="0",n.style.boxShadow="0 2px 18px rgba(0, 0, 0, 0.2)",n.style["-webkit-appearance"]="none",e.getRevealElement().appendChild(t),n.addEventListener("keyup",(function(t){if(13===t.keyCode)t.preventDefault(),function(){if(i){var t=n.value;""===t?(r&&r.remove(),l=null):(r=new p("slidecontent"),l=r.apply(t),o=0)}l&&(l.length&&l.length<=o&&(o=0),l.length>o&&(e.slide(l[o].h,l[o].v),o++))}(),i=!1;else i=!0}),!1),d()}function a(){t||s(),t.style.display="inline",n.focus(),n.select()}function d(){t||s(),t.style.display="none",r&&r.remove()}function c(){t||s(),"inline"!==t.style.display?a():d()}function p(t,n){var l=document.getElementById(t)||document.body,o=n||"EM",i=new RegExp("^(?:"+o+"|SCRIPT|FORM)$"),r=["#ff6","#a0ffff","#9f9","#f99","#f6f"],s=[],a=0,d="",c=[];this.setRegex=function(e){e=e.trim(),d=new RegExp("("+e+")","i")},this.getRegex=function(){return d.toString().replace(/^\/\\b\(|\)\\b\/i$/g,"").replace(/\|/g," ")},this.hiliteWords=function(t){if(null!=t&&t&&d&&!i.test(t.nodeName)){if(t.hasChildNodes())for(var n=0;n{e=t,e.registerKeyboardShortcut("CTRL + Shift + F","Search"),document.addEventListener("keydown",(function(e){"F"==e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),c())}),!1)},open:a,close:d,toggle:c}};export{e as default};
8 |
--------------------------------------------------------------------------------
/__presentation-slides/plugin/zoom/zoom.esm.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * reveal.js Zoom plugin
3 | */
4 | const e={id:"zoom",init:function(e){e.getRevealElement().addEventListener("mousedown",(function(t){var n=/Linux/.test(window.navigator.platform)?"ctrl":"alt",i=(e.getConfig().zoomKey?e.getConfig().zoomKey:n)+"Key",d=e.getConfig().zoomLevel?e.getConfig().zoomLevel:2;t[i]&&!e.isOverview()&&(t.preventDefault(),o.to({x:t.clientX,y:t.clientY,scale:d,pan:!1}))}))},destroy:()=>{o.reset()}};var t=()=>e,o=function(){var e=1,t=0,n=0,i=-1,d=-1,l="transform"in document.body.style;function s(t,o){var n=r();if(t.width=t.width||1,t.height=t.height||1,t.x-=(window.innerWidth-t.width*o)/2,t.y-=(window.innerHeight-t.height*o)/2,l)if(1===o)document.body.style.transform="";else{var i=n.x+"px "+n.y+"px",d="translate("+-t.x+"px,"+-t.y+"px) scale("+o+")";document.body.style.transformOrigin=i,document.body.style.transform=d}else 1===o?(document.body.style.position="",document.body.style.left="",document.body.style.top="",document.body.style.width="",document.body.style.height="",document.body.style.zoom=""):(document.body.style.position="relative",document.body.style.left=-(n.x+t.x)/o+"px",document.body.style.top=-(n.y+t.y)/o+"px",document.body.style.width=100*o+"%",document.body.style.height=100*o+"%",document.body.style.zoom=o);e=o,document.documentElement.classList&&(1!==e?document.documentElement.classList.add("zoomed"):document.documentElement.classList.remove("zoomed"))}function c(){var o=.12*window.innerWidth,i=.12*window.innerHeight,d=r();nwindow.innerHeight-i&&window.scroll(d.x,d.y+(1-(window.innerHeight-n)/i)*(14/e)),twindow.innerWidth-o&&window.scroll(d.x+(1-(window.innerWidth-t)/o)*(14/e),d.y)}function r(){return{x:void 0!==window.scrollX?window.scrollX:window.pageXOffset,y:void 0!==window.scrollY?window.scrollY:window.pageYOffset}}return l&&(document.body.style.transition="transform 0.8s ease"),document.addEventListener("keyup",(function(t){1!==e&&27===t.keyCode&&o.out()})),document.addEventListener("mousemove",(function(o){1!==e&&(t=o.clientX,n=o.clientY)})),{to:function(t){if(1!==e)o.out();else{if(t.x=t.x||0,t.y=t.y||0,t.element){var n=t.element.getBoundingClientRect();t.x=n.left-20,t.y=n.top-20,t.width=n.width+40,t.height=n.height+40}void 0!==t.width&&void 0!==t.height&&(t.scale=Math.max(Math.min(window.innerWidth/t.width,window.innerHeight/t.height),1)),t.scale>1&&(t.x*=t.scale,t.y*=t.scale,s(t,t.scale),!1!==t.pan&&(i=setTimeout((function(){d=setInterval(c,1e3/60)}),800)))}},out:function(){clearTimeout(i),clearInterval(d),s({x:0,y:0},1),e=1},magnify:function(e){this.to(e)},reset:function(){this.out()},zoomLevel:function(){return e}}}();
5 | /*!
6 | * zoom.js 0.3 (modified for use with reveal.js)
7 | * http://lab.hakim.se/zoom-js
8 | * MIT licensed
9 | *
10 | * Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se
11 | */export{t as default};
12 |
--------------------------------------------------------------------------------
/__presentation-slides/plugin/math/katex.js:
--------------------------------------------------------------------------------
1 | /**
2 | * A plugin which enables rendering of math equations inside
3 | * of reveal.js slides. Essentially a thin wrapper for KaTeX.
4 | *
5 | * @author Hakim El Hattab
6 | * @author Gerhard Burger
7 | */
8 | export const KaTeX = () => {
9 | let deck;
10 |
11 | let defaultOptions = {
12 | version: 'latest',
13 | delimiters: [
14 | {left: '$$', right: '$$', display: true}, // Note: $$ has to come before $
15 | {left: '$', right: '$', display: false},
16 | {left: '\\(', right: '\\)', display: false},
17 | {left: '\\[', right: '\\]', display: true}
18 | ],
19 | ignoredTags: ['script', 'noscript', 'style', 'textarea', 'pre']
20 | }
21 |
22 | const loadCss = src => {
23 | let link = document.createElement('link');
24 | link.rel = 'stylesheet';
25 | link.href = src;
26 | document.head.appendChild(link);
27 | };
28 |
29 | /**
30 | * Loads a JavaScript file and returns a Promise for when it is loaded
31 | * Credits: https://aaronsmith.online/easily-load-an-external-script-using-javascript/
32 | */
33 | const loadScript = src => {
34 | return new Promise((resolve, reject) => {
35 | const script = document.createElement('script')
36 | script.type = 'text/javascript'
37 | script.onload = resolve
38 | script.onerror = reject
39 | script.src = src
40 | document.head.append(script)
41 | })
42 | };
43 |
44 | async function loadScripts(urls) {
45 | for(const url of urls) {
46 | await loadScript(url);
47 | }
48 | }
49 |
50 | return {
51 | id: 'katex',
52 |
53 | init: function (reveal) {
54 |
55 | deck = reveal;
56 |
57 | let revealOptions = deck.getConfig().katex || {};
58 |
59 | let options = {...defaultOptions, ...revealOptions};
60 | const {local, version, extensions, ...katexOptions} = options;
61 |
62 | let baseUrl = options.local || 'https://cdn.jsdelivr.net/npm/katex';
63 | let versionString = options.local ? '' : '@' + options.version;
64 |
65 | let cssUrl = baseUrl + versionString + '/dist/katex.min.css';
66 | let katexUrl = baseUrl + versionString + '/dist/katex.min.js';
67 | let mhchemUrl = baseUrl + versionString + '/dist/contrib/mhchem.min.js'
68 | let karUrl = baseUrl + versionString + '/dist/contrib/auto-render.min.js';
69 |
70 | let katexScripts = [katexUrl];
71 | if(options.extensions && options.extensions.includes("mhchem")) {
72 | katexScripts.push(mhchemUrl);
73 | }
74 | katexScripts.push(karUrl);
75 |
76 | const renderMath = () => {
77 | renderMathInElement(reveal.getSlidesElement(), katexOptions);
78 | deck.layout();
79 | }
80 |
81 | loadCss(cssUrl);
82 |
83 | // For some reason dynamically loading with defer attribute doesn't result in the expected behavior, the below code does
84 | loadScripts(katexScripts).then(() => {
85 | if( deck.isReady() ) {
86 | renderMath();
87 | }
88 | else {
89 | deck.on( 'ready', renderMath.bind( this ) );
90 | }
91 | });
92 |
93 | }
94 | }
95 |
96 | };
97 |
--------------------------------------------------------------------------------
/__presentation-slides/plugin/math/math.esm.js:
--------------------------------------------------------------------------------
1 | const t=()=>{let t,e={messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]],skipTags:["script","noscript","style","textarea","pre"]},skipStartupTypeset:!0};return{id:"mathjax2",init:function(a){t=a;let n=t.getConfig().mathjax2||t.getConfig().math||{},i={...e,...n},s=(i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js")+"?config="+(i.config||"TeX-AMS_HTML-full");i.tex2jax={...e.tex2jax,...n.tex2jax},i.mathjax=i.config=null,function(t,e){let a=document.querySelector("head"),n=document.createElement("script");n.type="text/javascript",n.src=t;let i=()=>{"function"==typeof e&&(e.call(),e=null)};n.onload=i,n.onreadystatechange=()=>{"loaded"===this.readyState&&i()},a.appendChild(n)}(s,(function(){MathJax.Hub.Config(i),MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.getRevealElement()]),MathJax.Hub.Queue(t.layout),t.on("slidechanged",(function(t){MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.currentSlide])}))}))}}},e=t;
2 | /*!
3 | * This plugin is a wrapper for the MathJax2,
4 | * MathJax3 and KaTeX typesetter plugins.
5 | */
6 | var a=Plugin=Object.assign(e(),{KaTeX:()=>{let t,e={version:"latest",delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],ignoredTags:["script","noscript","style","textarea","pre"]};const a=t=>new Promise(((e,a)=>{const n=document.createElement("script");n.type="text/javascript",n.onload=e,n.onerror=a,n.src=t,document.head.append(n)}));return{id:"katex",init:function(n){t=n;let i=t.getConfig().katex||{},s={...e,...i};const{local:l,version:o,extensions:r,...c}=s;let d=s.local||"https://cdn.jsdelivr.net/npm/katex",p=s.local?"":"@"+s.version,u=d+p+"/dist/katex.min.css",h=d+p+"/dist/contrib/mhchem.min.js",x=d+p+"/dist/contrib/auto-render.min.js",m=[d+p+"/dist/katex.min.js"];s.extensions&&s.extensions.includes("mhchem")&&m.push(h),m.push(x);const f=()=>{renderMathInElement(n.getSlidesElement(),c),t.layout()};(t=>{let e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)})(u),async function(t){for(const e of t)await a(e)}(m).then((()=>{t.isReady()?f():t.on("ready",f.bind(this))}))}}},MathJax2:t,MathJax3:()=>{let t,e={tex:{inlineMath:[["$","$"],["\\(","\\)"]]},options:{skipHtmlTags:["script","noscript","style","textarea","pre"]},startup:{ready:()=>{MathJax.startup.defaultReady(),MathJax.startup.promise.then((()=>{t.layout()}))}}};return{id:"mathjax3",init:function(a){t=a;let n=t.getConfig().mathjax3||{},i={...e,...n};i.tex={...e.tex,...n.tex},i.options={...e.options,...n.options},i.startup={...e.startup,...n.startup};let s=i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";i.mathjax=null,window.MathJax=i,function(t,e){let a=document.createElement("script");a.type="text/javascript",a.id="MathJax-script",a.src=t,a.async=!0,a.onload=()=>{"function"==typeof e&&(e.call(),e=null)},document.head.appendChild(a)}(s,(function(){t.addEventListener("slidechanged",(function(t){MathJax.typeset()}))}))}}}});export{a as default};
7 |
--------------------------------------------------------------------------------
/__presentation-slides/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "reveal.js",
3 | "version": "5.1.0",
4 | "description": "The HTML Presentation Framework",
5 | "homepage": "https://revealjs.com",
6 | "subdomain": "revealjs",
7 | "main": "dist/reveal.js",
8 | "module": "dist/reveal.esm.js",
9 | "license": "MIT",
10 | "scripts": {
11 | "test": "gulp test",
12 | "start": "gulp serve",
13 | "build": "gulp build"
14 | },
15 | "author": {
16 | "name": "Hakim El Hattab",
17 | "email": "hakim.elhattab@gmail.com",
18 | "web": "https://hakim.se"
19 | },
20 | "repository": {
21 | "type": "git",
22 | "url": "git://github.com/hakimel/reveal.js.git"
23 | },
24 | "engines": {
25 | "node": ">=18.0.0"
26 | },
27 | "keywords": [
28 | "reveal",
29 | "slides",
30 | "presentation"
31 | ],
32 | "devDependencies": {
33 | "@babel/core": "^7.23.2",
34 | "@babel/eslint-parser": "^7.22.15",
35 | "@babel/preset-env": "^7.23.2",
36 | "@rollup/plugin-babel": "^6.0.4",
37 | "@rollup/plugin-commonjs": "^25.0.7",
38 | "@rollup/plugin-node-resolve": "^15.2.3",
39 | "@rollup/plugin-terser": "^0.4.4",
40 | "babel-plugin-transform-html-import-to-string": "2.0.0",
41 | "colors": "^1.4.0",
42 | "core-js": "^3.33.1",
43 | "fitty": "^2.3.7",
44 | "glob": "^10.3.10",
45 | "gulp": "^5.0.0",
46 | "gulp-autoprefixer": "^8.0.0",
47 | "gulp-clean-css": "^4.3.0",
48 | "gulp-connect": "^5.7.0",
49 | "gulp-eslint": "^6.0.0",
50 | "gulp-header-comment": "^0.10.0",
51 | "gulp-zip": "^5.1.0",
52 | "highlight.js": "^11.9.0",
53 | "marked": "^4.3.0",
54 | "node-qunit-puppeteer": "^2.2.0",
55 | "through2": "^4.0.2",
56 | "qunit": "^2.22.0",
57 | "rollup": "^4.1.5",
58 | "sass": "^1.79.4",
59 | "yargs": "^17.7.2"
60 | },
61 | "overrides": {
62 | "gulp-connect": {
63 | "send": "0.19.0"
64 | },
65 | "gulp-header-comment": {
66 | "moment": "2.30.1"
67 | }
68 | },
69 | "browserslist": "> 2%, not dead",
70 | "eslintConfig": {
71 | "env": {
72 | "browser": true,
73 | "es6": true
74 | },
75 | "parser": "@babel/eslint-parser",
76 | "parserOptions": {
77 | "sourceType": "module",
78 | "allowImportExportEverywhere": true,
79 | "requireConfigFile": false
80 | },
81 | "globals": {
82 | "module": false,
83 | "console": false,
84 | "unescape": false,
85 | "define": false,
86 | "exports": false
87 | },
88 | "rules": {
89 | "curly": 0,
90 | "eqeqeq": 2,
91 | "wrap-iife": [
92 | 2,
93 | "any"
94 | ],
95 | "no-use-before-define": [
96 | 2,
97 | {
98 | "functions": false
99 | }
100 | ],
101 | "new-cap": 2,
102 | "no-caller": 2,
103 | "dot-notation": 0,
104 | "no-eq-null": 2,
105 | "no-unused-expressions": 0
106 | }
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/__extra-resources/javascript-frameworks.md:
--------------------------------------------------------------------------------
1 | # JavaScript Frameworks Supporting Modular Architecture
2 |
3 | Modular architecture is a design principle that allows developers to break down applications into smaller, reusable, and independent modules. Below is a list of JavaScript frameworks that support modular architecture:
4 |
5 | ## React
6 |
7 | - **Type**: Library (often used as a framework)
8 | - **Features**: Component-based architecture, reusable modules, and state management with tools like Redux or Context API.
9 | - **Website**: [https://reactjs.org](https://reactjs.org)
10 | - **Notes**: Mentioned in the video recording.
11 |
12 | ## Angular
13 |
14 | - **Type**: Full-fledged framework
15 | - **Features**: Built-in dependency injection, modular NgModules, and a powerful CLI for scaffolding.
16 | - **Website**: [https://angular.io](https://angular.io)
17 | - **Notes**: Mentioned in the video recording.
18 |
19 | ## Vue.js
20 |
21 | - **Type**: Progressive framework
22 | - **Features**: Component-based structure, Vuex for state management, and support for single-file components.
23 | - **Website**: [https://vuejs.org](https://vuejs.org)
24 | - **Notes**: Mentioned in the video recording.
25 |
26 | ## Svelte
27 |
28 | - **Type**: Framework
29 | - **Features**: Component-based architecture, no virtual DOM, and modularity through Svelte components.
30 | - **Website**: [https://svelte.dev](https://svelte.dev)
31 | - **Notes**: Not mentioned in the video recording.
32 |
33 | ## Ember.js
34 |
35 | - **Type**: Framework
36 | - **Features**: Convention over configuration, modular structure with Ember CLI, and built-in state management.
37 | - **Website**: [https://emberjs.com](https://emberjs.com)
38 | - **Notes**: Not mentioned in the video recording.
39 |
40 | ## Next.js
41 |
42 | - **Type**: Framework (built on React)
43 | - **Features**: Modular file-based routing, server-side rendering, and API routes for modular backend logic.
44 | - **Website**: [https://nextjs.org](https://nextjs.org)
45 | - **Notes**: Not mentioned in the video recording.
46 |
47 | ## Nuxt.js
48 |
49 | - **Type**: Framework (built on Vue.js)
50 | - **Features**: Modular file-based routing, server-side rendering, and support for Vuex for state management.
51 | - **Website**: [https://nuxt.com](https://nuxt.com)
52 | - **Notes**: Not mentioned in the video recording.
53 |
54 | ## Meteor
55 |
56 | - **Type**: Full-stack framework
57 | - **Features**: Modular packages, real-time data updates, and support for both frontend and backend development.
58 | - **Website**: [https://www.meteor.com](https://www.meteor.com)
59 | - **Notes**: Not mentioned in the video recording.
60 |
61 | ## Lit
62 |
63 | - **Type**: Library (for building web components)
64 | - **Features**: Modular web components, lightweight, and reusable custom elements.
65 | - **Website**: [https://lit.dev](https://lit.dev)
66 | - **Notes**: Not mentioned in the video recording.
67 |
68 | These frameworks and libraries provide robust support for modular development, enabling developers to build scalable and maintainable applications.
69 |
--------------------------------------------------------------------------------
/__presentation-slides/plugin/search/search.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).RevealSearch=t()}(this,(function(){"use strict";
2 | /*!
3 | * Handles finding a text string anywhere in the slides and showing the next occurrence to the user
4 | * by navigatating to that slide and highlighting it.
5 | *
6 | * @author Jon Snyder , February 2013
7 | */return()=>{let e,t,n,o,i,l,s;function r(){t=document.createElement("div"),t.classList.add("searchbox"),t.style.position="absolute",t.style.top="10px",t.style.right="10px",t.style.zIndex=10,t.innerHTML=' \n\t\t',n=t.querySelector(".searchinput"),n.style.width="240px",n.style.fontSize="14px",n.style.padding="4px 6px",n.style.color="#000",n.style.background="#fff",n.style.borderRadius="2px",n.style.border="0",n.style.outline="0",n.style.boxShadow="0 2px 18px rgba(0, 0, 0, 0.2)",n.style["-webkit-appearance"]="none",e.getRevealElement().appendChild(t),n.addEventListener("keyup",(function(t){if(13===t.keyCode)t.preventDefault(),function(){if(l){var t=n.value;""===t?(s&&s.remove(),o=null):(s=new f("slidecontent"),o=s.apply(t),i=0)}o&&(o.length&&o.length<=i&&(i=0),o.length>i&&(e.slide(o[i].h,o[i].v),i++))}(),l=!1;else l=!0}),!1),d()}function a(){t||r(),t.style.display="inline",n.focus(),n.select()}function d(){t||r(),t.style.display="none",s&&s.remove()}function c(){t||r(),"inline"!==t.style.display?a():d()}function f(t,n){var o=document.getElementById(t)||document.body,i=n||"EM",l=new RegExp("^(?:"+i+"|SCRIPT|FORM)$"),s=["#ff6","#a0ffff","#9f9","#f99","#f6f"],r=[],a=0,d="",c=[];this.setRegex=function(e){e=e.trim(),d=new RegExp("("+e+")","i")},this.getRegex=function(){return d.toString().replace(/^\/\\b\(|\)\\b\/i$/g,"").replace(/\|/g," ")},this.hiliteWords=function(t){if(null!=t&&t&&d&&!l.test(t.nodeName)){if(t.hasChildNodes())for(var n=0;n{e=t,e.registerKeyboardShortcut("CTRL + Shift + F","Search"),document.addEventListener("keydown",(function(e){"F"==e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),c())}),!1)},open:a,close:d,toggle:c}}}));
8 |
--------------------------------------------------------------------------------
/__presentation-slides/plugin/math/math.js:
--------------------------------------------------------------------------------
1 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).RevealMath=e()}(this,(function(){"use strict";const t=()=>{let t,e={messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]],skipTags:["script","noscript","style","textarea","pre"]},skipStartupTypeset:!0};return{id:"mathjax2",init:function(n){t=n;let a=t.getConfig().mathjax2||t.getConfig().math||{},i={...e,...a},s=(i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js")+"?config="+(i.config||"TeX-AMS_HTML-full");i.tex2jax={...e.tex2jax,...a.tex2jax},i.mathjax=i.config=null,function(t,e){let n=document.querySelector("head"),a=document.createElement("script");a.type="text/javascript",a.src=t;let i=()=>{"function"==typeof e&&(e.call(),e=null)};a.onload=i,a.onreadystatechange=()=>{"loaded"===this.readyState&&i()},n.appendChild(a)}(s,(function(){MathJax.Hub.Config(i),MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.getRevealElement()]),MathJax.Hub.Queue(t.layout),t.on("slidechanged",(function(t){MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.currentSlide])}))}))}}},e=t;return Plugin=Object.assign(e(),{KaTeX:()=>{let t,e={version:"latest",delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],ignoredTags:["script","noscript","style","textarea","pre"]};const n=t=>new Promise(((e,n)=>{const a=document.createElement("script");a.type="text/javascript",a.onload=e,a.onerror=n,a.src=t,document.head.append(a)}));return{id:"katex",init:function(a){t=a;let i=t.getConfig().katex||{},s={...e,...i};const{local:o,version:l,extensions:r,...c}=s;let d=s.local||"https://cdn.jsdelivr.net/npm/katex",u=s.local?"":"@"+s.version,p=d+u+"/dist/katex.min.css",h=d+u+"/dist/contrib/mhchem.min.js",x=d+u+"/dist/contrib/auto-render.min.js",m=[d+u+"/dist/katex.min.js"];s.extensions&&s.extensions.includes("mhchem")&&m.push(h),m.push(x);const f=()=>{renderMathInElement(a.getSlidesElement(),c),t.layout()};(t=>{let e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)})(p),async function(t){for(const e of t)await n(e)}(m).then((()=>{t.isReady()?f():t.on("ready",f.bind(this))}))}}},MathJax2:t,MathJax3:()=>{let t,e={tex:{inlineMath:[["$","$"],["\\(","\\)"]]},options:{skipHtmlTags:["script","noscript","style","textarea","pre"]},startup:{ready:()=>{MathJax.startup.defaultReady(),MathJax.startup.promise.then((()=>{t.layout()}))}}};return{id:"mathjax3",init:function(n){t=n;let a=t.getConfig().mathjax3||{},i={...e,...a};i.tex={...e.tex,...a.tex},i.options={...e.options,...a.options},i.startup={...e.startup,...a.startup};let s=i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";i.mathjax=null,window.MathJax=i,function(t,e){let n=document.createElement("script");n.type="text/javascript",n.id="MathJax-script",n.src=t,n.async=!0,n.onload=()=>{"function"==typeof e&&(e.call(),e=null)},document.head.appendChild(n)}(s,(function(){t.addEventListener("slidechanged",(function(t){MathJax.typeset()}))}))}}}})}));
2 |
--------------------------------------------------------------------------------
/__presentation-slides/plugin/zoom/zoom.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).RevealZoom=t()}(this,(function(){"use strict";
2 | /*!
3 | * reveal.js Zoom plugin
4 | */const e={id:"zoom",init:function(e){e.getRevealElement().addEventListener("mousedown",(function(o){var n=/Linux/.test(window.navigator.platform)?"ctrl":"alt",i=(e.getConfig().zoomKey?e.getConfig().zoomKey:n)+"Key",d=e.getConfig().zoomLevel?e.getConfig().zoomLevel:2;o[i]&&!e.isOverview()&&(o.preventDefault(),t.to({x:o.clientX,y:o.clientY,scale:d,pan:!1}))}))},destroy:()=>{t.reset()}};var t=function(){var e=1,o=0,n=0,i=-1,d=-1,l="transform"in document.body.style;function s(t,o){var n=r();if(t.width=t.width||1,t.height=t.height||1,t.x-=(window.innerWidth-t.width*o)/2,t.y-=(window.innerHeight-t.height*o)/2,l)if(1===o)document.body.style.transform="";else{var i=n.x+"px "+n.y+"px",d="translate("+-t.x+"px,"+-t.y+"px) scale("+o+")";document.body.style.transformOrigin=i,document.body.style.transform=d}else 1===o?(document.body.style.position="",document.body.style.left="",document.body.style.top="",document.body.style.width="",document.body.style.height="",document.body.style.zoom=""):(document.body.style.position="relative",document.body.style.left=-(n.x+t.x)/o+"px",document.body.style.top=-(n.y+t.y)/o+"px",document.body.style.width=100*o+"%",document.body.style.height=100*o+"%",document.body.style.zoom=o);e=o,document.documentElement.classList&&(1!==e?document.documentElement.classList.add("zoomed"):document.documentElement.classList.remove("zoomed"))}function c(){var t=.12*window.innerWidth,i=.12*window.innerHeight,d=r();nwindow.innerHeight-i&&window.scroll(d.x,d.y+(1-(window.innerHeight-n)/i)*(14/e)),owindow.innerWidth-t&&window.scroll(d.x+(1-(window.innerWidth-o)/t)*(14/e),d.y)}function r(){return{x:void 0!==window.scrollX?window.scrollX:window.pageXOffset,y:void 0!==window.scrollY?window.scrollY:window.pageYOffset}}return l&&(document.body.style.transition="transform 0.8s ease"),document.addEventListener("keyup",(function(o){1!==e&&27===o.keyCode&&t.out()})),document.addEventListener("mousemove",(function(t){1!==e&&(o=t.clientX,n=t.clientY)})),{to:function(o){if(1!==e)t.out();else{if(o.x=o.x||0,o.y=o.y||0,o.element){var n=o.element.getBoundingClientRect();o.x=n.left-20,o.y=n.top-20,o.width=n.width+40,o.height=n.height+40}void 0!==o.width&&void 0!==o.height&&(o.scale=Math.max(Math.min(window.innerWidth/o.width,window.innerHeight/o.height),1)),o.scale>1&&(o.x*=o.scale,o.y*=o.scale,s(o,o.scale),!1!==o.pan&&(i=setTimeout((function(){d=setInterval(c,1e3/60)}),800)))}},out:function(){clearTimeout(i),clearInterval(d),s({x:0,y:0},1),e=1},magnify:function(e){this.to(e)},reset:function(){this.out()},zoomLevel:function(){return e}}}();
5 | /*!
6 | * zoom.js 0.3 (modified for use with reveal.js)
7 | * http://lab.hakim.se/zoom-js
8 | * MIT licensed
9 | *
10 | * Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se
11 | */return()=>e}));
12 |
--------------------------------------------------------------------------------
/__presentation-slides/examples/multiple-presentations.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Multiple Presentations
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | import React, { useState } from 'react';
26 | function Example() {
27 | const [count, setCount] = useState(0);
28 | }
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
47 |
48 | The Lorenz Equations
49 |
50 | \[\begin{aligned}
51 | \dot{x} & = \sigma(y-x) \\
52 | \dot{y} & = \rho x - y - xz \\
53 | \dot{z} & = -\beta z + xy
54 | \end{aligned} \]
55 |
56 |
57 |
58 |
59 |
60 |
68 |
69 |
70 |
71 |
72 |
73 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-multiple-instances.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Iframes
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
97 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-plugins.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Plugins
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
106 |
107 |
108 |
109 |
--------------------------------------------------------------------------------
/__presentation-slides/js/controllers/notes.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Handles the showing of speaker notes
3 | */
4 | export default class Notes {
5 |
6 | constructor( Reveal ) {
7 |
8 | this.Reveal = Reveal;
9 |
10 | }
11 |
12 | render() {
13 |
14 | this.element = document.createElement( 'div' );
15 | this.element.className = 'speaker-notes';
16 | this.element.setAttribute( 'data-prevent-swipe', '' );
17 | this.element.setAttribute( 'tabindex', '0' );
18 | this.Reveal.getRevealElement().appendChild( this.element );
19 |
20 | }
21 |
22 | /**
23 | * Called when the reveal.js config is updated.
24 | */
25 | configure( config, oldConfig ) {
26 |
27 | if( config.showNotes ) {
28 | this.element.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );
29 | }
30 |
31 | }
32 |
33 | /**
34 | * Pick up notes from the current slide and display them
35 | * to the viewer.
36 | *
37 | * @see {@link config.showNotes}
38 | */
39 | update() {
40 |
41 | if( this.Reveal.getConfig().showNotes &&
42 | this.element && this.Reveal.getCurrentSlide() &&
43 | !this.Reveal.isScrollView() &&
44 | !this.Reveal.isPrintView()
45 | ) {
46 | this.element.innerHTML = this.getSlideNotes() || 'No notes on this slide. ';
47 | }
48 |
49 | }
50 |
51 | /**
52 | * Updates the visibility of the speaker notes sidebar that
53 | * is used to share annotated slides. The notes sidebar is
54 | * only visible if showNotes is true and there are notes on
55 | * one or more slides in the deck.
56 | */
57 | updateVisibility() {
58 |
59 | if( this.Reveal.getConfig().showNotes &&
60 | this.hasNotes() &&
61 | !this.Reveal.isScrollView() &&
62 | !this.Reveal.isPrintView()
63 | ) {
64 | this.Reveal.getRevealElement().classList.add( 'show-notes' );
65 | }
66 | else {
67 | this.Reveal.getRevealElement().classList.remove( 'show-notes' );
68 | }
69 |
70 | }
71 |
72 | /**
73 | * Checks if there are speaker notes for ANY slide in the
74 | * presentation.
75 | */
76 | hasNotes() {
77 |
78 | return this.Reveal.getSlidesElement().querySelectorAll( '[data-notes], aside.notes' ).length > 0;
79 |
80 | }
81 |
82 | /**
83 | * Checks if this presentation is running inside of the
84 | * speaker notes window.
85 | *
86 | * @return {boolean}
87 | */
88 | isSpeakerNotesWindow() {
89 |
90 | return !!window.location.search.match( /receiver/gi );
91 |
92 | }
93 |
94 | /**
95 | * Retrieves the speaker notes from a slide. Notes can be
96 | * defined in two ways:
97 | * 1. As a data-notes attribute on the slide
98 | * 2. With elements inside the slide
99 | *
100 | * @param {HTMLElement} [slide=currentSlide]
101 | * @return {(string|null)}
102 | */
103 | getSlideNotes( slide = this.Reveal.getCurrentSlide() ) {
104 |
105 | // Notes can be specified via the data-notes attribute...
106 | if( slide.hasAttribute( 'data-notes' ) ) {
107 | return slide.getAttribute( 'data-notes' );
108 | }
109 |
110 | // ... or using elements
111 | let notesElements = slide.querySelectorAll( 'aside.notes' );
112 | if( notesElements ) {
113 | return Array.from(notesElements).map( notesElement => notesElement.innerHTML ).join( '\n' );
114 | }
115 |
116 | return null;
117 |
118 | }
119 |
120 | destroy() {
121 |
122 | this.element.remove();
123 |
124 | }
125 |
126 | }
--------------------------------------------------------------------------------
/__presentation-slides/js/controllers/pointer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Handles hiding of the pointer/cursor when inactive.
3 | */
4 | export default class Pointer {
5 |
6 | constructor( Reveal ) {
7 |
8 | this.Reveal = Reveal;
9 |
10 | // Throttles mouse wheel navigation
11 | this.lastMouseWheelStep = 0;
12 |
13 | // Is the mouse pointer currently hidden from view
14 | this.cursorHidden = false;
15 |
16 | // Timeout used to determine when the cursor is inactive
17 | this.cursorInactiveTimeout = 0;
18 |
19 | this.onDocumentCursorActive = this.onDocumentCursorActive.bind( this );
20 | this.onDocumentMouseScroll = this.onDocumentMouseScroll.bind( this );
21 |
22 | }
23 |
24 | /**
25 | * Called when the reveal.js config is updated.
26 | */
27 | configure( config, oldConfig ) {
28 |
29 | if( config.mouseWheel ) {
30 | document.addEventListener( 'wheel', this.onDocumentMouseScroll, false );
31 | }
32 | else {
33 | document.removeEventListener( 'wheel', this.onDocumentMouseScroll, false );
34 | }
35 |
36 | // Auto-hide the mouse pointer when its inactive
37 | if( config.hideInactiveCursor ) {
38 | document.addEventListener( 'mousemove', this.onDocumentCursorActive, false );
39 | document.addEventListener( 'mousedown', this.onDocumentCursorActive, false );
40 | }
41 | else {
42 | this.showCursor();
43 |
44 | document.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );
45 | document.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );
46 | }
47 |
48 | }
49 |
50 | /**
51 | * Shows the mouse pointer after it has been hidden with
52 | * #hideCursor.
53 | */
54 | showCursor() {
55 |
56 | if( this.cursorHidden ) {
57 | this.cursorHidden = false;
58 | this.Reveal.getRevealElement().style.cursor = '';
59 | }
60 |
61 | }
62 |
63 | /**
64 | * Hides the mouse pointer when it's on top of the .reveal
65 | * container.
66 | */
67 | hideCursor() {
68 |
69 | if( this.cursorHidden === false ) {
70 | this.cursorHidden = true;
71 | this.Reveal.getRevealElement().style.cursor = 'none';
72 | }
73 |
74 | }
75 |
76 | destroy() {
77 |
78 | this.showCursor();
79 |
80 | document.removeEventListener( 'wheel', this.onDocumentMouseScroll, false );
81 | document.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );
82 | document.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );
83 |
84 | }
85 |
86 | /**
87 | * Called whenever there is mouse input at the document level
88 | * to determine if the cursor is active or not.
89 | *
90 | * @param {object} event
91 | */
92 | onDocumentCursorActive( event ) {
93 |
94 | this.showCursor();
95 |
96 | clearTimeout( this.cursorInactiveTimeout );
97 |
98 | this.cursorInactiveTimeout = setTimeout( this.hideCursor.bind( this ), this.Reveal.getConfig().hideCursorTime );
99 |
100 | }
101 |
102 | /**
103 | * Handles mouse wheel scrolling, throttled to avoid skipping
104 | * multiple slides.
105 | *
106 | * @param {object} event
107 | */
108 | onDocumentMouseScroll( event ) {
109 |
110 | if( Date.now() - this.lastMouseWheelStep > 1000 ) {
111 |
112 | this.lastMouseWheelStep = Date.now();
113 |
114 | let delta = event.detail || -event.wheelDelta;
115 | if( delta > 0 ) {
116 | this.Reveal.next();
117 | }
118 | else if( delta < 0 ) {
119 | this.Reveal.prev();
120 | }
121 |
122 | }
123 |
124 | }
125 |
126 | }
127 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-iframes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Iframes
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-iframe-backgrounds.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Iframe Backgrounds
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/__presentation-slides/css/print/pdf.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * This stylesheet is used to print reveal.js
3 | * presentations to PDF.
4 | *
5 | * https://revealjs.com/pdf-export/
6 | */
7 |
8 | html.reveal-print {
9 | * {
10 | -webkit-print-color-adjust: exact;
11 | }
12 |
13 | & {
14 | width: 100%;
15 | height: 100%;
16 | overflow: visible;
17 | }
18 |
19 | body {
20 | margin: 0 auto !important;
21 | border: 0;
22 | padding: 0;
23 | float: none !important;
24 | overflow: visible;
25 | }
26 |
27 | /* Remove any elements not needed in print. */
28 | .nestedarrow,
29 | .reveal .controls,
30 | .reveal .progress,
31 | .reveal .playback,
32 | .reveal.overview,
33 | .state-background {
34 | display: none !important;
35 | }
36 |
37 | .reveal pre code {
38 | overflow: hidden !important;
39 | }
40 |
41 | .reveal {
42 | width: auto !important;
43 | height: auto !important;
44 | overflow: hidden !important;
45 | }
46 | .reveal .slides {
47 | position: static;
48 | width: 100% !important;
49 | height: auto !important;
50 | zoom: 1 !important;
51 | pointer-events: initial;
52 |
53 | left: auto;
54 | top: auto;
55 | margin: 0 !important;
56 | padding: 0 !important;
57 |
58 | overflow: visible;
59 | display: block;
60 |
61 | perspective: none;
62 | perspective-origin: 50% 50%;
63 | }
64 |
65 | .reveal .slides .pdf-page {
66 | position: relative;
67 | overflow: hidden;
68 | z-index: 1;
69 |
70 | page-break-after: always;
71 | }
72 |
73 | .reveal .slides .pdf-page:last-of-type {
74 | page-break-after: avoid;
75 | }
76 |
77 | .reveal .slides section {
78 | visibility: visible !important;
79 | display: block !important;
80 | position: absolute !important;
81 |
82 | margin: 0 !important;
83 | padding: 0 !important;
84 | box-sizing: border-box !important;
85 | min-height: 1px;
86 |
87 | opacity: 1 !important;
88 |
89 | transform-style: flat !important;
90 | transform: none !important;
91 | }
92 |
93 | .reveal section.stack {
94 | position: relative !important;
95 | margin: 0 !important;
96 | padding: 0 !important;
97 | page-break-after: avoid !important;
98 | height: auto !important;
99 | min-height: auto !important;
100 | }
101 |
102 | .reveal img {
103 | box-shadow: none;
104 | }
105 |
106 | /* Slide backgrounds are placed inside of their slide when exporting to PDF */
107 | .reveal .backgrounds {
108 | display: none;
109 | }
110 | .reveal .slide-background {
111 | display: block !important;
112 | position: absolute;
113 | top: 0;
114 | left: 0;
115 | width: 100%;
116 | height: 100%;
117 | z-index: auto !important;
118 | }
119 |
120 | /* Display slide speaker notes when 'showNotes' is enabled */
121 | .reveal.show-notes {
122 | max-width: none;
123 | max-height: none;
124 | }
125 | .reveal .speaker-notes-pdf {
126 | display: block;
127 | width: 100%;
128 | height: auto;
129 | max-height: none;
130 | top: auto;
131 | right: auto;
132 | bottom: auto;
133 | left: auto;
134 | z-index: 100;
135 | }
136 |
137 | /* Layout option which makes notes appear on a separate page */
138 | .reveal .speaker-notes-pdf[data-layout="separate-page"] {
139 | position: relative;
140 | color: inherit;
141 | background-color: transparent;
142 | padding: 20px;
143 | page-break-after: always;
144 | border: 0;
145 | }
146 |
147 | /* Display slide numbers when 'slideNumber' is enabled */
148 | .reveal .slide-number-pdf {
149 | display: block;
150 | position: absolute;
151 | font-size: 14px;
152 | visibility: visible;
153 | }
154 |
155 | /* This accessibility tool is not useful in PDF and breaks it visually */
156 | .aria-status {
157 | display: none;
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-state.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test State
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
132 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/__presentation-slides/css/print/paper.scss:
--------------------------------------------------------------------------------
1 |
2 | @media print {
3 | html:not(.print-pdf) {
4 | overflow: visible;
5 | width: auto;
6 | height: auto;
7 |
8 | body {
9 | margin: 0;
10 | padding: 0;
11 | overflow: visible;
12 | }
13 | }
14 |
15 | html:not(.print-pdf) .reveal {
16 | background: #fff;
17 | font-size: 20pt;
18 |
19 | .controls,
20 | .state-background,
21 | .progress,
22 | .backgrounds,
23 | .slide-number {
24 | display: none !important;
25 | }
26 |
27 | p, td, li {
28 | font-size: 20pt!important;
29 | color: #000;
30 | }
31 |
32 | h1,h2,h3,h4,h5,h6 {
33 | color: #000!important;
34 | height: auto;
35 | line-height: normal;
36 | text-align: left;
37 | letter-spacing: normal;
38 | }
39 |
40 | h1 { font-size: 28pt !important; }
41 | h2 { font-size: 24pt !important; }
42 | h3 { font-size: 22pt !important; }
43 | h4 { font-size: 22pt !important; font-variant: small-caps; }
44 | h5 { font-size: 21pt !important; }
45 | h6 { font-size: 20pt !important; font-style: italic; }
46 |
47 | a:link,
48 | a:visited {
49 | color: #000 !important;
50 | font-weight: bold;
51 | text-decoration: underline;
52 | }
53 |
54 | ul, ol, div, p {
55 | visibility: visible;
56 | position: static;
57 | width: auto;
58 | height: auto;
59 | display: block;
60 | overflow: visible;
61 | margin: 0;
62 | text-align: left !important;
63 | }
64 | pre,
65 | table {
66 | margin-left: 0;
67 | margin-right: 0;
68 | }
69 | pre code {
70 | padding: 20px;
71 | }
72 | blockquote {
73 | margin: 20px 0;
74 | }
75 |
76 | .slides {
77 | position: static !important;
78 | width: auto !important;
79 | height: auto !important;
80 |
81 | left: 0 !important;
82 | top: 0 !important;
83 | margin-left: 0 !important;
84 | margin-top: 0 !important;
85 | padding: 0 !important;
86 | zoom: 1 !important;
87 | transform: none !important;
88 |
89 | overflow: visible !important;
90 | display: block !important;
91 |
92 | text-align: left !important;
93 | perspective: none;
94 |
95 | perspective-origin: 50% 50%;
96 | }
97 | .slides section {
98 | visibility: visible !important;
99 | position: static !important;
100 | width: auto !important;
101 | height: auto !important;
102 | display: block !important;
103 | overflow: visible !important;
104 |
105 | left: 0 !important;
106 | top: 0 !important;
107 | margin-left: 0 !important;
108 | margin-top: 0 !important;
109 | padding: 60px 20px !important;
110 | z-index: auto !important;
111 |
112 | opacity: 1 !important;
113 |
114 | page-break-after: always !important;
115 |
116 | transform-style: flat !important;
117 | transform: none !important;
118 | transition: none !important;
119 | }
120 | .slides section.stack {
121 | padding: 0 !important;
122 | }
123 | .slides section:last-of-type {
124 | page-break-after: avoid !important;
125 | }
126 | .slides section .fragment {
127 | opacity: 1 !important;
128 | visibility: visible !important;
129 |
130 | transform: none !important;
131 | }
132 |
133 | .r-fit-text {
134 | white-space: normal !important;
135 | }
136 |
137 | section img {
138 | display: block;
139 | margin: 15px 0px;
140 | background: rgba(255,255,255,1);
141 | border: 1px solid #666;
142 | box-shadow: none;
143 | }
144 |
145 | section small {
146 | font-size: 0.8em;
147 | }
148 |
149 | .hljs {
150 | max-height: 100%;
151 | white-space: pre-wrap;
152 | word-wrap: break-word;
153 | word-break: break-word;
154 | font-size: 15pt;
155 | }
156 |
157 | .hljs .hljs-ln-numbers {
158 | white-space: nowrap;
159 | }
160 |
161 | .hljs td {
162 | font-size: inherit !important;
163 | color: inherit !important;
164 | }
165 | }
166 | }
167 |
--------------------------------------------------------------------------------
/__presentation-slides/js/controllers/slidenumber.js:
--------------------------------------------------------------------------------
1 | import {
2 | SLIDE_NUMBER_FORMAT_CURRENT,
3 | SLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL,
4 | SLIDE_NUMBER_FORMAT_HORIZONTAL_DOT_VERTICAL,
5 | SLIDE_NUMBER_FORMAT_HORIZONTAL_SLASH_VERTICAL
6 | } from "../utils/constants";
7 |
8 | /**
9 | * Handles the display of reveal.js' optional slide number.
10 | */
11 | export default class SlideNumber {
12 |
13 | constructor( Reveal ) {
14 |
15 | this.Reveal = Reveal;
16 |
17 | }
18 |
19 | render() {
20 |
21 | this.element = document.createElement( 'div' );
22 | this.element.className = 'slide-number';
23 | this.Reveal.getRevealElement().appendChild( this.element );
24 |
25 | }
26 |
27 | /**
28 | * Called when the reveal.js config is updated.
29 | */
30 | configure( config, oldConfig ) {
31 |
32 | let slideNumberDisplay = 'none';
33 | if( config.slideNumber && !this.Reveal.isPrintView() ) {
34 | if( config.showSlideNumber === 'all' ) {
35 | slideNumberDisplay = 'block';
36 | }
37 | else if( config.showSlideNumber === 'speaker' && this.Reveal.isSpeakerNotes() ) {
38 | slideNumberDisplay = 'block';
39 | }
40 | }
41 |
42 | this.element.style.display = slideNumberDisplay;
43 |
44 | }
45 |
46 | /**
47 | * Updates the slide number to match the current slide.
48 | */
49 | update() {
50 |
51 | // Update slide number if enabled
52 | if( this.Reveal.getConfig().slideNumber && this.element ) {
53 | this.element.innerHTML = this.getSlideNumber();
54 | }
55 |
56 | }
57 |
58 | /**
59 | * Returns the HTML string corresponding to the current slide
60 | * number, including formatting.
61 | */
62 | getSlideNumber( slide = this.Reveal.getCurrentSlide() ) {
63 |
64 | let config = this.Reveal.getConfig();
65 | let value;
66 | let format = SLIDE_NUMBER_FORMAT_HORIZONTAL_DOT_VERTICAL;
67 |
68 | if ( typeof config.slideNumber === 'function' ) {
69 | value = config.slideNumber( slide );
70 | } else {
71 | // Check if a custom number format is available
72 | if( typeof config.slideNumber === 'string' ) {
73 | format = config.slideNumber;
74 | }
75 |
76 | // If there are ONLY vertical slides in this deck, always use
77 | // a flattened slide number
78 | if( !/c/.test( format ) && this.Reveal.getHorizontalSlides().length === 1 ) {
79 | format = SLIDE_NUMBER_FORMAT_CURRENT;
80 | }
81 |
82 | // Offset the current slide number by 1 to make it 1-indexed
83 | let horizontalOffset = slide && slide.dataset.visibility === 'uncounted' ? 0 : 1;
84 |
85 | value = [];
86 | switch( format ) {
87 | case SLIDE_NUMBER_FORMAT_CURRENT:
88 | value.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset );
89 | break;
90 | case SLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL:
91 | value.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset, '/', this.Reveal.getTotalSlides() );
92 | break;
93 | default:
94 | let indices = this.Reveal.getIndices( slide );
95 | value.push( indices.h + horizontalOffset );
96 | let sep = format === SLIDE_NUMBER_FORMAT_HORIZONTAL_SLASH_VERTICAL ? '/' : '.';
97 | if( this.Reveal.isVerticalSlide( slide ) ) value.push( sep, indices.v + 1 );
98 | }
99 | }
100 |
101 | let url = '#' + this.Reveal.location.getHash( slide );
102 | return this.formatNumber( value[0], value[1], value[2], url );
103 |
104 | }
105 |
106 | /**
107 | * Applies HTML formatting to a slide number before it's
108 | * written to the DOM.
109 | *
110 | * @param {number} a Current slide
111 | * @param {string} delimiter Character to separate slide numbers
112 | * @param {(number|*)} b Total slides
113 | * @param {HTMLElement} [url='#'+locationHash()] The url to link to
114 | * @return {string} HTML string fragment
115 | */
116 | formatNumber( a, delimiter, b, url = '#' + this.Reveal.location.getHash() ) {
117 |
118 | if( typeof b === 'number' && !isNaN( b ) ) {
119 | return `
120 | ${a}
121 | ${delimiter}
122 | ${b}
123 | `;
124 | }
125 | else {
126 | return `
127 | ${a}
128 | `;
129 | }
130 |
131 | }
132 |
133 | destroy() {
134 |
135 | this.element.remove();
136 |
137 | }
138 |
139 | }
--------------------------------------------------------------------------------
/__presentation-slides/dist/theme/fonts/source-sans-pro/LICENSE:
--------------------------------------------------------------------------------
1 | SIL Open Font License
2 |
3 | Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
4 |
5 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
6 | This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
7 |
8 | —————————————————————————————-
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | —————————————————————————————-
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
14 |
15 | The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
16 |
17 | DEFINITIONS
18 | “Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
19 |
20 | “Reserved Font Name” refers to any names specified as such after the copyright statement(s).
21 |
22 | “Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).
23 |
24 | “Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
25 |
26 | “Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
27 |
28 | PERMISSION & CONDITIONS
29 | Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
30 |
31 | 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
32 |
33 | 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
34 |
35 | 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
36 |
37 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
38 |
39 | 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
40 |
41 | TERMINATION
42 | This license becomes null and void if any of the above conditions are not met.
43 |
44 | DISCLAIMER
45 | THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
--------------------------------------------------------------------------------
/__presentation-slides/examples/backgrounds.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Slide Backgrounds
8 |
9 |
10 |
11 |
12 |
13 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | data-background: #00ffff
33 |
34 |
35 |
36 | data-background: #bb00bb
37 |
38 |
39 |
40 | data-background: lightblue
41 |
42 |
43 |
44 |
45 | data-background: #ff0000
46 |
47 |
48 | data-background: rgba(0, 0, 0, 0.2)
49 |
50 |
51 | data-background: salmon
52 |
53 |
54 |
55 |
56 |
57 | Background applied to stack
58 |
59 |
60 | Background applied to stack
61 |
62 |
63 | Background applied to slide inside of stack
64 |
65 |
66 |
67 |
68 | Background image
69 |
70 |
71 |
72 |
73 | Background image
74 |
75 |
76 | Background image
77 |
78 |
79 |
80 |
81 | Background image
82 | data-background-size="100px" data-background-repeat="repeat" data-background-color="#111"
83 |
84 |
85 |
86 | Same background twice (1/2)
87 |
88 |
89 | Same background twice (2/2)
90 |
91 |
92 |
93 | Video background
94 |
95 |
96 |
97 | Iframe background
98 |
99 |
100 |
101 |
102 | Same background twice vertical (1/2)
103 |
104 |
105 | Same background twice vertical (2/2)
106 |
107 |
108 |
109 |
110 | Same background from horizontal to vertical (1/3)
111 |
112 |
113 |
114 | Same background from horizontal to vertical (2/3)
115 |
116 |
117 | Same background from horizontal to vertical (3/3)
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
139 |
140 |
141 |
142 |
--------------------------------------------------------------------------------
/__presentation-slides/js/components/playback.js:
--------------------------------------------------------------------------------
1 | /**
2 | * UI component that lets the use control auto-slide
3 | * playback via play/pause.
4 | */
5 | export default class Playback {
6 |
7 | /**
8 | * @param {HTMLElement} container The component will append
9 | * itself to this
10 | * @param {function} progressCheck A method which will be
11 | * called frequently to get the current playback progress on
12 | * a range of 0-1
13 | */
14 | constructor( container, progressCheck ) {
15 |
16 | // Cosmetics
17 | this.diameter = 100;
18 | this.diameter2 = this.diameter/2;
19 | this.thickness = 6;
20 |
21 | // Flags if we are currently playing
22 | this.playing = false;
23 |
24 | // Current progress on a 0-1 range
25 | this.progress = 0;
26 |
27 | // Used to loop the animation smoothly
28 | this.progressOffset = 1;
29 |
30 | this.container = container;
31 | this.progressCheck = progressCheck;
32 |
33 | this.canvas = document.createElement( 'canvas' );
34 | this.canvas.className = 'playback';
35 | this.canvas.width = this.diameter;
36 | this.canvas.height = this.diameter;
37 | this.canvas.style.width = this.diameter2 + 'px';
38 | this.canvas.style.height = this.diameter2 + 'px';
39 | this.context = this.canvas.getContext( '2d' );
40 |
41 | this.container.appendChild( this.canvas );
42 |
43 | this.render();
44 |
45 | }
46 |
47 | setPlaying( value ) {
48 |
49 | const wasPlaying = this.playing;
50 |
51 | this.playing = value;
52 |
53 | // Start repainting if we weren't already
54 | if( !wasPlaying && this.playing ) {
55 | this.animate();
56 | }
57 | else {
58 | this.render();
59 | }
60 |
61 | }
62 |
63 | animate() {
64 |
65 | const progressBefore = this.progress;
66 |
67 | this.progress = this.progressCheck();
68 |
69 | // When we loop, offset the progress so that it eases
70 | // smoothly rather than immediately resetting
71 | if( progressBefore > 0.8 && this.progress < 0.2 ) {
72 | this.progressOffset = this.progress;
73 | }
74 |
75 | this.render();
76 |
77 | if( this.playing ) {
78 | requestAnimationFrame( this.animate.bind( this ) );
79 | }
80 |
81 | }
82 |
83 | /**
84 | * Renders the current progress and playback state.
85 | */
86 | render() {
87 |
88 | let progress = this.playing ? this.progress : 0,
89 | radius = ( this.diameter2 ) - this.thickness,
90 | x = this.diameter2,
91 | y = this.diameter2,
92 | iconSize = 28;
93 |
94 | // Ease towards 1
95 | this.progressOffset += ( 1 - this.progressOffset ) * 0.1;
96 |
97 | const endAngle = ( - Math.PI / 2 ) + ( progress * ( Math.PI * 2 ) );
98 | const startAngle = ( - Math.PI / 2 ) + ( this.progressOffset * ( Math.PI * 2 ) );
99 |
100 | this.context.save();
101 | this.context.clearRect( 0, 0, this.diameter, this.diameter );
102 |
103 | // Solid background color
104 | this.context.beginPath();
105 | this.context.arc( x, y, radius + 4, 0, Math.PI * 2, false );
106 | this.context.fillStyle = 'rgba( 0, 0, 0, 0.4 )';
107 | this.context.fill();
108 |
109 | // Draw progress track
110 | this.context.beginPath();
111 | this.context.arc( x, y, radius, 0, Math.PI * 2, false );
112 | this.context.lineWidth = this.thickness;
113 | this.context.strokeStyle = 'rgba( 255, 255, 255, 0.2 )';
114 | this.context.stroke();
115 |
116 | if( this.playing ) {
117 | // Draw progress on top of track
118 | this.context.beginPath();
119 | this.context.arc( x, y, radius, startAngle, endAngle, false );
120 | this.context.lineWidth = this.thickness;
121 | this.context.strokeStyle = '#fff';
122 | this.context.stroke();
123 | }
124 |
125 | this.context.translate( x - ( iconSize / 2 ), y - ( iconSize / 2 ) );
126 |
127 | // Draw play/pause icons
128 | if( this.playing ) {
129 | this.context.fillStyle = '#fff';
130 | this.context.fillRect( 0, 0, iconSize / 2 - 4, iconSize );
131 | this.context.fillRect( iconSize / 2 + 4, 0, iconSize / 2 - 4, iconSize );
132 | }
133 | else {
134 | this.context.beginPath();
135 | this.context.translate( 4, 0 );
136 | this.context.moveTo( 0, 0 );
137 | this.context.lineTo( iconSize - 4, iconSize / 2 );
138 | this.context.lineTo( 0, iconSize );
139 | this.context.fillStyle = '#fff';
140 | this.context.fill();
141 | }
142 |
143 | this.context.restore();
144 |
145 | }
146 |
147 | on( type, listener ) {
148 | this.canvas.addEventListener( type, listener, false );
149 | }
150 |
151 | off( type, listener ) {
152 | this.canvas.removeEventListener( type, listener, false );
153 | }
154 |
155 | destroy() {
156 |
157 | this.playing = false;
158 |
159 | if( this.canvas.parentNode ) {
160 | this.container.removeChild( this.canvas );
161 | }
162 |
163 | }
164 |
165 | }
--------------------------------------------------------------------------------
/__presentation-slides/js/controllers/jumptoslide.js:
--------------------------------------------------------------------------------
1 | import {
2 | SLIDE_NUMBER_FORMAT_CURRENT,
3 | SLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL
4 | } from "../utils/constants";
5 |
6 | /**
7 | * Makes it possible to jump to a slide by entering its
8 | * slide number or id.
9 | */
10 | export default class JumpToSlide {
11 |
12 | constructor( Reveal ) {
13 |
14 | this.Reveal = Reveal;
15 |
16 | this.onInput = this.onInput.bind( this );
17 | this.onBlur = this.onBlur.bind( this );
18 | this.onKeyDown = this.onKeyDown.bind( this );
19 |
20 | }
21 |
22 | render() {
23 |
24 | this.element = document.createElement( 'div' );
25 | this.element.className = 'jump-to-slide';
26 |
27 | this.jumpInput = document.createElement( 'input' );
28 | this.jumpInput.type = 'text';
29 | this.jumpInput.className = 'jump-to-slide-input';
30 | this.jumpInput.placeholder = 'Jump to slide';
31 | this.jumpInput.addEventListener( 'input', this.onInput );
32 | this.jumpInput.addEventListener( 'keydown', this.onKeyDown );
33 | this.jumpInput.addEventListener( 'blur', this.onBlur );
34 |
35 | this.element.appendChild( this.jumpInput );
36 |
37 | }
38 |
39 | show() {
40 |
41 | this.indicesOnShow = this.Reveal.getIndices();
42 |
43 | this.Reveal.getRevealElement().appendChild( this.element );
44 | this.jumpInput.focus();
45 |
46 | }
47 |
48 | hide() {
49 |
50 | if( this.isVisible() ) {
51 | this.element.remove();
52 | this.jumpInput.value = '';
53 |
54 | clearTimeout( this.jumpTimeout );
55 | delete this.jumpTimeout;
56 | }
57 |
58 | }
59 |
60 | isVisible() {
61 |
62 | return !!this.element.parentNode;
63 |
64 | }
65 |
66 | /**
67 | * Parses the current input and jumps to the given slide.
68 | */
69 | jump() {
70 |
71 | clearTimeout( this.jumpTimeout );
72 | delete this.jumpTimeout;
73 |
74 | let query = this.jumpInput.value.trim( '' );
75 | let indices;
76 |
77 | // When slide numbers are formatted to be a single linear mumber
78 | // (instead of showing a separate horizontal/vertical index) we
79 | // use the same format for slide jumps
80 | if( /^\d+$/.test( query ) ) {
81 | const slideNumberFormat = this.Reveal.getConfig().slideNumber;
82 | if( slideNumberFormat === SLIDE_NUMBER_FORMAT_CURRENT || slideNumberFormat === SLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL ) {
83 | const slide = this.Reveal.getSlides()[ parseInt( query, 10 ) - 1 ];
84 | if( slide ) {
85 | indices = this.Reveal.getIndices( slide );
86 | }
87 | }
88 | }
89 |
90 | if( !indices ) {
91 | // If the query uses "horizontal.vertical" format, convert to
92 | // "horizontal/vertical" so that our URL parser can understand
93 | if( /^\d+\.\d+$/.test( query ) ) {
94 | query = query.replace( '.', '/' );
95 | }
96 |
97 | indices = this.Reveal.location.getIndicesFromHash( query, { oneBasedIndex: true } );
98 | }
99 |
100 | // Still no valid index? Fall back on a text search
101 | if( !indices && /\S+/i.test( query ) && query.length > 1 ) {
102 | indices = this.search( query );
103 | }
104 |
105 | if( indices && query !== '' ) {
106 | this.Reveal.slide( indices.h, indices.v, indices.f );
107 | return true;
108 | }
109 | else {
110 | this.Reveal.slide( this.indicesOnShow.h, this.indicesOnShow.v, this.indicesOnShow.f );
111 | return false;
112 | }
113 |
114 | }
115 |
116 | jumpAfter( delay ) {
117 |
118 | clearTimeout( this.jumpTimeout );
119 | this.jumpTimeout = setTimeout( () => this.jump(), delay );
120 |
121 | }
122 |
123 | /**
124 | * A lofi search that looks for the given query in all
125 | * of our slides and returns the first match.
126 | */
127 | search( query ) {
128 |
129 | const regex = new RegExp( '\\b' + query.trim() + '\\b', 'i' );
130 |
131 | const slide = this.Reveal.getSlides().find( ( slide ) => {
132 | return regex.test( slide.innerText );
133 | } );
134 |
135 | if( slide ) {
136 | return this.Reveal.getIndices( slide );
137 | }
138 | else {
139 | return null;
140 | }
141 |
142 | }
143 |
144 | /**
145 | * Reverts back to the slide we were on when jump to slide was
146 | * invoked.
147 | */
148 | cancel() {
149 |
150 | this.Reveal.slide( this.indicesOnShow.h, this.indicesOnShow.v, this.indicesOnShow.f );
151 | this.hide();
152 |
153 | }
154 |
155 | confirm() {
156 |
157 | this.jump();
158 | this.hide();
159 |
160 | }
161 |
162 | destroy() {
163 |
164 | this.jumpInput.removeEventListener( 'input', this.onInput );
165 | this.jumpInput.removeEventListener( 'keydown', this.onKeyDown );
166 | this.jumpInput.removeEventListener( 'blur', this.onBlur );
167 |
168 | this.element.remove();
169 |
170 | }
171 |
172 | onKeyDown( event ) {
173 |
174 | if( event.keyCode === 13 ) {
175 | this.confirm();
176 | }
177 | else if( event.keyCode === 27 ) {
178 | this.cancel();
179 |
180 | event.stopImmediatePropagation();
181 | }
182 |
183 | }
184 |
185 | onInput( event ) {
186 |
187 | this.jumpAfter( 200 );
188 |
189 | }
190 |
191 | onBlur() {
192 |
193 | setTimeout( () => this.hide(), 1 );
194 |
195 | }
196 |
197 | }
--------------------------------------------------------------------------------
/__presentation-slides/test/test-scroll.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Scroll View
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
26 |
27 |
30 |
31 |
32 | slide 3
33 | fragment 1
34 | fragment 2
35 | fragment 3
36 |
37 |
38 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
160 |
161 |
162 |
163 |
--------------------------------------------------------------------------------
/__presentation-slides/examples/scroll.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Scroll View
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | Scroll triggered fragments
26 |
27 | Step one
28 | Step two
29 | Step three
30 |
31 |
32 |
Scrollbar inverts based on slide bg
33 |
34 | Auto-Animate
35 | Scroll triggered auto-animations 😍
36 |
41 |
42 |
43 |
48 | Auto-Animate
49 |
50 |
51 |
56 | Auto-Animate
57 |
58 |
59 | Code highlights, meet scroll triggers
60 |
89 |
90 |
91 |
92 | Image Backgrounds
93 |
94 |
95 |
96 |
Video background
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
118 |
119 |
120 |
121 |
--------------------------------------------------------------------------------
/__presentation-slides/test/test-auto-animate.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Auto-Animate
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | h1
25 | h2
26 | h3
27 |
28 |
29 |
30 | h1
31 | h2
32 | h3
33 |
34 |
35 |
36 | h1
37 | h2
38 | h3
39 |
40 |
41 |
42 | Non-auto-animate slide
43 |
44 |
45 |
46 | h1
47 | h2
48 | h3
49 |
50 |
51 |
52 | h1
53 | h2
54 | h3
55 |
56 |
57 |
58 | Non-auto-animate slide
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/__presentation-slides/examples/layout-helpers.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Layout Helpers
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Layout Helper Examples
24 |
31 |
32 |
33 |
34 | Fit Text
35 | Resizes text to be as large as possible within its container.
36 |
37 | FIT
38 |
39 |
40 |
41 |
44 |
45 |
46 | HELLO WORLD
47 | BOTH THESE TITLES USE FIT-TEXT
48 |
49 |
50 |
51 | Stretch
52 | Makes an element as tall as possible while remaining within the slide bounds.
53 |
54 | Stretch Example
55 |
56 | Image byline
57 |
58 |
59 |
60 |
61 | Stretch Example
62 |
63 | Image byline
64 |
65 |
66 |
67 | Stack
68 | Stacks multiple elements on top of each other, for use with fragments.
69 |
70 |
71 | <img class="fragment" width="450" height="300" src="...">
72 | <img class="fragment" width="300" height="450" src="...">
73 | <img class="fragment" width="400" height="400" src="...">
74 |
75 |
76 |
77 |
78 |
79 | Stack Example
80 |
81 |
One
82 |
Two
83 |
Three
84 |
Four
85 |
86 |
91 |
92 |
93 |
94 | Stack Example
95 | fade-in-then-out fragments
96 |
101 |
102 |
103 |
104 | HStack
105 | Stacks multiple elements horizontally.
106 |
107 |
108 | <img width="450" height="300" src="...">
109 | <img width="300" height="450" src="...">
110 | <img width="400" height="400" src="...">
111 |
112 |
113 |
114 |
115 |
116 | HStack Example
117 |
118 |
One
119 |
Two
120 |
Three
121 |
122 |
123 |
124 |
125 | VStack
126 | Stacks multiple elements vertically.
127 |
128 |
129 | <img width="450" height="300" src="...">
130 | <img width="300" height="450" src="...">
131 | <img width="400" height="400" src="...">
132 |
133 |
134 |
135 |
136 |
137 | VStack Example
138 |
139 |
One
140 |
Two
141 |
Three
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
158 |
159 |
160 |
161 |
--------------------------------------------------------------------------------