UNPKG

thematic-earth

Version:

HTML-based, whole-Earth thematic maps using locally hosted data layers

2 lines 6.24 kB
/* Copyright (c) 2023 Read Write Tools. Legal use subject to the Thematic Earth Software License Agreement. */ import KC from'../enum/keycodes.enum.js';import CA from'../enum/cursor-action.enum.js';import expect from'../dev/expect.js';export default class KeyboardHandler{constructor(s){expect(s,'Signal'),this.signal=s,this.pressedDown=new Set,this.registerEventListeners()}registerEventListeners(){document.addEventListener('keydown',this.onKeydown.bind(this)),document.addEventListener('keyup',this.onKeyup.bind(this))}onKeydown(s){if(0==s.repeat)switch(s.keyCode){case KC.SHIFT:return this.pressedDown.add(KC.SHIFT),void this.signal.broadcast('keyboard/begin-cursor',CA.FEATURE_IDENTIFY);case KC.CTRL:return this.pressedDown.add(KC.CTRL),void this.signal.broadcast('keyboard/begin-cursor',CA.FEATURE_SELECT);case KC.ALT:return this.pressedDown.add(KC.ALT),s.stopPropagation(),s.preventDefault(),void this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_ANY);case KC.LETTER_A:return this.pressedDown.add(KC.LETTER_A),void this.signal.broadcast('keyboard/begin-cursor',CA.SET_POINT_A);case KC.LETTER_B:return this.pressedDown.add(KC.LETTER_B),void this.signal.broadcast('keyboard/begin-cursor',CA.SET_POINT_B);case KC.LETTER_C:return this.pressedDown.add(KC.LETTER_C),void this.signal.broadcast('keyboard/begin-cursor',CA.PAN_CANVAS_ANY);case KC.LETTER_D:return this.pressedDown.add(KC.LETTER_D),void this.signal.broadcast('keyboard/begin-cursor',CA.SET_PLACE_OF_INTEREST);case KC.LETTER_S:return this.pressedDown.add(KC.LETTER_S),void this.signal.broadcast('keyboard/begin-cursor',CA.FEATURE_SYMBOL_SPECIFIER);case KC.LETTER_X:return this.pressedDown.add(KC.LETTER_X),void this.signal.broadcast('keyboard/begin-cursor',CA.PAN_SPACE_ANY);case KC.LETTER_Z:return this.pressedDown.add(KC.LETTER_Z),void this.signal.broadcast('keyboard/begin-cursor',CA.ZOOM_ANY)}if(this.pressedDown.has(KC.ALT))switch(s.stopPropagation(),s.preventDefault(),s.keyCode){case KC.UP_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_NORTH),void this.signal.broadcast('keyboard/nsew/north',null);case KC.DOWN_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_SOUTH),void this.signal.broadcast('keyboard/nsew/south',null);case KC.LEFT_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_WEST),void this.signal.broadcast('keyboard/nsew/west',null);case KC.RIGHT_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_EAST),void this.signal.broadcast('keyboard/nsew/east',null);case KC.PAGE_UP:return this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_NORTH_POLE),void this.signal.broadcast('keyboard/nsew/north-pole',null);case KC.PAGE_DOWN:return this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_SOUTH_POLE),void this.signal.broadcast('keyboard/nsew/south-pole',null);case KC.HOME:return this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_PRIME_MERIDIAN),void this.signal.broadcast('keyboard/nsew/prime-meridian',null);case KC.END:return this.signal.broadcast('keyboard/begin-cursor',CA.NSEW_DATELINE),void this.signal.broadcast('keyboard/nsew/dateline',null)}if(this.pressedDown.has(KC.LETTER_X))switch(s.stopPropagation(),s.preventDefault(),s.keyCode){case KC.UP_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_SPACE_NORTH),void this.signal.broadcast('keyboard/pan-space/north',null);case KC.DOWN_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_SPACE_SOUTH),void this.signal.broadcast('keyboard/pan-space/south',null);case KC.LEFT_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_SPACE_WEST),void this.signal.broadcast('keyboard/pan-space/west',null);case KC.RIGHT_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_SPACE_EAST),void this.signal.broadcast('keyboard/pan-space/east',null);case KC.HOME:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_SPACE_RECENTER),void this.signal.broadcast('keyboard/pan-space/recenter',null)}if(this.pressedDown.has(KC.LETTER_C))switch(s.stopPropagation(),s.preventDefault(),s.keyCode){case KC.UP_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_CANVAS_NORTH),void this.signal.broadcast('keyboard/pan-canvas/north',null);case KC.DOWN_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_CANVAS_SOUTH),void this.signal.broadcast('keyboard/pan-canvas/south',null);case KC.LEFT_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_CANVAS_WEST),void this.signal.broadcast('keyboard/pan-canvas/west',null);case KC.RIGHT_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_CANVAS_EAST),void this.signal.broadcast('keyboard/pan-canvas/east',null);case KC.HOME:return this.signal.broadcast('keyboard/begin-cursor',CA.PAN_CANVAS_RECENTER),void this.signal.broadcast('keyboard/pan-canvas/recenter',null)}if(this.pressedDown.has(KC.LETTER_Z)){switch(s.stopPropagation(),s.preventDefault(),s.keyCode){case KC.UP_ARROW:case KC.LEFT_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.ZOOM_OUT),void this.signal.broadcast('keyboard/zoom/out',null);case KC.DOWN_ARROW:case KC.RIGHT_ARROW:return this.signal.broadcast('keyboard/begin-cursor',CA.ZOOM_IN),void this.signal.broadcast('keyboard/zoom/in',null);case KC.HOME:return this.signal.broadcast('keyboard/begin-cursor',CA.ZOOM_FIT),void this.signal.broadcast('keyboard/zoom/fit',null)}if(s.keyCode>=48&&s.keyCode<=57||s.keyCode>=96&&s.keyCode<=105)return this.signal.broadcast('keyboard/begin-cursor',CA.ZOOM_SCALE),void this.signal.broadcast('keyboard/zoom/scale',s.key)}}onKeyup(s){switch(s.keyCode){case KC.SHIFT:case KC.CTRL:case KC.ALT:return void(this.pressedDown.has(s.keyCode)&&(this.pressedDown.clear(),s.stopPropagation(),s.preventDefault(),this.signal.broadcast('keyboard/begin-cursor',CA.FEATURE_DISCOVER)));case KC.LETTER_A:case KC.LETTER_B:case KC.LETTER_C:case KC.LETTER_D:case KC.LETTER_S:case KC.LETTER_X:case KC.LETTER_Z:return void(this.pressedDown.has(s.keyCode)&&(this.pressedDown.delete(s.keyCode),this.pressedDown.has(KC.ALT)?(s.stopPropagation(),s.preventDefault(),this.signal.broadcast('keyboard/begin-cursor',CA.INDETERMINATE_ACTION)):(s.stopPropagation(),s.preventDefault(),this.signal.broadcast('keyboard/begin-cursor',CA.RESTING_STATE))))}}}