mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-09 06:28:28 +03:00
Merge branch 'master' into patch-1
This commit is contained in:
commit
ceaab4eeb7
56 changed files with 124 additions and 206 deletions
|
|
@ -29,11 +29,11 @@ UploadErrorCode = {
|
|||
/**
|
||||
* @enum {number}
|
||||
*/
|
||||
SaveSettingsStep = {
|
||||
Animate: -2,
|
||||
SaveSettingStatus = {
|
||||
Saving: -2,
|
||||
Idle: -1,
|
||||
TrueResult: 1,
|
||||
FalseResult: 0
|
||||
Success: 1,
|
||||
Failed: 0
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -28,22 +28,6 @@ export const FolderMetadataKeys = {
|
|||
KolabFolderTypeShared: '/shared/vendor/kolab/folder-type'
|
||||
};
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
export const FolderSortMode = {
|
||||
DateDesc: '', // default 'REVERSE DATE'
|
||||
DateAsc: 'DATE',
|
||||
FromDesc: 'REVERSE FROM',
|
||||
FromAsc: 'FROM',
|
||||
SizeDesc: 'REVERSE SIZE',
|
||||
SizeAsc: 'SIZE',
|
||||
SubjectDesc: 'REVERSE SUBJECT',
|
||||
SubjectAsc: 'SUBJECT'
|
||||
// ToDesc: 'REVERSE TO',
|
||||
// ToAsc: 'TO',
|
||||
};
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { SaveSettingsStep } from 'Common/Enums';
|
||||
import { SaveSettingStatus } from 'Common/Enums';
|
||||
import { elementById } from 'Common/Globals';
|
||||
|
||||
let __themeTimer = 0,
|
||||
|
|
@ -40,14 +40,14 @@ export const
|
|||
changeTheme = (value, themeTrigger = ()=>0) => {
|
||||
const themeStyle = elementById('app-theme-style'),
|
||||
clearTimer = () => {
|
||||
__themeTimer = setTimeout(() => themeTrigger(SaveSettingsStep.Idle), 1000);
|
||||
__themeTimer = setTimeout(() => themeTrigger(SaveSettingStatus.Idle), 1000);
|
||||
__themeJson = null;
|
||||
},
|
||||
url = themeStyle.dataset.href.replace(/(Admin|User)\/-\/[^/]+\//, '$1/-/' + value + '/') + 'Json/';
|
||||
|
||||
clearTimeout(__themeTimer);
|
||||
|
||||
themeTrigger(SaveSettingsStep.Animate);
|
||||
themeTrigger(SaveSettingStatus.Saving);
|
||||
|
||||
if (__themeJson) {
|
||||
__themeJson.abort();
|
||||
|
|
@ -61,7 +61,7 @@ export const
|
|||
.then(data => {
|
||||
if (2 === arrayLength(data)) {
|
||||
themeStyle.textContent = data[1];
|
||||
themeTrigger(SaveSettingsStep.TrueResult);
|
||||
themeTrigger(SaveSettingStatus.Success);
|
||||
}
|
||||
})
|
||||
.then(clearTimer, clearTimer);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import ko from 'ko';
|
||||
import { pInt } from 'Common/Utils';
|
||||
import { SaveSettingsStep } from 'Common/Enums';
|
||||
import { SaveSettingStatus } from 'Common/Enums';
|
||||
import { koComputable } from 'External/ko';
|
||||
import { dispose } from 'External/ko';
|
||||
|
||||
|
|
@ -23,10 +23,10 @@ export class AbstractInput {
|
|||
classForTrigger = ko.observable(''),
|
||||
setTriggerState = value => {
|
||||
switch (pInt(value)) {
|
||||
case SaveSettingsStep.TrueResult:
|
||||
case SaveSettingStatus.Success:
|
||||
classForTrigger('success');
|
||||
break;
|
||||
case SaveSettingsStep.FalseResult:
|
||||
case SaveSettingStatus.Failed:
|
||||
classForTrigger('error');
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
17
dev/External/SquireUI.js
vendored
17
dev/External/SquireUI.js
vendored
|
|
@ -78,8 +78,13 @@ class SquireUI
|
|||
actions = {
|
||||
mode: {
|
||||
plain: {
|
||||
html: '〈〉',
|
||||
cmd: () => this.setMode('plain' == this.mode ? 'wysiwyg' : 'plain'),
|
||||
// html: '〈〉',
|
||||
// cmd: () => this.setMode('plain' == this.mode ? 'wysiwyg' : 'plain'),
|
||||
select: [
|
||||
[i18n('SETTINGS_GENERAL/LABEL_EDITOR_HTML'),'wysiwyg'],
|
||||
[i18n('SETTINGS_GENERAL/LABEL_EDITOR_PLAIN'),'plain']
|
||||
],
|
||||
cmd: s => this.setMode('plain' == s.value ? 'plain' : 'wysiwyg'),
|
||||
hint: i18n('EDITOR/TEXT_SWITCHER_PLAIN_TEXT', 'Plain')
|
||||
}
|
||||
},
|
||||
|
|
@ -299,8 +304,9 @@ class SquireUI
|
|||
input.className = 'btn';
|
||||
if (Array.isArray(cfg.select)) {
|
||||
cfg.select.forEach(value => {
|
||||
var option = new Option(value, value);
|
||||
option.style[action] = value;
|
||||
value = Array.isArray(value) ? value : [value, value];
|
||||
var option = new Option(value[0], value[1]);
|
||||
option.style[action] = value[1];
|
||||
input.append(option);
|
||||
});
|
||||
} else {
|
||||
|
|
@ -347,6 +353,8 @@ class SquireUI
|
|||
toolgroup.children.length && toolbar.append(toolgroup);
|
||||
}
|
||||
|
||||
this.modeSelect = actions.mode.plain.input;
|
||||
|
||||
let changes = actions.changes;
|
||||
changes.undo.input.disabled = changes.redo.input.disabled = true;
|
||||
squire.addEventListener('undoStateChange', state => {
|
||||
|
|
@ -413,6 +421,7 @@ class SquireUI
|
|||
this.onModeChange?.();
|
||||
setTimeout(()=>this.focus(),1);
|
||||
}
|
||||
this.modeSelect.selectedIndex = 'plain' == this.mode ? 1 : 0;
|
||||
}
|
||||
|
||||
// CKeditor gimmicks used by HtmlEditor
|
||||
|
|
|
|||
49
dev/External/ko.js
vendored
49
dev/External/ko.js
vendored
|
|
@ -1,8 +1,8 @@
|
|||
import ko from 'ko';
|
||||
import { i18nToNodes } from 'Common/Translator';
|
||||
import { doc, createElement } from 'Common/Globals';
|
||||
import { SaveSettingsStep } from 'Common/Enums';
|
||||
import { arrayLength, isFunction, forEachObjectEntry } from 'Common/Utils';
|
||||
import { SaveSettingStatus } from 'Common/Enums';
|
||||
import { isFunction, forEachObjectEntry } from 'Common/Utils';
|
||||
|
||||
export const
|
||||
errorTip = (element, value) => value
|
||||
|
|
@ -68,6 +68,19 @@ Object.assign(ko.bindingHandlers, {
|
|||
}
|
||||
},
|
||||
|
||||
onEsc: {
|
||||
init: (element, fValueAccessor, fAllBindings, viewModel) => {
|
||||
let fn = event => {
|
||||
if ('Escape' == event.key) {
|
||||
element.dispatchEvent(new Event('change'));
|
||||
fValueAccessor().call(viewModel);
|
||||
}
|
||||
};
|
||||
element.addEventListener('keyup', fn);
|
||||
ko.utils.domNodeDisposal.addDisposeCallback(element, () => element.removeEventListener('keyup', fn));
|
||||
}
|
||||
},
|
||||
|
||||
onSpace: {
|
||||
init: (element, fValueAccessor, fAllBindings, viewModel) => {
|
||||
let fn = event => {
|
||||
|
|
@ -133,41 +146,19 @@ Object.assign(ko.bindingHandlers, {
|
|||
const value = parseInt(ko.unwrap(fValueAccessor()),10);
|
||||
let cl = (element.saveTriggerIcon || element).classList;
|
||||
if (element.saveTriggerIcon) {
|
||||
cl.toggle('saving', value === SaveSettingsStep.Animate);
|
||||
cl.toggle('success', value === SaveSettingsStep.TrueResult);
|
||||
cl.toggle('error', value === SaveSettingsStep.FalseResult);
|
||||
cl.toggle('saving', value === SaveSettingStatus.Saving);
|
||||
cl.toggle('success', value === SaveSettingStatus.Success);
|
||||
cl.toggle('error', value === SaveSettingStatus.Failed);
|
||||
}
|
||||
cl = element.classList;
|
||||
cl.toggle('success', value === SaveSettingsStep.TrueResult);
|
||||
cl.toggle('error', value === SaveSettingsStep.FalseResult);
|
||||
cl.toggle('success', value === SaveSettingStatus.Success);
|
||||
cl.toggle('error', value === SaveSettingStatus.Failed);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// extenders
|
||||
|
||||
ko.extenders.limitedList = (target, limitedList) => {
|
||||
const result = ko
|
||||
.computed({
|
||||
read: target,
|
||||
write: newValue => {
|
||||
let currentValue = target(),
|
||||
list = ko.unwrap(limitedList);
|
||||
list = arrayLength(list) ? list : [''];
|
||||
if (!list.includes(newValue)) {
|
||||
newValue = list.includes(currentValue, list) ? currentValue : list[0];
|
||||
target(newValue + ' ');
|
||||
}
|
||||
target(newValue);
|
||||
}
|
||||
})
|
||||
.extend({ notify: 'always' });
|
||||
|
||||
result(target());
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
ko.extenders.toggleSubscribeProperty = (target, options) => {
|
||||
const prop = options[1];
|
||||
if (prop) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { addObservablesTo, addComputablesTo, addSubscribablesTo } from 'External
|
|||
import { keyScope, SettingsGet, leftPanelDisabled, elementById } from 'Common/Globals';
|
||||
import { ViewTypePopup, showScreenPopup } from 'Knoin/Knoin';
|
||||
|
||||
import { SaveSettingsStep } from 'Common/Enums';
|
||||
import { SaveSettingStatus } from 'Common/Enums';
|
||||
|
||||
class AbstractView {
|
||||
constructor(templateID, type)
|
||||
|
|
@ -123,16 +123,16 @@ export class AbstractViewSettings
|
|||
trigger = prop + 'Trigger';
|
||||
addObservablesTo(this, {
|
||||
[prop]: SettingsGet(name),
|
||||
[trigger]: SaveSettingsStep.Idle,
|
||||
[trigger]: SaveSettingStatus.Idle,
|
||||
});
|
||||
addSubscribablesTo(this, {
|
||||
[prop]: (value => {
|
||||
this[trigger](SaveSettingsStep.Animate);
|
||||
this[trigger](SaveSettingStatus.Saving);
|
||||
valueCb?.(value);
|
||||
rl.app.Remote.saveSetting(name, value,
|
||||
iError => {
|
||||
this[trigger](iError ? SaveSettingsStep.FalseResult : SaveSettingsStep.TrueResult);
|
||||
setTimeout(() => this[trigger](SaveSettingsStep.Idle), 1000);
|
||||
this[trigger](iError ? SaveSettingStatus.Failed : SaveSettingStatus.Success);
|
||||
setTimeout(() => this[trigger](SaveSettingStatus.Idle), 1000);
|
||||
}
|
||||
);
|
||||
}).debounce(999),
|
||||
|
|
|
|||
|
|
@ -250,7 +250,7 @@ export class FolderModel extends AbstractModel {
|
|||
|
||||
focused: false,
|
||||
selected: false,
|
||||
edited: false,
|
||||
editing: false,
|
||||
isSubscribed: true,
|
||||
checkable: false, // Check for new messages
|
||||
askDelete: false,
|
||||
|
|
@ -443,9 +443,7 @@ export class FolderModel extends AbstractModel {
|
|||
});
|
||||
|
||||
folder.addSubscribables({
|
||||
name: value => folder.nameForEdit(value),
|
||||
|
||||
edited: value => value && folder.nameForEdit(folder.name()),
|
||||
editing: value => value && folder.nameForEdit(folder.name()),
|
||||
|
||||
unreadEmails: unread => {
|
||||
if (FolderType.Inbox === folder.type()) {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import {
|
|||
|
||||
import { addObservablesTo, addSubscribablesTo, addComputablesTo } from 'External/ko';
|
||||
|
||||
import { SaveSettingsStep } from 'Common/Enums';
|
||||
import { SaveSettingStatus } from 'Common/Enums';
|
||||
import { Settings, SettingsGet, SettingsCapa } from 'Common/Globals';
|
||||
import { translatorReload, convertLangName } from 'Common/Translator';
|
||||
|
||||
|
|
@ -30,9 +30,7 @@ export class AdminSettingsGeneral extends AbstractViewSettings {
|
|||
|
||||
const aLanguagesAdmin = Settings.app('languagesAdmin');
|
||||
this.languagesAdmin = ko.observableArray(isArray(aLanguagesAdmin) ? aLanguagesAdmin : []);
|
||||
this.languageAdmin = ko
|
||||
.observable(SettingsGet('LanguageAdmin'))
|
||||
.extend({ limitedList: this.languagesAdmin });
|
||||
this.languageAdmin = ko.observable(SettingsGet('LanguageAdmin'));
|
||||
|
||||
this.theme = ThemeStore.theme;
|
||||
this.themes = ThemeStore.themes;
|
||||
|
|
@ -40,8 +38,8 @@ export class AdminSettingsGeneral extends AbstractViewSettings {
|
|||
this.addSettings(['AllowLanguagesOnSettings','NewMoveToFolder']);
|
||||
|
||||
addObservablesTo(this, {
|
||||
attachmentLimitTrigger: SaveSettingsStep.Idle,
|
||||
themeTrigger: SaveSettingsStep.Idle,
|
||||
attachmentLimitTrigger: SaveSettingStatus.Idle,
|
||||
themeTrigger: SaveSettingStatus.Idle,
|
||||
capaThemes: SettingsCapa('Themes'),
|
||||
capaUserBackground: SettingsCapa('UserBackground'),
|
||||
capaAdditionalAccounts: SettingsCapa('AdditionalAccounts'),
|
||||
|
|
@ -84,19 +82,19 @@ export class AdminSettingsGeneral extends AbstractViewSettings {
|
|||
languageAdminFullName: () => convertLangName(this.languageAdmin())
|
||||
});
|
||||
|
||||
this.languageAdminTrigger = ko.observable(SaveSettingsStep.Idle).extend({ debounce: 100 });
|
||||
this.languageAdminTrigger = ko.observable(SaveSettingStatus.Idle).extend({ debounce: 100 });
|
||||
|
||||
const fReloadLanguageHelper = (saveSettingsStep) => () => {
|
||||
this.languageAdminTrigger(saveSettingsStep);
|
||||
setTimeout(() => this.languageAdminTrigger(SaveSettingsStep.Idle), 1000);
|
||||
setTimeout(() => this.languageAdminTrigger(SaveSettingStatus.Idle), 1000);
|
||||
},
|
||||
fSaveHelper = key => value => Remote.saveSetting(key, value);
|
||||
|
||||
addSubscribablesTo(this, {
|
||||
languageAdmin: value => {
|
||||
this.languageAdminTrigger(SaveSettingsStep.Animate);
|
||||
this.languageAdminTrigger(SaveSettingStatus.Saving);
|
||||
translatorReload(true, value)
|
||||
.then(fReloadLanguageHelper(SaveSettingsStep.TrueResult), fReloadLanguageHelper(SaveSettingsStep.FalseResult))
|
||||
.then(fReloadLanguageHelper(SaveSettingStatus.Success), fReloadLanguageHelper(SaveSettingStatus.Failed))
|
||||
.then(() => Remote.saveSetting('LanguageAdmin', value));
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -51,14 +51,13 @@ export class UserSettingsFolders /*extends AbstractViewSettings*/ {
|
|||
|
||||
this.folderForDeletion = folderForDeletion;
|
||||
|
||||
this.folderForEdit = ko.observable(null).extend({ toggleSubscribeProperty: [this, 'edited'] });
|
||||
this.folderForEdit = ko.observable(null).extend({ toggleSubscribeProperty: [this, 'editing'] });
|
||||
|
||||
SettingsUserStore.hideUnsubscribed.subscribe(value => Remote.saveSetting('HideUnsubscribed', value));
|
||||
}
|
||||
|
||||
folderEditOnEnter(folder) {
|
||||
const nameToEdit = folder ? folder.nameForEdit().trim() : '';
|
||||
|
||||
const nameToEdit = folder?.nameForEdit().trim();
|
||||
if (nameToEdit && folder.name() !== nameToEdit) {
|
||||
Remote.abort('Folders').post('FolderRename', FolderUserStore.foldersRenaming, {
|
||||
Folder: folder.fullName,
|
||||
|
|
@ -88,13 +87,13 @@ export class UserSettingsFolders /*extends AbstractViewSettings*/ {
|
|||
});
|
||||
}
|
||||
|
||||
folder.edited(false);
|
||||
// this.folderForEdit(null);
|
||||
folder.editing(false);
|
||||
}
|
||||
|
||||
folderEditOnEsc(folder) {
|
||||
if (folder) {
|
||||
folder.edited(false);
|
||||
}
|
||||
// this.folderForEdit(null);
|
||||
folder?.editing(false);
|
||||
}
|
||||
|
||||
onShow() {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import ko from 'ko';
|
||||
|
||||
import { SMAudio } from 'Common/Audio';
|
||||
import { SaveSettingsStep } from 'Common/Enums';
|
||||
import { SaveSettingStatus } from 'Common/Enums';
|
||||
import { EditorDefaultType, Layout } from 'Common/EnumsUser';
|
||||
import { Settings, SettingsGet } from 'Common/Globals';
|
||||
import { isArray } from 'Common/Utils';
|
||||
|
|
@ -48,7 +48,7 @@ export class UserSettingsGeneral extends AbstractViewSettings {
|
|||
|
||||
this.allowLanguagesOnSettings = !!SettingsGet('AllowLanguagesOnSettings');
|
||||
|
||||
this.languageTrigger = ko.observable(SaveSettingsStep.Idle);
|
||||
this.languageTrigger = ko.observable(SaveSettingStatus.Idle);
|
||||
|
||||
this.identities = IdentityUserStore;
|
||||
|
||||
|
|
@ -103,14 +103,14 @@ export class UserSettingsGeneral extends AbstractViewSettings {
|
|||
|
||||
const fReloadLanguageHelper = (saveSettingsStep) => () => {
|
||||
this.languageTrigger(saveSettingsStep);
|
||||
setTimeout(() => this.languageTrigger(SaveSettingsStep.Idle), 1000);
|
||||
setTimeout(() => this.languageTrigger(SaveSettingStatus.Idle), 1000);
|
||||
};
|
||||
|
||||
addSubscribablesTo(this, {
|
||||
language: value => {
|
||||
this.languageTrigger(SaveSettingsStep.Animate);
|
||||
this.languageTrigger(SaveSettingStatus.Saving);
|
||||
translatorReload(false, value)
|
||||
.then(fReloadLanguageHelper(SaveSettingsStep.TrueResult), fReloadLanguageHelper(SaveSettingsStep.FalseResult))
|
||||
.then(fReloadLanguageHelper(SaveSettingStatus.Success), fReloadLanguageHelper(SaveSettingStatus.Failed))
|
||||
.then(() => Remote.saveSetting('Language', value));
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { addObservablesTo } from 'External/ko';
|
||||
|
||||
import { SaveSettingsStep, UploadErrorCode } from 'Common/Enums';
|
||||
import { SaveSettingStatus, UploadErrorCode } from 'Common/Enums';
|
||||
import { changeTheme, convertThemeName } from 'Common/Utils';
|
||||
import { themePreviewLink, serverRequest } from 'Common/Links';
|
||||
import { i18n } from 'Common/Translator';
|
||||
|
|
@ -29,7 +29,7 @@ export class UserSettingsThemes /*extends AbstractViewSettings*/ {
|
|||
themeBackground.enabled = SettingsCapa('UserBackground');
|
||||
this.background = themeBackground;
|
||||
|
||||
this.themeTrigger = ko.observable(SaveSettingsStep.Idle).extend({ debounce: 100 });
|
||||
this.themeTrigger = ko.observable(SaveSettingStatus.Idle).extend({ debounce: 100 });
|
||||
|
||||
ThemeStore.theme.subscribe(value => {
|
||||
this.themesObjects.forEach(theme => {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { Settings, SettingsGet } from 'Common/Globals';
|
|||
import { isArray } from 'Common/Utils';
|
||||
|
||||
export const LanguageStore = {
|
||||
language: ko.observable(''),
|
||||
languages: ko.observableArray(),
|
||||
userLanguage: ko.observable(''),
|
||||
|
||||
|
|
@ -13,6 +14,3 @@ export const LanguageStore = {
|
|||
this.userLanguage(SettingsGet('UserLanguage'));
|
||||
}
|
||||
}
|
||||
|
||||
LanguageStore.language = ko.observable('')
|
||||
.extend({ limitedList: LanguageStore.languages });
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { isArray } from 'Common/Utils';
|
|||
import { serverRequestRaw } from 'Common/Links';
|
||||
|
||||
export const ThemeStore = {
|
||||
theme: ko.observable(''),
|
||||
themes: ko.observableArray(),
|
||||
userBackgroundName: ko.observable(''),
|
||||
userBackgroundHash: ko.observable(''),
|
||||
|
|
@ -23,8 +24,6 @@ export const ThemeStore = {
|
|||
}
|
||||
};
|
||||
|
||||
ThemeStore.theme = ko.observable('').extend({ limitedList: ThemeStore.themes });
|
||||
|
||||
ThemeStore.isMobile.subscribe(value => $htmlCL.toggle('rl-mobile', value));
|
||||
|
||||
ThemeStore.userBackgroundHash.subscribe(value => {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import ko from 'ko';
|
||||
import { koComputable } from 'External/ko';
|
||||
|
||||
import { FolderType, FolderSortMode } from 'Common/EnumsUser';
|
||||
import { FolderType } from 'Common/EnumsUser';
|
||||
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
||||
import { forEachObjectEntry } from 'Common/Utils';
|
||||
import { addObservablesTo, addSubscribablesTo, addComputablesTo } from 'External/ko';
|
||||
|
|
@ -44,7 +44,7 @@ export const FolderUserStore = new class {
|
|||
foldersInboxUnreadCount: 0
|
||||
});
|
||||
|
||||
self.sortMode = ko.observable('').extend({ limitedList: Object.values(FolderSortMode) });
|
||||
self.sortMode = ko.observable('');
|
||||
|
||||
self.namespace = '';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import ko from 'ko';
|
||||
import { koComputable } from 'External/ko';
|
||||
|
||||
import { Layout, EditorDefaultType, ComposeType } from 'Common/EnumsUser';
|
||||
import { Layout } from 'Common/EnumsUser';
|
||||
import { pInt } from 'Common/Utils';
|
||||
import { addObservablesTo } from 'External/ko';
|
||||
import { $htmlCL, SettingsGet, fireEvent } from 'Common/Globals';
|
||||
|
|
@ -11,24 +11,6 @@ export const SettingsUserStore = new class {
|
|||
constructor() {
|
||||
const self = this;
|
||||
|
||||
self.layout = ko
|
||||
.observable(1)
|
||||
.extend({ limitedList: Object.values(Layout) });
|
||||
|
||||
self.editorDefaultType = ko.observable('Html').extend({
|
||||
limitedList: [
|
||||
EditorDefaultType.Html,
|
||||
EditorDefaultType.Plain
|
||||
]
|
||||
});
|
||||
|
||||
self.msgDefaultAction = ko.observable(1).extend({
|
||||
limitedList: [
|
||||
ComposeType.Reply,
|
||||
ComposeType.ReplyAll
|
||||
]
|
||||
});
|
||||
|
||||
self.messagesPerPage = ko.observable(25).extend({ debounce: 999 });
|
||||
|
||||
self.messageReadDelay = ko.observable(5).extend({ debounce: 999 });
|
||||
|
|
@ -48,7 +30,11 @@ export const SettingsUserStore = new class {
|
|||
requestReadReceipt: 0,
|
||||
requestDsn: 0,
|
||||
pgpSign: 0,
|
||||
pgpEncrypt: 0
|
||||
pgpEncrypt: 0,
|
||||
|
||||
layout: 1,
|
||||
editorDefaultType: 'Html',
|
||||
msgDefaultAction: 1
|
||||
});
|
||||
|
||||
self.init();
|
||||
|
|
|
|||
|
|
@ -23,8 +23,7 @@
|
|||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.folder-name.can-be-edited:hover {
|
||||
text-decoration-style: dashed;
|
||||
.folder-name.can-be-edited {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -126,10 +126,7 @@ const
|
|||
}
|
||||
},
|
||||
|
||||
isPlainEditor = () => {
|
||||
let type = SettingsUserStore.editorDefaultType();
|
||||
return EditorDefaultType.Html !== type;
|
||||
},
|
||||
isPlainEditor = () => EditorDefaultType.Plain === SettingsUserStore.editorDefaultType(),
|
||||
|
||||
/**
|
||||
* @param {string} prefix
|
||||
|
|
@ -966,10 +963,7 @@ export class ComposePopupView extends AbstractViewPopup {
|
|||
this.editor(editor => {
|
||||
encrypted || editor.setHtml(sText);
|
||||
|
||||
if (encrypted
|
||||
|| EditorDefaultType.Plain === SettingsUserStore.editorDefaultType()
|
||||
|| !message.isHtml()
|
||||
) {
|
||||
if (encrypted || this.isPlainEditor() || !message.isHtml()) {
|
||||
editor.modePlain();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "\"%EMAIL%\" إعادة توجيه الى",
|
||||
"SUBNAME_REJECT": "رفض",
|
||||
"SUBNAME_VACATION_MESSAGE": "رسالة العطلة",
|
||||
"SUBNAME_DISCARD": "تجاهل",
|
||||
"LOADING_PROCESS": "تحديث قائمة عوامل التصفية"
|
||||
"SUBNAME_DISCARD": "تجاهل"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "الأمان",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Препрати към \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Откажи",
|
||||
"SUBNAME_VACATION_MESSAGE": "Съобщение в отпуска",
|
||||
"SUBNAME_DISCARD": "Отхвърли",
|
||||
"LOADING_PROCESS": "Обнови списъка с филтри"
|
||||
"SUBNAME_DISCARD": "Отхвърли"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Сигурност",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Přeposlat to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Odmítnout",
|
||||
"SUBNAME_VACATION_MESSAGE": "Odpověď v nepřítomnosti",
|
||||
"SUBNAME_DISCARD": "Zahodit",
|
||||
"LOADING_PROCESS": "Aktualizovat seznam filtrů"
|
||||
"SUBNAME_DISCARD": "Zahodit"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Zabezpečení",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Videresend til \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Afvis",
|
||||
"SUBNAME_VACATION_MESSAGE": "Feriemeddelelse",
|
||||
"SUBNAME_DISCARD": "Kassér",
|
||||
"LOADING_PROCESS": "Opdater oversigten over filtre"
|
||||
"SUBNAME_DISCARD": "Kassér"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Sikkerhed",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Weiterleiten nach \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Ablehnen",
|
||||
"SUBNAME_VACATION_MESSAGE": "Urlaubsbenachrichtigung",
|
||||
"SUBNAME_DISCARD": "Verwerfen",
|
||||
"LOADING_PROCESS": "Aktualisiere Filterliste"
|
||||
"SUBNAME_DISCARD": "Verwerfen"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Sicherheit",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Προώθηση στο \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Απόρριψη",
|
||||
"SUBNAME_VACATION_MESSAGE": "Μήνυμα διακοπών",
|
||||
"SUBNAME_DISCARD": "Απόρριψη",
|
||||
"LOADING_PROCESS": "Ενημέρωση λίστας φίλτρων"
|
||||
"SUBNAME_DISCARD": "Απόρριψη"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Ασφάλεια",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Forward to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Reject",
|
||||
"SUBNAME_VACATION_MESSAGE": "Vacation message",
|
||||
"SUBNAME_DISCARD": "Discard",
|
||||
"LOADING_PROCESS": "Updating filter list"
|
||||
"SUBNAME_DISCARD": "Discard"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Security",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Forward to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Reject",
|
||||
"SUBNAME_VACATION_MESSAGE": "Vacation message",
|
||||
"SUBNAME_DISCARD": "Discard",
|
||||
"LOADING_PROCESS": "Updating filter list"
|
||||
"SUBNAME_DISCARD": "Discard"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Security",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Reenviar a \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Rechazar",
|
||||
"SUBNAME_VACATION_MESSAGE": "Mensaje de vacaciones",
|
||||
"SUBNAME_DISCARD": "Descartar",
|
||||
"LOADING_PROCESS": "Actualizando lista de filtros"
|
||||
"SUBNAME_DISCARD": "Descartar"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Seguridad",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Edasta aadressile \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Lükka tagasi",
|
||||
"SUBNAME_VACATION_MESSAGE": "Puhkuse teade",
|
||||
"SUBNAME_DISCARD": "Hülga",
|
||||
"LOADING_PROCESS": "Värskendan filtrite nimekirja"
|
||||
"SUBNAME_DISCARD": "Hülga"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Turvalisus",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "ارسال به \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "برگشتزدن",
|
||||
"SUBNAME_VACATION_MESSAGE": "پیام تعطیلات",
|
||||
"SUBNAME_DISCARD": "دور انداختن",
|
||||
"LOADING_PROCESS": "بروزرسانی لیست فیلتر"
|
||||
"SUBNAME_DISCARD": "دور انداختن"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "امنیت",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Välitä osoitteeseen \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Hylkää",
|
||||
"SUBNAME_VACATION_MESSAGE": "Lomaviesti",
|
||||
"SUBNAME_DISCARD": "Poista",
|
||||
"LOADING_PROCESS": "Asetetaan suodattimet"
|
||||
"SUBNAME_DISCARD": "Poista"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Turvallisuus",
|
||||
|
|
|
|||
|
|
@ -379,8 +379,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Faire suivre à \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Rejeter",
|
||||
"SUBNAME_VACATION_MESSAGE": "Message d'absence",
|
||||
"SUBNAME_DISCARD": "Exclure",
|
||||
"LOADING_PROCESS": "Mise à jour de la liste de filtres"
|
||||
"SUBNAME_DISCARD": "Exclure"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Sécurité",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Továbbítás ide: \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Visszautasít",
|
||||
"SUBNAME_VACATION_MESSAGE": "Vakáció üzenet",
|
||||
"SUBNAME_DISCARD": "Elvetés",
|
||||
"LOADING_PROCESS": "Szűrő lista frissítése"
|
||||
"SUBNAME_DISCARD": "Elvetés"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Biztonság",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Teruskan ke \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Tolak",
|
||||
"SUBNAME_VACATION_MESSAGE": "Pesan liburan",
|
||||
"SUBNAME_DISCARD": "Buang",
|
||||
"LOADING_PROCESS": "Perbarui daftar filter"
|
||||
"SUBNAME_DISCARD": "Buang"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Keamanan",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Áframsenda til \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Hafna",
|
||||
"SUBNAME_VACATION_MESSAGE": "Skilaboð vegna fría",
|
||||
"SUBNAME_DISCARD": "Henda",
|
||||
"LOADING_PROCESS": "Uppfæri síulista"
|
||||
"SUBNAME_DISCARD": "Henda"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Öryggi",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Inoltra a \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Rifiuta",
|
||||
"SUBNAME_VACATION_MESSAGE": "Messaggio fuori-ufficio",
|
||||
"SUBNAME_DISCARD": "Scarta",
|
||||
"LOADING_PROCESS": "Aggiornamento lista filtri"
|
||||
"SUBNAME_DISCARD": "Scarta"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Sicurezza",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "\"%EMAIL%\"へ転送",
|
||||
"SUBNAME_REJECT": "拒否",
|
||||
"SUBNAME_VACATION_MESSAGE": "バケーションメッセージ",
|
||||
"SUBNAME_DISCARD": "破棄",
|
||||
"LOADING_PROCESS": "フィルターリストの更新中"
|
||||
"SUBNAME_DISCARD": "破棄"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "セキュリティ",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "\"%EMAIL%\"(으)로 전달",
|
||||
"SUBNAME_REJECT": "거부",
|
||||
"SUBNAME_VACATION_MESSAGE": "부재 중 메시지",
|
||||
"SUBNAME_DISCARD": "Discard",
|
||||
"LOADING_PROCESS": "필터 목록 업데이트 중"
|
||||
"SUBNAME_DISCARD": "Discard"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "보안",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "persiūsti \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Atmesti",
|
||||
"SUBNAME_VACATION_MESSAGE": "Atostogų žinutė",
|
||||
"SUBNAME_DISCARD": "Nepaisyti",
|
||||
"LOADING_PROCESS": "Atnaujinamas filtrų sąrašas"
|
||||
"SUBNAME_DISCARD": "Nepaisyti"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Sauga",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Forward to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Reject",
|
||||
"SUBNAME_VACATION_MESSAGE": "Vacation message",
|
||||
"SUBNAME_DISCARD": "Discard",
|
||||
"LOADING_PROCESS": "Updating filter list"
|
||||
"SUBNAME_DISCARD": "Discard"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Security",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Videresend til «%EMAIL%»",
|
||||
"SUBNAME_REJECT": "Avvis",
|
||||
"SUBNAME_VACATION_MESSAGE": "Feriemelding",
|
||||
"SUBNAME_DISCARD": "Forkast",
|
||||
"LOADING_PROCESS": "Oppdater filterliste"
|
||||
"SUBNAME_DISCARD": "Forkast"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Sikkerhet",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Doorsturen naar \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Afwijzen",
|
||||
"SUBNAME_VACATION_MESSAGE": "Afwezigheidsbericht",
|
||||
"SUBNAME_DISCARD": "Gooi weg",
|
||||
"LOADING_PROCESS": "Bezig met updaten van de filter lijst"
|
||||
"SUBNAME_DISCARD": "Gooi weg"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Beveiliging",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Przekaż do \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Odrzuć",
|
||||
"SUBNAME_VACATION_MESSAGE": "Wiadomość urlopowa",
|
||||
"SUBNAME_DISCARD": "Porzuć",
|
||||
"LOADING_PROCESS": "Aktualizowanie listy filtrów"
|
||||
"SUBNAME_DISCARD": "Porzuć"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Bezpieczeństwo",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Encaminhar para \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Rejeitar",
|
||||
"SUBNAME_VACATION_MESSAGE": "Mensagem de férias",
|
||||
"SUBNAME_DISCARD": "Descartar",
|
||||
"LOADING_PROCESS": "Atualizando Lista de filtros"
|
||||
"SUBNAME_DISCARD": "Descartar"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Segurança",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Encaminhar para \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Rejeitar",
|
||||
"SUBNAME_VACATION_MESSAGE": "Mensagem de férias",
|
||||
"SUBNAME_DISCARD": "Descartar",
|
||||
"LOADING_PROCESS": "A atualizar lista de filtros"
|
||||
"SUBNAME_DISCARD": "Descartar"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Segurança",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Encaminhar para \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Rejeitar",
|
||||
"SUBNAME_VACATION_MESSAGE": "Mensagem de férias",
|
||||
"SUBNAME_DISCARD": "Descartar",
|
||||
"LOADING_PROCESS": "A atualizar lista de filtros"
|
||||
"SUBNAME_DISCARD": "Descartar"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Segurança",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Forward to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Reject",
|
||||
"SUBNAME_VACATION_MESSAGE": "Vacation message",
|
||||
"SUBNAME_DISCARD": "Discard",
|
||||
"LOADING_PROCESS": "Updating filter list"
|
||||
"SUBNAME_DISCARD": "Discard"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Security",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Переслать на \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Не принимать",
|
||||
"SUBNAME_VACATION_MESSAGE": "Сообщение автоответчика",
|
||||
"SUBNAME_DISCARD": "Уничтожить",
|
||||
"LOADING_PROCESS": "Обновление списка фильтров"
|
||||
"SUBNAME_DISCARD": "Уничтожить"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Безопасность",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Forward to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Reject",
|
||||
"SUBNAME_VACATION_MESSAGE": "Vacation message",
|
||||
"SUBNAME_DISCARD": "Discard",
|
||||
"LOADING_PROCESS": "Updating filter list"
|
||||
"SUBNAME_DISCARD": "Discard"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Security",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Posreduj na \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Zavrni",
|
||||
"SUBNAME_VACATION_MESSAGE": "Sporočilo odsotnosti",
|
||||
"SUBNAME_DISCARD": "Zavrzi",
|
||||
"LOADING_PROCESS": "Posodabljanje seznama filtrov"
|
||||
"SUBNAME_DISCARD": "Zavrzi"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Varnost",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Vidarebefordra till \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Avvisa",
|
||||
"SUBNAME_VACATION_MESSAGE": "semestermeddelande",
|
||||
"SUBNAME_DISCARD": "Kassera",
|
||||
"LOADING_PROCESS": "Uppdaterar filter listan"
|
||||
"SUBNAME_DISCARD": "Kassera"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Säkerhet",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Forward to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Reject",
|
||||
"SUBNAME_VACATION_MESSAGE": "Vacation message",
|
||||
"SUBNAME_DISCARD": "Discard",
|
||||
"LOADING_PROCESS": "Updating filter list"
|
||||
"SUBNAME_DISCARD": "Discard"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Security",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Forward to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Reject",
|
||||
"SUBNAME_VACATION_MESSAGE": "Повідомлення про відпустку",
|
||||
"SUBNAME_DISCARD": "Відклонити",
|
||||
"LOADING_PROCESS": "Updating filter list"
|
||||
"SUBNAME_DISCARD": "Відклонити"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Безпека",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Chuyển tiếp đến \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Từ chối",
|
||||
"SUBNAME_VACATION_MESSAGE": "Thư thông báo bạn đang nghỉ lễ",
|
||||
"SUBNAME_DISCARD": "Loại bỏ",
|
||||
"LOADING_PROCESS": "Đang cập nhật danh sách tấm lọc thư"
|
||||
"SUBNAME_DISCARD": "Loại bỏ"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "An ninh",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "转发到 \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "拒绝",
|
||||
"SUBNAME_VACATION_MESSAGE": "假期自动回复",
|
||||
"SUBNAME_DISCARD": "取消",
|
||||
"LOADING_PROCESS": "正在更新筛选规则列表"
|
||||
"SUBNAME_DISCARD": "取消"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "安全",
|
||||
|
|
|
|||
|
|
@ -378,8 +378,7 @@
|
|||
"SUBNAME_FORWARD_TO": "Forward to \"%EMAIL%\"",
|
||||
"SUBNAME_REJECT": "Reject",
|
||||
"SUBNAME_VACATION_MESSAGE": "Vacation message",
|
||||
"SUBNAME_DISCARD": "Discard",
|
||||
"LOADING_PROCESS": "Updating filter list"
|
||||
"SUBNAME_DISCARD": "Discard"
|
||||
},
|
||||
"SETTINGS_SECURITY": {
|
||||
"LEGEND_SECURITY": "Security",
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
<tr data-bind="css: { 'selectable': selectable, 'system': isSystemFolder }">
|
||||
<td data-bind="css: 'deep-' + deep">
|
||||
<span class="folder-name" data-bind="text: name, visible: !edited(), css: { 'can-be-edited': canBeEdited },
|
||||
<span class="folder-name" data-bind="text: name, visible: !editing(), css: { 'can-be-edited': canBeEdited },
|
||||
click: function (oFolder) { oFolder.canBeEdited() && $root.folderForEdit(oFolder); },
|
||||
tooltipErrorTip: errorMsg"></span>
|
||||
<input type="text"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="value: nameForEdit, visible: edited, hasfocus: edited, onEnter: function () { $root.folderEditOnEnter($data); }">
|
||||
data-bind="value: nameForEdit, visible: editing, hasfocus: editing, onEnter: function () { $root.folderEditOnEnter($data); }, onEsc: function () { $root.folderEditOnEsc($data); }">
|
||||
|
||||
<span class="folder-system-name" data-bind="text: manageFolderSystemName, visible: isSystemFolder"></span>
|
||||
</td>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue