Cleanup and better rename settings screens to match template names

This commit is contained in:
the-djmaze 2022-03-08 00:51:32 +01:00
parent 30116c183f
commit 4dd58f7c36
83 changed files with 267 additions and 323 deletions

View file

@ -26,8 +26,6 @@ export class AbstractScreen {
* @returns {void} * @returns {void}
*/ */
onStart() { onStart() {
if (!this.__started) {
this.__started = true;
const routes = this.routes(); const routes = this.routes();
if (arrayLength(routes)) { if (arrayLength(routes)) {
let route = new Crossroads(), let route = new Crossroads(),
@ -38,5 +36,4 @@ export class AbstractScreen {
this.__cross = route; this.__cross = route;
} }
} }
}
} }

View file

@ -10,6 +10,7 @@ class AbstractView {
constructor(templateID, type) constructor(templateID, type)
{ {
// Object.defineProperty(this, 'viewModelTemplateID', { value: templateID }); // Object.defineProperty(this, 'viewModelTemplateID', { value: templateID });
// this.viewModelTemplateID = this.constructor.name;
this.viewModelTemplateID = templateID; this.viewModelTemplateID = templateID;
this.viewType = type; this.viewType = type;
this.viewModelDom = null; this.viewModelDom = null;

View file

@ -278,7 +278,12 @@ export const
} }
}); });
forEachObjectValue(SCREENS, vmScreen => vmScreen.onStart()); forEachObjectValue(SCREENS, vmScreen => {
if (!vmScreen.__started) {
vmScreen.onStart();
vmScreen.__started = true;
}
});
const cross = new Crossroads(); const cross = new Crossroads();
cross.addRoute(/^([a-zA-Z0-9-]*)\/?(.*)$/, screenOnRoute); cross.addRoute(/^([a-zA-Z0-9-]*)\/?(.*)$/, screenOnRoute);

View file

