├── .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 | ![External Image](https://s3.amazonaws.com/static.slid.es/logo/v2/slides-symbol-512x512.png) 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 | 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 |
26 |

Iframe

27 | 28 |
29 | 30 |
31 |

Iframe Background

32 |
33 | 34 |
35 |

Video

36 | 37 |
38 | 39 |
40 |

Background Video

41 |
42 | 43 |
44 |

Auto-playing audio

45 | 46 |
47 | 48 |
49 |

Audio inside slide fragments

50 |
51 | Beep 1 52 | 53 |
54 |
55 | Beep 2 56 | 57 |
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 | 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 | 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 |
30 |

Default

31 |
32 | 33 |
34 |

Default

35 |
36 | 37 |
38 |

data-transition: zoom

39 |
40 | 41 |
42 |

data-transition: zoom-in fade-out

43 |
44 | 45 |
46 |

Default

47 |
48 | 49 |
50 |

data-transition: convex

51 |
52 | 53 |
54 |

data-transition: convex-in concave-out

55 |
56 | 57 |
58 |
59 |

Default

60 |
61 |
62 |

data-transition: concave

63 |
64 |
65 |

data-transition: convex-in fade-out

66 |
67 |
68 |

Default

69 |
70 |
71 | 72 |
73 |

data-transition: none

74 |
75 | 76 |
77 |

Default

78 |
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 | 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 | 27 |
28 | 29 |
30 | 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 |
Deck 1, Slide 1
22 |
Deck 1, Slide 2
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 |
Deck 2, Slide 1
37 |
Deck 2, Slide 2
38 |
39 | 46 |
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 | 27 |
28 | 29 |
30 | 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 | 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