X_Twitter_Pinned_List_Open

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

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

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

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

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

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==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);
})();