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 = {