/** * Keyboard shortcuts */ import { $ } from './utils/dom'; function getHover() { const thumbBoxHover = $('.media-box:hover'); if (thumbBoxHover) return thumbBoxHover.dataset.imageId; } function openFullView() { const imageHover = $('[data-uris]:hover'); if (!imageHover) return; window.location = JSON.parse(imageHover.dataset.uris).full; } function openFullViewNewTab() { const imageHover = $('[data-uris]:hover'); if (!imageHover) return; window.open(JSON.parse(imageHover.dataset.uris).full); } function click(selector) { const el = $(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 79() { openFullView() }, // O - open original 86() { openFullViewNewTab() }, // V - open original in a new tab 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 };