diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2018-11-24 12:57:03 +0100 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2018-11-24 13:03:29 +0100 |
commit | 070bf5b2196955e6447869c23147422b4c64ffd6 (patch) | |
tree | 2c60c28c7f29dee203ca1ffbd8e200d49a83a58c /crocoite/data | |
parent | 38441dafb7f5dd6e558db0b4dbc1a4f1a90df162 (diff) | |
download | crocoite-070bf5b2196955e6447869c23147422b4c64ffd6.tar.gz crocoite-070bf5b2196955e6447869c23147422b4c64ffd6.tar.bz2 crocoite-070bf5b2196955e6447869c23147422b4c64ffd6.zip |
behavior: Fix scrolling
- Introduce stop() method callable from Python. Looks like the old
method (global variable) was not working (any more?). This is much
better anyway.
- Restore state of scrolled elements (not window). Fixes weird
screenshots of twitter.com.
Diffstat (limited to 'crocoite/data')
-rw-r--r-- | crocoite/data/click.js | 9 | ||||
-rw-r--r-- | crocoite/data/scroll.js | 44 |
2 files changed, 34 insertions, 19 deletions
diff --git a/crocoite/data/click.js b/crocoite/data/click.js index 88c8f24..b098810 100644 --- a/crocoite/data/click.js +++ b/crocoite/data/click.js @@ -165,5 +165,10 @@ function discover () { } /* XXX: can we use a mutation observer instead? */ -window.setInterval (discover, discoverInterval); -}()); +let interval = window.setInterval (discover, discoverInterval); + +function stop() { + window.clearInterval (interval); +} +return {'stop': stop}; +}()) diff --git a/crocoite/data/scroll.js b/crocoite/data/scroll.js index 13e856d..e1fbbcb 100644 --- a/crocoite/data/scroll.js +++ b/crocoite/data/scroll.js @@ -1,23 +1,33 @@ /* Continuously scrolls the page */ -var __crocoite_stop__ = false; (function(){ -function scroll (event) { - if (__crocoite_stop__) { - return false; - } else { - window.scrollBy (0, window.innerHeight/2); - document.querySelectorAll ('*').forEach ( - function (d) { - if (d.clientHeight < d.scrollHeight) { - d.scrollBy (0, d.clientHeight/2); - } - }); - return true; +let scrolled = new Map (); +let interval = null; +function stop() { + window.clearInterval (interval); + window.scrollTo (0, 0); + scrolled.forEach (function (value, key, map) { + key.scrollTop = value; + }); +} +/* save initial scroll state */ +function save(obj) { + if (!scrolled.has (obj)) { + scrolled.set (obj, obj.scrollTop); } } -function onload (event) { - window.setInterval (scroll, 200); +/* perform a single scroll step */ +function scroll (event) { + window.scrollBy (0, window.innerHeight/2); + document.querySelectorAll ('*').forEach ( + function (d) { + if (d.scrollHeight-d.scrollTop > d.clientHeight) { + save (d); + d.scrollBy (0, d.clientHeight/2); + } + }); + return true; } -document.addEventListener("DOMContentLoaded", onload); -}()); +interval = window.setInterval (scroll, 200); +return {'stop': stop}; +}()) |