Summary Files Commits Branches @commit @diff @stats
path: root / src / scripts / keyboard.js
diff options
context:
space:
mode:
1 files changed, 65 insertions, 0 deletions
-rw-r--r--src/scripts/keyboard.js65
diff --git a/src/scripts/keyboard.js b/src/scripts/keyboard.js
new file mode 100644
index 0000000..f618e45
--- /dev/null
+++ b/src/scripts/keyboard.js
@@ -0,0 +1,65 @@
+const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
+var currentHeading = 0;
+
+document.addEventListener('keydown', function (e) {
+ if (e.ctrlKey) return;
+
+ switch (e.code) {
+ case 'KeyG':
+ currentHeading = (e.shiftKey) ? headings.length - 1 : 0;
+ headings[currentHeading].scrollIntoView();
+ break;
+
+ case 'KeyJ': case 'KeyL':
+ if (typeof presenting != 'undefined' && presenting) showSlide(+1);
+ else {
+ currentHeading = (headings.length + currentHeading + 1) % headings.length;
+ headings[currentHeading].scrollIntoView();
+ }
+ break;
+
+ case 'KeyK': case 'KeyH':
+ if (typeof presenting != 'undefined' && presenting) showSlide(-1);
+ else {
+ currentHeading = (headings.length + currentHeading - 1) % headings.length;
+ headings[currentHeading].scrollIntoView();
+ }
+ break;
+
+ /* theme-changer.js */
+
+ case 'KeyC':
+ themeBtn.click();
+ break;
+
+ /* presentation.js */
+
+ // Previous slide
+ case 'Backspace': case 'PageUp':
+ case 'ArrowLeft': case 'ArrowUp':
+ showSlide(-1);
+ break;
+ // Next slide
+ case 'Space': case 'Enter': case 'PageDown':
+
+ case 'ArrowRight': case 'ArrowDown':
+ showSlide(+1);
+ break;
+ // Start (toggle) presenting
+ case 'KeyP': case 'KeyT':
+ presentBtn.click();
+ break;
+ // Exit presentation
+ case 'Escape':
+ if (presenting) presentBtn.click();
+ break;
+ // Go to first slide
+ case 'Home':
+ showSlide(-slideIndex);
+ break;
+ // Go to last slide
+ case 'End':
+ showSlide(-slideIndex -1);
+ break;
+ }
+});