Haltezeit als Zeitfeld: Stunden und Minuten statt einer Minutenzahl
Dasselbe <input type="time"> wie von/bis daneben, nur als Dauer gelesen -
"03:30" tippt sich leichter als "210" und steht in derselben Zeile wie die
beiden Uhrzeiten darueber. Dass es keine Uhrzeit meint, sagt der Text
ringsum ("erst nach ... am Stueck"); die Kopfzeile des Rahmens schreibt es
beim Tippen aus.
Die Obergrenze ist damit 23:59 statt 24 Stunden - genau das, was ein
Zeitfeld hergibt.
Dabei aufgefallen: haltezeitKurz() rundete auf Zehntelstunden und machte aus
23:59 die Auskunft "24 Std.". Eine Haltezeit, die laenger aussieht als sie
ist, ist genau die falsche Auskunft - krumme Werte stehen jetzt als
"23 Std. 59 Min." da, halbe behalten ihr Komma.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+36
-13
@@ -1136,10 +1136,36 @@ function rahmenKurzText() {
|
||||
return teile.join(" · ");
|
||||
}
|
||||
|
||||
/** Wie haltezeitKurz() in automations.php: Minuten bis eine Stunde, dann Stunden. */
|
||||
/**
|
||||
* Haltezeit und Zeitfeld ineinander umrechnen.
|
||||
*
|
||||
* Das Feld ist ein gewoehnliches <input type="time">, sein Wert also "03:30".
|
||||
* Gemeint ist keine Uhrzeit, sondern eine Dauer - deshalb hier zwei eigene
|
||||
* Funktionen und nicht die Behandlung von window_from/window_to, die den Text
|
||||
* unveraendert durchreichen.
|
||||
*/
|
||||
function haltezeitAlsUhr(sekunden) {
|
||||
const min = Math.round(sekunden / 60);
|
||||
return String(Math.floor(min / 60)).padStart(2, "0") + ":"
|
||||
+ String(min % 60).padStart(2, "0");
|
||||
}
|
||||
|
||||
/** Leer oder unsinnig ist 0; die Obergrenze ist 23:59, siehe haltezeitPruefen(). */
|
||||
function haltezeitAusUhr(text) {
|
||||
const teile = String(text || "").split(":");
|
||||
const sek = ((Number(teile[0]) || 0) * 60 + (Number(teile[1]) || 0)) * 60;
|
||||
return Math.min(Math.max(sek, 0), 86340);
|
||||
}
|
||||
|
||||
/** Wie haltezeitKurz() in automations.php - dort steht, warum nicht gerundet wird. */
|
||||
function haltezeitKurz(sekunden) {
|
||||
if (sekunden < 3600) return Math.floor(sekunden / 60) + " Min.";
|
||||
return (sekunden / 3600).toFixed(1).replace(/[.,]0$/, "").replace(".", ",") + " Std.";
|
||||
const minuten = Math.floor(sekunden / 60);
|
||||
if (minuten < 60) return minuten + " Min.";
|
||||
const stunden = Math.floor(minuten / 60);
|
||||
const rest = minuten % 60;
|
||||
if (rest === 0) return stunden + " Std.";
|
||||
if (rest === 30) return stunden + ",5 Std.";
|
||||
return stunden + " Std. " + rest + " Min.";
|
||||
}
|
||||
|
||||
function rahmenIstVorgabe() {
|
||||
@@ -1181,7 +1207,7 @@ function fuelleFormular() {
|
||||
const sperre = document.getElementById("lockoutSecs");
|
||||
optionListe(sperre, autoLockouts.map(o => ({ value: o.value, text: o.label })),
|
||||
autoModel.lockout_secs);
|
||||
document.getElementById("holdMin").value = autoModel.hold_secs / 60;
|
||||
document.getElementById("holdZeit").value = haltezeitAlsUhr(autoModel.hold_secs);
|
||||
document.getElementById("autoName").value = autoModel.name;
|
||||
// Kennt die Liste die Etage nicht, bleibt eine Auswahlliste sonst leer
|
||||
// stehen und schickt beim Speichern "" mit.
|
||||
@@ -1216,10 +1242,7 @@ function leseFormular() {
|
||||
autoModel.once_per_day = document.getElementById("oncePerDay").checked;
|
||||
autoModel.next_day = document.getElementById("nextDay").checked;
|
||||
autoModel.lockout_secs = Number(document.getElementById("lockoutSecs").value);
|
||||
// Minuten im Feld, Sekunden im Modell - und nichts Unmoegliches: ein
|
||||
// leeres Feld ist 0, ein Tag ist die Obergrenze (siehe haltezeitPruefen()).
|
||||
const halten = Math.round(Number(document.getElementById("holdMin").value) || 0);
|
||||
autoModel.hold_secs = Math.min(Math.max(halten, 0), 1440) * 60;
|
||||
autoModel.hold_secs = haltezeitAusUhr(document.getElementById("holdZeit").value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1227,15 +1250,15 @@ function leseFormular() {
|
||||
* Ohne das stuende dort "rund um die Uhr", waehrend darunter 08:45 steht.
|
||||
*/
|
||||
function rahmenFelderVerdrahten() {
|
||||
["tSpanFrom", "tSpanTo", "lockoutSecs", "holdMin",
|
||||
["tSpanFrom", "tSpanTo", "lockoutSecs", "holdZeit",
|
||||
"runOnce", "oncePerDay", "nextDay"].forEach(id => {
|
||||
const feld = document.getElementById(id);
|
||||
if (feld) feld.addEventListener("change", () => { leseFormular(); renderRahmen(); });
|
||||
});
|
||||
// Bei der Haltezeit schon beim Tippen: aus "210" wird in der Kopfzeile
|
||||
// "erst nach 3,5 Std." - genau dafuer gibt man die Zahl ein. "change"
|
||||
// allein kaeme erst beim Verlassen des Feldes.
|
||||
document.getElementById("holdMin")
|
||||
// Bei der Haltezeit schon beim Tippen: aus "03:30" wird in der Kopfzeile
|
||||
// "erst nach 3,5 Std.". "change" allein kaeme erst beim Verlassen des
|
||||
// Feldes, und ein Zeitfeld verlaesst man ungern, um nachzusehen.
|
||||
document.getElementById("holdZeit")
|
||||
.addEventListener("input", () => { leseFormular(); renderRahmen(); });
|
||||
|
||||
// Zugeklappt steht in der Kopfzeile, was gilt; aufgeklappt stehen dort die
|
||||
|
||||
Reference in New Issue
Block a user