2014-05-04 21:33:13 -07:00
//^https?://(?:www\.)?facebook\.com/.*$
2014-04-04 12:16:00 -07:00
// vim:set sw=8 et:
2014-03-06 18:23:31 -08:00
2014-04-04 12:16:00 -07:00
var aboveBelowOrOnScreen = function ( e ) {
2014-03-05 23:19:09 -05:00
var eTop = e . getBoundingClientRect ( ) . top ;
2014-04-04 12:16:00 -07:00
if ( eTop < window . scrollY ) {
return - 1 ; // above
} else if ( eTop > window . scrollY + window . innerHeight ) {
return 1 ; // below
} else {
return 0 ; // on screen
}
}
2014-03-07 19:37:43 -08:00
// comments - 'a.UFIPagerLink > span, a.UFIPagerLink, span.UFIReplySocialSentenceLinkText'
var THINGS _TO _CLICK _SELECTOR = 'a[href^="/browse/likes"], *[rel="theater"]' ;
2014-03-05 23:19:09 -05:00
var alreadyClicked = { } ;
var intervalId ;
2014-04-04 12:16:00 -07:00
2014-03-05 23:19:09 -05:00
var intervalFunc = function ( ) {
var closeButton = document . querySelector ( 'a[title="Close"]' ) ;
if ( closeButton ) {
2014-03-07 19:37:43 -08:00
console . log ( "clicking close button " + closeButton . outerHTML ) ;
2014-03-05 23:19:09 -05:00
closeButton . click ( ) ;
return ;
}
2014-03-05 23:44:52 -05:00
var closeTheaterButton = document . querySelector ( 'a.closeTheater' ) ;
if ( closeTheaterButton && closeTheaterButton . offsetWidth > 0 ) {
2014-03-07 19:37:43 -08:00
console . log ( "clicking close button " + closeTheaterButton . outerHTML ) ;
2014-03-05 23:44:52 -05:00
closeTheaterButton . click ( ) ;
return ;
}
2014-04-04 12:16:00 -07:00
2014-03-05 23:19:09 -05:00
var thingsToClick = document . querySelectorAll ( THINGS _TO _CLICK _SELECTOR ) ;
var clickedSomething = false ;
2014-04-04 12:16:00 -07:00
var somethingLeftBelow = false ;
var missedAbove = 0 ;
2014-03-05 23:19:09 -05:00
for ( var i = 0 ; i < thingsToClick . length ; i ++ ) {
var target = thingsToClick [ i ] ;
if ( ! ( target in alreadyClicked ) ) {
2014-04-04 12:16:00 -07:00
var where = aboveBelowOrOnScreen ( target ) ;
if ( where == 0 ) { // on screen
2014-03-05 23:19:09 -05:00
// var pos = target.getBoundingClientRect().top;
// window.scrollTo(0, target.getBoundingClientRect().top - 100);
2014-03-07 19:37:43 -08:00
console . log ( "clicking at " + target . getBoundingClientRect ( ) . top + " on " + target . outerHTML ) ;
2014-03-10 14:58:16 -04:00
if ( target . click != undefined ) {
2014-04-04 12:16:00 -07:00
target . click ( ) ;
2014-03-10 14:58:16 -04:00
}
2014-03-05 23:19:09 -05:00
target . style . border = '1px solid #0a0' ;
alreadyClicked [ target ] = true ;
clickedSomething = true ;
break ;
2014-04-04 12:16:00 -07:00
} else if ( where > 0 ) {
somethingLeftBelow = true ;
2014-03-05 23:19:09 -05:00
} else {
2014-04-04 12:16:00 -07:00
missedAbove ++ ;
2014-03-05 23:19:09 -05:00
}
}
}
2014-04-04 12:16:00 -07:00
if ( missedAbove > 0 ) {
console . log ( "somehow missed " + missedAbove + " click targets above" ) ;
}
2014-03-05 23:19:09 -05:00
if ( ! clickedSomething ) {
2014-04-04 12:16:00 -07:00
if ( somethingLeftBelow ) {
2014-03-05 23:19:09 -05:00
console . log ( "scrolling because everything on this screen has been clicked but there's more below document.body.clientHeight=" + document . body . clientHeight ) ;
2014-04-04 12:16:00 -07:00
window . scrollBy ( 0 , 200 ) ;
2014-03-05 23:19:09 -05:00
} else if ( window . scrollY + window . innerHeight + 10 < document . body . clientHeight ) {
console . log ( "scrolling because we're not to the bottom yet document.body.clientHeight=" + document . body . clientHeight ) ;
2014-04-04 12:16:00 -07:00
window . scrollBy ( 0 , 200 ) ;
2014-03-05 23:19:09 -05:00
}
}
}
2014-04-04 12:16:00 -07:00
2014-03-05 23:19:09 -05:00
var intervalId = setInterval ( intervalFunc , 200 ) ;