@@ -476,6 +512,94 @@ async function loadSyncStatus() {
iosSyncStatus.textContent = status.message;
}
+async function loadCalendarPrefs() {
+ const wrap = document.getElementById("ios-calendar-prefs-rows");
+ const msg = document.getElementById("ios-calendar-prefs-msg");
+ if (!wrap) return;
+ if (msg) msg.textContent = "";
+ wrap.innerHTML = "Chargement des calendriers…";
+ try {
+ const data = await iosApi("calendar_sources");
+ const rows = data.calendars || [];
+ wrap.innerHTML = "";
+ if (!rows.length) {
+ wrap.innerHTML =
+ "Aucun calendrier détecté. Configure iCloud dans Paramètres puis synchronise.";
+ return;
+ }
+ rows.forEach((row, idx) => {
+ const id = `ios-cal-cb-${idx}`;
+ const rowEl = document.createElement("div");
+ rowEl.className = "ios-cal-pref-row";
+ rowEl.dataset.urlKey = row.url_key;
+
+ const cb = document.createElement("input");
+ cb.type = "checkbox";
+ cb.id = id;
+ cb.checked = row.visible !== false;
+
+ const lab = document.createElement("label");
+ lab.className = "ios-cal-pref-label";
+ lab.htmlFor = id;
+ lab.textContent = row.display || row.url_key;
+
+ const colInp = document.createElement("input");
+ colInp.type = "color";
+ colInp.className = "ios-cal-pref-color";
+ colInp.value = row.color || suggestedColorForKey(row.url_key);
+ colInp.title = "Couleur dans l’agenda";
+
+ const autoBtn = document.createElement("button");
+ autoBtn.type = "button";
+ autoBtn.className = "ios-cal-pref-reset";
+ autoBtn.textContent = "Palette auto";
+ autoBtn.title = "Couleurs HouseHub par défaut (sans teinte iOS)";
+ autoBtn.addEventListener("click", () => {
+ rowEl.dataset.paletteAuto = "1";
+ colInp.disabled = true;
+ colInp.style.opacity = "0.35";
+ });
+
+ rowEl.appendChild(cb);
+ rowEl.appendChild(lab);
+ rowEl.appendChild(colInp);
+ rowEl.appendChild(autoBtn);
+ wrap.appendChild(rowEl);
+ });
+ } catch (e) {
+ wrap.innerHTML = `${escHtml(e.message)}`;
+ }
+}
+
+async function saveCalendarPrefs() {
+ const msg = document.getElementById("ios-calendar-prefs-msg");
+ const wrap = document.getElementById("ios-calendar-prefs-rows");
+ if (!wrap) return;
+ const prefs = {};
+ wrap.querySelectorAll(".ios-cal-pref-row").forEach((rowEl) => {
+ const key = rowEl.dataset.urlKey;
+ if (!key) return;
+ const vis = rowEl.querySelector('input[type="checkbox"]')?.checked === true;
+ const colInp = rowEl.querySelector(".ios-cal-pref-color");
+ let color = null;
+ if (!rowEl.dataset.paletteAuto && colInp && !colInp.disabled) {
+ const v = colInp.value;
+ if (v && /^#[0-9A-Fa-f]{6}$/i.test(v)) {
+ color = v.startsWith("#") ? v.toLowerCase() : `#${v}`.toLowerCase();
+ }
+ }
+ prefs[key] = { visible: vis, color };
+ });
+ try {
+ await iosApi("calendar_prefs", { method: "POST", body: { prefs } });
+ if (msg) msg.textContent = "Préférences enregistrées.";
+ await loadEvents();
+ await loadCalendarPrefs();
+ } catch (e) {
+ if (msg) msg.textContent = e.message;
+ }
+}
+
iosForm.addEventListener("submit", async (e) => {
e.preventDefault();
const idStr = document.getElementById("ios-event-id").value.trim();
@@ -505,6 +629,7 @@ document.getElementById("ios-sync-btn")?.addEventListener("click", async () => {
const data = await iosApi("sync", { method: "POST", body: {} });
if (iosSyncStatus) iosSyncStatus.textContent = data.message;
await loadEvents();
+ await loadCalendarPrefs();
} finally {
btn.disabled = false;
}
@@ -558,10 +683,13 @@ document.getElementById("ios-agenda-add")?.addEventListener("click", () => {
document.getElementById("ios-title")?.focus();
});
+document.getElementById("ios-calendar-prefs-save")?.addEventListener("click", () => saveCalendarPrefs());
+
window.addEventListener("DOMContentLoaded", async () => {
try {
iosCursor = new Date();
await loadEvents();
+ await loadCalendarPrefs();
await loadSyncStatus();
showListSection(false);
startNowTimer();