Fix Alt+ArrowDown shortcut
This commit is contained in:
parent
ccb8e7f44e
commit
a248f9d74e
@ -43,7 +43,7 @@ import appNavigationController from '../../components/appNavigationController';
|
|||||||
import appNotificationsManager from './appNotificationsManager';
|
import appNotificationsManager from './appNotificationsManager';
|
||||||
import AppPrivateSearchTab from '../../components/sidebarRight/tabs/search';
|
import AppPrivateSearchTab from '../../components/sidebarRight/tabs/search';
|
||||||
import { i18n, LangPackKey } from '../langPack';
|
import { i18n, LangPackKey } from '../langPack';
|
||||||
import { ChatInvite, SendMessageAction } from '../../layer';
|
import { ChatInvite, Dialog, SendMessageAction } from '../../layer';
|
||||||
import { hslaStringToHex } from '../../helpers/color';
|
import { hslaStringToHex } from '../../helpers/color';
|
||||||
import { copy, getObjectKeysAndSort } from '../../helpers/object';
|
import { copy, getObjectKeysAndSort } from '../../helpers/object';
|
||||||
import { getFilesFromEvent } from '../../helpers/files';
|
import { getFilesFromEvent } from '../../helpers/files';
|
||||||
@ -422,6 +422,89 @@ export class AppImManager {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.onHashChange();
|
this.onHashChange();
|
||||||
|
this.attachKeydownListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
private attachKeydownListener() {
|
||||||
|
const IGNORE_KEYS = new Set(['PageUp', 'PageDown', 'Meta', 'Control']);
|
||||||
|
const onKeyDown = (e: KeyboardEvent) => {
|
||||||
|
if(rootScope.isOverlayActive || IGNORE_KEYS.has(e.key)) return;
|
||||||
|
|
||||||
|
const target = e.target as HTMLElement;
|
||||||
|
|
||||||
|
//if(target.tagName === 'INPUT') return;
|
||||||
|
|
||||||
|
//this.log('onkeydown', e, document.activeElement);
|
||||||
|
|
||||||
|
const chat = this.chat;
|
||||||
|
|
||||||
|
if(e.code === 'KeyC' && (e.ctrlKey || e.metaKey) && target.tagName !== 'INPUT') {
|
||||||
|
return;
|
||||||
|
} else if(e.altKey && (e.code === 'ArrowUp' || e.code === 'ArrowDown')) {
|
||||||
|
const folder = appMessagesManager.dialogsStorage.getFolder(rootScope.filterId, true);
|
||||||
|
let nextDialog: Dialog.dialog;
|
||||||
|
if(!rootScope.peerId) {
|
||||||
|
if(e.code === 'ArrowDown') {
|
||||||
|
nextDialog = folder[0];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const idx = folder.findIndex(dialog => dialog.peerId === rootScope.peerId);
|
||||||
|
if(idx !== -1) {
|
||||||
|
const nextIndex = e.code === 'ArrowUp' ? idx - 1 : idx + 1;
|
||||||
|
nextDialog = folder[nextIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nextDialog) {
|
||||||
|
this.setPeer(nextDialog.peerId);
|
||||||
|
}
|
||||||
|
} else if(e.code === 'ArrowUp') {
|
||||||
|
if(!chat.input.editMsgId && chat.input.isInputEmpty()) {
|
||||||
|
const historyStorage = appMessagesManager.getHistoryStorage(chat.peerId, chat.threadId);
|
||||||
|
const slice = historyStorage.history.slice;
|
||||||
|
if(slice.isEnd(SliceEnd.Bottom) && slice.length) {
|
||||||
|
let goodMid: number;
|
||||||
|
for(const mid of slice) {
|
||||||
|
const message = chat.getMessage(mid);
|
||||||
|
const good = this.myId === chat.peerId ? message.fromId === this.myId : message.pFlags.out;
|
||||||
|
|
||||||
|
if(good) {
|
||||||
|
if(appMessagesManager.canEditMessage(chat.getMessage(mid), 'text')) {
|
||||||
|
goodMid = mid;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// * this check will allow editing only last message
|
||||||
|
//break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(goodMid) {
|
||||||
|
chat.input.initMessageEditing(goodMid);
|
||||||
|
cancelEvent(e); // * prevent from scrolling
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if(e.code === 'ArrowDown') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(chat.input.messageInput &&
|
||||||
|
e.target !== chat.input.messageInput &&
|
||||||
|
target.tagName !== 'INPUT' &&
|
||||||
|
!target.hasAttribute('contenteditable') &&
|
||||||
|
!isTouchSupported &&
|
||||||
|
(!mediaSizes.isMobile || this.tabId === 1) &&
|
||||||
|
!this.chat.selection.isSelecting &&
|
||||||
|
!this.chat.input.recording) {
|
||||||
|
chat.input.messageInput.focus();
|
||||||
|
placeCaretAtEnd(chat.input.messageInput);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
document.body.addEventListener('keydown', onKeyDown);
|
||||||
}
|
}
|
||||||
|
|
||||||
private makeLink<T extends INTERNAL_LINK_TYPE>(type: T, uriParams: Omit<InternalLinkTypeMap[T], '_'>) {
|
private makeLink<T extends INTERNAL_LINK_TYPE>(type: T, uriParams: Omit<InternalLinkTypeMap[T], '_'>) {
|
||||||
@ -792,78 +875,6 @@ export class AppImManager {
|
|||||||
private init() {
|
private init() {
|
||||||
document.addEventListener('paste', this.onDocumentPaste, true);
|
document.addEventListener('paste', this.onDocumentPaste, true);
|
||||||
|
|
||||||
const IGNORE_KEYS = new Set(['PageUp', 'PageDown', 'Meta', 'Control']);
|
|
||||||
const onKeyDown = (e: KeyboardEvent) => {
|
|
||||||
if(rootScope.isOverlayActive || IGNORE_KEYS.has(e.key)) return;
|
|
||||||
|
|
||||||
const target = e.target as HTMLElement;
|
|
||||||
|
|
||||||
//if(target.tagName === 'INPUT') return;
|
|
||||||
|
|
||||||
//this.log('onkeydown', e, document.activeElement);
|
|
||||||
|
|
||||||
const chat = this.chat;
|
|
||||||
|
|
||||||
if(e.code === 'KeyC' && (e.ctrlKey || e.metaKey) && target.tagName !== 'INPUT') {
|
|
||||||
return;
|
|
||||||
} else if(e.altKey && (e.code === 'ArrowUp' || e.code === 'ArrowDown') && rootScope.peerId) {
|
|
||||||
const folder = appMessagesManager.dialogsStorage.getFolder(rootScope.filterId, true);
|
|
||||||
const idx = folder.findIndex(dialog => dialog.peerId === rootScope.peerId);
|
|
||||||
if(idx !== -1) {
|
|
||||||
const nextIndex = e.code === 'ArrowUp' ? idx - 1 : idx + 1;
|
|
||||||
const nextDialog = folder[nextIndex];
|
|
||||||
if(nextDialog) {
|
|
||||||
this.setPeer(nextDialog.peerId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if(e.code === 'ArrowUp') {
|
|
||||||
if(!chat.input.editMsgId && chat.input.isInputEmpty()) {
|
|
||||||
const historyStorage = appMessagesManager.getHistoryStorage(chat.peerId, chat.threadId);
|
|
||||||
const slice = historyStorage.history.slice;
|
|
||||||
if(slice.isEnd(SliceEnd.Bottom) && slice.length) {
|
|
||||||
let goodMid: number;
|
|
||||||
for(const mid of slice) {
|
|
||||||
const message = chat.getMessage(mid);
|
|
||||||
const good = this.myId === chat.peerId ? message.fromId === this.myId : message.pFlags.out;
|
|
||||||
|
|
||||||
if(good) {
|
|
||||||
if(appMessagesManager.canEditMessage(chat.getMessage(mid), 'text')) {
|
|
||||||
goodMid = mid;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// * this check will allow editing only last message
|
|
||||||
//break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(goodMid) {
|
|
||||||
chat.input.initMessageEditing(goodMid);
|
|
||||||
cancelEvent(e); // * prevent from scrolling
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else if(e.code === 'ArrowDown') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(chat.input.messageInput &&
|
|
||||||
e.target !== chat.input.messageInput &&
|
|
||||||
target.tagName !== 'INPUT' &&
|
|
||||||
!target.hasAttribute('contenteditable') &&
|
|
||||||
!isTouchSupported &&
|
|
||||||
(!mediaSizes.isMobile || this.tabId === 1) &&
|
|
||||||
!this.chat.selection.isSelecting &&
|
|
||||||
!this.chat.input.recording) {
|
|
||||||
chat.input.messageInput.focus();
|
|
||||||
placeCaretAtEnd(chat.input.messageInput);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
document.body.addEventListener('keydown', onKeyDown);
|
|
||||||
|
|
||||||
rootScope.addEventListener('history_multiappend', (msgIdsByPeer) => {
|
rootScope.addEventListener('history_multiappend', (msgIdsByPeer) => {
|
||||||
for(const peerId in msgIdsByPeer) {
|
for(const peerId in msgIdsByPeer) {
|
||||||
appSidebarRight.sharedMediaTab.renderNewMessages(+peerId, Array.from(msgIdsByPeer[peerId]));
|
appSidebarRight.sharedMediaTab.renderNewMessages(+peerId, Array.from(msgIdsByPeer[peerId]));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user