|
|
|
// Define a cache object to store selected option data
|
|
|
|
const selectCache = {};
|
|
|
|
|
|
|
|
// Function to update the cache with the selected option data for a given select element
|
|
|
|
function updateSelectCache(select) {
|
|
|
|
const selectedOption = select.options[select.selectedIndex];
|
|
|
|
const image = selectedOption.getAttribute('data-image');
|
|
|
|
const name = selectedOption.textContent.trim();
|
|
|
|
selectCache[select.id] = { image, name };
|
|
|
|
}
|
|
|
|
|
|
|
|
// Function to set the selected option and associated image and name for a given select element
|
|
|
|
|
|
|
|
|
|
|
|
function setSelectData(select) {
|
|
|
|
const selectedOption = select.options[select.selectedIndex];
|
|
|
|
const image = selectedOption.getAttribute('data-image') || '/static/images/other/coin.png'; // set a default image URL
|
|
|
|
const name = selectedOption.textContent.trim();
|
|
|
|
if (image) {
|
|
|
|
select.style.backgroundImage = `url(${image})`;
|
|
|
|
select.nextElementSibling.querySelector('.select-image').src = image;
|
|
|
|
} else {
|
|
|
|
select.style.backgroundImage = '';
|
|
|
|
select.nextElementSibling.querySelector('.select-image').src = '';
|
|
|
|
}
|
|
|
|
select.nextElementSibling.querySelector('.select-name').textContent = name;
|
|
|
|
updateSelectCache(select);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Function to get the selected option data from cache for a given select element
|
|
|
|
function getSelectData(select) {
|
|
|
|
return selectCache[select.id] || {};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Update all custom select elements on the page
|
|
|
|
const selects = document.querySelectorAll('.custom-select .select');
|
|
|
|
selects.forEach((select) => {
|
|
|
|
// Set the initial select data based on the cached data (if available) or the selected option (if any)
|
|
|
|
const cachedData = getSelectData(select);
|
|
|
|
if (cachedData.image) {
|
|
|
|
select.style.backgroundImage = `url(${cachedData.image})`;
|
|
|
|
select.nextElementSibling.querySelector('.select-image').src = cachedData.image;
|
|
|
|
}
|
|
|
|
if (cachedData.name) {
|
|
|
|
select.nextElementSibling.querySelector('.select-name').textContent = cachedData.name;
|
|
|
|
}
|
|
|
|
if (select.selectedIndex >= 0) {
|
|
|
|
setSelectData(select);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add event listener to update select data when an option is selected
|
|
|
|
select.addEventListener('change', () => {
|
|
|
|
setSelectData(select);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
// Hide the select image and name on page load
|
|
|
|
const selectIcons = document.querySelectorAll('.custom-select .select-icon');
|
|
|
|
const selectImages = document.querySelectorAll('.custom-select .select-image');
|
|
|
|
const selectNames = document.querySelectorAll('.custom-select .select-name');
|
|
|
|
selectIcons.forEach((icon) => {
|
|
|
|
icon.style.display = 'none';
|
|
|
|
});
|
|
|
|
selectImages.forEach((image) => {
|
|
|
|
image.style.display = 'none';
|
|
|
|
});
|
|
|
|
selectNames.forEach((name) => {
|
|
|
|
name.style.display = 'none';
|
|
|
|
});
|