scrapbox-pomodoro-timer
少し改造してある
fetchをなくした
残り時間を表示するようにした
動的に表示される
/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',
});
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.;
}