BangleApps/apps/widdst/settings.js

183 lines
4.7 KiB
JavaScript

(function(back) {
var dows = require("date_utils").dows(0,1);
var months = require("date_utils").months(1);
var settings = Object.assign({
has_dst: false,
show_icon: true,
tz: 0,
dst_size: 1,
dst_start: {
dow_number: 4, // "1st", "2nd", "3rd", "4th", "last"
dow: 0, // "Sun", "Mon", ...
month: 2,
day_offset: 0,
at: 1
},
dst_end: {
dow_number: 4,
dow: 0,
month: 9,
day_offset: 0,
at: 2
}
}, require("Storage").readJSON("widdst.json", true) || {});
var dst_start_end = {
is_start: true,
day_offset: 0,
dow_number: 0,
dow: 0,
month: 0,
at: 0
};
function writeSettings() {
require('Storage').writeJSON("widdst.json", settings);
}
function writeSubMenuSettings() {
if (dst_start_end.is_start) {
settings.dst_start.day_offset = dst_start_end.day_offset;
settings.dst_start.dow_number = dst_start_end.dow_number;
settings.dst_start.dow = dst_start_end.dow;
settings.dst_start.month = dst_start_end.month;
settings.dst_start.at = dst_start_end.at;
} else {
settings.dst_end.day_offset = dst_start_end.day_offset;
settings.dst_end.dow_number = dst_start_end.dow_number;
settings.dst_end.dow = dst_start_end.dow;
settings.dst_end.month = dst_start_end.month;
settings.dst_end.at = dst_start_end.at;
}
writeSettings();
}
function hoursToString(h) {
return (h|0) + ':' + (((6*h)%6)|0) + (((60*h)%10)|0);
}
function getDSTStartEndMenu(start) {
dst_start_end.is_start = start;
if (start) {
dst_start_end.day_offset = settings.dst_start.day_offset;
dst_start_end.dow_number = settings.dst_start.dow_number;
dst_start_end.dow = settings.dst_start.dow;
dst_start_end.month = settings.dst_start.month;
dst_start_end.at = settings.dst_start.at;
} else {
dst_start_end.day_offset = settings.dst_end.day_offset;
dst_start_end.dow_number = settings.dst_end.dow_number;
dst_start_end.dow = settings.dst_end.dow;
dst_start_end.month = settings.dst_end.month;
dst_start_end.at = settings.dst_end.at;
}
return {
"": {
"Title": start ? /*LANG*/"DST Start" : /*LANG*/"DST End"
},
"< Back": () => E.showMenu(dstMenu),
/*LANG*/"The" : {
value: dst_start_end.dow_number,
format: v => [/*LANG*/"1st",/*LANG*/"2nd",/*LANG*/"3rd",/*LANG*/"4th",/*LANG*/"last"][v],
min: 0,
max: 4,
onchange: v => {
dst_start_end.dow_number = v;
writeSubMenuSettings();
}
},
" -" : {
value: dst_start_end.dow,
format: v => dows[v],
min:0,
max:6,
onchange: v => {
dst_start_end.dow = v;
writeSubMenuSettings();
}
},
/*LANG*/"of": {
value: dst_start_end.month,
format: v => months[v],
min: 0,
max: 11,
onchange: v => {
dst_start_end.month = v;
writeSubMenuSettings();
}
},
/*LANG*/"minus" : {
value: dst_start_end.day_offset,
format: v => v + ((v == 1) ? /*LANG*/" day" : /*LANG*/" days"),
min: 0,
max: 7,
onchange: v => {
dst_start_end.day_offset = v;
writeSubMenuSettings();
}
},
/*LANG*/"at": {
value: dst_start_end.at,
format: v => hoursToString(v),
min: 0,
max: 23,
// step: 0.05, // every 3 minutes - FOR DEVELOPMENT PURPOSES
onchange: v => {
dst_start_end.at = v;
writeSubMenuSettings();
}
}
}
}
var dstMenu = {
"": {
"Title": /*LANG*/"Daylight Saving"
},
"< Back": () => back(),
/*LANG*/"Enabled": {
value: !!settings.has_dst,
onchange: v => {
settings.has_dst = v;
writeSettings();
}
},
/*LANG*/"Icon": {
value: !!settings.show_icon,
onchange: v => {
settings.show_icon = v;
writeSettings();
}
},
/*LANG*/"Base TZ": {
value: settings.tz,
format: v => (v >= 0 ? '+' + hoursToString(v) : '-' + hoursToString(-v)),
onchange: v => {
settings.tz = v;
writeSettings();
},
min: -13,
max: 13,
step: 0.25
},
/*LANG*/"Change": {
value: settings.dst_size,
format: v => (v >= 0 ? '+' + hoursToString(v): '-' + hoursToString(-v)),
min: -1,
max: 1,
step: 0.5,
onchange: v=> {
settings.dst_size = v;
writeSettings();
}
},
/*LANG*/"DST Start": () => E.showMenu(getDSTStartEndMenu(true)),
/*LANG*/"DST End": () => E.showMenu(getDSTStartEndMenu(false))
};
E.showMenu(dstMenu);
});