pixelplanet/src/controls/keypress.js

101 lines
2.5 KiB
JavaScript
Raw Normal View History

/*
* keypress actions
*/
import { t } from 'ttag';
import store from '../ui/store';
import copy from '../utils/clipboard';
import {
toggleGrid,
2020-06-23 16:49:56 +00:00
toggleHistoricalView,
toggleHiddenCanvases,
togglePixelNotify,
toggleMute,
notify,
selectCanvas,
2022-07-11 12:42:09 +00:00
} from '../store/actions';
const usedKeys = ['g', 'h', 'x', 'm', 'r', 'p'];
2022-07-11 12:42:09 +00:00
function onKeyPress(event) {
// ignore key presses if modal is open or chat is used
if (event.target.nodeName === 'INPUT'
|| event.target.nodeName === 'TEXTAREA'
) {
return;
}
let { key } = event;
const num = Number(key);
if (!Number.isNaN(num) && num > 0) {
// switch to canvas on num keys
2021-07-16 10:06:20 +00:00
const { canvases, canvasId: curCanvasId } = store.getState().canvas;
const canvasIds = Object.keys(canvases).filter((id) => !canvases[id].hid);
if (num <= canvasIds.length) {
const canvasId = canvasIds[num - 1];
2021-07-16 10:06:20 +00:00
// eslint-disable-next-line eqeqeq
if (canvasId != curCanvasId) {
store.dispatch(selectCanvas(canvasId));
const canvasName = canvases[canvasId].title;
store.dispatch(notify(t`Switched to ${canvasName}`));
}
}
return;
}
/*
* if char of key isn't used by a keybind,
* we check if the key location is where a
* key that is used would be on QWERTY
*/
2021-01-29 21:46:58 +00:00
if (!usedKeys.includes(key)) {
key = event.code;
if (!key.startsWith('Key')) {
return;
}
key = key.slice(-1).toLowerCase();
2021-01-29 21:46:58 +00:00
}
switch (key) {
case 'g':
store.dispatch(toggleGrid());
store.dispatch(notify((store.getState().gui.showGrid)
? t`Grid ON`
: t`Grid OFF`));
return;
2020-06-23 16:49:56 +00:00
case 'h':
if (window.ssv && window.ssv.backupurl) {
store.dispatch(toggleHistoricalView());
}
return;
case 'x':
store.dispatch(togglePixelNotify());
store.dispatch(notify((store.getState().gui.showPixelNotify)
? t`Pixel Notify ON`
: t`Pixel Notify OFF`));
return;
case 'm':
store.dispatch(toggleMute());
store.dispatch(notify((store.getState().audio.mute)
? t`Muted Sound`
: t`Unmuted Sound`));
return;
2020-04-29 02:38:36 +00:00
case 'r': {
const { hover } = store.getState().gui;
const text = hover.join('_');
copy(text);
store.dispatch(notify(t`Copied!`));
return;
}
case 'p':
store.dispatch(toggleHiddenCanvases());
store.dispatch(notify((store.getState().canvas.showHiddenCanvases)
? t`Show Hidden Canvases`
: t`Hide Hidden Canvases`));
break;
default:
}
}
export default onKeyPress;