Types src/content

This commit is contained in:
Shin'ya Ueoka 2019-05-02 14:08:51 +09:00
parent 992b3ac65d
commit d01db82c0d
62 changed files with 1411 additions and 468 deletions

View file

@ -1,12 +1,16 @@
import * as dom from 'shared/utils/dom';
import * as keys from 'shared/utils/keys';
import * as dom from '../../../shared/utils/dom';
import * as keys from '../../../shared/utils/keys';
const cancelKey = (e) => {
const cancelKey = (e: KeyboardEvent): boolean => {
return e.key === 'Escape' || e.key === '[' && e.ctrlKey;
};
export default class InputComponent {
constructor(target) {
private pressed: {[key: string]: string} = {};
private onKeyListeners: ((key: keys.Key) => boolean)[] = [];
constructor(target: HTMLElement) {
this.pressed = {};
this.onKeyListeners = [];
@ -15,11 +19,11 @@ export default class InputComponent {
target.addEventListener('keyup', this.onKeyUp.bind(this));
}
onKey(cb) {
onKey(cb: (key: keys.Key) => boolean) {
this.onKeyListeners.push(cb);
}
onKeyPress(e) {
onKeyPress(e: KeyboardEvent) {
if (this.pressed[e.key] && this.pressed[e.key] !== 'keypress') {
return;
}
@ -27,7 +31,7 @@ export default class InputComponent {
this.capture(e);
}
onKeyDown(e) {
onKeyDown(e: KeyboardEvent) {
if (this.pressed[e.key] && this.pressed[e.key] !== 'keydown') {
return;
}
@ -35,14 +39,19 @@ export default class InputComponent {
this.capture(e);
}
onKeyUp(e) {
onKeyUp(e: KeyboardEvent) {
delete this.pressed[e.key];
}
capture(e) {
if (this.fromInput(e)) {
if (cancelKey(e) && e.target.blur) {
e.target.blur();
// eslint-disable-next-line max-statements
capture(e: KeyboardEvent) {
let target = e.target;
if (!(target instanceof HTMLElement)) {
return;
}
if (this.fromInput(target)) {
if (cancelKey(e) && target.blur) {
target.blur();
}
return;
}
@ -63,13 +72,10 @@ export default class InputComponent {
}
}
fromInput(e) {
if (!e.target) {
return false;
}
return e.target instanceof HTMLInputElement ||
e.target instanceof HTMLTextAreaElement ||
e.target instanceof HTMLSelectElement ||
dom.isContentEditable(e.target);
fromInput(e: Element) {
return e instanceof HTMLInputElement ||
e instanceof HTMLTextAreaElement ||
e instanceof HTMLSelectElement ||
dom.isContentEditable(e);
}
}