mirror of
https://github.com/internetarchive/brozzler.git
synced 2025-06-20 04:44:12 -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
1 changed files with 59 additions and 1 deletions
|
@ -22,10 +22,67 @@ var umbraAboveBelowOrOnScreen = function(e) {
|
||||||
|
|
||||||
// comments - 'a.UFIPagerLink > span, a.UFIPagerLink, span.UFIReplySocialSentenceLinkText'
|
// comments - 'a.UFIPagerLink > span, a.UFIPagerLink, span.UFIReplySocialSentenceLinkText'
|
||||||
var UMBRA_THINGS_TO_CLICK_SELECTOR = 'a[href^="/browse/likes"], *[rel="theater"]';
|
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 umbraAlreadyClicked = {};
|
||||||
|
var umbraAlreadyScrolledThing = {};
|
||||||
|
var umbraScrolledThingFailedScrollAttempts = {};
|
||||||
var umbraState = {'idleSince':null,'expectingSomething':null,'bottomReachedScrollY':0};
|
var umbraState = {'idleSince':null,'expectingSomething':null,'bottomReachedScrollY':0};
|
||||||
|
|
||||||
var umbraIntervalFunc = function() {
|
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');
|
var closeButtons = document.querySelectorAll('a[title="Close"], a.closeTheater');
|
||||||
for (var i = 0; i < closeButtons.length; i++) {
|
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
|
// XXX closeTheater buttons stick around in the dom after closing, clientWidth>0 is one way to check if they're visible
|
||||||
|
@ -105,6 +162,7 @@ var UMBRA_USER_ACTION_IDLE_TIMEOUT_SEC = 10;
|
||||||
|
|
||||||
// Called from outside of this script.
|
// Called from outside of this script.
|
||||||
var umbraBehaviorFinished = function() {
|
var umbraBehaviorFinished = function() {
|
||||||
|
|
||||||
if (umbraState.idleSince != null) {
|
if (umbraState.idleSince != null) {
|
||||||
var idleTimeMs = Date.now() - umbraState.idleSince;
|
var idleTimeMs = Date.now() - umbraState.idleSince;
|
||||||
if (idleTimeMs / 1000 > UMBRA_USER_ACTION_IDLE_TIMEOUT_SEC) {
|
if (idleTimeMs / 1000 > UMBRA_USER_ACTION_IDLE_TIMEOUT_SEC) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue