Apply prettier to js files
parent
daada58a3c
commit
98fe0eb459
|
|
@ -1,7 +1,8 @@
|
|||
# Terminal clock
|
||||
|
||||
A clock displayed as a terminal cli.
|
||||
It can display :
|
||||
A clock displayed as a terminal cli.
|
||||
It can display:
|
||||
|
||||
- time
|
||||
- date
|
||||
- altitude
|
||||
|
|
@ -9,7 +10,6 @@ It can display :
|
|||
- motion
|
||||
- steps
|
||||
|
||||
|
||||
"Power saving" setting control the HR and pressure (altitude) sensors.
|
||||
If "Off" they will always be on.
|
||||
If "On" the sensors will be turned on every "Power on interval" minutes for 45 secondes
|
||||
"Power saving" setting control the HR and pressure (altitude) sensors.
|
||||
If "Off" they will always be on.
|
||||
If "On" the sensors will be turned on every "Power on interval" minutes for 45 seconds
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
let font6x8At2Size = 18;
|
||||
let font6x8FirstTextSize = 4;
|
||||
let font6x8DefaultTextSize = 2;
|
||||
if (process.env.HWVERSION == 1){
|
||||
if (process.env.HWVERSION == 1) {
|
||||
paddingY = 3;
|
||||
font6x8At4Size = 48;
|
||||
font6x8At2Size = 27;
|
||||
|
|
@ -32,29 +32,32 @@
|
|||
this.unlock_precision = 1;
|
||||
if (this.HRMinConfidence === undefined) this.HRMinConfidence = 50;
|
||||
if (this.PowerOnInterval === undefined) this.PowerOnInterval = 15;
|
||||
if (this.powerSave===undefined) this.powerSave = this.powerSaving; // migrate old setting
|
||||
if (this.powerSave===undefined) this.powerSave = true;
|
||||
if (this.powerSave === undefined) this.powerSave = this.powerSaving; // migrate old setting
|
||||
if (this.powerSave === undefined) this.powerSave = true;
|
||||
|
||||
["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach(k => {
|
||||
if (this[k]===undefined){
|
||||
if(k == "L2") this[k] = "Date";
|
||||
else if(k == "L3") {
|
||||
["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach((k) => {
|
||||
if (this[k] === undefined) {
|
||||
if (k == "L2") this[k] = "Date";
|
||||
else if (k == "L3") {
|
||||
this[k] = "HR";
|
||||
this.showHRM = true;
|
||||
}else if(k == "L4") this[k] = "Motion";
|
||||
else if(k == "L5") this[k] = "Steps";
|
||||
else if(k == "L6") this[k] = ">";
|
||||
else this[k] = "Empty";
|
||||
}
|
||||
else if (this[k]==="HR") this.showHRM = true;
|
||||
else if (this[k]==="Alt") this.showAltitude = true && process.env.HWVERSION == 2;
|
||||
} else if (k == "L4") this[k] = "Motion";
|
||||
else if (k == "L5") this[k] = "Steps";
|
||||
else if (k == "L6") this[k] = ">";
|
||||
else this[k] = "Empty";
|
||||
} else if (this[k] === "HR") this.showHRM = true;
|
||||
else if (this[k] === "Alt")
|
||||
this.showAltitude = true && process.env.HWVERSION == 2;
|
||||
});
|
||||
|
||||
// set the services (HRM, pressure sensor, etc....)
|
||||
if(!this.powerSave){
|
||||
if (!this.powerSave) {
|
||||
turnOnServices();
|
||||
} else{
|
||||
this.turnOnInterval = setInterval(turnOnServices, this.PowerOnInterval*60000); // every PowerOnInterval min
|
||||
} else {
|
||||
this.turnOnInterval = setInterval(
|
||||
turnOnServices,
|
||||
this.PowerOnInterval * 60000,
|
||||
); // every PowerOnInterval min
|
||||
}
|
||||
// start the clock unlocked
|
||||
unlock();
|
||||
|
|
@ -67,102 +70,111 @@
|
|||
drawTime(date, curPos);
|
||||
curPos++;
|
||||
|
||||
["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach(line => {
|
||||
if (this[line]==='Date') drawDate(date, curPos);
|
||||
else if (this[line]==='HR') drawHRM(curPos);
|
||||
else if (this[line]==='Motion') drawMotion(curPos);
|
||||
else if (this[line]==='Alt') drawAltitude(curPos);
|
||||
else if (this[line]==='Steps') drawStepCount(curPos);
|
||||
else if (this[line]==='>') drawInput(curPos);
|
||||
["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach((line) => {
|
||||
if (this[line] === "Date") drawDate(date, this.isoDate, curPos);
|
||||
else if (this[line] === "HR") drawHRM(curPos);
|
||||
else if (this[line] === "Motion") drawMotion(curPos);
|
||||
else if (this[line] === "Alt") drawAltitude(curPos);
|
||||
else if (this[line] === "Steps") drawStepCount(curPos);
|
||||
else if (this[line] === ">") drawInput(curPos);
|
||||
curPos++;
|
||||
});
|
||||
},
|
||||
|
||||
remove: function() {
|
||||
if (this.turnOnInterval){
|
||||
remove: function () {
|
||||
if (this.turnOnInterval) {
|
||||
clearInterval(this.turnOnInterval);
|
||||
delete this.turnOnInterval;
|
||||
}
|
||||
if (this.turnOffServiceTimeout){
|
||||
clearTimeout(this.turnOffServiceTimeout)
|
||||
delete this.turnOffServiceTimeout
|
||||
if (this.turnOffServiceTimeout) {
|
||||
clearTimeout(this.turnOffServiceTimeout);
|
||||
delete this.turnOffServiceTimeout;
|
||||
}
|
||||
turnOffServices();
|
||||
if (this.onLock) Bangle.removeListener('lock', this.onLock);
|
||||
if (this.onHRM) Bangle.removeListener('HRM', this.onHRM);
|
||||
if (this.onPressure) Bangle.removeListener('pressure', this.onPressure);
|
||||
}
|
||||
|
||||
if (this.onLock) Bangle.removeListener("lock", this.onLock);
|
||||
if (this.onHRM) Bangle.removeListener("HRM", this.onHRM);
|
||||
if (this.onPressure) Bangle.removeListener("pressure", this.onPressure);
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
/* ----------------------------
|
||||
/* ----------------------------
|
||||
Draw related of specific lines
|
||||
-------------------------------- */
|
||||
|
||||
let drawLine = function(line, pos){
|
||||
if(pos == 1)
|
||||
let drawLine = function (line, pos) {
|
||||
if (pos == 1) {
|
||||
g.setFont("6x8", font6x8FirstTextSize);
|
||||
else
|
||||
} else {
|
||||
g.setFont("6x8", font6x8DefaultTextSize);
|
||||
}
|
||||
|
||||
let yPos = Bangle.appRect.y +
|
||||
paddingY * (pos - 1) +
|
||||
font6x8At4Size * Math.min(1, pos-1) +
|
||||
font6x8At2Size * Math.max(0, pos-2);
|
||||
let yPos =
|
||||
Bangle.appRect.y +
|
||||
paddingY * (pos - 1) +
|
||||
font6x8At4Size * Math.min(1, pos - 1) +
|
||||
font6x8At2Size * Math.max(0, pos - 2);
|
||||
g.drawString(line, 5, yPos, true);
|
||||
};
|
||||
|
||||
let drawTime = function(now, pos){
|
||||
let drawTime = function (now, pos) {
|
||||
let h = now.getHours();
|
||||
let m = now.getMinutes();
|
||||
let time = ">" + (""+h).substr(-2) + ":" + ("0"+m).substr(-2);
|
||||
let time = ">" + ("" + h).substr(-2) + ":" + ("0" + m).substr(-2);
|
||||
drawLine(time, pos);
|
||||
};
|
||||
|
||||
let drawDate = function(now, pos) {
|
||||
let drawDate = function (now, pos) {
|
||||
let date;
|
||||
if (clock.isoDate) {
|
||||
let year = now.getFullYear();
|
||||
let month = now.getMonth() + 1; // Months are 0-11
|
||||
let month = now.getMonth() + 1; // Months are 0-11
|
||||
let day = now.getDate();
|
||||
date = ">" + year + "-" + month + "-" + day;
|
||||
} else {
|
||||
let dow = locale.dow(now, 1);
|
||||
date = locale.date(now, 1).substr(0,6) + locale.date(now, 1).substr(-2);
|
||||
date = locale.date(now, 1).substr(0, 6) + locale.date(now, 1).substr(-2);
|
||||
date = ">" + dow + " " + date;
|
||||
}
|
||||
drawLine(date, pos);
|
||||
};
|
||||
|
||||
let drawInput = function(pos){
|
||||
let drawInput = function (pos) {
|
||||
drawLine(">", pos);
|
||||
};
|
||||
|
||||
let drawStepCount = function(pos){
|
||||
let drawStepCount = function (pos) {
|
||||
let health = Bangle.getHealthStatus("day");
|
||||
let steps_formated = ">Steps: " + health.steps;
|
||||
drawLine(steps_formated, pos);
|
||||
};
|
||||
|
||||
let drawHRM = function(pos){
|
||||
if(heartRate != 0)
|
||||
let drawHRM = function (pos) {
|
||||
if (heartRate != 0) {
|
||||
drawLine(">HR: " + parseInt(heartRate), pos);
|
||||
else
|
||||
} else {
|
||||
drawLine(
|
||||
">HR: " + parseInt(Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm)),
|
||||
pos);
|
||||
">HR: " +
|
||||
parseInt(
|
||||
Math.round(
|
||||
Bangle.getHealthStatus().bpm ||
|
||||
Bangle.getHealthStatus("last").bpm,
|
||||
),
|
||||
),
|
||||
pos,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
let drawAltitude = function(pos){
|
||||
if(altitude > 0)
|
||||
let drawAltitude = function (pos) {
|
||||
if (altitude > 0) {
|
||||
drawLine(">Alt: " + altitude.toFixed(1) + "m", pos);
|
||||
else
|
||||
} else {
|
||||
drawLine(">Alt: unknown", pos);
|
||||
}
|
||||
};
|
||||
|
||||
let drawMotion = function(pos){
|
||||
let health = Bangle.getHealthStatus('last');
|
||||
|
||||
let drawMotion = function (pos) {
|
||||
let health = Bangle.getHealthStatus("last");
|
||||
let steps_formated = ">Motion: " + parseInt(health.movement);
|
||||
drawLine(steps_formated, pos);
|
||||
};
|
||||
|
|
@ -171,72 +183,70 @@
|
|||
Services functions (HRM, pressure, etc...)
|
||||
-------------------------------------------------- */
|
||||
|
||||
let turnOnServices = function(){
|
||||
if(clock.showHRM){
|
||||
let turnOnServices = function () {
|
||||
if (clock.showHRM) {
|
||||
Bangle.setHRMPower(true, "terminalclock");
|
||||
}
|
||||
if(clock.showAltitude){
|
||||
if (clock.showAltitude) {
|
||||
Bangle.setBarometerPower(true, "terminalclock");
|
||||
}
|
||||
if(clock.powerSave){
|
||||
if(clock.turnOffServiceTimeout) clearTimeout(clock.turnOffServiceTimeout);
|
||||
if (clock.powerSave) {
|
||||
if (clock.turnOffServiceTimeout)
|
||||
clearTimeout(clock.turnOffServiceTimeout);
|
||||
clock.turnOffServiceTimeout = setTimeout(function () {
|
||||
turnOffServices();
|
||||
}, 45000);
|
||||
}
|
||||
};
|
||||
|
||||
let turnOffServices = function(){
|
||||
if(clock.showHRM){
|
||||
let turnOffServices = function () {
|
||||
if (clock.showHRM) {
|
||||
Bangle.setHRMPower(false, "terminalclock");
|
||||
}
|
||||
if(clock.showAltitude){
|
||||
if (clock.showAltitude) {
|
||||
Bangle.setBarometerPower(false, "terminalclock");
|
||||
}
|
||||
};
|
||||
|
||||
// set the lock and unlock actions
|
||||
clock.onLock = lock_event => {
|
||||
clock.onLock = (lock_event) => {
|
||||
if (lock_event) lock();
|
||||
else unlock();
|
||||
};
|
||||
Bangle.on("lock", clock.onLock);
|
||||
|
||||
clock.onHRM = hrmInfo => {
|
||||
if(hrmInfo.confidence >= clock.HRMinConfidence)
|
||||
heartRate = hrmInfo.bpm;
|
||||
clock.onHRM = (hrmInfo) => {
|
||||
if (hrmInfo.confidence >= clock.HRMinConfidence) heartRate = hrmInfo.bpm;
|
||||
};
|
||||
Bangle.on('HRM', clock.onHRM);
|
||||
Bangle.on("HRM", clock.onHRM);
|
||||
|
||||
const MEDIANLENGTH = 20; // technical
|
||||
let avr = [], median; // technical
|
||||
clock.onPressure = pressureInfo => {
|
||||
while (avr.length>MEDIANLENGTH) avr.pop();
|
||||
let avr = [],
|
||||
median; // technical
|
||||
clock.onPressure = (pressureInfo) => {
|
||||
while (avr.length > MEDIANLENGTH) avr.pop();
|
||||
avr.unshift(pressureInfo.altitude);
|
||||
median = avr.slice().sort();
|
||||
if (median.length>10) {
|
||||
let mid = median.length>>1;
|
||||
altitude = E.sum(median.slice(mid-4,mid+5)) / 9;
|
||||
}
|
||||
else
|
||||
altitude = pressureInfo.altitude;
|
||||
if (median.length > 10) {
|
||||
let mid = median.length >> 1;
|
||||
altitude = E.sum(median.slice(mid - 4, mid + 5)) / 9;
|
||||
} else altitude = pressureInfo.altitude;
|
||||
};
|
||||
Bangle.on('pressure', clock.onPressure);
|
||||
|
||||
Bangle.on("pressure", clock.onPressure);
|
||||
|
||||
/* -------------------------------------------------
|
||||
Clock related functions but not in the ClockFace module
|
||||
---------------------------------------------------- */
|
||||
|
||||
let unlock = function(){
|
||||
if(clock.powerSave){
|
||||
let unlock = function () {
|
||||
if (clock.powerSave) {
|
||||
turnOnServices();
|
||||
}
|
||||
clock.precision = clock.unlock_precision;
|
||||
clock.tick();
|
||||
};
|
||||
|
||||
let lock = function(){
|
||||
let lock = function () {
|
||||
clock.precision = clock.lock_precision;
|
||||
clock.tick();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,23 +1,27 @@
|
|||
(function(back) {
|
||||
(function (back) {
|
||||
var FILE = "terminalclock.json";
|
||||
// Load settings
|
||||
var settings = Object.assign({
|
||||
// TerminalClock specific
|
||||
isoDate: false,
|
||||
HRMinConfidence: 50,
|
||||
PowerOnInterval: 15,
|
||||
L2: 'Date',
|
||||
L3: 'HR',
|
||||
L4: 'Motion',
|
||||
L5: 'Steps',
|
||||
L6: '>',
|
||||
L7: 'Empty',
|
||||
L8: 'Empty',
|
||||
L9: 'Empty',
|
||||
}, require('Storage').readJSON(FILE, true) || {});
|
||||
var settings = Object.assign(
|
||||
{
|
||||
// TerminalClock specific
|
||||
isoDate: false,
|
||||
HRMinConfidence: 50,
|
||||
PowerOnInterval: 15,
|
||||
L2: "Date",
|
||||
L3: "HR",
|
||||
L4: "Motion",
|
||||
L5: "Steps",
|
||||
L6: ">",
|
||||
L7: "Empty",
|
||||
L8: "Empty",
|
||||
L9: "Empty",
|
||||
},
|
||||
require("Storage").readJSON(FILE, true) || {},
|
||||
);
|
||||
// ClockFace lib: migrate "don't load widgets" to "hide widgets"
|
||||
if (!("hideWidgets" in settings)) {
|
||||
if (("loadWidgets" in settings) && !settings.loadWidgets) settings.hideWidgets = 1;
|
||||
if ("loadWidgets" in settings && !settings.loadWidgets)
|
||||
settings.hideWidgets = 1;
|
||||
else settings.hideWidgets = 0;
|
||||
}
|
||||
delete settings.loadWidgets;
|
||||
|
|
@ -29,20 +33,21 @@
|
|||
delete settings.powerSaving;
|
||||
|
||||
function writeSettings() {
|
||||
require('Storage').writeJSON(FILE, settings);
|
||||
require("Storage").writeJSON(FILE, settings);
|
||||
}
|
||||
|
||||
if(process.env.HWVERSION == 2) {
|
||||
var lineType = ['Date', 'HR', 'Motion', 'Alt', 'Steps', '>', 'Empty'];
|
||||
} else{
|
||||
var lineType = ['Date', 'HR', 'Motion', 'Steps', '>', 'Empty'];
|
||||
if (process.env.HWVERSION == 2) {
|
||||
var lineType = ["Date", "HR", "Motion", "Alt", "Steps", ">", "Empty"];
|
||||
} else {
|
||||
var lineType = ["Date", "HR", "Motion", "Steps", ">", "Empty"];
|
||||
}
|
||||
function getLineChooser(lineID){
|
||||
function getLineChooser(lineID) {
|
||||
return {
|
||||
value: lineType.indexOf(settings[lineID]),
|
||||
min: 0, max: lineType.length-1,
|
||||
format: v => lineType[v],
|
||||
onchange: v => {
|
||||
min: 0,
|
||||
max: lineType.length - 1,
|
||||
format: (v) => lineType[v],
|
||||
onchange: (v) => {
|
||||
settings[lineID] = lineType[v];
|
||||
writeSettings();
|
||||
},
|
||||
|
|
@ -50,35 +55,38 @@
|
|||
}
|
||||
|
||||
var lineMenu = {
|
||||
'< Back': function() { E.showMenu(getMainMenu());},
|
||||
'Line 2': getLineChooser('L2'),
|
||||
'Line 3': getLineChooser('L3'),
|
||||
'Line 4': getLineChooser('L4'),
|
||||
'Line 5': getLineChooser('L5'),
|
||||
'Line 6': getLineChooser('L6'),
|
||||
'Line 7': getLineChooser('L7'),
|
||||
'Line 8': getLineChooser('L8'),
|
||||
'Line 9': getLineChooser('L9'),
|
||||
"< Back": function () {
|
||||
E.showMenu(getMainMenu());
|
||||
},
|
||||
"Line 2": getLineChooser("L2"),
|
||||
"Line 3": getLineChooser("L3"),
|
||||
"Line 4": getLineChooser("L4"),
|
||||
"Line 5": getLineChooser("L5"),
|
||||
"Line 6": getLineChooser("L6"),
|
||||
"Line 7": getLineChooser("L7"),
|
||||
"Line 8": getLineChooser("L8"),
|
||||
"Line 9": getLineChooser("L9"),
|
||||
};
|
||||
|
||||
function getMainMenu(){
|
||||
function getMainMenu() {
|
||||
var mainMenu = {
|
||||
"" : { "title" : "Terminal Clock" },
|
||||
"< Back" : () => back(),
|
||||
'HR confidence': {
|
||||
"": { title: "Terminal Clock" },
|
||||
"< Back": () => back(),
|
||||
"HR confidence": {
|
||||
value: settings.HRMinConfidence,
|
||||
min: 0, max: 100,
|
||||
onchange: v => {
|
||||
min: 0,
|
||||
max: 100,
|
||||
onchange: (v) => {
|
||||
settings.HRMinConfidence = v;
|
||||
writeSettings();
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
"ISO date": {
|
||||
value: !!settings.isoDate,
|
||||
onchange: v => {
|
||||
onchange: (v) => {
|
||||
settings.isoDate = v;
|
||||
writeSettings();
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
const save = (key, v) => {
|
||||
|
|
@ -89,21 +97,24 @@
|
|||
hideWidgets: settings.hideWidgets,
|
||||
powerSave: settings.powerSave,
|
||||
});
|
||||
if(settings.powerSave){
|
||||
mainMenu['Power on interval'] = {
|
||||
if (settings.powerSave) {
|
||||
mainMenu["Power on interval"] = {
|
||||
value: settings.PowerOnInterval,
|
||||
min: 3, max: 60,
|
||||
onchange: v => {
|
||||
min: 3,
|
||||
max: 60,
|
||||
onchange: (v) => {
|
||||
settings.PowerOnInterval = v;
|
||||
writeSettings();
|
||||
},
|
||||
format: x => x + "m"
|
||||
format: (x) => x + "m",
|
||||
};
|
||||
}
|
||||
|
||||
mainMenu['Lines'] = function() { E.showMenu(lineMenu);};
|
||||
mainMenu["Lines"] = function () {
|
||||
E.showMenu(lineMenu);
|
||||
};
|
||||
return mainMenu;
|
||||
}
|
||||
|
||||
E.showMenu(getMainMenu());
|
||||
})
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue