From 345bee8c1050ad06cfeb8f28d5bc084ef473f416 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Mon, 16 Nov 2020 04:46:51 +0200 Subject: [PATCH] Fix slicer for handhelds --- src/components/chat/input.ts | 4 ++-- src/components/inputField.ts | 2 +- src/lib/appManagers/appDialogsManager.ts | 18 ++++++++++++------ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/components/chat/input.ts b/src/components/chat/input.ts index 75358e3c..64405166 100644 --- a/src/components/chat/input.ts +++ b/src/components/chat/input.ts @@ -196,13 +196,13 @@ export class ChatInput { const value = this.messageInput.innerText; const entities = RichTextProcessor.parseEntities(value); - console.log('messageInput entities', entities); + //console.log('messageInput entities', entities); const urlEntities = entities.filter(e => e._ == 'messageEntityUrl'); if(urlEntities.length) { const richEntities: MessageEntity[] = []; const richValue = RichTextProcessor.parseMarkdown(getRichValue(this.messageInput), richEntities); - console.log('messageInput url', entities, richEntities); + //console.log('messageInput url', entities, richEntities); for(const entity of urlEntities) { const url = value.slice(entity.offset, entity.offset + entity.length); diff --git a/src/components/inputField.ts b/src/components/inputField.ts index 9ec0cf77..00a8c933 100644 --- a/src/components/inputField.ts +++ b/src/components/inputField.ts @@ -64,7 +64,7 @@ const InputField = (options: { const input = div.firstElementChild as HTMLElement; const observer = new MutationObserver((mutationsList, observer) => { const isEmpty = isInputEmpty(input); - console.log('input', isEmpty); + //console.log('input', isEmpty); const char = input.innerText[0]; let direction = 'ltr'; diff --git a/src/lib/appManagers/appDialogsManager.ts b/src/lib/appManagers/appDialogsManager.ts index a43aae2c..273864c5 100644 --- a/src/lib/appManagers/appDialogsManager.ts +++ b/src/lib/appManagers/appDialogsManager.ts @@ -13,7 +13,7 @@ import { isApple, isSafari } from "../../helpers/userAgent"; import { logger, LogLevels } from "../logger"; import { RichTextProcessor } from "../richtextprocessor"; import rootScope from "../rootScope"; -import { findUpClassName, positionElementByIndex } from "../../helpers/dom"; +import { findUpClassName, findUpTag, positionElementByIndex } from "../../helpers/dom"; import appImManager, { AppImManager } from "./appImManager"; import appMessagesManager, { Dialog } from "./appMessagesManager"; import {MyDialogFilter as DialogFilter} from "../storages/filters"; @@ -740,7 +740,7 @@ export class AppDialogsManager { if(this.sliceTimeout) clearTimeout(this.sliceTimeout); this.sliceTimeout = window.setTimeout(() => { this.sliceTimeout = undefined; - + /* const observer = new IntersectionObserver((entries) => { const }); @@ -753,13 +753,17 @@ export class AppDialogsManager { const rect = this.scroll.container.getBoundingClientRect(); const children = Array.from(this.scroll.splitUp.children) as HTMLElement[]; - const firstElement = document.elementFromPoint(rect.x, rect.y) as HTMLElement; - const lastElement = document.elementFromPoint(rect.x, rect.y + rect.height - 1) as HTMLElement; + const firstElement = findUpTag(document.elementFromPoint(rect.x, rect.y + 1), 'LI') as HTMLElement; + const lastElement = findUpTag(document.elementFromPoint(rect.x, rect.y + rect.height - 1), 'LI') as HTMLElement; + + //alert('got element:' + rect.y); if(!firstElement || !lastElement) { return; } + //alert('got element:' + !!firstElement); + const firstElementRect = firstElement.getBoundingClientRect(); const elementOverflow = firstElementRect.y - rect.y; @@ -803,14 +807,16 @@ export class AppDialogsManager { //this.log('[slicer] elements', firstElement, lastElement, rect, sliced, sliceFromStart.length, sliceFromEnd.length); - //this.log('[slicer] reset scrollTop', scrollTopWas, this.scroll.scrollTop, firstElement.offsetTop, firstElementRect.y, rect.y, elementOverflow); + //this.log('[slicer] reset scrollTop', this.scroll.scrollTop, firstElement.offsetTop, firstElementRect.y, rect.y, elementOverflow); + + //alert('left length:' + children.length); this.scroll.scrollTop = firstElement.offsetTop - elementOverflow; /* const firstElementRect = firstElement.getBoundingClientRect(); const scrollTop = */ //this.scroll.scrollIntoView(firstElement, false); - }, 1e3); + }, 200); }; public onChatsScrollTop = () => {