mirror of https://github.com/espruino/BangleApps
dev clock (#13)
parent
f42d5ee570
commit
8aabcf28e8
13
apps.json
13
apps.json
|
@ -508,6 +508,19 @@
|
||||||
{"name":"sclock.img","url":"clock-simple-icon.js","evaluate":true}
|
{"name":"sclock.img","url":"clock-simple-icon.js","evaluate":true}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{ "id": "dclock",
|
||||||
|
"name": "Dev Clock",
|
||||||
|
"icon": "clock-dev.png",
|
||||||
|
"version":"0.08",
|
||||||
|
"description": "A Digital Clock including timestamp (tst), beats(@), days in current month (dm) and days since new moon (l)",
|
||||||
|
"tags": "clock",
|
||||||
|
"type":"clock",
|
||||||
|
"allow_emulator":true,
|
||||||
|
"storage": [
|
||||||
|
{"name":"dclock.app.js","url":"clock-dev.js"},
|
||||||
|
{"name":"dclock.img","url":"clock-dev-icon.js","evaluate":true}
|
||||||
|
]
|
||||||
|
},
|
||||||
{ "id": "gesture",
|
{ "id": "gesture",
|
||||||
"name": "Gesture Test",
|
"name": "Gesture Test",
|
||||||
"icon": "gesture.png",
|
"icon": "gesture.png",
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
0.01: branched from simple clock and added seconds
|
||||||
|
0.02: add timestamp (tst)
|
||||||
|
0.03: fix timestamp round to whole number
|
||||||
|
0.04: add iso datetime and move day of the week (d) / month names (m)
|
||||||
|
0.05: add beats (@)
|
||||||
|
0.06: tidy up
|
||||||
|
0.07: add days in current month (md) and days since new moon (l)
|
||||||
|
0.08: update icon
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("mEwwkEIf4A5/8wgf/AwUB/8gh/zA4QMCl/xA4cAichgIaBiEDgMgmECDQMAkMA+EgiYvDkQJBkcQgMQDwMggUiiECG4MikEBmQWCgURiEREQIXBCIMxkIIBAoMSiQ4BGoIABKgPykRSBI4JfC+c/iARBl8zmBfEAAUvIgIAUkbAtgalB+ADDBIKSBHgUgmYJCAAa6BmCoBAYMiBIMRC4UQmEAAoQvFmUDAYUSmcxWIKMBEQKrBOw0yh8wmcyj4nBIYQDB+cwBAQA/ABUxgUDkBqBgchkMiiUikMRgSOBkR3BkEhC4MgiQHBiADBC4UQAYMRiUxkECAAITBC4MSiUQF4MTiQTBBAIDBkcCiMxkUTAYIvCAH4A/AH4AKiIPPgMxiESgUQgECgMBdAMiiUgC48ikUBiEBiIXDGQURiIbBF48RkAvCEwIvCkERgQMBRHpDBOoRhBNoJOBJIkiKYMjgcTOoMhLQMQmMDDIMjQQInEC4MhiUSkQHCC4MAkAXCiUjiZ5UiR5jLwLaBAQJ1BAgIAMCgMxMwMgkciAoMjC5pqBRwPxCoMiiUyGBsgiBBBiESVAKzBf+YACA=="))
|
|
@ -0,0 +1,111 @@
|
||||||
|
/* jshint esversion: 6 */
|
||||||
|
const timeFontSize = 4;
|
||||||
|
const dateFontSize = 3;
|
||||||
|
const smallFontSize = 2;
|
||||||
|
const font = "6x8";
|
||||||
|
|
||||||
|
const xyCenter = g.getWidth() / 2;
|
||||||
|
const yposTime = 50;
|
||||||
|
const yposDate = 85;
|
||||||
|
const yposTst = 115;
|
||||||
|
const yposDml = 170;
|
||||||
|
const yposDayMonth = 195;
|
||||||
|
const yposGMT = 220;
|
||||||
|
|
||||||
|
// Check settings for what type our clock should be
|
||||||
|
var is12Hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"];
|
||||||
|
|
||||||
|
function getUTCTime(d) {
|
||||||
|
return d.toUTCString().split(' ')[4].split(':').map(function(d){return Number(d)});
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawSimpleClock() {
|
||||||
|
// get date
|
||||||
|
var d = new Date();
|
||||||
|
var da = d.toString().split(" ");
|
||||||
|
var dutc = getUTCTime(d);
|
||||||
|
|
||||||
|
g.reset(); // default draw styles
|
||||||
|
// drawSting centered
|
||||||
|
g.setFontAlign(0, 0);
|
||||||
|
|
||||||
|
// draw time
|
||||||
|
var time = da[4].split(":");
|
||||||
|
var hours = time[0],
|
||||||
|
minutes = time[1],
|
||||||
|
seconds = time[2];
|
||||||
|
|
||||||
|
var meridian = "";
|
||||||
|
if (is12Hour) {
|
||||||
|
hours = parseInt(hours,10);
|
||||||
|
meridian = "AM";
|
||||||
|
if (hours == 0) {
|
||||||
|
hours = 12;
|
||||||
|
meridian = "AM";
|
||||||
|
} else if (hours >= 12) {
|
||||||
|
meridian = "PM";
|
||||||
|
if (hours>12) hours -= 12;
|
||||||
|
}
|
||||||
|
hours = (" "+hours).substr(-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Time
|
||||||
|
g.setFont(font, timeFontSize);
|
||||||
|
g.drawString(`${hours}:${minutes}:${seconds}`, xyCenter, yposTime, true);
|
||||||
|
g.setFont(font, smallFontSize);
|
||||||
|
g.drawString(meridian, xyCenter + 102, yposTime + 10, true);
|
||||||
|
|
||||||
|
// Date String
|
||||||
|
g.setFont(font, dateFontSize);
|
||||||
|
g.drawString(`${d.getFullYear()}-${d.getMonth()+1}-${d.getDate()}`, xyCenter, yposDate, true);
|
||||||
|
|
||||||
|
// Timestamp
|
||||||
|
var tst = Math.round(d.getTime());
|
||||||
|
g.setFont(font, smallFontSize);
|
||||||
|
g.drawString(`tst:${tst}`, xyCenter, yposTst, true);
|
||||||
|
|
||||||
|
//Days in month
|
||||||
|
var dom = new Date(d.getFullYear(), d.getMonth()+1, 0).getDate();
|
||||||
|
|
||||||
|
//Days since full moon
|
||||||
|
var knownnew = new Date(2020,02,24,09,28,0);
|
||||||
|
|
||||||
|
// Get millisecond difference and divide down to cycles
|
||||||
|
var cycles = (d.getTime()-knownnew.getTime())/1000/60/60/24/29.53;
|
||||||
|
|
||||||
|
// Multiply decimal component back into days since new moon
|
||||||
|
var sincenew = (cycles % 1)*29.53;
|
||||||
|
|
||||||
|
// Draw days in month and sime since new moon
|
||||||
|
g.setFont(font, smallFontSize);
|
||||||
|
g.drawString(`md:${dom} l:${sincenew.toFixed(2)}`, xyCenter, yposDml, true);
|
||||||
|
|
||||||
|
// draw Month name, Day of the week and beats
|
||||||
|
var beats = Math.floor((((dutc[0] + 1) % 24) + dutc[1] / 60 + dutc[2] / 3600) * 1000 / 24);
|
||||||
|
g.setFont(font, smallFontSize);
|
||||||
|
g.drawString(`m:${da[1]} d:${da[0]} @${beats}`, xyCenter, yposDayMonth, true);
|
||||||
|
|
||||||
|
// draw gmt
|
||||||
|
var gmt = da[5];
|
||||||
|
g.setFont(font, smallFontSize);
|
||||||
|
g.drawString(gmt, xyCenter, yposGMT, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle switch display on by pressing BTN1
|
||||||
|
Bangle.on('lcdPower', function(on) {
|
||||||
|
if (on) drawSimpleClock();
|
||||||
|
});
|
||||||
|
|
||||||
|
// clean app screen
|
||||||
|
g.clear();
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
|
||||||
|
// refesh every 100 milliseconds
|
||||||
|
setInterval(drawSimpleClock, 100);
|
||||||
|
|
||||||
|
// draw now
|
||||||
|
drawSimpleClock();
|
||||||
|
|
||||||
|
// Show launcher when middle button pressed
|
||||||
|
setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"});
|
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
Loading…
Reference in New Issue