NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name FFS User Blocker
// @namespace Smarty Pants
// @author Smarty Pants
// @version 2.3
// @include http://www.fantasyfootballscout.co.uk/*
// @description Block users on Fantasy Football Scout
// @grant GM_getValue
// @grant GM_setValue
// @run-at document-end
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js
// @license MIT
// ==/UserScript==
/* MENU POP UP */
/* create box with lists of blocked users, delete a profile on click */
function createModalBox(){
// popup html structure
var html = "";
var modal_div = document.createElement("DIV");
modal_div.id = "gr-container";
var modal_div_content = document.createElement("DIV");
modal_div_content.id = "gr-content";
var mdc_header = document.createElement("DIV");
mdc_header.className = "gr-content-header";
var mdc_content = document.createElement("DIV");
mdc_content.className = "gr-content-content";
var mdc_footer = document.createElement("DIV");
mdc_footer.className = "gr-content-footer";
// "close" button
var modal_div_close = document.createElement("SPAN");
modal_div_close.className = "gr-close";
modal_div_close.innerHTML = "x";
modal_div_close.onclick = function(){
var modal = document.getElementById('gr-container');
$(modal).remove();
};
// add content
var mdc_header_text = document.createElement("H4");
mdc_header_text.innerHTML = "Blocked Users";
mdc_content.appendChild(createMoronsListDiv());
mdc_content.appendChild(createMoronsListDiv(true));
mdc_footer.innerHTML = "Click on a link to unblock a user. Reload page for changes to kick in.";
// add to dom
$(modal_div).append(modal_div_content);
$(modal_div_content).append(mdc_header);
$(modal_div_content).append(mdc_footer);
$(modal_div_content).append(mdc_content);
$(mdc_header).append(modal_div_close);
$(mdc_header).append(mdc_header_text);
$("body").append(modal_div);
// add css styles
$(modal_div).css({"display": "none",
"position": "fixed",
"z-index": "10000",
"left": "0",
"top": "0",
"width": "100%",
"height": "100%",
"overflow": "auto",
"background-color": "rgba(0,0,0,0.4)"
});
$(modal_div_content).css({
"background-color": "#fefefe",
"margin": "5% auto",
"padding": "20px",
"border": "1px solid #888",
"width": "80%",
"box-shadow": "0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)"
});
$(".gr-close").css({
"color": "#ffffff",
"float": "right",
"font-size": "28px",
"line-height": "1",
"font-weight": "bold"
});
$(".gr-close").hover(
function () {
$(this).css({
"color": "#000000",
"text-decoration": "none",
"cursor": "pointer"
})
},
function () {
$(this).css({
"color": "#ffffff",
"cursor": "default"
})
}
);
$(mdc_header).css({
"padding": "2px 16px",
"background-color":"rgb(0, 121, 77)",
"color": "#FFF"
});
$(mdc_footer).css({
"padding": "2px 16px",
"background-color":"rgb(0, 121, 77)",
"color": "#FFF"
});
$("UL.gr-blocked-users").css({
"list-style-type": "none",
"padding": "0",
"margin": "0",
});
$("DIV.gr-blocked-users-header").css({
"border": "1px solid #ddd",
"margin-top": "-1px",
"background-color":"#5cb85c",
"padding": "2px 16px",
"font-size": "17px",
"color": "#FFF",
"display": "block",
"font-weight": "bold"
})
$("LI.gr-blocked-user").css({
"border": "1px solid #ddd",
"margin-top": "-1px",
"background-color":"#f6f6f6",
"padding": "6px 12px",
"font-size": "15px",
"color": "#000",
"display": "block"
})
$("LI.gr-blocked-user").hover(
function () {
$(this).css({
"background-color": "#555",
"color":"#fff",
"font-size": "18px",
"padding": "3px 12px",
"cursor": "pointer"
})
},
function () {
$(this).css({
"background-color":"#f6f6f6",
"color": "#000",
"font-size": "15px",
"padding": "6px 12px",
"cursor": "default"
})
}
);
// callback functions to remove link from blocked
$("LI.gr-blocked-user.minimized").click(
function () {
removeFromMorons(this.innerHTML);
$(this).remove();
}
);
$("LI.gr-blocked-user.chidden").click(
function () {
$(this).remove();
removeFromCompleteMorons(this.innerHTML);
}
);
}
// return a div with list of blocked profiles
function createMoronsListDiv(complete=false){
var list_div = document.createElement("UL");
var list_header = document.createElement("DIV");
list_header.className = "gr-blocked-users-header";
list_header.innerHTML = (complete == true ? "Completely Hidden Users (all posts and replies to them hidden completely)" : "Partially Hidden Users (there is an option to expand comment)");
list_div.appendChild(list_header);
list_div.className = "gr-blocked-users";
var items = [];
var list = (complete == true ? complete_morons : morons);
for (var i = 0; i < list.length; i++){
items.push(document.createElement("LI"));
items[i].innerHTML = list[i];
items[i].className = (complete == true ? "gr-blocked-user chidden" : "gr-blocked-user minimized");
list_div.appendChild(items[i]);
}
return list_div
}
/* COMMENT SECTION */
/* Hide comments with specified classes */
function hideMorons(){
// minimize messages, add callbacks to open thread
var comments_to_block = $(".annoying-moron")
for (var i = 0; i<comments_to_block.length; i++){
comment = comments_to_block[i];
$(comment).children().css("display","None");
$(comment).parent().children("ol").css("display","None");
var new_node = document.createElement("DIV");
new_node.className = "block-message";
new_node.innerHTML = "Hidden comment by " + comment.getAttribute("user_name") + " (" + ($(comment).parent().find(".hc-comment").length-1) + ")";
$(new_node).css({"font-size":"10px", "padding":"2px 10px"});
$(new_node).hover(
function(){
$(this).css({"cursor":"pointer", "background-color":"RGBA(0,0,0,0.5)"})
},
function(){
$(this).css({"cursor":"default", "background-color":"RGBA(0,0,0,0)"})
});
$(new_node).click(function(){
$(this).parent().children(":not(.block-message)").css("display","block"); // show comment
$(this).parent().parent().children("ol").css("display","block"); // show replies
$(this).css("display","None") // hide message
});
comment.appendChild(new_node);
}
// hide whole threads
var comments_to_block = $(".complete-moron");
for (var j = 0; j<comments_to_block.length; j++){
comment = comments_to_block[j];
$(comment).parent().children().css("display","None");
}
}
/* Run a loop through comments and add classes (where applicable) and buttons */
/* Use boolean arguments to limit only to buttons or classes */
function addClassesAndButtons(classes, buttons){
var comments = $(".hc-comment")
for (var i = 0; i<comments.length; i++){
try{
var comment = comments[i];
var actions = comment.getElementsByClassName("hc-comment-actions");
var usertitle = comment.getElementsByClassName("hc-title");
var userlink = usertitle[0].href;
var username = usertitle[0].getAttribute("oldtitle");
if (username === null) {username = usertitle[0].getAttribute("title")}
comment.setAttribute("user_name", username);
comment.user_name = username; // for Chrome
if (buttons) {actions[0].appendChild(addMoronButton(userlink));
actions[0].appendChild(addCompleteMoronButton(userlink));}
if (classes) {addClass(comment, userlink);}
}
catch(e){console.log("ERROR: "+e)}
}
}
/* Add button to each comment */
function addMoronButton(link){
var new_node = document.createElement("LI");
new_node.className = "hc-permalink";
new_node.setAttribute("profile_link", link);
new_node.onclick = function() {
addToMorons(this.getAttribute("profile_link")) // add to array
addClassesAndButtons(true, false) // add classes once again according to new array of blocked users
hideMorons() // re-hide
};
new_node.innerHTML = "💩"
return new_node;
}
function addCompleteMoronButton(link){
var new_node = document.createElement("LI");
new_node.className = "hc-permalink";
new_node.setAttribute("profile_link", link);
new_node.onclick = function() {
addToCompleteMorons(this.getAttribute("profile_link")) // add to array
addClassesAndButtons(true, false) // add classes once again according to new array of blocked users
hideMorons() // re-hide
};
new_node.innerHTML = "🚫"
return new_node;
}
/* Function that checks whether a profile is among blocked and adds a new class if true */
function addClass(node, userlink){
if (morons.length > 0) {
if (morons.indexOf(userlink)!=-1){
$(node).addClass("annoying-moron");
}
}
if (complete_morons.length > 0) {
if (complete_morons.indexOf(userlink)!=-1){
$(node).addClass("complete-moron");
}
}
}
/* Functions to add a profile to a corresponding array */
function addToMorons(profile_link){
if (morons.indexOf(profile_link)==-1){
morons.push(profile_link);
}
morons.sort();
saveList("ffs_blocked_users", morons);
}
function addToCompleteMorons(profile_link){
if (complete_morons.indexOf(profile_link)==-1){
complete_morons.push(profile_link);
}
complete_morons.sort();
saveList("ffs_hidden_users", complete_morons);
}
/* Functions to remove a profile from a corresponding array */
function removeFromMorons(profile_link){
if (morons.indexOf(profile_link)!=-1){
morons.splice(morons.indexOf(profile_link),1);
}
morons.sort();
saveList("ffs_blocked_users", morons)
}
function removeFromCompleteMorons(profile_link){
if (complete_morons.indexOf(profile_link)!=-1){
complete_morons.splice(complete_morons.indexOf(profile_link),1);
}
complete_morons.sort();
saveList("ffs_hidden_users", complete_morons);
}
/* Functions to get stored arrays of blocked user profiles */
function getMorons(){
return getList("ffs_blocked_users");
}
function getCompleteMorons(){
return getList("ffs_hidden_users");
}
function getList(name) {
var str = GM_getValue(name, "");
var data = str.split(" ");
if (data[0]=="") {data = []};
return data;
}
function saveList(name, data) {
str = data.join(" ");
GM_setValue(name, str);
return 0;
}
/* Add an item to main menu to show lists of blocked users */
function addMenuItem(){
var new_node = document.createElement("LI");
$(new_node).append("<a>💩</a>");
$(new_node).addClass("menu-item menu-item-type-custom");
$(new_node).click(function() {
createModalBox() //create box with current list values
$('#gr-container').css("display","block")
window.onclick = function(event) {
var modal = document.getElementById('gr-container');
if (event.target == modal) {
$(modal).remove();
}
}
})
$("ul#menu-main-nav.menu").append(new_node);
}
morons = getMorons();
complete_morons = getCompleteMorons();
addMenuItem();
addClassesAndButtons(true, true);
hideMorons();