From 1996c792401d15616a47f72bd2e5a6dd4eb9577a Mon Sep 17 00:00:00 2001 From: djmaze Date: Fri, 16 Jul 2021 16:49:48 +0200 Subject: [PATCH 1/9] Fix fork url --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c2cda24724..b712239f10 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ 1. Install node.js - `https://nodejs.org/download/` 2. Install yarn - `https://yarnpkg.com/en/docs/install` 3. Install gulp - `npm install gulp -g` -4. Fork snappymail - `https://github.com/the-djmaze/snappymail/issues/new#fork-destination-box` +4. Fork snappymail from https://github.com/the-djmaze/snappymail 5. Clone snappymail - `git clone git@github.com:USERNAME/snappymail.git snappymail` 6. `cd snappymail` 7. Install install all dependencies - `yarn install` From bb15cd1ec3ba1a2adfa1044398779f726b5a93c8 Mon Sep 17 00:00:00 2001 From: djmaze Date: Mon, 19 Jul 2021 11:57:47 +0200 Subject: [PATCH 2/9] Resolve Issue #100 --- dev/Common/Selector.js | 51 ++++++++++++++------- dev/Model/Message.js | 7 --- dev/Stores/User/Message.js | 67 ++++++++++++++-------------- dev/View/Popup/Contacts.js | 6 +-- dev/View/User/MailBox/MessageList.js | 18 ++++---- 5 files changed, 81 insertions(+), 68 deletions(-) diff --git a/dev/Common/Selector.js b/dev/Common/Selector.js index 109b301359..bd01d203ad 100644 --- a/dev/Common/Selector.js +++ b/dev/Common/Selector.js @@ -1,6 +1,15 @@ import ko from 'ko'; import { isArray } from 'Common/Utils'; +/* + oCallbacks: + ItemSelect + MiddleClick + AutoSelect + ItemGetUid + UpOrDown +*/ + export class Selector { /** * @param {koProperty} koList @@ -209,11 +218,9 @@ export class Selector { itemSelected(item) { if (this.isListChecked()) { - if (!item) { - (this.oCallbacks.onItemSelect || (()=>{}))(item || null); - } + item || (this.oCallbacks.ItemSelect || (()=>{}))(null); } else if (item) { - (this.oCallbacks.onItemSelect || (()=>{}))(item); + (this.oCallbacks.ItemSelect || (()=>{}))(item); } } @@ -226,20 +233,32 @@ export class Selector { this.oContentScrollable = contentScrollable; if (contentScrollable) { + let getItem = selector => { + let el = event.target.closestWithin(selector, contentScrollable); + return el ? ko.dataFor(el) : null; + }; + contentScrollable.addEventListener('click', event => { let el = event.target.closestWithin(this.sItemSelector, contentScrollable); el && this.actionClick(ko.dataFor(el), event); - el = event.target.closestWithin(this.sItemCheckedSelector, contentScrollable); - if (el) { - const item = ko.dataFor(el); + const item = getItem(this.sItemCheckedSelector); + if (item) { + if (event.shiftKey) { + this.actionClick(item, event); + } else { + this.focusedItem(item); + item.checked(!item.checked()); + } + } + }); + + contentScrollable.addEventListener('auxclick', event => { + if (1 == event.button) { + const item = getItem(this.sItemSelector); if (item) { - if (event.shiftKey) { - this.actionClick(item, event); - } else { - this.focusedItem(item); - item.checked(!item.checked()); - } + this.focusedItem(item); + (this.oCallbacks.MiddleClick || (()=>{}))(item); } } }); @@ -271,7 +290,7 @@ export class Selector { * @returns {boolean} */ autoSelect() { - return !!(this.oCallbacks.onAutoSelect || (()=>true))(); + return !!(this.oCallbacks.AutoSelect || (()=>true))(); } /** @@ -281,7 +300,7 @@ export class Selector { getItemUid(item) { let uid = ''; - const getItemUidCallback = this.oCallbacks.onItemGetUid || null; + const getItemUidCallback = this.oCallbacks.ItemGetUid || null; if (getItemUidCallback && item) { uid = getItemUidCallback(item); } @@ -312,7 +331,7 @@ export class Selector { } else if (++i < listLen) { result = list[i]; } - result || (this.oCallbacks.onUpUpOrDownDown || (()=>true))('ArrowUp' === sEventKey); + result || (this.oCallbacks.UpOrDown || (()=>true))('ArrowUp' === sEventKey); } else if ('Home' === sEventKey) { result = list[0]; } else if ('End' === sEventKey) { diff --git a/dev/Model/Message.js b/dev/Model/Message.js index a5b4b0dd13..9e31a25157 100644 --- a/dev/Model/Message.js +++ b/dev/Model/Message.js @@ -524,13 +524,6 @@ export class MessageModel extends AbstractModel { } } - storeDataInDom() { - if (this.body) { - this.body.rlIsHtml = !!this.isHtml(); - this.body.rlHasImages = !!this.hasImages(); - } - } - fetchDataFromDom() { if (this.body) { this.isHtml(!!this.body.rlIsHtml); diff --git a/dev/Stores/User/Message.js b/dev/Stores/User/Message.js index 1a570831e7..4ce1bf0ebc 100644 --- a/dev/Stores/User/Message.js +++ b/dev/Stores/User/Message.js @@ -220,7 +220,7 @@ export const MessageUserStore = new class { } }); - this.purgeMessageBodyCacheThrottle = this.purgeMessageBodyCache.throttle(30000); + this.purgeMessageBodyCache = this.purgeMessageBodyCache.throttle(30000); } purgeMessageBodyCache() { @@ -428,16 +428,12 @@ export const MessageUserStore = new class { ); } - setMessage(data, cached) { + setMessage(data, cached, oMessage) { let isNew = false, - body = null, json = data && data.Result, - id = '', - plain = '', - resultHtml = '', messagesDom = this.messagesBodiesDom(), selectedMessage = this.selectorMessageSelected(), - message = this.message(); + message = oMessage || this.message(); if ( json && @@ -447,7 +443,7 @@ export const MessageUserStore = new class { ) { const threads = message.threads(); if (message.uid !== json.Uid && 1 < threads.length && threads.includes(json.Uid)) { - message = MessageModel.reviveFromJson(json); + message = oMessage ? null : MessageModel.reviveFromJson(json); if (message) { message.threads(threads); MessageFlagsCache.initMessage(message); @@ -460,7 +456,7 @@ export const MessageUserStore = new class { } if (message && message.uid === json.Uid) { - this.messageError(''); + oMessage || this.messageError(''); if (cached) { delete json.IsSeen; @@ -475,7 +471,8 @@ export const MessageUserStore = new class { addRequestedMessage(message.folder, message.uid); if (messagesDom) { - id = 'rl-mgs-' + message.hash.replace(/[^a-zA-Z0-9]/g, ''); + let body = null, + id = 'rl-mgs-' + message.hash.replace(/[^a-zA-Z0-9]/g, ''); const textBody = elementById(id); if (textBody) { @@ -483,7 +480,9 @@ export const MessageUserStore = new class { message.fetchDataFromDom(); messagesDom.append(textBody); } else { - let isHtml = !!json.Html; + let isHtml = !!json.Html, + plain = '', + resultHtml = '
';
 						if (isHtml) {
 							resultHtml = json.Html.toString();
 							if (SettingsUserStore.removeColors()) {
@@ -508,8 +507,6 @@ export const MessageUserStore = new class {
 							} else {
 								resultHtml = '
' + resultHtml + '
'; } - } else { - resultHtml = '
' + resultHtml + '
'; } body = Element.fromHTML('