「過去のこの日」機能
https://gyazo.com/5dd99a77378e63f65dfb4d1eeaeae52d
いいね!nishio.icon
(追記) shio.iconさんとnishio.iconさんのツイートを見て、等間隔バージョンも試しに実装 nishio.icon正確に言えば「過去のこの日」はFacebookの「n年前のこの日の投稿見せる機能」なので、間隔反復法のことをそう呼ぶのは変
なるほど、なんか良い呼び名ないものでしょうか...progfay.icon
「忘れてませんか?」機能()
(追記 2018/5/27) 別タブで開くように修正
(追記 2018/5/28) ページ名がエンコードされていないバグを修正
code:import.js
import '/api/code/customize/「過去のこの日」機能/script.js'
sortModeを変えると表示形式が変わる
periodic : 7日前、15日前、30日前、60日前、120日前、180日前、365日前に編集したページを表示
nishio.iconこれも間隔が伸びながら反復するのだから間隔反復法
僕の方のperiodicは「1年間隔で繰り返し」になっている
log : 間隔反復法表示
visibleRankNumを変えれば、表示される個数を変えられる (間隔反復法表示のときのみ)
PageMenuが押されたときにAPIを叩いているので、数秒待つ必要がある
nishio.iconlocalStorageにキャッシュしたりできないかな
progfay.iconそこら辺知見がないです、できるのかな...
code:script.js
// const sortMode = 'periodic' // 等間隔
const sortMode = 'log' // 間隔反復法
let visibleRankNum = 15; // log以外では無視される
let projectPages;
scrapbox.PageMenu.addMenu({
title: 'Scrapbox Sort',
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
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.icon