From 97d648d4affa58f2d13daf46a0e606809a96d786 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sat, 2 Mar 2024 15:00:16 +0000 Subject: [PATCH 01/13] sched: add day selection to interface.html --- apps/sched/interface.html | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/apps/sched/interface.html b/apps/sched/interface.html index 62e45676b..75c8ce67f 100644 --- a/apps/sched/interface.html +++ b/apps/sched/interface.html @@ -163,6 +163,26 @@ function renderAlarm(alarm, exists) { tr.appendChild(tdTime); tdTime.appendChild(inputTime); + const tdDays = document.createElement('td'); + tr.appendChild(tdDays); + const selectDays = document.createElement('select'); + selectDays.multiple = true; + selectDays.classList.add('form-input'); + selectDays.dataset.uid = alarm.id; + const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; + const options = days.map((day, i) => { + const option = document.createElement('option'); + option.value = day; + option.text = day; + option.selected = alarm.dow & (1 << i); + selectDays.appendChild(option); + return option; + }); + selectDays.onchange = (e => { + alarm.dow = options.reduce((bits, opt, i) => bits | (opt.selected ? 1 << i : 0), 0); + }); + tdDays.appendChild(selectDays); + const tdSummary = document.createElement('td'); tr.appendChild(tdSummary); const inputSummary = document.createElement('input'); @@ -320,6 +340,7 @@ function onInit() { Type Date/Time + Days Summary On? From d28d696deaa7eab31678d7e398fdc3a0375bb4de Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sat, 2 Mar 2024 16:12:06 +0000 Subject: [PATCH 02/13] sched: interface.html, Monday is the first day of the week --- apps/sched/interface.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/sched/interface.html b/apps/sched/interface.html index 75c8ce67f..61c554712 100644 --- a/apps/sched/interface.html +++ b/apps/sched/interface.html @@ -175,9 +175,11 @@ function renderAlarm(alarm, exists) { option.value = day; option.text = day; option.selected = alarm.dow & (1 << i); - selectDays.appendChild(option); + if(day !== "Sun") + selectDays.appendChild(option); return option; }); + selectDays.appendChild(options.find(o => o.text === "Sun")); selectDays.onchange = (e => { alarm.dow = options.reduce((bits, opt, i) => bits | (opt.selected ? 1 << i : 0), 0); }); From b4b047d0cb5e06f921d7ab987007ead04e3559ca Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sat, 2 Mar 2024 18:29:47 +0000 Subject: [PATCH 03/13] sched: interface.html rowspan --- apps/sched/interface.html | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/apps/sched/interface.html b/apps/sched/interface.html index 61c554712..608212792 100644 --- a/apps/sched/interface.html +++ b/apps/sched/interface.html @@ -2,6 +2,11 @@ + From 95105825a762a9212fd6df1a3c5782d573be6bc1 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sun, 3 Mar 2024 19:36:42 +0000 Subject: [PATCH 06/13] sched: interface.html fix row deletion --- apps/sched/interface.html | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/sched/interface.html b/apps/sched/interface.html index 90299ce6b..9c3b9e139 100644 --- a/apps/sched/interface.html +++ b/apps/sched/interface.html @@ -255,6 +255,7 @@ function renderAlarm(alarm, exists) { buttonDelete.onclick = (e => { alarms = alarms.filter(a => a !== alarm); document.getElementById('events').removeChild(tr); + document.getElementById('events').removeChild(tr2); }); document.getElementById('events').appendChild(tr); From 87919639bb4bee3dd2894410702a22bf7a2130fa Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sun, 3 Mar 2024 19:38:27 +0000 Subject: [PATCH 07/13] sched: interface.html move on/off + delete below summary --- apps/sched/interface.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/sched/interface.html b/apps/sched/interface.html index 9c3b9e139..ed3026658 100644 --- a/apps/sched/interface.html +++ b/apps/sched/interface.html @@ -7,17 +7,17 @@ height: 100%; /* e.g. day */ } - #events > tr.event-row > td:last-child, - #events > tr.event-row > td:first-child { + .single-row { /* no border between single rowspans, 1st & $th */ border-bottom: none; } - #events > tr:nth-child(2n) > td:nth-child(2) { + .btn-center { justify-content: center; display: flex; } @@ -138,10 +137,10 @@ function renderAlarm(alarm, exists) { const tr2 = document.createElement('tr'); tr.classList.add('event-row'); tr.dataset.uid = alarm.id; + const tdType = document.createElement('td'); tdType.type = "text"; tdType.classList.add('event-summary'); - tr.appendChild(tdType); tdType.rowSpan = 1; const inputTime = document.createElement('input'); if (localDate) { tdType.textContent = "Event"; @@ -181,11 +180,9 @@ function renderAlarm(alarm, exists) { inputTime.classList.add('form-input'); inputTime.dataset.uid = alarm.id; const tdTime = document.createElement('td'); - tr2.appendChild(tdTime); tdTime.rowSpan = 1; tdTime.appendChild(inputTime); const tdDays = document.createElement('td'); - tr.appendChild(tdDays); tdDays.rowSpan = 2; const selectDays = document.createElement('select'); selectDays.multiple = true; selectDays.classList.add('form-input', 'multi-select'); @@ -207,7 +204,6 @@ function renderAlarm(alarm, exists) { tdDays.appendChild(selectDays); const tdSummary = document.createElement('td'); - tr.appendChild(tdSummary); tdSummary.rowSpan = 1; tdSummary.colSpan = 2; const inputSummary = document.createElement('input'); inputSummary.type = "text"; inputSummary.classList.add('event-summary'); @@ -224,9 +220,8 @@ function renderAlarm(alarm, exists) { inputSummary.onchange(); const tdOptions = document.createElement('td'); - tr2.appendChild(tdOptions); tdOptions.rowSpan = 1; - const onOffCheck = document.createElement('input'); + tdOptions.classList.add('btn-center'); onOffCheck.type = 'checkbox'; onOffCheck.checked = alarm.on; onOffCheck.onchange = e => { @@ -242,8 +237,6 @@ function renderAlarm(alarm, exists) { tdOptions.appendChild(onOff); const tdInfo = document.createElement('td'); - tr2.appendChild(tdInfo); tdInfo.rowSpan = 1; - const buttonDelete = document.createElement('button'); buttonDelete.classList.add('btn'); buttonDelete.classList.add('btn-action'); @@ -258,6 +251,13 @@ function renderAlarm(alarm, exists) { document.getElementById('events').removeChild(tr2); }); + tr.appendChild(tdType); tdType.classList.add('single-row'); + tr.appendChild(tdOptions); tdType.classList.add('single-row'); + tr.appendChild(tdInfo); tdType.classList.add('single-row'); + tr2.appendChild(tdTime); tdTime.colSpan = 3; + tr.appendChild(tdDays); tdDays.rowSpan = 2; + tr.appendChild(tdSummary); tdType.classList.add('single-row'); + document.getElementById('events').appendChild(tr); document.getElementById('events').appendChild(tr2); document.getElementById('upload').disabled = false; From 8dbef6041e0e14409a165798242e2ff1a8ceb9f5 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Mon, 4 Mar 2024 07:49:24 +0000 Subject: [PATCH 09/13] sched: interface.html hide days for non-alarms --- apps/sched/interface.html | 55 ++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/apps/sched/interface.html b/apps/sched/interface.html index 041ef9337..81684819a 100644 --- a/apps/sched/interface.html +++ b/apps/sched/interface.html @@ -142,8 +142,9 @@ function renderAlarm(alarm, exists) { tdType.type = "text"; tdType.classList.add('event-summary'); const inputTime = document.createElement('input'); + let type; if (localDate) { - tdType.textContent = "Event"; + type = "Event"; inputTime.type = "datetime-local"; inputTime.value = localDate.toISOString().slice(0,16); inputTime.onchange = (e => { @@ -159,18 +160,19 @@ function renderAlarm(alarm, exists) { inputTime.value = `${hours}:${mins}:${secs}`; if (alarm.timer) { - tdType.textContent = "Timer"; + type = "Timer"; inputTime.onchange = e => { alarm.timer = hmsToMs(inputTime.value); // alarm.t is set on upload }; } else { - tdType.textContent = "Alarm"; + type = "Alarm"; inputTime.onchange = e => { alarm.t = hmsToMs(inputTime.value); }; } } + tdType.textContent = type; if (!exists) { const asterisk = document.createElement('sup'); asterisk.textContent = '*'; @@ -182,26 +184,29 @@ function renderAlarm(alarm, exists) { const tdTime = document.createElement('td'); tdTime.appendChild(inputTime); - const tdDays = document.createElement('td'); - const selectDays = document.createElement('select'); - selectDays.multiple = true; - selectDays.classList.add('form-input', 'multi-select'); - selectDays.dataset.uid = alarm.id; - const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; - const options = days.map((day, i) => { - const option = document.createElement('option'); - option.value = day; - option.text = day; - option.selected = alarm.dow & (1 << i); - if(day !== "Sun") - selectDays.appendChild(option); - return option; - }); - selectDays.appendChild(options.find(o => o.text === "Sun")); - selectDays.onchange = (e => { - alarm.dow = options.reduce((bits, opt, i) => bits | (opt.selected ? 1 << i : 0), 0); - }); - tdDays.appendChild(selectDays); + let tdDays; + if (type === "Alarm") { + tdDays = document.createElement('td'); + const selectDays = document.createElement('select'); + selectDays.multiple = true; + selectDays.classList.add('form-input', 'multi-select'); + selectDays.dataset.uid = alarm.id; + const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; + const options = days.map((day, i) => { + const option = document.createElement('option'); + option.value = day; + option.text = day; + option.selected = alarm.dow & (1 << i); + if(day !== "Sun") + selectDays.appendChild(option); + return option; + }); + selectDays.appendChild(options.find(o => o.text === "Sun")); + selectDays.onchange = (e => { + alarm.dow = options.reduce((bits, opt, i) => bits | (opt.selected ? 1 << i : 0), 0); + }); + tdDays.appendChild(selectDays); + } const tdSummary = document.createElement('td'); const inputSummary = document.createElement('input'); @@ -255,7 +260,9 @@ function renderAlarm(alarm, exists) { tr.appendChild(tdOptions); tdType.classList.add('single-row'); tr.appendChild(tdInfo); tdType.classList.add('single-row'); tr2.appendChild(tdTime); tdTime.colSpan = 3; - tr.appendChild(tdDays); tdDays.rowSpan = 2; + if (tdDays) { + tr.appendChild(tdDays); tdDays.rowSpan = 2; + } tr.appendChild(tdSummary); tdType.classList.add('single-row'); document.getElementById('events').appendChild(tr); From 9791f452d86730438418846575a9245884e945e6 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Mon, 4 Mar 2024 07:57:22 +0000 Subject: [PATCH 10/13] sched: interface.html tweak layout and handle event/timers --- apps/sched/interface.html | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/sched/interface.html b/apps/sched/interface.html index 81684819a..8da4a356f 100644 --- a/apps/sched/interface.html +++ b/apps/sched/interface.html @@ -4,11 +4,12 @@