UNPKG

reactronic-dom

Version:

Reactronic DOM - Transactional Reactive Front-End Development Framework

144 lines (143 loc) 5.95 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { options, sensitive, transaction, LoggingLevel } from 'reactronic'; import { grabElementDataList, SymDataForSensor } from './DataForSensor'; import { HtmlElementSensor } from './HtmlElementSensor'; export var KeyboardModifiers; (function (KeyboardModifiers) { KeyboardModifiers[KeyboardModifiers["None"] = 0] = "None"; KeyboardModifiers[KeyboardModifiers["Ctrl"] = 1] = "Ctrl"; KeyboardModifiers[KeyboardModifiers["Shift"] = 2] = "Shift"; KeyboardModifiers[KeyboardModifiers["Alt"] = 4] = "Alt"; KeyboardModifiers[KeyboardModifiers["Meta"] = 8] = "Meta"; KeyboardModifiers[KeyboardModifiers["CtrlShift"] = 3] = "CtrlShift"; KeyboardModifiers[KeyboardModifiers["CtrlAlt"] = 5] = "CtrlAlt"; KeyboardModifiers[KeyboardModifiers["CtrlMeta"] = 9] = "CtrlMeta"; KeyboardModifiers[KeyboardModifiers["CtrlShiftAlt"] = 7] = "CtrlShiftAlt"; KeyboardModifiers[KeyboardModifiers["CtrlShiftAltMeta"] = 15] = "CtrlShiftAltMeta"; KeyboardModifiers[KeyboardModifiers["CtrlShiftMeta"] = 11] = "CtrlShiftMeta"; KeyboardModifiers[KeyboardModifiers["ShiftAlt"] = 6] = "ShiftAlt"; KeyboardModifiers[KeyboardModifiers["ShiftMeta"] = 10] = "ShiftMeta"; KeyboardModifiers[KeyboardModifiers["ShiftAltMeta"] = 14] = "ShiftAltMeta"; KeyboardModifiers[KeyboardModifiers["AltMeta"] = 12] = "AltMeta"; })(KeyboardModifiers || (KeyboardModifiers = {})); export class KeyboardSensor extends HtmlElementSensor { constructor() { super(); this.down = ''; this.up = ''; this.modifiers = KeyboardModifiers.None; } listen(element, enabled = true) { const existing = this.sourceElement; if (element !== existing) { if (existing) { existing.removeEventListener('keydown', this.onKeyDown.bind(this), { capture: true }); existing.removeEventListener('keyup', this.onKeyUp.bind(this), { capture: true }); } this.sourceElement = element; if (element && enabled) { element.addEventListener('keydown', this.onKeyDown.bind(this), { capture: true }); element.addEventListener('keyup', this.onKeyUp.bind(this), { capture: true }); } } } reset() { this.preventDefault = false; this.stopPropagation = false; this.down = ''; this.up = ''; this.modifiers = KeyboardModifiers.None; } onKeyDown(e) { this.keyDown(e); this.setPreventDefaultAndStopPropagation(e); } onKeyUp(e) { this.keyUp(e); this.setPreventDefaultAndStopPropagation(e); } keyDown(e) { this.updateSensorData(e); this.up = ''; sensitive(true, () => this.down = e.key); } keyUp(e) { this.updateSensorData(e); this.down = ''; sensitive(true, () => this.up = e.key); } updateSensorData(e) { this.preventDefault = false; this.stopPropagation = false; const path = e.composedPath(); this.elementDataList = grabElementDataList(path, SymDataForSensor, 'keyboard', this.elementDataList).dataList; this.modifiers = extractModifierKeys(e); this.revision++; } static getKeyAsModifierIfAny(key) { let modifier = KeyboardModifiers.None; if (key === 'Control') modifier = KeyboardModifiers.Ctrl; else if (key === 'Shift') modifier = KeyboardModifiers.Shift; else if (key === 'Alt') modifier = KeyboardModifiers.Alt; else if (key === 'Meta') modifier = KeyboardModifiers.Meta; return modifier; } } __decorate([ transaction, __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Boolean]), __metadata("design:returntype", void 0) ], KeyboardSensor.prototype, "listen", null); __decorate([ transaction, __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], KeyboardSensor.prototype, "reset", null); __decorate([ transaction, options({ logging: LoggingLevel.Off }), __metadata("design:type", Function), __metadata("design:paramtypes", [KeyboardEvent]), __metadata("design:returntype", void 0) ], KeyboardSensor.prototype, "keyDown", null); __decorate([ transaction, options({ logging: LoggingLevel.Off }), __metadata("design:type", Function), __metadata("design:paramtypes", [KeyboardEvent]), __metadata("design:returntype", void 0) ], KeyboardSensor.prototype, "keyUp", null); export function extractModifierKeys(e) { let modifiers = KeyboardModifiers.None; if (e.ctrlKey) modifiers |= KeyboardModifiers.Ctrl; else modifiers &= ~KeyboardModifiers.Ctrl; if (e.shiftKey) modifiers |= KeyboardModifiers.Shift; else modifiers &= ~KeyboardModifiers.Shift; if (e.altKey) modifiers |= KeyboardModifiers.Alt; else modifiers &= ~KeyboardModifiers.Alt; if (e.metaKey) modifiers |= KeyboardModifiers.Meta; else modifiers &= ~KeyboardModifiers.Meta; return modifiers; }