UNPKG

jjb-lc-designable

Version:

基于alibaba-designable源码二次封装的表单设计器。

50 lines (44 loc) 1.24 kB
import { EventDriver } from 'jjb-lc-designable/shared' import { KeyDownEvent, KeyUpEvent } from '../events' function filter(event: KeyboardEvent) { const target: any = event.target const { tagName } = target let flag = true // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>、Web Components if ( target['isContentEditable'] || ((tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT' || customElements.get(tagName.toLocaleLowerCase())) && !target.readOnly) ) { flag = false } return flag } export class KeyboardDriver extends EventDriver { onKeyDown = (e: KeyboardEvent) => { if (!filter(e)) return this.dispatch(new KeyDownEvent(e)) } onKeyUp = (e: KeyboardEvent) => { this.dispatch(new KeyUpEvent(e)) } attach() { this.addEventListener('keydown', this.onKeyDown, { mode: 'onlyParent', }) this.addEventListener('keyup', this.onKeyUp, { mode: 'onlyParent', }) } detach() { this.removeEventListener('keydown', this.onKeyDown, { mode: 'onlyParent', }) this.removeEventListener('keyup', this.onKeyUp, { mode: 'onlyParent', }) } }