72 lines
2.7 KiB
JavaScript
72 lines
2.7 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function () {
|
|
var sentinel = document.getElementById('scroll-sentinel');
|
|
var grid = document.getElementById('post-grid');
|
|
var spinner = document.getElementById('scroll-spinner');
|
|
|
|
if (!sentinel || !grid) return;
|
|
|
|
var page = 1;
|
|
var loading = false;
|
|
var done = false;
|
|
|
|
// Read filter params from sentinel data attributes (set server-side)
|
|
var categoryId = sentinel.dataset.category || '';
|
|
var axe = sentinel.dataset.axe || '';
|
|
var dateFrom = sentinel.dataset.dateFrom || '';
|
|
var dateTo = sentinel.dataset.dateTo || '';
|
|
var taxonomy = sentinel.dataset.taxonomy || '';
|
|
var termId = sentinel.dataset.term || '';
|
|
var catFilter = sentinel.dataset.filterCat || '';
|
|
var filterAutres = sentinel.dataset.filterAutres || '';
|
|
var excludeCats = sentinel.dataset.excludeCats || '';
|
|
var searchQuery = sentinel.dataset.search || '';
|
|
|
|
function fetchPosts() {
|
|
if (loading || done) return;
|
|
loading = true;
|
|
page++;
|
|
spinner.style.display = 'flex';
|
|
|
|
var data = new FormData();
|
|
data.append('action', 'load_more_posts');
|
|
data.append('page', page);
|
|
data.append('nonce', infiniteScrollData.nonce);
|
|
data.append('lang', infiniteScrollData.lang || 'fr');
|
|
if (categoryId) data.append('category', categoryId);
|
|
if (axe) data.append('axe', axe);
|
|
if (dateFrom) data.append('date_from', dateFrom);
|
|
if (dateTo) data.append('date_to', dateTo);
|
|
if (taxonomy) data.append('taxonomy', taxonomy);
|
|
if (termId) data.append('term', termId);
|
|
if (catFilter) data.append('filter_cat', catFilter);
|
|
if (filterAutres) data.append('filter_autres', filterAutres);
|
|
if (excludeCats) data.append('exclude_cats', excludeCats);
|
|
if (searchQuery) data.append('search', searchQuery);
|
|
|
|
fetch(infiniteScrollData.ajaxUrl, { method: 'POST', body: data })
|
|
.then(function (response) { return response.json(); })
|
|
.then(function (result) {
|
|
spinner.style.display = 'none';
|
|
if (result.success && result.data.html) {
|
|
grid.insertAdjacentHTML('beforeend', result.data.html);
|
|
loading = false;
|
|
} else {
|
|
done = true;
|
|
observer.disconnect();
|
|
}
|
|
})
|
|
.catch(function () {
|
|
spinner.style.display = 'none';
|
|
loading = false;
|
|
});
|
|
}
|
|
|
|
var observer = new IntersectionObserver(function (entries) {
|
|
if (entries[0].isIntersecting) {
|
|
fetchPosts();
|
|
}
|
|
}, { rootMargin: '200px' });
|
|
|
|
observer.observe(sentinel);
|
|
});
|