diff --git a/brozzler/behaviors.d/simpledo.js.template b/brozzler/behaviors.d/simpledo.js.template deleted file mode 100644 index cd0216d..0000000 --- a/brozzler/behaviors.d/simpledo.js.template +++ /dev/null @@ -1,140 +0,0 @@ -/* - * brozzler/behaviors.d/simpledo.js.in - simpledo behavior template, - * acting on elements matching templatized css selector, - * based on simpleclicks.js.template and mouseovers.js.template - * - * Copyright (C) 2016 Internet Archive - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var umbraBehavior = { - IDLE_TIMEOUT_SEC : 10, - idleSince : null, - - intervalFunc : function() { - var didSomething = false; - var somethingLeftBelow = false; - var somethingLeftAbove = false; - var cssSelector = "${sdo_css_selector}"; - var doAction = "${sdo_action}"; // currently supports click, mouseover - var doUntilTimeout = "${sdo_until_hard_timeout}"; - - //handle Python to JavaScript boolean conversion - doUntilTimeout == "True" ? doUntilTimeout = true : doUntilTimeout = false; - - var iframes = document.querySelectorAll("iframe"); - var documents = Array(iframes.length + 1); - documents[0] = document; - - for (var i = 0; i < iframes.length; i++) { - documents[i+1] = iframes[i].contentWindow.document; - } - - for (var j = 0; j < documents.length; j++) { - - var doTargets = documents[j].querySelectorAll(cssSelector); - - for ( var i = 0; i < doTargets.length; i++) { - if (doTargets[i].umbraDone && !doUntilTimeout) { - continue; - } - - var where = this.aboveBelowOrOnScreen(doTargets[i]); - - if (where == 0) { - console.log("doing " + doAction + doTargets[i].outerHTML); - // do mouse over event on target - // since some urls are requsted only on - // this event - see - // https://webarchive.jira.com/browse/AITFIVE-451 - var mouseOverEvent = document.createEvent('Events'); - mouseOverEvent.initEvent('mouseover',true, false); - doTargets[i].dispatchEvent(mouseOverEvent); - - if (doAction == 'click') { - doTargets[i].click(); - } // add new do's here! - - didSomething = true; - this.idleSince = null; - doTargets[i].umbraDone = true; - - break; // break from doTargets loop (not from iframe loop) - } else if (where > 0) { - somethingLeftBelow = true; - } else if (where < 0) { - somethingLeftAbove = true; - } - } - } - - if (!didSomething) { - if (somethingLeftAbove) { - // console.log("scrolling UP because everything on this screen has been done but we missed something above"); - window.scrollBy(0, -500); - this.idleSince = null; - } else if (somethingLeftBelow) { - // console.log("scrolling because everything on this screen has been done but there's more below"); - window.scrollBy(0, 200); - this.idleSince = null; - } else if (window.scrollY + window.innerHeight < document.documentElement.scrollHeight) { - // console.log("scrolling because we're not to the bottom yet"); - window.scrollBy(0, 200); - this.idleSince = null; - } else if (this.idleSince == null) { - this.idleSince = Date.now(); - } - } - - if (!this.idleSince) { - this.idleSince = Date.now(); - } - }, - - start : function() { - var that = this; - this.intervalId = setInterval(function() { - that.intervalFunc() - }, 250); - }, - - isFinished : function() { - if (this.idleSince != null) { - var idleTimeMs = Date.now() - this.idleSince; - if (idleTimeMs / 1000 > this.IDLE_TIMEOUT_SEC) { - clearInterval(this.intervalId); - return true; - } - } - return false; - }, - - aboveBelowOrOnScreen : function(e) { - var eTop = e.getBoundingClientRect().top; - if (eTop < window.scrollY) { - return -1; // above - } else if (eTop > window.scrollY + window.innerHeight) { - return 1; // below - } else { - return 0; // on screen - } - }, -}; - -// Called from outside of this script. -var umbraBehaviorFinished = function() { - return umbraBehavior.isFinished() -}; - -umbraBehavior.start(); diff --git a/brozzler/js-templates/simpledo.js.j2 b/brozzler/js-templates/simpledo.js.j2 index 17309e0..14580c1 100644 --- a/brozzler/js-templates/simpledo.js.j2 +++ b/brozzler/js-templates/simpledo.js.j2 @@ -22,20 +22,16 @@ var umbraBehavior = { IDLE_TIMEOUT_SEC : 10, idleSince : null, - // https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js - // n.b. returns true for elements with visibility:hidden, which occupy - // screen real estate but are not visible, or clickable with the ui - isVisible : function(elem) { - return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length); - }, - intervalFunc : function() { var didSomething = false; var somethingLeftBelow = false; var somethingLeftAbove = false; - var cssSelector = {{sdo_css_selector}}; - var doAction = {{sdo_action}}; // currently supports click, mouseover - var doUntilTimeout = {{sdo_until_hard_timeout}}; + var cssSelector = "${sdo_css_selector}"; + var doAction = "${sdo_action}"; // currently supports click, mouseover + var doUntilTimeout = "${sdo_until_hard_timeout}"; + + //handle Python to JavaScript boolean conversion + doUntilTimeout == "True" ? doUntilTimeout = true : doUntilTimeout = false; var iframes = document.querySelectorAll("iframe"); var documents = Array(iframes.length + 1); @@ -50,9 +46,6 @@ var umbraBehavior = { var doTargets = documents[j].querySelectorAll(cssSelector); for ( var i = 0; i < doTargets.length; i++) { - if (!this.isVisible(doTargets[i])) { - continue; - } if (doTargets[i].umbraDone && !doUntilTimeout) { continue; }