NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Survivor Sucks Block Users
// @author jkalderash
// @version 0.32
// @description Creates a "Block" button on Sucks posts and hides all posts for
// the user when the button is pressed. Also creates a list of blocked
// users at the bottom of each page.
// @match http://survivorsucks.com/*
// @match http://survivorsucks.yuku.com/*
// @copyright 2013+, jkalderash
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js
// ==/UserScript==
// hide all posts/threads/quotes for a blocked username
function hideAll(username) {
$("tbody.thread-post." + username).hide();
// From MisterRisible! Removes the text from quotes of the blocked user.
$("strong.quote-title:contains(\"" + stripUsername(username) + " wrote:\")").parent().contents(":not(strong)").detach();
// Hide threads created by the user.
$("td.author:contains('" + stripUsername(username) + "')").parent("tr").hide();
}
// unhide posts/threads for an unblocked username
function unhideAll(username) {
$("tbody.thread-post." + username).show();
$("td.author:contains('" + stripUsername(username) + "')").parent("tr").show();
}
// modify the permanent blacklist variable
function updateBlacklist() {
GM_setValue("blacklist", blacklist.join(" "));
}
// inserts a username into the blacklist. returns true if the user was not
// already blacklisted. case insensitive.
function insertIntoBlacklist(username) {
var usernameLower = username.toLowerCase();
for (var i = 0; i < blacklist.length; i++) {
otherUsernameLower = blacklist[i].toLowerCase();
if (usernameLower == otherUsernameLower) {
return false;
}
if (usernameLower < otherUsernameLower) {
break;
}
}
blacklist.splice(i, 0, username);
GM_log("New blacklist: " + blacklist.join(" "));
updateBlacklist();
return true;
}
// adds a "Block" link to each post
function addBlockLink(element, username) {
var newItem = $('<li><a href=\"javascript:\">Block</a></li>');
newItem.click(function() {
GM_log("BLOCK " + username);
if (insertIntoBlacklist(username)) {
hideAll(username);
makeUnblockList();
window.alert("Blocked " + stripUsername(username));
}
});
$(element).parents("tbody.thread-post." + username).find("ul.reply-options").append(newItem);
}
// returns a link to unblock a blocked user
function makeUnblockLink(username) {
var newItem = $("<a href=\"javascript:\">"
+ stripUsername(username) + "</a>");
newItem.click(function() {
blacklist.splice(blacklist.indexOf(username), 1);
GM_log("New blacklist: " + blacklist.join(" "));
updateBlacklist();
$(this).hide();
unhideAll(username);
alert("Unblocked " + stripUsername(username));
});
return newItem;
}
// Helper function for sorting the unblock list at the bottom of the page.
function sortUnblockLinks(link1, link2) {
s1 = link1.html().toLowerCase();
s2 = link2.html().toLowerCase();
if (s1 > s2) {
return 1;
}
if (s2 > s1) {
return -1;
}
return 0;
}
// Clear and rebuild the unblock list.
function makeUnblockList() {
var list = $("#blacklist");
list.find("a").detach();
unblockLinks = blacklist.map(makeUnblockLink).sort(sortUnblockLinks);
unblockLinks.forEach(function(unblockLink) {
$(list).append(" ");
$(list).append(unblockLink);
});
}
// strips -survivorsucks off a username
// also strips n- off the front
// and translates any remaining hyphens to spaces
function stripUsername(username) {
var suffix = "-survivorsucks";
if (username.indexOf(suffix, username.length - suffix.length) >= 0) {
username = username.substring(0, username.length - suffix.length);
}
if (username.substr(0, 2) == "n-") {
username = username.substr(2);
}
username = username.replace(/-/g, " ");
return username;
}
// get the username from the URL of the profile page
function convertUrlToUsername(url) {
url = url.substr(7);
url = url.substr(0, url.length - 9);
if (url.indexOf(".u", url.length - 2) > 0
|| url.indexOf(".e", url.length - 2) > 0) {
url = url.substr(0, url.length - 2);
} else {
var dot = url.lastIndexOf(".");
url = url.substr(0, dot) + "-" + url.substr(dot + 1);
}
var firstChar = url.charAt(0)
if (firstChar >= '0' && firstChar <= '9') {
url = "n-" + url;
}
return url;
}
$(document).ready(function() {
// retrieve the stored value of the blacklist
window.blacklist = GM_getValue("blacklist", "").split(" ");
GM_log("Blacklist: " + blacklist.join(" "));
if (blacklist.length == 1 && blacklist[0] == "") {
// split() on an empty string returns [""]
blacklist.pop();
}
// hide the posts of each blacklisted user
blacklist.forEach(hideAll);
// for each post, create a "Block" link
$("span.user-name a").each(function() {
var username = convertUrlToUsername($(this).attr("href"));
addBlockLink(this, username);
});
// create a list of blocked users at the end of the page
var footer = $("div.myfooter");
var list = $("<p id=\"blacklist\">LIST OF BLOCKED USERNAMES (click to unblock):</p>");
footer.append(list);
makeUnblockList();
var clearAll = $("<p><a href=\"javascript:\">Click here to clear all blocked usernames</a></p>");
clearAll.click(function() {
window.blacklist = [];
updateBlacklist();
$("tbody.thread-post.").show();
list.find("a").detach();
alert("Cleared all blocked usernames");
});
footer.append(clearAll);
});