0.2.24
RustBox CI / rustbox (push) Canceled after 0s

This commit is contained in:
Mateusz Gruszczyński committed 2026-11-04 23:34:09 +01:00
1 parent beae94e932
commit de4d70970c
51 files changed
+4034 -421

No files matched your search

+51 -3
View File
@@ -204,7 +204,53 @@ function updateCalendarRecurrenceUi() {
$("#calendar-rrule-wrap").classList.toggle("hidden", $("#calendar-recurrence").value !== "custom");
}
const calendarReminderChoices = [
["", "None"], ["0", "At start"], ["5", "5 minutes"], ["10", "10 minutes"], ["15", "15 minutes"], ["30", "30 minutes"],
["60", "1 hour"], ["120", "2 hours"], ["1440", "1 day before"], ["2880", "2 days before"], ["10080", "1 week before"],
];
function fillCalendarReminderSelects() {
for (const selector of ["#calendar-reminder", "#calendar-reminder-extra", "#calendar-default-reminder", "#calendar-default-reminder-extra"]) {
const select = $(selector);
if (!select) continue;
const current = select.value;
select.replaceChildren(...calendarReminderChoices.map(([value, label]) => new Option(trText(label), value)));
select.value = current;
}
}
function setReminderSelect(selector, minutes) {
const select = $(selector);
if (!select) return;
const value = minutes == null ? "" : String(minutes);
select.value = Array.from(select.options).some((option) => option.value === value) ? value : "";
}
function reminderSelectValue(selector) {
const value = $(selector)?.value ?? "";
return value === "" ? null : Number(value);
}
async function loadCalendarReminderDefaults() {
try {
state.calendarSettings = await request("/calendar/settings", { method: "GET" });
} catch (_) {
state.calendarSettings = state.calendarSettings || null;
}
fillCalendarReminderSelects();
setReminderSelect("#calendar-default-reminder", state.calendarSettings?.default_reminder_minutes);
setReminderSelect("#calendar-default-reminder-extra", state.calendarSettings?.default_extra_reminder_minutes);
}
async function saveCalendarReminderDefault(field, selector) {
try {
state.calendarSettings = await request("/calendar/settings", { method: "PUT", body: JSON.stringify({ [field]: reminderSelectValue(selector) }) });
toast(trText("Calendar reminder defaults saved"));
} catch (error) { toast(error.message, "error"); }
}
function editCalendarEvent(event = null) {
fillCalendarReminderSelects();
$("#calendar-form").classList.remove("hidden");
$("#calendar-event-id").value = event?.id || "";
$("#calendar-title").value = event?.title || "";
@@ -226,8 +272,9 @@ function editCalendarEvent(event = null) {
$("#calendar-description").value = event?.description || "";
const color = String(event?.color || "");
$("#calendar-color").value = /^#[0-9a-f]{6}$/i.test(color) ? color : "#6b7280";
const reminder = event?.reminder_minutes == null ? "" : String(event.reminder_minutes);
$("#calendar-reminder").value = Array.from($("#calendar-reminder").options).some((option) => option.value === reminder) ? reminder : "";
// New events start with the reminders chosen in Settings -> Notifications.
setReminderSelect("#calendar-reminder", event ? event.reminder_minutes : state.calendarSettings?.default_reminder_minutes);
setReminderSelect("#calendar-reminder-extra", event ? event.reminder_extra_minutes : state.calendarSettings?.default_extra_reminder_minutes);
$("#calendar-delete").disabled = !event;
}
@@ -253,7 +300,8 @@ async function saveCalendarEvent(event) {
status: $("#calendar-status").value || "confirmed",
meeting_url: $("#calendar-meeting-url").value.trim() || null,
color: $("#calendar-color").value || null,
reminder_minutes: $("#calendar-reminder").value === "" ? null : Number($("#calendar-reminder").value),
reminder_minutes: reminderSelectValue("#calendar-reminder"),
reminder_extra_minutes: reminderSelectValue("#calendar-reminder-extra"),
};
const payload = id ? base : { ...base, source: "manual", source_uid: null, source_message_uid: null, source_message_folder: null };
try { await request(id ? `/calendar/events/${encodeURIComponent(id)}` : "/calendar/events", { method: id ? "PUT" : "POST", body: JSON.stringify(payload) }); $("#calendar-form").classList.add("hidden"); await loadCalendar(); toast("Event saved"); }