diff --git a/static/app.js b/static/app.js index a53598c..84dadee 100644 --- a/static/app.js +++ b/static/app.js @@ -136,6 +136,57 @@ $("#saved-charts").addEventListener("change", (e) => { }); fillSaved(); +/* ---------------- layer toggles ---------------- */ +const LAYER_GROUPS = { + chiron: ["Chiron"], + asteroids: ["Ceres", "Pallas", "Juno", "Vesta"], + nodes: ["North Node", "South Node"], + lilith: ["Lilith"], + fortune: ["Part of Fortune"], +}; +const LAYER_IDS = ["chiron", "asteroids", "nodes", "lilith", "fortune", "minor"]; + +function layerState() { + const st = {}; + LAYER_IDS.forEach((k) => (st[k] = $("#ly-" + k).checked)); + return st; +} +function hiddenBodies() { + const st = layerState(); + const hidden = new Set(); + for (const [k, names] of Object.entries(LAYER_GROUPS)) { + if (!st[k]) names.forEach((n) => hidden.add(n)); + } + return hidden; +} +function filterChart(d) { + const hidden = hiddenBodies(); + const showMinor = layerState().minor; + return { + ...d, + bodies: d.bodies.filter((b) => !hidden.has(b.name)), + aspects: d.aspects.filter((a) => !hidden.has(a.a) && !hidden.has(a.b) && (showMinor || a.major)), + parallels: d.parallels.filter((p) => !hidden.has(p.a) && !hidden.has(p.b)), + interpretation: (d.interpretation || []).map((sec) => ({ + ...sec, + items: sec.items.filter((it) => ![...hidden].some((n) => it.title.includes(n))), + })), + }; +} +(function initLayers() { + let saved = {}; + try { saved = JSON.parse(localStorage.getItem("nategodd-layers") || "{}"); } catch {} + LAYER_IDS.forEach((k) => { if (k in saved) $("#ly-" + k).checked = saved[k]; }); + LAYER_IDS.forEach((k) => + $("#ly-" + k).addEventListener("change", () => { + try { localStorage.setItem("nategodd-layers", JSON.stringify(layerState())); } catch {} + if (lastChart) render(lastChart, true); + if (lastSyn && !$("#syn-results").hidden) renderSynastry(lastSyn, false); + }) + ); +})(); +let lastSyn = null; + /* ---------------- tabs ---------------- */ document.querySelectorAll("#tabs button").forEach((b) => b.addEventListener("click", () => { @@ -148,22 +199,25 @@ document.querySelectorAll("#tabs button").forEach((b) => $("#print-btn").addEventListener("click", () => window.print()); /* ---------------- render ---------------- */ -function render(d) { +function render(d, rerender = false) { $("#results").hidden = false; const inp = d.input; + const f = filterChart(d); $("#chart-header").innerHTML = `
${inp.date}${inp.time ? " · " + inp.time + " local" : " · time unknown (solar chart)"} · ${esc(inp.place)} · ${inp.lat.toFixed(3)}°, ${inp.lon.toFixed(3)}° · TZ ${esc(String(inp.tz))} (UTC${inp.utc_offset >= 0 ? "+" : ""}${inp.utc_offset}) · ${d.house_system} houses · ${d.is_day_chart ? "Day" : "Night"} chart
`; - drawWheel(d); + drawWheel(f); renderBalances(d); - renderPositions(d); - renderAspects(d); - renderReport(d); - fillSynPartners(); - $("#syn-results").hidden = true; - $("#results").scrollIntoView({ behavior: "smooth" }); + renderPositions(f); + renderAspects(f); + renderReport(f); + if (!rerender) { + fillSynPartners(); + $("#syn-results").hidden = true; + $("#results").scrollIntoView({ behavior: "smooth" }); + } } function esc(s) { return String(s ?? "").replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ }[c])); } @@ -457,7 +511,20 @@ $("#syn-go").addEventListener("click", async () => { } }); -function renderSynastry(d) { +function renderSynastry(d0, scroll = true) { + lastSyn = d0; + const hidden = hiddenBodies(); + const showMinor = layerState().minor; + const d = { + ...d0, + chart_a: { ...d0.chart_a, bodies: d0.chart_a.bodies.filter((b) => !hidden.has(b.name)) }, + chart_b: { ...d0.chart_b, bodies: d0.chart_b.bodies.filter((b) => !hidden.has(b.name)) }, + interaspects: d0.interaspects.filter((x) => !hidden.has(x.a) && !hidden.has(x.b) && (showMinor || x.major)), + interpretation: d0.interpretation.map((sec) => ({ + ...sec, + items: sec.items.filter((it) => ![...hidden].some((n) => it.title.includes(n))), + })), + }; $("#syn-results").hidden = false; const sc = d.scores; const nameA = d.chart_a.input.name || "Chart A"; @@ -498,7 +565,7 @@ function renderSynastry(d) { r += ""; }); $("#syn-report").innerHTML = r; - $("#syn-results").scrollIntoView({ behavior: "smooth" }); + if (scroll) $("#syn-results").scrollIntoView({ behavior: "smooth" }); } $("#syn-print").addEventListener("click", () => window.print()); diff --git a/static/index.html b/static/index.html index 9ca8317..a0c3765 100644 --- a/static/index.html +++ b/static/index.html @@ -72,6 +72,16 @@ +