diff --git a/src/components/inputField.ts b/src/components/inputField.ts index 00a8c933..b822170e 100644 --- a/src/components/inputField.ts +++ b/src/components/inputField.ts @@ -1,4 +1,4 @@ -import { getRichValue, isInputEmpty } from "../helpers/dom"; +import { getRichValue } from "../helpers/dom"; import { checkRTL } from "../helpers/string"; import RichTextProcessor from "../lib/richtextprocessor"; @@ -18,6 +18,9 @@ let init = () => { let entities = RichTextProcessor.parseEntities(text); //console.log('messageInput paste', text, entities); entities = entities.filter(e => e._ == 'messageEntityEmoji' || e._ == 'messageEntityLinebreak'); + if(RichTextProcessor.emojiSupported) { // * fix safari emoji + entities = entities.filter(e => e._ != 'messageEntityEmoji'); + } //text = RichTextProcessor.wrapEmojiText(text); text = RichTextProcessor.wrapRichText(text, {entities, noLinks: true}); @@ -63,15 +66,18 @@ const InputField = (options: { const input = div.firstElementChild as HTMLElement; const observer = new MutationObserver((mutationsList, observer) => { - const isEmpty = isInputEmpty(input); + //const isEmpty = isInputEmpty(input); //console.log('input', isEmpty); + //const char = [...getRichValue(input)][0]; const char = input.innerText[0]; let direction = 'ltr'; if(char && checkRTL(char)) { direction = 'rtl'; } + //console.log('RTL', direction, char); + input.style.direction = direction; if(processInput) { diff --git a/src/helpers/string.ts b/src/helpers/string.ts index 3287ac16..47e5f512 100644 --- a/src/helpers/string.ts +++ b/src/helpers/string.ts @@ -84,3 +84,5 @@ export const checkRTL = (s: string) => { return rtlDirCheck.test(s); }; + +//(window as any).checkRTL = checkRTL; diff --git a/src/lib/richtextprocessor.ts b/src/lib/richtextprocessor.ts index 948be8b2..61a8ef07 100644 --- a/src/lib/richtextprocessor.ts +++ b/src/lib/richtextprocessor.ts @@ -519,8 +519,8 @@ namespace RichTextProcessor { break; case 'messageEntityEmoji': - html.push(emojiSupported ? // ! contenteditable="false" нужен для поля ввода, иначе там будет меняться шрифт в Safari - `${encodeEntities(entityText)}` : + html.push(emojiSupported ? // ! contenteditable="false" нужен для поля ввода, иначе там будет меняться шрифт в Safari, или же рендерить смайлик напрямую, без контейнера + `${encodeEntities(entityText)}` : `${encodeEntities(entityText)}`); break; @@ -723,8 +723,13 @@ namespace RichTextProcessor { export function wrapDraftText(text: string, options: Partial<{ entities: MessageEntity[] }> = {}) { + let entities = options.entities.slice(); + if(emojiSupported) { // * fix safari emoji + entities = entities.filter(e => e._ != 'messageEntityEmoji'); + } + return wrapRichText(text, { - ...options, + entities, noLinks: true, noEmphasis: true, passEntities: {