diff --git a/brozzler/behaviors.yaml b/brozzler/behaviors.yaml index f395259..7031cec 100644 --- a/brozzler/behaviors.yaml +++ b/brozzler/behaviors.yaml @@ -37,7 +37,7 @@ actions: - selector: .glyphsSpriteGrey_Close - selector: 'a>.eLAPa>.KL4Bh' - firstMatchOnly: true + limit: 1 - selector: a.coreSpriteRightPaginationArrow repeatSameElement: true - @@ -47,7 +47,7 @@ interval: 2500 actions: - selector: div.see-more - firstMatchOnly: true + limit: 1 - selector: li.next repeatSameElement: true - diff --git a/brozzler/js-templates/umbraBehavior.js.j2 b/brozzler/js-templates/umbraBehavior.js.j2 index 7931a62..1c68c5f 100644 --- a/brozzler/js-templates/umbraBehavior.js.j2 +++ b/brozzler/js-templates/umbraBehavior.js.j2 @@ -1,7 +1,7 @@ /* * brozzler/js-templates/umbrabehavior.js.j2 - an umbra/brozzler behavior class * - * Copyright (C) 2017-2018 Internet Archive + * Copyright (C) 2017-2019 Internet Archive * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,7 +34,7 @@ class UmbraBehavior { var k = this.index; var selector = this.actions[k].selector; var repeatSameElement = this.actions[k].repeatSameElement ? this.actions[k].repeatSameElement : false; - var firstMatchOnly = this.actions[k].firstMatchOnly ? this.actions[k].firstMatchOnly : false; + var limit = this.actions[k].limit ? this.actions[k].limit : false; var action = this.actions[k].do ? this.actions[k].do : 'click'; var closeSelector = this.actions[k].closeSelector ? this.actions[k].closeSelector : null; var didSomething = false; @@ -69,18 +69,18 @@ class UmbraBehavior { } } - if (firstMatchOnly) { - var doTargets = [ documents[j].querySelector(selector) ]; - } else { - var doTargets = documents[j].querySelectorAll(selector); + var doTargets = documents[j].querySelectorAll(selector); + + var repeats = doTargets.length; + if (limit && limit < repeats) { + repeats = limit; } - var doTargetsLength = doTargets.length; - if (!(doTargetsLength > 0)) { + if (!(repeats > 0)) { continue; } - for ( var i = 0; i < doTargetsLength; i++) { + for ( var i = 0; i < repeats; i++) { if (!repeatSameElement && this.alreadyDone.indexOf(doTargets[i]) > -1) { continue; } @@ -98,6 +98,11 @@ class UmbraBehavior { somethingLeftAbove = true; } } + + if (didSomething && limit && limit === i+1) { + nextAction(); + break; + } } if (!didSomething) { @@ -117,10 +122,7 @@ class UmbraBehavior { } else { var idleTimeMs = Date.now() - this.idleSince; if ((idleTimeMs / 1000) > (this.IDLE_TIMEOUT_SEC - 1) && (this.index < (this.actions.length - 1))) { - console.log("ready for next action"); - this.index += 1; - this.idleSince = null; - window.scroll(0,0); + nextAction(); } } } @@ -158,6 +160,13 @@ class UmbraBehavior { this.idleSince = null; } + nextAction() { + console.log("ready for next action"); + this.index += 1; + this.idleSince = null; + window.scroll(0,0); + } + start() { var that = this; this.intervalId = setInterval(function() {