Untitled
Anonymous
plain_text
09/28/2026 6:10 AM
9.2 KB
3
Indexable
document.addEventListener('DOMContentLoaded', function () {
var editModal = document.getElementById("edit-modal");
var closeEditBtn = document.querySelector(".close-edit");
// Open Bewerken Modal
document.querySelectorAll('.edit-url-btn').forEach(button => {
button.addEventListener('click', function () {
const listItem = this.closest('li');
document.getElementById('edit-url-id').value = listItem.dataset.id;
document.getElementById('edit-url').value = listItem.querySelector('.url-address').textContent;
document.getElementById('edit-selector').value = listItem.querySelector('.url-selector').textContent;
document.getElementById('edit-title').value = listItem.querySelector('.url-title').textContent;
editModal.style.display = "block";
});
});
if(closeEditBtn) { closeEditBtn.onclick = function () { editModal.style.display = "none"; } }
// Verwerk URL Bewerken rechtstreeks via product.php actie
document.getElementById('edit-url-form').addEventListener('submit', function (event) {
event.preventDefault();
const id = document.getElementById('edit-url-id').value;
const url = document.getElementById('edit-url').value;
const selector = document.getElementById('edit-selector').value;
const title = document.getElementById('edit-title').value;
fetch('product.php?id=<?php echo $product_id; ?>', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ action: 'edit_url', id, url, selector, title })
})
.then(res => res.json())
.then(data => {
if (data.success) {
const listItem = document.querySelector(`li[data-id="${id}"]`);
listItem.querySelector('.url-title').textContent = title;
listItem.querySelector('.url-address').textContent = url;
listItem.querySelector('.url-selector').textContent = selector;
editModal.style.display = 'none';
} else { alert('Error bij bewerken.'); }
});
});
// Verwerk URL Verwijderen rechtstreeks via product.php actie
document.querySelectorAll('.delete-url-btn').forEach(button => {
button.addEventListener('click', function () {
const listItem = this.closest('li');
if (confirm('Are you sure you want to delete this URL?')) {
fetch('product.php?id=<?php echo $product_id; ?>', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ action: 'delete_url', id: listItem.dataset.id })
})
.then(res => res.json())
.then(data => {
if (data.success) {
listItem.remove();
} else {
alert('Error bij verwijderen.');
}
});
}
});
});
// LOGICA VOOR DE PRICE UPDATE SHADOWBOX
const trackerModal = document.getElementById('tracker-modal');
const updateBtn = document.getElementById('update-prices-btn');
const closeTrackerBtn = document.querySelector('.close-tracker');
const modalLoading = document.getElementById('modal-loading');
const modalResults = document.getElementById('modal-results');
if (updateBtn && trackerModal) {
updateBtn.addEventListener('click', function () {
trackerModal.style.display = 'block';
modalLoading.style.display = 'block';
modalResults.style.display = 'none';
modalResults.innerHTML = '';
fetch('product.php?id=<?php echo $product_id; ?>', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ 'update_prices': '1' })
})
.then(response => response.text())
.then(htmlOutput => {
modalLoading.style.display = 'none';
modalResults.style.display = 'block';
modalResults.innerHTML = htmlOutput;
})
.catch(error => {
modalLoading.style.display = 'none';
modalResults.style.display = 'block';
modalResults.innerHTML = '<p style="color:red; font-family:sans-serif;">❌ Er is een serverfout opgetreden.</p>';
});
});
}
if (closeTrackerBtn) {
closeTrackerBtn.onclick = function () {
trackerModal.style.display = 'none';
location.reload();
}
}
window.onclick = function (event) {
if (event.target === editModal) { editModal.style.display = "none"; }
if (event.target === trackerModal) { trackerModal.style.display = "none"; location.reload(); }
}
// CHART.JS GRAFIEK INITIALISATIE
const ctx = document.getElementById('priceChart').getContext('2d');
const priceData = <?php echo json_encode($prices); ?>;
const datasets = [];
const groupedData = priceData.reduce((acc, item) => {
if (!acc[item.title]) { acc[item.title] = []; }
acc[item.title].push({ x: new Date(item.date), y: parseFloat(item.price) });
return acc;
}, {});
Object.keys(groupedData).forEach(title => {
datasets.push({
label: title,
data: groupedData[title],
borderColor: '#' + Math.floor(Math.random() * 16777215).toString(16),
borderWidth: 2,
fill: false
});
});
if(typeof Chart !== 'undefined') {
new Chart(ctx, {
type: 'line',
data: { datasets: datasets },
options: {
scales: { x: { type: 'time', time: { unit: 'day' } } }
}
});
}
});
Editor is loading...
Leave a Comment