From aaff5e9948a7bd0ad4fef376a0479fb7a3c48d7b Mon Sep 17 00:00:00 2001 From: morethanwords Date: Sun, 3 Jan 2021 20:32:34 +0400 Subject: [PATCH] Send shortcut --- src/components/chat/input.ts | 15 ++------- src/components/inputField.ts | 4 +-- src/components/popups/newMedia.ts | 4 +-- .../sidebarLeft/tabs/generalSettings.ts | 3 +- src/helpers/dom.ts | 32 ++++++++++++++++++- src/scss/partials/_selector.scss | 4 +-- 6 files changed, 42 insertions(+), 20 deletions(-) diff --git a/src/components/chat/input.ts b/src/components/chat/input.ts index 2ba9fc26..851b2ebb 100644 --- a/src/components/chat/input.ts +++ b/src/components/chat/input.ts @@ -11,7 +11,7 @@ import apiManager from "../../lib/mtproto/mtprotoworker"; //import Recorder from '../opus-recorder/dist/recorder.min'; import opusDecodeController from "../../lib/opusDecodeController"; import RichTextProcessor from "../../lib/richtextprocessor"; -import { attachClickEvent, blurActiveElement, cancelEvent, cancelSelection, findUpClassName, getRichValue, getSelectedNodes, isInputEmpty, markdownTags, MarkdownType, placeCaretAtEnd } from "../../helpers/dom"; +import { attachClickEvent, blurActiveElement, cancelEvent, cancelSelection, findUpClassName, getRichValue, getSelectedNodes, isInputEmpty, markdownTags, MarkdownType, placeCaretAtEnd, isSendShortcutPressed } from "../../helpers/dom"; import { ButtonMenuItemOptions } from '../buttonMenu'; import emoticonsDropdown from "../emoticonsDropdown"; import PopupCreatePoll from "../popups/createPoll"; @@ -32,6 +32,7 @@ import PopupSchedule from '../popups/schedule'; import SendMenu from './sendContextMenu'; import rootScope from '../../lib/rootScope'; import PopupPinMessage from '../popups/unpinMessage'; +import { isApple } from '../../helpers/userAgent'; const RECORD_MIN_TIME = 500; const POSTING_MEDIA_NOT_ALLOWED = 'Posting media content isn\'t allowed in this group.'; @@ -560,17 +561,7 @@ export default class ChatInput { private attachMessageInputListeners() { this.listenerSetter.add(this.messageInput, 'keydown', (e: KeyboardEvent) => { - if(e.key == 'Enter' && !isTouchSupported) { - /* if(e.ctrlKey || e.metaKey) { - this.messageInput.innerHTML += '
'; - placeCaretAtEnd(this.message) - return; - } */ - - if(e.shiftKey || e.ctrlKey || e.metaKey) { - return; - } - + if(isSendShortcutPressed(e)) { this.sendMessage(); } else if(e.ctrlKey || e.metaKey) { this.handleMarkdownShortcut(e); diff --git a/src/components/inputField.ts b/src/components/inputField.ts index b2aed838..a478baa5 100644 --- a/src/components/inputField.ts +++ b/src/components/inputField.ts @@ -1,4 +1,4 @@ -import { getRichValue } from "../helpers/dom"; +import { getRichValue, isInputEmpty } from "../helpers/dom"; import { checkRTL } from "../helpers/string"; import RichTextProcessor from "../lib/richtextprocessor"; @@ -95,7 +95,7 @@ class InputField { // * because if delete all characters there will br left input.addEventListener('input', () => { - if(!this.value.trim()) { + if(isInputEmpty(input)) { input.innerHTML = ''; } }); diff --git a/src/components/popups/newMedia.ts b/src/components/popups/newMedia.ts index 89479a6c..93ebe63f 100644 --- a/src/components/popups/newMedia.ts +++ b/src/components/popups/newMedia.ts @@ -1,6 +1,6 @@ import type Chat from "../chat/chat"; import { isTouchSupported } from "../../helpers/touchSupport"; -import { calcImageInBox, placeCaretAtEnd } from "../../helpers/dom"; +import { calcImageInBox, placeCaretAtEnd, isSendShortcutPressed } from "../../helpers/dom"; import InputField from "../inputField"; import PopupElement from "."; import Scrollable from "../scrollable"; @@ -118,7 +118,7 @@ export default class PopupNewMedia extends PopupElement { placeCaretAtEnd(this.input); } - if(e.key == 'Enter' && !isTouchSupported) { + if(isSendShortcutPressed(e)) { this.btnConfirm.click(); } }; diff --git a/src/components/sidebarLeft/tabs/generalSettings.ts b/src/components/sidebarLeft/tabs/generalSettings.ts index 1c2ffbcc..a60bf69d 100644 --- a/src/components/sidebarLeft/tabs/generalSettings.ts +++ b/src/components/sidebarLeft/tabs/generalSettings.ts @@ -7,6 +7,7 @@ import CheckboxField from "../../checkbox"; import RadioField from "../../radioField"; import appStateManager from "../../../lib/appManagers/appStateManager"; import rootScope from "../../../lib/rootScope"; +import { isApple } from "../../../helpers/userAgent"; export class RangeSettingSelector { public container: HTMLDivElement; @@ -164,7 +165,7 @@ export default class AppGeneralSettingsTab extends SliderSuperTab { }); const ctrlEnterRow = new Row({ - radioField: RadioField('Send by Ctrl + Enter', 'send-shortcut', 'ctrlEnter', 'settings.sendShortcut'), + radioField: RadioField(`Send by ${isApple ? '⌘' : 'Ctrl'} + Enter`, 'send-shortcut', 'ctrlEnter', 'settings.sendShortcut'), subtitle: 'New line by Enter', }); diff --git a/src/helpers/dom.ts b/src/helpers/dom.ts index 30017f95..942bc4ed 100644 --- a/src/helpers/dom.ts +++ b/src/helpers/dom.ts @@ -3,7 +3,8 @@ import { MOUNT_CLASS_TO } from "../lib/mtproto/mtproto_config"; import RichTextProcessor from "../lib/richtextprocessor"; import ListenerSetter from "./listenerSetter"; import { isTouchSupported } from "./touchSupport"; -import { isSafari } from "./userAgent"; +import { isSafari, isApple } from "./userAgent"; +import rootScope from "../lib/rootScope"; /* export function isInDOM(element: Element, parentNode?: HTMLElement): boolean { if(!element) { @@ -682,3 +683,32 @@ export function radiosHandleChange(inputs: HTMLInputElement[], onChange: (value: }); }); } + +export function isSendShortcutPressed(e: KeyboardEvent) { + if(e.key == 'Enter' && !isTouchSupported) { + /* if(e.ctrlKey || e.metaKey) { + this.messageInput.innerHTML += '
'; + placeCaretAtEnd(this.message) + return; + } */ + + if(rootScope.settings.sendShortcut === 'enter') { + if(e.shiftKey || e.ctrlKey || e.metaKey) { + return; + } + + return true; + } else { + const secondaryKey = isApple ? e.metaKey : e.ctrlKey; + if(e.shiftKey || (isApple ? e.ctrlKey : e.metaKey)) { + return; + } + + if(secondaryKey) { + return true; + } + } + } + + return false; +} diff --git a/src/scss/partials/_selector.scss b/src/scss/partials/_selector.scss index fcdd4096..0c3081fb 100644 --- a/src/scss/partials/_selector.scss +++ b/src/scss/partials/_selector.scss @@ -147,9 +147,9 @@ margin: 0; } - html.is-safari & { + /* html.is-safari & { margin-right: 4px; - } + } */ } } }