Files
AnyPS5/tools/input-mapper/capture.js
T

31 lines
1.8 KiB
JavaScript

import {exportableKeys} from './keys.js';
const codes = {
Enter: 'Return', Escape: 'Escape', Space: 'Space', Backspace: 'Backspace', Tab: 'Tab',
Minus: '-', Equal: '=', BracketLeft: '[', BracketRight: ']', Backslash: '\\',
Semicolon: ';', Quote: "'", Backquote: '`', Comma: ',', Period: '.', Slash: '/',
CapsLock: 'CapsLock', PrintScreen: 'PrintScreen', ScrollLock: 'ScrollLock', Pause: 'Pause',
Insert: 'Insert', Home: 'Home', PageUp: 'PageUp', Delete: 'Delete', End: 'End', PageDown: 'PageDown',
ArrowRight: 'Right', ArrowLeft: 'Left', ArrowDown: 'Down', ArrowUp: 'Up', NumLock: 'Numlock',
NumpadDivide: 'Keypad /', NumpadMultiply: 'Keypad *', NumpadSubtract: 'Keypad -',
NumpadAdd: 'Keypad +', NumpadEnter: 'Keypad Enter', NumpadDecimal: 'Keypad .',
NumpadEqual: 'Keypad =', NumpadComma: 'Keypad ,', ContextMenu: 'Application',
ControlLeft: 'Left Ctrl', ControlRight: 'Right Ctrl', ShiftLeft: 'Left Shift', ShiftRight: 'Right Shift',
AltLeft: 'Left Alt', AltRight: 'Right Alt', MetaLeft: 'Left GUI', MetaRight: 'Right GUI'
};
export function captureKey(event) {
if (event.isComposing || event.key === 'Dead' || event.key === 'Process') {
return {error: 'Composition and dead keys are ambiguous. Select an SDL key from the list.'};
}
let value = codes[event.code];
if (/^Key[A-Z]$/u.test(event.code)) value = event.code.slice(3);
else if (/^Digit[0-9]$/u.test(event.code)) value = event.code.slice(5);
else if (/^Numpad[0-9]$/u.test(event.code)) value = `Keypad ${event.code.slice(6)}`;
else if (/^F(?:[1-9]|1[0-9]|2[0-4])$/u.test(event.code)) value = event.code;
if (!value || !exportableKeys.includes(value)) {
return {error: 'This physical key cannot be captured in the current INI format. Select an SDL key from the list.'};
}
return {value};
}