diff --git a/dev/App/Abstract.js b/dev/App/Abstract.js index 39153d7f4..d7d6f6c5b 100644 --- a/dev/App/Abstract.js +++ b/dev/App/Abstract.js @@ -28,8 +28,8 @@ export class AbstractApp { } bootstart() { - const register = (key, ClassObject) => ko.components.register(key, { - template: { element: key + 'Component' }, + const register = (name, ClassObject) => ko.components.register(name, { + template: { element: ClassObject.name }, viewModel: { createViewModel: (params, componentInfo) => { params = params || {}; diff --git a/dev/App/Admin.js b/dev/App/Admin.js index a36225c5a..47fdeed40 100644 --- a/dev/App/Admin.js +++ b/dev/App/Admin.js @@ -27,7 +27,7 @@ export class AdminApp extends AbstractApp { rl.route.root(); setTimeout(() => location.href = '/', 1); } else if (SettingsGet('Auth')) { - this.weakPassword(!!SettingsGet('WeakPassword')); + this.weakPassword(SettingsGet('WeakPassword')); startScreens([SettingsAdminScreen]); } else { startScreens([LoginAdminScreen]); diff --git a/dev/App/User.js b/dev/App/User.js index bad08d820..2049576bf 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -77,12 +77,11 @@ export class AppUser extends AbstractApp { let lastTime = Date.now(); setInterval(() => { const currentTime = Date.now(); - if (currentTime > (lastTime + interval + 1000)) { - Remote.request('Version', + (currentTime > (lastTime + interval + 1000)) + && Remote.request('Version', iError => (100 < iError) && location.reload(), { Version: Settings.app('version') } ); - } lastTime = currentTime; }, interval); @@ -254,9 +253,7 @@ export class AppUser extends AbstractApp { const cF = FolderUserStore.currentFolderFullName(), iF = getFolderInboxName(); folderInformation(iF); - if (iF !== cF) { - folderInformation(cF); - } + iF === cF || folderInformation(cF); folderInformationMultiply(); }, refreshFoldersInterval); @@ -266,9 +263,7 @@ export class AppUser extends AbstractApp { setTimeout(() => { const cF = FolderUserStore.currentFolderFullName(); - if (getFolderInboxName() !== cF) { - folderInformation(cF); - } + getFolderInboxName() === cF || folderInformation(cF); FolderUserStore.hasCapability('LIST-STATUS') || folderInformationMultiply(true); }, 1000); @@ -296,15 +291,14 @@ export class AppUser extends AbstractApp { PgpUserStore.init(); // When auto-login is active - if (navigator.registerProtocolHandler) { - try { - navigator.registerProtocolHandler( - 'mailto', - location.protocol + '//' + location.host + location.pathname + '?mailto&to=%s', - (SettingsGet('Title') || 'SnappyMail') - ); - } catch (e) {} // eslint-disable-line no-empty - } + try { + navigator.registerProtocolHandler?.( + 'mailto', + location.protocol + '//' + location.host + location.pathname + '?mailto&to=%s', + (SettingsGet('Title') || 'SnappyMail') + ); + } catch (e) {} // eslint-disable-line no-empty + setTimeout(() => mailToHelper(SettingsGet('MailToEmail')), 500); } else { this.logout(); diff --git a/dev/Common/Cache.js b/dev/Common/Cache.js index c0d9cc9c8..5d69af953 100644 --- a/dev/Common/Cache.js +++ b/dev/Common/Cache.js @@ -120,9 +120,7 @@ export class MessageFlagsCache flags = this.getFor(message.folder, uid), thread = message.threads(); - if (isArray(flags)) { - message.flags(flags); - } + isArray(flags) && message.flags(flags); if (thread.length) { message.hasUnseenSubMessage(!!thread.find(iSubUid => diff --git a/dev/Common/Folders.js b/dev/Common/Folders.js index 075b41324..f9633efe8 100644 --- a/dev/Common/Folders.js +++ b/dev/Common/Folders.js @@ -37,17 +37,10 @@ fetchFolderInformation = (fCallback, folder, list = []) => { if (!fetch) { list.forEach(messageListItem => { - if (!MessageFlagsCache.getFor(folder, messageListItem.uid)) { - uids.push(messageListItem.uid); - } - - if (messageListItem.threads.length) { - messageListItem.threads.forEach(uid => { - if (!MessageFlagsCache.getFor(folder, uid)) { - uids.push(uid); - } - }); - } + MessageFlagsCache.getFor(folder, messageListItem.uid) || uids.push(messageListItem.uid); + messageListItem.threads.forEach(uid => { + MessageFlagsCache.getFor(folder, uid) || uids.push(uid); + }); }); fetch = uids.length; } @@ -100,10 +93,7 @@ folderListOptionsBuilder = ( fDisableCallback(oItem)) }); } - - if (oItem.subFolders.length) { - foldersWalk(oItem.subFolders()); - } + foldersWalk(oItem.subFolders()); }); }; @@ -151,9 +141,7 @@ folderInformation = (folder, list) => { folderFromCache.totalEmails(result.totalEmails); folderFromCache.unreadEmails(result.unreadEmails); - if (unreadCountChange) { - MessageFlagsCache.clearFolder(folderFromCache.fullName); - } + unreadCountChange && MessageFlagsCache.clearFolder(folderFromCache.fullName); if (result.MessagesFlags.length) { result.MessagesFlags.forEach(message => @@ -203,9 +191,7 @@ folderInformationMultiply = (boot = false) => { folder.totalEmails(item.totalEmails); folder.unreadEmails(item.unreadEmails); - if (unreadCountChange) { - MessageFlagsCache.clearFolder(folder.fullName); - } + unreadCountChange && MessageFlagsCache.clearFolder(folder.fullName); if (!oldHash || item.Hash !== oldHash) { if (folder.fullName === FolderUserStore.currentFolderFullName()) { @@ -219,9 +205,7 @@ folderInformationMultiply = (boot = false) => { } }); - if (boot) { - setTimeout(() => folderInformationMultiply(true), 2000); - } + boot && setTimeout(() => folderInformationMultiply(true), 2000); } }, { Folders: folders @@ -283,15 +267,13 @@ moveMessagesToFolder = (sFromFolderFullName, oUids, sToFolderFullName, bCopy) => oToFolder = getFolderFromCacheList(sToFolderFullName); if (oFromFolder && oToFolder) { - if (bCopy) { - Remote.request('MessageCopy', null, { - FromFolder: oFromFolder.fullName, - ToFolder: oToFolder.fullName, - Uids: [...oUids].join(',') - }); - } else { - messagesMoveHelper(oFromFolder.fullName, oToFolder.fullName, oUids); - } + bCopy + ? Remote.request('MessageCopy', null, { + FromFolder: oFromFolder.fullName, + ToFolder: oToFolder.fullName, + Uids: [...oUids].join(',') + }) + : messagesMoveHelper(oFromFolder.fullName, oToFolder.fullName, oUids); MessagelistUserStore.removeMessagesFromList(oFromFolder.fullName, oUids, oToFolder.fullName, bCopy); return true; diff --git a/dev/Common/Links.js b/dev/Common/Links.js index 8feaffa71..99f9dee1e 100644 --- a/dev/Common/Links.js +++ b/dev/Common/Links.js @@ -1,4 +1,4 @@ -import { pString, pInt } from 'Common/Utils'; +import { pInt } from 'Common/Utils'; import { Settings } from 'Common/Globals'; const @@ -125,10 +125,7 @@ export const result.push('p' + page); } - search = pString(search); - if (search) { - result.push(encodeURI(search)); - } + search && result.push(encodeURI(search)); return result.join('/'); }; diff --git a/dev/Common/Plugins.js b/dev/Common/Plugins.js index ed0469ba8..47c658d2c 100644 --- a/dev/Common/Plugins.js +++ b/dev/Common/Plugins.js @@ -39,9 +39,9 @@ rl.addSettingsViewModelForAdmin = (SettingsViewModelClass, template, labelName, * @param {boolean} admin */ export function runSettingsViewModelHooks(admin) { - (admin ? ADMIN_VIEW_MODELS_HOOKS : USER_VIEW_MODELS_HOOKS).forEach(view => { - settingsAddViewModel(view[0], view[1], view[2], view[3]); - }); + (admin ? ADMIN_VIEW_MODELS_HOOKS : USER_VIEW_MODELS_HOOKS).forEach(view => + settingsAddViewModel(...view) + ); } /** diff --git a/dev/Common/Selector.js b/dev/Common/Selector.js index a6fd1b09d..87d6d9548 100644 --- a/dev/Common/Selector.js +++ b/dev/Common/Selector.js @@ -51,15 +51,20 @@ export class Selector { this.sLastUid = ''; this.oCallbacks = {}; - const itemSelectedThrottle = (item => this.itemSelected(item)).debounce(300); + const + itemSelected = item => { + if (koList.hasChecked()) { + item || this.oCallbacks.ItemSelect?.(null); + } else if (item) { + this.oCallbacks.ItemSelect?.(item); + } + }, + + itemSelectedThrottle = (item => itemSelected(item)).debounce(300); this.listChecked.subscribe(items => { if (items.length) { - if (koSelectedItem()) { - koSelectedItem(null); - } else { - koSelectedItem.valueHasMutated?.(); - } + koSelectedItem() ? koSelectedItem(null) : koSelectedItem.valueHasMutated?.(); } else if (this.autoSelect()) { koSelectedItem(koFocusedItem()); } @@ -70,11 +75,9 @@ export class Selector { koSelectedItem.subscribe(item => { if (item) { koList.forEach(subItem => subItem.checked(false)); - if (selectedItemUseCallback) { - itemSelectedThrottle(item); - } - } else if (selectedItemUseCallback) { - this.itemSelected(); + selectedItemUseCallback && itemSelectedThrottle(item); + } else { + selectedItemUseCallback && itemSelected(); } }); @@ -187,14 +190,6 @@ export class Selector { }); } - itemSelected(item) { - if (this.list.hasChecked()) { - item || this.oCallbacks.ItemSelect?.(null); - } else if (item) { - this.oCallbacks.ItemSelect?.(item); - } - } - unselect() { this.selectedItem(null); this.focusedItem(null); @@ -376,21 +371,17 @@ export class Selector { * @param {Object} item * @param {Object=} event */ - actionClick(item, event = null) { + actionClick(item, event) { if (item) { - let click = true; - if (event) { - if (event.shiftKey && !event.ctrlKey && !event.metaKey && !event.altKey) { - click = false; - this.sLastUid || (this.sLastUid = this.getItemUid(item)); - - item.checked(!item.checked()); - + let select = true; + if (event && !event.altKey) { + if (event.shiftKey && !event.ctrlKey && !event.metaKey) { + select = false; const uid = this.getItemUid(item); if (uid && this.sLastUid && uid !== this.sLastUid) { let changeRange = false, isInRange = false, - checked = item.checked(), + checked = !item.checked(), lineUid = ''; this.list().forEach(listItem => { lineUid = this.getItemUid(listItem); @@ -406,19 +397,17 @@ export class Selector { this.sLastUid = uid; this.focusedItem(item); - } else if (!event.shiftKey && (event.ctrlKey || event.metaKey) && !event.altKey) { - click = false; + } else if (!event.shiftKey && (event.ctrlKey || event.metaKey)) { + select = false; this.focusedItem(item); - - if (this.selectedItem() && item !== this.selectedItem()) { - this.selectedItem().checked(true); + const selected = this.selectedItem(); + if (selected && item !== selected) { + selected.checked(true); } - - item.checked(!item.checked()); } } - click && this.selectMessageItem(item); + select ? this.selectMessageItem(item) : item.checked(!item.checked()); } } diff --git a/dev/Common/Translator.js b/dev/Common/Translator.js index 933f22302..6a48c6c7d 100644 --- a/dev/Common/Translator.js +++ b/dev/Common/Translator.js @@ -3,32 +3,11 @@ import { Notification, UploadErrorCode } from 'Common/Enums'; import { langLink } from 'Common/Links'; import { doc, createElement } from 'Common/Globals'; import { getKeyByValue, forEachObjectEntry } from 'Common/Utils'; +import { pInt } from 'Common/Utils'; let I18N_DATA = {}; const - i18nToNode = element => { - const key = element.dataset.i18n; - if (key) { - if ('[' === key.slice(0, 1)) { - switch (key.slice(0, 6)) { - case '[html]': - element.innerHTML = i18n(key.slice(6)); - break; - case '[place': - element.placeholder = i18n(key.slice(13)); - break; - case '[title': - element.title = i18n(key.slice(7)); - break; - // no default - } - } else { - element.textContent = i18n(key); - } - } - }, - init = () => { if (rl.I18N) { I18N_DATA = rl.I18N; @@ -46,7 +25,7 @@ const }; export const - trigger = ko.observable(false), + translateTrigger = ko.observable(false), /** * @param {string} key @@ -56,17 +35,13 @@ export const */ i18n = (key, valueList, defaulValue) => { let result = defaulValue || key; - if (key) { - let path = key.split('/'); - if (I18N_DATA[path[0]] && path[1]) { - result = I18N_DATA[path[0]][path[1]] || result; - } - } - if (valueList) { - forEachObjectEntry(valueList, (key, value) => { - result = result.replace('%' + key + '%', value); - }); + let path = key.split('/'); + if (I18N_DATA[path[0]] && path[1]) { + result = I18N_DATA[path[0]][path[1]] || result; } + valueList && forEachObjectEntry(valueList, (key, value) => { + result = result.replace('%' + key + '%', value); + }); return result; }, @@ -76,7 +51,25 @@ export const */ i18nToNodes = element => setTimeout(() => - element.querySelectorAll('[data-i18n]').forEach(item => i18nToNode(item)) + element.querySelectorAll('[data-i18n]').forEach(element => { + const key = element.dataset.i18n; + if ('[' === key[0]) { + switch (key.slice(1, 6)) { + case 'html]': + element.innerHTML = i18n(key.slice(6)); + break; + case 'place': + element.placeholder = i18n(key.slice(13)); + break; + case 'title': + element.title = i18n(key.slice(7)); + break; + // no default + } + } else { + element.textContent = i18n(key); + } + }) , 1), timestampToString = (timeStampInUTC, formatStr) => { @@ -141,10 +134,10 @@ export const * @param {Function} startCallback * @param {Function=} langCallback = null */ - initOnStartOrLangChange = (startCallback, langCallback = null) => { + initOnStartOrLangChange = (startCallback, langCallback) => { startCallback?.(); - startCallback && trigger.subscribe(startCallback); - langCallback && trigger.subscribe(langCallback); + startCallback && translateTrigger.subscribe(startCallback); + langCallback && translateTrigger.subscribe(langCallback); }, /** @@ -154,13 +147,13 @@ export const * @returns {string} */ getNotification = (code, message = '', defCode = 0) => { - code = parseInt(code, 10) || 0; + code = pInt(code); if (Notification.ClientViewError === code && message) { return message; } return getNotificationMessage(code) - || getNotificationMessage(parseInt(defCode, 10)) + || getNotificationMessage(pInt(defCode)) || ''; }, @@ -185,7 +178,7 @@ export const if (init()) { i18nToNodes(doc); admin || reloadTime(); - trigger(!trigger()); + translateTrigger(!translateTrigger()); } script.remove(); resolve(); diff --git a/dev/Common/UtilsUser.js b/dev/Common/UtilsUser.js index d792130d6..14e8ce396 100644 --- a/dev/Common/UtilsUser.js +++ b/dev/Common/UtilsUser.js @@ -57,11 +57,7 @@ computedPaginatorHelper = (koCurrentPage, koPageCount) => { value: index.toString() }; - if (push) { - result.push(data); - } else { - result.unshift(data); - } + push ? result.push(data) : result.unshift(data); }; let prev = 0, diff --git a/dev/Component/Checkbox.js b/dev/Component/Checkbox.js index b069559dc..68825468f 100644 --- a/dev/Component/Checkbox.js +++ b/dev/Component/Checkbox.js @@ -8,8 +8,6 @@ export class CheckboxComponent { this.label = params.label; this.inline = params.inline; - - this.labeled = null != params.label; } click() { diff --git a/dev/Component/EmailAddresses.js b/dev/Component/EmailAddresses.js index e6257261f..20b4fe862 100644 --- a/dev/Component/EmailAddresses.js +++ b/dev/Component/EmailAddresses.js @@ -144,8 +144,8 @@ export class EmailAddressesComponent { _parseInput(force) { let val = this.input.value; - if (force || val.includes(',') || val.includes(';')) { - this._parseValue(val) && (this.input.value = ''); + if ((force || val.includes(',') || val.includes(';')) && this._parseValue(val)) { + this.input.value = ''; } this._resizeInput(); } @@ -175,7 +175,7 @@ export class EmailAddressesComponent { lastIndex = kk; } - vv.value === v && (exists = true); + exists |= vv.value === v; }); if (v !== '' && a[1] && !exists) { @@ -195,7 +195,7 @@ export class EmailAddressesComponent { } }); - if (values.length === 1 && values[0] === '' && self._lastEdit !== '') { + if (1 === values.length && '' === values[0] && '' !== self._lastEdit) { self._lastEdit = ''; self._renderTags(); } diff --git a/dev/Component/Select.js b/dev/Component/Select.js index f2661cdec..07db31408 100644 --- a/dev/Component/Select.js +++ b/dev/Component/Select.js @@ -1,5 +1,3 @@ -import { i18n } from 'Common/Translator'; -import { pInt } from 'Common/Utils'; import { SaveSettingStatus } from 'Common/Enums'; import { koComputable } from 'External/ko'; import { dispose } from 'External/ko'; @@ -10,20 +8,20 @@ export class SelectComponent { * @param {Object} params */ constructor(params) { - this.value = params.value || ''; - this.label = params.label || ''; - this.enable = null == params.enable ? true : params.enable; + this.value = params.value; + this.label = params.label; this.trigger = params.trigger?.subscribe ? params.trigger : null; - this.placeholder = params.placeholder || ''; - - this.labeled = null != params.label; + this.placeholder = params.placeholder; + this.options = params.options; + this.optionsText = params.optionsText; + this.optionsValue = params.optionsValue; let size = 0 < params.size ? 'span' + params.size : ''; if (this.trigger) { const classForTrigger = ko.observable(''), setTriggerState = value => { - switch (pInt(value)) { + switch (value) { case SaveSettingStatus.Success: classForTrigger('success'); break; @@ -48,19 +46,12 @@ export class SelectComponent { ]; } else { this.className = size; - this.disposables = []; } - this.options = params.options || ''; - - this.optionsText = params.optionsText || null; - this.optionsValue = params.optionsValue || null; - this.optionsCaption = i18n(params.optionsCaption || null); - this.defaultOptionsAfterRender = defaultOptionsAfterRender; } dispose() { - this.disposables.forEach(dispose); + this.disposables?.forEach(dispose); } } diff --git a/dev/External/ko.js b/dev/External/ko.js index 4d4dad0b1..9bd5ee698 100644 --- a/dev/External/ko.js +++ b/dev/External/ko.js @@ -121,10 +121,9 @@ Object.assign(ko.bindingHandlers, { ); }, update: (element, fValueAccessor) => { - const cl = element.classList, - command = fValueAccessor(); + const cl = element.classList; - let disabled = !command.canExecute(); + let disabled = !fValueAccessor().canExecute(); cl.toggle('disabled', disabled); if (element.matches('INPUT,TEXTAREA,BUTTON')) { diff --git a/dev/Knoin/AbstractViews.js b/dev/Knoin/AbstractViews.js index 95c27ad78..9a7abac5d 100644 --- a/dev/Knoin/AbstractViews.js +++ b/dev/Knoin/AbstractViews.js @@ -95,7 +95,7 @@ export class AbstractViewLeft extends AbstractView { constructor(templateID) { - super(templateID, 'Left'); + super(templateID, 'left'); this.leftPanelDisabled = leftPanelDisabled; } } @@ -104,7 +104,7 @@ export class AbstractViewRight extends AbstractView { constructor(templateID) { - super(templateID, 'Right'); + super(templateID, 'right'); } } @@ -151,7 +151,7 @@ export class AbstractViewSettings export class AbstractViewLogin extends AbstractView { constructor(templateID) { - super(templateID, 'Content'); + super(templateID, 'content'); this.formError = ko.observable(false).extend({ falseTimeout: 500 }); } diff --git a/dev/Knoin/Knoin.js b/dev/Knoin/Knoin.js index c084b9015..83126f8b5 100644 --- a/dev/Knoin/Knoin.js +++ b/dev/Knoin/Knoin.js @@ -31,9 +31,9 @@ const const vm = new ViewModelClass(vmScreen), id = vm.viewModelTemplateID, - position = vm.viewType || '', - dialog = ViewTypePopup === position, - vmPlace = position ? doc.getElementById('rl-' + position.toLowerCase()) : null; + position = 'rl-' + vm.viewType, + dialog = ViewTypePopup === vm.viewType, + vmPlace = doc.getElementById(position); ViewModelClass.__builded = true; ViewModelClass.__vm = vm; @@ -44,10 +44,9 @@ const : ''); vmPlace.append(vmDom); - vm.viewModelDom = vmDom; - ViewModelClass.__dom = vmDom; + vm.viewModelDom = ViewModelClass.__dom = vmDom; - if (ViewTypePopup === position) { + if (dialog) { vm.close = () => hideScreenPopup(ViewModelClass); // Firefox < 98 / Safari < 15.4 HTMLDialogElement not defined @@ -237,7 +236,7 @@ const export const - ViewTypePopup = 'Popups', + ViewTypePopup = 'popups', /** * @param {Function} ViewModelClassToShow diff --git a/dev/Model/AbstractCollection.js b/dev/Model/AbstractCollection.js index 919dc6154..35c70413c 100644 --- a/dev/Model/AbstractCollection.js +++ b/dev/Model/AbstractCollection.js @@ -27,12 +27,10 @@ export class AbstractCollectionModel extends Array forEachObjectEntry(json, (key, value) => '@' !== key[0] && (result[key] = value)); json = json['@Collection']; } - if (isArray(json)) { - json.forEach(item => { - item && itemCallback && (item = itemCallback(item, result)); - item && result.push(item); - }); - } + isArray(json) && json.forEach(item => { + item && itemCallback && (item = itemCallback(item, result)); + item && result.push(item); + }); } return result; } diff --git a/dev/Model/ComposeAttachment.js b/dev/Model/ComposeAttachment.js index 8c3d898c9..e70895b01 100644 --- a/dev/Model/ComposeAttachment.js +++ b/dev/Model/ComposeAttachment.js @@ -38,12 +38,12 @@ export class ComposeAttachmentModel extends AbstractModel { this.addComputables({ progressText: () => { const p = this.progress(); - return 0 === p ? '' : '' + (98 < p ? 100 : p) + '%'; + return 1 > p ? '' : (100 < p ? 100 : p) + '%'; }, progressStyle: () => { const p = this.progress(); - return 0 === p ? '' : 'width:' + (98 < p ? 100 : p) + '%'; + return 1 > p ? '' : 'width:' + (100 < p ? 100 : p) + '%'; }, title: () => this.error() || this.fileName(), @@ -54,14 +54,9 @@ export class ComposeAttachmentModel extends AbstractModel { }, mimeType: () => FileInfo.getContentType(this.fileName()), - fileExt: () => FileInfo.getExtension(this.fileName()) + fileExt: () => FileInfo.getExtension(this.fileName()), + + iconClass: () => FileInfo.getIconClass(this.fileExt(), this.mimeType()) }); } - - /** - * @returns {string} - */ - iconClass() { - return FileInfo.getIconClass(this.fileExt(), this.mimeType()); - } } diff --git a/dev/Model/Contact.js b/dev/Model/Contact.js index 1b4984009..828832fa4 100644 --- a/dev/Model/Contact.js +++ b/dev/Model/Contact.js @@ -114,8 +114,6 @@ export class ContactModel extends AbstractModel { this.adr = ko.observableArray(); this.addComputables({ - hasValidName: () => !!(this.givenName() || this.surName()), - fullName: () => [this.namePrefix(), this.givenName(), this.middleName(), this.surName()].join(' ').trim(), display: () => { diff --git a/dev/Model/Email.js b/dev/Model/Email.js index 2536e39d4..7b980a163 100644 --- a/dev/Model/Email.js +++ b/dev/Model/Email.js @@ -27,18 +27,14 @@ function addressparser(str) { tokens.forEach(token => { if (token.type === 'operator' && (token.value === ',' || token.value === ';')) { - if (address.length) { - addresses.push(address); - } + address.length && addresses.push(address); address = []; } else { address.push(token); } }); - if (address.length) { - addresses.push(address); - } + address.length && addresses.push(address); addresses.forEach(address => { address = _handleAddress(address); @@ -205,9 +201,7 @@ class Tokenizer this.list.forEach(node => { node.value = (node.value || '').toString().trim(); - if (node.value) { - list.push(node); - } + node.value && list.push(node); }); return list; @@ -361,37 +355,26 @@ export class EmailModel extends AbstractModel { } static splitEmailLine(line) { - const parsedResult = addressparser(line); - if (parsedResult.length) { - const result = []; - let exists = false; - parsedResult.forEach((item) => { - const address = item.address - ? new EmailModel(item.address.replace(/^[<]+(.*)[>]+$/g, '$1'), item.name || '') - : null; + const result = []; + let exists = false; + addressparser(line).forEach(item => { + const address = item.address + ? new EmailModel(item.address.replace(/^[<]+(.*)[>]+$/g, '$1'), item.name || '') + : null; - if (address?.email) { - exists = true; - } + if (address?.email) { + exists = true; + } - result.push(address ? address.toLine() : item.name); - }); - - return exists ? result : null; - } - - return null; + result.push(address ? address.toLine() : item.name); + }); + return exists ? result : null; } static parseEmailLine(line) { - const parsedResult = addressparser(line); - if (parsedResult.length) { - return parsedResult.map(item => - item.address ? new EmailModel(item.address.replace(/^[<]+(.*)[>]+$/g, '$1'), item.name || '') : null - ).filter(v => v); - } - - return []; + return addressparser(line).map(item => + item.address ? new EmailModel(item.address.replace(/^[<]+(.*)[>]+$/g, '$1'), item.name || '') : null + ).filter(v => v); } /** @@ -400,19 +383,15 @@ export class EmailModel extends AbstractModel { */ parse(emailAddress) { emailAddress = emailAddress.trim(); - if (!emailAddress) { - return false; + if (emailAddress) { + const result = addressparser(emailAddress); + if (result.length) { + this.name = result[0].name || ''; + this.email = result[0].address || ''; + this.clearDuplicateName(); + return true; + } } - - const result = addressparser(emailAddress); - if (result.length) { - this.name = result[0].name || ''; - this.email = result[0].address || ''; - this.clearDuplicateName(); - - return true; - } - return false; } } diff --git a/dev/Model/EmailCollection.js b/dev/Model/EmailCollection.js index a0b904d30..624ace5d2 100644 --- a/dev/Model/EmailCollection.js +++ b/dev/Model/EmailCollection.js @@ -21,17 +21,4 @@ export class EmailCollectionModel extends AbstractCollectionModel toString(friendlyView, wrapWithLink) { return this.map(email => email.toLine(friendlyView, wrapWithLink)).join(', '); } - - /** - * @returns {string} - */ - toStringClear() { - const result = []; - this.forEach(email => { - if (email?.email && email?.name) { - result.push(email.email); - } - }); - return result.join(', '); - } } diff --git a/dev/Model/FolderCollection.js b/dev/Model/FolderCollection.js index 326d9e182..99a72d3ea 100644 --- a/dev/Model/FolderCollection.js +++ b/dev/Model/FolderCollection.js @@ -14,7 +14,7 @@ import { MessagelistUserStore } from 'Stores/User/Messagelist'; import { SettingsUserStore } from 'Stores/User/Settings'; import { sortFolders } from 'Common/Folders'; -import { i18n, trigger as translatorTrigger } from 'Common/Translator'; +import { i18n, translateTrigger } from 'Common/Translator'; import { AbstractModel } from 'Knoin/AbstractModel'; @@ -76,17 +76,9 @@ export const */ setExpandedFolder = (sFullName, bExpanded) => { let aExpandedList = Local.get(ClientSideKeyNameExpandedFolders); - if (!isArray(aExpandedList)) { - aExpandedList = []; - } - - if (bExpanded) { - aExpandedList.includes(sFullName) || aExpandedList.push(sFullName); - } else { - aExpandedList = aExpandedList.filter(value => value !== sFullName); - } - - Local.set(ClientSideKeyNameExpandedFolders, aExpandedList); + aExpandedList = new Set(isArray(aExpandedList) ? aExpandedList : []); + bExpanded ? aExpandedList.add(sFullName) : aExpandedList.delete(sFullName); + Local.set(ClientSideKeyNameExpandedFolders, [...aExpandedList]); }, foldersFilter = ko.observable(''), @@ -99,8 +91,7 @@ export const Remote.abort('Folders') .post('Folders', FolderUserStore.foldersLoading) .then(data => { - data = FolderCollectionModel.reviveFromJson(data.Result); - data?.storeIt(); + FolderCollectionModel.reviveFromJson(data.Result)?.storeIt(); fCallback?.(true); // Repeat every 15 minutes? // this.foldersTimeout = setTimeout(loadFolders, 900000); @@ -281,25 +272,15 @@ export class FolderModel extends AbstractModel { this.totalEmails = koComputable({ read: this.totalEmailsValue, - write: (iValue) => { - if (isPosNumeric(iValue)) { - this.totalEmailsValue(iValue); - } else { - this.totalEmailsValue.valueHasMutated(); - } - } + write: iValue => + isPosNumeric(iValue) ? this.totalEmailsValue(iValue) : this.totalEmailsValue.valueHasMutated() }) .extend({ notify: 'always' }); this.unreadEmails = koComputable({ read: this.unreadEmailsValue, - write: (value) => { - if (isPosNumeric(value)) { - this.unreadEmailsValue(value); - } else { - this.unreadEmailsValue.valueHasMutated(); - } - } + write: value => + isPosNumeric(value) ? this.unreadEmailsValue(value) : this.unreadEmailsValue.valueHasMutated() }) .extend({ notify: 'always' }); /* @@ -397,13 +378,14 @@ export class FolderModel extends AbstractModel { const unread = folder.unreadEmails(), type = folder.type(); + // TODO: make isSystemFolder() optional in Settings return ((!folder.isSystemFolder() || type == FolderType.Inbox) && unread) ? unread : null; }, localName: () => { let name = folder.name(); if (folder.isSystemFolder()) { - translatorTrigger(); + translateTrigger(); name = getSystemFolderName(folder.type(), name); } return name; @@ -411,7 +393,7 @@ export class FolderModel extends AbstractModel { manageFolderSystemName: () => { if (folder.isSystemFolder()) { - translatorTrigger(); + translateTrigger(); let suffix = getSystemFolderName(folder.type(), getKolabFolderName(folder.kolabType())); if (folder.name() !== suffix && 'inbox' !== suffix.toLowerCase()) { return '(' + suffix + ')'; @@ -420,24 +402,22 @@ export class FolderModel extends AbstractModel { return ''; }, - hasUnreadMessages: () => 0 < folder.unreadEmails() && folder.printableUnreadCount(), - hasSubscribedUnreadMessagesSubfolders: () => !!folder.subFolders().find( - folder => folder.hasUnreadMessages() | folder.hasSubscribedUnreadMessagesSubfolders() + folder => folder.printableUnreadCount() | folder.hasSubscribedUnreadMessagesSubfolders() ) - +/* + !!folder.subFolders().filter( + folder => folder.printableUnreadCount() | folder.hasSubscribedUnreadMessagesSubfolders() + ).length +*/ // ,href: () => folder.canBeSelected() && mailBox(folder.fullNameHash) }); folder.addSubscribables({ editing: value => value && folder.nameForEdit(folder.name()), - unreadEmails: unread => { - if (FolderType.Inbox === folder.type()) { - fireEvent('mailbox.inbox-unread-count', unread); - } - } + unreadEmails: unread => FolderType.Inbox === folder.type() && fireEvent('mailbox.inbox-unread-count', unread) }); } return folder; diff --git a/dev/Model/Identity.js b/dev/Model/Identity.js index bb3f4379f..76ae8b5c3 100644 --- a/dev/Model/Identity.js +++ b/dev/Model/Identity.js @@ -1,5 +1,3 @@ -import { koComputable } from 'External/ko'; - import { AbstractModel } from 'Knoin/AbstractModel'; export class IdentityModel extends AbstractModel { @@ -23,8 +21,6 @@ export class IdentityModel extends AbstractModel { askDelete: false }); - - this.canBeDeleted = koComputable(() => !!this.id()); } /** diff --git a/dev/Model/Message.js b/dev/Model/Message.js index 8e6931111..c74e299d7 100644 --- a/dev/Model/Message.js +++ b/dev/Model/Message.js @@ -5,7 +5,7 @@ import { i18n } from 'Common/Translator'; import { doc, SettingsGet } from 'Common/Globals'; import { encodeHtml, plainToHtml, cleanHtml } from 'Common/Html'; -import { isArray, arrayLength, forEachObjectEntry } from 'Common/Utils'; +import { arrayLength, forEachObjectEntry } from 'Common/Utils'; import { serverRequestRaw, proxy } from 'Common/Links'; import { FolderUserStore, isAllowedKeyword } from 'Stores/User/Folder'; @@ -32,15 +32,12 @@ const toggleTag = (message, keyword) => { const lower = keyword.toLowerCase(), - isSet = message.flags().includes(lower); + flags = message.flags, + isSet = flags.includes(lower); Remote.request('MessageSetKeyword', iError => { if (!iError) { - if (isSet) { - message.flags.remove(lower); - } else { - message.flags.push(lower); - } -// MessageFlagsCache.setFor(message.folder, message.uid, message.flags()); + isSet ? flags.remove(lower) : flags.push(lower); +// MessageFlagsCache.setFor(message.folder, message.uid, flags()); } }, { Folder: message.folder, @@ -56,11 +53,9 @@ const * @param {Map} localEmails */ replyHelper = (emails, unic, localEmails) => - emails.forEach(email => { - if (!unic[email.email] && !localEmails.has(email.email)) { - localEmails.set(email.email, email); - } - }); + emails.forEach(email => + unic[email.email] || localEmails.has(email.email) || localEmails.set(email.email, email) + ); doc.body.append(hcont); @@ -222,16 +217,6 @@ export class MessageModel extends AbstractModel { return spam ? i18n(this.isSpam() ? 'GLOBAL/SPAM' : 'GLOBAL/NOT_SPAM') + ': ' + spam : ''; } - /** - * @param {Array} properties - * @returns {Array} - */ - getEmails(properties) { - return properties.reduce((carry, property) => carry.concat(this[property]), []).map( - oItem => oItem ? oItem.email : '' - ).validUnique(); - } - /** * @returns {string} */ @@ -240,9 +225,11 @@ export class MessageModel extends AbstractModel { } computeSenderEmail() { - const list = [FolderUserStore.sentFolder(), FolderUserStore.draftsFolder()].includes(this.folder) ? 'to' : 'from'; - this.senderEmailsString(this[list].toString(true)); - this.senderClearEmailsString(this[list].toStringClear()); + const list = this[ + [FolderUserStore.sentFolder(), FolderUserStore.draftsFolder()].includes(this.folder) ? 'to' : 'from' + ]; + this.senderEmailsString(list.toString(true)); + this.senderClearEmailsString(list.map(email => email?.email).filter(email => email).join(', ')); } /** @@ -349,21 +336,6 @@ export class MessageModel extends AbstractModel { return classes.join(' '); } - /** - * @return array - * https://datatracker.ietf.org/doc/html/rfc5788 - */ - keywords() { - return this.flags().filter(value => '\\' !== value[0]); - } - - /** - * @returns {string} - */ - fromAsSingleEmail() { - return (isArray(this.from) && this.from[0]?.email) || ''; - } - /** * @returns {string} */ @@ -491,7 +463,7 @@ export class MessageModel extends AbstractModel { * @param {boolean=} print = false */ popupMessage() { - this.viewPopupMessage(false); + this.viewPopupMessage(); } printMessage() { diff --git a/dev/Remote/AbstractFetch.js b/dev/Remote/AbstractFetch.js index e5c18431f..58b92b57b 100644 --- a/dev/Remote/AbstractFetch.js +++ b/dev/Remote/AbstractFetch.js @@ -5,7 +5,7 @@ import { getNotification } from 'Common/Translator'; let iJsonErrorCount = 0; -const getURL = (add = '') => serverRequest('Json') + add, +const getURL = (add = '') => serverRequest('Json') + pString(add), checkResponseError = data => { const err = data ? data.ErrorCode : null; @@ -109,10 +109,8 @@ export class AbstractFetchRemote buffer = buffer.slice(result.index + 1); re.lastIndex = 0; } - if (buffer.length) { - // last line didn't end in a newline char - fCallback(buffer); - } + // last line didn't end in a newline char + buffer.length && fCallback(buffer); }; reader.read().then(processText); }) @@ -132,7 +130,7 @@ export class AbstractFetchRemote abortActions && console.error('abortActions is obsolete'); - fetchJSON(sAction, pString(sGetAdd), + fetchJSON(sAction, sGetAdd, params, undefined === iTimeout ? 30000 : pInt(iTimeout), data => { diff --git a/dev/Settings/Admin/About.js b/dev/Settings/Admin/About.js index 398f3235e..b5f8c35ff 100644 --- a/dev/Settings/Admin/About.js +++ b/dev/Settings/Admin/About.js @@ -3,7 +3,7 @@ import { Settings } from 'Common/Globals'; import { addObservablesTo } from 'External/ko'; import Remote from 'Remote/Admin/Fetch'; -import { i18n, trigger as translatorTrigger } from 'Common/Translator'; +import { i18n, translateTrigger } from 'Common/Translator'; export class AdminSettingsAbout /*extends AbstractViewSettings*/ { constructor() { @@ -22,7 +22,7 @@ export class AdminSettingsAbout /*extends AbstractViewSettings*/ { this.coreUpdating = ko.observable(false).extend({ throttle: 100 }); this.coreVersionHtmlDesc = ko.computed(() => { - translatorTrigger(); + translateTrigger(); return i18n('TAB_ABOUT/HTML_NEW_VERSION', { 'VERSION': this.coreVersion() }); }); diff --git a/dev/Settings/Admin/Contacts.js b/dev/Settings/Admin/Contacts.js index fb5f43635..e5c3ccfd9 100644 --- a/dev/Settings/Admin/Contacts.js +++ b/dev/Settings/Admin/Contacts.js @@ -85,11 +85,7 @@ export class AdminSettingsContacts extends AbstractViewSettings { this.testContactsSuccess(true); } else { this.testContactsError(true); - if (data?.Result) { - this.testContactsErrorMessage(data.Result.Message || ''); - } else { - this.testContactsErrorMessage(''); - } + this.testContactsErrorMessage(data?.Result?.Message || ''); } this.testing(false); diff --git a/dev/Settings/Admin/Packages.js b/dev/Settings/Admin/Packages.js index d204859f1..fb0191987 100644 --- a/dev/Settings/Admin/Packages.js +++ b/dev/Settings/Admin/Packages.js @@ -42,7 +42,7 @@ export class AdminSettingsPackages extends AbstractViewSettings { oDom.addEventListener('click', event => { // configurePlugin let el = event.target.closestWithin('.package-configure', oDom), - data = el ? ko.dataFor(el) : 0; + data = el && ko.dataFor(el); data && Remote.request('AdminPluginLoad', (iError, data) => iError || showScreenPopup(PluginPopupView, [data.Result]), { @@ -51,7 +51,7 @@ export class AdminSettingsPackages extends AbstractViewSettings { ); // disablePlugin el = event.target.closestWithin('.package-active', oDom); - data = el ? ko.dataFor(el) : 0; + data = el && ko.dataFor(el); data && this.disablePlugin(data); }); } diff --git a/dev/Settings/User/Accounts.js b/dev/Settings/User/Accounts.js index 590bc3aa1..5ef77bf8a 100644 --- a/dev/Settings/User/Accounts.js +++ b/dev/Settings/User/Accounts.js @@ -50,20 +50,18 @@ export class UserSettingsAccounts /*extends AbstractViewSettings*/ { deleteAccount(accountToRemove) { if (accountToRemove?.askDelete()) { this.accountForDeletion(null); - if (accountToRemove) { - this.accounts.remove((account) => accountToRemove === account); + this.accounts.remove(account => accountToRemove === account); - Remote.request('AccountDelete', (iError, data) => { - if (!iError && data.Reload) { - rl.route.root(); - setTimeout(() => location.reload(), 1); - } else { - rl.app.accountsAndIdentities(); - } - }, { - EmailToDelete: accountToRemove.email - }); - } + Remote.request('AccountDelete', (iError, data) => { + if (!iError && data.Reload) { + rl.route.root(); + setTimeout(() => location.reload(), 1); + } else { + rl.app.accountsAndIdentities(); + } + }, { + EmailToDelete: accountToRemove.email + }); } } @@ -74,13 +72,10 @@ export class UserSettingsAccounts /*extends AbstractViewSettings*/ { deleteIdentity(identityToRemove) { if (identityToRemove?.askDelete()) { this.identityForDeletion(null); - - if (identityToRemove) { - IdentityUserStore.remove(oIdentity => identityToRemove === oIdentity); - Remote.request('IdentityDelete', () => rl.app.accountsAndIdentities(), { - IdToDelete: identityToRemove.id() - }); - } + IdentityUserStore.remove(oIdentity => identityToRemove === oIdentity); + Remote.request('IdentityDelete', () => rl.app.accountsAndIdentities(), { + IdToDelete: identityToRemove.id() + }); } } diff --git a/dev/Settings/User/Contacts.js b/dev/Settings/User/Contacts.js index 1c14303dc..b3815ed56 100644 --- a/dev/Settings/User/Contacts.js +++ b/dev/Settings/User/Contacts.js @@ -2,7 +2,7 @@ import ko from 'ko'; import { koComputable } from 'External/ko'; import { SettingsGet } from 'Common/Globals'; -import { i18n, trigger as translatorTrigger } from 'Common/Translator'; +import { i18n, translateTrigger } from 'Common/Translator'; import { ContactUserStore } from 'Stores/User/Contact'; import Remote from 'Remote/User/Fetch'; @@ -17,7 +17,7 @@ export class UserSettingsContacts /*extends AbstractViewSettings*/ { this.syncPass = ContactUserStore.syncPass; this.syncModeOptions = koComputable(() => { - translatorTrigger(); + translateTrigger(); return [ { id: 0, name: i18n('GLOBAL/NO') }, { id: 1, name: i18n('GLOBAL/YES') }, diff --git a/dev/Settings/User/General.js b/dev/Settings/User/General.js index 12dc4b75b..f5c4fec7b 100644 --- a/dev/Settings/User/General.js +++ b/dev/Settings/User/General.js @@ -6,7 +6,7 @@ import { EditorDefaultType, Layout } from 'Common/EnumsUser'; import { Settings, SettingsGet } from 'Common/Globals'; import { isArray } from 'Common/Utils'; import { addSubscribablesTo, addComputablesTo } from 'External/ko'; -import { i18n, trigger as translatorTrigger, translatorReload, convertLangName } from 'Common/Translator'; +import { i18n, translateTrigger, translatorReload, convertLangName } from 'Common/Translator'; import { AbstractViewSettings } from 'Knoin/AbstractViews'; import { showScreenPopup } from 'Knoin/Knoin'; @@ -66,7 +66,7 @@ export class UserSettingsGeneral extends AbstractViewSettings { }, editorDefaultTypes: () => { - translatorTrigger(); + translateTrigger(); return [ { id: EditorDefaultType.Html, name: i18n('SETTINGS_GENERAL/EDITOR_HTML') }, { id: EditorDefaultType.Plain, name: i18n('SETTINGS_GENERAL/EDITOR_PLAIN') } @@ -74,7 +74,7 @@ export class UserSettingsGeneral extends AbstractViewSettings { }, msgDefaultActions: () => { - translatorTrigger(); + translateTrigger(); return [ { id: 1, name: i18n('MESSAGE/BUTTON_REPLY') }, // ComposeType.Reply, { id: 2, name: i18n('MESSAGE/BUTTON_REPLY_ALL') } // ComposeType.ReplyAll @@ -82,7 +82,7 @@ export class UserSettingsGeneral extends AbstractViewSettings { }, layoutTypes: () => { - translatorTrigger(); + translateTrigger(); return [ { id: Layout.NoPreview, name: i18n('SETTINGS_GENERAL/LAYOUT_NO_SPLIT') }, { id: Layout.SidePreview, name: i18n('SETTINGS_GENERAL/LAYOUT_VERTICAL_SPLIT') }, diff --git a/dev/Settings/User/Security.js b/dev/Settings/User/Security.js index 798be119b..7db770db1 100644 --- a/dev/Settings/User/Security.js +++ b/dev/Settings/User/Security.js @@ -1,7 +1,7 @@ import { koComputable } from 'External/ko'; import { SettingsCapa } from 'Common/Globals'; -import { i18n, trigger as translatorTrigger } from 'Common/Translator'; +import { i18n, translateTrigger } from 'Common/Translator'; import { AbstractViewSettings } from 'Knoin/AbstractViews'; @@ -27,7 +27,7 @@ export class UserSettingsSecurity extends AbstractViewSettings { let i18nLogout = (key, params) => i18n('SETTINGS_SECURITY/AUTOLOGIN_' + key, params); this.autoLogoutOptions = koComputable(() => { - translatorTrigger(); + translateTrigger(); return [ { id: 0, name: i18nLogout('NEVER_OPTION_NAME') }, { id: 5, name: i18nLogout('MINUTES_OPTION_NAME', { MINUTES: 5 }) }, diff --git a/dev/Settings/User/Themes.js b/dev/Settings/User/Themes.js index d02075864..aafda3617 100644 --- a/dev/Settings/User/Themes.js +++ b/dev/Settings/User/Themes.js @@ -32,9 +32,7 @@ export class UserSettingsThemes /*extends AbstractViewSettings*/ { this.themeTrigger = ko.observable(SaveSettingStatus.Idle).extend({ debounce: 100 }); ThemeStore.theme.subscribe(value => { - this.themesObjects.forEach(theme => { - theme.selected(value === theme.name); - }); + this.themesObjects.forEach(theme => theme.selected(value === theme.name)); changeTheme(value, this.themeTrigger); @@ -69,18 +67,12 @@ export class UserSettingsThemes /*extends AbstractViewSettings*/ { .on('onStart', () => { themeBackground.loading(true); themeBackground.error(''); - return true; }) .on('onComplete', (id, result, data) => { themeBackground.loading(false); - - if (result && id && data?.Result?.Name && data?.Result?.Hash) { - themeBackground.name(data.Result.Name); - themeBackground.hash(data.Result.Hash); - } else { - themeBackground.name(''); - themeBackground.hash(''); - + themeBackground.name(data?.Result?.Name || ''); + themeBackground.hash(data?.Result?.Hash || ''); + if (!themeBackground.name() || !themeBackground.hash()) { let errorMsg = ''; if (data.ErrorCode) { switch (data.ErrorCode) { @@ -96,8 +88,6 @@ export class UserSettingsThemes /*extends AbstractViewSettings*/ { themeBackground.error(errorMsg || data.ErrorMessage || i18n('SETTINGS_THEMES/ERROR_UNKNOWN')); } - - return true; }); } } diff --git a/dev/Stores/User/GnuPG.js b/dev/Stores/User/GnuPG.js index 248880588..57c95d7e8 100644 --- a/dev/Stores/User/GnuPG.js +++ b/dev/Stores/User/GnuPG.js @@ -56,11 +56,9 @@ export const GnuPGUserStore = new class { if (iError) { alert(oData.ErrorMessage); } else if (oData.Result) { - if (isPrivate) { - this.privateKeys.remove(key); - } else { - this.publicKeys.remove(key); - } + isPrivate + ? this.privateKeys.remove(key) + : this.publicKeys.remove(key); } } }, { diff --git a/dev/Stores/User/Message.js b/dev/Stores/User/Message.js index a012f03d1..3b1750d1d 100644 --- a/dev/Stores/User/Message.js +++ b/dev/Stores/User/Message.js @@ -26,9 +26,7 @@ export const MessageUserStore = new class { clearTimeout(this.MessageSeenTimer); elementById('rl-right').classList.toggle('message-selected', !!message); if (message) { - if (!SettingsUserStore.usePreviewPane()) { - AppUserStore.focusedState(Scope.MessageView); - } + SettingsUserStore.usePreviewPane() || AppUserStore.focusedState(Scope.MessageView); } else { AppUserStore.focusedState(Scope.MessageList); exitFullscreen(); diff --git a/dev/Stores/User/OpenPGP.js b/dev/Stores/User/OpenPGP.js index be15ac2e4..cb201c4e0 100644 --- a/dev/Stores/User/OpenPGP.js +++ b/dev/Stores/User/OpenPGP.js @@ -47,9 +47,7 @@ const i = arrayLength(armoredKeys); while (i--) { key = await openpgp.readKey({armoredKey:armoredKeys[i]}); - if (!key.err) { - keys.push(new OpenPgpKeyModel(armoredKeys[i], key)); - } + key.err || keys.push(new OpenPgpKeyModel(armoredKeys[i], key)); } return keys; }, diff --git a/dev/View/Popup/AdvancedSearch.js b/dev/View/Popup/AdvancedSearch.js index 9b10e2450..4bb0d9db4 100644 --- a/dev/View/Popup/AdvancedSearch.js +++ b/dev/View/Popup/AdvancedSearch.js @@ -1,4 +1,4 @@ -import { i18n, trigger as translatorTrigger } from 'Common/Translator'; +import { i18n, translateTrigger } from 'Common/Translator'; import { pString } from 'Common/Utils'; import { MessagelistUserStore } from 'Stores/User/Messagelist'; @@ -46,7 +46,7 @@ export class AdvancedSearchPopupView extends AbstractViewPopup { showKeywords: () => FolderUserStore.currentFolder().permanentFlags().some(isAllowedKeyword), repliedOptions: () => { - translatorTrigger(); + translateTrigger(); return [ { id: -1, name: '' }, { id: 1, name: i18n('GLOBAL/YES') }, @@ -55,7 +55,7 @@ export class AdvancedSearchPopupView extends AbstractViewPopup { }, selectedDates: () => { - translatorTrigger(); + translateTrigger(); let prefix = 'SEARCH/DATE_'; return [ { id: -1, name: i18n(prefix + 'ALL') }, @@ -69,7 +69,7 @@ export class AdvancedSearchPopupView extends AbstractViewPopup { }, selectedTree: () => { - translatorTrigger(); + translateTrigger(); let prefix = 'SEARCH/SUBFOLDERS_'; return [ { id: '', name: i18n(prefix + 'NONE') }, diff --git a/snappymail/v/0.0.0/app/templates/Views/Components/Checkbox.html b/snappymail/v/0.0.0/app/templates/Views/Components/Checkbox.html index a8c4016b4..ca4a720a0 100644 --- a/snappymail/v/0.0.0/app/templates/Views/Components/Checkbox.html +++ b/snappymail/v/0.0.0/app/templates/Views/Components/Checkbox.html @@ -2,7 +2,7 @@
- + diff --git a/snappymail/v/0.0.0/app/templates/Views/Components/Select.html b/snappymail/v/0.0.0/app/templates/Views/Components/Select.html index 7ef5a5ccf..609c0708d 100644 --- a/snappymail/v/0.0.0/app/templates/Views/Components/Select.html +++ b/snappymail/v/0.0.0/app/templates/Views/Components/Select.html @@ -1,7 +1,7 @@
- - + + diff --git a/snappymail/v/0.0.0/app/templates/Views/User/PopupsCompose.html b/snappymail/v/0.0.0/app/templates/Views/User/PopupsCompose.html index 8126eaaf8..9b948fe93 100644 --- a/snappymail/v/0.0.0/app/templates/Views/User/PopupsCompose.html +++ b/snappymail/v/0.0.0/app/templates/Views/User/PopupsCompose.html @@ -158,7 +158,7 @@