mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-01 21:49:21 +03:00
Revamp shortcuts handler (not tested yet)
This commit is contained in:
parent
31828b125f
commit
5e7f531c7f
21 changed files with 190 additions and 170 deletions
|
|
@ -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());
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue