BangleApps/apps/primetime/primetime.js

90 lines
1.8 KiB
JavaScript
Raw Normal View History

2022-10-09 20:01:24 +00:00
const h = g.getHeight();
const w = g.getWidth();
// creates a list of prime factors of n and outputs them as a string, if n is prime outputs "Prime Time!"
function primeFactors(n) {
const factors = [];
let divisor = 2;
while (n >= 2) {
if (n % divisor == 0) {
factors.push(divisor);
n = n / divisor;
} else {
divisor++;
}
}
if (factors.length === 1) {
return "Prime Time!";
}
else
return factors.toString();
}
// converts time HR:MIN to integer HRMIN e.g. 15:35 => 1535
function timeToInt(t) {
var arr = t.split(':');
var intTime = parseInt(arr[0])*100+parseInt(arr[1]);
return intTime;
}
function draw() {
var date = new Date();
var timeStr = require("locale").time(date,1);
var primeStr = primeFactors(timeToInt(timeStr));
g.reset();
g.setColor(0,0,0);
g.fillRect(Bangle.appRect);
g.setFont("6x8", w/30);
g.setFontAlign(0, 0);
g.setColor(100,100,100);
g.drawString(timeStr, w/2, h/2);
g.setFont("6x8", w/60);
2022-10-09 20:10:54 +00:00
g.drawString(primeStr, w/2, 3*h/4);
2022-10-09 20:01:24 +00:00
queueDraw();
}
// timeout used to update every minute
var drawTimeout;
// schedule a draw for the next minute
function queueDraw() {
if (drawTimeout) clearTimeout(drawTimeout);
drawTimeout = setTimeout(function() {
drawTimeout = undefined;
draw();
}, 60000 - (Date.now() % 60000));
}
// Stop updates when LCD is off, restart when on
Bangle.on('lcdPower',on=>{
if (on) {
draw(); // draw immediately, queue redraw
} else { // stop draw timer
if (drawTimeout) clearTimeout(drawTimeout);
drawTimeout = undefined;
}
});
g.clear();
// Show launcher when middle button pressed
// Bangle.setUI("clock");
// use clockupdown as it tests for issue #1249
Bangle.setUI("clockupdown", btn=> {
draw();
});
// Load widgets
Bangle.loadWidgets();
Bangle.drawWidgets();
draw();