無色透明マスク

無色透明祭のサムネイル,再生数,コメ数,マイリス数,ランキング最高順位をマスクします

当前为 2022-07-30 提交的版本,查看 最新版本

// ==UserScript==
// @name         無色透明マスク
// @namespace    https://site.nicovideo.jp/mushokutomeisai
// @version      0.10.4
// @description  無色透明祭のサムネイル,再生数,コメ数,マイリス数,ランキング最高順位をマスクします
// @author       -
// @match        https://www.nicovideo.jp/watch/*
// @match        https://ch.nicovideo.jp/mushokutomeisai*
// @match        https://www.nicovideo.jp/user/124082477/mylist/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=nicovideo.jp
// @grant        none
// @run-at       document-start
// @license      CC0
// ==/UserScript==
(function() {
  'use strict';

  const THUMBNAIL = `
    background: #222 url('https://secure-dcdn.cdn.nimg.jp/nicochannel/material/design/5677558/img_main_01.png') no-repeat center;
    content: '';
    display: block;
    position: absolute;
    inset: 0;
  `;

  const addStyle = css => {
    const style = document.createElement('STYLE');
    style.textContent = css;
    document.head.appendChild(style);
  };

  const mask = (target, color) => {
    addStyle(`
      ${target} { color: ${color}; background: ${color}; transition: 0s 0s }
      ${target}:hover { color: unset; background: unset; transition: 10s 2s }
    `);
  };

  let retry = 0;
  let videoDescription = null;
  const modPlayPage = () => {
    videoDescription = document.getElementsByClassName('VideoDescription-html')[0];
    if (!videoDescription) {
      retry --;
      if (retry) {
        setTimeout(modPlayPage, 10);
      }
      return;
    }
    for (const target of [
      'body.mushokutoumei :is(.VideoViewCountMeta-counter, .CommentCountMeta-counter, .MylistCountMeta-counter) > .FormattedNumber',
      'body.mushokutoumei .GenreRankMeta-yesterdayRank'
    ]) {
      mask(target, '#657586');
      addStyle(`${target} {
        display: inline-block;
        width: 5rem;
        overflow: hidden;
      }`);
    }
    // mask('body.mushokutoumei .LikeActionButton-count', '#fff') // iine!
    mask('body.mushokutoumei .VideoMediaObject-meta', '#ccc')
    addStyle(`
      body.mushokutoumei .RouterLink > .Thumbnail::before {
        ${THUMBNAIL}
        background-size: 145px;
      }
      body.mushokutoumei .VideoMediaObject-thumbnail::before {
        ${THUMBNAIL}
        background-size: 170px;
      }
    `);
    switchMask();
    const observer = new MutationObserver(switchMask);
    observer.observe(videoDescription, { childList: true, subtree: true, characterData: true });
  };

  const switchMask = () => {
    if (videoDescription.textContent == '【無色透名祭】参加作品です。https://site.nicovideo.jp/mushokutomeisai/') {
      document.body.classList.add('mushokutoumei');
    } else {
      document.body.classList.remove('mushokutoumei');
    }
  }

  const modChannelPage = () => {
    mask('.g-video_counts', '#6296c1');
    addStyle(`
      .thumb_anchor::before {
        ${THUMBNAIL}
        background-size: 170px;
      }
      .thumb_anchor { position: relative; }
    `);
  };

  const modMyListPage = () => {
    mask('.NC-VideoMediaObject-metaCount', '#bebebe');
    addStyle(`
      .NC-Thumbnail-image::after {
        ${THUMBNAIL}
        background-size: 120%;
      }
    `);
  };

  if (location.href.startsWith('https://www.nicovideo.jp/watch/')) {
    retry = 100;
    modPlayPage();
  } else if (location.href.startsWith('https://ch.nicovideo.jp/mushokutomeisai')) {
    modChannelPage();
  } else {
    modMyListPage();
  }

})();