mirror of
https://github.com/fastmail/Squire.git
synced 2025-02-01 20:01:27 -05:00
Use modern keyboard event properties
The keyboard event handling code was written over a decade ago and we have better APIs now! More importantly, the old APIs are deprecated, so we should stop using them. Fixes #450
This commit is contained in:
parent
752a42d917
commit
3804ea50ba
1 changed files with 5 additions and 41 deletions
|
@ -17,51 +17,15 @@ import { moveRangeBoundariesDownTree } from '../range/Boundaries';
|
|||
|
||||
// ---
|
||||
|
||||
const keys: Record<string, string> = {
|
||||
8: 'Backspace',
|
||||
9: 'Tab',
|
||||
13: 'Enter',
|
||||
27: 'Escape',
|
||||
32: 'Space',
|
||||
33: 'PageUp',
|
||||
34: 'PageDown',
|
||||
37: 'ArrowLeft',
|
||||
38: 'ArrowUp',
|
||||
39: 'ArrowRight',
|
||||
40: 'ArrowDown',
|
||||
46: 'Delete',
|
||||
191: '/',
|
||||
219: '[',
|
||||
220: '\\',
|
||||
221: ']',
|
||||
};
|
||||
|
||||
// Ref: http://unixpapa.com/js/key.html
|
||||
const _onKey = function (this: Squire, event: KeyboardEvent): void {
|
||||
const code = event.keyCode;
|
||||
let key = keys[code];
|
||||
let modifiers = '';
|
||||
const range: Range = this.getSelection();
|
||||
|
||||
if (event.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!key) {
|
||||
key = String.fromCharCode(code).toLowerCase();
|
||||
// Only reliable for letters and numbers
|
||||
if (!/^[A-Za-z0-9]$/.test(key)) {
|
||||
key = '';
|
||||
}
|
||||
}
|
||||
|
||||
// Function keys
|
||||
if (111 < code && code < 124) {
|
||||
key = 'F' + (code - 111);
|
||||
}
|
||||
|
||||
// We need to apply the Backspace/delete handlers regardless of
|
||||
// control key modifiers.
|
||||
let key = event.key;
|
||||
let modifiers = '';
|
||||
if (key !== 'Backspace' && key !== 'Delete') {
|
||||
if (event.altKey) {
|
||||
modifiers += 'Alt-';
|
||||
|
@ -81,9 +45,9 @@ const _onKey = function (this: Squire, event: KeyboardEvent): void {
|
|||
if (isWin && event.shiftKey && key === 'Delete') {
|
||||
modifiers += 'Shift-';
|
||||
}
|
||||
|
||||
key = modifiers + key;
|
||||
|
||||
const range: Range = this.getSelection();
|
||||
if (this._keyHandlers[key]) {
|
||||
this._keyHandlers[key](this, event, range);
|
||||
} else if (
|
||||
|
@ -93,7 +57,7 @@ const _onKey = function (this: Squire, event: KeyboardEvent): void {
|
|||
!event.isComposing &&
|
||||
!event.ctrlKey &&
|
||||
!event.metaKey &&
|
||||
(event.key || key).length === 1
|
||||
key.length === 1
|
||||
) {
|
||||
// Record undo checkpoint.
|
||||
this.saveUndoState(range);
|
||||
|
@ -114,7 +78,7 @@ const keyHandlers: Record<string, KeyHandler> = {
|
|||
'Delete': Delete,
|
||||
'Tab': Tab,
|
||||
'Shift-Tab': ShiftTab,
|
||||
'Space': Space,
|
||||
' ': Space,
|
||||
'ArrowLeft'(self: Squire): void {
|
||||
self._removeZWS();
|
||||
},
|
||||
|
|
Loading…
Add table
Reference in a new issue