Cosense Toolbox
userscript 一覧テーマ作成使い方パーサーGitHub ↗
未読一覧だけフィルターするuserScript
ツール・ページ実験的#list#filter#unread

未読一覧だけフィルターするuserScript

ページ一覧から、まだ読んでいないページだけを絞り込んで表示できます。読んだものを画面から消せるので、たくさんあるページの中から未読を確認するのに役立ちます。なお、先にプロジェクトの絞り込みをかけておく必要があります。

使い方:一覧のソートメニューから「未読だけ表示」を選びます。

既読かどうかの判定がカードの見た目に頼った仕組みのため、Cosense側のデザインが変わると正しく動かなくなることがある実験的な機能です。

デモ

デモ

インストール

設定ページの code:script.js に貼る
import "/api/code/cosense-toolbox/未読一覧だけフィルターするuserScript/code.js";
ソースコード全文を見る(JS)
(() => {
  const TEXT_CONTENT = '<i class="fas fa-inbox"></i>未読だけ表示';
  window.cosense.on("layout:changed", handler);

  function handler() {
    if (window.cosense.Layout !== "list") {
      return;
    }
    if (isAppended()) {
      return;
    }
    const ul = document.querySelector(
      ".quick-launch .page-sort-menu ul.dropdown-menu.dropdown-menu-right",
    );
    if (!ul) return;
    const li = document.createElement("li");
    const a = document.createElement("a");
    a.innerHTML = TEXT_CONTENT;
    a.onclick = (e) => {
      const filterEl = document.querySelector(".quick-launch .page-filter-menu");
      if (!filterEl || !filterEl.textContent.includes("with")) {
        alert("先にフィルターしてください");
        return;
      }
      const all = document.querySelectorAll(".grid li.page-list-item .content .header");

      Array.from(all).forEach((el) => {
        const style = getComputedStyle(el);
        const borderColor = style.borderColor;
        // CSS変数の値と実際のborderColorが一致しない → 未適用
        const isReaded = borderColor !== "rgb(137, 163, 255)";
        if (isReaded) {
          el.parentElement.parentElement.parentElement.remove();
        }
      });
      e.target.className = "selected";
      document.querySelector(".quick-launch").style.cssText = `
										position: sticky;
										top: 0px;
										background-color: #ffffff47;
										z-index: 10;
										backdrop-filter: blur(10px);
							`;
    };

    li.append(a);
    ul.append(li);
  }

  function isAppended() {
    let has = false;
    document
      .querySelectorAll(".quick-launch .page-sort-menu ul.dropdown-menu.dropdown-menu-right li")
      .forEach((n) => {
        has = n.innerHTML === TEXT_CONTENT;
      });
    return has;
  }

  handler();
})();
元のCosenseページを見る ↗

Cosense Toolbox / Cosense をもっと面白く、もっと強力に使うためのツール群

GitHub ↗

マイ・ツールボックス

    積んだ import を1つにまとめてコピー → 自分の設定ページ(ユーザー名ページ)に貼るだけ。