mirror of https://github.com/espruino/BangleApps
84 lines
2.1 KiB
TypeScript
84 lines
2.1 KiB
TypeScript
(() => {
|
|
let durationOnPause = "---";
|
|
let redrawInterval: number | undefined;
|
|
let startTime: number | undefined;
|
|
let showMillis = true;
|
|
const milliTime = 60;
|
|
|
|
const unqueueRedraw = () => {
|
|
if (redrawInterval) clearInterval(redrawInterval);
|
|
redrawInterval = undefined;
|
|
};
|
|
|
|
const queueRedraw = function(this: ClockInfo.MenuItem) {
|
|
unqueueRedraw();
|
|
redrawInterval = setInterval(() => {
|
|
if (startTime) {
|
|
if (showMillis && Date.now() - startTime > milliTime * 1000) {
|
|
showMillis = false;
|
|
changeInterval(redrawInterval, 1000);
|
|
}
|
|
} else {
|
|
unqueueRedraw();
|
|
}
|
|
this.emit('redraw')
|
|
}, 100);
|
|
};
|
|
|
|
const pad2 = (s: number) => ('0' + s.toFixed(0)).slice(-2);
|
|
|
|
const duration = (start: number) => {
|
|
let seconds = (Date.now() - start) / 1000;
|
|
|
|
if (seconds < milliTime)
|
|
return seconds.toFixed(1);
|
|
|
|
let mins = seconds / 60;
|
|
seconds %= 60;
|
|
|
|
if (mins < 60)
|
|
return `${mins.toFixed(0)}:${pad2(seconds)}`;
|
|
|
|
let hours = mins / 60;
|
|
mins %= 60;
|
|
|
|
return `${hours.toFixed(0)}:${pad2(mins)}:${pad2(seconds)}`;
|
|
};
|
|
|
|
const img = () => atob("GBiBAAAAAAB+AAB+AAAAAAB+AAH/sAOB8AcA4A4YcAwYMBgYGBgYGBg8GBg8GBgYGBgAGAwAMA4AcAcA4AOBwAH/gAB+AAAAAAAAAA==");
|
|
|
|
return {
|
|
name: "timer",
|
|
img: img(),
|
|
items: [
|
|
{
|
|
name: "stopw",
|
|
get: () => ({
|
|
text: startTime
|
|
? duration(startTime)
|
|
: durationOnPause,
|
|
img: img(),
|
|
}),
|
|
show: function(this: ClockInfo.MenuItem) {
|
|
if(startTime){ // only queue if active
|
|
queueRedraw.call(this);
|
|
}else{
|
|
this.emit('redraw')
|
|
}
|
|
},
|
|
hide: unqueueRedraw,
|
|
run: function() { // tapped
|
|
if (startTime) {
|
|
durationOnPause = duration(startTime);
|
|
startTime = undefined; // this also unqueues the redraw
|
|
} else {
|
|
queueRedraw.call(this);
|
|
showMillis = true;
|
|
startTime = Date.now();
|
|
}
|
|
}
|
|
}
|
|
]
|
|
};
|
|
}) satisfies ClockInfoFunc
|