mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-29 20:19:22 +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
|
|
@ -81,7 +81,7 @@ class AbstractSystemDropDownUserView extends AbstractViewNext {
|
|||
}
|
||||
|
||||
onBuild() {
|
||||
key('`', [KeyState.MessageList, KeyState.MessageView, KeyState.Settings], () => {
|
||||
shortcuts.add('`', '', [KeyState.MessageList, KeyState.MessageView, KeyState.Settings], () => {
|
||||
if (this.viewModelVisibility()) {
|
||||
MessageStore.messageFullScreenMode(false);
|
||||
this.accountMenuDropdownTrigger(true);
|
||||
|
|
@ -89,7 +89,7 @@ class AbstractSystemDropDownUserView extends AbstractViewNext {
|
|||
});
|
||||
|
||||
// shortcuts help
|
||||
key('shift+/', [KeyState.MessageList, KeyState.MessageView, KeyState.Settings], () => {
|
||||
shortcuts.add('/', 'shift', [KeyState.MessageList, KeyState.MessageView, KeyState.Settings], () => {
|
||||
if (this.viewModelVisibility()) {
|
||||
showScreenPopup(require('View/Popup/KeyboardShortcutsHelp'));
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ class FolderListMailBoxUserView extends AbstractViewNext {
|
|||
el && fSelectFolder(el, event, false);
|
||||
});
|
||||
|
||||
key('up, down', KeyState.FolderList, (event, handler) => {
|
||||
shortcuts.add(['arrowup','arrowdown'], '', KeyState.FolderList, event => {
|
||||
let items = [], index = 0;
|
||||
dom.querySelectorAll('.b-folders .e-item .e-link:not(.hidden)').forEach(node => {
|
||||
if (node.offsetHeight || node.getClientRects().length) {
|
||||
|
|
@ -133,7 +133,7 @@ class FolderListMailBoxUserView extends AbstractViewNext {
|
|||
}
|
||||
});
|
||||
if (items.length) {
|
||||
if (handler && 'up' === handler.shortcut) {
|
||||
if ('ArrowUp' === event.key) {
|
||||
index && --index;
|
||||
} else if (index < items.length - 1) {
|
||||
++index;
|
||||
|
|
@ -145,7 +145,7 @@ class FolderListMailBoxUserView extends AbstractViewNext {
|
|||
return false;
|
||||
});
|
||||
|
||||
key('enter', KeyState.FolderList, () => {
|
||||
shortcuts.add('enter', '', KeyState.FolderList, () => {
|
||||
const item = qs('.b-folders .e-item .e-link:not(.hidden).focused');
|
||||
if (item) {
|
||||
AppStore.focusedState(Focused.MessageList);
|
||||
|
|
@ -155,7 +155,7 @@ class FolderListMailBoxUserView extends AbstractViewNext {
|
|||
return false;
|
||||
});
|
||||
|
||||
key('space', KeyState.FolderList, () => {
|
||||
shortcuts.add('space', '', KeyState.FolderList, () => {
|
||||
const item = qs('.b-folders .e-item .e-link:not(.hidden).focused'),
|
||||
folder = item && ko.dataFor(item);
|
||||
if (folder) {
|
||||
|
|
@ -167,7 +167,8 @@ class FolderListMailBoxUserView extends AbstractViewNext {
|
|||
return false;
|
||||
});
|
||||
|
||||
key('esc, tab, shift+tab, right', KeyState.FolderList, () => {
|
||||
// shortcuts.add('tab', 'shift', KeyState.FolderList, () => {
|
||||
shortcuts.add(['escape','tab','arrowright'], '', KeyState.FolderList, () => {
|
||||
AppStore.focusedState(Focused.MessageList);
|
||||
moveAction(false);
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -742,7 +742,7 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
}
|
||||
|
||||
initShortcuts() {
|
||||
key('enter', KeyState.MessageList, () => {
|
||||
shortcuts.add('enter', '', KeyState.MessageList, () => {
|
||||
if (this.message() && this.useAutoSelect()) {
|
||||
dispatchEvent(new CustomEvent('mailbox.message-view.toggle-full-screen'));
|
||||
return false;
|
||||
|
|
@ -753,46 +753,40 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
|
||||
if (Settings.capa(Capa.MessageListActions)) {
|
||||
// archive (zip)
|
||||
key('z', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('z', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.archiveCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
// delete
|
||||
key('delete, shift+delete, shift+3', KeyState.MessageList, (event, handler) => {
|
||||
if (event) {
|
||||
if (MessageStore.messageListCheckedOrSelected().length) {
|
||||
if (handler && 'shift+delete' === handler.shortcut) {
|
||||
this.deleteWithoutMoveCommand();
|
||||
} else {
|
||||
this.deleteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
shortcuts.add('delete', 'shift', KeyState.MessageList, () => {
|
||||
MessageStore.messageListCheckedOrSelected().length && this.deleteWithoutMoveCommand();
|
||||
return false;
|
||||
});
|
||||
// shortcuts.add('3', 'shift', KeyState.MessageList, () => {
|
||||
shortcuts.add('delete', '', KeyState.MessageList, () => {
|
||||
MessageStore.messageListCheckedOrSelected().length && this.deleteCommand();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
if (Settings.capa(Capa.Reload)) {
|
||||
// check mail
|
||||
key('ctrl+r, command+r', [KeyState.FolderList, KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('r', 'meta', [KeyState.FolderList, KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.reloadCommand();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// check all
|
||||
key('ctrl+a, command+a', KeyState.MessageList, () => {
|
||||
shortcuts.add('a', 'meta', KeyState.MessageList, () => {
|
||||
this.checkAll(!(this.checkAll() && !this.isIncompleteChecked()));
|
||||
return false;
|
||||
});
|
||||
|
||||
if (Settings.capa(Capa.Composer)) {
|
||||
// write/compose (open compose popup)
|
||||
key('w,c', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add(['w','c'], '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
showScreenPopup(require('View/Popup/Compose'));
|
||||
return false;
|
||||
});
|
||||
|
|
@ -800,13 +794,13 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
|
||||
if (Settings.capa(Capa.MessageListActions)) {
|
||||
// important - star/flag messages
|
||||
key('i', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('i', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.flagMessagesFast();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
key('t', [KeyState.MessageList], () => {
|
||||
shortcuts.add('t', '', [KeyState.MessageList], () => {
|
||||
let message = this.selectorMessageSelected();
|
||||
if (!message) {
|
||||
message = this.selectorMessageFocused();
|
||||
|
|
@ -821,7 +815,7 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
|
||||
if (Settings.capa(Capa.MessageListActions)) {
|
||||
// move
|
||||
key('m', KeyState.MessageList, () => {
|
||||
shortcuts.add('m', '', KeyState.MessageList, () => {
|
||||
if (this.newMoveToFolder()) {
|
||||
this.moveNewCommand();
|
||||
} else {
|
||||
|
|
@ -834,20 +828,20 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
|
||||
if (Settings.capa(Capa.MessageListActions)) {
|
||||
// read
|
||||
key('q', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('q', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.seenMessagesFast(true);
|
||||
return false;
|
||||
});
|
||||
|
||||
// unread
|
||||
key('u', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('u', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.seenMessagesFast(false);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
if (Settings.capa(Capa.Composer)) {
|
||||
key('shift+f', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('f', 'shift', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.multyForwardCommand();
|
||||
return false;
|
||||
});
|
||||
|
|
@ -855,14 +849,14 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
|
||||
if (Settings.capa(Capa.Search)) {
|
||||
// search input focus
|
||||
key('/', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('/', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.inputMessageListSearchFocus(true);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// cancel search
|
||||
key('esc', KeyState.MessageList, () => {
|
||||
shortcuts.add('escape', '', KeyState.MessageList, () => {
|
||||
if (this.messageListSearchDesc()) {
|
||||
this.cancelSearch();
|
||||
return false;
|
||||
|
|
@ -875,18 +869,21 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
});
|
||||
|
||||
// change focused state
|
||||
key('tab, shift+tab, left, right', KeyState.MessageList, (event, handler) => {
|
||||
if (event && handler && ('shift+tab' === handler.shortcut || 'left' === handler.shortcut)) {
|
||||
AppStore.focusedState(Focused.FolderList);
|
||||
} else if (this.message()) {
|
||||
AppStore.focusedState(Focused.MessageView);
|
||||
}
|
||||
|
||||
shortcuts.add('tab', 'shift', KeyState.MessageList, () => {
|
||||
AppStore.focusedState(Focused.FolderList);
|
||||
return false;
|
||||
});
|
||||
shortcuts.add('arrowleft', '', KeyState.MessageList, () => {
|
||||
AppStore.focusedState(Focused.FolderList);
|
||||
return false;
|
||||
});
|
||||
shortcuts.add(['tab','arrowright'], '', KeyState.MessageList, () => {
|
||||
this.message() && AppStore.focusedState(Focused.MessageView);
|
||||
return false;
|
||||
});
|
||||
|
||||
key('ctrl+left, command+left', KeyState.MessageView, ()=>false);
|
||||
key('ctrl+right, command+right', KeyState.MessageView, ()=>false);
|
||||
shortcuts.add('arrowleft', 'meta', KeyState.MessageView, ()=>false);
|
||||
shortcuts.add('arrowright', 'meta', KeyState.MessageView, ()=>false);
|
||||
}
|
||||
|
||||
prefetchNextTick() {
|
||||
|
|
|
|||
|
|
@ -547,26 +547,25 @@ class MessageViewMailBoxUserView extends AbstractViewNext {
|
|||
|
||||
initShortcuts() {
|
||||
// exit fullscreen, back
|
||||
key('esc, backspace', KeyState.MessageView, this.escShortcuts.bind(this));
|
||||
shortcuts.add(['escape','backspace'], '', KeyState.MessageView, this.escShortcuts.bind(this));
|
||||
|
||||
// fullscreen
|
||||
key('enter', KeyState.MessageView, () => {
|
||||
shortcuts.add('enter', '', KeyState.MessageView, () => {
|
||||
this.toggleFullScreen();
|
||||
return false;
|
||||
});
|
||||
|
||||
// reply
|
||||
key('r', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('r', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
if (MessageStore.message()) {
|
||||
this.replyCommand();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
// replaAll
|
||||
key('a', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('a', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
if (MessageStore.message()) {
|
||||
this.replyAllCommand();
|
||||
return false;
|
||||
|
|
@ -576,7 +575,7 @@ class MessageViewMailBoxUserView extends AbstractViewNext {
|
|||
});
|
||||
|
||||
// forward
|
||||
key('f', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('f', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
if (MessageStore.message()) {
|
||||
this.forwardCommand();
|
||||
return false;
|
||||
|
|
@ -586,7 +585,7 @@ class MessageViewMailBoxUserView extends AbstractViewNext {
|
|||
});
|
||||
|
||||
// message information
|
||||
key('ctrl+i, command+i', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('i', 'meta', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
if (MessageStore.message()) {
|
||||
this.showFullInfo(!this.showFullInfo());
|
||||
}
|
||||
|
|
@ -594,7 +593,7 @@ class MessageViewMailBoxUserView extends AbstractViewNext {
|
|||
});
|
||||
|
||||
// toggle message blockquotes
|
||||
key('b', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add('b', '', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
const message = MessageStore.message();
|
||||
if (message && message.body) {
|
||||
message.body.querySelectorAll('.rlBlockquoteSwitcher').forEach(node => node.click());
|
||||
|
|
@ -603,62 +602,49 @@ class MessageViewMailBoxUserView extends AbstractViewNext {
|
|||
return true;
|
||||
});
|
||||
|
||||
key('ctrl+up, command+up, ctrl+left, command+left', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add(['arrowup','arrowleft'], 'meta', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.goUpCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
key('ctrl+down, command+down, ctrl+right, command+right', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
shortcuts.add(['arrowdown','arrowright'], 'meta', [KeyState.MessageList, KeyState.MessageView], () => {
|
||||
this.goDownCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
// print
|
||||
key('ctrl+p, command+p', [KeyState.MessageView, KeyState.MessageList], () => {
|
||||
shortcuts.add('p', 'meta', [KeyState.MessageView, KeyState.MessageList], () => {
|
||||
if (this.message()) {
|
||||
this.message().printMessage();
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
// delete
|
||||
key('delete, shift+delete', KeyState.MessageView, (event, handler) => {
|
||||
if (event) {
|
||||
if (handler && 'shift+delete' === handler.shortcut) {
|
||||
this.deleteWithoutMoveCommand();
|
||||
} else {
|
||||
this.deleteCommand();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
shortcuts.add('delete', '', KeyState.MessageView, () => {
|
||||
this.deleteCommand();
|
||||
return false;
|
||||
});
|
||||
shortcuts.add('delete', 'shift', KeyState.MessageView, () => {
|
||||
this.deleteWithoutMoveCommand();
|
||||
return false;
|
||||
});
|
||||
|
||||
// change focused state
|
||||
key('tab, shift+tab, left', KeyState.MessageView, (event, handler) => {
|
||||
shortcuts.add('arrowleft', '', KeyState.MessageView, () => {
|
||||
if (!this.fullScreenMode() && this.message() && Layout.NoPreview !== this.layout()) {
|
||||
if (event && handler && 'left' === handler.shortcut) {
|
||||
if (this.oMessageScrollerDom && 0 < this.oMessageScrollerDom.scrollLeft) {
|
||||
return true;
|
||||
}
|
||||
|
||||
AppStore.focusedState(Focused.MessageList);
|
||||
} else {
|
||||
AppStore.focusedState(Focused.MessageList);
|
||||
if (this.oMessageScrollerDom && 0 < this.oMessageScrollerDom.scrollLeft) {
|
||||
return true;
|
||||
}
|
||||
} else if (
|
||||
this.message() &&
|
||||
Layout.NoPreview === this.layout() &&
|
||||
event &&
|
||||
handler &&
|
||||
'left' === handler.shortcut
|
||||
) {
|
||||
return true;
|
||||
AppStore.focusedState(Focused.MessageList);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
// shortcuts.add('tab', 'shift', KeyState.MessageView, (event, handler) => {
|
||||
shortcuts.add('tab', '', KeyState.MessageView, () => {
|
||||
if (!this.fullScreenMode() && this.message() && Layout.NoPreview !== this.layout()) {
|
||||
AppStore.focusedState(Focused.MessageList);
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,8 @@ class MenuSettingsUserView extends AbstractViewNext {
|
|||
);
|
||||
}
|
||||
|
||||
key('up, down', KeyState.Settings, settingsMenuKeysHandler(dom.querySelectorAll('.b-settings-menu .e-item')));
|
||||
shortcuts.add(['ArrowUp','ArrowDown'], '', KeyState.Settings,
|
||||
settingsMenuKeysHandler(dom.querySelectorAll('.b-settings-menu .e-item')));
|
||||
}
|
||||
|
||||
link(route) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue