diff options
| Commit | 25a63dd10cc09f18a8aa07cee74e6591a0c0381f (patch) | |
|---|---|---|
| Author | 2023-04-28 17:32:45 +0300 | |
| Committer | 2023-04-28 17:32:45 +0300 | |
| Files | 67291ec4ec706a0230762b78bd5d5561d9adf7e9 /src/scripts/keyboard.js | |
| syndamia.com-25a63dd10cc09f18a8aa07cee74e6591a0c0381f.tar syndamia.com-25a63dd10cc09f18a8aa07cee74e6591a0c0381f.tar.gz syndamia.com-25a63dd10cc09f18a8aa07cee74e6591a0c0381f.zip | ||
| Parent | c6569f29f38627d553531f85cf5ea71cae23f897 (diff) | |
[keyboard.js] Moved all keybindings to a separate javascript file and implemented vim-like navigation for headings
1 files changed, 65 insertions, 0 deletions
| -rw-r--r-- | src/scripts/keyboard.js | 65 |
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; + } +}); |