mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Cleanup AppUserStore
Simplify KeyState/Focused as Scope enum
This commit is contained in:
parent
62cb918180
commit
eff92c3152
27 changed files with 177 additions and 232 deletions
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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'
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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']
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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')));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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'),
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue