From 1e4d0e077a78afd7be95fdd3d17ca63b4034a26b Mon Sep 17 00:00:00 2001
From: CloudHill <rh.cloudhill@gmail.com>
Date: Tue, 20 Oct 2020 22:56:19 +0700
Subject: [PATCH] Calculate percentage every update (as opposed to every page
 change)

---
 mods/scroll-to-top/mod.js | 30 +++++++++++++++++-------------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/mods/scroll-to-top/mod.js b/mods/scroll-to-top/mod.js
index 090a6cb..5756dfc 100644
--- a/mods/scroll-to-top/mod.js
+++ b/mods/scroll-to-top/mod.js
@@ -67,6 +67,8 @@ module.exports = {
                     })
 
                     let queue = [];
+                    let scroller = document.querySelector('.notion-frame > .notion-scroller');
+
                     const observer = new MutationObserver((list, observer) => {
                     if (!queue.length) requestAnimationFrame(() => process(queue));
                         queue.push(...list);
@@ -77,6 +79,14 @@ module.exports = {
                     });
                     function process(list) {
                         queue = [];
+
+                        let top = scroller.topDistance = store().top;
+                        if (top > 0 && store().percent) {
+                            let pageContent = document.querySelector('.notion-page-content');
+                            if (pageContent)
+                                scroller.topDistance *= pageContent.offsetHeight / 100;
+                        }
+
                         for (let { addedNodes } of list) {
                             if (
                               addedNodes[0] && (
@@ -84,22 +94,16 @@ module.exports = {
                                 addedNodes[0].className === 'notion-scroller'
                               )
                             ) {
-                                let top = store().top;
                                 if (top> 0) {
                                     scroll.classList.add('hidden');
-                                    
-                                    if (store().percent) {
-                                        top *= document.querySelector('.notion-page-content').offsetHeight / 100;
-                                    }
 
-                                    document
-                                        .querySelector('.notion-frame > .notion-scroller')
-                                        .addEventListener('scroll', (event) => {
-                                            if (event.target.scrollTop < top)
-                                                scroll.classList.add('hidden');
-                                            else
-                                                scroll.classList.remove('hidden');
-                                        })
+                                    scroller = document.querySelector('.notion-frame > .notion-scroller');
+                                    scroller.addEventListener('scroll', (event) => {
+                                        if (event.target.scrollTop < scroller.topDistance)
+                                            scroll.classList.add('hidden');
+                                        else
+                                            scroll.classList.remove('hidden');
+                                    })
                                 }
                             }
                         }