From 9c05dd5d3dcafc26ba76cf3b0ca53ddc48e77245 Mon Sep 17 00:00:00 2001 From: Xmader Date: Fri, 21 May 2021 17:41:18 -0400 Subject: [PATCH] fix: btn position when logged in --- src/btn.ts | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/btn.ts b/src/btn.ts index e3d5b1b..b842edc 100644 --- a/src/btn.ts +++ b/src/btn.ts @@ -58,6 +58,21 @@ function getScrollParent (node: HTMLElement): HTMLElement { } } +function onPageRendered (getEl: () => HTMLElement) { + return new Promise((resolve) => { + const observer = new MutationObserver(() => { + try { + const el = getEl() + if (el) { + observer.disconnect() + resolve(el) + } + } catch { } + }) + observer.observe(document.querySelector('div > section') ?? document.body, { childList: true, subtree: true }) + }) +} + interface BtnOptions { readonly name: string; readonly action: BtnAction; @@ -141,8 +156,10 @@ export class BtnList { newParent.append(...this.list.map(e => cloneBtn(e))) shadow.append(newParent) - try { - const anchorDiv = this.getBtnParent() + // default position + newParent.style.top = `${window.innerHeight - newParent.getBoundingClientRect().height}px` + + void onPageRendered(this.getBtnParent).then((anchorDiv: HTMLDivElement) => { const pos = () => this._positionBtns(anchorDiv, newParent) pos() @@ -152,11 +169,7 @@ export class BtnList { // reposition btns when scrolling const scroll = getScrollParent(anchorDiv) scroll.addEventListener('scroll', pos, { passive: true }) - } catch (err) { - console.error(err) - // default position - newParent.style.top = `${window.innerHeight - newParent.getBoundingClientRect().height}px` - } + }) return btnParent }