X_Twitter_Pinned_List_Open

Open a pinned list when you visit X(Twitter).

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name            X_Twitter_Pinned_List_Open
// @name:ja         X(Twitter)で固定されたリストを開く
// @namespace       https://greasyfork.org/users/1324207
// @match           https://x.com/*
// @version         2.4
// @run-at          document-start
// @author          Lark8037
// @description     Open a pinned list when you visit X(Twitter).
// @description:ja  X(Twitter)を訪れた時に固定されたリストを開きます。
// @license         MIT
// @icon            https://abs.twimg.com/favicons/twitter.3.ico
// ==/UserScript==
(() => {
  const isSelected = el => el?.getAttribute("aria-selected") === "true";
  let observer;
  const stopObserver = () => {
    if (!observer) return;
    observer.disconnect();
    observer = undefined;
  };
  const startObserver = () => {
    if (!location.pathname.startsWith("/home")) {
      stopObserver();
      return;
    }
    stopObserver();
    observer = new MutationObserver(() => {
      if (!location.pathname.startsWith("/home")) {
        stopObserver();
        return;
      }
      const tabs = document.querySelectorAll('[role="tab"]');
      if (tabs.length < 3) return;
      if (!isSelected(tabs[0]) && !isSelected(tabs[1])) return;
      if (isSelected(tabs[2])) {
        stopObserver();
        return;
      }
      tabs[2].click();
      stopObserver();
    });
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });
  };
  startObserver();
  const hook = fn => function () {
    const r = fn.apply(this, arguments);
    queueMicrotask(startObserver);
    return r;
  };
  history.pushState = hook(history.pushState);
  history.replaceState = hook(history.replaceState);
  window.addEventListener("popstate", startObserver);
})();