diff --git a/fb-tickerfilter b/fb-tickerfilter deleted file mode 160000 index 4c8d5d5..0000000 --- a/fb-tickerfilter +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4c8d5d5e2b5be46aeeb56f96fbc47b000b81805c diff --git a/fb-tickerfilter/firefox/userscript.js b/fb-tickerfilter/firefox/userscript.js new file mode 100644 index 0000000..51e9ebe --- /dev/null +++ b/fb-tickerfilter/firefox/userscript.js @@ -0,0 +1,136 @@ +// ==UserScript== +// @name Facebook Ticker Filter +// @namespace com.facebook.tickerfilter +// @description Add a fild for filtering ticker events +// @include https://www.facebook.com/* +// @include http://www.facebook.com/* +// @include https://*/facebook.com/* +// @include http://*.facebook.com/* +// @require http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js +// @version 1 +// @grant none +// ==/UserScript== +// +/*jslint browser:true*/ +(function () { + var downcount = 0; + var targetIDs = [ + 'cecile.tostivint.9', // target + 'camillebriant', // target + 'lise.duchatelet', // target + 'BlandineSdAsterya', // target + 'perrine.bouveret.9', // target relative (cecile.tostivint.9) + 'peeters7', // interest + 'c.grusondaniel', // interest + 'gayane.adourian', // interest + 'amelie.valentin.75', // relative (cecile.tostivint.9) + 'jessehaug', // relative (cecile.tostivint.9) + 'sanjarbek.khodjaev', // relative (cecile.tostivint.9) + 'morgane\.parma', // relative (cecile.tostivint.9) + ]; + var targetRE = new RegExp('/(' + targetIDs.join('|') + ')'); + //var targetRE = /\/(cecile\.tostivint\.9)/; + var scrollTicker; + scrollTicker = function () { + var ticker; + var evt; + var scroll; + //ticker = document.getElementById('pagelet_ticker'); + ticker = document.getElementsByClassName('ticker_container').item(0).children.item(0).children.item(0); + console.log(ticker); + ticker.style.background = 'red'; + console.log('begin com.facebook.scrollTicker'); + downcount += 1; + downcount = downcount % 100; + scroll = 20; + if (downcount === 0) { + scroll *= -1; + } + evt = document.createEvent('UIEvents'); + // creates a scroll event that bubbles, can be cancelled, + // and with its view and detail property initialized to window and 1, + // respectively + evt.initUIEvent('scroll', true, true, window, scroll); + ticker.dispatchEvent(evt); + console.log('debug1 com.facebook.scrollTicker'); + + /* + evt = document.createEvent('MouseEvents'); + evt.initMouseEvent('DOMMouseScroll', // in DOMString typeArg, + true, // in boolean canBubbleArg, + true, // in boolean cancelableArg, + window, // in views::AbstractView viewArg, + 10, // in long detailArg, + 0, // in long screenXArg, + 0, // in long screenYArg, + 0, // in long clientXArg, + 0, // in long clientYArg, + 0, // in boolean ctrlKeyArg, + 0, // in boolean altKeyArg, + 0, // in boolean shiftKeyArg, + 0, // in boolean metaKeyArg, + 0, // in unsigned short buttonArg, + null + // in EventTarget relatedTargetArg + ); + ticker.dispatchEvent(evt); + console.log('debug2 com.facebook.scrollTicker'); + */ + /* + evt = document.createEvent('MouseEvents'); + evt.initEvent('mousewheel', true, true); + evt.wheelDelta = scroll; + ticker.dispatchEvent(evt); + */ + console.log('end com.facebook.scrollTicker'); + }; + + function cleanStory(story, protection) { + var hidden = 0; + var storyLink; + storyLink = story.children.item(0); + if (targetRE.test(storyLink.href)) { + console.log(storyLink.href); + hidden = 1; + } else if (story.style.display !== 'none') { + // we must decide either to hide or to count + if (!protection) { + story.style.display = 'none'; + } else { + hidden = 1; + } + } + return hidden; + } + // magic filtering + + function cleanTicker() { + //var ticker = document.getElementById('pagelet_ticker'); + var tickerStories; + var story_idx; + var story; + var visibleCount; + var tickerLimit; + + tickerLimit = 11; + visibleCount = 0; + console.log('begin com.facebook.cleanticker'); + tickerStories = document.getElementsByClassName('fbFeedTickerStory'); + for (story_idx = tickerStories.length - 1; story_idx >= 0; story_idx--) { + story = tickerStories.item(story_idx); //.children[0]; + visibleCount += cleanStory(story, (visibleCount >= tickerLimit)); + } + //for (story_idx = 0 ; story_idx < tickerStories.length; story_idx++) { + //story = tickerStories.item(story_idx); //.children[0]; + // + //visibleCount += cleanStory(story, (visibleCount >= tickerLimit)); + //} + //console.log('end com.facebook.tickerfilter.cleanTicker'); + // send scrolldown events to ticker... + + console.log('end com.facebook.cleanticker'); + } + window.setInterval(cleanTicker, 1000); + window.setInterval(scrollTicker, 300); +}()); + diff --git a/fb-tickerfilter/phantomjs/credential.json.example b/fb-tickerfilter/phantomjs/credential.json.example new file mode 100644 index 0000000..2d72a01 --- /dev/null +++ b/fb-tickerfilter/phantomjs/credential.json.example @@ -0,0 +1,4 @@ +{ + "email": "xxx", + "pass": "yyy", +} diff --git a/fb-tickerfilter/phantomjs/facebook.js b/fb-tickerfilter/phantomjs/facebook.js new file mode 100644 index 0000000..6366901 --- /dev/null +++ b/fb-tickerfilter/phantomjs/facebook.js @@ -0,0 +1,90 @@ +/*jslint node:true,browser:true*/ +var fs = require('fs'); +var cookieFile = 'cookies.json'; +var credentialFile = 'credential.json'; + + +var casper = require('casper').create({ + pageSettings: { + loadImages: false,//The script is much faster when this field is set to false + loadPlugins: false, + userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36' + } +}); + + +function loadCredentials() { + var credentials; + var txt; + console.log("loadCredential"); + if (fs.exists(credentialFile)) { + txt = fs.read(credentialFile); + credentials = JSON.parse(txt); + } + console.log("/loadCredential"); + return credentials; +} + +function readCookies(page) { + console.log("readCookies"); + var cookies = JSON.parse(fs.read(cookieFile)); + page.cookies = cookies; + console.log(cookies); +} + +function saveCookies(page) { + console.log("saveCookies"); + var cookies = JSON.stringify(page.cookies); + console.log(cookies); + fs.write(cookieFile, cookies, 'w'); +} + +//First step is to open Facebook +casper.start().thenOpen("https://facebook.com", function() { + readCookies(this.page); + console.log("Facebook website opened"); + saveCookies(this.page); +}); + + +//Now we have to populate username and password, and submit the form +casper.then(function(){ + var credentials; + credentials = loadCredentials(); + readCookies(this.page); + console.log("Login using username " + credentials.email + " and password"); + + this.evaluate(function(credentials){ + document.getElementById("email").value = credentials.email; + document.getElementById("pass").value = credentials.pass; + document.getElementById("loginbutton").children[0].click(); + }, credentials); + saveCookies(this.page); +}); + +//Wait to be redirected to the Home page, and then make a screenshot +casper.then(function(){ + console.log("Make a screenshot and save it as AfterLogin.png"); + this.wait(6000);//Wait a bit so page loads (there are a lot of ajax calls and that is why we are waiting 6 seconds) + this.capture('AfterLogin.png'); +}); + +/* +//Get all images greater than 100x100 pixels +casper.then(function(){ + var images = this.evaluate(function(){ + var facebookImages = document.getElementsByTagName('img'); + var allSrc = []; + var i; + for(i = 0; i < facebookImages.length; i++) { + if(facebookImages[i].height >= 100 && facebookImages[i].width >= 100){ + allSrc.push(facebookImages[i].src); + } + } + return JSON.stringify(allSrc); + }); + console.log(images); +}); + */ + +casper.run();