// Zapamiętana interpretacja natalna (PRE-23). // // Odpowiednik predictions.js, tylko że natalna jest JEDNA — dotyczy momentu // urodzenia, nie wybranego okresu. Ponowne wygenerowanie podmienia poprzednią. // // Po co magazyn: zakładka „Skompiluj" składa raport z trzech kawałków liczonych // w różnych miejscach (horoskop, interpretacja natalna, predykcje okresowe). // Bez zapamiętania trzeba by je generować od nowa na jednej stronie. // // localStorage, tak jak reszta stanu (PRE-21/22) — serwer zostaje bezstanowy. (function () { 'use strict'; var KEY = 'astrololo.natal.v1'; function read() { try { var v = JSON.parse(localStorage.getItem(KEY) || 'null'); return (v && typeof v === 'object' && v.text) ? v : null; } catch (e) { return null; // uszkodzony wpis nie może zablokować strony } } function clear() { try { localStorage.removeItem(KEY); } catch (e) { /* trudno */ } } function val(sel) { var el = document.querySelector(sel); return el ? el.value.trim() : ''; } function save() { var text = val('#horoscopeText'); if (!text) return false; // nie ma czego zapamiętać var entry = { text: text, person: val('input[name=person]'), date: val('input[name=date]'), time: val('input[name=time]'), tz_offset: val('input[name=tz_offset]'), lat: val('input[name=lat]'), lon: val('input[name=lon]'), saved_at: new Date().toISOString() }; try { localStorage.setItem(KEY, JSON.stringify(entry)); return true; } catch (e) { return false; // przepełniony magazyn — zgłaszamy wyżej } } function note(msg) { var el = document.getElementById('natalNote'); if (el) el.textContent = msg; } function saveCurrent() { var text = val('#horoscopeText'); if (!text) return; if (save()) { note('Interpretacja natalna zapamiętana — trafi do raportu (zakładka Skompiluj).'); } else { // Interpretacje bywają długie; cicha strata byłaby najgorsza. note('Nie udało się zapamiętać — magazyn przeglądarki pełny. ' + 'Usuń starsze predykcje i spróbuj ponownie.'); } } function ready(fn) { if (document.readyState !== 'loading') fn(); else document.addEventListener('DOMContentLoaded', fn); } ready(function () { if (!document.getElementById('natalNote')) return; // nie ta zakładka // 1) interpretacja policzona przez okno postępu (strumień) document.addEventListener('astrololo:horoscope', function (e) { if (!e.detail || e.detail.profile === 'natal') saveCurrent(); }); // 2) wariant bez strumienia: strona wróciła z gotowym wynikiem po zwykłym // POST. Zapis nadpisuje jeden slot, więc odświeżenie niczego nie mnoży. if (document.querySelector('#horoscopeText')) saveCurrent(); var status = read(); if (status) { note('W raporcie jest zapamiętana interpretacja natalna z ' + String(status.saved_at).slice(0, 10) + '.'); } }); window.astrololoNatal = { read: read, clear: clear, key: KEY }; })();