Fixed build section status

This commit is contained in:
Djeex
2025-09-03 10:43:54 +02:00
parent be8ce4f62c
commit 24113a4aa8

View File

@ -292,7 +292,63 @@ document.addEventListener("DOMContentLoaded", () => {
}; };
} }
// --- Fetch theme list and populate select --- // --- Fetch theme list and populate select, then load config and update build status ---
let loadedConfig = {};
function loadConfigAndUpdateBuildStatus() {
fetch("/api/site-info")
.then(res => res.json())
.then(data => {
loadedConfig = data;
// Info
if (infoForm) {
infoForm.elements["info.title"].value = data.info?.title || "";
infoForm.elements["info.subtitle"].value = data.info?.subtitle || "";
infoForm.elements["info.description"].value = data.info?.description || "";
infoForm.elements["info.canonical"].value = data.info?.canonical || "";
infoForm.elements["info.keywords"].value = Array.isArray(data.info?.keywords) ? data.info.keywords.join(", ") : (data.info?.keywords || "");
infoForm.elements["info.author"].value = data.info?.author || "";
}
// Social
if (socialForm) {
socialForm.elements["social.instagram_url"].value = data.social?.instagram_url || "";
if (thumbnailInput) thumbnailInput.value = data.social?.thumbnail || "";
updateThumbnailPreview(data.social?.thumbnail ? `/photos/${data.social.thumbnail}?t=${Date.now()}` : "");
}
// Menu
menuItems = Array.isArray(data.menu?.items) ? data.menu.items : [];
renderMenuItems();
// Footer
if (footerForm) {
footerForm.elements["footer.copyright"].value = data.footer?.copyright || "";
footerForm.elements["footer.legal_label"].value = data.footer?.legal_label || "";
}
// Legals
ipParagraphs = Array.isArray(data.legals?.intellectual_property)
? data.legals.intellectual_property
: [];
renderIpParagraphs();
if (legalsForm) {
legalsForm.elements["legals.hoster_name"].value = data.legals?.hoster_name || "";
legalsForm.elements["legals.hoster_address"].value = data.legals?.hoster_address || "";
legalsForm.elements["legals.hoster_contact"].value = data.legals?.hoster_contact || "";
}
// Build
if (themeSelect) {
themeSelect.value = data.build?.theme || "";
}
if (convertImagesCheckbox) {
convertImagesCheckbox.checked = !!data.build?.convert_images;
}
if (resizeImagesCheckbox) {
resizeImagesCheckbox.checked = !!data.build?.resize_images;
}
// Initial status update for all sections except build
["info", "social", "menu", "footer", "legals"].forEach(updateSectionStatus);
// For build, update status after theme select is set
updateSectionStatus("build");
});
}
if (themeSelect) { if (themeSelect) {
fetch("/api/themes") fetch("/api/themes")
.then(res => res.json()) .then(res => res.json())
@ -304,68 +360,14 @@ document.addEventListener("DOMContentLoaded", () => {
option.textContent = theme; option.textContent = theme;
themeSelect.appendChild(option); themeSelect.appendChild(option);
}); });
// Set selected value after loading config // Now load config and update build status after theme select is ready
fetch("/api/site-info") loadConfigAndUpdateBuildStatus();
.then(res => res.json())
.then(data => {
themeSelect.value = data.build?.theme || "";
});
}); });
} else {
// If no theme select, just load config
loadConfigAndUpdateBuildStatus();
} }
// --- Load config from server and populate forms ---
let loadedConfig = {};
fetch("/api/site-info")
.then(res => res.json())
.then(data => {
loadedConfig = data;
// Info
if (infoForm) {
infoForm.elements["info.title"].value = data.info?.title || "";
infoForm.elements["info.subtitle"].value = data.info?.subtitle || "";
infoForm.elements["info.description"].value = data.info?.description || "";
infoForm.elements["info.canonical"].value = data.info?.canonical || "";
infoForm.elements["info.keywords"].value = Array.isArray(data.info?.keywords) ? data.info.keywords.join(", ") : (data.info?.keywords || "");
infoForm.elements["info.author"].value = data.info?.author || "";
}
// Social
if (socialForm) {
socialForm.elements["social.instagram_url"].value = data.social?.instagram_url || "";
if (thumbnailInput) thumbnailInput.value = data.social?.thumbnail || "";
updateThumbnailPreview(data.social?.thumbnail ? `/photos/${data.social.thumbnail}?t=${Date.now()}` : "");
}
// Menu
menuItems = Array.isArray(data.menu?.items) ? data.menu.items : [];
renderMenuItems();
// Footer
if (footerForm) {
footerForm.elements["footer.copyright"].value = data.footer?.copyright || "";
footerForm.elements["footer.legal_label"].value = data.footer?.legal_label || "";
}
// Legals
ipParagraphs = Array.isArray(data.legals?.intellectual_property)
? data.legals.intellectual_property
: [];
renderIpParagraphs();
if (legalsForm) {
legalsForm.elements["legals.hoster_name"].value = data.legals?.hoster_name || "";
legalsForm.elements["legals.hoster_address"].value = data.legals?.hoster_address || "";
legalsForm.elements["legals.hoster_contact"].value = data.legals?.hoster_contact || "";
}
// Build
if (themeSelect) {
themeSelect.value = data.build?.theme || "";
}
if (convertImagesCheckbox) {
convertImagesCheckbox.checked = !!data.build?.convert_images;
}
if (resizeImagesCheckbox) {
resizeImagesCheckbox.checked = !!data.build?.resize_images;
}
// Initial status update
["info", "social", "menu", "footer", "legals", "build"].forEach(updateSectionStatus);
});
// --- Add menu item --- // --- Add menu item ---
if (addMenuBtn) { if (addMenuBtn) {
addMenuBtn.addEventListener("click", () => { addMenuBtn.addEventListener("click", () => {
@ -484,7 +486,7 @@ document.addEventListener("DOMContentLoaded", () => {
values.thumbnail === (config.thumbnail || ""); values.thumbnail === (config.thumbnail || "");
case "menu": case "menu":
return JSON.stringify(normalizeMenuItems(values.items)) === JSON.stringify(normalizeMenuItems(config.items)); return JSON.stringify(normalizeMenuItems(values.items)) === JSON.stringify(normalizeMenuItems(config.items));
case "footer": case "footer":
return values.copyright && values.legal_label && return values.copyright && values.legal_label &&
values.copyright === (config.copyright || "") && values.copyright === (config.copyright || "") &&
values.legal_label === (config.legal_label || ""); values.legal_label === (config.legal_label || "");
@ -531,7 +533,7 @@ document.addEventListener("DOMContentLoaded", () => {
values.intellectual_property.every(ip => ip.paragraph) values.intellectual_property.every(ip => ip.paragraph)
); );
case "build": case "build":
return values.theme; return !!values.theme; // Only check theme is present
default: default:
return true; return true;
} }
@ -540,23 +542,23 @@ document.addEventListener("DOMContentLoaded", () => {
function updateSectionStatus(section) { function updateSectionStatus(section) {
const statusEl = document.querySelector(`#${section}-section .section-status`); const statusEl = document.querySelector(`#${section}-section .section-status`);
if (!statusEl) return; if (!statusEl) return;
if (!isSectionComplete(section)) { if (!isSectionComplete(section)) {
statusEl.innerHTML = "⚠️ Section not yet saved. Please fill required fields"; statusEl.innerHTML = "⚠️ Section not yet saved. Please fill required fields";
statusEl.style.color = "#ffc700"; statusEl.style.color = "#ffc700";
statusEl.style.display = ""; statusEl.style.display = "";
statusEl.style.fontStyle = "normal"; statusEl.style.fontStyle = "normal";
return; return;
}
if (isSectionSaved(section)) {
statusEl.innerHTML = "";
statusEl.style.display = "none";
} else {
statusEl.innerHTML = "⚠️ Section not yet saved";
statusEl.style.color = "#ffc700";
statusEl.style.display = "";
statusEl.style.fontStyle = "normal";
}
} }
if (isSectionSaved(section)) {
statusEl.innerHTML = "";
statusEl.style.display = "none";
} else {
statusEl.innerHTML = "⚠️ Section not yet saved";
statusEl.style.color = "#ffc700";
statusEl.style.display = "";
statusEl.style.fontStyle = "normal";
}
}
// --- Listen for changes in each section --- // --- Listen for changes in each section ---
[ [