131 lines
3.5 KiB
JavaScript
131 lines
3.5 KiB
JavaScript
const recipeId = document.getElementById('recipe-id').textContent;
|
|
const toggleBtn = document.getElementById('day-select');
|
|
const dropdown = document.getElementById('custom-select-dropdown');
|
|
|
|
toggleBtn.addEventListener('click', () => {
|
|
dropdown.classList.toggle('hidden');
|
|
});
|
|
|
|
document.addEventListener('click', (e) => {
|
|
if (!dropdown.contains(e.target) && !toggleBtn.contains(e.target)) {
|
|
dropdown.classList.add('hidden');
|
|
}
|
|
});
|
|
|
|
|
|
|
|
const options = document.querySelectorAll('.dropdown-item');
|
|
|
|
options.forEach(option => {
|
|
option.addEventListener('click', async (e) => {
|
|
const selectedValue = option.getAttribute('data-value');
|
|
|
|
options.forEach(opt => opt.classList.remove('dropdown-selected'));
|
|
|
|
const formData = new FormData();
|
|
formData.append('action', 'usermenu');
|
|
formData.append('recipe_id', recipeId);
|
|
formData.append('dayofweek', selectedValue);
|
|
|
|
const response = await fetch('/ajax', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
const json = await response.json();
|
|
|
|
if (!response.ok) {
|
|
const message = json.error;
|
|
showToastify(message, 'error');
|
|
return;
|
|
}
|
|
|
|
|
|
if (selectedValue === 'remove') {
|
|
toggleBtn.textContent = 'Add to list';
|
|
} else {
|
|
toggleBtn.textContent = option.textContent;
|
|
option.classList.add('dropdown-selected');
|
|
}
|
|
|
|
dropdown.classList.add('hidden');
|
|
|
|
showToastify(json.success, 'success');
|
|
});
|
|
});
|
|
|
|
const qrContainer = document.getElementById("qrcode");
|
|
const downloadLink = document.getElementById("downloadLink");
|
|
const qrBtn = document.getElementById("qr-btn");
|
|
const qrPopup = document.querySelector(".qr-popup");
|
|
const overlay = document.getElementById('overlay');
|
|
|
|
qrBtn.addEventListener("click", () => {
|
|
|
|
qrPopup.classList.toggle("hidden")
|
|
overlay.classList.toggle("hidden")
|
|
|
|
qrContainer.innerHTML = "";
|
|
|
|
|
|
new QRCode(qrContainer, {
|
|
text: window.location.href,
|
|
width: 200,
|
|
height: 200
|
|
});
|
|
|
|
|
|
setTimeout(() => {
|
|
const qrImg = qrContainer.querySelector("img");
|
|
if (qrImg) {
|
|
downloadLink.href = qrImg.src;
|
|
}
|
|
}, 500);
|
|
});
|
|
|
|
document.addEventListener('click', (e) => {
|
|
if (!qrPopup.contains(e.target) && !qrBtn.contains(e.target)) {
|
|
qrPopup.classList.add("hidden");
|
|
overlay.classList.add("hidden");
|
|
}
|
|
});
|
|
|
|
const favoriteBtn = document.getElementById('favorite-btn');
|
|
const favoriteIcon = favoriteBtn.querySelector('i');
|
|
|
|
|
|
favoriteBtn.addEventListener('click', async (e) => {
|
|
const isFavorite = favoriteBtn.classList.contains('active');
|
|
const type = isFavorite ? 'remove' : 'add';
|
|
|
|
const formData = new FormData();
|
|
formData.append('action', 'favorites');
|
|
formData.append('recipe_id', recipeId);
|
|
formData.append('type', type);
|
|
|
|
favoriteBtn.disabled = true;
|
|
const response = await fetch('/ajax', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
favoriteBtn.disabled = false;
|
|
|
|
const json = await response.json();
|
|
|
|
if (!response.ok) {
|
|
const message = json.error;
|
|
showToastify(message, 'error');
|
|
return;
|
|
}
|
|
favoriteBtn.classList.toggle('active');
|
|
|
|
if (type == 'add') {
|
|
favoriteIcon.classList.remove('fa-regular');
|
|
favoriteIcon.classList.add('fa-solid');
|
|
} else {
|
|
favoriteIcon.classList.add('fa-regular');
|
|
favoriteIcon.classList.remove('fa-solid');
|
|
}
|
|
|
|
showToastify(json.success, 'success');
|
|
}); |