Pitchfork Score Reveal

  • /*
     * @title Pitchfork Score Reveal
     * @description サブスクで隠されている Pitchfork のスコアを表示する
     * @include https://pitchfork.com/reviews/albums/*
     * @license MIT License
     * @require 
     */
    
    // ==UserScript==
    // @name         Pitchfork Score Reveal
    // @namespace    https://github.com/dlwr/pitchfork-score
    // @version      1.0.2
    // @description  サブスクで隠されている Pitchfork のスコアを表示する
    // @match        https://pitchfork.com/reviews/albums/*
    // @run-at       document-end
    // @grant        none
    // ==/UserScript==
    
    (() => {
      const getScore = () =>
        window.__PRELOADED_STATE__?.transformed?.review?.headerProps?.musicRating
          ?.score;
    
      const apply = (score) => {
        const p = document.querySelector(
          '[class*="SplitScreenContentHeaderScoreBox"] p',
        );
        if (!p) return false;
        const text = String(score);
        if (p.textContent !== text) {
          p.textContent = text;
        }
        let el = p;
        while (el) {
          const f = getComputedStyle(el).filter;
          if (f && f.includes("blur")) {
            el.style.filter = "none";
          }
          el = el.parentElement;
        }
        return true;
      };
    
      const start = () => {
        const score = getScore();
        if (score === undefined || score === null || score === "") {
          alert(
            "Pitchfork のレビューページじゃないか、データ構造が変わってるじゃん",
          );
          return;
        }
        if (!apply(score)) {
          alert(
            "スコア: " +
              score +
              "(DOM に挿入できんかった。セレクタを更新する必要あり)",
          );
          return;
        }
        const observer = new MutationObserver(() => apply(score));
        observer.observe(document.body, {
          subtree: true,
          childList: true,
          characterData: true,
          attributes: true,
          attributeFilter: ["class", "style"],
        });
      };
    
      if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", start);
      } else {
        start();
      }
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。