diff --git a/umbra/behaviors.d/facebook.js b/umbra/behaviors.d/facebook.js index ecbd65a..69a2096 100644 --- a/umbra/behaviors.d/facebook.js +++ b/umbra/behaviors.d/facebook.js @@ -22,10 +22,54 @@ 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); + + for (var i = 0; i < thingsToScroll.length; i++) { + var target = thingsToScroll[i]; + + if (!(target in umbraAlreadyScrolledThing)) { + + console.log("scrolling to " + target.scrollHeight + " on " + target.outerHTML); + 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 " + target.outerHTML) + } + } + 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 +119,7 @@ var umbraIntervalFunc = function() { } } } - + if (window.scrollY > umbraState.bottomReachedScrollY) { umbraState.bottomReachedScrollY = window.scrollY; }