aboutsummaryrefslogtreecommitdiff
path: root/slides/vendor/slides.js
diff options
context:
space:
mode:
Diffstat (limited to 'slides/vendor/slides.js')
-rw-r--r--slides/vendor/slides.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/slides/vendor/slides.js b/slides/vendor/slides.js
new file mode 100644
index 0000000..a909352
--- /dev/null
+++ b/slides/vendor/slides.js
@@ -0,0 +1,112 @@
1window.addEventListener('load', function(evt) {
2
3 let main = document.querySelector('main');
4 let nav = document.querySelector('nav');
5 let wrapper = document.querySelector('div.wrapper');
6 let hash = window.location.hash.slice(1, window.location.hash.length);
7
8 if (hash.length == 0) {
9 main.innerHTML = '<h1>No presentation selected!</h1>';
10 } else {
11
12 fetch(`presentations/${hash}/default.pug`).then(function(response) {
13 response.text().then(function(template) {
14 if (response.status == 200) {
15 main.innerHTML = jade.render(template, {});
16 initSlideshow();
17 } else {
18 main.innerHTML = '<section><h3>Presentation does not exists!</h3></section>';
19 }
20 }).catch(function(error) {
21 console.log(error);
22 });
23 });
24
25 fetch(`presentations/${hash}/meta.json`).then(function(response) {
26 response.json().then(function(data) {
27 document.title = data.title;
28 }).catch(function(error) {
29 console.log(error);
30 });
31 });
32
33 }
34
35 function initSlideshow() {
36
37 // mathjax formulas
38 MathJax.Hub.Config({
39 //displayAlign: 'left',
40 extensions: ['tex2jax.js'],
41 jax: ['input/TeX', 'output/SVG'],
42 tex2jax: {
43 skipTags: ['script', 'noscript', 'style', 'textarea', 'code'],
44 inlineMath: [
45 ['$', '$'],
46 ["\\(", "\\)"]
47 ],
48 displayMath: [
49 ['$$', '$$'],
50 ["\\[", "\\]"]
51 ],
52 }
53 });
54 MathJax.Hub.Configured();
55
56 // syntax highlighting
57 Prism.highlightAll();
58
59 // initializes slides
60 function showSlide(slides, op) {
61 let tmpIdx = currentIdx + op;
62 if (tmpIdx >= 0 && tmpIdx < slides.length) {
63 slides.forEach(function(slide) {
64 slide.classList.add('hide');
65 });
66 slides[tmpIdx].classList.remove('hide');
67 nav.innerHTML = `${tmpIdx+1} / ${slides.length}`;
68 currentIdx = tmpIdx;
69 }
70 }
71
72 let slides = document.querySelectorAll('section');
73 let currentIdx = 0;
74 showSlide(slides, currentIdx);
75
76 document.addEventListener('keydown', function(evt) {
77 switch (evt.code) {
78 case 'ArrowRight':
79 {
80 showSlide(slides, 1);
81 break;
82 }
83 case 'ArrowLeft':
84 {
85 showSlide(slides, -1);
86 break;
87 }
88 case 'KeyF':
89 {
90 if (wrapper.requestFullscreen) {
91 wrapper.requestFullscreen();
92 } else if (wrapper.mozRequestFullScreen) {
93 wrapper.mozRequestFullScreen();
94 } else if (wrapper.webkitRequestFullscreen) {
95 wrapper.webkitRequestFullscreen();
96 } else if (wrapper.msRequestFullscreen) {
97 wrapper.msRequestFullscreen();
98 }
99 break;
100 }
101 }
102 }, false);
103
104
105 //var elem = document.getElementById("myvideo");
106 //if (elem.requestFullscreen) {
107 // elem.requestFullscreen();
108 //}
109
110 }
111
112}, false);