From 2be982d477c5ffdeafea95ba14569a05da59cb0d Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 25 Nov 2018 09:42:13 +0100 Subject: behavior: Turn scroll JS code into class --- crocoite/behavior.py | 3 ++- crocoite/data/scroll.js | 57 +++++++++++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/crocoite/behavior.py b/crocoite/behavior.py index d5c82a0..5f66538 100644 --- a/crocoite/behavior.py +++ b/crocoite/behavior.py @@ -120,9 +120,10 @@ class JsOnload (Behavior): tab = self.loader.tab yield self.script result = await tab.Runtime.evaluate (expression=str (self.script)) + exception = result.get ('exceptionDetails', None) result = result['result'] assert result['type'] == 'object' - assert result.get ('subtype') != 'error' + assert result.get ('subtype') != 'error', exception self.context = result['objectId'] async def onstop (self): diff --git a/crocoite/data/scroll.js b/crocoite/data/scroll.js index 8a4b35d..aacfe83 100644 --- a/crocoite/data/scroll.js +++ b/crocoite/data/scroll.js @@ -1,33 +1,38 @@ /* Continuously scrolls the page */ (function(){ -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); +class Scroll { + constructor () { + this.scrolled = new Map (); + this.interval = window.setInterval (this.scroll.bind (this), 200); } -} -/* perform a single scroll step */ -function scroll (event) { - window.scrollBy (0, window.innerHeight/2); - document.querySelectorAll ('html body *').forEach ( - function (d) { - if (d.scrollHeight-d.scrollTop > d.clientHeight) { - save (d); - d.scrollBy (0, d.clientHeight/2); - } + + stop() { + window.clearInterval (this.interval); + window.scrollTo (0, 0); + this.scrolled.forEach (function (value, key, map) { + key.scrollTop = value; }); - return true; + } + /* save initial scroll state */ + save(obj) { + if (!this.scrolled.has (obj)) { + this.scrolled.set (obj, obj.scrollTop); + } + } + /* perform a single scroll step */ + scroll (event) { + window.scrollBy (0, window.innerHeight/2); + document.querySelectorAll ('html body *').forEach ( + function (d) { + if (d.scrollHeight-d.scrollTop > d.clientHeight) { + this.save (d); + d.scrollBy (0, d.clientHeight/2); + } + }.bind (this)); + return true; + } } -interval = window.setInterval (scroll, 200); -return {'stop': stop}; + +return new Scroll(); }()) -- cgit v1.2.3