BangleApps/apps/myprofile/settings.js

151 lines
3.9 KiB
JavaScript

(function(back) {
const FILE = "myprofile.json";
const myprofile = Object.assign({
minHrm: 60,
maxHrm: 200,
strideLength: 0, // 0 = not set
birthday: '1970-01-01',
height: 0, // 0 = not set
weight: 0, // 0 = not set
}, require('Storage').readJSON(FILE, true) || {});
function writeProfile() {
require('Storage').writeJSON(FILE, myprofile);
}
const ageMenu = () => {
const date = new Date(myprofile.birthday);
E.showMenu({
"" : { "title" : /*LANG*/"Birthday" },
"< Back" : () => {
if (date != new Date(myprofile.birthday)) {
// Birthday changed
if (date > new Date()) {
E.showPrompt(/*LANG*/"Birthday must not be in future!", {
buttons : {"Ok":true},
}).then(() => ageMenu());
} else {
const age = (new Date()).getFullYear() - date.getFullYear();
const newMaxHRM = 220-age;
E.showPrompt(/*LANG*/`Set HR max to ${newMaxHRM} calculated from age?`).then(function(v) {
myprofile.birthday = date.getFullYear() + "-" + (date.getMonth() + 1).toString().padStart(2, '0') + "-" + date.getDate().toString().padStart(2, '0');
if (v) {
myprofile.maxHrm = newMaxHRM;
}
writeProfile();
mainMenu();
});
}
} else {
mainMenu();
}
},
/*LANG*/"Day": {
value: date ? date.getDate() : null,
min: 1,
max: 31,
wrap: true,
onchange: v => {
date.setDate(v);
}
},
/*LANG*/"Month": {
value: date ? date.getMonth() + 1 : null,
format: v => require("date_utils").month(v),
onchange: v => {
date.setMonth((v+11)%12);
}
},
/*LANG*/"Year": {
value: date ? date.getFullYear() : null,
min: 1900,
max: (new Date()).getFullYear(),
onchange: v => {
date.setFullYear(v);
}
},
});
};
const mainMenu = () => {
E.showMenu({
"" : { "title" : /*LANG*/"My Profile" },
"< Back" : () => back(),
/*LANG*/"Birthday" : () => ageMenu(),
/*LANG*/'Height': {
value: myprofile.height,
min: 0, max: 300,
step:0.01,
format: v => v ? require("locale").distance(v, 2) : '-',
onchange: v => {
if (v !== myprofile.height) {
// height changed
myprofile.height = v;
setTimeout(() => {
const newStrideLength = myprofile.height * 0.414;
E.showPrompt(/*LANG*/`Set Stride length to ${require("locale").distance(newStrideLength, 2)} calculated from height?`).then(function(v) {
if (v) {
myprofile.strideLength = newStrideLength;
}
writeProfile();
mainMenu();
});
}, 1);
}
}
},
/*LANG*/"Weight": {
value: myprofile.weight,
min:0,
step:1,
format: v => v ? v + "kg" : '-',
onchange: v => {
myprofile.weight=v;
writeProfile();
},
},
/*LANG*/'HR max': {
format: v => /*LANG*/`${v} BPM`,
value: myprofile.maxHrm,
min: 30, max: 220,
onchange: v => {
myprofile.maxHrm = v;
writeProfile();
}
},
/*LANG*/'HR min': {
format: v => /*LANG*/`${v} BPM`,
value: myprofile.minHrm,
min: 30, max: 220,
onchange: v => {
myprofile.minHrm = v;
writeProfile();
}
},
/*LANG*/"Stride length": {
value: myprofile.strideLength,
min:0.00,
step:0.01,
format: v => v ? require("locale").distance(v, 2) : '-',
onchange: v => {
myprofile.strideLength=v;
writeProfile();
},
},
});
};
mainMenu();
})