generated at
未読のページにランダムジャンプするUserScript:ページを開かずに未読を判定&PageMenuのItemにログを表示するver
ページを開かずに未読を判定&PageMenuのItemにログを表示するver
未読かどうかをページを開くことなく判別すると、ページが切り替わらなくてランダム報酬感がないので、Itemに表示してみることにしたw

script.js
const jumpToUnreadPage = 'Jump to an unread page'; scrapbox.PageMenu.addMenu({ title: jumpToUnreadPage, image: 'https://gyazo.com/f74d4fc373248fb2abac31ff1f69b482/raw', onClick: async () => { const project = scrapbox.Project.name; const pages = scrapbox.Project.pages.filter( page => page.exists && page.title !== scrapbox.Page.title ); const getNextPage = async () => { const title = pages[Math.floor(Math.random() * pages.length)].title; const nextPage = await fetch(`/api/pages/${project}/${encodeURIComponent(title)}`); return await nextPage.json(); } const menu = scrapbox.PageMenu(jumpToUnreadPage); menu.removeAllItems(); menu.emitChange(); let count = 1; while (true) { const nextPage = await getNextPage(); const msg = `${count}: /${project}/${nextPage.title}`; menu.addItem({ title: msg, onClick: () => {} }); console.log(msg); const unreadLine = nextPage.lines.find(line => nextPage.lastAccessed < line.updated); if (!unreadLine) { count++; continue; }

SPAを維持してページ遷移するために、location.hrefではなく <a rel="route"> を使ってジャンプするようにした
script.js
const a = document.createElement('a'); a.href = `./${encodeURIComponent(nextPage.title)}#${unreadLine.id}`; document.body.appendChild(a); a.click(); a.remove(); return; } }, });
こんな手があるのかyosider
軽くなった
rel="route"ってどういう意味なんでしょうか。。
これいらないみたいですtakker
<a> をどこかのDOMに挿入してからクリックすれば、SPAを維持してページ遷移できる
感謝yosider
PageMenuのitemがリセットされなくなったのでリセットするようにした

dnin
ハイスコア叩くのが楽しい
既読ページ12枚くらいログに出た
イドバタニシであることを実感
わかるyosideryosider