fix: support the Command key on mac
This commit is contained in:
parent
201ecf82b4
commit
5667b1652a
|
@ -27,6 +27,13 @@ export class KeyboardInput {
|
|||
*/
|
||||
private subscription: Array<Subscription> = []
|
||||
|
||||
/**
|
||||
* Check if a key is pressed
|
||||
*/
|
||||
private isPressed(key: string, event: KeyboardEvent) {
|
||||
return (key === 'ctrl' && event.metaKey) || keycode(event) === key
|
||||
}
|
||||
|
||||
/**
|
||||
* use for keyboard events
|
||||
* @param params the keys to listen to
|
||||
|
@ -37,7 +44,7 @@ export class KeyboardInput {
|
|||
|
||||
//push a new subscription to the subscriptions array
|
||||
this.subscription.push(
|
||||
fromEvent(document, 'keydown').subscribe(e => {
|
||||
fromEvent(document, 'keydown').subscribe((e: KeyboardEvent) => {
|
||||
//remember the length of the pressed array
|
||||
//used to see if anything changed
|
||||
const last = this.pressed.length
|
||||
|
@ -45,7 +52,7 @@ export class KeyboardInput {
|
|||
//if the key is pressed and it isnt already pressed,
|
||||
//then add it to the pressed array
|
||||
for (let i of this.keys)
|
||||
if (i == keycode(e) && this.pressed.indexOf(i) == -1)
|
||||
if (this.isPressed(i, e) && this.pressed.indexOf(i) == -1)
|
||||
this.pressed.push(i)
|
||||
|
||||
//if there was no key pressd before, and now there is
|
||||
|
@ -59,7 +66,7 @@ export class KeyboardInput {
|
|||
|
||||
//push a new subscription to the subscriptions array
|
||||
this.subscription.push(
|
||||
fromEvent(document, 'keyup').subscribe(e => {
|
||||
fromEvent(document, 'keyup').subscribe((e: KeyboardEvent) => {
|
||||
//remember the length of the pressed array
|
||||
//used to see if anything changed
|
||||
const last = this.pressed.length
|
||||
|
@ -68,7 +75,7 @@ export class KeyboardInput {
|
|||
//if the key is released and it was pressed,
|
||||
//then remove it from the pressed array
|
||||
for (let i of this.keys)
|
||||
if (i == keycode(e) && this.pressed.indexOf(i) != -1)
|
||||
if (this.isPressed(i, e) && this.pressed.indexOf(i) != -1)
|
||||
this.pressed.splice(this.pressed.indexOf(i), 1)
|
||||
|
||||
//if there was at least a key pressd before, and now there isnt
|
||||
|
@ -86,7 +93,7 @@ export class KeyboardInput {
|
|||
* ends the listening
|
||||
*/
|
||||
public dispose() {
|
||||
this.subscription.forEach(e => e.unsubscribe())
|
||||
this.subscription.forEach((e) => e.unsubscribe())
|
||||
this.value = false
|
||||
this.valueChanges.next(false)
|
||||
this.valueChanges.complete()
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
import { KeyboardInput } from '../classes/KeyboardInput'
|
||||
import { KeyBindingMap, KeyBinding } from '../types/KeyBindingMap'
|
||||
import { SidebarActions } from '../../simulation-actions/constants'
|
||||
import { SidebarAction } from '../../simulation-actions/types/SidebarAction'
|
||||
import { modalIsOpen } from '../../modals/helpers/modalIsOpen'
|
||||
|
||||
export const listeners: Record<string, KeyboardInput> = {}
|
||||
|
||||
const keyBindings = Object.values(SidebarActions)
|
||||
.filter(action => action.keybinding)
|
||||
.filter((action) => action.keybinding)
|
||||
.map(
|
||||
(action): KeyBinding => {
|
||||
return {
|
||||
|
@ -30,7 +29,7 @@ export const initKeyBindings = (bindings: KeyBindingMap = keyBindings) => {
|
|||
listeners[key] = new KeyboardInput(key)
|
||||
}
|
||||
|
||||
window.addEventListener('keydown', e => {
|
||||
window.addEventListener('keydown', (e) => {
|
||||
if (!modalIsOpen() && location.pathname === '/') {
|
||||
const current: {
|
||||
keys: string[]
|
||||
|
|
Loading…
Reference in a new issue