generated at
「過去のこの日」機能


いいね!nishio

(追記) shioさんとnishioさんのツイートを見て、等間隔バージョンも試しに実装
nishio正確に言えば「過去のこの日」はFacebookの「n年前のこの日の投稿見せる機能」なので、間隔反復法のことをそう呼ぶのは変
なるほど、なんか良い呼び名ないものでしょうか...progfay
「忘れてませんか?」機能()

(追記 2018/5/27) 別タブで開くように修正
(追記 2018/5/28) ページ名がエンコードされていないバグを修正
(追記 2021/8/6) nishioシンプルにしたものを作りました /nishio/Scrapbox振り返り機能

import.js
import '/api/code/customize/「過去のこの日」機能/script.js'

sortMode を変えると表示形式が変わる
periodic : 7日前、15日前、30日前、60日前、120日前、180日前、365日前に編集したページを表示
nishioこれも間隔が伸びながら反復するのだから間隔反復法
僕の方のperiodicは「1年間隔で繰り返し」になっている
log : 間隔反復法表示
visibleRankNum を変えれば、表示される個数を変えられる (間隔反復法表示のときのみ)
PageMenuが押されたときにAPIを叩いているので、数秒待つ必要がある
nishiolocalStorageにキャッシュしたりできないかな
progfayそこら辺知見がないです、できるのかな...
kokutoushaAPIを叩く代わりに/scrapboxlab/UserScriptから使えるscrapboxのobjectを使うように変更しました

script.js
// const sortMode = 'periodic' // 等間隔 const sortMode = 'log' // 間隔反復法 let visibleRankNum = 15; // log以外では無視される let projectPages; scrapbox.PageMenu.addMenu({ title: 'Scrapbox Sort', image: 'https://gyazo.com/11140c8b35b407c5d490a94ec6f2528f/raw', onClick: () => { scrapbox.PageMenu('Scrapbox Sort').addItem({ title: 'Please wait...', image: null, onClick: () => null }) let projectPages = scrapbox.Project.pages.slice() const now = Date.now() const day = 60 * 60 * 24 * 1000 const year = day * 365 const intervals = [7, 15, 30, 60, 120, 180, 365].map(int => int * day) projectPages.forEach(page => { const diff = now - page.updated * 1000 if (sortMode === 'log') { page.score = diff > 10 * day ? (Math.log(diff / (10 * day)) / Math.log(2)) % 1 : year page.ago = Math.floor(diff / day) } else { // periodic for (const interval of intervals) { if (day < interval - diff && interval - diff < 2 * day) { page.score = interval page.ago = interval / day break } } } }) projectPages = projectPages.filter(page => page.score && page.ago) projectPages.sort((page1, page2) => (sortMode == 'log' ? page1.score - page2.score : page2.score - page1.score)) scrapbox.PageMenu('Scrapbox Sort').removeAllItems() if (sortMode != 'log') visibleRankNum = projectPages.length projectPages.slice(0, visibleRankNum).forEach(page => { scrapbox.PageMenu('Scrapbox Sort').addItem({ title: `(${('000'+page.ago).slice(-3)}日前) ${page.title}`, image: null, onClick: () => window.open(`/${scrapbox.Project.name}/${encodeURIComponent(page.title)}`) }) }) } })

UserScript