block the user you don't want to see his reply.
// ==UserScript==
// @name CC98 Block
// @namespace http://tampermonkey.net/
// @version 0.5.2
// @description block the user you don't want to see his reply.
// @author kumiko
// @match *://www.cc98.org/topic/*
// @match *://www.cc98.org/newTopics
// @match *://www.cc98.org/focus
// @match *://www.cc98.org/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @license AGPL-3.0
// @require https://greasyfork.org/scripts/383527-wait-for-key-elements/code/Wait_for_key_elements.js?version=701631
// ==/UserScript==
let starttime = new Date();
console.log("==> Script start.", starttime);
var ban_user_list = new Array();
var ban_topic_list = new Array();
if (localStorage.ban_user_list) {
ban_user_list = JSON.parse(localStorage.ban_user_list);
}
if (localStorage.ban_topic_list) {
ban_topic_list = JSON.parse(localStorage.ban_topic_list);
}
// 添加拉黑按钮
function addUserBtn(commentlike, user_message) {
var b = document.createElement('button');
b.textContent = '拉黑';
b.style.cssText = 'width: 25%;height: 25%; text-align: center; vertical-align:bottom; margin-left: 8px';
b.addEventListener('click', banUser);
b.user_message = user_message;
commentlike.appendChild(b);
}
function addTopicBtn(focus_topic) {
if (focus_topic.querySelector('span') == null) {
var span = document.createElement('span');
span.innerText = '屏蔽';
// b.style.cssText = 'width: 25%;height: 25%; text-align: center; vertical-align:bottom; margin-left: 8px';
span.addEventListener('click', banTopic);
span.style.cssText = 'width: 40px';
var focus_topic_info = focus_topic.querySelector('.focus-topic-info');
focus_topic_info.insertBefore(span, focus_topic_info.firstChild);
span.focus_topic = focus_topic;
}
//console.log('[addTopicBtn]: ', focus_topic_info);
}
function changeTopicBtn(focus_topic) {
var span = focus_topic.querySelector('span');
if (span != null) {
span.focus_topic = focus_topic;
} else {
addTopicBtn(focus_topic);
}
}
function loadFocus() {
var focus_topics = document.querySelectorAll('.focus-topic');
console.log('[loadFocus]: focus_topics.length ', focus_topics.length);
focus_topics.forEach(
function (el) {
//var user_message = el.querySelector('.focus-topic-userName');
//console.log('[LoadFocus] current topic user name: ', el.textContent);
if (el) {
if (removeTopic(el) == false) {
addTopicBtn(el);
}
}
}
);
}
function changeFocus() {
var focus_topics = document.querySelectorAll('.focus-topic');
focus_topics.forEach(
function (el) {
//var user_message = el.querySelector('.focus-topic-userName');
//console.log('[LoadFocus] current topic user name: ', el.textContent);
if (el) {
if (removeTopic(el) == false) {
changeTopicBtn(el);
}
}
}
);
}
function loadMoreTopic(mutationsList) {
for (const mutation of mutationsList) {
var focus_topic = mutation.addedNodes[0];
// console.log('[loadMoreTopic] user name: ', user_name);
if (focus_topic) {
if (removeTopic(focus_topic) == false) {
addTopicBtn(focus_topic);
}
}
}
}
// 删除当前回复
function removeReply(user_message) {
var user_name = user_message.text;
if (ban_user_list.includes(user_name)) {
try {
// user_message.offsetParent.remove();
// user_message.offsetParent.style.visibility = "hidden";
user_message.offsetParent.style.display = "none";
console.log("==> Hidden user's reply ", user_name);
} catch (e) { }
return true;
}
return false;
}
function banTopic(event) {
var query_res = event.currentTarget.focus_topic.querySelector('.focus-topic-title');
var topic = query_res.getAttribute('href').slice(7, -2);
var topic_text = query_res.text;
var r = window.confirm('确认屏蔽此贴[ ' + topic_text + ' ]?');
if (r) {
if (!ban_topic_list.includes(topic)) {
ban_topic_list.push(topic);
localStorage.ban_topic_list = JSON.stringify(ban_topic_list);
}
removeTopic(event.currentTarget.focus_topic);
}
}
function banUser(event) {
var user_name = event.currentTarget.user_message.text;
var r = window.confirm('确认拉黑用户[ ' + user_name + ' ]?');
if (r) {
if (!ban_user_list.includes(user_name)) {
ban_user_list.push(user_name);
localStorage.ban_user_list = JSON.stringify(ban_user_list);
}
removeReply(event.currentTarget.user_message);
}
}
function loadReply() {
console.log('Begin Search Reply');
var replys = document.querySelectorAll('.reply');
replys.forEach(
function (el) {
var user_message = el.querySelector('.userMessage-userName');
if (user_message) {
var commentlike = el.querySelector('#commentlike');
if (removeReply(user_message) == false) {
console.log('[loadReply] 查找到回复, 用户为: ' + user_message.text);
if (commentlike.getElementsByTagName('button').length == 0) {
addUserBtn(commentlike, user_message);
}
}
}
}
);
}
function loadHot() {
console.log('Begin Search Hot Reply');
var replys = document.querySelectorAll('[id^=hot]');
replys.forEach(
function (el) {
var user_message = el.querySelector('.userMessage-userName');
if (user_message) {
var commentlike = el.querySelector('#commentlike');
if (removeReply(user_message) == false) {
console.log('[loadHot] 查找到hot回复, 用户为: ' + user_message.text);
addUserBtn(commentlike, user_message);
// setTimeout(() => console.log(1), 1000);
}
}
}
);
}
function removeTopic(focus_topic) {
var user_name = focus_topic.querySelector('.focus-topic-userName').textContent;
var topic_href = focus_topic.querySelector('.focus-topic-title').getAttribute('href').slice(7, -2);
if (ban_user_list.includes(user_name) || ban_topic_list.includes(topic_href)) {
try {
focus_topic.style.display = "none";
console.log("==> Rmove user's topic ", user_name, topic_href);
} catch (e) { }
return true;
} else {
if (focus_topic.style.display == "none") {
focus_topic.style.display = "";
}
return false;
}
}
// sleep time expects milliseconds
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
function callback(mutationsList, observer) {
// console.log(mutationsList);
if (mutationsList[0].type === 'attributes') {
observer.disconnect();
observer.observe(
document.querySelector('.focus-topic-title'),
{ attributes: true }
);
console.log('[callback from mutationObserverFocus] Focus hover changes, mutationObserverFocus oberserver changes.');
changeFocus();
} else if (mutationsList[0].type === 'childList') {
//console.log(mutationsList.length);
if (mutationsList[0].removedNodes.length > 0) {
console.log('[callback from mutationObserverLength] Current Focus-topic number changes according to focus hover changes');
changeFocus();
} else {
console.log('[callback from mutationObserverLength] Current Focus-topic number changes');
loadMoreTopic(mutationsList);
}
}
}
// var mutationObserverFocus = new MutationObserver(callback);
var mutationObserverLength = new MutationObserver(callback);
function focusHoverMO() {
console.log('Run function focusHoverMO');
mutationObserverFocus.disconnect();
var intv = setInterval(function () {
var topic_title = document.querySelector('.focus-topic-title');
if (topic_title == null) {
return false;
}
//when element is found, clear the interval.
clearInterval(intv);
loadFocus();
mutationObserverFocus.observe(
topic_title,
{ attributes: true }
)
}, 5);
// mutationObserverL.observe(
// document.querySelector('.focus-topic-title'),
// {attributes: true}
// )
}
function focusTopicAreaMO() {
//loadFocus();
console.log('Run function focusTopicAreaMO');
var intv = setInterval(function () {
var topic_title = document.querySelector('.focus-topic-title');
if (topic_title == null) {
return false;
}
//when element is found, clear the interval.
clearInterval(intv);
loadFocus();
}, 5);
mutationObserverLength.disconnect();
mutationObserverLength.observe(
document.querySelector('.focus-topic-topicArea'),
{ childList: true }
)
}
waitForKeyElements(".center>.center .center", loadHot);
waitForKeyElements("#1", loadReply);
// waitForKeyElements(".focus-topic-topicArea", loadFocus);
// waitForKeyElements(".focus-board-area", focusHoverMO);
waitForKeyElements(".focus-topic-topicArea", focusTopicAreaMO);
let endtime = new Date();
console.log("==> Script end.", endtime);
console.log("script load in", endtime.getTime() - starttime.getTime(), "ms");