Revamp shortcuts handler (not tested yet)

This commit is contained in:
m hagoort 2020-09-26 00:02:29 +02:00
parent 31828b125f
commit 5e7f531c7f
21 changed files with 190 additions and 170 deletions

View file

@ -54,24 +54,12 @@ export const keyScope = ko.computed({
if (KeyState.Menu !== value) {
if (KeyState.Compose === value) {
// disableKeyFilter
key.filter = () => useKeyboardShortcuts();
shortcuts.filter = () => useKeyboardShortcuts();
} else {
// restoreKeyFilter
key.filter = (event) => {
if (useKeyboardShortcuts()) {
const el = event.target,
nodeName = el ? el.nodeName : '';
return !(
'INPUT' === nodeName ||
'SELECT' === nodeName ||
'TEXTAREA' === nodeName ||
(el && el.contentEditable)
);
}
return false;
};
shortcuts.filter = event => !(event.target.matches
&& (event.target.matches('input,select,textarea')
|| event.target.closest('[contenteditable]')));
}
keyScopeFake(value);
@ -86,13 +74,13 @@ export const keyScope = ko.computed({
keyScopeReal.subscribe((value) => {
// console.log('keyScope=' + sValue); // DEBUG
key.setScope(value);
shortcuts.setScope(value);
});
dropdownVisibility.subscribe((value) => {
if (value) {
keyScope(KeyState.Menu);
} else if (KeyState.Menu === key.getScope()) {
} else if (KeyState.Menu === shortcuts.getScope()) {
keyScope(keyScopeFake());
}
});

View file

@ -273,7 +273,7 @@ class Selector {
}
});
key('enter', keyScope, () => {
shortcuts.add('enter', '', keyScope, () => {
const focused = this.focusedItem();
if (focused && !focused.selected()) {
this.actionClick(focused);
@ -283,48 +283,16 @@ class Selector {
return true;
});
key('ctrl+up, command+up, ctrl+down, command+down', keyScope, () => false);
shortcuts.add('arrowup', 'meta', keyScope, () => false);
shortcuts.add('arrowdown', 'meta', keyScope, () => false);
key('up, shift+up, down, shift+down, home, end, pageup, pagedown, insert, space', keyScope, (event, handler) => {
if (event && handler && handler.shortcut) {
let eventKey;
switch (handler.shortcut) {
case 'up':
case 'shift+up':
eventKey = 'ArrowUp';
break;
case 'down':
case 'shift+down':
eventKey = 'ArrowDown';
break;
case 'insert':
eventKey = 'Insert';
break;
case 'space':
eventKey = ' ';
break;
case 'home':
eventKey = 'Home';
break;
case 'end':
eventKey = 'End';
break;
case 'pageup':
eventKey = 'PageUp';
break;
case 'pagedown':
eventKey = 'PageDown';
break;
// no default
}
if (eventKey) {
this.newSelectPosition(eventKey, key.shift);
return false;
}
}
return true;
shortcuts.add(['arrowup','arrowdown'], 'shift', keyScope, event => {
this.newSelectPosition(event.key, true);
return false;
});
shortcuts.add(['arrowup','arrowdown','home','end','pageup','pagedown','insert','space'], '', keyScope, event => {
this.newSelectPosition(event.key, false);
return false;
});
}
}