mirror of
https://github.com/internetarchive/brozzler.git
synced 2025-04-19 23:35:54 -04:00
Merge pull request #36 from vonrosen/ari-4150
Allow scrolling down a timeline in the facebook plugin so as to capture content in third party embedded timelines.
This commit is contained in:
commit
ffd60d35e6
@ -22,10 +22,67 @@ var umbraAboveBelowOrOnScreen = function(e) {
|
||||
|
||||
// comments - 'a.UFIPagerLink > span, a.UFIPagerLink, span.UFIReplySocialSentenceLinkText'
|
||||
var UMBRA_THINGS_TO_CLICK_SELECTOR = 'a[href^="/browse/likes"], *[rel="theater"]';
|
||||
//div[class="phm pluginLikeboxStream"] = facebook widget embedded in 3rd party pages
|
||||
var UMBRA_THINGS_TO_SCROLL_SELECTOR = 'div[class="phm pluginLikeboxStream"]';
|
||||
var NUMBER_FAILED_SCROLL_ATTEMPTS_ON_THING_TO_SCROLL_BEFORE_STOP_SCROLLING = 5;
|
||||
var umbraAlreadyClicked = {};
|
||||
var umbraAlreadyScrolledThing = {};
|
||||
var umbraScrolledThingFailedScrollAttempts = {};
|
||||
var umbraState = {'idleSince':null,'expectingSomething':null,'bottomReachedScrollY':0};
|
||||
|
||||
var umbraIntervalFunc = function() {
|
||||
|
||||
var thingsToScroll = document.querySelectorAll(UMBRA_THINGS_TO_SCROLL_SELECTOR);
|
||||
var everythingScrolled = true;
|
||||
|
||||
for (var i = 0; i < thingsToScroll.length; i++) {
|
||||
var target = thingsToScroll[i];
|
||||
|
||||
if (!(target in umbraAlreadyScrolledThing)) {
|
||||
|
||||
everythingScrolled = false;
|
||||
|
||||
console.log("scrolling to " + target.scrollHeight + " on element with nodeName " + target.nodeName + " with id of " + target.id);
|
||||
var lastScrollTop = target.scrollTop;
|
||||
target.scrollTop = target.scrollHeight;
|
||||
|
||||
umbraState.idleSince = null;
|
||||
|
||||
if (target.scrollTop >= target.scrollHeight) {
|
||||
umbraAlreadyScrolledThing[target] = true;
|
||||
}
|
||||
else if (target.scrollTop == lastScrollTop) {
|
||||
if (umbraScrolledThingFailedScrollAttempts[target]) {
|
||||
umbraScrolledThingFailedScrollAttempts[target]++;
|
||||
}
|
||||
else {
|
||||
umbraScrolledThingFailedScrollAttempts[target] = 1;
|
||||
}
|
||||
|
||||
if (umbraScrolledThingFailedScrollAttempts[target] >= NUMBER_FAILED_SCROLL_ATTEMPTS_ON_THING_TO_SCROLL_BEFORE_STOP_SCROLLING) {
|
||||
umbraAlreadyScrolledThing[target] = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
//reset failed count on a successful scroll
|
||||
umbraScrolledThingFailedScrollAttempts[target] = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.log("done scrolling for element with nodeName " + target.nodeName + " with id of " + target.id)
|
||||
}
|
||||
|
||||
umbraState.expectingSomething = null;
|
||||
}
|
||||
|
||||
if (thingsToScroll && thingsToScroll.length > 0 && everythingScrolled) {
|
||||
if (umbraState.idleSince == null) {
|
||||
umbraState.idleSince = Date.now();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var closeButtons = document.querySelectorAll('a[title="Close"], a.closeTheater');
|
||||
for (var i = 0; i < closeButtons.length; i++) {
|
||||
// XXX closeTheater buttons stick around in the dom after closing, clientWidth>0 is one way to check if they're visible
|
||||
@ -75,7 +132,7 @@ var umbraIntervalFunc = function() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (window.scrollY > umbraState.bottomReachedScrollY) {
|
||||
umbraState.bottomReachedScrollY = window.scrollY;
|
||||
}
|
||||
@ -105,6 +162,7 @@ var UMBRA_USER_ACTION_IDLE_TIMEOUT_SEC = 10;
|
||||
|
||||
// Called from outside of this script.
|
||||
var umbraBehaviorFinished = function() {
|
||||
|
||||
if (umbraState.idleSince != null) {
|
||||
var idleTimeMs = Date.now() - umbraState.idleSince;
|
||||
if (idleTimeMs / 1000 > UMBRA_USER_ACTION_IDLE_TIMEOUT_SEC) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user