generated at
scrapbox-pomodoro-timer
Pomodoro Technique用のシンプルなタイマー
少し改造してある
fetch をなくした
残り時間を表示するようにした
動的に表示される
yosiderさんがWeb Notifications APIを使ったver.を作っていた
すばらtakker
後でこれに書き換える

script.js
const intervalPeriod = 25*60*1000; let isRunning = false; let interval = undefined; let endTime = undefined; scrapbox.PageMenu.addMenu({ title: 'Pomodoro Timer', image: 'https://gyazo.com/978797f03cb0112a0a4cafdf02dcdde8/raw' }); showItems();

メニューに時刻とタイマーの開始ボタンを表示する
時刻は一秒ごとに変化する
script.js
function showItems() { scrapbox.PageMenu('Pomodoro Timer').addItem({ title: () => (isRunning)? '⏹Stop timer' : '▶Start timer', onClick: () => { if (isRunning) { isRunning = false; clearInterval(interval); startTime = undefined; } else { isRunning = true; interval = setInterval(TimeUp, intervalPeriod); endTime = new Date(); endTime.setTime(endTime.getTime() + intervalPeriod); } }, }); scrapbox.PageMenu('Pomodoro Timer').addItem({ title: () => { if (!isRunning) return '---'; setTimeout(() => { scrapbox.PageMenu('Pomodoro Timer').removeAllItems(); showItems(); }, 1000); return restTime(); }, onClick: () => {}, }); }

時間が来たときの処理
script.js
function TimeUp() { // タイマーをクリア isRunning = false; clearInterval(interval); alert('🍅お時間です。'); }

残り時間を返す
script.js
const zero = n => String(n).padStart(2, '0'); function restTime() { const now = new Date(); const rest = endTime.getTime() - now.getTime(); const seconds = Math.round((rest % (60 * 1000)) / 1000); const minutes = Math.floor(rest / (60 * 1000)); return `${minutes}'${zero(seconds)}'' remain.`; }

#2021-03-14 06:19:48
#2021-02-06 02:51:41
#2021-01-30 22:08:37