From ffcc86805a9f62dee35e2a95c3c0a54a68acad5f Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Wed, 26 Oct 2022 16:38:39 +0200 Subject: [PATCH] Some array.slice to array.startsWith and cleanup some JavaScript code --- dev/Common/Html.js | 16 +-- dev/Common/Links.js | 2 +- dev/Model/Attachment.js | 2 +- dev/Stores/Theme.js | 14 +- dev/View/Popup/Compose.js | 2 +- dev/View/Popup/FolderCreate.js | 2 +- dev/View/User/MailBox/MessageList.js | 187 ++++++++++----------------- dev/View/User/MailBox/MessageView.js | 4 - 8 files changed, 83 insertions(+), 146 deletions(-) diff --git a/dev/Common/Html.js b/dev/Common/Html.js index a252a9b64..1d01a2759 100644 --- a/dev/Common/Html.js +++ b/dev/Common/Html.js @@ -291,7 +291,7 @@ export const if ('IMG' === name) { oElement.loading = 'lazy'; let attachment; - if ('cid:' === value.slice(0, 4)) + if (value.startsWith('cid:')) { value = value.slice(4); setAttribute('data-x-src-cid', value); @@ -331,7 +331,7 @@ export const result.hasExternals = true; oElement.alt || (oElement.alt = value.replace(/^.+\/([^/?]+).*$/, '$1').slice(-20)); } - else if ('data:image/' === value.slice(0, 11)) + else if (value.startsWith('data:image/')) { oElement.src = value; } @@ -382,7 +382,7 @@ export const oStyle[property] = null; found = found[1].replace(/^["'\s]+|["'\s]+$/g, ''); let lowerUrl = found.toLowerCase(); - if ('cid:' === lowerUrl.slice(0, 4)) { + if (lowerUrl.startsWith('cid:')) { const attachment = findAttachmentByCid(found); if (attachment?.linkPreview && name) { oStyle[property] = "url('" + attachment.linkPreview() + "')"; @@ -392,7 +392,7 @@ export const } else if (httpre.test(lowerUrl)) { result.hasExternals = true; urls_remote.push([property, found]); - } else if ('data:image/' === lowerUrl.slice(0, 11)) { + } else if (lowerUrl.startsWith('data:image/')) { oStyle[property] = value; } else { urls_broken.push([property, found]); @@ -717,11 +717,9 @@ export class HtmlEditor { } setHtmlOrPlain(text) { - if (':HTML:' === text.slice(0, 6)) { - this.setHtml(text.slice(6)); - } else { - this.setPlain(text); - } + text.startsWith(':HTML:') + ? this.setHtml(text.slice(6)) + : this.setPlain(text); } setData(mode, data) { diff --git a/dev/Common/Links.js b/dev/Common/Links.js index cb1da7acf..2b5417313 100644 --- a/dev/Common/Links.js +++ b/dev/Common/Links.js @@ -76,7 +76,7 @@ export const */ themePreviewLink = theme => { let prefix = VERSION_PREFIX; - if ('@custom' === theme.slice(-7)) { + if (theme.endsWith('@custom')) { theme = theme.slice(0, theme.length - 7).trim(); prefix = ''; } diff --git a/dev/Model/Attachment.js b/dev/Model/Attachment.js index 2b0d73b86..9974ba6d7 100644 --- a/dev/Model/Attachment.js +++ b/dev/Model/Attachment.js @@ -177,7 +177,7 @@ export class AttachmentModel extends AbstractModel { const localEvent = event.originalEvent || event; if (attachment && localEvent && localEvent.dataTransfer && localEvent.dataTransfer.setData) { let link = this.linkDownload(); - if ('http' !== link.slice(0, 4)) { + if (!link.startsWith('http')) { link = location.protocol + '//' + location.host + location.pathname + link; } localEvent.dataTransfer.setData('DownloadURL', this.mimeType + ':' + this.fileName + ':' + link); diff --git a/dev/Stores/Theme.js b/dev/Stores/Theme.js index 2ff7e2839..82a151c5d 100644 --- a/dev/Stores/Theme.js +++ b/dev/Stores/Theme.js @@ -36,7 +36,7 @@ ThemeStore.fontSansSerif.subscribe(value => { if (null != value) { let cl = elementById('rl-app').classList; cl.forEach(name => { - if ('font' === name.slice(0,4) && !/font(Serif|Mono)/.test(name)) { + if (name.startsWith('font') && !/font(Serif|Mono)/.test(name)) { cl.remove(name); } }); @@ -46,22 +46,14 @@ ThemeStore.fontSansSerif.subscribe(value => { ThemeStore.fontSerif.subscribe(value => { if (null != value) { let cl = elementById('rl-app').classList; - cl.forEach(name => { - if ('fontSerif' === name.slice(0,9)) { - cl.remove(name); - } - }); + cl.forEach(name => name.startsWith('fontSerif') && cl.remove(name)); value && cl.add('fontSerif'+value); } }); ThemeStore.fontMono.subscribe(value => { if (null != value) { let cl = elementById('rl-app').classList; - cl.forEach(name => { - if ('fontMono' === name.slice(0,9)) { - cl.remove(name); - } - }); + cl.forEach(name => name.startsWith('fontMono') && cl.remove(name)); value && cl.add('fontMono'+value); } }); diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index 927b5ada8..788f60b10 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -686,7 +686,7 @@ export class ComposePopupView extends AbstractViewPopup { if (identity && ComposeType.Draft !== msgComposeType && ComposeType.EditAsNew !== msgComposeType) { this.editor(editor => { let signature = identity.signature() || '', - isHtml = ':HTML:' === signature.slice(0, 6), + isHtml = signature.startsWith(':HTML:'), fromLine = oLastMessage ? emailArrayToStringLineHelper(oLastMessage.from, true) : ''; if (fromLine) { signature = signature.replace(/{{FROM-FULL}}/g, fromLine); diff --git a/dev/View/Popup/FolderCreate.js b/dev/View/Popup/FolderCreate.js index 8b80c1e54..cc8d07df5 100644 --- a/dev/View/Popup/FolderCreate.js +++ b/dev/View/Popup/FolderCreate.js @@ -34,7 +34,7 @@ export class FolderCreatePopupView extends AbstractViewPopup { oItem => oItem ? (oItem.isSystemFolder() ? oItem.name() + ' ' + oItem.manageFolderSystemName() : oItem.name()) : '', FolderUserStore.namespace - ? item => FolderUserStore.namespace !== item.fullName.slice(0, FolderUserStore.namespace.length) + ? item => !item.fullName.startsWith(FolderUserStore.namespace) : null, true ) diff --git a/dev/View/User/MailBox/MessageList.js b/dev/View/User/MailBox/MessageList.js index a53e86d0f..cb34311c1 100644 --- a/dev/View/User/MailBox/MessageList.js +++ b/dev/View/User/MailBox/MessageList.js @@ -12,7 +12,6 @@ import { leftPanelDisabled, moveAction, import { computedPaginatorHelper, showMessageComposer, populateMessageBody } from 'Common/UtilsUser'; import { FileInfo } from 'Common/File'; -import { moveMessagesToFolder } from 'Common/Folders'; import { isFullscreen, toggleFullscreen } from 'Common/Fullscreen'; import { mailBox, serverRequest } from 'Common/Links'; @@ -172,7 +171,49 @@ export class MailMessageList extends AbstractViewRight { this.selector.on('AutoSelect', () => MessagelistUserStore.canAutoSelect()); - this.selector.on('UpOrDown', v => this.goToUpOrDown(v)); + this.selector.on('UpOrDown', up => { + if (MessagelistUserStore.hasChecked()) { + return false; + } + + clearTimeout(iGoToUpOrDownTimeout); + iGoToUpOrDownTimeout = setTimeout(() => { + let prev, next, temp, current; + + this.messageListPaginator().find(item => { + if (item) { + if (current) { + next = item; + } + + if (item.current) { + current = item; + prev = temp; + } + + if (next) { + return true; + } + + temp = item; + } + + return false; + }); + + if (up ? prev : next) { + if (SettingsUserStore.usePreviewPane() || MessageUserStore.message()) { + this.selector.iSelectNextHelper = up ? -1 : 1; + } else { + this.selector.iFocusedNextHelper = up ? -1 : 1; + } + this.selector.unselect(); + this.gotoPage(up ? prev : next); + } + }, 350); + + return true; + }); addEventListener('mailbox.message-list.selector.go-down', e => this.selector.newSelectPosition('ArrowDown', false, e.detail) @@ -232,15 +273,13 @@ export class MailMessageList extends AbstractViewRight { } clear() { - if (SettingsCapa('DangerousActions')) { - showScreenPopup(FolderClearPopupView, [FolderUserStore.currentFolder()]); - } + SettingsCapa('DangerousActions') + && showScreenPopup(FolderClearPopupView, [FolderUserStore.currentFolder()]); } reload() { - if (!MessagelistUserStore.isLoading()) { - MessagelistUserStore.reload(false, true); - } + MessagelistUserStore.isLoading() + || MessagelistUserStore.reload(false, true); } forwardCommand() { @@ -251,9 +290,8 @@ export class MailMessageList extends AbstractViewRight { } deleteWithoutMoveCommand() { - if (SettingsCapa('DangerousActions')) { - moveMessagesToFolderType(FolderType.Trash, true); - } + SettingsCapa('DangerousActions') + && moveMessagesToFolderType(FolderType.Trash, true); } deleteCommand() { @@ -289,50 +327,6 @@ export class MailMessageList extends AbstractViewRight { showMessageComposer(); } - goToUpOrDown(up) { - if (MessagelistUserStore.hasChecked()) { - return false; - } - - clearTimeout(iGoToUpOrDownTimeout); - iGoToUpOrDownTimeout = setTimeout(() => { - let prev, next, temp, current; - - this.messageListPaginator().find(item => { - if (item) { - if (current) { - next = item; - } - - if (item.current) { - current = item; - prev = temp; - } - - if (next) { - return true; - } - - temp = item; - } - - return false; - }); - - if (up ? prev : next) { - if (SettingsUserStore.usePreviewPane() || MessageUserStore.message()) { - this.selector.iSelectNextHelper = up ? -1 : 1; - } else { - this.selector.iFocusedNextHelper = up ? -1 : 1; - } - this.selector.unselect(); - this.gotoPage(up ? prev : next); - } - }, 350); - - return true; - } - cancelSearch() { MessagelistUserStore.mainSearch(''); this.focusSearch(false); @@ -349,24 +343,6 @@ export class MailMessageList extends AbstractViewRight { ); } - /** - * @param {string} sToFolderFullName - * @param {boolean} bCopy - * @returns {boolean} - */ - moveSelectedMessagesToFolder(sToFolderFullName, bCopy) { - if (MessagelistUserStore.hasCheckedOrSelected()) { - moveMessagesToFolder( - FolderUserStore.currentFolderFullName(), - MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails(), - sToFolderFullName, - bCopy - ); - } - - return false; - } - listSetSeen() { listAction( FolderUserStore.currentFolderFullName(), @@ -437,49 +413,9 @@ export class MailMessageList extends AbstractViewRight { ); } - flagMessages(currentMessage) { - const checked = MessagelistUserStore.listCheckedOrSelected(); - if (currentMessage) { - const checkedUids = checked.map(message => message.uid); - if (checkedUids.includes(currentMessage.uid)) { - listAction( - currentMessage.folder, - currentMessage.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, - checked - ); - } else { - listAction( - currentMessage.folder, - currentMessage.isFlagged() ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, - [currentMessage] - ); - } - } - } - - flagMessagesFast(bFlag) { - const checked = MessagelistUserStore.listCheckedOrSelected(); - if (checked.length) { - if (undefined === bFlag) { - const flagged = checked.filter(message => message.isFlagged()); - listAction( - checked[0].folder, - checked.length === flagged.length ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, - checked - ); - } else { - listAction( - checked[0].folder, - !bFlag ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, - checked - ); - } - } - } - seenMessagesFast(seen) { const checked = MessagelistUserStore.listCheckedOrSelected(); - if (checked.length && null != seen) { + if (checked.length) { listAction( checked[0].folder, seen ? MessageSetAction.SetSeen : MessageSetAction.UnsetSeen, @@ -500,7 +436,7 @@ export class MailMessageList extends AbstractViewRight { } gotoThread(message) { - if (0 < message?.threadsLen()) { + if (message?.threadsLen()) { MessagelistUserStore.pageBeforeThread(MessagelistUserStore.page()); hasher.setHash( @@ -549,7 +485,15 @@ export class MailMessageList extends AbstractViewRight { eqs(event, '.checkboxCheckAll') && this.checkAll(!this.checkAll()); el = eqs(event, '.flagParent'); - el && this.flagMessages(ko.dataFor(el)); + 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)); @@ -642,7 +586,14 @@ export class MailMessageList extends AbstractViewRight { // important - star/flag messages registerShortcut('i', '', [Scope.MessageList, Scope.MessageView], () => { - this.flagMessagesFast(); + const checked = MessagelistUserStore.listCheckedOrSelected(); + if (checked.length) { + listAction( + checked[0].folder, + checked.every(message => message.isFlagged()) ? MessageSetAction.UnsetFlag : MessageSetAction.SetFlag, + checked + ); + } return false; }); @@ -715,7 +666,7 @@ export class MailMessageList extends AbstractViewRight { addShortcut('arrowleft', 'meta', Scope.MessageView, ()=>false); addShortcut('arrowright', 'meta', Scope.MessageView, ()=>false); - addShortcut('f', 'meta', Scope.MessageList, ()=>this.advancedSearchClick()); + addShortcut('f', 'meta', Scope.MessageList, this.advancedSearchClick); } advancedSearchClick() { diff --git a/dev/View/User/MailBox/MessageView.js b/dev/View/User/MailBox/MessageView.js index 84ec31530..6b7d4fa8a 100644 --- a/dev/View/User/MailBox/MessageView.js +++ b/dev/View/User/MailBox/MessageView.js @@ -441,10 +441,6 @@ export class MailMessageView extends AbstractViewRight { return MessagelistUserStore.isDraftFolder() || MessagelistUserStore.isSentFolder(); } - composeClick() { - showMessageComposer(); - } - scrollMessageToTop() { oMessageScrollerDom().scrollTop = (50 < oMessageScrollerDom().scrollTop) ? 50 : 0; }