smaller icon; properly scoped app; testing on hw
parent
88e0322e97
commit
3d84679ff5
|
|
@ -17,3 +17,4 @@ inspired by [This FitBit face](https://github.com/Sharkgrammer/clockface.json)
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|

|
||||||
|
|
@ -1 +1 @@
|
||||||
require("heatshrink").decompress(atob("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"))
|
require("heatshrink").decompress(atob("mEwwcCBhEcuPHAQsDwE48AQDnEDx048YCEDQ/AEZAxEnADCEZAKBg5HQCIxiJuARPAEZHBgEBwQGBwE04VNmBHHXYXDhlAg0YsIbBEY8AZQmDhBHcFwcg4AOE4YpCI4swI4NgAQUAAQRHDg0IkAdDkGSAoRBNiBZWjgDCI4UBLAqPHKQMgCJQWFQIIROI6BzD4DXBw0YI5EAhEhwwIBoEwdQwAEWYIDBEYJIYa4REBSQKBBI5kJkmCgECpkwQIprEgcMmOAEZCPVJQYANhwRQaiIjRABqPCgLPEkilBNYxoCmHDa4L+BDAqzFgUIkGCjEgHhwxGAA4uEGYxHImPAahBHDgxEByEAAIIAqI4T+DABXgEaICEADoA="))
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
var SunCalc = require("suncalc"); // from modules folder
|
{
|
||||||
|
const SunCalc = require("suncalc"); // from modules folder
|
||||||
const storage = require('Storage');
|
const storage = require('Storage');
|
||||||
const widget_utils = require('widget_utils');
|
const widget_utils = require('widget_utils');
|
||||||
const global_settings = storage.readJSON("setting.json", true) || {};
|
const global_settings = storage.readJSON("setting.json", true) || {};
|
||||||
|
|
@ -42,14 +43,14 @@ const maxLines = Math.floor(usableHeight / lineHeight);
|
||||||
var numWidth = 0;
|
var numWidth = 0;
|
||||||
|
|
||||||
// requires the myLocation app
|
// requires the myLocation app
|
||||||
function loadLocation() {
|
let loadLocation = function() {
|
||||||
location = require("Storage").readJSON(LOCATION_FILE, 1) || {};
|
location = require("Storage").readJSON(LOCATION_FILE, 1) || {};
|
||||||
location.lat = location.lat || 0;
|
location.lat = location.lat || 0;
|
||||||
location.lon = location.lon || 0;
|
location.lon = location.lon || 0;
|
||||||
location.location = location.location || null;
|
location.location = location.location || null;
|
||||||
}
|
};
|
||||||
|
|
||||||
function getHr(h) {
|
let getHr = function(h) {
|
||||||
var amPm = "";
|
var amPm = "";
|
||||||
if (settings.hr_12) {
|
if (settings.hr_12) {
|
||||||
amPm = h < 12 ? "AM" : "PM";
|
amPm = h < 12 ? "AM" : "PM";
|
||||||
|
|
@ -57,17 +58,17 @@ function getHr(h) {
|
||||||
if (h == 0) h = 12;
|
if (h == 0) h = 12;
|
||||||
}
|
}
|
||||||
return [h, amPm];
|
return [h, amPm];
|
||||||
}
|
};
|
||||||
|
|
||||||
function extractTime(d) {
|
let extractTime = function(d) {
|
||||||
const out = getHr(d.getHours());
|
const out = getHr(d.getHours());
|
||||||
const h = out[0];
|
const h = out[0];
|
||||||
const amPm = out[1];
|
const amPm = out[1];
|
||||||
const m = d.getMinutes();
|
const m = d.getMinutes();
|
||||||
return `${h}:${("0"+m).substr(-2)}${amPm}`;
|
return `${h}:${("0"+m).substr(-2)}${amPm}`;
|
||||||
}
|
};
|
||||||
|
|
||||||
function extractDate(d) {
|
let extractDate = function(d) {
|
||||||
const weekdays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
const weekdays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
||||||
const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
||||||
|
|
@ -78,9 +79,9 @@ function extractDate(d) {
|
||||||
const day = d.getDate();
|
const day = d.getDate();
|
||||||
|
|
||||||
return `${weekday} ${month} ${day}`;
|
return `${weekday} ${month} ${day}`;
|
||||||
}
|
};
|
||||||
|
|
||||||
function getSteps() {
|
let getSteps = function() {
|
||||||
try {
|
try {
|
||||||
return Bangle.getHealthStatus("day").steps;
|
return Bangle.getHealthStatus("day").steps;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
@ -89,9 +90,9 @@ function getSteps() {
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function getVal(now, loc) {
|
let getVal = function(now, loc) {
|
||||||
const vals = {};
|
const vals = {};
|
||||||
const currentDateStr = extractDate(now);
|
const currentDateStr = extractDate(now);
|
||||||
if (loc.location) {
|
if (loc.location) {
|
||||||
|
|
@ -107,10 +108,9 @@ function getVal(now, loc) {
|
||||||
vals.batt_pct = E.getBattery();
|
vals.batt_pct = E.getBattery();
|
||||||
vals.steps = getSteps();
|
vals.steps = getSteps();
|
||||||
return vals;
|
return vals;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
let loadJson = function() {
|
||||||
function loadJson() {
|
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
vals = getVal(now, location);
|
vals = getVal(now, location);
|
||||||
//vals.steps = null; // For testing; uncomment to see the steps not appear
|
//vals.steps = null; // For testing; uncomment to see the steps not appear
|
||||||
|
|
@ -142,9 +142,9 @@ function loadJson() {
|
||||||
|
|
||||||
jsonText = JSON.stringify(raw, null, 2); // just stringify the object
|
jsonText = JSON.stringify(raw, null, 2); // just stringify the object
|
||||||
lines = jsonText.split("\n");
|
lines = jsonText.split("\n");
|
||||||
}
|
};
|
||||||
|
|
||||||
function draw() {
|
let draw = function() {
|
||||||
g.clear();
|
g.clear();
|
||||||
g.setFontAlign(-1, -1);
|
g.setFontAlign(-1, -1);
|
||||||
g.setFont("Vector", 10);
|
g.setFont("Vector", 10);
|
||||||
|
|
@ -169,9 +169,9 @@ function draw() {
|
||||||
}
|
}
|
||||||
|
|
||||||
redraw();
|
redraw();
|
||||||
}
|
};
|
||||||
|
|
||||||
function redraw() {
|
let redraw = function() {
|
||||||
for (let i = 0; i < maxLines; i++) {
|
for (let i = 0; i < maxLines; i++) {
|
||||||
const lineIndex = i;
|
const lineIndex = i;
|
||||||
const line = lines[lineIndex];
|
const line = lines[lineIndex];
|
||||||
|
|
@ -217,19 +217,18 @@ function redraw() {
|
||||||
g.drawString(line, numWidth, y);
|
g.drawString(line, numWidth, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Bangle.drawWidgets();
|
};
|
||||||
}
|
|
||||||
|
|
||||||
function clearVals() {
|
let clearVals = function() {
|
||||||
g.setFont("Vector", fontSize);
|
g.setFont("Vector", fontSize);
|
||||||
g.setFontAlign(-1, -1);
|
g.setFontAlign(-1, -1);
|
||||||
valuePositions.forEach(pos => {
|
valuePositions.forEach(pos => {
|
||||||
g.setColor(clrs.bg);
|
g.setColor(clrs.bg);
|
||||||
g.fillRect(pos.x, pos.y, w, pos.y + lineHeight);
|
g.fillRect(pos.x, pos.y, w, pos.y + lineHeight);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
function redrawValues() {
|
let redrawValues = function() {
|
||||||
loadJson();
|
loadJson();
|
||||||
clearVals();
|
clearVals();
|
||||||
redraw();
|
redraw();
|
||||||
|
|
@ -238,12 +237,12 @@ function redrawValues() {
|
||||||
drawTimeout = undefined;
|
drawTimeout = undefined;
|
||||||
redrawValues();
|
redrawValues();
|
||||||
}, 60000 - (Date.now() % 60000));
|
}, 60000 - (Date.now() % 60000));
|
||||||
}
|
};
|
||||||
|
|
||||||
Bangle.on('touch', (zone, e) => {
|
Bangle.on('touch', (zone, e) => {
|
||||||
if (e.x >= (buttonY - buttonHeight) && e.x <= (buttonX + buttonHeight) &&
|
if (e.x >= (buttonY - buttonHeight) && e.x <= (buttonX + buttonHeight) &&
|
||||||
(e.y >= (buttonY - buttonHeight) && e.y <= (buttonY + buttonHeight))) {
|
(e.y >= (buttonY - buttonHeight) && e.y <= (buttonY + buttonHeight))) {
|
||||||
load(); // Exit app
|
Bangle.showLauncher(); // Exit app
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -253,16 +252,9 @@ Bangle.on('backlight', function(on) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Bangle.setUI({
|
Bangle.setUI("clock");
|
||||||
mode: "clock",
|
|
||||||
remove: function() {
|
|
||||||
if (drawTimeout) clearTimeout(drawTimeout);
|
|
||||||
drawTimeout = undefined;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
loadLocation();
|
loadLocation();
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
widget_utils.hide();
|
widget_utils.hide();
|
||||||
draw();
|
draw();
|
||||||
setTimeout(Bangle.drawWidgets, 0);
|
}
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 2.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
|
|
@ -1,19 +1,14 @@
|
||||||
{ "id": "jsonclock",
|
{ "id": "jsonclock",
|
||||||
"name": "jsonclock",
|
"name": "JsonClock",
|
||||||
"version": "0.01",
|
"version": "0.01",
|
||||||
"dependencies": {"mylocation":"app"},
|
|
||||||
"description": "JSON view of the time, date, steps, battery, and sunrise and sunset times",
|
"description": "JSON view of the time, date, steps, battery, and sunrise and sunset times",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
|
"screenshots": [{"url":"app.png"}],
|
||||||
"type": "clock",
|
"type": "clock",
|
||||||
"tags": "clock",
|
"tags": "clock",
|
||||||
"supports" : ["BANGLEJS2"],
|
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||||
"screenshots": [{"url":"app.png"}],
|
|
||||||
"readme": "README.md",
|
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"jsonclock.app.js","url":"app.js"},
|
{"name":"jsonclock.app.js","url":"app.js"},
|
||||||
{"name":"jsonclock.img","url":"app-icon.js","evaluate":true},
|
{"name":"jsonclock.img","url":"app-icon.js","evaluate":true}
|
||||||
{"name":"jsonclock.settings.js","url":"settings.js"}
|
]
|
||||||
],
|
|
||||||
"data": [{"name":"jsonclock.json"}],
|
|
||||||
"sortorder": -9
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue