commit
f0c9f0774b
13
apps.json
13
apps.json
|
|
@ -3598,5 +3598,18 @@
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"menusmall.boot.js","url":"boot.js"}
|
{"name":"menusmall.boot.js","url":"boot.js"}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{ "id": "ffcniftya",
|
||||||
|
"name": "Nifty-A Clock",
|
||||||
|
"icon": "app.png",
|
||||||
|
"version":"0.01",
|
||||||
|
"description": "A nifty clock with time and date",
|
||||||
|
"tags":"clock,b2",
|
||||||
|
"type":"clock",
|
||||||
|
"allow_emulator":true,
|
||||||
|
"storage": [
|
||||||
|
{"name":"ffcniftya.app.js","url":"app.js"},
|
||||||
|
{"name":"ffcniftya.img","url":"app-icon.js","evaluate":true}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
0.01: New Clock Nifty A
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("mEwwkEIf4A5gX/+AGEn//mIWLgP/C4gGCAAMgC5UvC4sDC4YICkIhBgMQiEBE4Uxn4XDj//iEAn/yA4ICBgUikEikYXBBAIXEn/xJYURAYMygERkQHBiYLBKYIXF+AVDC4czgUSmIXBCQgED+ZeBR4YXBLYICDC5CPGC4IAIC40zmaPDC4MSLQQXK+ayCR4QXCiRoEC44ECh4bCC4MTiTDBC6ZHOC5B3NLYcvC4kBgL5BAAUikT+BfIIrB/8ykf/eYQXBkUTI4cBW4YQCgQGDmAXDkJfEC46GBAoJKCR4geCAAMRAAZRDAoIODO4UBPRIAJR5QXWgKNCTApNDC5Mv/6/DAwR3GAAyHCC4anJIo3/+bvEa4Uia4oXHkEvC4cvIgUf+YXKHYIvEAgcPC5QSGC5UBSwYXJLYQXFkUhgABBC5Ef/4mBl4XEmETmIXKgaXBmYCBC4cTkMxiQXJS4IACL4p3MgESCwJHFR5oxCiB3FkERC5cSToQXFmUyiAZFR48Bn7zCAQMjkfykQkBN4n/XgKPBAAQgCUQIfBUwYXHFgIGCdI4XDmYADmIIEkAWJAH4A4A=="))
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
const locale = require("locale");
|
||||||
|
const is12Hour = (require("Storage").readJSON("setting.json", 1) || {})["12hour"];
|
||||||
|
|
||||||
|
/* Clock *********************************************/
|
||||||
|
const scale = g.getWidth() / 176;
|
||||||
|
|
||||||
|
const widget = 24;
|
||||||
|
|
||||||
|
const viewport = {
|
||||||
|
width: g.getWidth(),
|
||||||
|
height: g.getHeight(),
|
||||||
|
}
|
||||||
|
|
||||||
|
const center = {
|
||||||
|
x: viewport.width / 2,
|
||||||
|
y: Math.round(((viewport.height - widget) / 2) + widget),
|
||||||
|
}
|
||||||
|
|
||||||
|
function d02(value) {
|
||||||
|
return ('0' + value).substr(-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
g.reset();
|
||||||
|
g.clearRect(0, widget, viewport.width, viewport.height);
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
const hour = d02(now.getHours() - (is12Hour && now.getHours() > 12 ? 12 : 0));
|
||||||
|
const minutes = d02(now.getMinutes());
|
||||||
|
const day = d02(now.getDay());
|
||||||
|
const month = d02(now.getMonth() + 1);
|
||||||
|
const year = now.getFullYear();
|
||||||
|
|
||||||
|
const month2 = locale.month(now, 3);
|
||||||
|
const day2 = locale.dow(now, 3);
|
||||||
|
|
||||||
|
g.setFontAlign(1, 0).setFont("Vector", 90 * scale);
|
||||||
|
g.drawString(hour, center.x + 32 * scale, center.y - 31 * scale);
|
||||||
|
g.drawString(minutes, center.x + 32 * scale, center.y + 46 * scale);
|
||||||
|
|
||||||
|
g.fillRect(center.x + 30 * scale, center.y - 72 * scale, center.x + 32 * scale, center.y + 74 * scale);
|
||||||
|
|
||||||
|
g.setFontAlign(-1, 0).setFont("Vector", 16 * scale);
|
||||||
|
g.drawString(year, center.x + 40 * scale, center.y - 62 * scale);
|
||||||
|
g.drawString(month, center.x + 40 * scale, center.y - 44 * scale);
|
||||||
|
g.drawString(day, center.x + 40 * scale, center.y - 26 * scale);
|
||||||
|
g.drawString(month2, center.x + 40 * scale, center.y + 48 * scale);
|
||||||
|
g.drawString(day2, center.x + 40 * scale, center.y + 66 * scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Minute Ticker *************************************/
|
||||||
|
|
||||||
|
let tickTimer;
|
||||||
|
|
||||||
|
function clearTickTimer() {
|
||||||
|
if (tickTimer) {
|
||||||
|
clearTimeout(tickTimer);
|
||||||
|
tickTimer = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function queueNextTick() {
|
||||||
|
clearTickTimer();
|
||||||
|
tickTimer = setTimeout(tick, 60000 - (Date.now() % 60000));
|
||||||
|
// tickTimer = setTimeout(tick, 3000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function tick() {
|
||||||
|
draw();
|
||||||
|
queueNextTick();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Init **********************************************/
|
||||||
|
|
||||||
|
// Clear the screen once, at startup
|
||||||
|
g.clear();
|
||||||
|
// Start ticking
|
||||||
|
tick();
|
||||||
|
|
||||||
|
// Stop updates when LCD is off, restart when on
|
||||||
|
Bangle.on('lcdPower', (on) => {
|
||||||
|
if (on) {
|
||||||
|
tick(); // Start ticking
|
||||||
|
} else {
|
||||||
|
clearTickTimer(); // stop ticking
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Load widgets
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
|
||||||
|
// Show launcher when middle button pressed
|
||||||
|
Bangle.setUI("clock");
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.1 KiB |
Loading…
Reference in New Issue