Cleanup AppUserStore

Simplify KeyState/Focused as Scope enum
This commit is contained in:
djmaze 2021-03-16 16:06:16 +01:00
parent 62cb918180
commit eff92c3152
27 changed files with 177 additions and 232 deletions

View file

@ -6,7 +6,7 @@ import { isPosNumeric, delegateRunOnDestroy, mailToHelper } from 'Common/UtilsUs
import { import {
Capa, Capa,
Notification, Notification,
KeyState Scope
} from 'Common/Enums'; } from 'Common/Enums';
import { import {
@ -133,7 +133,7 @@ class AppUser extends AbstractApp {
t => doc.addEventListener(t, SettingsUserStore.delayLogout, {passive:true}) t => doc.addEventListener(t, SettingsUserStore.delayLogout, {passive:true})
); );
shortcuts.add('escape,enter', '', KeyState.All, () => rl.Dropdowns.detectVisibility()); shortcuts.add('escape,enter', '', Scope.All, () => rl.Dropdowns.detectVisibility());
} }
reload() { reload() {

View file

@ -32,21 +32,21 @@ export const Capa = {
/** /**
* @enum {string} * @enum {string}
*/ */
export const KeyState = { export const Scope = {
All: 'all', All: 'all',
None: 'none', None: 'none',
ContactList: 'contact-list', Contacts: 'Contacts',
MessageList: 'message-list', MessageList: 'MessageList',
FolderList: 'folder-list', FolderList: 'FolderList',
MessageView: 'message-view', MessageView: 'MessageView',
Compose: 'compose', Compose: 'Compose',
Settings: 'settings', Settings: 'Settings',
Menu: 'menu', Menu: 'Menu',
PopupComposeOpenPGP: 'compose-open-pgp', ComposeOpenPgp: 'ComposeOpenPgp',
PopupMessageOpenPGP: 'message-open-pgp', MessageOpenPgp: 'MessageOpenPgp',
PopupViewOpenPGP: 'view-open-pgp', ViewOpenPgpKey: 'ViewOpenPgpKey',
PopupKeyboardShortcutsHelp: 'popup-keyboard-shortcuts-help', KeyboardShortcutsHelp: 'KeyboardShortcutsHelp',
PopupAsk: 'popup-ask' Ask: 'Ask'
}; };
/** /**

View file

@ -1,15 +1,5 @@
/* eslint quote-props: 0 */ /* eslint quote-props: 0 */
/**
* @enum {string}
*/
export const Focused = {
None: 'none',
MessageList: 'message-list',
MessageView: 'message-view',
FolderList: 'folder-list'
};
/** /**
* @enum {number} * @enum {number}
*/ */

View file

@ -1,5 +1,5 @@
import ko from 'ko'; import ko from 'ko';
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
export const doc = document; export const doc = document;
@ -29,24 +29,24 @@ leftPanelDisabled.subscribe(value => {
moveAction.subscribe(value => value && leftPanelDisabled() && leftPanelDisabled(false)); moveAction.subscribe(value => value && leftPanelDisabled() && leftPanelDisabled(false));
// keys // keys
export const keyScopeReal = ko.observable(KeyState.All); export const keyScopeReal = ko.observable(Scope.All);
export const keyScope = (()=>{ export const keyScope = (()=>{
let keyScopeFake = KeyState.All; let keyScopeFake = Scope.All;
dropdownVisibility.subscribe(value => { dropdownVisibility.subscribe(value => {
if (value) { if (value) {
keyScope(KeyState.Menu); keyScope(Scope.Menu);
} else if (KeyState.Menu === shortcuts.getScope()) { } else if (Scope.Menu === shortcuts.getScope()) {
keyScope(keyScopeFake); keyScope(keyScopeFake);
} }
}); });
return ko.computed({ return ko.computed({
read: () => keyScopeFake, read: () => keyScopeFake,
write: value => { write: value => {
if (KeyState.Menu !== value) { if (Scope.Menu !== value) {
keyScopeFake = value; keyScopeFake = value;
if (dropdownVisibility()) { if (dropdownVisibility()) {
value = KeyState.Menu; value = Scope.Menu;
} }
} }

View file

@ -1,41 +1,41 @@
import ko from 'ko'; import ko from 'ko';
import { inFocus, addObservablesTo, addComputablesTo, addSubscribablesTo } from 'Common/Utils'; import { inFocus, addObservablesTo, addComputablesTo, addSubscribablesTo } from 'Common/Utils';
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
import { keyScope } from 'Common/Globals'; import { keyScope } from 'Common/Globals';
import { ViewType } from 'Knoin/Knoin'; import { ViewType } from 'Knoin/Knoin';
class AbstractView { class AbstractView {
bDisabeCloseOnEsc = false;
sDefaultKeyScope = KeyState.None;
sCurrentKeyScope = KeyState.None;
viewModelVisible = false;
modalVisibility = ko.observable(false).extend({ rateLimit: 0 });
viewModelName = '';
viewModelDom = null;
constructor(name, templateID, type) constructor(name, templateID, type)
{ {
this.viewModelName = 'View/' + name; this.viewModelName = 'View/' + name;
this.viewModelTemplateID = templateID; this.viewModelTemplateID = templateID;
this.viewModelPosition = type; this.viewModelPosition = type;
this.bDisabeCloseOnEsc = false;
this.sDefaultScope = Scope.None;
this.sCurrentScope = Scope.None;
this.viewModelVisible = false;
this.modalVisibility = ko.observable(false).extend({ rateLimit: 0 });
this.viewModelName = '';
this.viewModelDom = null;
} }
/** /**
* @returns {void} * @returns {void}
*/ */
storeAndSetKeyScope() { storeAndSetScope() {
this.sCurrentKeyScope = keyScope(); this.sCurrentScope = keyScope();
keyScope(this.sDefaultKeyScope); keyScope(this.sDefaultScope);
} }
/** /**
* @returns {void} * @returns {void}
*/ */
restoreKeyScope() { restoreScope() {
keyScope(this.sCurrentKeyScope); keyScope(this.sCurrentScope);
} }
cancelCommand() {} cancelCommand() {}
@ -64,6 +64,9 @@ export class AbstractViewPopup extends AbstractView
constructor(name) constructor(name)
{ {
super('Popup/' + name, 'Popups' + name, ViewType.Popup); super('Popup/' + name, 'Popups' + name, ViewType.Popup);
if (name in Scope) {
this.sDefaultScope = Scope[name];
}
} }
/** /**

View file

@ -111,7 +111,7 @@ function buildViewModel(ViewModelClass, vmScreen) {
if (value) { if (value) {
vmDom.style.zIndex = 3000 + popupVisibilityNames.length + 10; vmDom.style.zIndex = 3000 + popupVisibilityNames.length + 10;
vmDom.hidden = false; vmDom.hidden = false;
vm.storeAndSetKeyScope(); vm.storeAndSetScope();
popupVisibilityNames.push(vm.viewModelName); popupVisibilityNames.push(vm.viewModelName);
requestAnimationFrame(() => { // wait just before the next paint requestAnimationFrame(() => { // wait just before the next paint
vmDom.offsetHeight; // force a reflow vmDom.offsetHeight; // force a reflow
@ -120,7 +120,7 @@ function buildViewModel(ViewModelClass, vmScreen) {
} else { } else {
vm.onHide && vm.onHide(); vm.onHide && vm.onHide();
vmDom.classList.remove('show'); vmDom.classList.remove('show');
vm.restoreKeyScope(); vm.restoreScope();
popupVisibilityNames = popupVisibilityNames.filter(v=>v!==vm.viewModelName); popupVisibilityNames = popupVisibilityNames.filter(v=>v!==vm.viewModelName);
} }
vmDom.setAttribute('aria-hidden', !value); vmDom.setAttribute('aria-hidden', !value);

View file

@ -322,7 +322,7 @@ class RemoteUserFetch extends AbstractFetchRemote {
iOffset, iOffset,
iLimit, iLimit,
sSearch, sSearch,
AppUserStore.projectHash(), SettingsGet('ProjectHash'),
folderHash, folderHash,
inboxUidNext, inboxUidNext,
useThreads ? 1 : 0, useThreads ? 1 : 0,
@ -387,7 +387,7 @@ class RemoteUserFetch extends AbstractFetchRemote {
urlsafeArray([ urlsafeArray([
sFolderFullNameRaw, sFolderFullNameRaw,
iUid, iUid,
AppUserStore.projectHash(), SettingsGet('ProjectHash'),
AppUserStore.threadsAllowed() && SettingsUserStore.useThreads() ? 1 : 0 AppUserStore.threadsAllowed() && SettingsUserStore.useThreads() ? 1 : 0
]), ]),
['Message'] ['Message']

View file

@ -1,4 +1,4 @@
import { Focused } from 'Common/EnumsUser'; import { Scope } from 'Common/Enums';
import { doc, leftPanelDisabled, moveAction, Settings } from 'Common/Globals'; import { doc, leftPanelDisabled, moveAction, Settings } from 'Common/Globals';
import { pString, pInt } from 'Common/Utils'; import { pString, pInt } from 'Common/Utils';
import { getFolderFromCacheList, getFolderFullNameRaw, getFolderInboxName } from 'Common/Cache'; import { getFolderFromCacheList, getFolderFullNameRaw, getFolderInboxName } from 'Common/Cache';
@ -53,8 +53,8 @@ export class MailBoxUserScreen extends AbstractScreen {
onShow() { onShow() {
this.updateWindowTitle(); this.updateWindowTitle();
AppUserStore.focusedState(Focused.None); AppUserStore.focusedState(Scope.None);
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
ThemeStore.isMobile() && leftPanelDisabled(true); ThemeStore.isMobile() && leftPanelDisabled(true);
} }

View file

@ -1,4 +1,4 @@
import { Capa, KeyState } from 'Common/Enums'; import { Capa, Scope } from 'Common/Enums';
import { keyScope, leftPanelDisabled, Settings } from 'Common/Globals'; import { keyScope, leftPanelDisabled, Settings } from 'Common/Globals';
import { runSettingsViewModelHooks } from 'Common/Plugins'; import { runSettingsViewModelHooks } from 'Common/Plugins';
import { initOnStartOrLangChange, i18n } from 'Common/Translator'; import { initOnStartOrLangChange, i18n } from 'Common/Translator';
@ -96,7 +96,7 @@ export class SettingsUserScreen extends AbstractSettingsScreen {
onShow() { onShow() {
this.setSettingsTitle(); this.setSettingsTitle();
keyScope(KeyState.Settings); keyScope(Scope.Settings);
ThemeStore.isMobile() && leftPanelDisabled(true); ThemeStore.isMobile() && leftPanelDisabled(true);
} }

View file

@ -1,12 +1,12 @@
import ko from 'ko'; import ko from 'ko';
import { AppUserStore } from 'Stores/User/App'; 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 { export class ContactsUserSettings {
constructor() { constructor() {
this.contactsAutosave = AppUserStore.contactsAutosave; this.contactsAutosave = ko.observable(!!SettingsGet('ContactsAutosave'));
this.allowContactsSync = ContactUserStore.allowSync; this.allowContactsSync = ContactUserStore.allowSync;
this.enableContactsSync = ContactUserStore.enableSync; this.enableContactsSync = ContactUserStore.enableSync;

View file

@ -1,63 +1,33 @@
import ko from 'ko'; import { Scope } from 'Common/Enums';
import { KeyState } from 'Common/Enums'; import { keyScope, leftPanelDisabled, SettingsGet } from 'Common/Globals';
import { Focused } from 'Common/EnumsUser';
import { keyScope, leftPanelDisabled, Settings, SettingsGet } from 'Common/Globals';
import { addObservablesTo } from 'Common/Utils'; import { addObservablesTo } from 'Common/Utils';
import { ThemeStore } from 'Stores/Theme'; import { ThemeStore } from 'Stores/Theme';
export const AppUserStore = { export const AppUserStore = {
attachmentsActions: ko.observableArray(),
devEmail: '',
devPassword: '',
populate: () => { populate: () => {
AppUserStore.projectHash(SettingsGet('ProjectHash'));
AppUserStore.contactsAutosave(!!SettingsGet('ContactsAutosave'));
AppUserStore.useLocalProxyForExternalImages(!!SettingsGet('UseLocalProxyForExternalImages'));
AppUserStore.contactsIsAllowed(!!SettingsGet('ContactsIsAllowed')); AppUserStore.contactsIsAllowed(!!SettingsGet('ContactsIsAllowed'));
const attachmentsActions = Settings.app('attachmentsActions');
AppUserStore.attachmentsActions(Array.isNotEmpty(attachmentsActions) ? attachmentsActions : []);
AppUserStore.devEmail = SettingsGet('DevEmail');
AppUserStore.devPassword = SettingsGet('DevPassword');
} }
}; };
addObservablesTo(AppUserStore, { addObservablesTo(AppUserStore, {
currentAudio: '', currentAudio: '',
focusedState: Focused.None, focusedState: Scope.None,
projectHash: '',
threadsAllowed: false, threadsAllowed: false,
composeInEdit: false, composeInEdit: false,
contactsAutosave: false,
useLocalProxyForExternalImages: false,
contactsIsAllowed: false contactsIsAllowed: false
}); });
AppUserStore.focusedState.subscribe(value => { AppUserStore.focusedState.subscribe(value => {
switch (value) { switch (value) {
case Focused.MessageList: case Scope.MessageList:
keyScope(KeyState.MessageList); case Scope.MessageView:
ThemeStore.isMobile() && leftPanelDisabled(true); case Scope.FolderList:
break; keyScope(value);
case Focused.MessageView: ThemeStore.isMobile() && leftPanelDisabled(Scope.FolderList !== value);
keyScope(KeyState.MessageView);
ThemeStore.isMobile() && leftPanelDisabled(true);
break;
case Focused.FolderList:
keyScope(KeyState.FolderList);
ThemeStore.isMobile() && leftPanelDisabled(false);
break;
default:
break; break;
} }
}); });

View file

@ -1,7 +1,7 @@
import ko from 'ko'; import ko from 'ko';
import { Notification } from 'Common/Enums'; import { Scope, Notification } from 'Common/Enums';
import { Focused, MessageSetAction } from 'Common/EnumsUser'; import { MessageSetAction } from 'Common/EnumsUser';
import { doc, elementById } from 'Common/Globals'; import { doc, elementById } from 'Common/Globals';
import { pInt, pString, addObservablesTo, addSubscribablesTo } from 'Common/Utils'; import { pInt, pString, addObservablesTo, addSubscribablesTo } from 'Common/Utils';
import { plainToHtml } from 'Common/UtilsUser'; import { plainToHtml } from 'Common/UtilsUser';
@ -202,10 +202,10 @@ export const MessageUserStore = new class {
message: message => { message: message => {
if (message) { if (message) {
if (!SettingsUserStore.usePreviewPane()) { if (!SettingsUserStore.usePreviewPane()) {
AppUserStore.focusedState(Focused.MessageView); AppUserStore.focusedState(Scope.MessageView);
} }
} else { } else {
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
this.messageFullScreenMode(false); this.messageFullScreenMode(false);
this.hideMessageBodies(); this.hideMessageBodies();

View file

@ -1,4 +1,4 @@
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
import { settingsMenuKeysHandler } from 'Knoin/Knoin'; import { settingsMenuKeysHandler } from 'Knoin/Knoin';
import { AbstractViewLeft } from 'Knoin/AbstractViews'; import { AbstractViewLeft } from 'Knoin/AbstractViews';
@ -18,7 +18,7 @@ class MenuSettingsAdminView extends AbstractViewLeft {
} }
onBuild(dom) { onBuild(dom) {
shortcuts.add('arrowup,arrowdown', '', KeyState.Settings, shortcuts.add('arrowup,arrowdown', '', Scope.Settings,
settingsMenuKeysHandler(dom.querySelectorAll('.b-admin-menu .e-item'))); settingsMenuKeysHandler(dom.querySelectorAll('.b-admin-menu .e-item')));
} }
} }

View file

@ -1,4 +1,4 @@
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
import { i18n } from 'Common/Translator'; import { i18n } from 'Common/Translator';
import { AbstractViewPopup } from 'Knoin/AbstractViews'; import { AbstractViewPopup } from 'Knoin/AbstractViews';
@ -18,7 +18,6 @@ class AskPopupView extends AbstractViewPopup {
this.bFocusYesOnShow = true; this.bFocusYesOnShow = true;
this.bDisabeCloseOnEsc = true; this.bDisabeCloseOnEsc = true;
this.sDefaultKeyScope = KeyState.PopupAsk;
} }
clearPopup() { clearPopup() {
@ -81,8 +80,8 @@ class AskPopupView extends AbstractViewPopup {
} }
onBuild() { onBuild() {
// shortcuts.add('tab', 'shift', KeyState.PopupAsk, () => { // shortcuts.add('tab', 'shift', Scope.Ask, () => {
shortcuts.add('tab,arrowright,arrowleft', '', KeyState.PopupAsk, () => { shortcuts.add('tab,arrowright,arrowleft', '', Scope.Ask, () => {
let btn = this.querySelector('.buttonYes'); let btn = this.querySelector('.buttonYes');
if (btn.matches(':focus')) { if (btn.matches(':focus')) {
btn = this.querySelector('.buttonNo'); btn = this.querySelector('.buttonNo');
@ -91,7 +90,7 @@ class AskPopupView extends AbstractViewPopup {
return false; return false;
}); });
shortcuts.add('escape', '', KeyState.PopupAsk, () => { shortcuts.add('escape', '', Scope.Ask, () => {
this.noClick(); this.noClick();
return false; return false;
}); });

View file

@ -1,7 +1,7 @@
import ko from 'ko'; import ko from 'ko';
import { import {
KeyState, Scope,
Notification, Notification,
UploadErrorCode UploadErrorCode
} from 'Common/Enums'; } from 'Common/Enums';
@ -125,10 +125,9 @@ class ComposePopupView extends AbstractViewPopup {
this.sLastFocusedField = 'to'; this.sLastFocusedField = 'to';
this.allowContacts = !!AppUserStore.contactsIsAllowed(); this.allowContacts = AppUserStore.contactsIsAllowed();
this.bSkipNextHide = false; this.bSkipNextHide = false;
this.composeInEdit = AppUserStore.composeInEdit;
this.editorDefaultType = SettingsUserStore.editorDefaultType; this.editorDefaultType = SettingsUserStore.editorDefaultType;
this.capaOpenPGP = PgpUserStore.capaOpenPGP; this.capaOpenPGP = PgpUserStore.capaOpenPGP;
@ -218,7 +217,6 @@ class ComposePopupView extends AbstractViewPopup {
}); });
this.bDisabeCloseOnEsc = true; this.bDisabeCloseOnEsc = true;
this.sDefaultKeyScope = KeyState.Compose;
this.tryToClosePopup = this.tryToClosePopup.debounce(200); this.tryToClosePopup = this.tryToClosePopup.debounce(200);
@ -1133,42 +1131,42 @@ class ComposePopupView extends AbstractViewPopup {
onBuild(dom) { onBuild(dom) {
this.initUploader(); this.initUploader();
shortcuts.add('q', 'meta', KeyState.Compose, ()=>false); shortcuts.add('q', 'meta', Scope.Compose, ()=>false);
shortcuts.add('w', 'meta', KeyState.Compose, ()=>false); shortcuts.add('w', 'meta', Scope.Compose, ()=>false);
shortcuts.add('m,contextmenu', '', KeyState.Compose, e => this.popupMenu(e)); shortcuts.add('m,contextmenu', '', Scope.Compose, e => this.popupMenu(e));
shortcuts.add('m', 'ctrl', KeyState.Compose, e => this.popupMenu(e)); shortcuts.add('m', 'ctrl', Scope.Compose, e => this.popupMenu(e));
shortcuts.add('escape,close', '', KeyState.Compose, () => { shortcuts.add('escape,close', '', Scope.Compose, () => {
this.skipCommand(); this.skipCommand();
return false; return false;
}); });
shortcuts.add('arrowdown', 'meta', KeyState.Compose, () => { shortcuts.add('arrowdown', 'meta', Scope.Compose, () => {
this.skipCommand(); this.skipCommand();
return false; return false;
}); });
shortcuts.add('s', 'meta', KeyState.Compose, () => { shortcuts.add('s', 'meta', Scope.Compose, () => {
this.saveCommand(); this.saveCommand();
return false; return false;
}); });
shortcuts.add('save', KeyState.Compose, () => { shortcuts.add('save', Scope.Compose, () => {
this.saveCommand(); this.saveCommand();
return false; return false;
}); });
if (Settings.app('allowCtrlEnterOnCompose')) { if (Settings.app('allowCtrlEnterOnCompose')) {
shortcuts.add('enter', 'meta', KeyState.Compose, () => { shortcuts.add('enter', 'meta', Scope.Compose, () => {
this.sendCommand(); this.sendCommand();
return false; return false;
}); });
} }
shortcuts.add('mailsend', '', KeyState.Compose, () => { shortcuts.add('mailsend', '', Scope.Compose, () => {
this.sendCommand(); this.sendCommand();
return false; return false;
}); });
shortcuts.add('escape,close', 'shift', KeyState.Compose, () => { shortcuts.add('escape,close', 'shift', Scope.Compose, () => {
this.modalVisibility() && this.tryToClosePopup(); this.modalVisibility() && this.tryToClosePopup();
return false; return false;
}); });

View file

@ -2,7 +2,7 @@ import ko from 'ko';
import { pString, defaultOptionsAfterRender } from 'Common/Utils'; import { pString, defaultOptionsAfterRender } from 'Common/Utils';
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
import { i18n } from 'Common/Translator'; import { i18n } from 'Common/Translator';
import { PgpUserStore } from 'Stores/User/Pgp'; import { PgpUserStore } from 'Stores/User/Pgp';
@ -88,8 +88,6 @@ class ComposeOpenPgpPopupView extends AbstractViewPopup {
} }
}); });
this.sDefaultKeyScope = KeyState.PopupComposeOpenPGP;
this.defaultOptionsAfterRender = defaultOptionsAfterRender; this.defaultOptionsAfterRender = defaultOptionsAfterRender;
this.deletePublickKey = this.deletePublickKey.bind(this); this.deletePublickKey = this.deletePublickKey.bind(this);
@ -290,8 +288,8 @@ class ComposeOpenPgpPopupView extends AbstractViewPopup {
} }
onBuild() { onBuild() {
// shortcuts.add('tab', 'shift', KeyState.PopupComposeOpenPGP, () => { // shortcuts.add('tab', 'shift', Scope.ComposeOpenPgp, () => {
shortcuts.add('tab', '', KeyState.PopupComposeOpenPGP, () => { shortcuts.add('tab', '', Scope.ComposeOpenPgp, () => {
let btn = this.querySelector('.inputPassword'); let btn = this.querySelector('.inputPassword');
if (btn.matches(':focus')) { if (btn.matches(':focus')) {
btn = this.querySelector('.buttonDo'); btn = this.querySelector('.buttonDo');

View file

@ -3,7 +3,7 @@ import ko from 'ko';
import { import {
SaveSettingsStep, SaveSettingsStep,
Notification, Notification,
KeyState Scope
} from 'Common/Enums'; } from 'Common/Enums';
import { ComposeType } from 'Common/EnumsUser'; import { ComposeType } from 'Common/EnumsUser';
@ -94,8 +94,6 @@ class ContactsPopupView extends AbstractViewPopup {
// this.saveCommandDebounce = _.debounce(this.saveCommand.bind(this), 1000); // this.saveCommandDebounce = _.debounce(this.saveCommand.bind(this), 1000);
this.sDefaultKeyScope = KeyState.ContactList;
const const
// propertyFocused = property => !property.isValid() && !property.focused(), // propertyFocused = property => !property.isValid() && !property.focused(),
pagecount = () => Math.max(1, Math.ceil(this.contactsCount() / CONTACTS_PER_PAGE)); pagecount = () => Math.max(1, Math.ceil(this.contactsCount() / CONTACTS_PER_PAGE));
@ -490,14 +488,14 @@ class ContactsPopupView extends AbstractViewPopup {
} }
onBuild(dom) { onBuild(dom) {
this.selector.init(dom.querySelector('.b-list-content'), KeyState.ContactList); this.selector.init(dom.querySelector('.b-list-content'), Scope.Contacts);
shortcuts.add('delete', '', KeyState.ContactList, () => { shortcuts.add('delete', '', Scope.Contacts, () => {
this.deleteCommand(); this.deleteCommand();
return false; return false;
}); });
shortcuts.add('c,w', '', KeyState.ContactList, () => { shortcuts.add('c,w', '', Scope.Contacts, () => {
this.newMessageCommand(); this.newMessageCommand();
return false; return false;
}); });

View file

@ -1,11 +1,10 @@
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
import { AbstractViewPopup } from 'Knoin/AbstractViews'; import { AbstractViewPopup } from 'Knoin/AbstractViews';
class KeyboardShortcutsHelpPopupView extends AbstractViewPopup { class KeyboardShortcutsHelpPopupView extends AbstractViewPopup {
constructor() { constructor() {
super('KeyboardShortcutsHelp'); super('KeyboardShortcutsHelp');
this.sDefaultKeyScope = KeyState.PopupKeyboardShortcutsHelp;
} }
onBuild(dom) { onBuild(dom) {
@ -13,7 +12,7 @@ class KeyboardShortcutsHelpPopupView extends AbstractViewPopup {
// shortcuts.add('tab', 'shift', // shortcuts.add('tab', 'shift',
shortcuts.add('tab,arrowleft,arrowright', '', shortcuts.add('tab,arrowleft,arrowright', '',
KeyState.PopupKeyboardShortcutsHelp, Scope.KeyboardShortcutsHelp,
((event, handler)=>{ ((event, handler)=>{
if (event && handler) { if (event && handler) {
const tabs = dom.querySelectorAll('.nav.nav-tabs > li'), const tabs = dom.querySelectorAll('.nav.nav-tabs > li'),

View file

@ -1,7 +1,7 @@
import ko from 'ko'; import ko from 'ko';
import { pString } from 'Common/Utils'; import { pString } from 'Common/Utils';
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
import { decorateKoCommands } from 'Knoin/Knoin'; import { decorateKoCommands } from 'Knoin/Knoin';
import { AbstractViewPopup } from 'Knoin/AbstractViews'; import { AbstractViewPopup } from 'Knoin/AbstractViews';
@ -20,8 +20,6 @@ class MessageOpenPgpPopupView extends AbstractViewPopup {
this.resultCallback = null; this.resultCallback = null;
this.sDefaultKeyScope = KeyState.PopupMessageOpenPGP;
decorateKoCommands(this, { decorateKoCommands(this, {
doCommand: self => !self.submitRequest() doCommand: self => !self.submitRequest()
}); });
@ -77,8 +75,8 @@ class MessageOpenPgpPopupView extends AbstractViewPopup {
} }
onBuild(oDom) { onBuild(oDom) {
// shortcuts.add('tab', 'shift', KeyState.PopupMessageOpenPGP, () => { // shortcuts.add('tab', 'shift', Scope.MessageOpenPgp, () => {
shortcuts.add('tab', '', KeyState.PopupMessageOpenPGP, () => { shortcuts.add('tab', '', Scope.MessageOpenPgp, () => {
let btn = this.querySelector('.inputPassword'); let btn = this.querySelector('.inputPassword');
if (btn.matches(':focus')) { if (btn.matches(':focus')) {
btn = this.querySelector('.buttonDo'); btn = this.querySelector('.buttonDo');

View file

@ -1,6 +1,6 @@
import ko from 'ko'; import ko from 'ko';
import { KeyState, Notification } from 'Common/Enums'; import { Scope, Notification } from 'Common/Enums';
import { getNotification, i18n } from 'Common/Translator'; import { getNotification, i18n } from 'Common/Translator';
import Remote from 'Remote/Admin/Fetch'; import Remote from 'Remote/Admin/Fetch';
@ -27,7 +27,7 @@ class PluginPopupView extends AbstractViewPopup {
this.hasConfiguration = ko.computed(() => 0 < this.configures().length); this.hasConfiguration = ko.computed(() => 0 < this.configures().length);
this.bDisabeCloseOnEsc = true; this.bDisabeCloseOnEsc = true;
this.sDefaultKeyScope = KeyState.All; this.sDefaultScope = Scope.All;
this.tryToClosePopup = this.tryToClosePopup.debounce(200); this.tryToClosePopup = this.tryToClosePopup.debounce(200);
@ -101,7 +101,7 @@ class PluginPopupView extends AbstractViewPopup {
} }
onBuild() { onBuild() {
shortcuts.add('escape', '', KeyState.All, () => { shortcuts.add('escape', '', Scope.All, () => {
if (this.modalVisibility()) { if (this.modalVisibility()) {
this.tryToClosePopup(); this.tryToClosePopup();
} }

View file

@ -1,4 +1,4 @@
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
import { doc } from 'Common/Globals'; import { doc } from 'Common/Globals';
import { AbstractViewPopup } from 'Knoin/AbstractViews'; import { AbstractViewPopup } from 'Knoin/AbstractViews';
@ -10,8 +10,6 @@ class ViewOpenPgpKeyPopupView extends AbstractViewPopup {
key: '', key: '',
keyDom: null keyDom: null
}); });
this.sDefaultKeyScope = KeyState.PopupViewOpenPGP;
} }
clearPopup() { clearPopup() {
@ -38,7 +36,7 @@ class ViewOpenPgpKeyPopupView extends AbstractViewPopup {
} }
onBuild() { onBuild() {
shortcuts.add('a', 'meta', KeyState.PopupViewOpenPGP, () => { shortcuts.add('a', 'meta', Scope.ViewOpenPgpKey, () => {
this.selectKey(); this.selectKey();
return false; return false;
}); });

View file

@ -2,7 +2,7 @@ import { AppUserStore } from 'Stores/User/App';
import { AccountUserStore } from 'Stores/User/Account'; import { AccountUserStore } from 'Stores/User/Account';
import { MessageUserStore } from 'Stores/User/Message'; import { MessageUserStore } from 'Stores/User/Message';
import { Capa, KeyState } from 'Common/Enums'; import { Capa, Scope } from 'Common/Enums';
import { settings } from 'Common/Links'; import { settings } from 'Common/Links';
import { showScreenPopup } from 'Knoin/Knoin'; import { showScreenPopup } from 'Knoin/Knoin';
@ -36,7 +36,7 @@ export class AbstractSystemDropDownUserView extends AbstractViewRight {
capaAdditionalAccounts: Settings.capa(Capa.AdditionalAccounts) capaAdditionalAccounts: Settings.capa(Capa.AdditionalAccounts)
}); });
this.allowContacts = !!AppUserStore.contactsIsAllowed(); this.allowContacts = AppUserStore.contactsIsAllowed();
this.addAccountClick = this.addAccountClick.bind(this); this.addAccountClick = this.addAccountClick.bind(this);
@ -106,7 +106,7 @@ export class AbstractSystemDropDownUserView extends AbstractViewRight {
} }
onBuild() { onBuild() {
shortcuts.add('m,contextmenu', '', [KeyState.MessageList, KeyState.MessageView, KeyState.Settings], () => { shortcuts.add('m,contextmenu', '', [Scope.MessageList, Scope.MessageView, Scope.Settings], () => {
if (this.viewModelVisible) { if (this.viewModelVisible) {
MessageUserStore.messageFullScreenMode(false); MessageUserStore.messageFullScreenMode(false);
this.accountMenuDropdownTrigger(true); this.accountMenuDropdownTrigger(true);
@ -115,7 +115,7 @@ export class AbstractSystemDropDownUserView extends AbstractViewRight {
}); });
// shortcuts help // shortcuts help
shortcuts.add('?,f1,help', '', [KeyState.MessageList, KeyState.MessageView, KeyState.Settings], () => { shortcuts.add('?,f1,help', '', [Scope.MessageList, Scope.MessageView, Scope.Settings], () => {
if (this.viewModelVisible) { if (this.viewModelVisible) {
showScreenPopup(KeyboardShortcutsHelpPopupView); showScreenPopup(KeyboardShortcutsHelpPopupView);
return false; return false;

View file

@ -8,7 +8,6 @@ import { ClientSideKeyName } from 'Common/EnumsUser';
import { getNotification, getNotificationFromResponse, reload as translatorReload, convertLangName } from 'Common/Translator'; import { getNotification, getNotificationFromResponse, reload as translatorReload, convertLangName } from 'Common/Translator';
import { AppUserStore } from 'Stores/User/App';
import { LanguageStore } from 'Stores/Language'; import { LanguageStore } from 'Stores/Language';
import * as Local from 'Storage/Client'; import * as Local from 'Storage/Client';
@ -45,8 +44,8 @@ class LoginUserView extends AbstractViewCenter {
this.addObservables({ this.addObservables({
loadingDesc: SettingsGet('LoadingDescription'), loadingDesc: SettingsGet('LoadingDescription'),
email: '', email: SettingsGet('DevEmail'),
password: '', password: SettingsGet('DevPassword'),
signMe: false, signMe: false,
additionalCode: '', additionalCode: '',
@ -232,9 +231,6 @@ class LoginUserView extends AbstractViewCenter {
break; break;
} }
this.email(AppUserStore.devEmail);
this.password(AppUserStore.devPassword);
setTimeout(() => { setTimeout(() => {
LanguageStore.language.subscribe((value) => { LanguageStore.language.subscribe((value) => {
this.langRequest(true); this.langRequest(true);

View file

@ -1,7 +1,6 @@
import ko from 'ko'; import ko from 'ko';
import { Capa, KeyState } from 'Common/Enums'; import { Capa, Scope } from 'Common/Enums';
import { Focused } from 'Common/EnumsUser';
import { leftPanelDisabled, moveAction, Settings } from 'Common/Globals'; import { leftPanelDisabled, moveAction, Settings } from 'Common/Globals';
import { mailBox, settings } from 'Common/Links'; import { mailBox, settings } from 'Common/Links';
import { setFolderHash } from 'Common/Cache'; import { setFolderHash } from 'Common/Cache';
@ -39,9 +38,9 @@ export class FolderListMailBoxUserView extends AbstractViewLeft {
this.leftPanelDisabled = leftPanelDisabled; this.leftPanelDisabled = leftPanelDisabled;
this.allowComposer = Settings.capa(Capa.Composer); this.allowComposer = Settings.capa(Capa.Composer);
this.allowContacts = !!AppUserStore.contactsIsAllowed(); this.allowContacts = AppUserStore.contactsIsAllowed();
this.folderListFocused = ko.computed(() => Focused.FolderList === AppUserStore.focusedState()); this.folderListFocused = ko.computed(() => Scope.FolderList === AppUserStore.focusedState());
this.isInboxStarred = ko.computed( this.isInboxStarred = ko.computed(
() => () =>
@ -89,7 +88,7 @@ export class FolderListMailBoxUserView extends AbstractViewLeft {
); );
} }
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
} }
}; };
@ -117,7 +116,7 @@ export class FolderListMailBoxUserView extends AbstractViewLeft {
el && fSelectFolder(el, event, false); el && fSelectFolder(el, event, false);
}); });
shortcuts.add('arrowup,arrowdown', '', KeyState.FolderList, event => { shortcuts.add('arrowup,arrowdown', '', Scope.FolderList, event => {
let items = [], index = 0; let items = [], index = 0;
dom.querySelectorAll('.b-folders .e-item .e-link:not(.hidden)').forEach(node => { dom.querySelectorAll('.b-folders .e-item .e-link:not(.hidden)').forEach(node => {
if (node.offsetHeight || node.getClientRects().length) { if (node.offsetHeight || node.getClientRects().length) {
@ -141,17 +140,17 @@ export class FolderListMailBoxUserView extends AbstractViewLeft {
return false; return false;
}); });
shortcuts.add('enter,open', '', KeyState.FolderList, () => { shortcuts.add('enter,open', '', Scope.FolderList, () => {
const item = qs('.b-folders .e-item .e-link:not(.hidden).focused'); const item = qs('.b-folders .e-item .e-link:not(.hidden).focused');
if (item) { if (item) {
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
item.click(); item.click();
} }
return false; return false;
}); });
shortcuts.add('space', '', KeyState.FolderList, () => { shortcuts.add('space', '', Scope.FolderList, () => {
const item = qs('.b-folders .e-item .e-link:not(.hidden).focused'), const item = qs('.b-folders .e-item .e-link:not(.hidden).focused'),
folder = item && ko.dataFor(item); folder = item && ko.dataFor(item);
if (folder) { if (folder) {
@ -163,9 +162,9 @@ export class FolderListMailBoxUserView extends AbstractViewLeft {
return false; return false;
}); });
// shortcuts.add('tab', 'shift', KeyState.FolderList, () => { // shortcuts.add('tab', 'shift', Scope.FolderList, () => {
shortcuts.add('escape,tab,arrowright', '', KeyState.FolderList, () => { shortcuts.add('escape,tab,arrowright', '', Scope.FolderList, () => {
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
moveAction(false); moveAction(false);
return false; return false;
}); });
@ -173,7 +172,7 @@ export class FolderListMailBoxUserView extends AbstractViewLeft {
AppUserStore.focusedState.subscribe(value => { AppUserStore.focusedState.subscribe(value => {
let el = qs('.b-folders .e-item .e-link.focused'); let el = qs('.b-folders .e-item .e-link.focused');
el && qs('.b-folders .e-item .e-link.focused').classList.remove('focused'); el && qs('.b-folders .e-item .e-link.focused').classList.remove('focused');
if (Focused.FolderList === value) { if (Scope.FolderList === value) {
el = qs('.b-folders .e-item .e-link.selected'); el = qs('.b-folders .e-item .e-link.selected');
el && qs('.b-folders .e-item .e-link.selected').classList.add('focused'); el && qs('.b-folders .e-item .e-link.selected').classList.add('focused');
} }

View file

@ -2,11 +2,10 @@ import ko from 'ko';
import { import {
Capa, Capa,
KeyState Scope
} from 'Common/Enums'; } from 'Common/Enums';
import { import {
Focused,
ComposeType, ComposeType,
FolderType, FolderType,
MessageSetAction MessageSetAction
@ -175,7 +174,7 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
mobileCheckedStateHide: () => ThemeStore.isMobile() ? !MessageUserStore.listChecked().length : true, mobileCheckedStateHide: () => ThemeStore.isMobile() ? !MessageUserStore.listChecked().length : true,
messageListFocused: () => Focused.MessageList === AppUserStore.focusedState() messageListFocused: () => Scope.MessageList === AppUserStore.focusedState()
}); });
this.hasCheckedOrSelectedLines = MessageUserStore.hasCheckedOrSelected, this.hasCheckedOrSelectedLines = MessageUserStore.hasCheckedOrSelected,
@ -324,7 +323,7 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
} }
let b = moveAction(); let b = moveAction();
AppUserStore.focusedState(b ? Focused.MessageList : Focused.FolderList); AppUserStore.focusedState(b ? Scope.MessageList : Scope.FolderList);
moveAction(!b); moveAction(!b);
} }
} }
@ -666,13 +665,13 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
onBuild(dom) { onBuild(dom) {
const eqs = (ev, s) => ev.target.closestWithin(s, dom); const eqs = (ev, s) => ev.target.closestWithin(s, dom);
this.selector.init(dom.querySelector('.b-content'), KeyState.MessageList); this.selector.init(dom.querySelector('.b-content'), Scope.MessageList);
dom.addEventListener('click', event => { dom.addEventListener('click', event => {
ThemeStore.isMobile() && leftPanelDisabled(true); ThemeStore.isMobile() && leftPanelDisabled(true);
if (eqs(event, '.messageList .b-message-list-wrapper') && Focused.MessageView === AppUserStore.focusedState()) { if (eqs(event, '.messageList .b-message-list-wrapper') && Scope.MessageView === AppUserStore.focusedState()) {
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
} }
let el = eqs(event, '.e-paginator .e-page'); let el = eqs(event, '.e-paginator .e-page');
@ -701,7 +700,7 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
} }
initShortcuts() { initShortcuts() {
shortcuts.add('enter,open', '', KeyState.MessageList, () => { shortcuts.add('enter,open', '', Scope.MessageList, () => {
if (this.message() && this.useAutoSelect()) { if (this.message() && this.useAutoSelect()) {
dispatchEvent(new CustomEvent('mailbox.message-view.toggle-full-screen')); dispatchEvent(new CustomEvent('mailbox.message-view.toggle-full-screen'));
return false; return false;
@ -712,18 +711,18 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
if (Settings.capa(Capa.MessageListActions)) { if (Settings.capa(Capa.MessageListActions)) {
// archive (zip) // archive (zip)
shortcuts.add('z', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('z', '', [Scope.MessageList, Scope.MessageView], () => {
this.archiveCommand(); this.archiveCommand();
return false; return false;
}); });
// delete // delete
shortcuts.add('delete', 'shift', KeyState.MessageList, () => { shortcuts.add('delete', 'shift', Scope.MessageList, () => {
MessageUserStore.listCheckedOrSelected().length && this.deleteWithoutMoveCommand(); MessageUserStore.listCheckedOrSelected().length && this.deleteWithoutMoveCommand();
return false; return false;
}); });
// shortcuts.add('3', 'shift', KeyState.MessageList, () => { // shortcuts.add('3', 'shift', Scope.MessageList, () => {
shortcuts.add('delete', '', KeyState.MessageList, () => { shortcuts.add('delete', '', Scope.MessageList, () => {
MessageUserStore.listCheckedOrSelected().length && this.deleteCommand(); MessageUserStore.listCheckedOrSelected().length && this.deleteCommand();
return false; return false;
}); });
@ -731,33 +730,33 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
if (Settings.capa(Capa.Reload)) { if (Settings.capa(Capa.Reload)) {
// check mail // check mail
shortcuts.add('r', 'meta', [KeyState.FolderList, KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('r', 'meta', [Scope.FolderList, Scope.MessageList, Scope.MessageView], () => {
this.reloadCommand(); this.reloadCommand();
return false; return false;
}); });
} }
// check all // check all
shortcuts.add('a', 'meta', KeyState.MessageList, () => { shortcuts.add('a', 'meta', Scope.MessageList, () => {
this.checkAll(!(this.checkAll() && !this.isIncompleteChecked())); this.checkAll(!(this.checkAll() && !this.isIncompleteChecked()));
return false; return false;
}); });
// write/compose (open compose popup) // write/compose (open compose popup)
shortcuts.add('w,c,new', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('w,c,new', '', [Scope.MessageList, Scope.MessageView], () => {
showMessageComposer(); showMessageComposer();
return false; return false;
}); });
if (Settings.capa(Capa.MessageListActions)) { if (Settings.capa(Capa.MessageListActions)) {
// important - star/flag messages // important - star/flag messages
shortcuts.add('i', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('i', '', [Scope.MessageList, Scope.MessageView], () => {
this.flagMessagesFast(); this.flagMessagesFast();
return false; return false;
}); });
} }
shortcuts.add('t', '', [KeyState.MessageList], () => { shortcuts.add('t', '', [Scope.MessageList], () => {
let message = this.selectorMessageSelected(); let message = this.selectorMessageSelected();
if (!message) { if (!message) {
message = this.selectorMessageFocused(); message = this.selectorMessageFocused();
@ -772,7 +771,7 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
if (Settings.capa(Capa.MessageListActions)) { if (Settings.capa(Capa.MessageListActions)) {
// move // move
shortcuts.add('insert', '', KeyState.MessageList, () => { shortcuts.add('insert', '', Scope.MessageList, () => {
if (this.newMoveToFolder) { if (this.newMoveToFolder) {
this.moveNewCommand(); this.moveNewCommand();
} else { } else {
@ -785,33 +784,33 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
if (Settings.capa(Capa.MessageListActions)) { if (Settings.capa(Capa.MessageListActions)) {
// read // read
shortcuts.add('q', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('q', '', [Scope.MessageList, Scope.MessageView], () => {
this.seenMessagesFast(true); this.seenMessagesFast(true);
return false; return false;
}); });
// unread // unread
shortcuts.add('u', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('u', '', [Scope.MessageList, Scope.MessageView], () => {
this.seenMessagesFast(false); this.seenMessagesFast(false);
return false; return false;
}); });
} }
shortcuts.add('f,mailforward', 'shift', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('f,mailforward', 'shift', [Scope.MessageList, Scope.MessageView], () => {
this.multyForwardCommand(); this.multyForwardCommand();
return false; return false;
}); });
if (Settings.capa(Capa.Search)) { if (Settings.capa(Capa.Search)) {
// search input focus // search input focus
shortcuts.add('/', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('/', '', [Scope.MessageList, Scope.MessageView], () => {
this.inputMessageListSearchFocus(true); this.inputMessageListSearchFocus(true);
return false; return false;
}); });
} }
// cancel search // cancel search
shortcuts.add('escape', '', KeyState.MessageList, () => { shortcuts.add('escape', '', Scope.MessageList, () => {
if (this.messageListSearchDesc()) { if (this.messageListSearchDesc()) {
this.cancelSearch(); this.cancelSearch();
return false; return false;
@ -824,21 +823,21 @@ export class MessageListMailBoxUserView extends AbstractViewRight {
}); });
// change focused state // change focused state
shortcuts.add('tab', 'shift', KeyState.MessageList, () => { shortcuts.add('tab', 'shift', Scope.MessageList, () => {
AppUserStore.focusedState(Focused.FolderList); AppUserStore.focusedState(Scope.FolderList);
return false; return false;
}); });
shortcuts.add('arrowleft', '', KeyState.MessageList, () => { shortcuts.add('arrowleft', '', Scope.MessageList, () => {
AppUserStore.focusedState(Focused.FolderList); AppUserStore.focusedState(Scope.FolderList);
return false; return false;
}); });
shortcuts.add('tab,arrowright', '', KeyState.MessageList, () => { shortcuts.add('tab,arrowright', '', Scope.MessageList, () => {
this.message() && AppUserStore.focusedState(Focused.MessageView); this.message() && AppUserStore.focusedState(Scope.MessageView);
return false; return false;
}); });
shortcuts.add('arrowleft', 'meta', KeyState.MessageView, ()=>false); shortcuts.add('arrowleft', 'meta', Scope.MessageView, ()=>false);
shortcuts.add('arrowright', 'meta', KeyState.MessageView, ()=>false); shortcuts.add('arrowright', 'meta', Scope.MessageView, ()=>false);
} }
prefetchNextTick() { prefetchNextTick() {

View file

@ -4,14 +4,13 @@ import { UNUSED_OPTION_VALUE } from 'Common/Consts';
import { import {
Capa, Capa,
KeyState Scope
} from 'Common/Enums'; } from 'Common/Enums';
import { import {
ComposeType, ComposeType,
ClientSideKeyName, ClientSideKeyName,
FolderType, FolderType,
Focused,
MessageSetAction MessageSetAction
} from 'Common/EnumsUser'; } from 'Common/EnumsUser';
@ -80,7 +79,8 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
this.allowMessageActions = Settings.capa(Capa.MessageActions); this.allowMessageActions = Settings.capa(Capa.MessageActions);
this.allowMessageListActions = Settings.capa(Capa.MessageListActions); this.allowMessageListActions = Settings.capa(Capa.MessageListActions);
this.attachmentsActions = AppUserStore.attachmentsActions; const attachmentsActions = Settings.app('attachmentsActions');
this.attachmentsActions = ko.observableArray(Array.isNotEmpty(attachmentsActions) ? attachmentsActions : []);
this.message = MessageUserStore.message; this.message = MessageUserStore.message;
this.hasCheckedMessages = MessageUserStore.hasCheckedMessages; this.hasCheckedMessages = MessageUserStore.hasCheckedMessages;
@ -186,7 +186,7 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
return ''; return '';
}, },
messageFocused: () => Focused.MessageView === AppUserStore.focusedState(), messageFocused: () => Scope.MessageView === AppUserStore.focusedState(),
messageListAndMessageViewLoading: messageListAndMessageViewLoading:
() => MessageUserStore.listCompleteLoading() || MessageUserStore.messageLoading() () => MessageUserStore.listCompleteLoading() || MessageUserStore.messageLoading()
@ -364,7 +364,7 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
} }
onBuild(dom) { onBuild(dom) {
this.fullScreenMode.subscribe(value => value && this.message() && AppUserStore.focusedState(Focused.MessageView)); this.fullScreenMode.subscribe(value => value && this.message() && AppUserStore.focusedState(Scope.MessageView));
this.showFullInfo.subscribe(value => Local.set(ClientSideKeyName.MessageHeaderFullInfo, value ? '1' : '0')); this.showFullInfo.subscribe(value => Local.set(ClientSideKeyName.MessageHeaderFullInfo, value ? '1' : '0'));
@ -462,13 +462,13 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
}); });
AppUserStore.focusedState.subscribe((value) => { AppUserStore.focusedState.subscribe((value) => {
if (Focused.MessageView !== value) { if (Scope.MessageView !== value) {
this.scrollMessageToTop(); this.scrollMessageToTop();
this.scrollMessageToLeft(); this.scrollMessageToLeft();
} }
}); });
keyScopeReal.subscribe(value => this.messageDomFocused(KeyState.MessageView === value && !inFocus())); keyScopeReal.subscribe(value => this.messageDomFocused(Scope.MessageView === value && !inFocus()));
this.oMessageScrollerDom = dom.querySelector('.messageItem'); this.oMessageScrollerDom = dom.querySelector('.messageItem');
@ -485,12 +485,12 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
this.fullScreenMode(false); this.fullScreenMode(false);
if (preview) { if (preview) {
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
} }
} else if (!preview) { } else if (!preview) {
this.message(null); this.message(null);
} else { } else {
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
} }
return false; return false;
@ -501,16 +501,16 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
initShortcuts() { initShortcuts() {
// exit fullscreen, back // exit fullscreen, back
shortcuts.add('escape,backspace', '', KeyState.MessageView, this.escShortcuts.bind(this)); shortcuts.add('escape,backspace', '', Scope.MessageView, this.escShortcuts.bind(this));
// fullscreen // fullscreen
shortcuts.add('enter,open', '', KeyState.MessageView, () => { shortcuts.add('enter,open', '', Scope.MessageView, () => {
this.toggleFullScreen(); this.toggleFullScreen();
return false; return false;
}); });
// reply // reply
shortcuts.add('r,mailreply', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('r,mailreply', '', [Scope.MessageList, Scope.MessageView], () => {
if (MessageUserStore.message()) { if (MessageUserStore.message()) {
this.replyCommand(); this.replyCommand();
return false; return false;
@ -519,14 +519,14 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
}); });
// replaAll // replaAll
shortcuts.add('a', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('a', '', [Scope.MessageList, Scope.MessageView], () => {
if (MessageUserStore.message()) { if (MessageUserStore.message()) {
this.replyAllCommand(); this.replyAllCommand();
return false; return false;
} }
return true; return true;
}); });
shortcuts.add('mailreply', 'shift', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('mailreply', 'shift', [Scope.MessageList, Scope.MessageView], () => {
if (MessageUserStore.message()) { if (MessageUserStore.message()) {
this.replyAllCommand(); this.replyAllCommand();
return false; return false;
@ -535,7 +535,7 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
}); });
// forward // forward
shortcuts.add('f,mailforward', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('f,mailforward', '', [Scope.MessageList, Scope.MessageView], () => {
if (MessageUserStore.message()) { if (MessageUserStore.message()) {
this.forwardCommand(); this.forwardCommand();
return false; return false;
@ -545,7 +545,7 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
}); });
// message information // message information
shortcuts.add('i', 'meta', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('i', 'meta', [Scope.MessageList, Scope.MessageView], () => {
if (MessageUserStore.message()) { if (MessageUserStore.message()) {
this.showFullInfo(!this.showFullInfo()); this.showFullInfo(!this.showFullInfo());
} }
@ -553,7 +553,7 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
}); });
// toggle message blockquotes // toggle message blockquotes
shortcuts.add('b', '', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('b', '', [Scope.MessageList, Scope.MessageView], () => {
const message = MessageUserStore.message(); const message = MessageUserStore.message();
if (message && message.body) { if (message && message.body) {
message.body.querySelectorAll('.rlBlockquoteSwitcher').forEach(node => node.click()); message.body.querySelectorAll('.rlBlockquoteSwitcher').forEach(node => node.click());
@ -562,46 +562,46 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
return true; return true;
}); });
shortcuts.add('arrowup,arrowleft', 'meta', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('arrowup,arrowleft', 'meta', [Scope.MessageList, Scope.MessageView], () => {
this.goUpCommand(); this.goUpCommand();
return false; return false;
}); });
shortcuts.add('arrowdown,arrowright', 'meta', [KeyState.MessageList, KeyState.MessageView], () => { shortcuts.add('arrowdown,arrowright', 'meta', [Scope.MessageList, Scope.MessageView], () => {
this.goDownCommand(); this.goDownCommand();
return false; return false;
}); });
// print // print
shortcuts.add('p,printscreen', 'meta', [KeyState.MessageView, KeyState.MessageList], () => { shortcuts.add('p,printscreen', 'meta', [Scope.MessageView, Scope.MessageList], () => {
this.message() && this.message().printMessage(); this.message() && this.message().printMessage();
return false; return false;
}); });
// delete // delete
shortcuts.add('delete', '', KeyState.MessageView, () => { shortcuts.add('delete', '', Scope.MessageView, () => {
this.deleteCommand(); this.deleteCommand();
return false; return false;
}); });
shortcuts.add('delete', 'shift', KeyState.MessageView, () => { shortcuts.add('delete', 'shift', Scope.MessageView, () => {
this.deleteWithoutMoveCommand(); this.deleteWithoutMoveCommand();
return false; return false;
}); });
// change focused state // change focused state
shortcuts.add('arrowleft', '', KeyState.MessageView, () => { shortcuts.add('arrowleft', '', Scope.MessageView, () => {
if (!this.fullScreenMode() && this.message() && SettingsUserStore.usePreviewPane()) { if (!this.fullScreenMode() && this.message() && SettingsUserStore.usePreviewPane()) {
if (this.oMessageScrollerDom && 0 < this.oMessageScrollerDom.scrollLeft) { if (this.oMessageScrollerDom && 0 < this.oMessageScrollerDom.scrollLeft) {
return true; return true;
} }
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
return false; return false;
} }
}); });
// shortcuts.add('tab', 'shift', KeyState.MessageView, (event, handler) => { // shortcuts.add('tab', 'shift', Scope.MessageView, (event, handler) => {
shortcuts.add('tab', '', KeyState.MessageView, () => { shortcuts.add('tab', '', Scope.MessageView, () => {
if (!this.fullScreenMode() && this.message() && SettingsUserStore.usePreviewPane()) { if (!this.fullScreenMode() && this.message() && SettingsUserStore.usePreviewPane()) {
AppUserStore.focusedState(Focused.MessageList); AppUserStore.focusedState(Scope.MessageList);
} }
return false; return false;
}); });

View file

@ -1,4 +1,4 @@
import { KeyState } from 'Common/Enums'; import { Scope } from 'Common/Enums';
import { leftPanelDisabled } from 'Common/Globals'; import { leftPanelDisabled } from 'Common/Globals';
import { settings, mailbox } from 'Common/Links'; import { settings, mailbox } from 'Common/Links';
import { getFolderInboxName } from 'Common/Cache'; import { getFolderInboxName } from 'Common/Cache';
@ -27,7 +27,7 @@ export class MenuSettingsUserView extends AbstractViewLeft {
&& leftPanelDisabled(true) && leftPanelDisabled(true)
); );
shortcuts.add('arrowup,arrowdown', '', KeyState.Settings, shortcuts.add('arrowup,arrowdown', '', Scope.Settings,
settingsMenuKeysHandler(dom.querySelectorAll('.b-settings-menu .e-item'))); settingsMenuKeysHandler(dom.querySelectorAll('.b-settings-menu .e-item')));
} }