scrapbox-pomodoro-timer
Pomodoro Technique用のシンプルなタイマー
from /suto3/UserScript:ポモドーロテクニック
少し改造してある
fetchをなくした
残り時間を表示するようにした
動的に表示される
/villagepump/yosider.iconさんがWeb Notifications APIを使ったver.を作っていた
/programming-notes/scrapbox-pomodoro
/icons2/すばら.icontakker.icon
後でこれに書き換える
code: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();
メニューに時刻とタイマーの開始ボタンを表示する
時刻は一秒ごとに変化する
code: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: () => {},
});
}
時間が来たときの処理
code:script.js
function TimeUp() {
// タイマーをクリア
isRunning = false;
clearInterval(interval);
alert('🍅お時間です。');
}
残り時間を返す
code: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