diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2019-05-19 15:59:05 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-19 15:59:05 +0900 |
commit | 3f4bc62ed515f1c5da90ee1c3e42f3d435ea6e39 (patch) | |
tree | 8af9f8e5b12d007ce9628b40f3046b73f18e29f8 /src/content/components/common/input.ts | |
parent | 6ec560bca33e774ff7e363270c423c919fdcf4ce (diff) | |
parent | c4dcdff9844e2404e3bc035f4cea9fce2f7770ab (diff) |
Merge pull request #587 from ueokande/refactor-content
Refactor content scripts
Diffstat (limited to 'src/content/components/common/input.ts')
-rw-r--r-- | src/content/components/common/input.ts | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/src/content/components/common/input.ts b/src/content/components/common/input.ts deleted file mode 100644 index 1fe34c9..0000000 --- a/src/content/components/common/input.ts +++ /dev/null @@ -1,80 +0,0 @@ -import * as dom from '../../../shared/utils/dom'; -import * as keys from '../../../shared/utils/keys'; - -const cancelKey = (e: KeyboardEvent): boolean => { - return e.key === 'Escape' || e.key === '[' && e.ctrlKey; -}; - -export default class InputComponent { - private pressed: {[key: string]: string} = {}; - - private onKeyListeners: ((key: keys.Key) => boolean)[] = []; - - constructor(target: HTMLElement) { - this.pressed = {}; - this.onKeyListeners = []; - - target.addEventListener('keypress', this.onKeyPress.bind(this)); - target.addEventListener('keydown', this.onKeyDown.bind(this)); - target.addEventListener('keyup', this.onKeyUp.bind(this)); - } - - onKey(cb: (key: keys.Key) => boolean) { - this.onKeyListeners.push(cb); - } - - onKeyPress(e: KeyboardEvent) { - if (this.pressed[e.key] && this.pressed[e.key] !== 'keypress') { - return; - } - this.pressed[e.key] = 'keypress'; - this.capture(e); - } - - onKeyDown(e: KeyboardEvent) { - if (this.pressed[e.key] && this.pressed[e.key] !== 'keydown') { - return; - } - this.pressed[e.key] = 'keydown'; - this.capture(e); - } - - onKeyUp(e: KeyboardEvent) { - delete this.pressed[e.key]; - } - - // 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; - } - if (['Shift', 'Control', 'Alt', 'OS'].includes(e.key)) { - // pressing only meta key is ignored - return; - } - - let key = keys.fromKeyboardEvent(e); - for (let listener of this.onKeyListeners) { - let stop = listener(key); - if (stop) { - e.preventDefault(); - e.stopPropagation(); - break; - } - } - } - - fromInput(e: Element) { - return e instanceof HTMLInputElement || - e instanceof HTMLTextAreaElement || - e instanceof HTMLSelectElement || - dom.isContentEditable(e); - } -} |