Greasy Fork

来自缓存

Greasy Fork is available in English.

Anilist - Block Forum Users

Simple userscript/extension for AniList that block users in forum.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        Anilist - Block Forum Users
// @namespace   Violentmonkey Scripts
// @match       https://anilist.co/*
// @grant       none
// @version     1.0
// @license     GPL-3.0-or-later
// @author      KanashiiDev
// @description Simple userscript/extension for AniList that block users in forum.
// @run-at      document-end
// ==/UserScript==

//Element HasOwnProperty
function hasOwn(e, t) {
  return Object.hasOwn ? Object.hasOwn(e, t) : Object.prototype.hasOwnProperty.call(e, t);
}

//Create Element Function
function create(e, t, n) {
  if (!e) throw new SyntaxError("'tag' not defined");
  var r,
    i,
    f = document.createElement(e);
  if (t)
    for (r in t)
      if ("style" === r) for (i in t.style) f.style[i] = t.style[i];
      else t[r] && f.setAttribute(r, t[r]);
  return n && (f.innerHTML = n), f;
}

//CSS
var styles = `
.blockuser {
  opacity:0;cursor:pointer
}
.comment:hover .actions .blockuser {
  opacity:1
}
.ForumblockItem{
  cursor:pointer;
  display: inline-block;
  margin-top: 15px
}
.ForumblockDiv{
  border-top: solid 1px rgba(var(--color-text-lighter),.4);
  margin-top: 80px;
  padding-top: 30px;
  margin-bottom: 30px
}
.ForumBlockItemDiv {
  display: grid;
  grid-template-columns: 1fr 90px;
  align-items: center
}
`;

//Add CSS
var styleSheet = document.createElement("style");
styleSheet.innerText = styles;
document.head.appendChild(styleSheet);

//Variables
var mainarray = [];
var oldHref = document.location.href;
let blocklistuserarray = window.localStorage.getItem("forumblocked");

//if list not null split blocked users
if (blocklistuserarray !== null) {
  let x = blocklistuserarray.split(/[.,!,?]/);
  mainarray = x;
}

//Block User Button Function
function addSavetoBlockList() {
  var blocklistSave = false;
  let BlockListCollection = document.querySelectorAll(".comment .actions");
  BlockListCollection.forEach(function (blocklist) {
    if (!hasOwn(blocklist, "blocklistSave")) {
      blocklist.blocklistSave = true;
      let blocklistSave = create(
        "a",
        {
          class: "blockuser",
          id: "blockuser",
        },
        "<b>Block User</b>"
      );
      blocklistSave.onclick = function () {
        let el = blocklistSave;
        let id = el.parentElement.parentElement.innerText.split("\n")[0];
        el.click();
        el.click();
        el.onclick = () => {
          let blocklistuserarray = window.localStorage.getItem("forumblocked");
          if (blocklistuserarray !== null) {
            let x = blocklistuserarray.split(/[.,!,?]/);
            for (let i in x) {
              if (x[i] == id) {
                x.splice(i, 1);
                break;
              }
            }
            mainarray = x;
          }
          for (let i = 0; i <= mainarray.length; i++) {
            if (id === mainarray[i]) {
              return;
            }
            el.lastElementChild.innerText = "Blocked!";
          }
          mainarray.push(id);
          localStorage.setItem("forumblocked", [mainarray]);
        };
      };
      if (blocklist.closest(".comment-wrap")) {
        blocklist.prepend(blocklistSave);
      }
    }
  });
  if(blocklistuserarray !== null){
    checkblock();
  }
}

//Check if user blocked and remove user's comments
function checkblock() {
  let coms = document.querySelectorAll(".comment-wrap .comment");
  if (!coms) {
    setTimeout(checkblock, 100);
    return;
  }
  for (let x = 0; x < coms.length; x++) {
    for (let i = 0; i <= mainarray.length; i++) {
      if (coms[x].children[0].innerText.split("\n")[0] === mainarray[i]) {
        coms[x].parentElement.parentElement.remove();
      }
    }
  }
}

//Get Blocked Users Function
function getblockedlist() {
  let to = document.querySelector(".section.delete-account");
  if (!to) {
    setTimeout(getblockedlist, 200);
    return;
  }
  let ForumblockDiv = create(
    "div",
    {
      class: "ForumblockDiv",
    },
    "<h2>" + "Blocked Forum Users" + "</h2>"
  );
  to.insertAdjacentElement("afterend", ForumblockDiv);
  mainarray.forEach((item) => {
    let itemCon = create("div", {
      class: "ForumBlockItemDiv",
    });
    let itemDiv = create("a", {
      class: "ForumblockItem",
      id: item,
      href: "https://anilist.co/user/" + item,
    });
    let itemDivRemove = create(
      "div",
      {
        class: "button danger",
        id: item,
      },
      "Unblock"
    );
    itemDiv.innerText = item;
    itemDivRemove.onclick = () => {
      removeuser(itemDivRemove.id);
      itemCon.remove();
    };
    itemCon.append(itemDiv, itemDivRemove);
    ForumblockDiv.append(itemCon);
  });
}

//Remove Blocked User Function
function removeuser(id) {
  if (mainarray.length == 1) {
    mainarray = [];
  }
  let blocklistuserarray = window.localStorage.getItem("forumblocked");
  let x = blocklistuserarray.split(/[.,!,?]/);
  for (let i in x) {
    if (x[i] == id) {
      x.splice(i, 1);
      break;
    }
  }
  localStorage.setItem("forumblocked", [x]);
}

//Add Block User Button
var target = document.querySelector("body");
var observer = new MutationObserver(function (mutationsList, observer) {
  for (var mutation of mutationsList) {
    if (/^\/forum\/(thread)\/?([\w-]+)?\/.*?$/.test(location.pathname) &&
      mutation.addedNodes[0] &&
      mutation.addedNodes[0].classList &&
      mutation.addedNodes[0].classList[0] === "comment-wrap"
    ) {
      addSavetoBlockList();
    }

    if (mutation.type === "childList" && mutation.addedNodes.length > 0) {
      if (oldHref != document.location.href) {
        oldHref = document.location.href;
        if (/^\/settings\/(account)\/?([\w-]+)?\/?$/.test(location.pathname)) {
          getblockedlist();
        }
      }
    }
  }
});
observer.observe(target, {
  childList: true,
  subtree: true,
});