MyFigureCollection Article Blocker

hide articles of specific users on the front page

目前為 2021-03-12 提交的版本,檢視 最新版本

// ==UserScript==
// @name         MyFigureCollection Article Blocker
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  hide articles of specific users on the front page
// @author       IxianNavigator
// @match        https://myfigurecollection.net/
// @grant        none
// ==/UserScript==

(function() {
  'use strict';
  const blockedUsers = localStorage.blockedUsers ? JSON.parse(localStorage.blockedUsers) : [];

  Array.from(document.querySelectorAll('.stamp-anchor > a[href*="myfigurecollection.net/blog/"')).forEach((aElem) => {
    const url = aElem.getAttribute('href');
    if (!url.match(/myfigurecollection\.net\/blog\/\d+$/)) {
      return;
    }
    const blogPostListItem = aElem.closest("li.listing-item");
    if (!blogPostListItem) {
      return;
    }

    fetch(url).then((response) => response.text()).then((responseText) => {
      const regex = /<a class="anchor user\-anchor user-access-rank-(\d+) user-honorific-rank-(\d+)" href="https:\/\/myfigurecollection\.net\/profile\/(\S+)">/;
      const match = responseText.match(regex);
      if (!match) {
        console.log('no-match', url);
        return;
      }
      const userName = match[3];
      console.log('match', userName);
      if (blockedUsers.includes(userName)) {
        blogPostListItem.setAttribute("style", "display: none;");
        return;
      }
      const userSpan = document.createElement('span');
      userSpan.innerHTML = userName;
      const blockButton = document.createElement('span');
      blockButton.innerHTML = "×";
      blockButton.setAttribute("title", "block user");
      blockButton.setAttribute("role", "button");
      blockButton.setAttribute("style", "cursor: pointer;");
      blockButton.classList.add("block-user-button");
      blockButton.addEventListener("click", function() {
        blockedUsers.push(userName);
        localStorage.blockedUsers = JSON.stringify(blockedUsers);
        blogPostListItem.setAttribute("style", "display: none;");
        addBlockedUsersList();
      });
      const metaContainer = blogPostListItem.querySelector(".stamp-meta");
      metaContainer.appendChild(document.createTextNode(" • "));
      metaContainer.appendChild(userSpan);
      metaContainer.appendChild(document.createTextNode(" • "));
      metaContainer.appendChild(blockButton);
    });
  });
  function addBlockedUsersList() {
    const existingBlockedUsersList = document.querySelector(".blocked-users-list");
    if (existingBlockedUsersList) {
      existingBlockedUsersList.remove();
    }
    const blockedUsersList = document.createElement("div");
    blockedUsersList.classList.add("blocked-users-list");
    document.querySelector(".copyright").after(blockedUsersList);
    blockedUsers.forEach((userName, i) => {
      const userSpan = document.createElement("span");
      userSpan.setAttribute("role", "button");
      userSpan.setAttribute("style", "cursor: pointer;");
      userSpan.innerHTML = userName;
      userSpan.addEventListener("click", function() {
        const index = blockedUsers.indexOf(userName);
        if (index > -1) {
          blockedUsers.splice(index, 1);
        }
        localStorage.blockedUsers = JSON.stringify(blockedUsers);
        addBlockedUsersList();
      });
      blockedUsersList.appendChild(userSpan);
      if (i < blockedUsers.length - 1) {
        blockedUsersList.appendChild(document.createTextNode(" • "));
      }
    });
  }
  addBlockedUsersList();

})();