@ -28,7 +28,7 @@ export class AbstractSettingsScreen extends AbstractScreen {
); );
if (RoutedSettingsViewModel) { if (RoutedSettingsViewModel) {
if (RoutedSettingsViewModel.__builded && RoutedSettingsViewModel.__vm) { if (RoutedSettingsViewModel.__vm) {
settingsScreen = RoutedSettingsViewModel.__vm; settingsScreen = RoutedSettingsViewModel.__vm;
} else { } else {
const vmPlace = elementById('rl-settings-subscreen'); const vmPlace = elementById('rl-settings-subscreen');
@ -43,7 +43,6 @@ export class AbstractSettingsScreen extends AbstractScreen {
settingsScreen.viewModelDom = viewModelDom; settingsScreen.viewModelDom = viewModelDom;
RoutedSettingsViewModel.__dom = viewModelDom; RoutedSettingsViewModel.__dom = viewModelDom;
RoutedSettingsViewModel.__builded = true;
RoutedSettingsViewModel.__vm = settingsScreen; RoutedSettingsViewModel.__vm = settingsScreen;
ko.applyBindingAccessorsToNode( ko.applyBindingAccessorsToNode(
@ -132,11 +131,12 @@ export class AbstractSettingsScreen extends AbstractScreen {
* @returns {void} * @returns {void}
*/ */
export function settingsAddViewModel(SettingsViewModelClass, template, labelName, route, isDefault = false) { export function settingsAddViewModel(SettingsViewModelClass, template, labelName, route, isDefault = false) {
let name = SettingsViewModelClass.name.replace(/(User|Admin)Settings/, '');
SettingsViewModelClass.__rlSettingsData = { SettingsViewModelClass.__rlSettingsData = {
label: labelName, label: labelName || 'SETTINGS_LABELS/LABEL_' + name.toUpperCase() + '_NAME',
route: route, route: route || name.toLowerCase(),
selected: ko.observable(false), selected: ko.observable(false),
template: template, template: template || SettingsViewModelClass.name,
isDefault: !!isDefault isDefault: !!isDefault
}; };

View file

@ -2,15 +2,15 @@ import { runSettingsViewModelHooks } from 'Common/Plugins';
import { AbstractSettingsScreen, settingsAddViewModel } from 'Screen/AbstractSettings'; import { AbstractSettingsScreen, settingsAddViewModel } from 'Screen/AbstractSettings';
import { GeneralAdminSettings } from 'Settings/Admin/General'; import { AdminSettingsGeneral } from 'Settings/Admin/General';
import { DomainsAdminSettings } from 'Settings/Admin/Domains'; import { AdminSettingsDomains } from 'Settings/Admin/Domains';
import { LoginAdminSettings } from 'Settings/Admin/Login'; import { AdminSettingsLogin } from 'Settings/Admin/Login';
import { ContactsAdminSettings } from 'Settings/Admin/Contacts'; import { AdminSettingsContacts } from 'Settings/Admin/Contacts';
import { SecurityAdminSettings } from 'Settings/Admin/Security'; import { AdminSettingsSecurity } from 'Settings/Admin/Security';
import { PackagesAdminSettings } from 'Settings/Admin/Packages'; import { AdminSettingsPackages } from 'Settings/Admin/Packages';
import { AboutAdminSettings } from 'Settings/Admin/About'; import { AdminSettingsAbout } from 'Settings/Admin/About';
import { BrandingAdminSettings } from 'Settings/Admin/Branding'; import { AdminSettingsBranding } from 'Settings/Admin/Branding';
import { ConfigAdminSettings } from 'Settings/Admin/Config'; import { AdminSettingsConfig } from 'Settings/Admin/Config';
import { MenuSettingsAdminView } from 'View/Admin/Settings/Menu'; import { MenuSettingsAdminView } from 'View/Admin/Settings/Menu';
import { PaneSettingsAdminView } from 'View/Admin/Settings/Pane'; import { PaneSettingsAdminView } from 'View/Admin/Settings/Pane';
@ -19,30 +19,18 @@ export class SettingsAdminScreen extends AbstractSettingsScreen {
constructor() { constructor() {
super([MenuSettingsAdminView, PaneSettingsAdminView]); super([MenuSettingsAdminView, PaneSettingsAdminView]);
settingsAddViewModel(
GeneralAdminSettings,
'AdminSettingsGeneral',
'TABS_LABELS/LABEL_GENERAL_NAME',
'general',
true
);
[ [
[DomainsAdminSettings, 'Domains'], AdminSettingsGeneral,
[LoginAdminSettings, 'Login'], AdminSettingsDomains,
[BrandingAdminSettings, 'Branding'], AdminSettingsLogin,
[ContactsAdminSettings, 'Contacts'], AdminSettingsBranding,
[SecurityAdminSettings, 'Security'], AdminSettingsContacts,
[PackagesAdminSettings, 'Packages'], AdminSettingsSecurity,
[ConfigAdminSettings, 'Config'], AdminSettingsPackages,
[AboutAdminSettings, 'About'], AdminSettingsConfig,
].forEach(item => AdminSettingsAbout
settingsAddViewModel( ].forEach((item, index) =>
item[0], settingsAddViewModel(item, 0, 0, 0, 0 === index)
'AdminSettings'+item[1],
'TABS_LABELS/LABEL_'+item[1].toUpperCase()+'_NAME',
item[1].toLowerCase()
)
); );
runSettingsViewModelHooks(true); runSettingsViewModelHooks(true);

View file

@ -82,7 +82,6 @@ export class MailBoxUserScreen extends AbstractScreen {
* @returns {void} * @returns {void}
*/ */
onStart() { onStart() {
if (!this.__started) {
super.onStart(); super.onStart();
addEventListener('mailbox.inbox-unread-count', e => { addEventListener('mailbox.inbox-unread-count', e => {
@ -96,7 +95,6 @@ export class MailBoxUserScreen extends AbstractScreen {
this.updateWindowTitle(); this.updateWindowTitle();
}); });
} }
}
/** /**
* @returns {void} * @returns {void}

View file

@ -9,14 +9,13 @@ import { ThemeStore } from 'Stores/Theme';
import { AbstractSettingsScreen, settingsAddViewModel } from 'Screen/AbstractSettings'; import { AbstractSettingsScreen, settingsAddViewModel } from 'Screen/AbstractSettings';
import { GeneralUserSettings } from 'Settings/User/General'; import { UserSettingsGeneral } from 'Settings/User/General';
import { ContactsUserSettings } from 'Settings/User/Contacts'; import { UserSettingsContacts } from 'Settings/User/Contacts';
import { AccountsUserSettings } from 'Settings/User/Accounts'; import { UserSettingsAccounts } from 'Settings/User/Accounts';
import { FiltersUserSettings } from 'Settings/User/Filters'; import { UserSettingsFilters } from 'Settings/User/Filters';
import { SecurityUserSettings } from 'Settings/User/Security'; import { UserSettingsSecurity } from 'Settings/User/Security';
import { FoldersUserSettings } from 'Settings/User/Folders'; import { UserSettingsFolders } from 'Settings/User/Folders';
import { ThemesUserSettings } from 'Settings/User/Themes'; import { UserSettingsThemes } from 'Settings/User/Themes';
import { OpenPgpUserSettings } from 'Settings/User/OpenPgp';
import { SystemDropDownUserView } from 'View/User/SystemDropDown'; import { SystemDropDownUserView } from 'View/User/SystemDropDown';
import { MenuSettingsUserView } from 'View/User/Settings/Menu'; import { MenuSettingsUserView } from 'View/User/Settings/Menu';
@ -26,40 +25,35 @@ export class SettingsUserScreen extends AbstractSettingsScreen {
constructor() { constructor() {
super([SystemDropDownUserView, MenuSettingsUserView, PaneSettingsUserView]); super([SystemDropDownUserView, MenuSettingsUserView, PaneSettingsUserView]);
settingsAddViewModel(GeneralUserSettings, 'SettingsGeneral', 'SETTINGS_LABELS/LABEL_GENERAL_NAME', 'general', true); const views = [
UserSettingsGeneral
];
if (AppUserStore.allowContacts()) { if (AppUserStore.allowContacts()) {
settingsAddViewModel(ContactsUserSettings, 'SettingsContacts', 'SETTINGS_LABELS/LABEL_CONTACTS_NAME', 'contacts'); views.push(UserSettingsContacts);
} }
if (SettingsCapa('AdditionalAccounts') || SettingsCapa('Identities')) { if (SettingsCapa('AdditionalAccounts') || SettingsCapa('Identities')) {
settingsAddViewModel( views.push(UserSettingsAccounts);
AccountsUserSettings,
'SettingsAccounts',
SettingsCapa('AdditionalAccounts')
? 'SETTINGS_LABELS/LABEL_ACCOUNTS_NAME'
: 'SETTINGS_LABELS/LABEL_IDENTITIES_NAME',
'accounts'
);
} }
if (SettingsCapa('Sieve')) { if (SettingsCapa('Sieve')) {
settingsAddViewModel(FiltersUserSettings, 'SettingsFilters', 'SETTINGS_LABELS/LABEL_FILTERS_NAME', 'filters'); views.push(UserSettingsFilters);
} }
if (SettingsCapa('AutoLogout')) { if (SettingsCapa('AutoLogout') || SettingsCapa('OpenPGP') || SettingsCapa('GnuPG')) {
settingsAddViewModel(SecurityUserSettings, 'SettingsSecurity', 'SETTINGS_LABELS/LABEL_SECURITY_NAME', 'security'); views.push(UserSettingsSecurity);
} }
settingsAddViewModel(FoldersUserSettings, 'SettingsFolders', 'SETTINGS_LABELS/LABEL_FOLDERS_NAME', 'folders'); views.push(UserSettingsFolders);
if (SettingsCapa('Themes')) { if (SettingsCapa('Themes')) {
settingsAddViewModel(ThemesUserSettings, 'SettingsThemes', 'SETTINGS_LABELS/LABEL_THEMES_NAME', 'themes'); views.push(UserSettingsThemes);
} }
if (SettingsCapa('OpenPGP') || SettingsCapa('GnuPG')) { views.forEach((item, index) =>
settingsAddViewModel(OpenPgpUserSettings, 'SettingsOpenPGP', 'OpenPGP', 'openpgp'); settingsAddViewModel(item, item.name.replace('User', ''), 0, 0, 0 === index)
} );
runSettingsViewModelHooks(false); runSettingsViewModelHooks(false);

View file

@ -2,7 +2,7 @@ import ko from 'ko';
import { Settings } from 'Common/Globals'; import { Settings } from 'Common/Globals';
import Remote from 'Remote/Admin/Fetch'; import Remote from 'Remote/Admin/Fetch';
export class AboutAdminSettings /*extends AbstractViewSettings*/ { export class AdminSettingsAbout /*extends AbstractViewSettings*/ {
constructor() { constructor() {
this.version = Settings.app('version'); this.version = Settings.app('version');
this.phpextensions = ko.observableArray(); this.phpextensions = ko.observableArray();

View file

@ -1,6 +1,6 @@
import { AbstractViewSettings } from 'Knoin/AbstractViews'; import { AbstractViewSettings } from 'Knoin/AbstractViews';
export class BrandingAdminSettings extends AbstractViewSettings { export class AdminSettingsBranding extends AbstractViewSettings {
constructor() { constructor() {
super(); super();
this.addSetting('Title'); this.addSetting('Title');

View file

@ -3,7 +3,7 @@ import ko from 'ko';
import Remote from 'Remote/Admin/Fetch'; import Remote from 'Remote/Admin/Fetch';
import { forEachObjectEntry } from 'Common/Utils'; import { forEachObjectEntry } from 'Common/Utils';
export class ConfigAdminSettings /*extends AbstractViewSettings*/ { export class AdminSettingsConfig /*extends AbstractViewSettings*/ {
constructor() { constructor() {
this.config = ko.observableArray(); this.config = ko.observableArray();

View file

@ -8,7 +8,7 @@ import Remote from 'Remote/Admin/Fetch';
import { decorateKoCommands } from 'Knoin/Knoin'; import { decorateKoCommands } from 'Knoin/Knoin';
import { AbstractViewSettings } from 'Knoin/AbstractViews'; import { AbstractViewSettings } from 'Knoin/AbstractViews';
export class ContactsAdminSettings extends AbstractViewSettings { export class AdminSettingsContacts extends AbstractViewSettings {
constructor() { constructor() {
super(); super();
this.defaultOptionsAfterRender = defaultOptionsAfterRender; this.defaultOptionsAfterRender = defaultOptionsAfterRender;

View file

@ -8,7 +8,7 @@ import Remote from 'Remote/Admin/Fetch';
import { DomainPopupView } from 'View/Popup/Domain'; import { DomainPopupView } from 'View/Popup/Domain';
import { DomainAliasPopupView } from 'View/Popup/DomainAlias'; import { DomainAliasPopupView } from 'View/Popup/DomainAlias';
export class DomainsAdminSettings /*extends AbstractViewSettings*/ { export class AdminSettingsDomains /*extends AbstractViewSettings*/ {
constructor() { constructor() {
this.domains = DomainAdminStore; this.domains = DomainAdminStore;

View file

@ -21,7 +21,7 @@ import { ThemeStore } from 'Stores/Theme';
import { LanguageStore } from 'Stores/Language'; import { LanguageStore } from 'Stores/Language';
import { LanguagesPopupView } from 'View/Popup/Languages'; import { LanguagesPopupView } from 'View/Popup/Languages';
export class GeneralAdminSettings extends AbstractViewSettings { export class AdminSettingsGeneral extends AbstractViewSettings {
constructor() { constructor() {
super(); super();

View file

@ -1,6 +1,6 @@
import { AbstractViewSettings } from 'Knoin/AbstractViews'; import { AbstractViewSettings } from 'Knoin/AbstractViews';
export class LoginAdminSettings extends AbstractViewSettings { export class AdminSettingsLogin extends AbstractViewSettings {
constructor() { constructor() {
super(); super();
this.addSetting('LoginDefaultDomain'); this.addSetting('LoginDefaultDomain');

View file

@ -11,7 +11,7 @@ import { PluginPopupView } from 'View/Popup/Plugin';
import { addObservablesTo, addComputablesTo } from 'External/ko'; import { addObservablesTo, addComputablesTo } from 'External/ko';
import { AbstractViewSettings } from 'Knoin/AbstractViews'; import { AbstractViewSettings } from 'Knoin/AbstractViews';
export class PackagesAdminSettings extends AbstractViewSettings { export class AdminSettingsPackages extends AbstractViewSettings {
constructor() { constructor() {
super(); super();

View file

@ -6,7 +6,7 @@ import Remote from 'Remote/Admin/Fetch';
import { decorateKoCommands } from 'Knoin/Knoin'; import { decorateKoCommands } from 'Knoin/Knoin';
import { AbstractViewSettings } from 'Knoin/AbstractViews'; import { AbstractViewSettings } from 'Knoin/AbstractViews';
export class SecurityAdminSettings extends AbstractViewSettings { export class AdminSettingsSecurity extends AbstractViewSettings {
constructor() { constructor() {
super(); super();

View file

@ -11,7 +11,7 @@ import { showScreenPopup } from 'Knoin/Knoin';
import { AccountPopupView } from 'View/Popup/Account'; import { AccountPopupView } from 'View/Popup/Account';
import { IdentityPopupView } from 'View/Popup/Identity'; import { IdentityPopupView } from 'View/Popup/Identity';
export class AccountsUserSettings /*extends AbstractViewSettings*/ { export class UserSettingsAccounts /*extends AbstractViewSettings*/ {
constructor() { constructor() {
this.allowAdditionalAccount = SettingsCapa('AdditionalAccounts'); this.allowAdditionalAccount = SettingsCapa('AdditionalAccounts');
this.allowIdentities = SettingsCapa('Identities'); this.allowIdentities = SettingsCapa('Identities');

View file

@ -5,7 +5,7 @@ import { SettingsGet } from 'Common/Globals';
import { ContactUserStore } from 'Stores/User/Contact'; import { ContactUserStore } from 'Stores/User/Contact';
import Remote from 'Remote/User/Fetch'; import Remote from 'Remote/User/Fetch';
export class ContactsUserSettings /*extends AbstractViewSettings*/ { export class UserSettingsContacts /*extends AbstractViewSettings*/ {
constructor() { constructor() {
this.contactsAutosave = ko.observable(!!SettingsGet('ContactsAutosave')); this.contactsAutosave = ko.observable(!!SettingsGet('ContactsAutosave'));

View file

@ -11,7 +11,7 @@ import { showScreenPopup } from 'Knoin/Knoin';
import { SieveScriptPopupView } from 'View/Popup/SieveScript'; import { SieveScriptPopupView } from 'View/Popup/SieveScript';
export class FiltersUserSettings /*extends AbstractViewSettings*/ { export class UserSettingsFilters /*extends AbstractViewSettings*/ {
constructor() { constructor() {
this.scripts = SieveUserStore.scripts; this.scripts = SieveUserStore.scripts;
this.loading = ko.observable(false).extend({ debounce: 200 }); this.loading = ko.observable(false).extend({ debounce: 200 });

View file

@ -24,7 +24,7 @@ import { loadFolders } from 'Model/FolderCollection';
const folderForDeletion = ko.observable(null).askDeleteHelper(); const folderForDeletion = ko.observable(null).askDeleteHelper();
export class FoldersUserSettings /*extends AbstractViewSettings*/ { export class UserSettingsFolders /*extends AbstractViewSettings*/ {
constructor() { constructor() {
this.showKolab = koComputable(() => FolderUserStore.hasCapability('METADATA') && SettingsCapa('Kolab')); this.showKolab = koComputable(() => FolderUserStore.hasCapability('METADATA') && SettingsCapa('Kolab'));
this.defaultOptionsAfterRender = defaultOptionsAfterRender; this.defaultOptionsAfterRender = defaultOptionsAfterRender;

View file

@ -23,7 +23,7 @@ import Remote from 'Remote/User/Fetch';
import { IdentityPopupView } from 'View/Popup/Identity'; import { IdentityPopupView } from 'View/Popup/Identity';
import { LanguagesPopupView } from 'View/Popup/Languages'; import { LanguagesPopupView } from 'View/Popup/Languages';
export class GeneralUserSettings extends AbstractViewSettings { export class UserSettingsGeneral extends AbstractViewSettings {
constructor() { constructor() {
super(); super();

View file

@ -1,46 +0,0 @@
import { GnuPGUserStore } from 'Stores/User/GnuPG';
import { OpenPGPUserStore } from 'Stores/User/OpenPGP';
import { SettingsUserStore } from 'Stores/User/Settings';
import Remote from 'Remote/User/Fetch';
import { showScreenPopup } from 'Knoin/Knoin';
import { OpenPgpImportPopupView } from 'View/Popup/OpenPgpImport';
import { OpenPgpGeneratePopupView } from 'View/Popup/OpenPgpGenerate';
import { SettingsCapa } from 'Common/Globals';
export class OpenPgpUserSettings /*extends AbstractViewSettings*/ {
constructor() {
this.gnupgPublicKeys = GnuPGUserStore.publicKeys;
this.gnupgPrivateKeys = GnuPGUserStore.privateKeys;
this.openpgpkeysPublic = OpenPGPUserStore.publicKeys;
this.openpgpkeysPrivate = OpenPGPUserStore.privateKeys;
this.canOpenPGP = SettingsCapa('OpenPGP');
this.canGnuPG = GnuPGUserStore.isSupported();
this.canMailvelope = !!window.mailvelope;
this.allowDraftAutosave = SettingsUserStore.allowDraftAutosave;
this.allowDraftAutosave.subscribe(value => Remote.saveSetting('AllowDraftAutosave', value))
}
addOpenPgpKey() {
showScreenPopup(OpenPgpImportPopupView);
}
generateOpenPgpKey() {
showScreenPopup(OpenPgpGeneratePopupView);
}
onBuild() {
/**
* Create an iframe to display the Mailvelope keyring settings.
* The iframe will be injected into the container identified by selector.
*/
window.mailvelope && mailvelope.createSettingsContainer('#mailvelope-settings'/*[, keyring], options*/);
}
}

View file

@ -7,7 +7,17 @@ import { AbstractViewSettings } from 'Knoin/AbstractViews';
import { SettingsUserStore } from 'Stores/User/Settings'; import { SettingsUserStore } from 'Stores/User/Settings';
export class SecurityUserSettings extends AbstractViewSettings { import { GnuPGUserStore } from 'Stores/User/GnuPG';
import { OpenPGPUserStore } from 'Stores/User/OpenPGP';
import Remote from 'Remote/User/Fetch';
import { showScreenPopup } from 'Knoin/Knoin';
import { OpenPgpImportPopupView } from 'View/Popup/OpenPgpImport';
import { OpenPgpGeneratePopupView } from 'View/Popup/OpenPgpGenerate';
export class UserSettingsSecurity extends AbstractViewSettings {
constructor() { constructor() {
super(); super();
@ -33,5 +43,35 @@ export class SecurityUserSettings extends AbstractViewSettings {
if (this.capaAutoLogout) { if (this.capaAutoLogout) {
this.addSetting('AutoLogout'); this.addSetting('AutoLogout');
} }
this.gnupgPublicKeys = GnuPGUserStore.publicKeys;
this.gnupgPrivateKeys = GnuPGUserStore.privateKeys;
this.openpgpkeysPublic = OpenPGPUserStore.publicKeys;
this.openpgpkeysPrivate = OpenPGPUserStore.privateKeys;
this.canOpenPGP = SettingsCapa('OpenPGP');
this.canGnuPG = GnuPGUserStore.isSupported();
this.canMailvelope = !!window.mailvelope;
this.allowDraftAutosave = SettingsUserStore.allowDraftAutosave;
this.allowDraftAutosave.subscribe(value => Remote.saveSetting('AllowDraftAutosave', value))
}
addOpenPgpKey() {
showScreenPopup(OpenPgpImportPopupView);
}
generateOpenPgpKey() {
showScreenPopup(OpenPgpGeneratePopupView);
}
onBuild() {
/**
* Create an iframe to display the Mailvelope keyring settings.
* The iframe will be injected into the container identified by selector.
*/
window.mailvelope && mailvelope.createSettingsContainer('#mailvelope-settings'/*[, keyring], options*/);
} }
} }

View file

@ -20,7 +20,7 @@ addObservablesTo(themeBackground, {
error: '' error: ''
}); });
export class ThemesUserSettings /*extends AbstractViewSettings*/ { export class UserSettingsThemes /*extends AbstractViewSettings*/ {
constructor() { constructor() {
this.theme = ThemeStore.theme; this.theme = ThemeStore.theme;
this.themes = ThemeStore.themes; this.themes = ThemeStore.themes;

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "جهات الإتصال", "LABEL_CONTACTS_NAME": "جهات الإتصال",
"LABEL_FOLDERS_NAME": "المجلدات", "LABEL_FOLDERS_NAME": "المجلدات",
"LABEL_ACCOUNTS_NAME": "الحسابات", "LABEL_ACCOUNTS_NAME": "الحسابات",
"LABEL_IDENTITIES_NAME": "الهويات",
"LABEL_FILTERS_NAME": "عوامل التصفية", "LABEL_FILTERS_NAME": "عوامل التصفية",
"LABEL_SECURITY_NAME": "الأمان", "LABEL_SECURITY_NAME": "الأمان",
"LABEL_THEMES_NAME": "المظاهر العامة" "LABEL_THEMES_NAME": "المظاهر العامة"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Контакти", "LABEL_CONTACTS_NAME": "Контакти",
"LABEL_FOLDERS_NAME": "Папки", "LABEL_FOLDERS_NAME": "Папки",
"LABEL_ACCOUNTS_NAME": "Акаунти", "LABEL_ACCOUNTS_NAME": "Акаунти",
"LABEL_IDENTITIES_NAME": "Идентичности",
"LABEL_FILTERS_NAME": "Филтри", "LABEL_FILTERS_NAME": "Филтри",
"LABEL_SECURITY_NAME": "Сигурност", "LABEL_SECURITY_NAME": "Сигурност",
"LABEL_THEMES_NAME": "Теми" "LABEL_THEMES_NAME": "Теми"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Administrační panel" "LABEL_ADMIN_PANEL": "Administrační panel"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Základní", "LABEL_GENERAL_NAME": "Základní",
"LABEL_LOGIN_NAME": "Login", "LABEL_LOGIN_NAME": "Login",
"LABEL_BRANDING_NAME": "Branding", "LABEL_BRANDING_NAME": "Branding",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontakty", "LABEL_CONTACTS_NAME": "Kontakty",
"LABEL_FOLDERS_NAME": "Složky", "LABEL_FOLDERS_NAME": "Složky",
"LABEL_ACCOUNTS_NAME": "Účty", "LABEL_ACCOUNTS_NAME": "Účty",
"LABEL_IDENTITIES_NAME": "Aliasy",
"LABEL_FILTERS_NAME": "Filtry", "LABEL_FILTERS_NAME": "Filtry",
"LABEL_SECURITY_NAME": "Zabezpečení", "LABEL_SECURITY_NAME": "Zabezpečení",
"LABEL_THEMES_NAME": "Motivy" "LABEL_THEMES_NAME": "Motivy"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Admin Panel" "LABEL_ADMIN_PANEL": "Admin Panel"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Generelt", "LABEL_GENERAL_NAME": "Generelt",
"LABEL_LOGIN_NAME": "Log ind", "LABEL_LOGIN_NAME": "Log ind",
"LABEL_BRANDING_NAME": "Branding", "LABEL_BRANDING_NAME": "Branding",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontakter", "LABEL_CONTACTS_NAME": "Kontakter",
"LABEL_FOLDERS_NAME": "Mapper", "LABEL_FOLDERS_NAME": "Mapper",
"LABEL_ACCOUNTS_NAME": "Kontoer", "LABEL_ACCOUNTS_NAME": "Kontoer",
"LABEL_IDENTITIES_NAME": "Identiteter",
"LABEL_FILTERS_NAME": "Filtre", "LABEL_FILTERS_NAME": "Filtre",
"LABEL_SECURITY_NAME": "Sikkerhed", "LABEL_SECURITY_NAME": "Sikkerhed",
"LABEL_THEMES_NAME": "Temaer" "LABEL_THEMES_NAME": "Temaer"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Adminpanel" "LABEL_ADMIN_PANEL": "Adminpanel"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Allgemein", "LABEL_GENERAL_NAME": "Allgemein",
"LABEL_LOGIN_NAME": "Anmeldung", "LABEL_LOGIN_NAME": "Anmeldung",
"LABEL_BRANDING_NAME": "Branding", "LABEL_BRANDING_NAME": "Branding",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontakte", "LABEL_CONTACTS_NAME": "Kontakte",
"LABEL_FOLDERS_NAME": "Ordner", "LABEL_FOLDERS_NAME": "Ordner",
"LABEL_ACCOUNTS_NAME": "Konten", "LABEL_ACCOUNTS_NAME": "Konten",
"LABEL_IDENTITIES_NAME": "Identitäten",
"LABEL_FILTERS_NAME": "Filter", "LABEL_FILTERS_NAME": "Filter",
"LABEL_SECURITY_NAME": "Sicherheit", "LABEL_SECURITY_NAME": "Sicherheit",
"LABEL_THEMES_NAME": "Themen" "LABEL_THEMES_NAME": "Themen"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Επαφές", "LABEL_CONTACTS_NAME": "Επαφές",
"LABEL_FOLDERS_NAME": "Φάκελοι", "LABEL_FOLDERS_NAME": "Φάκελοι",
"LABEL_ACCOUNTS_NAME": "Λογαρισμοί", "LABEL_ACCOUNTS_NAME": "Λογαρισμοί",
"LABEL_IDENTITIES_NAME": "Ταυτότητες",
"LABEL_FILTERS_NAME": "Φίλτρα", "LABEL_FILTERS_NAME": "Φίλτρα",
"LABEL_SECURITY_NAME": "Ασφάλεια", "LABEL_SECURITY_NAME": "Ασφάλεια",
"LABEL_THEMES_NAME": "Θέματα" "LABEL_THEMES_NAME": "Θέματα"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Admin Panel" "LABEL_ADMIN_PANEL": "Admin Panel"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "General", "LABEL_GENERAL_NAME": "General",
"LABEL_LOGIN_NAME": "Login", "LABEL_LOGIN_NAME": "Login",
"LABEL_BRANDING_NAME": "Branding", "LABEL_BRANDING_NAME": "Branding",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contacts", "LABEL_CONTACTS_NAME": "Contacts",
"LABEL_FOLDERS_NAME": "Folders", "LABEL_FOLDERS_NAME": "Folders",
"LABEL_ACCOUNTS_NAME": "Accounts", "LABEL_ACCOUNTS_NAME": "Accounts",
"LABEL_IDENTITIES_NAME": "Identities",
"LABEL_FILTERS_NAME": "Filters", "LABEL_FILTERS_NAME": "Filters",
"LABEL_SECURITY_NAME": "Security", "LABEL_SECURITY_NAME": "Security",
"LABEL_THEMES_NAME": "Themes" "LABEL_THEMES_NAME": "Themes"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Panel de Control" "LABEL_ADMIN_PANEL": "Panel de Control"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "General", "LABEL_GENERAL_NAME": "General",
"LABEL_LOGIN_NAME": "Ingresar", "LABEL_LOGIN_NAME": "Ingresar",
"LABEL_BRANDING_NAME": "Personalización", "LABEL_BRANDING_NAME": "Personalización",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contactos", "LABEL_CONTACTS_NAME": "Contactos",
"LABEL_FOLDERS_NAME": "Carpetas", "LABEL_FOLDERS_NAME": "Carpetas",
"LABEL_ACCOUNTS_NAME": "Cuentas", "LABEL_ACCOUNTS_NAME": "Cuentas",
"LABEL_IDENTITIES_NAME": "Identidades",
"LABEL_FILTERS_NAME": "Filtros", "LABEL_FILTERS_NAME": "Filtros",
"LABEL_SECURITY_NAME": "Seguridad", "LABEL_SECURITY_NAME": "Seguridad",
"LABEL_THEMES_NAME": "Temas" "LABEL_THEMES_NAME": "Temas"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontaktid", "LABEL_CONTACTS_NAME": "Kontaktid",
"LABEL_FOLDERS_NAME": "Kaustad", "LABEL_FOLDERS_NAME": "Kaustad",
"LABEL_ACCOUNTS_NAME": "Kontod", "LABEL_ACCOUNTS_NAME": "Kontod",
"LABEL_IDENTITIES_NAME": "Identiteedid",
"LABEL_FILTERS_NAME": "Filtrid", "LABEL_FILTERS_NAME": "Filtrid",
"LABEL_SECURITY_NAME": "Turvalisus", "LABEL_SECURITY_NAME": "Turvalisus",
"LABEL_THEMES_NAME": "Teemad" "LABEL_THEMES_NAME": "Teemad"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "صفحه مدیریت" "LABEL_ADMIN_PANEL": "صفحه مدیریت"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "عمومی", "LABEL_GENERAL_NAME": "عمومی",
"LABEL_LOGIN_NAME": "ورود", "LABEL_LOGIN_NAME": "ورود",
"LABEL_BRANDING_NAME": "برندسازی", "LABEL_BRANDING_NAME": "برندسازی",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "تماس‌ها", "LABEL_CONTACTS_NAME": "تماس‌ها",
"LABEL_FOLDERS_NAME": "پوشه‌ها", "LABEL_FOLDERS_NAME": "پوشه‌ها",
"LABEL_ACCOUNTS_NAME": "حساب‌های کاربری", "LABEL_ACCOUNTS_NAME": "حساب‌های کاربری",
"LABEL_IDENTITIES_NAME": "شناسه‌ها",
"LABEL_FILTERS_NAME": "فیلترها", "LABEL_FILTERS_NAME": "فیلترها",
"LABEL_SECURITY_NAME": "امنیت", "LABEL_SECURITY_NAME": "امنیت",
"LABEL_THEMES_NAME": "پوسته‌ها" "LABEL_THEMES_NAME": "پوسته‌ها"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Halintapaneli" "LABEL_ADMIN_PANEL": "Halintapaneli"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Yleiset", "LABEL_GENERAL_NAME": "Yleiset",
"LABEL_LOGIN_NAME": "Kirjautuminen", "LABEL_LOGIN_NAME": "Kirjautuminen",
"LABEL_BRANDING_NAME": "Brändäys", "LABEL_BRANDING_NAME": "Brändäys",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Yhteystiedot", "LABEL_CONTACTS_NAME": "Yhteystiedot",
"LABEL_FOLDERS_NAME": "kansiot", "LABEL_FOLDERS_NAME": "kansiot",
"LABEL_ACCOUNTS_NAME": "Tilit", "LABEL_ACCOUNTS_NAME": "Tilit",
"LABEL_IDENTITIES_NAME": "Identiteetit",
"LABEL_FILTERS_NAME": "Suodattimet", "LABEL_FILTERS_NAME": "Suodattimet",
"LABEL_SECURITY_NAME": "Turvallisuus", "LABEL_SECURITY_NAME": "Turvallisuus",
"LABEL_THEMES_NAME": "Teemat" "LABEL_THEMES_NAME": "Teemat"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Panneau d'Administration" "LABEL_ADMIN_PANEL": "Panneau d'Administration"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Général", "LABEL_GENERAL_NAME": "Général",
"LABEL_LOGIN_NAME": "Identifiant", "LABEL_LOGIN_NAME": "Identifiant",
"LABEL_BRANDING_NAME": "Logo & Marque", "LABEL_BRANDING_NAME": "Logo & Marque",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contacts", "LABEL_CONTACTS_NAME": "Contacts",
"LABEL_FOLDERS_NAME": "Dossiers", "LABEL_FOLDERS_NAME": "Dossiers",
"LABEL_ACCOUNTS_NAME": "Comptes", "LABEL_ACCOUNTS_NAME": "Comptes",
"LABEL_IDENTITIES_NAME": "Identités",
"LABEL_FILTERS_NAME": "Filtres", "LABEL_FILTERS_NAME": "Filtres",
"LABEL_SECURITY_NAME": "Sécurité", "LABEL_SECURITY_NAME": "Sécurité",
"LABEL_THEMES_NAME": "Thèmes" "LABEL_THEMES_NAME": "Thèmes"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Adminisztrációs felület" "LABEL_ADMIN_PANEL": "Adminisztrációs felület"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Általános", "LABEL_GENERAL_NAME": "Általános",
"LABEL_LOGIN_NAME": "Belépés", "LABEL_LOGIN_NAME": "Belépés",
"LABEL_BRANDING_NAME": "Arculat", "LABEL_BRANDING_NAME": "Arculat",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Névjegyek", "LABEL_CONTACTS_NAME": "Névjegyek",
"LABEL_FOLDERS_NAME": "Mappák", "LABEL_FOLDERS_NAME": "Mappák",
"LABEL_ACCOUNTS_NAME": "Fiókok", "LABEL_ACCOUNTS_NAME": "Fiókok",
"LABEL_IDENTITIES_NAME": "Identitások",
"LABEL_FILTERS_NAME": "Szűrők", "LABEL_FILTERS_NAME": "Szűrők",
"LABEL_SECURITY_NAME": "Biztonság", "LABEL_SECURITY_NAME": "Biztonság",
"LABEL_THEMES_NAME": "Témák" "LABEL_THEMES_NAME": "Témák"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Panel Admin" "LABEL_ADMIN_PANEL": "Panel Admin"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Umum", "LABEL_GENERAL_NAME": "Umum",
"LABEL_LOGIN_NAME": "Login", "LABEL_LOGIN_NAME": "Login",
"LABEL_BRANDING_NAME": "Branding", "LABEL_BRANDING_NAME": "Branding",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontak", "LABEL_CONTACTS_NAME": "Kontak",
"LABEL_FOLDERS_NAME": "Folder", "LABEL_FOLDERS_NAME": "Folder",
"LABEL_ACCOUNTS_NAME": "Akun", "LABEL_ACCOUNTS_NAME": "Akun",
"LABEL_IDENTITIES_NAME": "Identitas",
"LABEL_FILTERS_NAME": "Filter", "LABEL_FILTERS_NAME": "Filter",
"LABEL_SECURITY_NAME": "Keamanan", "LABEL_SECURITY_NAME": "Keamanan",
"LABEL_THEMES_NAME": "Tema" "LABEL_THEMES_NAME": "Tema"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Tengiliðir", "LABEL_CONTACTS_NAME": "Tengiliðir",
"LABEL_FOLDERS_NAME": "Möppur", "LABEL_FOLDERS_NAME": "Möppur",
"LABEL_ACCOUNTS_NAME": "Aðgangar", "LABEL_ACCOUNTS_NAME": "Aðgangar",
"LABEL_IDENTITIES_NAME": "Auðkenni",
"LABEL_FILTERS_NAME": "Síur", "LABEL_FILTERS_NAME": "Síur",
"LABEL_SECURITY_NAME": "Öryggi", "LABEL_SECURITY_NAME": "Öryggi",
"LABEL_THEMES_NAME": "Þemu" "LABEL_THEMES_NAME": "Þemu"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Amministrazione" "LABEL_ADMIN_PANEL": "Amministrazione"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Generali", "LABEL_GENERAL_NAME": "Generali",
"LABEL_LOGIN_NAME": "Accesso", "LABEL_LOGIN_NAME": "Accesso",
"LABEL_BRANDING_NAME": "Personalizzazione", "LABEL_BRANDING_NAME": "Personalizzazione",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contatti", "LABEL_CONTACTS_NAME": "Contatti",
"LABEL_FOLDERS_NAME": "Cartelle", "LABEL_FOLDERS_NAME": "Cartelle",
"LABEL_ACCOUNTS_NAME": "Account", "LABEL_ACCOUNTS_NAME": "Account",
"LABEL_IDENTITIES_NAME": "Identità",
"LABEL_FILTERS_NAME": "Filtri", "LABEL_FILTERS_NAME": "Filtri",
"LABEL_SECURITY_NAME": "Sicurezza", "LABEL_SECURITY_NAME": "Sicurezza",
"LABEL_THEMES_NAME": "Temi" "LABEL_THEMES_NAME": "Temi"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "管理画面" "LABEL_ADMIN_PANEL": "管理画面"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "全般", "LABEL_GENERAL_NAME": "全般",
"LABEL_LOGIN_NAME": "ログイン", "LABEL_LOGIN_NAME": "ログイン",
"LABEL_BRANDING_NAME": "ブランド化", "LABEL_BRANDING_NAME": "ブランド化",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "連絡先", "LABEL_CONTACTS_NAME": "連絡先",
"LABEL_FOLDERS_NAME": "フォルダー", "LABEL_FOLDERS_NAME": "フォルダー",
"LABEL_ACCOUNTS_NAME": "アカウント", "LABEL_ACCOUNTS_NAME": "アカウント",
"LABEL_IDENTITIES_NAME": "表示名",
"LABEL_FILTERS_NAME": "フィルター", "LABEL_FILTERS_NAME": "フィルター",
"LABEL_SECURITY_NAME": "セキュリティ", "LABEL_SECURITY_NAME": "セキュリティ",
"LABEL_THEMES_NAME": "テーマ" "LABEL_THEMES_NAME": "テーマ"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "연락처", "LABEL_CONTACTS_NAME": "연락처",
"LABEL_FOLDERS_NAME": "폴더", "LABEL_FOLDERS_NAME": "폴더",
"LABEL_ACCOUNTS_NAME": "계정", "LABEL_ACCOUNTS_NAME": "계정",
"LABEL_IDENTITIES_NAME": "신원",
"LABEL_FILTERS_NAME": "필터", "LABEL_FILTERS_NAME": "필터",
"LABEL_SECURITY_NAME": "보안", "LABEL_SECURITY_NAME": "보안",
"LABEL_THEMES_NAME": "테마" "LABEL_THEMES_NAME": "테마"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Administratoriaus valdymo skydas" "LABEL_ADMIN_PANEL": "Administratoriaus valdymo skydas"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Pagrindiniai", "LABEL_GENERAL_NAME": "Pagrindiniai",
"LABEL_LOGIN_NAME": "Prisijungimo vardas", "LABEL_LOGIN_NAME": "Prisijungimo vardas",
"LABEL_BRANDING_NAME": "Įdaguoti", "LABEL_BRANDING_NAME": "Įdaguoti",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontaktai", "LABEL_CONTACTS_NAME": "Kontaktai",
"LABEL_FOLDERS_NAME": "Katalogai", "LABEL_FOLDERS_NAME": "Katalogai",
"LABEL_ACCOUNTS_NAME": "Paskyros", "LABEL_ACCOUNTS_NAME": "Paskyros",
"LABEL_IDENTITIES_NAME": "Tapatybės",
"LABEL_FILTERS_NAME": "Filtrai", "LABEL_FILTERS_NAME": "Filtrai",
"LABEL_SECURITY_NAME": "Sauga", "LABEL_SECURITY_NAME": "Sauga",
"LABEL_THEMES_NAME": "Temos" "LABEL_THEMES_NAME": "Temos"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contacts", "LABEL_CONTACTS_NAME": "Contacts",
"LABEL_FOLDERS_NAME": "Mapes", "LABEL_FOLDERS_NAME": "Mapes",
"LABEL_ACCOUNTS_NAME": "Konti", "LABEL_ACCOUNTS_NAME": "Konti",
"LABEL_IDENTITIES_NAME": "Identities",
"LABEL_FILTERS_NAME": "Filters", "LABEL_FILTERS_NAME": "Filters",
"LABEL_SECURITY_NAME": "Security", "LABEL_SECURITY_NAME": "Security",
"LABEL_THEMES_NAME": "Tēmas" "LABEL_THEMES_NAME": "Tēmas"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Admin-panel" "LABEL_ADMIN_PANEL": "Admin-panel"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Generelt", "LABEL_GENERAL_NAME": "Generelt",
"LABEL_LOGIN_NAME": "Brukernavn", "LABEL_LOGIN_NAME": "Brukernavn",
"LABEL_BRANDING_NAME": "Utforming", "LABEL_BRANDING_NAME": "Utforming",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontakter", "LABEL_CONTACTS_NAME": "Kontakter",
"LABEL_FOLDERS_NAME": "Mapper", "LABEL_FOLDERS_NAME": "Mapper",
"LABEL_ACCOUNTS_NAME": "Kontoer", "LABEL_ACCOUNTS_NAME": "Kontoer",
"LABEL_IDENTITIES_NAME": "Identiteter",
"LABEL_FILTERS_NAME": "Filters", "LABEL_FILTERS_NAME": "Filters",
"LABEL_SECURITY_NAME": "Sikkerhet", "LABEL_SECURITY_NAME": "Sikkerhet",
"LABEL_THEMES_NAME": "Tema" "LABEL_THEMES_NAME": "Tema"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Beheer paneel" "LABEL_ADMIN_PANEL": "Beheer paneel"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Algemeen", "LABEL_GENERAL_NAME": "Algemeen",
"LABEL_LOGIN_NAME": "Inlogscherm", "LABEL_LOGIN_NAME": "Inlogscherm",
"LABEL_BRANDING_NAME": "Huisstijl", "LABEL_BRANDING_NAME": "Huisstijl",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contactpersonen", "LABEL_CONTACTS_NAME": "Contactpersonen",
"LABEL_FOLDERS_NAME": "Mappen", "LABEL_FOLDERS_NAME": "Mappen",
"LABEL_ACCOUNTS_NAME": "Accounts", "LABEL_ACCOUNTS_NAME": "Accounts",
"LABEL_IDENTITIES_NAME": "Identiteiten",
"LABEL_FILTERS_NAME": "Filters", "LABEL_FILTERS_NAME": "Filters",
"LABEL_SECURITY_NAME": "Beveiliging", "LABEL_SECURITY_NAME": "Beveiliging",
"LABEL_THEMES_NAME": "Thema's" "LABEL_THEMES_NAME": "Thema's"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Panel administracyjny" "LABEL_ADMIN_PANEL": "Panel administracyjny"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Ogólne", "LABEL_GENERAL_NAME": "Ogólne",
"LABEL_LOGIN_NAME": "Login", "LABEL_LOGIN_NAME": "Login",
"LABEL_BRANDING_NAME": "Personalizacja", "LABEL_BRANDING_NAME": "Personalizacja",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontakty", "LABEL_CONTACTS_NAME": "Kontakty",
"LABEL_FOLDERS_NAME": "Foldery", "LABEL_FOLDERS_NAME": "Foldery",
"LABEL_ACCOUNTS_NAME": "Konta", "LABEL_ACCOUNTS_NAME": "Konta",
"LABEL_IDENTITIES_NAME": "Tożsamości",
"LABEL_FILTERS_NAME": "Filtry", "LABEL_FILTERS_NAME": "Filtry",
"LABEL_SECURITY_NAME": "Bezpieczeństwo", "LABEL_SECURITY_NAME": "Bezpieczeństwo",
"LABEL_THEMES_NAME": "Motywy" "LABEL_THEMES_NAME": "Motywy"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Painel Administrativo" "LABEL_ADMIN_PANEL": "Painel Administrativo"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Geral", "LABEL_GENERAL_NAME": "Geral",
"LABEL_LOGIN_NAME": "Login", "LABEL_LOGIN_NAME": "Login",
"LABEL_BRANDING_NAME": "Personalizar", "LABEL_BRANDING_NAME": "Personalizar",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contatos", "LABEL_CONTACTS_NAME": "Contatos",
"LABEL_FOLDERS_NAME": "Pastas", "LABEL_FOLDERS_NAME": "Pastas",
"LABEL_ACCOUNTS_NAME": "Contas", "LABEL_ACCOUNTS_NAME": "Contas",
"LABEL_IDENTITIES_NAME": "Identidades",
"LABEL_FILTERS_NAME": "Filtros", "LABEL_FILTERS_NAME": "Filtros",
"LABEL_SECURITY_NAME": "Segurança", "LABEL_SECURITY_NAME": "Segurança",
"LABEL_THEMES_NAME": "Temas" "LABEL_THEMES_NAME": "Temas"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contactos", "LABEL_CONTACTS_NAME": "Contactos",
"LABEL_FOLDERS_NAME": "Pastas", "LABEL_FOLDERS_NAME": "Pastas",
"LABEL_ACCOUNTS_NAME": "Contas", "LABEL_ACCOUNTS_NAME": "Contas",
"LABEL_IDENTITIES_NAME": "Identidades",
"LABEL_FILTERS_NAME": "Filtros", "LABEL_FILTERS_NAME": "Filtros",
"LABEL_SECURITY_NAME": "Segurança", "LABEL_SECURITY_NAME": "Segurança",
"LABEL_THEMES_NAME": "Temas" "LABEL_THEMES_NAME": "Temas"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Contacte", "LABEL_CONTACTS_NAME": "Contacte",
"LABEL_FOLDERS_NAME": "Dosare", "LABEL_FOLDERS_NAME": "Dosare",
"LABEL_ACCOUNTS_NAME": "Conturi", "LABEL_ACCOUNTS_NAME": "Conturi",
"LABEL_IDENTITIES_NAME": "Profiluri",
"LABEL_FILTERS_NAME": "Filters", "LABEL_FILTERS_NAME": "Filters",
"LABEL_SECURITY_NAME": "Security", "LABEL_SECURITY_NAME": "Security",
"LABEL_THEMES_NAME": "Subiecte" "LABEL_THEMES_NAME": "Subiecte"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Админка" "LABEL_ADMIN_PANEL": "Админка"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Основные", "LABEL_GENERAL_NAME": "Основные",
"LABEL_LOGIN_NAME": "Логин", "LABEL_LOGIN_NAME": "Логин",
"LABEL_BRANDING_NAME": "Брендинг", "LABEL_BRANDING_NAME": "Брендинг",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Контакты", "LABEL_CONTACTS_NAME": "Контакты",
"LABEL_FOLDERS_NAME": "Папки", "LABEL_FOLDERS_NAME": "Папки",
"LABEL_ACCOUNTS_NAME": "Аккаунты", "LABEL_ACCOUNTS_NAME": "Аккаунты",
"LABEL_IDENTITIES_NAME": "Профили",
"LABEL_FILTERS_NAME": "Фильтры", "LABEL_FILTERS_NAME": "Фильтры",
"LABEL_SECURITY_NAME": "Безопасность", "LABEL_SECURITY_NAME": "Безопасность",
"LABEL_THEMES_NAME": "Темы" "LABEL_THEMES_NAME": "Темы"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Admin Panel" "LABEL_ADMIN_PANEL": "Admin Panel"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Všeobecné", "LABEL_GENERAL_NAME": "Všeobecné",
"LABEL_LOGIN_NAME": "Používateľské meno", "LABEL_LOGIN_NAME": "Používateľské meno",
"LABEL_BRANDING_NAME": "Branding", "LABEL_BRANDING_NAME": "Branding",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontakty", "LABEL_CONTACTS_NAME": "Kontakty",
"LABEL_FOLDERS_NAME": "Priečinky", "LABEL_FOLDERS_NAME": "Priečinky",
"LABEL_ACCOUNTS_NAME": "Účty", "LABEL_ACCOUNTS_NAME": "Účty",
"LABEL_IDENTITIES_NAME": "Identity",
"LABEL_FILTERS_NAME": "Filters", "LABEL_FILTERS_NAME": "Filters",
"LABEL_SECURITY_NAME": "Zabezpečenie", "LABEL_SECURITY_NAME": "Zabezpečenie",
"LABEL_THEMES_NAME": "Motívy" "LABEL_THEMES_NAME": "Motívy"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Administracijska plošča" "LABEL_ADMIN_PANEL": "Administracijska plošča"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Splošno", "LABEL_GENERAL_NAME": "Splošno",
"LABEL_LOGIN_NAME": "Prijava", "LABEL_LOGIN_NAME": "Prijava",
"LABEL_BRANDING_NAME": "Prilagoditev", "LABEL_BRANDING_NAME": "Prilagoditev",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Stiki", "LABEL_CONTACTS_NAME": "Stiki",
"LABEL_FOLDERS_NAME": "Mape", "LABEL_FOLDERS_NAME": "Mape",
"LABEL_ACCOUNTS_NAME": "Računi", "LABEL_ACCOUNTS_NAME": "Računi",
"LABEL_IDENTITIES_NAME": "Identitete",
"LABEL_FILTERS_NAME": "Filtri", "LABEL_FILTERS_NAME": "Filtri",
"LABEL_SECURITY_NAME": "Varnost", "LABEL_SECURITY_NAME": "Varnost",
"LABEL_THEMES_NAME": "Teme" "LABEL_THEMES_NAME": "Teme"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "Adminpanel" "LABEL_ADMIN_PANEL": "Adminpanel"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "Allmän", "LABEL_GENERAL_NAME": "Allmän",
"LABEL_LOGIN_NAME": "Logga in", "LABEL_LOGIN_NAME": "Logga in",
"LABEL_BRANDING_NAME": "Branding", "LABEL_BRANDING_NAME": "Branding",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kontakter", "LABEL_CONTACTS_NAME": "Kontakter",
"LABEL_FOLDERS_NAME": "Mappar", "LABEL_FOLDERS_NAME": "Mappar",
"LABEL_ACCOUNTS_NAME": "Konton", "LABEL_ACCOUNTS_NAME": "Konton",
"LABEL_IDENTITIES_NAME": "Identiteter",
"LABEL_FILTERS_NAME": "Filter", "LABEL_FILTERS_NAME": "Filter",
"LABEL_SECURITY_NAME": "Säkerhet", "LABEL_SECURITY_NAME": "Säkerhet",
"LABEL_THEMES_NAME": "Teman" "LABEL_THEMES_NAME": "Teman"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Kişi Listesi", "LABEL_CONTACTS_NAME": "Kişi Listesi",
"LABEL_FOLDERS_NAME": "Klasörler", "LABEL_FOLDERS_NAME": "Klasörler",
"LABEL_ACCOUNTS_NAME": "Hesaplar", "LABEL_ACCOUNTS_NAME": "Hesaplar",
"LABEL_IDENTITIES_NAME": "Kimlikler",
"LABEL_FILTERS_NAME": "Filtreler", "LABEL_FILTERS_NAME": "Filtreler",
"LABEL_SECURITY_NAME": "Güvenlik", "LABEL_SECURITY_NAME": "Güvenlik",
"LABEL_THEMES_NAME": "Temalar" "LABEL_THEMES_NAME": "Temalar"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "Контакти", "LABEL_CONTACTS_NAME": "Контакти",
"LABEL_FOLDERS_NAME": "Теки", "LABEL_FOLDERS_NAME": "Теки",
"LABEL_ACCOUNTS_NAME": "Акаунти", "LABEL_ACCOUNTS_NAME": "Акаунти",
"LABEL_IDENTITIES_NAME": "Профілі",
"LABEL_FILTERS_NAME": "Фильтры", "LABEL_FILTERS_NAME": "Фильтры",
"LABEL_SECURITY_NAME": "Безпека", "LABEL_SECURITY_NAME": "Безпека",
"LABEL_THEMES_NAME": "Теми" "LABEL_THEMES_NAME": "Теми"

View file

@ -11,7 +11,7 @@
"TOP_PANEL": { "TOP_PANEL": {
"LABEL_ADMIN_PANEL": "控制面板" "LABEL_ADMIN_PANEL": "控制面板"
}, },
"TABS_LABELS": { "SETTINGS_LABELS": {
"LABEL_GENERAL_NAME": "常规", "LABEL_GENERAL_NAME": "常规",
"LABEL_LOGIN_NAME": "登录", "LABEL_LOGIN_NAME": "登录",
"LABEL_BRANDING_NAME": "Logo", "LABEL_BRANDING_NAME": "Logo",

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "联系人", "LABEL_CONTACTS_NAME": "联系人",
"LABEL_FOLDERS_NAME": "文件夹", "LABEL_FOLDERS_NAME": "文件夹",
"LABEL_ACCOUNTS_NAME": "账户", "LABEL_ACCOUNTS_NAME": "账户",
"LABEL_IDENTITIES_NAME": "身份",
"LABEL_FILTERS_NAME": "筛选条件", "LABEL_FILTERS_NAME": "筛选条件",
"LABEL_SECURITY_NAME": "安全", "LABEL_SECURITY_NAME": "安全",
"LABEL_THEMES_NAME": "主题" "LABEL_THEMES_NAME": "主题"

View file

@ -347,7 +347,6 @@
"LABEL_CONTACTS_NAME": "連絡人", "LABEL_CONTACTS_NAME": "連絡人",
"LABEL_FOLDERS_NAME": "資料夾", "LABEL_FOLDERS_NAME": "資料夾",
"LABEL_ACCOUNTS_NAME": "帳戶", "LABEL_ACCOUNTS_NAME": "帳戶",
"LABEL_IDENTITIES_NAME": "簽名",
"LABEL_FILTERS_NAME": "Filters", "LABEL_FILTERS_NAME": "Filters",
"LABEL_SECURITY_NAME": "安全", "LABEL_SECURITY_NAME": "安全",
"LABEL_THEMES_NAME": "主題" "LABEL_THEMES_NAME": "主題"

View file

@ -1,5 +1,5 @@
<div class="legend"> <div class="legend">
<span data-i18n="TABS_LABELS/LABEL_PACKAGES_NAME"></span> <span data-i18n="SETTINGS_LABELS/LABEL_PACKAGES_NAME"></span>
<i class="icon-spinner" style="margin: 5px" data-bind="visible: packages.loading"></i> <i class="icon-spinner" style="margin: 5px" data-bind="visible: packages.loading"></i>
</div> </div>

View file

@ -1,119 +0,0 @@
<div class="legend">OpenPGP</div>
<button class="btn" data-bind="click: addOpenPgpKey" data-icon="✚" data-i18n="SETTINGS_OPENPGP/BUTTON_IMPORT_KEY"></button>
<!-- ko if: canOpenPGP || canGnuPG -->
&nbsp;&nbsp;
<button class="btn" data-bind="click: generateOpenPgpKey" data-icon="🔑" data-i18n="SETTINGS_OPENPGP/BUTTON_GENERATE_KEY_PAIR"></button>
<!-- /ko -->
<br>
<br>
<div class="control-group">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_OPENPGP/LABEL_ALLOW_DRAFT_AUTOSAVE',
value: allowDraftAutosave
}
}"></div>
</div>
<br>
<!-- ko if: canGnuPG -->
<details>
<summary class="legend">GnuPG</summary>
<table class="table table-hover list-table">
<tbody><tr><th colspan="4" data-i18n="SETTINGS_OPENPGP/TITLE_PRIVATE">Private keys</th></tr></tbody>
<tbody data-bind="foreach: gnupgPrivateKeys, i18nUpdate: gnupgPrivateKeys">
<tr>
<td data-bind="click: view">
<span data-bind="visible: can_sign" class="fontastic"></span>
<span data-bind="visible: can_decrypt" class="fontastic">🔓</span>
<span class="key-id" data-bind="text: id"></span>
<!-- ko foreach: emails -->
<span class="key-user" data-bind="text: $data"></span>
<!-- /ko -->
</td>
<td>
<a class="btn btn-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': askDelete()}, click: remove"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
<span class="delete-key fontastic" data-bind="visible: !askDelete(), click: openForDeletion">🗑</span>
</td>
</tr>
</tbody>
<tbody><tr><th colspan="4" data-i18n="SETTINGS_OPENPGP/TITLE_PUBLIC">Public keys</th></tr></tbody>
<tbody data-bind="foreach: gnupgPublicKeys, i18nUpdate: gnupgPublicKeys">
<tr>
<td data-bind="click: view">
<span data-bind="visible: can_verify" class="fontastic"></span>
<span data-bind="visible: can_encrypt" class="fontastic">🔒</span>
<span class="key-id" data-bind="text: id"></span>
<!-- ko foreach: emails -->
<span class="key-user" data-bind="text: $data"></span>
<!-- /ko -->
</td>
<td>
<a class="btn btn-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': askDelete()}, click: remove"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
<span class="delete-key fontastic" data-bind="visible: !askDelete(), click: openForDeletion">🗑</span>
</td>
</tr>
</tbody>
</table>
</details>
<!-- /ko -->
<!-- ko if: canOpenPGP -->
<details>
<summary class="legend">OpenPGP.js</summary>
<table class="table table-hover list-table">
<tbody><tr><th colspan="4" data-i18n="SETTINGS_OPENPGP/TITLE_PRIVATE">Private keys</th></tr></tbody>
<tbody data-bind="foreach: openpgpkeysPrivate, i18nUpdate: openpgpkeysPrivate">
<tr>
<td data-bind="click: view">
<span class="fontastic" data-i18n="[title]SETTINGS_OPENPGP/TITLE_PRIVATE">🔒</span>
<span class="key-id" data-bind="text: id"></span>
<!-- ko foreach: emails -->
<span class="key-user" data-bind="text: $data"></span>
<!-- /ko -->
</td>
<td>
<a class="btn btn-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': askDelete()}, click: remove"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
<span class="delete-key fontastic" data-bind="visible: !askDelete(), click: openForDeletion">🗑</span>
</td>
</tr>
</tbody>
<tbody><tr><th colspan="4" data-i18n="SETTINGS_OPENPGP/TITLE_PUBLIC">Public keys</th></tr></tbody>
<tbody data-bind="foreach: openpgpkeysPublic, i18nUpdate: openpgpkeysPublic">
<tr>
<td data-bind="click: view">
<span class="fontastic" data-i18n="[title]SETTINGS_OPENPGP/TITLE_PUBLIC">🔑</span>
<span class="key-id" data-bind="text: id"></span>
<!-- ko foreach: emails -->
<span class="key-user" data-bind="text: $data"></span>
<!-- /ko -->
</td>
<td>
<a class="btn btn-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': askDelete()}, click: remove"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
<span class="delete-key fontastic" data-bind="visible: !askDelete(), click: openForDeletion">🗑</span>
</td>
</tr>
</tbody>
</table>
</details>
<!-- /ko -->
<details>
<summary class="legend">Mailvelope</summary>
<a data-bind="visible: !canMailvelope" href="https://mailvelope.com/en/help" target="_blank" data-i18n="SETTINGS_OPENPGP/GET_MAILVELOPE"></a>
<div id="mailvelope-settings" style="height:40em" data-bind="visible: canMailvelope"></div>
</details>

View file

@ -15,3 +15,123 @@
}"></div> }"></div>
</div> </div>
</div> </div>
<div class="legend">OpenPGP</div>
<button class="btn" data-bind="click: addOpenPgpKey" data-icon="✚" data-i18n="SETTINGS_OPENPGP/BUTTON_IMPORT_KEY"></button>
<!-- ko if: canOpenPGP || canGnuPG -->
&nbsp;&nbsp;
<button class="btn" data-bind="click: generateOpenPgpKey" data-icon="🔑" data-i18n="SETTINGS_OPENPGP/BUTTON_GENERATE_KEY_PAIR"></button>
<!-- /ko -->
<br>
<br>
<div class="control-group">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_OPENPGP/LABEL_ALLOW_DRAFT_AUTOSAVE',
value: allowDraftAutosave
}
}"></div>
</div>
<br>
<!-- ko if: canGnuPG -->
<details>
<summary class="legend">GnuPG</summary>
<table class="table table-hover list-table">
<tbody><tr><th colspan="4" data-i18n="SETTINGS_OPENPGP/TITLE_PRIVATE">Private keys</th></tr></tbody>
<tbody data-bind="foreach: gnupgPrivateKeys, i18nUpdate: gnupgPrivateKeys">
<tr>
<td data-bind="click: view">
<span data-bind="visible: can_sign" class="fontastic"></span>
<span data-bind="visible: can_decrypt" class="fontastic">🔓</span>
<span class="key-id" data-bind="text: id"></span>
<!-- ko foreach: emails -->
<span class="key-user" data-bind="text: $data"></span>
<!-- /ko -->
</td>
<td>
<a class="btn btn-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': askDelete()}, click: remove"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
<span class="delete-key fontastic" data-bind="visible: !askDelete(), click: openForDeletion">🗑</span>
</td>
</tr>
</tbody>
<tbody><tr><th colspan="4" data-i18n="SETTINGS_OPENPGP/TITLE_PUBLIC">Public keys</th></tr></tbody>
<tbody data-bind="foreach: gnupgPublicKeys, i18nUpdate: gnupgPublicKeys">
<tr>
<td data-bind="click: view">
<span data-bind="visible: can_verify" class="fontastic"></span>
<span data-bind="visible: can_encrypt" class="fontastic">🔒</span>
<span class="key-id" data-bind="text: id"></span>
<!-- ko foreach: emails -->
<span class="key-user" data-bind="text: $data"></span>
<!-- /ko -->
</td>
<td>
<a class="btn btn-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': askDelete()}, click: remove"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
<span class="delete-key fontastic" data-bind="visible: !askDelete(), click: openForDeletion">🗑</span>
</td>
</tr>
</tbody>
</table>
</details>
<!-- /ko -->
<!-- ko if: canOpenPGP -->
<details>
<summary class="legend">OpenPGP.js</summary>
<table class="table table-hover list-table">
<tbody><tr><th colspan="4" data-i18n="SETTINGS_OPENPGP/TITLE_PRIVATE">Private keys</th></tr></tbody>
<tbody data-bind="foreach: openpgpkeysPrivate, i18nUpdate: openpgpkeysPrivate">
<tr>
<td data-bind="click: view">
<span class="fontastic" data-i18n="[title]SETTINGS_OPENPGP/TITLE_PRIVATE">🔒</span>
<span class="key-id" data-bind="text: id"></span>
<!-- ko foreach: emails -->
<span class="key-user" data-bind="text: $data"></span>
<!-- /ko -->
</td>
<td>
<a class="btn btn-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': askDelete()}, click: remove"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
<span class="delete-key fontastic" data-bind="visible: !askDelete(), click: openForDeletion">🗑</span>
</td>
</tr>
</tbody>
<tbody><tr><th colspan="4" data-i18n="SETTINGS_OPENPGP/TITLE_PUBLIC">Public keys</th></tr></tbody>
<tbody data-bind="foreach: openpgpkeysPublic, i18nUpdate: openpgpkeysPublic">
<tr>
<td data-bind="click: view">
<span class="fontastic" data-i18n="[title]SETTINGS_OPENPGP/TITLE_PUBLIC">🔑</span>
<span class="key-id" data-bind="text: id"></span>
<!-- ko foreach: emails -->
<span class="key-user" data-bind="text: $data"></span>
<!-- /ko -->
</td>
<td>
<a class="btn btn-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': askDelete()}, click: remove"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
<span class="delete-key fontastic" data-bind="visible: !askDelete(), click: openForDeletion">🗑</span>
</td>
</tr>
</tbody>
</table>
</details>
<!-- /ko -->
<details>
<summary class="legend">Mailvelope</summary>
<a data-bind="visible: !canMailvelope" href="https://mailvelope.com/en/help" target="_blank" data-i18n="SETTINGS_OPENPGP/GET_MAILVELOPE"></a>
<div id="mailvelope-settings" style="height:40em" data-bind="visible: canMailvelope"></div>
</details>