您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Creates a "Block" button on Sucks posts and hides all posts for
当前为
- // ==UserScript==
- // @name Survivor Sucks Block Users
- // @author jkalderash
- // @version 1.0
- // @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://code.jquery.com/jquery-2.0.0.min.js
- // @namespace http://greasyfork.org/users/1076-jkalderash
- // ==/UserScript==
- // hide all posts/threads/quotes for a blocked username
- function hideAll(url) {
- // Hide all posts from the user.
- getPosts(url).hide();
- // Hide all threads from the user.
- getThreads(url).hide();
- // From MisterRisible! Removes the text from quotes of the blocked user.
- var quotedUsername = convertUrlToQuotedUsername(url);
- getBlockquotes(quotedUsername).each(function() {
- // Build a fake blockquote with a "click to show" button.
- var actualQuote = $(this);
- var fakeQuote = $("<blockquote class=\"jkalderash-blocked\"><strong class=\"quote-title\">"
- + quotedUsername + " wrote:</strong> </blockquote>");
- var clickToShow = $('<a href=\"javascript:\">click to show</a>');
- clickToShow.click(function() {
- $(fakeQuote).detach();
- $(actualQuote).show();
- });
- fakeQuote.append(clickToShow);
- $(this).before(fakeQuote);
- $(this).hide();
- });
- }
- // unhide all posts/threads/quotes for an unblocked username
- function unhideAll(url) {
- getPosts(url).show();
- getThreads(url).show();
- var quotedUsername = convertUrlToQuotedUsername(url);
- getBlockquotes(quotedUsername).each(function() {
- $(this).siblings(".jkalderash-blocked").detach();
- $(this).show();
- });
- }
- // get all of the posts by a user
- function getPosts(url) {
- return $("td.poster-name").find("a[href='http://" + url + ".yuku.com']").closest("tbody");
- }
- // get all of the threads by a user
- function getThreads(url) {
- return $("td.author").find("a[href='http://" + url + ".yuku.com']").closest("tr");
- }
- // gets all <blockquote> elements for quotes by a user
- function getBlockquotes(quotedUsername) {
- return $("strong.quote-title").filter(function() {
- return $(this).text() === quotedUsername + " wrote:";
- }).parent();
- }
- // 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, url) {
- var newItem = $('<li><a href=\"javascript:\">Block</a></li>');
- newItem.click(function() {
- GM_log("BLOCK " + url);
- if (insertIntoBlacklist(url)) {
- hideAll(url);
- makeUnblockList();
- window.alert("Blocked " + convertUrlToThreadUsername(url));
- }
- });
- $(element).closest("tbody.thread-post").find("ul.reply-options").append(newItem);
- }
- // returns a link to unblock a blocked user
- function makeUnblockLink(url) {
- var threadUsername = convertUrlToThreadUsername(url);
- var newItem = $("<a href=\"javascript:\">" + threadUsername + "</a>");
- newItem.click(function() {
- blacklist.splice(blacklist.indexOf(url), 1);
- GM_log("New blacklist: " + blacklist.join(" "));
- updateBlacklist();
- $(this).hide();
- unhideAll(url);
- alert("Unblocked " + threadUsername);
- });
- 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);
- });
- }
- // get the username from the URL of the profile page.
- // this is the username used in quote blocks, i.e. "Joe Schmoe wrote:"
- function convertUrlToQuotedUsername(url) {
- // remove everything before the first dot
- var dot = url.indexOf(".");
- url = url.substr(0, dot);
- // replace hyphens with spaces
- url = url.replace(/-/g, " ");
- return url;
- }
- // get the username from the URL of the profile page.
- // this is the username displayed next to the user's avatar.
- function convertUrlToThreadUsername(url) {
- // remove trailing ".u" or ".e"
- if (url.indexOf(".u", url.length - 2) > 0
- || url.indexOf(".e", url.length - 2) > 0) {
- url = url.substr(0, url.length - 2);
- }
- // remove trailing ".survivorsucks"
- var suffix = ".survivorsucks";
- if (url.indexOf(suffix, url.length - suffix.length) >= 0) {
- url = url.substring(0, url.length - suffix.length);
- }
- // replace hyphens with spaces
- url = url.replace(/-/g, " ");
- 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 url = $(this).attr("href").substr(7);
- url = url.substr(0, url.length - 9);
- addBlockLink(this, url);
- });
- // 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();
- // create a link to wipe the blacklist.
- 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();
- $("tbody.post.").show();
- $("td.author").closest("tr").show();
- list.find("a").detach();
- alert("Cleared all blocked usernames");
- });
- footer.append(clearAll);
- });