From ee23a5553e32db9b5ce63b3bf5d55cffd28d2eb1 Mon Sep 17 00:00:00 2001 From: djmaze Date: Fri, 9 Oct 2020 10:31:44 +0200 Subject: [PATCH] Resolve https://github.com/the-djmaze/snappymail/issues/22 --- dev/Common/Selector.js | 2 +- dev/View/Popup/Compose.js | 16 +++++++++---- dev/View/User/AbstractSystemDropDown.js | 2 +- dev/View/User/MailBox/FolderList.js | 2 +- dev/View/User/MailBox/MessageList.js | 6 ++--- dev/View/User/MailBox/MessageView.js | 20 +++++++++------- dev/shortcuts.js | 9 +++---- .../Common/PopupsKeyboardShortcutsHelp.html | 24 +++++++++---------- vendors/squire/build/squire-raw.js | 2 ++ 9 files changed, 46 insertions(+), 37 deletions(-) diff --git a/dev/Common/Selector.js b/dev/Common/Selector.js index 8a684f81c..50041431d 100644 --- a/dev/Common/Selector.js +++ b/dev/Common/Selector.js @@ -273,7 +273,7 @@ class Selector { } }); - shortcuts.add('enter', '', keyScope, () => { + shortcuts.add('enter,open', '', keyScope, () => { const focused = this.focusedItem(); if (focused && !focused.selected()) { this.actionClick(focused); diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index 280e71a6a..e61fb2b83 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -1171,7 +1171,7 @@ class ComposePopupView extends AbstractViewNext { return false; }); - shortcuts.add('escape', '', KeyState.Compose, () => { + shortcuts.add('escape,close', '', KeyState.Compose, () => { this.skipCommand(); return false; }); @@ -1185,6 +1185,10 @@ class ComposePopupView extends AbstractViewNext { this.saveCommand(); return false; }); + shortcuts.add('save', KeyState.Compose, () => { + this.saveCommand(); + return false; + }); } if (Settings.app('allowCtrlEnterOnCompose')) { @@ -1193,11 +1197,13 @@ class ComposePopupView extends AbstractViewNext { return false; }); } + shortcuts.add('mailsend', '', KeyState.Compose, () => { + this.sendCommand(); + return false; + }); - shortcuts.add('escape', 'shift', KeyState.Compose, () => { - if (this.modalVisibility()) { - this.tryToClosePopup(); - } + shortcuts.add('escape,close', 'shift', KeyState.Compose, () => { + this.modalVisibility() && this.tryToClosePopup(); return false; }); diff --git a/dev/View/User/AbstractSystemDropDown.js b/dev/View/User/AbstractSystemDropDown.js index a279c3b4c..1d99b6065 100644 --- a/dev/View/User/AbstractSystemDropDown.js +++ b/dev/View/User/AbstractSystemDropDown.js @@ -89,7 +89,7 @@ class AbstractSystemDropDownUserView extends AbstractViewNext { }); // shortcuts help - shortcuts.add('/', 'shift', [KeyState.MessageList, KeyState.MessageView, KeyState.Settings], () => { + shortcuts.add('?,f1,help', '', [KeyState.MessageList, KeyState.MessageView, KeyState.Settings], () => { if (this.viewModelVisible) { showScreenPopup(require('View/Popup/KeyboardShortcutsHelp')); return false; diff --git a/dev/View/User/MailBox/FolderList.js b/dev/View/User/MailBox/FolderList.js index 9d95fe896..6e0fe36b6 100644 --- a/dev/View/User/MailBox/FolderList.js +++ b/dev/View/User/MailBox/FolderList.js @@ -145,7 +145,7 @@ class FolderListMailBoxUserView extends AbstractViewNext { return false; }); - shortcuts.add('enter', '', KeyState.FolderList, () => { + shortcuts.add('enter,open', '', KeyState.FolderList, () => { const item = qs('.b-folders .e-item .e-link:not(.hidden).focused'); if (item) { AppStore.focusedState(Focused.MessageList); diff --git a/dev/View/User/MailBox/MessageList.js b/dev/View/User/MailBox/MessageList.js index 66a9a3524..2ac85a7c3 100644 --- a/dev/View/User/MailBox/MessageList.js +++ b/dev/View/User/MailBox/MessageList.js @@ -728,7 +728,7 @@ class MessageListMailBoxUserView extends AbstractViewNext { } initShortcuts() { - shortcuts.add('enter', '', KeyState.MessageList, () => { + shortcuts.add('enter,open', '', KeyState.MessageList, () => { if (this.message() && this.useAutoSelect()) { dispatchEvent(new CustomEvent('mailbox.message-view.toggle-full-screen')); return false; @@ -772,7 +772,7 @@ class MessageListMailBoxUserView extends AbstractViewNext { if (Settings.capa(Capa.Composer)) { // write/compose (open compose popup) - shortcuts.add('w,c', '', [KeyState.MessageList, KeyState.MessageView], () => { + shortcuts.add('w,c,new', '', [KeyState.MessageList, KeyState.MessageView], () => { showScreenPopup(require('View/Popup/Compose')); return false; }); @@ -827,7 +827,7 @@ class MessageListMailBoxUserView extends AbstractViewNext { } if (Settings.capa(Capa.Composer)) { - shortcuts.add('f', 'shift', [KeyState.MessageList, KeyState.MessageView], () => { + shortcuts.add('f,mailforward', 'shift', [KeyState.MessageList, KeyState.MessageView], () => { this.multyForwardCommand(); return false; }); diff --git a/dev/View/User/MailBox/MessageView.js b/dev/View/User/MailBox/MessageView.js index 0a4d9095e..4edad7c1e 100644 --- a/dev/View/User/MailBox/MessageView.js +++ b/dev/View/User/MailBox/MessageView.js @@ -535,13 +535,13 @@ class MessageViewMailBoxUserView extends AbstractViewNext { shortcuts.add('escape,backspace', '', KeyState.MessageView, this.escShortcuts.bind(this)); // fullscreen - shortcuts.add('enter', '', KeyState.MessageView, () => { + shortcuts.add('enter,open', '', KeyState.MessageView, () => { this.toggleFullScreen(); return false; }); // reply - shortcuts.add('r', '', [KeyState.MessageList, KeyState.MessageView], () => { + shortcuts.add('r,mailreply', '', [KeyState.MessageList, KeyState.MessageView], () => { if (MessageStore.message()) { this.replyCommand(); return false; @@ -555,12 +555,18 @@ class MessageViewMailBoxUserView extends AbstractViewNext { this.replyAllCommand(); return false; } - + return true; + }); + shortcuts.add('mailreply', 'shift', [KeyState.MessageList, KeyState.MessageView], () => { + if (MessageStore.message()) { + this.replyAllCommand(); + return false; + } return true; }); // forward - shortcuts.add('f', '', [KeyState.MessageList, KeyState.MessageView], () => { + shortcuts.add('f,mailforward', '', [KeyState.MessageList, KeyState.MessageView], () => { if (MessageStore.message()) { this.forwardCommand(); return false; @@ -598,10 +604,8 @@ class MessageViewMailBoxUserView extends AbstractViewNext { }); // print - shortcuts.add('p', 'meta', [KeyState.MessageView, KeyState.MessageList], () => { - if (this.message()) { - this.message().printMessage(); - } + shortcuts.add('p,printscreen', 'meta', [KeyState.MessageView, KeyState.MessageList], () => { + this.message() && this.message().printMessage(); return false; }); diff --git a/dev/shortcuts.js b/dev/shortcuts.js index 59e56d850..a1b924a62 100644 --- a/dev/shortcuts.js +++ b/dev/shortcuts.js @@ -33,10 +33,10 @@ const keydown = event => { const key = (event.key||event.code||'').toLowerCase(); - if (scope[key] && win.shortcuts.filter(event)) { + if (scope[key] && win.shortcuts.filter(event.target)) { fire(scope[key], event); } - if (!event.defaultPrevented && _scope !== 'all' && _scopes.all[key] && win.shortcuts.filter(event)) { + if (!event.defaultPrevented && _scope !== 'all' && _scopes.all[key] && win.shortcuts.filter(event.target)) { fire(_scopes.all[key], event); } }; @@ -45,8 +45,6 @@ let scope = {}, _scope = 'all'; -doc.addEventListener('keydown', keydown); - win.shortcuts = { on: () => doc.addEventListener('keydown', keydown), off: () => doc.removeEventListener('keydown', keydown), @@ -81,8 +79,7 @@ win.shortcuts = { getScope: () => _scope, getMetaKey: () => meta, // ignore keydown in any element that supports keyboard input - filter: event => !(event.target.matches - && (event.target.matches('input,select,textarea') || event.target.closest('[contenteditable]'))) + filter: node => !(!node.closest || node.closest('input,select,textarea,[contenteditable]')) }; win.shortcuts.on(); diff --git a/rainloop/v/0.0.0/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html b/rainloop/v/0.0.0/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html index 373b79c54..9c63e88ea 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html +++ b/rainloop/v/0.0.0/app/templates/Views/Common/PopupsKeyboardShortcutsHelp.html @@ -25,11 +25,11 @@ - - - - - + + + + +
` (tilde)
R
A
F
Shift + F
?, Shift + /
R, Reply
A, Shift + Reply
F, Fwd
Shift + F, Shift + Fwd
F1, Help
@@ -59,11 +59,11 @@ - + - - + +
Enter
Enter, Open
B
Ctrl + P, ⌘ + P
Esc
Esc
Esc, Close
Esc, Close
Tab, Shift + Tab, Esc
@@ -73,12 +73,12 @@ - + - + - - + +
W, C
W, C, New
` (tilde), Ctrl + `, ⌘ + `
Ctrl + S, ⌘ + S
Ctrl + S, ⌘ + S, Save
Esc
Shift + Esc
Esc, Close
Shift + Esc, Shift + Close
diff --git a/vendors/squire/build/squire-raw.js b/vendors/squire/build/squire-raw.js index 88991699d..761f735af 100644 --- a/vendors/squire/build/squire-raw.js +++ b/vendors/squire/build/squire-raw.js @@ -1675,7 +1675,9 @@ keyHandlers[ ctrlKey + '[' ] = changeIndentationLevel( 'decrease' ); keyHandlers[ ctrlKey + ']' ] = changeIndentationLevel( 'increase' ); keyHandlers[ ctrlKey + 'd' ] = mapKeyTo( 'toggleCode' ); keyHandlers[ ctrlKey + 'y' ] = mapKeyTo( 'redo' ); +keyHandlers[ 'redo' ] = mapKeyTo( 'redo' ); keyHandlers[ ctrlKey + 'z' ] = mapKeyTo( 'undo' ); +keyHandlers[ 'undo' ] = mapKeyTo( 'undo' ); keyHandlers[ ctrlKey + 'shift-z' ] = mapKeyTo( 'redo' ); let fontSizes = {