BangleApps/apps/medicalinfo/app.js

62 lines
1.9 KiB
JavaScript

const medicalinfo = require('medicalinfo').load();
// const medicalinfo = {
// bloodType: "O+",
// height: "166cm",
// weight: "73kg"
// };
function hasAlert(info) {
return (Array.isArray(info.medicalAlert)) && (info.medicalAlert[0]);
}
// No space for widgets!
// TODO: no padlock widget visible so prevent screen locking?
g.clear();
const bodyFont = g.getFonts().includes("12x20") ? "12x20" : "6x8:2";
g.setFont(bodyFont);
const title = hasAlert(medicalinfo) ? "MEDICAL ALERT" : "Medical Information";
var lines = [];
lines = g.wrapString(title, g.getWidth() - 10);
var titleCnt = lines.length;
if (titleCnt) lines.push(""); // add blank line after title
if (hasAlert(medicalinfo)) {
medicalinfo.medicalAlert.forEach(function (details) {
lines = lines.concat(g.wrapString(details, g.getWidth() - 10));
});
lines.push(""); // add blank line after medical alert
}
if (medicalinfo.bloodType) {
lines = lines.concat(g.wrapString("Blood group: " + medicalinfo.bloodType, g.getWidth() - 10));
}
if (medicalinfo.height) {
lines = lines.concat(g.wrapString("Height: " + medicalinfo.height, g.getWidth() - 10));
}
if (medicalinfo.weight) {
lines = lines.concat(g.wrapString("Weight: " + medicalinfo.weight, g.getWidth() - 10));
}
lines.push("");
// TODO: display instructions for updating medical info if there is none!
E.showScroller({
h: g.getFontHeight(), // height of each menu item in pixels
c: lines.length, // number of menu items
// a function to draw a menu item
draw: function (idx, r) {
// FIXME: in 2v13 onwards, clearRect(r) will work fine. There's a bug in 2v12
g.setBgColor(idx < titleCnt ? g.theme.bg2 : g.theme.bg).
setColor(idx < titleCnt ? g.theme.fg2 : g.theme.fg).
clearRect(r.x, r.y, r.x + r.w, r.y + r.h);
g.setFont(bodyFont).drawString(lines[idx], r.x, r.y);
}
});
// Show launcher when button pressed
setWatch(() => load(), process.env.HWVERSION === 2 ? BTN : BTN3, { repeat: false, edge: "falling" });