mirror of https://github.com/espruino/BangleApps
148 lines
3.9 KiB
JavaScript
148 lines
3.9 KiB
JavaScript
(function (back) {
|
|
var FILE = "calendar.json";
|
|
const HOLIDAY_FILE = "calendar.days.json";
|
|
var settings = require('Storage').readJSON(FILE, true) || {};
|
|
if (settings.ndColors === undefined)
|
|
if (process.env.HWVERSION == 2) {
|
|
settings.ndColors = true;
|
|
} else {
|
|
settings.ndColors = false;
|
|
}
|
|
const holidays = require("Storage").readJSON(HOLIDAY_FILE,1).sort((a,b) => new Date(a.date) - new Date(b.date)) || [];
|
|
|
|
function writeSettings() {
|
|
require('Storage').writeJSON(FILE, settings);
|
|
}
|
|
|
|
function writeHolidays() {
|
|
holidays.sort((a,b) => new Date(a.date) - new Date(b.date));
|
|
require('Storage').writeJSON(HOLIDAY_FILE, holidays);
|
|
}
|
|
|
|
function formatDate(d) {
|
|
return d.getFullYear() + "-" + (d.getMonth() + 1).toString().padStart(2, '0') + "-" + d.getDate().toString().padStart(2, '0');
|
|
}
|
|
|
|
const editdate = (i) => {
|
|
const holiday = holidays[i];
|
|
const date = new Date(holiday.date);
|
|
const dateStr = require("locale").date(date, 1);
|
|
const menu = {
|
|
"": { "title" : holiday.name},
|
|
"< Back": () => {
|
|
writeHolidays();
|
|
editdates();
|
|
},
|
|
/*LANG*/"Day": {
|
|
value: date ? date.getDate() : null,
|
|
min: 1,
|
|
max: 31,
|
|
wrap: true,
|
|
onchange: v => {
|
|
date.setDate(v);
|
|
holiday.date = formatDate(date);
|
|
}
|
|
},
|
|
/*LANG*/"Month": {
|
|
value: date ? date.getMonth() + 1 : null,
|
|
format: v => require("date_utils").month(v),
|
|
onchange: v => {
|
|
date.setMonth((v+11)%12);
|
|
holiday.date = formatDate(date);
|
|
}
|
|
},
|
|
/*LANG*/"Year": {
|
|
value: date ? date.getFullYear() : null,
|
|
min: 1900,
|
|
max: 2100,
|
|
onchange: v => {
|
|
date.setFullYear(v);
|
|
holiday.date = formatDate(date);
|
|
}
|
|
},
|
|
/*LANG*/"Name": () => {
|
|
require("textinput").input({text:holiday.name}).then(result => {
|
|
holiday.name = result;
|
|
editdate(i);
|
|
});
|
|
},
|
|
/*LANG*/"Type": {
|
|
value: function() {
|
|
switch(holiday.type) {
|
|
case 'h': return 0;
|
|
case 'o': return 1;
|
|
}
|
|
return 0;
|
|
}(),
|
|
min: 0, max: 1,
|
|
format: v => [/*LANG*/"Holiday", /*LANG*/"Other"][v],
|
|
onchange: v => {
|
|
holiday.type = function() {
|
|
switch(v) {
|
|
case 0: return 'h';
|
|
case 1: return 'o';
|
|
}
|
|
}();
|
|
}
|
|
},
|
|
/*LANG*/"Repeat": {
|
|
value: !!holiday.repeat,
|
|
format: v => v ? /*LANG*/"Yearly" : /*LANG*/"Never",
|
|
onchange: v => {
|
|
holiday.repeat = v ? 'y' : undefined;
|
|
}
|
|
},
|
|
/*LANG*/"Delete": () => E.showPrompt(/*LANG*/"Delete" + " " + menu[""].title + "?").then(function(v) {
|
|
if (v) {
|
|
holidays.splice(i, 1);
|
|
writeHolidays();
|
|
editdates();
|
|
} else {
|
|
editday(i);
|
|
}
|
|
}
|
|
),
|
|
};
|
|
try {
|
|
require("textinput");
|
|
} catch(e) {
|
|
// textinput not installed
|
|
delete menu[/*LANG*/"Name"];
|
|
}
|
|
|
|
E.showMenu(menu);
|
|
};
|
|
|
|
const editdates = () => {
|
|
const menu = holidays.map((holiday,i) => {
|
|
const date = new Date(holiday.date);
|
|
const dateStr = require("locale").date(date, 1);
|
|
return {
|
|
title: dateStr + ' ' + holiday.name,
|
|
onchange: v => setTimeout(() => editdate(i), 10),
|
|
};
|
|
});
|
|
|
|
menu[''] = { 'title': 'Holidays' };
|
|
menu['< Back'] = ()=>settingsmenu();
|
|
E.showMenu(menu);
|
|
};
|
|
|
|
const settingsmenu = () => {
|
|
E.showMenu({
|
|
"": { "title": "Calendar" },
|
|
"< Back": () => back(),
|
|
/*LANG*/"Edit Holidays": () => editdates(),
|
|
/*LANG*/"Add Holiday": () => {
|
|
holidays.push({
|
|
"date":formatDate(new Date()),
|
|
"name":/*LANG*/"New",
|
|
"type":'h',
|
|
});
|
|
editdate(holidays.length-1);
|
|
},
|
|
});
|
|
};
|
|
settingsmenu();
|
|
})
|