Files
TaroTime/app/ui-section-state.js

287 lines
8.5 KiB
JavaScript
Raw Normal View History

2026-03-07 05:17:50 -08:00
(function () {
"use strict";
const VALID_SECTIONS = new Set([
"home",
2026-03-09 03:07:02 -07:00
"timeline",
2026-03-07 05:17:50 -08:00
"calendar",
"holidays",
"tarot",
"astronomy",
"planets",
"cycles",
"natal",
"elements",
"iching",
"kabbalah",
"kabbalah-tree",
"cube",
"alphabet",
2026-03-09 03:07:02 -07:00
"alphabet-letters",
2026-03-09 23:27:03 -07:00
"alphabet-text",
2026-03-07 05:17:50 -08:00
"numbers",
"zodiac",
"quiz",
"gods",
"enochian"
]);
let activeSection = "home";
let config = {
elements: {},
ensure: {},
getReferenceData: () => null,
getMagickDataset: () => null,
calendarVisualsUi: null,
tarotSpreadUi: null,
settingsUi: null,
homeUi: null,
calendar: null
};
function setHidden(element, hidden) {
if (element) {
element.hidden = hidden;
}
}
function setPressed(element, pressed) {
if (element) {
element.setAttribute("aria-pressed", pressed ? "true" : "false");
}
}
function toggleActive(element, active) {
if (element) {
element.classList.toggle("is-active", active);
}
}
function getReferenceData() {
return config.getReferenceData?.() || null;
}
function getMagickDataset() {
return config.getMagickDataset?.() || null;
}
function renderHomeFallback() {
requestAnimationFrame(() => {
config.calendar?.render?.();
config.calendarVisualsUi?.updateMonthStrip?.();
config.homeUi?.syncNowPanelTheme?.(new Date());
});
}
function setActiveSection(nextSection) {
const normalized = VALID_SECTIONS.has(nextSection) ? nextSection : "home";
activeSection = normalized;
const elements = config.elements || {};
const ensure = config.ensure || {};
const referenceData = getReferenceData();
const magickDataset = getMagickDataset();
const isHomeOpen = activeSection === "home";
2026-03-09 03:07:02 -07:00
const isTimelineOpen = activeSection === "timeline";
2026-03-07 05:17:50 -08:00
const isCalendarOpen = activeSection === "calendar";
const isHolidaysOpen = activeSection === "holidays";
2026-03-09 03:07:02 -07:00
const isCalendarMenuOpen = isTimelineOpen || isCalendarOpen || isHolidaysOpen;
2026-03-07 05:17:50 -08:00
const isTarotOpen = activeSection === "tarot";
const isAstronomyOpen = activeSection === "astronomy";
const isPlanetOpen = activeSection === "planets";
const isCyclesOpen = activeSection === "cycles";
const isNatalOpen = activeSection === "natal";
const isZodiacOpen = activeSection === "zodiac";
const isAstronomyMenuOpen = isAstronomyOpen || isPlanetOpen || isCyclesOpen || isZodiacOpen || isNatalOpen;
const isElementsOpen = activeSection === "elements";
const isIChingOpen = activeSection === "iching";
const isKabbalahOpen = activeSection === "kabbalah";
const isKabbalahTreeOpen = activeSection === "kabbalah-tree";
const isCubeOpen = activeSection === "cube";
const isKabbalahMenuOpen = isKabbalahOpen || isKabbalahTreeOpen || isCubeOpen;
const isAlphabetOpen = activeSection === "alphabet";
2026-03-09 03:07:02 -07:00
const isAlphabetLettersOpen = activeSection === "alphabet-letters";
2026-03-09 23:27:03 -07:00
const isAlphabetTextOpen = activeSection === "alphabet-text";
const isAlphabetMenuOpen = isAlphabetOpen || isAlphabetLettersOpen || isAlphabetTextOpen;
2026-03-07 05:17:50 -08:00
const isNumbersOpen = activeSection === "numbers";
const isQuizOpen = activeSection === "quiz";
const isGodsOpen = activeSection === "gods";
const isEnochianOpen = activeSection === "enochian";
2026-03-09 03:07:02 -07:00
setHidden(elements.timelineSectionEl, !isTimelineOpen);
2026-03-07 05:17:50 -08:00
setHidden(elements.calendarSectionEl, !isCalendarOpen);
setHidden(elements.holidaySectionEl, !isHolidaysOpen);
setHidden(elements.tarotSectionEl, !isTarotOpen);
setHidden(elements.astronomySectionEl, !isAstronomyOpen);
setHidden(elements.planetSectionEl, !isPlanetOpen);
setHidden(elements.cyclesSectionEl, !isCyclesOpen);
setHidden(elements.natalSectionEl, !isNatalOpen);
setHidden(elements.elementsSectionEl, !isElementsOpen);
setHidden(elements.ichingSectionEl, !isIChingOpen);
setHidden(elements.kabbalahSectionEl, !isKabbalahOpen);
setHidden(elements.kabbalahTreeSectionEl, !isKabbalahTreeOpen);
setHidden(elements.cubeSectionEl, !isCubeOpen);
setHidden(elements.alphabetSectionEl, !isAlphabetOpen);
2026-03-09 03:07:02 -07:00
setHidden(elements.alphabetLettersSectionEl, !isAlphabetLettersOpen);
2026-03-09 23:27:03 -07:00
setHidden(elements.alphabetTextSectionEl, !isAlphabetTextOpen);
2026-03-07 05:17:50 -08:00
setHidden(elements.numbersSectionEl, !isNumbersOpen);
setHidden(elements.zodiacSectionEl, !isZodiacOpen);
setHidden(elements.quizSectionEl, !isQuizOpen);
setHidden(elements.godsSectionEl, !isGodsOpen);
setHidden(elements.enochianSectionEl, !isEnochianOpen);
setHidden(elements.nowPanelEl, !isHomeOpen);
2026-03-09 03:07:02 -07:00
setPressed(elements.openHomeEl, isHomeOpen);
2026-03-07 05:17:50 -08:00
setPressed(elements.openCalendarEl, isCalendarMenuOpen);
2026-03-09 03:07:02 -07:00
toggleActive(elements.openCalendarTimelineEl, isTimelineOpen);
2026-03-07 05:17:50 -08:00
toggleActive(elements.openCalendarMonthsEl, isCalendarOpen);
toggleActive(elements.openHolidaysEl, isHolidaysOpen);
setPressed(elements.openTarotEl, isTarotOpen);
config.tarotSpreadUi?.applyViewState?.();
setPressed(elements.openAstronomyEl, isAstronomyMenuOpen);
toggleActive(elements.openPlanetsEl, isPlanetOpen);
toggleActive(elements.openCyclesEl, isCyclesOpen);
setPressed(elements.openElementsEl, isElementsOpen);
setPressed(elements.openIChingEl, isIChingOpen);
setPressed(elements.openKabbalahEl, isKabbalahMenuOpen);
toggleActive(elements.openKabbalahTreeEl, isKabbalahTreeOpen);
toggleActive(elements.openKabbalahCubeEl, isCubeOpen);
2026-03-09 03:07:02 -07:00
setPressed(elements.openAlphabetEl, isAlphabetMenuOpen);
toggleActive(elements.openAlphabetLettersEl, isAlphabetLettersOpen);
2026-03-09 23:27:03 -07:00
toggleActive(elements.openAlphabetTextEl, isAlphabetTextOpen);
2026-03-07 05:17:50 -08:00
setPressed(elements.openNumbersEl, isNumbersOpen);
toggleActive(elements.openZodiacEl, isZodiacOpen);
toggleActive(elements.openNatalEl, isNatalOpen);
setPressed(elements.openQuizEl, isQuizOpen);
setPressed(elements.openGodsEl, isGodsOpen);
setPressed(elements.openEnochianEl, isEnochianOpen);
if (!isHomeOpen) {
config.settingsUi?.closeSettingsPopup?.();
}
2026-03-09 03:07:02 -07:00
if (isTimelineOpen) {
renderHomeFallback();
return;
}
2026-03-07 05:17:50 -08:00
if (isCalendarOpen) {
ensure.ensureCalendarSection?.(referenceData, magickDataset);
return;
}
if (isHolidaysOpen) {
ensure.ensureHolidaySection?.(referenceData, magickDataset);
return;
}
if (isTarotOpen) {
if (typeof config.tarotSpreadUi?.handleSectionActivated === "function") {
config.tarotSpreadUi.handleSectionActivated();
} else {
ensure.ensureTarotSection?.(referenceData, magickDataset);
}
return;
}
if (isPlanetOpen) {
ensure.ensurePlanetSection?.(referenceData, magickDataset);
return;
}
if (isCyclesOpen) {
ensure.ensureCyclesSection?.(referenceData);
return;
}
if (isElementsOpen) {
ensure.ensureElementsSection?.(magickDataset);
return;
}
if (isIChingOpen) {
ensure.ensureIChingSection?.(referenceData);
return;
}
if (isKabbalahOpen || isKabbalahTreeOpen) {
ensure.ensureKabbalahSection?.(magickDataset);
return;
}
if (isCubeOpen) {
ensure.ensureCubeSection?.(magickDataset, referenceData);
return;
}
2026-03-09 03:07:02 -07:00
if (isAlphabetOpen || isAlphabetLettersOpen) {
2026-03-07 05:17:50 -08:00
ensure.ensureAlphabetSection?.(magickDataset, referenceData);
return;
}
2026-03-09 23:27:03 -07:00
if (isAlphabetTextOpen) {
ensure.ensureAlphabetTextSection?.();
return;
}
2026-03-07 05:17:50 -08:00
if (isNumbersOpen) {
ensure.ensureNumbersSection?.();
return;
}
if (isZodiacOpen) {
ensure.ensureZodiacSection?.(referenceData, magickDataset);
return;
}
if (isNatalOpen) {
ensure.ensureNatalPanel?.(referenceData);
return;
}
if (isQuizOpen) {
ensure.ensureQuizSection?.(referenceData, magickDataset);
return;
}
if (isGodsOpen) {
ensure.ensureGodsSection?.(magickDataset, referenceData);
return;
}
if (isEnochianOpen) {
ensure.ensureEnochianSection?.(magickDataset, referenceData);
return;
}
2026-03-09 03:07:02 -07:00
config.homeUi?.syncNowPanelTheme?.(new Date());
2026-03-07 05:17:50 -08:00
}
function getActiveSection() {
return activeSection;
}
function init(nextConfig = {}) {
config = {
...config,
...nextConfig,
elements: {
...(config.elements || {}),
...(nextConfig.elements || {})
},
ensure: {
...(config.ensure || {}),
...(nextConfig.ensure || {})
}
};
}
window.TarotSectionStateUi = {
...(window.TarotSectionStateUi || {}),
init,
getActiveSection,
setActiveSection
};
})();