mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-23 20:18:00 +01:00
44 lines
1.5 KiB
JavaScript
44 lines
1.5 KiB
JavaScript
/**
|
|
* Keyboard shortcuts
|
|
*/
|
|
|
|
function getHover() {
|
|
const thumbBoxHover = document.querySelector('.media-box:hover');
|
|
if (thumbBoxHover) return thumbBoxHover.dataset.imageId;
|
|
}
|
|
|
|
function click(selector) {
|
|
const el = document.querySelector(selector);
|
|
if (el) el.click();
|
|
}
|
|
|
|
function isOK(event) {
|
|
return !event.altKey && !event.ctrlKey && !event.metaKey &&
|
|
document.activeElement.tagName !== 'INPUT' &&
|
|
document.activeElement.tagName !== 'TEXTAREA';
|
|
}
|
|
|
|
const keyCodes = {
|
|
74() { click('.js-prev'); }, // J - go to previous image
|
|
73() { click('.js-up'); }, // I - go to index page
|
|
75() { click('.js-next'); }, // K - go to next image
|
|
82() { click('.js-rand'); }, // R - go to random image
|
|
83() { click('.js-source-link'); }, // S - go to image source
|
|
76() { click('.js-tag-sauce-toggle'); }, // L - edit tags
|
|
70() { // F - favourite image
|
|
getHover() ? click(`a.interaction--fave[data-image-id="${getHover()}"]`)
|
|
: click('.block__header a.interaction--fave');
|
|
},
|
|
85() { // U - upvote image
|
|
getHover() ? click(`a.interaction--upvote[data-image-id="${getHover()}"]`)
|
|
: click('.block__header a.interaction--upvote');
|
|
},
|
|
};
|
|
|
|
function listenForKeys() {
|
|
document.addEventListener('keydown', event => {
|
|
if (isOK(event) && keyCodes[event.keyCode]) { keyCodes[event.keyCode](); event.preventDefault(); }
|
|
});
|
|
}
|
|
|
|
export { listenForKeys };
|