forked from UKSOURCE/cms.hailearning.edu.vn
feat: implement user authentication with database integration
This commit is contained in:
256
public/js/home-form-handler.js
Normal file
256
public/js/home-form-handler.js
Normal file
@@ -0,0 +1,256 @@
|
||||
// Home Form Handler - Convert form inputs to JSON before submission
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const form = document.querySelector('form[action="/admin/home/update"]');
|
||||
if (!form) return;
|
||||
|
||||
form.addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
try {
|
||||
// Hero
|
||||
const heroData = {
|
||||
title: document.getElementById('heroTitle')?.value || '',
|
||||
subtitle: document.getElementById('heroSubtitle')?.value || '',
|
||||
description: document.getElementById('heroDescription')?.value || '',
|
||||
primaryButton: {
|
||||
label: document.getElementById('heroPrimaryButtonLabel')?.value || '',
|
||||
href: document.getElementById('heroPrimaryButtonHref')?.value || '',
|
||||
},
|
||||
secondaryButton: {
|
||||
label: document.getElementById('heroSecondaryButtonLabel')?.value || '',
|
||||
href: document.getElementById('heroSecondaryButtonHref')?.value || '',
|
||||
},
|
||||
backgroundImage: document.getElementById('heroBackgroundImage')?.value || '',
|
||||
videoUrl: document.getElementById('heroVideoUrl')?.value || '',
|
||||
};
|
||||
document.getElementById('heroJson').value = JSON.stringify(heroData);
|
||||
|
||||
// Why Choose Us
|
||||
const whyChooseUsItems = [];
|
||||
let index = 0;
|
||||
while (document.getElementById(`whyChooseUsIcon_${index}`)) {
|
||||
whyChooseUsItems.push({
|
||||
icon: document.getElementById(`whyChooseUsIcon_${index}`)?.value || '',
|
||||
title: document.getElementById(`whyChooseUsTitle_${index}`)?.value || '',
|
||||
description: document.getElementById(`whyChooseUsItemDescription_${index}`)?.value || '',
|
||||
});
|
||||
index++;
|
||||
}
|
||||
|
||||
const whyChooseUsFeatures = [];
|
||||
index = 0;
|
||||
while (document.getElementById(`whyChooseUsFeature_${index}`)) {
|
||||
const feature = document.getElementById(`whyChooseUsFeature_${index}`)?.value;
|
||||
if (feature) whyChooseUsFeatures.push(feature);
|
||||
index++;
|
||||
}
|
||||
|
||||
const whyChooseUsData = {
|
||||
heading: document.getElementById('whyChooseUsHeading')?.value || '',
|
||||
subheading: document.getElementById('whyChooseUsSubheading')?.value || '',
|
||||
description: document.getElementById('whyChooseUsDescription')?.value || '',
|
||||
items: whyChooseUsItems,
|
||||
features: whyChooseUsFeatures,
|
||||
ctaButton: {
|
||||
label: document.getElementById('whyChooseUsCtaLabel')?.value || '',
|
||||
href: document.getElementById('whyChooseUsCtaHref')?.value || '',
|
||||
},
|
||||
};
|
||||
document.getElementById('whyChooseUsJson').value = JSON.stringify(whyChooseUsData);
|
||||
|
||||
// Visa Solutions
|
||||
const visaSolutionsItems = [];
|
||||
index = 0;
|
||||
while (document.getElementById(`visaSolutionsNumber_${index}`)) {
|
||||
visaSolutionsItems.push({
|
||||
number: document.getElementById(`visaSolutionsNumber_${index}`)?.value || '',
|
||||
title: document.getElementById(`visaSolutionsTitle_${index}`)?.value || '',
|
||||
description: document.getElementById(`visaSolutionsDescription_${index}`)?.value || '',
|
||||
link: document.getElementById(`visaSolutionsLink_${index}`)?.value || '',
|
||||
});
|
||||
index++;
|
||||
}
|
||||
|
||||
const visaSolutionsData = {
|
||||
heading: document.getElementById('visaSolutionsHeading')?.value || '',
|
||||
subheading: document.getElementById('visaSolutionsSubheading')?.value || '',
|
||||
items: visaSolutionsItems,
|
||||
};
|
||||
document.getElementById('visaSolutionsJson').value = JSON.stringify(visaSolutionsData);
|
||||
|
||||
// Visa Countries
|
||||
const visaCountriesItems = [];
|
||||
index = 0;
|
||||
while (document.getElementById(`visaCountriesName_${index}`)) {
|
||||
const visaTypesStr = document.getElementById(`visaCountriesVisaTypes_${index}`)?.value || '';
|
||||
const visaTypes = visaTypesStr.split(',').map(v => v.trim()).filter(v => v);
|
||||
|
||||
visaCountriesItems.push({
|
||||
name: document.getElementById(`visaCountriesName_${index}`)?.value || '',
|
||||
code: document.getElementById(`visaCountriesCode_${index}`)?.value || '',
|
||||
flag: document.getElementById(`visaCountriesFlag_${index}`)?.value || '',
|
||||
link: document.getElementById(`visaCountriesLink_${index}`)?.value || '',
|
||||
visaTypes: visaTypes,
|
||||
});
|
||||
index++;
|
||||
}
|
||||
|
||||
const visaCountriesData = {
|
||||
heading: document.getElementById('visaCountriesHeading')?.value || '',
|
||||
subheading: document.getElementById('visaCountriesSubheading')?.value || '',
|
||||
description: document.getElementById('visaCountriesDescription')?.value || '',
|
||||
countries: visaCountriesItems,
|
||||
ctaButton: {
|
||||
label: document.getElementById('visaCountriesCtaLabel')?.value || '',
|
||||
href: document.getElementById('visaCountriesCtaHref')?.value || '',
|
||||
},
|
||||
};
|
||||
document.getElementById('visaCountriesJson').value = JSON.stringify(visaCountriesData);
|
||||
|
||||
// Testimonials
|
||||
const testimonialsItems = [];
|
||||
index = 0;
|
||||
while (document.getElementById(`testimonialsName_${index}`)) {
|
||||
testimonialsItems.push({
|
||||
name: document.getElementById(`testimonialsName_${index}`)?.value || '',
|
||||
role: document.getElementById(`testimonialsRole_${index}`)?.value || '',
|
||||
country: document.getElementById(`testimonialsCountry_${index}`)?.value || '',
|
||||
rating: parseInt(document.getElementById(`testimonialsRating_${index}`)?.value || 5),
|
||||
comment: document.getElementById(`testimonialsComment_${index}`)?.value || '',
|
||||
avatar: document.getElementById(`testimonialsAvatar_${index}`)?.value || '',
|
||||
});
|
||||
index++;
|
||||
}
|
||||
|
||||
const testimonialsData = {
|
||||
heading: document.getElementById('testimonialsHeading')?.value || '',
|
||||
subheading: document.getElementById('testimonialsSubheading')?.value || '',
|
||||
videoUrl: document.getElementById('testimonialsVideoUrl')?.value || '',
|
||||
videoThumbnail: document.getElementById('testimonialsVideoThumbnail')?.value || '',
|
||||
items: testimonialsItems,
|
||||
};
|
||||
document.getElementById('testimonialsJson').value = JSON.stringify(testimonialsData);
|
||||
|
||||
// Video Gallery
|
||||
const videoGalleryData = {
|
||||
heading: document.getElementById('videoGalleryHeading')?.value || '',
|
||||
videoUrl: document.getElementById('videoGalleryVideoUrl')?.value || '',
|
||||
thumbnail: document.getElementById('videoGalleryThumbnail')?.value || '',
|
||||
};
|
||||
document.getElementById('videoGalleryJson').value = JSON.stringify(videoGalleryData);
|
||||
|
||||
// FAQ
|
||||
const faqItems = [];
|
||||
index = 0;
|
||||
while (document.getElementById(`faqQuestion_${index}`)) {
|
||||
faqItems.push({
|
||||
question: document.getElementById(`faqQuestion_${index}`)?.value || '',
|
||||
answer: document.getElementById(`faqAnswer_${index}`)?.value || '',
|
||||
});
|
||||
index++;
|
||||
}
|
||||
|
||||
const faqData = {
|
||||
heading: document.getElementById('faqHeading')?.value || '',
|
||||
subheading: document.getElementById('faqSubheading')?.value || '',
|
||||
description: document.getElementById('faqDescription')?.value || '',
|
||||
ctaButton: {
|
||||
label: document.getElementById('faqCtaLabel')?.value || '',
|
||||
href: document.getElementById('faqCtaHref')?.value || '',
|
||||
},
|
||||
items: faqItems,
|
||||
};
|
||||
document.getElementById('faqJson').value = JSON.stringify(faqData);
|
||||
|
||||
// Achievements
|
||||
const achievementsItems = [];
|
||||
index = 0;
|
||||
while (document.getElementById(`achievementsValue_${index}`)) {
|
||||
achievementsItems.push({
|
||||
value: document.getElementById(`achievementsValue_${index}`)?.value || '',
|
||||
suffix: document.getElementById(`achievementsSuffix_${index}`)?.value || '',
|
||||
label: document.getElementById(`achievementsLabel_${index}`)?.value || '',
|
||||
description: document.getElementById(`achievementsDescription_${index}`)?.value || '',
|
||||
});
|
||||
index++;
|
||||
}
|
||||
|
||||
const achievementsData = {
|
||||
heading: document.getElementById('achievementsHeading')?.value || '',
|
||||
subheading: document.getElementById('achievementsSubheading')?.value || '',
|
||||
items: achievementsItems,
|
||||
};
|
||||
document.getElementById('achievementsJson').value = JSON.stringify(achievementsData);
|
||||
|
||||
// Partners
|
||||
const visaConsultancyItems = [];
|
||||
document.querySelectorAll('.visa-consultancy-item').forEach((item) => {
|
||||
const name = item.querySelector('.visa-consultancy-name')?.value || '';
|
||||
const icon = item.querySelector('.visa-consultancy-icon')?.value || '';
|
||||
const year = item.querySelector('.visa-consultancy-year')?.value || '';
|
||||
|
||||
if (name || icon || year) {
|
||||
visaConsultancyItems.push({ name, icon, year });
|
||||
}
|
||||
});
|
||||
|
||||
const brandItems = [];
|
||||
document.querySelectorAll('.brand-item').forEach((item) => {
|
||||
const logo = item.querySelector('.brand-logo')?.value || '';
|
||||
if (logo) {
|
||||
brandItems.push({ logo });
|
||||
}
|
||||
});
|
||||
|
||||
const partnersData = {
|
||||
visaConsultancy: {
|
||||
heading: document.getElementById('partnersVisaConsultancyHeading')?.value || '',
|
||||
items: visaConsultancyItems,
|
||||
},
|
||||
brands: {
|
||||
items: brandItems,
|
||||
},
|
||||
};
|
||||
|
||||
document.getElementById('partnersJson').value = JSON.stringify(partnersData);
|
||||
|
||||
// Blog Preview
|
||||
const blogPreviewItems = [];
|
||||
index = 0;
|
||||
while (document.getElementById(`blogPreviewTitle_${index}`)) {
|
||||
blogPreviewItems.push({
|
||||
title: document.getElementById(`blogPreviewTitle_${index}`)?.value || '',
|
||||
excerpt: document.getElementById(`blogPreviewExcerpt_${index}`)?.value || '',
|
||||
category: document.getElementById(`blogPreviewCategory_${index}`)?.value || '',
|
||||
date: document.getElementById(`blogPreviewDate_${index}`)?.value || '',
|
||||
author: {
|
||||
name: document.getElementById(`blogPreviewAuthorName_${index}`)?.value || '',
|
||||
avatar: document.getElementById(`blogPreviewAuthorAvatar_${index}`)?.value || '',
|
||||
},
|
||||
comments: parseInt(document.getElementById(`blogPreviewComments_${index}`)?.value || 0),
|
||||
link: document.getElementById(`blogPreviewLink_${index}`)?.value || '',
|
||||
thumbnail: document.getElementById(`blogPreviewThumbnail_${index}`)?.value || '',
|
||||
});
|
||||
index++;
|
||||
}
|
||||
|
||||
const blogPreviewData = {
|
||||
heading: document.getElementById('blogPreviewHeading')?.value || '',
|
||||
subheading: document.getElementById('blogPreviewSubheading')?.value || '',
|
||||
ctaButton: {
|
||||
label: document.getElementById('blogPreviewCtaLabel')?.value || '',
|
||||
href: document.getElementById('blogPreviewCtaHref')?.value || '',
|
||||
},
|
||||
items: blogPreviewItems,
|
||||
};
|
||||
document.getElementById('blogPreviewJson').value = JSON.stringify(blogPreviewData);
|
||||
|
||||
console.log('All JSON data prepared, submitting form...');
|
||||
// Submit form
|
||||
form.submit();
|
||||
} catch (error) {
|
||||
console.error('Error processing form:', error);
|
||||
alert('Error processing form. Please check console for details.');
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user