Cosense Toolbox
userscript 一覧テーマ作成使い方パーサーGitHub ↗
pageIDからpage titleを取得するuserScript
ツール・ページ無効#page#pageid#redirect#clipboard

pageIDからpage titleを取得するuserScript

pageIDだけがわかっているURLから、そのページの本当のタイトルを調べて該当ページへ移動できます。あわせて、開いているページのpageIDをコピーする機能も使えます。

なお、Cosense自体が古いタイトルのURLでも正しいページへ案内してくれるようになったため、リダイレクト目的ではこの機能は不要になっています。

デモ

デモ

インストール

設定ページの code:script.js に貼る
import "/api/code/cosense-toolbox/pageIDからpage titleを取得するuserScript/script.js";
ソースコード全文を見る(JS)
const getPageIDFromQueryParam = () => {
  const usp = new URLSearchParams(location.search);
  const params = Object.fromEntries(usp.entries());
  return params;
};

/** @see https://scrapbox.io/scrapboxlab/api%2Fpage-snapshots%2F:projectname%2F:pageid%2F:timestampid **/
const getPageFromSnapshotByPageId = async (pageId) => {
  const res = await fetch(`/api/page-snapshots/${scrapbox.Project.name}/${pageId}/latest`);
  if (!res.ok) {
    alert("リダイレクトするページは存在しません");
    return;
  }
  const data = await res.json();
  return data.page;
};

(async function () {
  const params = getPageIDFromQueryParam();
  if (!params.redirectPageId || !params.redirectPageId.trim()) {
    return;
  }
  const { title } = await getPageFromSnapshotByPageId(params.redirectPageId);
  if (!title) {
    return;
  }
  const answer = confirm(`「${title}」に遷移しますか?`);
  if (answer) {
    location.href = `${location.origin}/${scrapbox.Project.name}/${title}`;
  }
})();

const createModal = () => {
  const dialog = document.createElement("dialog");
  const button = document.createElement("button");
  dialog.innerHTML = `
		<form method="get" action="${location.href}">
					<input type="text" name="redirectPageId">
		</form>
	`;
  dialog.style.cssText = `
		position: fixed;
		inset: 0;
		background: rgb(0,0,0,0.5);
	`;
  document.body.append(dialog);
};

scrapbox.PageMenu("CustomTools").addItem({
  title: "pageIDから遷移する",
  onClick: async function () {
    window.location.href = location.href + "?redirectPageId=";
  },
});

scrapbox.PageMenu("CustomTools").addItem({
  title: "pageIDをコピーする",
  onClick: async function () {
    await navigator.clipboard.writeText(scrapbox.Page.id);
  },
});

scrapbox.PageMenu("CustomTools").addItem({
  title: "pageId付きのurlをコピーする",
  onClick: async function () {
    await navigator.clipboard.writeText(`${location.href}?redirectPageId=${scrapbox.Page.id}`);
  },
});
元のCosenseページを見る ↗

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

GitHub ↗

マイ・ツールボックス

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