6c9029c496
build / build (push) Successful in 52s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 11m16s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m57s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 32s
Testy / Kontrola składni wszystkich warstw (push) Failing after 8s
Czwarta wskazowka partnerow. Nowa zakladka sklada w jedno trzy kawalki liczone w roznych miejscach: policzony horoskop, interpretacje natalna z AI i wszystkie zapamietane predykcje okresowe. Uklad sekcji dokladnie wg prosby: imie i nazwisko -> wprowadzone dane -> RYSUNEK kosmogramu -> interpretacja natalna -> predykcje okresowe. Test pilnuje tej kolejnosci, bo to jedyna rzecz, ktora latwo przestawic przy refaktorze, a partnerzy podali ja wprost. Skad material: - HOROSKOP liczymy TU NA NOWO z danych formularza, zamiast go zapamietywac. To czysta funkcja wejscia — tanio powtorzyc, a odpada trzymanie w przegladarce duzego wyniku, ktory moglby sie rozjechac z aktualnym formularzem. - INTERPRETACJA NATALNA — nowy natal.js, odpowiednik predictions.js. Natalna jest JEDNA (dotyczy momentu urodzenia, nie okresu), wiec ponowne wygenerowanie podmienia slot zamiast dokladac wpis. - PREDYKCJE — z magazynu z PRE-22. compile.js czyta magazyny przez ICH API (window.astrololoNatal / astrololoPredictions), a nie siegajac wprost do localStorage — format danych ma jednego wlasciciela: modul, ktory je zapisuje. Test tego pilnuje. Zakladka MOWI, CZEGO BRAKUJE: panel gotowosci z trzema pozycjami i podpowiedzia, na ktorej zakladce uzupelnic. Bez tego uzytkownik zlozylby niekompletny raport i dowiedzialby sie o tym dopiero po otwarciu PDF-a. Tresc od modelu jest ESKEJPOWANA przed wstawieniem do DOM — to tekst z zewnatrz, wiec bez tego mielibysmy wektor wstrzykniecia. Weryfikacja na zywej aplikacji: dwie predykcje zapisane w Kalendarzu, natalna w Interpretacjach, obie odczytane na Skompiluj (panel: brak horoskopu na zolto, dwa pozostale na zielono). Po zlozeniu wszystkie trzy zielone, a raport zaczyna sie od „Jan Kowalski" i danych wejsciowych. Kolejnosc sekcji sprawdzona na wyrenderowanym HTML: naglowek 2931 < dane 3033 < kosmogram 3158 < natalna 26544 < predykcje 26575. Testy: 16 nowych. Poprawione tez trzy wlasne testy, ktore lapaly nazwy plikow w KOMENTARZACH zamiast w tagach skryptow. Calosc: prezentacja 117 passed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
// 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 };
|
|
})();
|