From ed9d4d47c50878e0aea5497d0c934bd750ed1e5b Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Mon, 29 May 2023 13:32:25 +0100 Subject: [PATCH] sched: interface.html, show timers & non-date alarms too --- apps/sched/interface.html | 74 +++++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 14 deletions(-) diff --git a/apps/sched/interface.html b/apps/sched/interface.html index f1ace7d0c..0b3c0d986 100644 --- a/apps/sched/interface.html +++ b/apps/sched/interface.html @@ -93,24 +93,53 @@ function upload() { } function renderAlarm(alarm, exists) { - const localDate = dateFromAlarm(alarm); + const localDate = alarm.date ? dateFromAlarm(alarm) : null; const tr = document.createElement('tr'); tr.classList.add('event-row'); tr.dataset.uid = alarm.id; - const tdTime = document.createElement('td'); - tr.appendChild(tdTime); + const tdType = document.createElement('td'); + tdType.type = "text"; + tdType.classList.add('event-summary'); + tr.appendChild(tdType); const inputTime = document.createElement('input'); - inputTime.type = "datetime-local"; + if (localDate) { + tdType.textContent = "Alarm"; + inputTime.type = "datetime-local"; + inputTime.value = localDate.toISOString().slice(0,16); + inputTime.onchange = (e => { + const date = new Date(inputTime.value); + alarm.t = dateToMsSinceMidnight(date); + alarm.date = formatDate(date); + }); + } else { + const [hours, mins, secs] = msToHMS(alarm.timer || alarm.t); + + inputTime.type = "time"; + inputTime.step = 1; // display seconds + inputTime.value = `${hours}:${mins}:${secs}`; + + if (alarm.timer) { + tdType.textContent = "Timer"; + inputTime.onchange = e => { + alarm.timer = hmsToMs(inputTime.value); + const now = new Date(); + const currentTime = (now.getHours()*3600000)+(now.getMinutes()*60000)+(now.getSeconds()*1000); + alarm.t = currentTime + alarm.timer; + }; + } else { + tdType.textContent = "Alarm"; + inputTime.onchange = e => { + alarm.t = hmsToMs(inputTime.value); + }; + } + } + if (!exists) tdType.textContent = "* " + tdType.textContent; inputTime.classList.add('event-date'); inputTime.classList.add('form-input'); inputTime.dataset.uid = alarm.id; - inputTime.value = localDate.toISOString().slice(0,16); - inputTime.onchange = (e => { - const date = new Date(inputTime.value); - alarm.t = dateToMsSinceMidnight(date); - alarm.date = formatDate(date); - }); + const tdTime = document.createElement('td'); + tr.appendChild(tdTime); tdTime.appendChild(inputTime); const tdSummary = document.createElement('td'); @@ -150,6 +179,24 @@ function renderAlarm(alarm, exists) { document.getElementById('upload').disabled = false; } +function msToHMS(ms) { + let secs = Math.floor(ms / 1000) % 60; + let mins = Math.floor(ms / 1000 / 60) % 60; + let hours = Math.floor(ms / 1000 / 60 / 60); + if (secs < 10) secs = "0" + secs; + if (mins < 10) mins = "0" + mins; + if (hours < 10) hours = "0" + hours; + return [hours, mins, secs]; +} + +function hmsToMs(hms) { + let [hours, mins, secs] = hms.split(":"); + hours = Number(hours); + mins = Number(mins); + secs = Number(secs); + return ((hours * 60 + mins) * 60 + secs) * 1000; +} + function addAlarm() { const alarm = getAlarmDefaults(); renderAlarm(alarm); @@ -165,9 +212,7 @@ function getData() { schedSettings = JSON.parse(data || "{}") || {}; Util.hideModal(); alarms.forEach(alarm => { - if (alarm.date) { - renderAlarm(alarm, true); - } + renderAlarm(alarm, true); }); }); }); @@ -191,7 +236,8 @@ function onInit() { - + +
DateTypeDate/Time Summary