Files
wyszynskiego12.pagedev.pl/wp-content/plugins/elementor-addon/assets/js/main.js
Jacek Pyziak 972c69b136 feat(v0.1): historia cen + jawnosc cen — milestone Initial Release
Historia cen:
- Tabela wp_price_history z WP Cronem dziennym (snapshot cen)
- AJAX endpoint apartamenty_get_price_history (zabezpieczony nonce)
- Popup "Historia cen" w widgecie — vanilla JS, modal zgodny z projektem

Jawnosc cen:
- Endpointy /ceny-mieszkan.xml + /dane-gov-pl.xml (XSD-compliant)
- Pliki MD5 dla obu XML
- Strona admina: Narzedzia -> Jawnosc Cen z URL-ami do Ministerstwa
- Transient cache 1h z inwalidacja przez cron

Dokumentacja: docs/readme.md + docs/jawnosc-cen.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 15:40:29 +01:00

127 lines
4.6 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('.apartament-gallery-swiper').forEach(function (el) {
new Swiper(el, {
slidesPerView: 1,
spaceBetween: 10,
loop: true,
zoom: false,
navigation: {
nextEl: el.parentElement.querySelector('.swiper-button-next'),
prevEl: el.parentElement.querySelector('.swiper-button-prev'),
},
});
});
Fancybox.bind('[data-fancybox]', {
animated: true,
showClass: 'fancybox-fadeIn',
hideClass: 'fancybox-fadeOut',
});
});
// Historia cen
document.addEventListener('DOMContentLoaded', function () {
var overlay = document.getElementById('price-history-overlay');
var closeBtn = document.getElementById('price-history-close');
var elTitle = document.getElementById('price-history-title');
var elPrice = document.getElementById('price-history-price');
var elPriceM2= document.getElementById('price-history-sqm');
var elTbody = document.getElementById('price-history-tbody');
if (!overlay || !closeBtn || !elTitle || !elPrice || !elPriceM2 || !elTbody) {
console.warn('[historia-cen] Brakuje elementów popupa w DOM:', {
overlay: !!overlay, closeBtn: !!closeBtn,
elTitle: !!elTitle, elPrice: !!elPrice,
elPriceM2: !!elPriceM2, elTbody: !!elTbody
});
return;
}
function openPopup() {
overlay.setAttribute('aria-hidden', 'false');
overlay.classList.add('is-open');
document.body.style.overflow = 'hidden';
}
function closePopup() {
overlay.setAttribute('aria-hidden', 'true');
overlay.classList.remove('is-open');
document.body.style.overflow = '';
}
// Zamknij przyciskiem X
closeBtn.addEventListener('click', closePopup);
// Zamknij klikając na overlay (poza modalem)
overlay.addEventListener('click', function (e) {
if (e.target === overlay) closePopup();
});
// Zamknij klawiszem Escape
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape' && overlay.classList.contains('is-open')) closePopup();
});
// Kliknięcie w przycisk Historia cen
document.querySelectorAll('.btn-historia-cen').forEach(function (btn) {
btn.addEventListener('click', function () {
var postId = this.dataset.postId;
if (!postId) return;
// Reset i pokaż "Ładowanie..."
elTitle.textContent = 'Ładowanie...';
elPrice.textContent = '';
elPriceM2.textContent = '';
elTbody.innerHTML = '';
openPopup();
// Sprawdź dostępność danych globalnych (wp_localize_script)
if (typeof apartamentsData === 'undefined') {
elTitle.textContent = 'Błąd konfiguracji';
return;
}
// Buduj FormData
var formData = new FormData();
formData.append('action', 'apartamenty_get_price_history');
formData.append('post_id', postId);
formData.append('nonce', apartamentsData.nonce);
fetch(apartamentsData.ajaxUrl, {
method: 'POST',
body: formData,
credentials: 'same-origin',
})
.then(function (res) { return res.json(); })
.then(function (json) {
if (!json.success) {
elTitle.textContent = 'Brak danych';
return;
}
var d = json.data;
elTitle.textContent = d.title || '';
elPrice.textContent = d.price ? d.price + ' zł' : '—';
elPriceM2.textContent = d.price_m2 ? d.price_m2 + ' zł' : '—';
if (!d.history || d.history.length === 0) {
elTbody.innerHTML = '<tr><td colspan="3">Brak historii cen</td></tr>';
return;
}
elTbody.innerHTML = d.history.map(function (row) {
return '<tr>' +
'<td>' + (row.recorded_at || '') + '</td>' +
'<td>' + (row.price_m2 ? row.price_m2 + ' zł/m²' : '—') + '</td>' +
'<td>' + (row.price ? row.price + ' zł' : '—') + '</td>' +
'</tr>';
}).join('');
})
.catch(function () {
elTitle.textContent = 'Błąd ładowania';
});
});
});
});