From a3a7ef58bfab4d7bd598379e8e10e23f39757a6a Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 2 May 2022 18:56:36 +0200 Subject: [PATCH 1/8] waypointe fallback to built in compass heading --- apps/waypointer/ChangeLog | 1 + apps/waypointer/app.js | 8 ++++++-- apps/waypointer/metadata.json | 2 +- apps/waypointer/waypoints.html | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/waypointer/ChangeLog b/apps/waypointer/ChangeLog index 1b584f7dd..7ccad08ea 100644 --- a/apps/waypointer/ChangeLog +++ b/apps/waypointer/ChangeLog @@ -1,2 +1,3 @@ 0.01: New app! 0.02: Make Bangle.js 2 compatible +0.03: Silently use built in heading when no magnav calibration file is present diff --git a/apps/waypointer/app.js b/apps/waypointer/app.js index 615fbbc36..bdb6f6857 100644 --- a/apps/waypointer/app.js +++ b/apps/waypointer/app.js @@ -74,11 +74,14 @@ function newHeading(m,h){ return hd; } -var CALIBDATA = require("Storage").readJSON("magnav.json",1)||null; +var CALIBDATA = require("Storage").readJSON("magnav.json",1) || {}; function tiltfixread(O,S){ - var start = Date.now(); var m = Bangle.getCompass(); + if (O === undefined || S === undefined) { + // no valid calibration from magnav, use built in + return 360-m.heading; + } var g = Bangle.getAccel(); m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; var d = Math.atan2(-m.dx,m.dy)*180/Math.PI; @@ -97,6 +100,7 @@ function tiltfixread(O,S){ // Note actual mag is 360-m, error in firmware function read_compass() { var d = tiltfixread(CALIBDATA.offset,CALIBDATA.scale); + if (isNaN(d)) return; // built in compass heading can return NaN when uncalibrated heading = newHeading(d,heading); direction = wp_bearing - heading; if (direction < 0) direction += 360; diff --git a/apps/waypointer/metadata.json b/apps/waypointer/metadata.json index 111259bbc..707da94cf 100644 --- a/apps/waypointer/metadata.json +++ b/apps/waypointer/metadata.json @@ -1,7 +1,7 @@ { "id": "waypointer", "name": "Way Pointer", - "version": "0.02", + "version": "0.03", "description": "Navigate to a waypoint using the GPS for bearing and compass to point way, uses the same waypoint interface as GPS Navigation", "icon": "waypointer.png", "tags": "tool,outdoors,gps", diff --git a/apps/waypointer/waypoints.html b/apps/waypointer/waypoints.html index d02260732..7a65821a2 100644 --- a/apps/waypointer/waypoints.html +++ b/apps/waypointer/waypoints.html @@ -73,8 +73,8 @@ event.preventDefault() var name = $name.value.trim() if(!name) return; - var lat = parseFloat($latitude.value).toPrecision(5); - var lon = parseFloat($longtitude.value).toPrecision(5); + var lat = parseFloat($latitude.value); + var lon = parseFloat($longtitude.value); waypoints.push({ name, lat,lon, From 3900d0a6ad3818d644fec5e2267e22788682dc5e Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 2 May 2022 21:37:31 +0200 Subject: [PATCH 2/8] Add new widget alarmeta This widget displays the time to the next Alarm or Timer in hours and minutes. --- apps/alarmeta/metadata.json | 15 ++++++++++++++ apps/alarmeta/screenshot.png | Bin 0 -> 3491 bytes apps/alarmeta/widget.js | 37 +++++++++++++++++++++++++++++++++++ apps/alarmeta/widget.png | Bin 0 -> 1011 bytes 4 files changed, 52 insertions(+) create mode 100644 apps/alarmeta/metadata.json create mode 100644 apps/alarmeta/screenshot.png create mode 100644 apps/alarmeta/widget.js create mode 100644 apps/alarmeta/widget.png diff --git a/apps/alarmeta/metadata.json b/apps/alarmeta/metadata.json new file mode 100644 index 000000000..0130a63ef --- /dev/null +++ b/apps/alarmeta/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "alarmeta", + "name": "Alarm & Timer ETA", + "shortName": "Alarm ETA", + "version": "0.01", + "description": "A widget that displays the time to the next Alarm or Timer in hours and minutes, maximum 24h", + "icon": "widget.png", + "type": "widget", + "tags": "widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "screenshots" : [ { "url":"screenshot.png" } ], + "storage": [ + {"name":"alarmeta.wid.js","url":"widget.js"} + ] +} diff --git a/apps/alarmeta/screenshot.png b/apps/alarmeta/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..41a1095570813bd8d950a8a7d4da4d3eb7102fe9 GIT binary patch literal 3491 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 O09Qv(hqrd<)c*sBA&|ZR literal 0 HcmV?d00001 diff --git a/apps/alarmeta/widget.js b/apps/alarmeta/widget.js new file mode 100644 index 000000000..ff08dd6ef --- /dev/null +++ b/apps/alarmeta/widget.js @@ -0,0 +1,37 @@ +(() => { + const alarms = require("Storage").readJSON("sched.json",1) || []; + + function draw() { + const times = alarms.map(alarm => require("sched").getTimeToAlarm(alarm)).filter(a => a !== undefined); + const next = Math.min.apply(null, times); + if (next > 0 && next < 86400000) { + const hours = Math.floor((next % 86400000) / 3600000).toString(); + const minutes = Math.floor(((next % 86400000) % 3600000) / 60000).toString(); + + g.reset(); // reset the graphics context to defaults (color/font/etc) + g.setFontAlign(0,0); // center fonts + g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23); + + // Use 'locale' module to get a shortened month name + // in the correct language + var text = hours.padStart(2, '0') + ":" + minutes.padStart(2, '0'); + g.setFont("6x8:1x2"); + g.drawString(text, this.x+this.width/2, this.y+12); + if (this.width === 0) { + this.width = 6*5+2; + Bangle.drawWidgets(); // width changed, re-layout + } + } + } + + setInterval(function() { + WIDGETS["alarmeta"].draw(WIDGETS["alarmeta"]); + }, 30000); // update every half minute + + // add your widget + WIDGETS["alarmeta"]={ + area:"tl", + width: 0, // hide by default = assume no timer + draw:draw + }; +})(); diff --git a/apps/alarmeta/widget.png b/apps/alarmeta/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd942ea013fdda73add2a8f06f63628f6f4d8eb GIT binary patch literal 1011 zcmV0rD z1-1BOqO}O(lTg8jLJ)2HRIT^}1<@B3tE;kzRZPKx4Rq6xZQYf&R3tTNv)N5%=J>F? z>1LBQGkb19$$nqv-aGf)@Au3-_s*R;&_omK8z!v5=nK!D1oOZx5;L~{?ROsxV-snB z=9Y*D5Euw+(|`kzr0`q47-!tV&62XK{W%u_)k^Kcf`xjV!?yV-@(KK zh{zs|23-hAWNFWi$I93ItdHx5lJJm5f^rSW-Akp)espC%?8YP=8U@-#JX0+c7R%R? z7kX#Cq7k5SK;T5RJX0zQ54$TE_*tVt_zRpmJca$2m^T z6P%p(xocC1A%%1@5&KS~LH{O>_|E}Ffa!T*wiI|4ipKGW)%4l{hI(2v7OOo=Ve>G)@A@8 zeO5NRj{75qdv4HWEWY3jJ=|}u+Tyh806;1)oyPTk0!h@}I_<@rosV~!X`6i3zXwVV z|A1Ur<(BXISor{|g;fWB`BUO;MfVHfkyUQr-|D%?PfSR=O-^eLd@2&1bKTE?!JBj& zD73hrr_xT!*UBPJonLs`h?#4j?n{f(7I zB728=TaK-~5e{kxzRwjC;zfT4HeGKO`X=_%l|KwXzI%kpzR`NRf)Q^=vbSwg!>7d}`nAR6rabR+0O$TyExi|toW z)1Mhx)1*K1Jh#oBTB?g&AEOcI95CDoV8r9T@jXPm`LzlCBKM9zgAuPX1e-Myw0|Wo z19V*ckd4N0pknq*0)p0rMNchQd^6(|93UDaomuc3cD6HSjS&u4f;m z*3Q6YrM4~Px4u}ei1|b#LHT?AF?F^^3}c7COoz(K)Izxi^w}CC;j=Qe_}}LTnn^yJ hSeHq@CYo69_!rhyA?h4K76AYN002ovPDHLkV1g(R?#}=K literal 0 HcmV?d00001 From de8641a1c5bbf5888c7a1036108bf2b2598d9706 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 3 May 2022 07:25:20 +0200 Subject: [PATCH 3/8] alarmeta widget renamed to widalarmeta --- apps/{alarmeta => widalarmeta}/metadata.json | 4 ++-- apps/{alarmeta => widalarmeta}/screenshot.png | Bin apps/{alarmeta => widalarmeta}/widget.js | 6 ++---- apps/{alarmeta => widalarmeta}/widget.png | Bin 4 files changed, 4 insertions(+), 6 deletions(-) rename apps/{alarmeta => widalarmeta}/metadata.json (83%) rename apps/{alarmeta => widalarmeta}/screenshot.png (100%) rename apps/{alarmeta => widalarmeta}/widget.js (86%) rename apps/{alarmeta => widalarmeta}/widget.png (100%) diff --git a/apps/alarmeta/metadata.json b/apps/widalarmeta/metadata.json similarity index 83% rename from apps/alarmeta/metadata.json rename to apps/widalarmeta/metadata.json index 0130a63ef..b6d8bd62b 100644 --- a/apps/alarmeta/metadata.json +++ b/apps/widalarmeta/metadata.json @@ -1,5 +1,5 @@ { - "id": "alarmeta", + "id": "widalarmeta", "name": "Alarm & Timer ETA", "shortName": "Alarm ETA", "version": "0.01", @@ -10,6 +10,6 @@ "supports": ["BANGLEJS","BANGLEJS2"], "screenshots" : [ { "url":"screenshot.png" } ], "storage": [ - {"name":"alarmeta.wid.js","url":"widget.js"} + {"name":"widalarmeta.wid.js","url":"widget.js"} ] } diff --git a/apps/alarmeta/screenshot.png b/apps/widalarmeta/screenshot.png similarity index 100% rename from apps/alarmeta/screenshot.png rename to apps/widalarmeta/screenshot.png diff --git a/apps/alarmeta/widget.js b/apps/widalarmeta/widget.js similarity index 86% rename from apps/alarmeta/widget.js rename to apps/widalarmeta/widget.js index ff08dd6ef..0cddf953a 100644 --- a/apps/alarmeta/widget.js +++ b/apps/widalarmeta/widget.js @@ -12,8 +12,6 @@ g.setFontAlign(0,0); // center fonts g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23); - // Use 'locale' module to get a shortened month name - // in the correct language var text = hours.padStart(2, '0') + ":" + minutes.padStart(2, '0'); g.setFont("6x8:1x2"); g.drawString(text, this.x+this.width/2, this.y+12); @@ -25,11 +23,11 @@ } setInterval(function() { - WIDGETS["alarmeta"].draw(WIDGETS["alarmeta"]); + WIDGETS["widalarmeta"].draw(WIDGETS["widalarmeta"]); }, 30000); // update every half minute // add your widget - WIDGETS["alarmeta"]={ + WIDGETS["widalarmeta"]={ area:"tl", width: 0, // hide by default = assume no timer draw:draw diff --git a/apps/alarmeta/widget.png b/apps/widalarmeta/widget.png similarity index 100% rename from apps/alarmeta/widget.png rename to apps/widalarmeta/widget.png From 2a0b354b05fb721f43fcfc44d8cf332d58810b9a Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 4 May 2022 22:25:56 +0200 Subject: [PATCH 4/8] Use Bangle.getHealthStatus("day").steps as fallback. --- apps/notanalog/ChangeLog | 3 ++- apps/notanalog/metadata.json | 2 +- apps/notanalog/notanalog.app.js | 12 +++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/notanalog/ChangeLog b/apps/notanalog/ChangeLog index 6515f787c..07430406a 100644 --- a/apps/notanalog/ChangeLog +++ b/apps/notanalog/ChangeLog @@ -1,4 +1,5 @@ 0.01: Launch app. 0.02: 12k steps are 360 degrees - improves readability of steps. 0.03: Battery improvements through sleep (no minute updates) and partial updates of drawing. -0.04: Use alarm for timer instead of own alarm implementation. \ No newline at end of file +0.04: Use alarm for timer instead of own alarm implementation. +0.05: Use internal step counter if no widget is available. \ No newline at end of file diff --git a/apps/notanalog/metadata.json b/apps/notanalog/metadata.json index 0a291b180..81d79f4f2 100644 --- a/apps/notanalog/metadata.json +++ b/apps/notanalog/metadata.json @@ -3,7 +3,7 @@ "name": "Not Analog", "shortName":"Not Analog", "icon": "notanalog.png", - "version":"0.04", + "version":"0.05", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "An analog watch face for people that can not read analog watch faces.", diff --git a/apps/notanalog/notanalog.app.js b/apps/notanalog/notanalog.app.js index c3dc9308f..4d460cd3c 100644 --- a/apps/notanalog/notanalog.app.js +++ b/apps/notanalog/notanalog.app.js @@ -88,20 +88,22 @@ Graphics.prototype.setNormalFont = function(scale) { }; - function getSteps() { + var steps = 0; try{ if (WIDGETS.wpedom !== undefined) { - return WIDGETS.wpedom.getSteps(); + steps = WIDGETS.wpedom.getSteps(); } else if (WIDGETS.activepedom !== undefined) { - return WIDGETS.activepedom.getSteps(); + steps = WIDGETS.activepedom.getSteps(); + } else { + steps = Bangle.getHealthStatus("day").steps; } } catch(ex) { // In case we failed, we can only show 0 steps. } - return 0; - } + return steps; +} function drawBackground() { From d4ecf16616c0d6411831c0bb14749e1982c797cf Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 4 May 2022 22:31:11 +0200 Subject: [PATCH 5/8] FIrst queue draw... --- apps/notanalog/notanalog.app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/notanalog/notanalog.app.js b/apps/notanalog/notanalog.app.js index 4d460cd3c..3c01a921e 100644 --- a/apps/notanalog/notanalog.app.js +++ b/apps/notanalog/notanalog.app.js @@ -291,6 +291,9 @@ function drawSleep(){ function draw(fastUpdate){ + // Queue draw in one minute + queueDraw(); + // Execute handlers handleState(fastUpdate); @@ -322,9 +325,6 @@ function draw(fastUpdate){ drawState(); drawTime(); drawData(); - - // Queue draw in one minute - queueDraw(); } From 1d22050dc65951fe9ae067a7d52d2fa316891c0b Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 4 May 2022 22:58:45 +0200 Subject: [PATCH 6/8] sched: add day of week check to getActiveAlarms() --- apps/sched/ChangeLog | 2 +- apps/sched/lib.js | 7 ++++++- apps/sched/metadata.json | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 717763e19..914bd7002 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -6,4 +6,4 @@ 0.06: Refactor some methods to library 0.07: Update settings Correct `decodeTime(t)` to return a more likely expected time - +0.08: add day of week check to getActiveAlarms() diff --git a/apps/sched/lib.js b/apps/sched/lib.js index 891776263..9d2d0c636 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -15,7 +15,12 @@ exports.getActiveAlarms = function(alarms, time) { if (!time) time = new Date(); var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000) +10000;// get current time - 10s in future to ensure we alarm if we've started the app a tad early - return alarms.filter(a=>a.on&&(a.ta.t-b.t); + return alarms.filter(a=>a.on + &&(a.t> (time).getDay() & 1)) + .sort((a,b)=>a.t-b.t); } // Set an alarm object based on ID. Leave 'alarm' undefined to remove it exports.setAlarm = function(id, alarm) { diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index c41e5b5b3..089fffe31 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.07", + "version": "0.08", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", From 43d696e90b3017f337e23598fc20602301deae0e Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 4 May 2022 23:09:04 +0200 Subject: [PATCH 7/8] sched: Fix typo --- apps/sched/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sched/lib.js b/apps/sched/lib.js index 9d2d0c636..ff35c94cb 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -19,7 +19,7 @@ exports.getActiveAlarms = function(alarms, time) { &&(a.t> (time).getDay() & 1)) + && a.dow >> (time).getDay() & 1) .sort((a,b)=>a.t-b.t); } // Set an alarm object based on ID. Leave 'alarm' undefined to remove it From 6fafba454db7581ed66cf55a6915dc75eb63175d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 4 May 2022 23:40:21 +0200 Subject: [PATCH 8/8] calendar - Do not register as watch, manually start clock on button (Compatibility with Quick Launch) - Read start of week from new system settings instead of own configuration --- apps/calendar/ChangeLog | 2 ++ apps/calendar/calendar.js | 23 +++++++++++------------ apps/calendar/metadata.json | 2 +- apps/calendar/settings.js | 10 ---------- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/apps/calendar/ChangeLog b/apps/calendar/ChangeLog index cc8bb6306..ea8934f84 100644 --- a/apps/calendar/ChangeLog +++ b/apps/calendar/ChangeLog @@ -5,3 +5,5 @@ 0.05: Update calendar weekend colors for start on Sunday 0.06: Use larger font for dates 0.07: Fix off-by-one-error on previous month +0.08: Do not register as watch, manually start clock on button + read start of week from system settings diff --git a/apps/calendar/calendar.js b/apps/calendar/calendar.js index 3f4315811..fc7e93cf5 100644 --- a/apps/calendar/calendar.js +++ b/apps/calendar/calendar.js @@ -18,8 +18,7 @@ const blue = "#0000ff"; const yellow = "#ffff00"; let settings = require('Storage').readJSON("calendar.json", true) || {}; -if (settings.startOnSun === undefined) - settings.startOnSun = false; +let startOnSun = ((require("Storage").readJSON("setting.json", true) || {}).firstDayOfWeek || 0) === 0; if (settings.ndColors === undefined) if (process.env.HWVERSION == 2) { settings.ndColors = true; @@ -50,14 +49,14 @@ function getDowLbls(locale) { case "de_AT": case "de_CH": case "de_DE": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]; } else { dowLbls = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]; } break; case "nl_NL": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["zo", "ma", "di", "wo", "do", "vr", "za"]; } else { dowLbls = ["ma", "di", "wo", "do", "vr", "za", "zo"]; @@ -66,14 +65,14 @@ function getDowLbls(locale) { case "fr_BE": case "fr_CH": case "fr_FR": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di"]; } break; case "sv_SE": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di"]; @@ -81,21 +80,21 @@ function getDowLbls(locale) { break; case "it_CH": case "it_IT": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"]; } break; case "oc_FR": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["dg", "dl", "dm", "dc", "dj", "dv", "ds"]; } else { dowLbls = ["dl", "dm", "dc", "dj", "dv", "ds", "dg"]; } break; default: - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]; } else { dowLbls = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"]; @@ -110,7 +109,7 @@ function drawCalendar(date) { g.clearRect(0, 0, maxX, maxY); g.setBgColor(bgColorMonth); g.clearRect(0, 0, maxX, headerH); - if (settings.startOnSun){ + if (startOnSun){ g.setBgColor(bgColorWeekend); g.clearRect(0, headerH + rowH, colW, maxY); g.setBgColor(bgColorDow); @@ -150,7 +149,7 @@ function drawCalendar(date) { }); date.setDate(1); - const dow = date.getDay() + (settings.startOnSun ? 1 : 0); + const dow = date.getDay() + (startOnSun ? 1 : 0); const dowNorm = dow === 0 ? 7 : dow; const monthMaxDayMap = { @@ -242,5 +241,5 @@ Bangle.on("touch", area => { }); // Show launcher when button pressed -Bangle.setUI("clock"); // TODO: ideally don't set 'clock' mode +setWatch(() => load(), process.env.HWVERSION === 2 ? BTN : BTN3, { repeat: false, edge: "falling" }); // No space for widgets! diff --git a/apps/calendar/metadata.json b/apps/calendar/metadata.json index 62d2513ae..5f968b364 100644 --- a/apps/calendar/metadata.json +++ b/apps/calendar/metadata.json @@ -1,7 +1,7 @@ { "id": "calendar", "name": "Calendar", - "version": "0.07", + "version": "0.08", "description": "Simple calendar", "icon": "calendar.png", "screenshots": [{"url":"screenshot_calendar.png"}], diff --git a/apps/calendar/settings.js b/apps/calendar/settings.js index 3c8f7d8e8..192d2ece0 100644 --- a/apps/calendar/settings.js +++ b/apps/calendar/settings.js @@ -1,8 +1,6 @@ (function (back) { var FILE = "calendar.json"; var settings = require('Storage').readJSON(FILE, true) || {}; - if (settings.startOnSun === undefined) - settings.startOnSun = false; if (settings.ndColors === undefined) if (process.env.HWVERSION == 2) { settings.ndColors = true; @@ -17,14 +15,6 @@ E.showMenu({ "": { "title": "Calendar" }, "< Back": () => back(), - 'Start Sunday': { - value: settings.startOnSun, - format: v => v ? "Yes" : "No", - onchange: v => { - settings.startOnSun = v; - writeSettings(); - } - }, 'B2 Colors': { value: settings.ndColors, format: v => v ? "Yes" : "No",