diff --git a/apps/clkinfostopw/app.png b/apps/clkinfostopw/app.png new file mode 100644 index 000000000..fb1d74b5c Binary files /dev/null and b/apps/clkinfostopw/app.png differ diff --git a/apps/clkinfostopw/clkinfo.js b/apps/clkinfostopw/clkinfo.js new file mode 100644 index 000000000..c21d3e7b1 --- /dev/null +++ b/apps/clkinfostopw/clkinfo.js @@ -0,0 +1,44 @@ +(() => { + let durationOnPause = "---"; + let redrawInterval; + let startTime; + + const unqueueRedraw = () => { + if (redrawInterval) clearInterval(redrawInterval); + redrawInterval = undefined; + }; + + const queueRedraw = function() { + unqueueRedraw(); + redrawInterval = setInterval(() => this.emit('redraw'), 100); + }; + + const duration = () => ((Date.now() - startTime) / 1000).toFixed(1); + + return { + name: "timer", + items: [ + { + name: "stopw", + get: () => ({ + text: startTime + ? duration() + : durationOnPause, + img: atob("GBiBAAAAAAB+AAB+AAAAAAB+AAH/sAOB8AcA4A4YcAwYMBgYGBgYGBg8GBg8GBgYGBgAGAwAMA4AcAcA4AOBwAH/gAB+AAAAAAAAAA==") + }), + show: queueRedraw, + hide: unqueueRedraw, + run: function() { // tapped + if (startTime) { + durationOnPause = duration(); + startTime = undefined; + unqueueRedraw(); + } else { + queueRedraw.call(this); + startTime = Date.now(); + } + } + } + ] + }; +}) diff --git a/apps/clkinfostopw/metadata.json b/apps/clkinfostopw/metadata.json new file mode 100644 index 000000000..c27981810 --- /dev/null +++ b/apps/clkinfostopw/metadata.json @@ -0,0 +1,13 @@ +{ + "id": "clkinfostopw", + "name": "Stop Watch Clockinfo", + "version":"0.01", + "description": "A simple stopwatch, shown via clockinfo", + "icon": "app.png", + "type": "clkinfo", + "tags": "clkinfo,timer", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"stopw.clkinfo.js","url":"clkinfo.js"} + ] +}