fix(webui): spell out the auto-update window as am/pm
"06:00-08:00" is unambiguous on paper and ambiguous at a glance — the strip said updates install "during 06:00–08:00" and left the reader working out whether that meant morning or night. The window now renders as 6am–8am. The config stays 24-hour so there is still one canonical way to type it; only the display spells it out, and anything that is not a plain HH:MM-HH:MM passes through untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
8a997e14dd
commit
419105c906
@ -441,7 +441,8 @@ class OverviewManager {
|
|||||||
// with no time reads as "any second now", which a 06:00-08:00 window
|
// with no time reads as "any second now", which a 06:00-08:00 window
|
||||||
// makes untrue for most of the day.
|
// makes untrue for most of the day.
|
||||||
const win = up.updates && up.updates.auto_window;
|
const win = up.updates && up.updates.auto_window;
|
||||||
const winBit = (win && win !== 'always') ? ` during the ${esc(win).replace('-', '–')} window` : '';
|
const winFmt = (this.updater && this.updater.fmtWindow) ? this.updater.fmtWindow(win) : String(win).replace('-', '–');
|
||||||
|
const winBit = (win && win !== 'always') ? ` during the ${esc(winFmt)} window` : '';
|
||||||
rows.push({
|
rows.push({
|
||||||
hue: 'updates', icon: '⬆️', kind: 'ok',
|
hue: 'updates', icon: '⬆️', kind: 'ok',
|
||||||
text: `${pending.length} update${pending.length === 1 ? '' : 's'} installing automatically${winBit}`,
|
text: `${pending.length} update${pending.length === 1 ? '' : 's'} installing automatically${winBit}`,
|
||||||
|
|||||||
@ -184,6 +184,23 @@ class UpdaterPage {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "06:00-08:00" -> "6am–8am"; "22:30-01:15" -> "10:30pm–1:15am".
|
||||||
|
// 24-hour time is unambiguous on paper and ambiguous at a glance: people read
|
||||||
|
// "06:00–08:00" and still have to work out whether that is morning or night.
|
||||||
|
// The config stays 24-hour (one canonical way to type it); only the display
|
||||||
|
// spells it out. Anything that is not a plain HH:MM-HH:MM is passed through.
|
||||||
|
fmtWindow(win) {
|
||||||
|
const m = String(win || '').match(/^(\d{1,2}):(\d{2})-(\d{1,2}):(\d{2})$/);
|
||||||
|
if (!m) return String(win || '').replace('-', '–');
|
||||||
|
const one = (h, mi) => {
|
||||||
|
const H = parseInt(h, 10), M = parseInt(mi, 10);
|
||||||
|
const ap = H < 12 ? 'am' : 'pm';
|
||||||
|
const hh = (H % 12) === 0 ? 12 : (H % 12);
|
||||||
|
return M ? `${hh}:${String(M).padStart(2, '0')}${ap}` : `${hh}${ap}`;
|
||||||
|
};
|
||||||
|
return `${one(m[1], m[2])}–${one(m[3], m[4])}`;
|
||||||
|
}
|
||||||
|
|
||||||
sevRank(s) {
|
sevRank(s) {
|
||||||
const r = { critical: 0, high: 1, medium: 2, low: 3 };
|
const r = { critical: 0, high: 1, medium: 2, low: 3 };
|
||||||
return r[(s || '').toLowerCase()] ?? 4;
|
return r[(s || '').toLowerCase()] ?? 4;
|
||||||
@ -750,7 +767,7 @@ class UpdaterPage {
|
|||||||
// iv === 0 the policy is moot and claiming otherwise would be a lie.
|
// iv === 0 the policy is moot and claiming otherwise would be a lie.
|
||||||
// The window says WHEN: checks run all day, installs land inside it.
|
// The window says WHEN: checks run all day, installs land inside it.
|
||||||
const win = this.updates && this.updates.auto_window;
|
const win = this.updates && this.updates.auto_window;
|
||||||
const winBit = (win && win !== 'always') ? ` during ${this.escape(win).replace('-', '–')}` : '';
|
const winBit = (win && win !== 'always') ? ` during ${this.escape(this.fmtWindow(win))}` : '';
|
||||||
const auto = this.apps.filter((a) => a.update_type !== 'manual').length;
|
const auto = this.apps.filter((a) => a.update_type !== 'manual').length;
|
||||||
let autoBit = '';
|
let autoBit = '';
|
||||||
if (iv === 0 || !this.apps.length) autoBit = '';
|
if (iv === 0 || !this.apps.length) autoBit = '';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user