From ae74346bb1953f136a308f5fa1bf046a4b6471dc Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 29 Dec 2022 19:24:04 +0000 Subject: [PATCH] New clkinfo: stopw --- apps/clkinfostopw/app.png | Bin 0 -> 3801 bytes apps/clkinfostopw/clkinfo.js | 44 ++++++++++++++++++++++++++++++++ apps/clkinfostopw/metadata.json | 13 ++++++++++ 3 files changed, 57 insertions(+) create mode 100644 apps/clkinfostopw/app.png create mode 100644 apps/clkinfostopw/clkinfo.js create mode 100644 apps/clkinfostopw/metadata.json diff --git a/apps/clkinfostopw/app.png b/apps/clkinfostopw/app.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d74b5ca2ef9864f25836593e258883214cc10 GIT binary patch literal 3801 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 P00000NkvXXu0mjf_u)&5 literal 0 HcmV?d00001 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"} + ] +}