Beta-2.1 - The clearer, the faster #22
@ -11,107 +11,37 @@ function hideLoader() {
|
|||||||
if (loader) loader.classList.remove("active");
|
if (loader) loader.classList.remove("active");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- Generic upload handler ---
|
||||||
// --- Upload gallery images ---
|
function setupUpload(inputId, apiUrl, loaderText, successMsg, refreshFn) {
|
||||||
const galleryInput = document.getElementById('upload-gallery');
|
const input = document.getElementById(inputId);
|
||||||
if (galleryInput) {
|
if (!input) return;
|
||||||
galleryInput.addEventListener('change', async (e) => {
|
input.addEventListener('change', async (e) => {
|
||||||
const files = e.target.files;
|
const files = e.target.files;
|
||||||
if (!files.length) return;
|
if (!files.length) return;
|
||||||
showLoader("Uploading photos...");
|
showLoader(loaderText);
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
for (const file of files) formData.append('files', file);
|
for (const file of files) formData.append('files', file);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await fetch('/api/gallery/upload', { method: 'POST', body: formData });
|
const res = await fetch(apiUrl, { method: 'POST', body: formData });
|
||||||
const data = await res.json();
|
const data = await res.json();
|
||||||
hideLoader();
|
hideLoader();
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
showToast(`✅ ${data.uploaded.length} gallery image(s) uploaded!`, "success");
|
showToast(`✅ ${data.uploaded.length} ${successMsg}`, "success");
|
||||||
if (typeof refreshGallery === "function") refreshGallery();
|
if (typeof refreshFn === "function") refreshFn();
|
||||||
} else showToast('Error: ' + data.error, "error");
|
} else showToast('Error: ' + data.error, "error");
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
hideLoader();
|
hideLoader();
|
||||||
console.error(err);
|
console.error(err);
|
||||||
showToast('Server error!', "error");
|
showToast('Server error!', "error");
|
||||||
} finally { e.target.value = ''; }
|
} finally {
|
||||||
|
e.target.value = '';
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Upload hero images ---
|
// --- Setup all upload inputs ---
|
||||||
const heroInput = document.getElementById('upload-hero');
|
setupUpload('upload-gallery', '/api/gallery/upload', "Uploading photos...", "gallery image(s) uploaded!", refreshGallery);
|
||||||
if (heroInput) {
|
setupUpload('upload-hero', '/api/hero/upload', "Uploading hero photos...", "hero image(s) uploaded!", refreshHero);
|
||||||
heroInput.addEventListener('change', async (e) => {
|
setupUpload('upload-gallery-bottom', '/api/gallery/upload', "Uploading photos...", "gallery image(s) uploaded!", refreshGallery);
|
||||||
const files = e.target.files;
|
setupUpload('upload-hero-bottom', '/api/hero/upload', "Uploading hero photos...", "hero image(s) uploaded!", refreshHero);
|
||||||
if (!files.length) return;
|
|
||||||
showLoader("Uploading hero photos...");
|
|
||||||
const formData = new FormData();
|
|
||||||
for (const file of files) formData.append('files', file);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const res = await fetch('/api/hero/upload', { method: 'POST', body: formData });
|
|
||||||
const data = await res.json();
|
|
||||||
hideLoader();
|
|
||||||
if (res.ok) {
|
|
||||||
showToast(`✅ ${data.uploaded.length} hero image(s) uploaded!`, "success");
|
|
||||||
if (typeof refreshHero === "function") refreshHero();
|
|
||||||
} else showToast('Error: ' + data.error, "error");
|
|
||||||
} catch(err) {
|
|
||||||
hideLoader();
|
|
||||||
console.error(err);
|
|
||||||
showToast('Server error!', "error");
|
|
||||||
} finally { e.target.value = ''; }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Upload gallery images (bottom button) ---
|
|
||||||
const galleryInputBottom = document.getElementById('upload-gallery-bottom');
|
|
||||||
if (galleryInputBottom) {
|
|
||||||
galleryInputBottom.addEventListener('change', async (e) => {
|
|
||||||
const files = e.target.files;
|
|
||||||
if (!files.length) return;
|
|
||||||
showLoader("Uploading photos...");
|
|
||||||
const formData = new FormData();
|
|
||||||
for (const file of files) formData.append('files', file);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const res = await fetch('/api/gallery/upload', { method: 'POST', body: formData });
|
|
||||||
const data = await res.json();
|
|
||||||
hideLoader();
|
|
||||||
if (res.ok) {
|
|
||||||
showToast(`✅ ${data.uploaded.length} gallery image(s) uploaded!`, "success");
|
|
||||||
if (typeof refreshGallery === "function") refreshGallery();
|
|
||||||
} else showToast('Error: ' + data.error, "error");
|
|
||||||
} catch(err) {
|
|
||||||
hideLoader();
|
|
||||||
console.error(err);
|
|
||||||
showToast('Server error!', "error");
|
|
||||||
} finally { e.target.value = ''; }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Upload hero images (bottom button) ---
|
|
||||||
const heroInputBottom = document.getElementById('upload-hero-bottom');
|
|
||||||
if (heroInputBottom) {
|
|
||||||
heroInputBottom.addEventListener('change', async (e) => {
|
|
||||||
const files = e.target.files;
|
|
||||||
if (!files.length) return;
|
|
||||||
showLoader("Uploading hero photos...");
|
|
||||||
const formData = new FormData();
|
|
||||||
for (const file of files) formData.append('files', file);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const res = await fetch('/api/hero/upload', { method: 'POST', body: formData });
|
|
||||||
const data = await res.json();
|
|
||||||
hideLoader();
|
|
||||||
if (res.ok) {
|
|
||||||
showToast(`✅ ${data.uploaded.length} hero image(s) uploaded!`, "success");
|
|
||||||
if (typeof refreshHero === "function") refreshHero();
|
|
||||||
} else showToast('Error: ' + data.error, "error");
|
|
||||||
} catch(err) {
|
|
||||||
hideLoader();
|
|
||||||
console.error(err);
|
|
||||||
showToast('Server error!', "error");
|
|
||||||
} finally { e.target.value = ''; }
|
|
||||||
});
|
|
||||||
}
|
|
Reference in New Issue
Block a user