mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-09-13 00:24:24 +08:00
Keyboard shortcuts improvements (#70)
This commit is contained in:
parent
05f455c34e
commit
deffb81888
4 changed files with 198 additions and 92 deletions
|
@ -507,6 +507,68 @@ MailBoxMessageListViewModel.prototype.listUnsetFlags = function ()
|
|||
this.setAction(RL.data().currentFolderFullNameRaw(), Enums.MessageSetAction.UnsetFlag, RL.data().messageListCheckedOrSelected());
|
||||
};
|
||||
|
||||
MailBoxMessageListViewModel.prototype.flagMessages = function (oCurrentMessage)
|
||||
{
|
||||
var
|
||||
aChecked = this.messageListCheckedOrSelected(),
|
||||
aCheckedUids = []
|
||||
;
|
||||
|
||||
if (oCurrentMessage)
|
||||
{
|
||||
if (0 < aChecked.length)
|
||||
{
|
||||
aCheckedUids = _.map(aChecked, function (oMessage) {
|
||||
return oMessage.uid;
|
||||
});
|
||||
}
|
||||
|
||||
if (0 < aCheckedUids.length && -1 < Utils.inArray(oCurrentMessage.uid, aCheckedUids))
|
||||
{
|
||||
this.setAction(oCurrentMessage.folderFullNameRaw, oCurrentMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setAction(oCurrentMessage.folderFullNameRaw, oCurrentMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, [oCurrentMessage]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
MailBoxMessageListViewModel.prototype.flagMessagesFast = function ()
|
||||
{
|
||||
var
|
||||
aChecked = this.messageListCheckedOrSelected(),
|
||||
aFlagged = []
|
||||
;
|
||||
|
||||
if (0 < aChecked.length)
|
||||
{
|
||||
aFlagged = _.filter(aChecked, function (oMessage) {
|
||||
return oMessage.flagged();
|
||||
});
|
||||
|
||||
this.setAction(aChecked[0].folderFullNameRaw,
|
||||
aChecked.length === aFlagged.length ? Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
};
|
||||
|
||||
MailBoxMessageListViewModel.prototype.seenMessagesFast = function ()
|
||||
{
|
||||
var
|
||||
aChecked = this.messageListCheckedOrSelected(),
|
||||
aUnseen = []
|
||||
;
|
||||
|
||||
aUnseen = _.filter(aChecked, function (oMessage) {
|
||||
return oMessage.unseen();
|
||||
});
|
||||
|
||||
this.setAction(aChecked[0].folderFullNameRaw,
|
||||
0 < aUnseen.length ? Enums.MessageSetAction.SetSeen : Enums.MessageSetAction.UnsetSeen, aChecked);
|
||||
};
|
||||
|
||||
MailBoxMessageListViewModel.prototype.onBuild = function (oDom)
|
||||
{
|
||||
var
|
||||
|
@ -572,33 +634,7 @@ MailBoxMessageListViewModel.prototype.onBuild = function (oDom)
|
|||
self.checkAll(!self.checkAll());
|
||||
})
|
||||
.on('click', '.messageList .messageListItem .flagParent', function () {
|
||||
|
||||
var
|
||||
oMessage = ko.dataFor(this),
|
||||
aChecked = oData.messageListCheckedOrSelected(),
|
||||
aCheckedUids = []
|
||||
;
|
||||
|
||||
if (oMessage)
|
||||
{
|
||||
if (0 < aChecked.length)
|
||||
{
|
||||
aCheckedUids = _.map(aChecked, function (oMessage) {
|
||||
return oMessage.uid;
|
||||
});
|
||||
}
|
||||
|
||||
if (0 < aCheckedUids.length && -1 < Utils.inArray(oMessage.uid, aCheckedUids))
|
||||
{
|
||||
self.setAction(oMessage.folderFullNameRaw, oMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
else
|
||||
{
|
||||
self.setAction(oMessage.folderFullNameRaw, oMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, [oMessage]);
|
||||
}
|
||||
}
|
||||
self.flagMessages(ko.dataFor(this));
|
||||
})
|
||||
;
|
||||
|
||||
|
@ -668,6 +704,24 @@ MailBoxMessageListViewModel.prototype.initShortcuts = function ()
|
|||
}
|
||||
});
|
||||
|
||||
// star/flag messages
|
||||
key('s', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
{
|
||||
self.flagMessagesFast();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// mark as read/unread
|
||||
key('m', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
{
|
||||
self.seenMessagesFast();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// shortcuts help
|
||||
key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
|
@ -677,6 +731,14 @@ MailBoxMessageListViewModel.prototype.initShortcuts = function ()
|
|||
}
|
||||
});
|
||||
|
||||
key('shift+f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
{
|
||||
self.multyForwardCommand();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// search input focus
|
||||
key('/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
|
|
|
@ -415,8 +415,8 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// reply
|
||||
key('r', Enums.KeyState.MessageView, function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
key('r', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts() && oData.message())
|
||||
{
|
||||
self.replyCommand();
|
||||
return false;
|
||||
|
@ -424,8 +424,8 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// replaAll
|
||||
key('a', Enums.KeyState.MessageView, function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
key('a', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts() && oData.message())
|
||||
{
|
||||
self.replyAllCommand();
|
||||
return false;
|
||||
|
@ -433,8 +433,8 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// forward
|
||||
key('f', Enums.KeyState.MessageView, function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
key('f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts() && oData.message())
|
||||
{
|
||||
self.forwardCommand();
|
||||
return false;
|
||||
|
@ -442,7 +442,7 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// message information
|
||||
key('i', Enums.KeyState.MessageView, function () {
|
||||
key('i', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
{
|
||||
self.showFullInfo(!self.showFullInfo());
|
||||
|
@ -451,7 +451,7 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// toggle message blockquotes
|
||||
key('b', Enums.KeyState.MessageView, function () {
|
||||
key('b', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts() && oData.message() && oData.message().body)
|
||||
{
|
||||
Utils.toggleMessageBlockquote(oData.message().body);
|
||||
|
@ -488,15 +488,6 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
}
|
||||
});
|
||||
|
||||
// archive
|
||||
// key('delete', Enums.KeyState.MessageView, function () {
|
||||
// if (oData.useKeyboardShortcuts())
|
||||
// {
|
||||
// self.archiveCommand();
|
||||
// return false;
|
||||
// }
|
||||
// });
|
||||
|
||||
// delete
|
||||
key('delete, shift+delete', Enums.KeyState.MessageView, function (event, handler) {
|
||||
if (oData.useKeyboardShortcuts() && event)
|
||||
|
|
|
@ -12273,6 +12273,68 @@ MailBoxMessageListViewModel.prototype.listUnsetFlags = function ()
|
|||
this.setAction(RL.data().currentFolderFullNameRaw(), Enums.MessageSetAction.UnsetFlag, RL.data().messageListCheckedOrSelected());
|
||||
};
|
||||
|
||||
MailBoxMessageListViewModel.prototype.flagMessages = function (oCurrentMessage)
|
||||
{
|
||||
var
|
||||
aChecked = this.messageListCheckedOrSelected(),
|
||||
aCheckedUids = []
|
||||
;
|
||||
|
||||
if (oCurrentMessage)
|
||||
{
|
||||
if (0 < aChecked.length)
|
||||
{
|
||||
aCheckedUids = _.map(aChecked, function (oMessage) {
|
||||
return oMessage.uid;
|
||||
});
|
||||
}
|
||||
|
||||
if (0 < aCheckedUids.length && -1 < Utils.inArray(oCurrentMessage.uid, aCheckedUids))
|
||||
{
|
||||
this.setAction(oCurrentMessage.folderFullNameRaw, oCurrentMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setAction(oCurrentMessage.folderFullNameRaw, oCurrentMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, [oCurrentMessage]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
MailBoxMessageListViewModel.prototype.flagMessagesFast = function ()
|
||||
{
|
||||
var
|
||||
aChecked = this.messageListCheckedOrSelected(),
|
||||
aFlagged = []
|
||||
;
|
||||
|
||||
if (0 < aChecked.length)
|
||||
{
|
||||
aFlagged = _.filter(aChecked, function (oMessage) {
|
||||
return oMessage.flagged();
|
||||
});
|
||||
|
||||
this.setAction(aChecked[0].folderFullNameRaw,
|
||||
aChecked.length === aFlagged.length ? Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
};
|
||||
|
||||
MailBoxMessageListViewModel.prototype.seenMessagesFast = function ()
|
||||
{
|
||||
var
|
||||
aChecked = this.messageListCheckedOrSelected(),
|
||||
aUnseen = []
|
||||
;
|
||||
|
||||
aUnseen = _.filter(aChecked, function (oMessage) {
|
||||
return oMessage.unseen();
|
||||
});
|
||||
|
||||
this.setAction(aChecked[0].folderFullNameRaw,
|
||||
0 < aUnseen.length ? Enums.MessageSetAction.SetSeen : Enums.MessageSetAction.UnsetSeen, aChecked);
|
||||
};
|
||||
|
||||
MailBoxMessageListViewModel.prototype.onBuild = function (oDom)
|
||||
{
|
||||
var
|
||||
|
@ -12338,33 +12400,7 @@ MailBoxMessageListViewModel.prototype.onBuild = function (oDom)
|
|||
self.checkAll(!self.checkAll());
|
||||
})
|
||||
.on('click', '.messageList .messageListItem .flagParent', function () {
|
||||
|
||||
var
|
||||
oMessage = ko.dataFor(this),
|
||||
aChecked = oData.messageListCheckedOrSelected(),
|
||||
aCheckedUids = []
|
||||
;
|
||||
|
||||
if (oMessage)
|
||||
{
|
||||
if (0 < aChecked.length)
|
||||
{
|
||||
aCheckedUids = _.map(aChecked, function (oMessage) {
|
||||
return oMessage.uid;
|
||||
});
|
||||
}
|
||||
|
||||
if (0 < aCheckedUids.length && -1 < Utils.inArray(oMessage.uid, aCheckedUids))
|
||||
{
|
||||
self.setAction(oMessage.folderFullNameRaw, oMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked);
|
||||
}
|
||||
else
|
||||
{
|
||||
self.setAction(oMessage.folderFullNameRaw, oMessage.flagged() ?
|
||||
Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, [oMessage]);
|
||||
}
|
||||
}
|
||||
self.flagMessages(ko.dataFor(this));
|
||||
})
|
||||
;
|
||||
|
||||
|
@ -12434,6 +12470,24 @@ MailBoxMessageListViewModel.prototype.initShortcuts = function ()
|
|||
}
|
||||
});
|
||||
|
||||
// star/flag messages
|
||||
key('s', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
{
|
||||
self.flagMessagesFast();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// mark as read/unread
|
||||
key('m', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
{
|
||||
self.seenMessagesFast();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// shortcuts help
|
||||
key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
|
@ -12443,6 +12497,14 @@ MailBoxMessageListViewModel.prototype.initShortcuts = function ()
|
|||
}
|
||||
});
|
||||
|
||||
key('shift+f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
{
|
||||
self.multyForwardCommand();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// search input focus
|
||||
key('/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
|
@ -13017,8 +13079,8 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// reply
|
||||
key('r', Enums.KeyState.MessageView, function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
key('r', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts() && oData.message())
|
||||
{
|
||||
self.replyCommand();
|
||||
return false;
|
||||
|
@ -13026,8 +13088,8 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// replaAll
|
||||
key('a', Enums.KeyState.MessageView, function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
key('a', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts() && oData.message())
|
||||
{
|
||||
self.replyAllCommand();
|
||||
return false;
|
||||
|
@ -13035,8 +13097,8 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// forward
|
||||
key('f', Enums.KeyState.MessageView, function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
key('f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts() && oData.message())
|
||||
{
|
||||
self.forwardCommand();
|
||||
return false;
|
||||
|
@ -13044,7 +13106,7 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// message information
|
||||
key('i', Enums.KeyState.MessageView, function () {
|
||||
key('i', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts())
|
||||
{
|
||||
self.showFullInfo(!self.showFullInfo());
|
||||
|
@ -13053,7 +13115,7 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
});
|
||||
|
||||
// toggle message blockquotes
|
||||
key('b', Enums.KeyState.MessageView, function () {
|
||||
key('b', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
||||
if (oData.useKeyboardShortcuts() && oData.message() && oData.message().body)
|
||||
{
|
||||
Utils.toggleMessageBlockquote(oData.message().body);
|
||||
|
@ -13090,15 +13152,6 @@ MailBoxMessageViewViewModel.prototype.initShortcuts = function ()
|
|||
}
|
||||
});
|
||||
|
||||
// archive
|
||||
// key('delete', Enums.KeyState.MessageView, function () {
|
||||
// if (oData.useKeyboardShortcuts())
|
||||
// {
|
||||
// self.archiveCommand();
|
||||
// return false;
|
||||
// }
|
||||
// });
|
||||
|
||||
// delete
|
||||
key('delete, shift+delete', Enums.KeyState.MessageView, function (event, handler) {
|
||||
if (oData.useKeyboardShortcuts() && event)
|
||||
|
|
8
rainloop/v/0.0.0/static/js/app.min.js
vendored
8
rainloop/v/0.0.0/static/js/app.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue