Skip to content

Instantly share code, notes, and snippets.

@alpsayin
Last active January 9, 2018 13:24
Show Gist options
  • Save alpsayin/abf3d1d77dfbfe8d840dc778257e0e7a to your computer and use it in GitHub Desktop.
Save alpsayin/abf3d1d77dfbfe8d840dc778257e0e7a to your computer and use it in GitHub Desktop.
Hide/remove facebook suggested sponsored posts that appear in your feed by searching for non-timestamped posts
// -*- Mode: Javascript; tab-width: 3; indent-tabs-mode: tab; c-basic-offset: 2 -*-
/*******************************************************************************
(C)2017+ Alp Sayin
Authors: Alp Sayin <https://www.facebook.com/My-Dummy-Page-for-Development-1417283351852520/>
This work is licensed under a Creative Commons License !
See: http://creativecommons.org/licenses/by-nc-nd/4.0/
*******************************************************************************/
// ==UserScript==
// @name FB-Remove Sponsored Posts
// @namespace https://www.facebook.com/My-Dummy-Page-for-Development-1417283351852520/
// @downloadURL https://gist.githubusercontent.com/alpsayin/abf3d1d77dfbfe8d840dc778257e0e7a/raw/FB-RemoveSponsored.user.js
// @updateURL https://gist.githubusercontent.com/alpsayin/abf3d1d77dfbfe8d840dc778257e0e7a/raw/FB-RemoveSponsored.user.js
// @version 2018.01.05.1823.beta
// @description Remove the fucking sponsored posts by looking for non-timestamped posts in feed.
// @match *://*.facebook.com/*
// @icon
// @author ©alpsayin™
// @grant none
// @run-at document-start
// @copyright (C)2017+ alpsayin <https://www.facebook.com/My-Dummy-Page-for-Development-1417283351852520/>
// @license CC BY-NC-ND 4.0; http://creativecommons.org/licenses/by-nc-nd/4.0/
// ==/UserScript==
"use strict";
(
function (scope){
var timer;
var oldNumRemoved = 0, newNumRemoved = 0;
function isElementInViewport (el) {
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}
function findAncestor (el, cls) {
while ((el = el.parentElement) && !el.classList.contains(cls));
return el;
}
function clickMoreStories() {
var morestories;
morestories = document.getElementsByClassName("fsxl fcg");
if(morestories[0].innerText == "More Stories") {
if(isElementInViewport(morestories[0])) {
morestories[0].click();
console.log("Clicked on more stories button")
}
} // */
}
function recursiveTimedRemover(){
console.log("Activating recursive remover: "+oldNumRemoved)
newNumRemoved = removeSponsored();
if (newNumRemoved > oldNumRemoved || true) {
setTimeout(function () {
oldNumRemoved = newNumRemoved;
recursiveTimedRemover();
} , 2000 );
}
else {
oldNumRemoved = 0;
}
}
function removeSponsored (){
var allstories, storybox, numRemoved;
numRemoved = 0;
allstories = document.getElementsByClassName("_5pcp _5lel _232_");
for (var i = 0; i < allstories.length; i++) {
if( allstories[i].getElementsByClassName("timestampContent").length === 0 ) {
storybox = allstories[i].closest("._5jmm");
console.log("Removed " + storybox.id + " post");
storybox.style = "opacity: 0.5;";
storybox.style = "display: none;";
// storybox.outerHTML = "<div></div>"
numRemoved++;
}
}
//if (numRemoved) {
console.log("Removed "+numRemoved+" sponsored posts");
// clickMoreStories();
//}
return numRemoved;
}
function domLoaded() {
var homeButton;
console.log("dom loaded");
oldNumRemoved = 0;
window.addEventListener("scroll", removeSponsored, false);
window.requestIdleCallback(function () {
console.log("home click timeout");
oldNumRemoved = 0;
recursiveTimedRemover();
} )
homeButton = document.getElementsByClassName("_2md");
homeButton = homeButton[0];
homeButton.addEventListener("click", homeClicked, false);
}
function homeClicked() {
var homeButton;
console.log("home click START");
window.requestIdleCallback(function () {
console.log("home click timeout");
oldNumRemoved = 0;
recursiveTimedRemover();
} )
console.log("home click END");
}
if( scope.addEventListener ) {
console.log("FB-Remove Sponsored Posts");
scope.addEventListener("DOMContentLoaded", domLoaded);
}
}
)( document );
// test change to see if updates propagate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment