Initial commit
This commit is contained in:
71
js/infiniteScroll.js
Normal file
71
js/infiniteScroll.js
Normal file
@@ -0,0 +1,71 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user