mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Improved selector changes of #1248
This commit is contained in:
parent
63d0d138e6
commit
6b0e6ec02a
4 changed files with 37 additions and 40 deletions
|
|
@ -7,7 +7,7 @@ import { koComputable } from 'External/ko';
|
||||||
oCallbacks:
|
oCallbacks:
|
||||||
ItemSelect
|
ItemSelect
|
||||||
MiddleClick
|
MiddleClick
|
||||||
AutoSelect
|
canSelect
|
||||||
ItemGetUid
|
ItemGetUid
|
||||||
UpOrDown
|
UpOrDown
|
||||||
*/
|
*/
|
||||||
|
|
@ -200,18 +200,11 @@ export class Selector {
|
||||||
|
|
||||||
addEventsListeners(contentScrollable, {
|
addEventsListeners(contentScrollable, {
|
||||||
click: event => {
|
click: event => {
|
||||||
|
const el = event.target.closestWithin(this.sItemSelector, contentScrollable);
|
||||||
|
let item = el && ko.dataFor(el);
|
||||||
|
el && (this.oCallbacks.click || (()=>1))(event, item) && this.actionClick(item, event);
|
||||||
|
|
||||||
const lowerClassName = event.target.className.toLowerCase();
|
item = getItem(this.sItemCheckedSelector);
|
||||||
if (this.sItemSelector !== '.messageListItem'
|
|
||||||
|| (lowerClassName.indexOf('flagparent') === -1
|
|
||||||
&& lowerClassName.indexOf('checkbox') === -1)) {
|
|
||||||
|
|
||||||
let el = event.target.closestWithin(this.sItemSelector, contentScrollable);
|
|
||||||
el && this.actionClick(ko.dataFor(el), event);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const item = getItem(this.sItemCheckedSelector);
|
|
||||||
if (item) {
|
if (item) {
|
||||||
if (event.shiftKey) {
|
if (event.shiftKey) {
|
||||||
this.actionClick(item, event);
|
this.actionClick(item, event);
|
||||||
|
|
@ -257,7 +250,7 @@ export class Selector {
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
autoSelect(bForce) {
|
autoSelect(bForce) {
|
||||||
(bForce || (this.oCallbacks.AutoSelect || (()=>1))())
|
(bForce || (this.oCallbacks.canSelect || (()=>1))())
|
||||||
&& this.focusedItem()
|
&& this.focusedItem()
|
||||||
&& this.selectedItem(this.focusedItem());
|
&& this.selectedItem(this.focusedItem());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,7 @@ MessagelistUserStore.notifyNewMessages = (folder, newMessages) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MessagelistUserStore.canAutoSelect = () =>
|
MessagelistUserStore.canSelect = () =>
|
||||||
!disableAutoSelect()
|
!disableAutoSelect()
|
||||||
&& SettingsUserStore.usePreviewPane();
|
&& SettingsUserStore.usePreviewPane();
|
||||||
// && !SettingsUserStore.showNextMessage();
|
// && !SettingsUserStore.showNextMessage();
|
||||||
|
|
|
||||||
|
|
@ -237,7 +237,25 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
this.selector.on('ItemGetUid', message => (message ? message.generateUid() : ''));
|
this.selector.on('ItemGetUid', message => (message ? message.generateUid() : ''));
|
||||||
|
|
||||||
this.selector.on('AutoSelect', () => MessagelistUserStore.canAutoSelect());
|
this.selector.on('canSelect', () => MessagelistUserStore.canSelect());
|
||||||
|
|
||||||
|
this.selector.on('click', (event, currentMessage) => {
|
||||||
|
const el = event.target;
|
||||||
|
if (el.closest('.flagparent')) {
|
||||||
|
if (currentMessage) {
|
||||||
|
const checked = MessagelistUserStore.listCheckedOrSelected();
|
||||||
|
listAction(
|
||||||
|
currentMessage.folder,
|
||||||
|
currentMessage.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
||||||
|
checked.find(message => message.uid == currentMessage.uid) ? checked : [currentMessage]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else if (el.closest('.threads-len')) {
|
||||||
|
this.gotoThread(currentMessage);
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.selector.on('UpOrDown', up => {
|
this.selector.on('UpOrDown', up => {
|
||||||
if (MessagelistUserStore.hasChecked()) {
|
if (MessagelistUserStore.hasChecked()) {
|
||||||
|
|
@ -594,20 +612,6 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
el && this.gotoPage(ko.dataFor(el));
|
el && this.gotoPage(ko.dataFor(el));
|
||||||
|
|
||||||
eqs(event, '.checkboxCheckAll') && this.checkAll(!this.checkAll());
|
eqs(event, '.checkboxCheckAll') && this.checkAll(!this.checkAll());
|
||||||
|
|
||||||
el = eqs(event, '.flagParent');
|
|
||||||
let currentMessage = el && ko.dataFor(el);
|
|
||||||
if (currentMessage) {
|
|
||||||
const checked = MessagelistUserStore.listCheckedOrSelected();
|
|
||||||
listAction(
|
|
||||||
currentMessage.folder,
|
|
||||||
currentMessage.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag,
|
|
||||||
checked.find(message => message.uid == currentMessage.uid) ? checked : [currentMessage]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
el = eqs(event, '.threads-len');
|
|
||||||
el && this.gotoThread(ko.dataFor(el));
|
|
||||||
},
|
},
|
||||||
dblclick: event => {
|
dblclick: event => {
|
||||||
let el = eqs(event, '.actionHandle');
|
let el = eqs(event, '.actionHandle');
|
||||||
|
|
@ -674,7 +678,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
MessagelistUserStore.mainSearch(sLastSearchValue);
|
MessagelistUserStore.mainSearch(sLastSearchValue);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (MessageUserStore.message() && MessagelistUserStore.canAutoSelect()) {
|
if (MessageUserStore.message() && MessagelistUserStore.canSelect()) {
|
||||||
isFullscreen() || toggleFullscreen();
|
isFullscreen() || toggleFullscreen();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -137,14 +137,14 @@
|
||||||
<div class="checkboxMessage fontastic" data-bind="text: checked() ? '☑' : '☐'"></div>
|
<div class="checkboxMessage fontastic" data-bind="text: checked() ? '☑' : '☐'"></div>
|
||||||
</div><div>
|
</div><div>
|
||||||
<div class="flagParent fontastic"></div>
|
<div class="flagParent fontastic"></div>
|
||||||
<div class="senderParent actionHandle" data-bind="attr: {'title': senderClearEmailsString}, text: senderEmailsString"></div>
|
<div class="senderParent" data-bind="attr: {'title': senderClearEmailsString}, text: senderEmailsString"></div>
|
||||||
<div class="subjectParent actionHandle" data-bind="text: subject"></div>
|
<div class="subjectParent" data-bind="text: subject"></div>
|
||||||
<div class="threads-len" data-bind="visible: 1 < threadsLen(), text: threadsLenText(), attr: {'data-unseen': threadUnseenLen() || null}"></div>
|
<div class="threads-len" data-bind="visible: 1 < threadsLen(), text: threadsLenText(), attr: {'data-unseen': threadUnseenLen() || null}"></div>
|
||||||
<div class="attachmentParent actionHandle">
|
<div class="attachmentParent">
|
||||||
<i data-bind="css: attachmentIconClass"></i>
|
<i data-bind="css: attachmentIconClass"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="sizeParent actionHandle" data-bind="text: friendlySize()"></div>
|
<div class="sizeParent" data-bind="text: friendlySize()"></div>
|
||||||
<time class="actionHandle" data-bind="attr:{'data-moment-format':$root.timeFormat()}, moment: dateTimestamp"></time>
|
<time data-bind="attr:{'data-moment-format':$root.timeFormat()}, moment: dateTimestamp"></time>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /ko -->
|
<!-- /ko -->
|
||||||
|
|
@ -157,14 +157,14 @@
|
||||||
<div class="checkboxMessage fontastic" data-bind="text: checked() ? '☑' : '☐'"></div>
|
<div class="checkboxMessage fontastic" data-bind="text: checked() ? '☑' : '☐'"></div>
|
||||||
</div><div data-bind="attr:{style:indent()}, css:{reply:indent()}">
|
</div><div data-bind="attr:{style:indent()}, css:{reply:indent()}">
|
||||||
<div class="flagParent fontastic"></div>
|
<div class="flagParent fontastic"></div>
|
||||||
<div class="senderParent actionHandle" data-bind="attr: {'title': senderClearEmailsString}, text: senderEmailsString"></div>
|
<div class="senderParent" data-bind="attr: {'title': senderClearEmailsString}, text: senderEmailsString"></div>
|
||||||
<div class="subjectParent actionHandle" data-bind="text: subject"></div>
|
<div class="subjectParent" data-bind="text: subject"></div>
|
||||||
<div class="threads-len" data-bind="visible: 1 < threadsLen(), text: threadsLenText(), attr: {'data-unseen': threadUnseenLen() || null}"></div>
|
<div class="threads-len" data-bind="visible: 1 < threadsLen(), text: threadsLenText(), attr: {'data-unseen': threadUnseenLen() || null}"></div>
|
||||||
<div class="attachmentParent actionHandle">
|
<div class="attachmentParent">
|
||||||
<i data-bind="css: attachmentIconClass"></i>
|
<i data-bind="css: attachmentIconClass"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="sizeParent actionHandle" data-bind="text: friendlySize()"></div>
|
<div class="sizeParent" data-bind="text: friendlySize()"></div>
|
||||||
<time class="actionHandle" data-moment-format="AUTO" data-bind="moment: dateTimestamp"></time>
|
<time data-moment-format="AUTO" data-bind="moment: dateTimestamp"></time>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue