Skip to content

Instantly share code, notes, and snippets.

@ahmadajmi
Created February 18, 2026 21:01
Show Gist options
  • Select an option

  • Save ahmadajmi/fab528c93fb69706e682a3d2b57723c5 to your computer and use it in GitHub Desktop.

Select an option

Save ahmadajmi/fab528c93fb69706e682a3d2b57723c5 to your computer and use it in GitHub Desktop.
<script>
(function () {
function init() {
if (!window.jQuery) return;
var $ = window.jQuery;
var $btn = $('.js-load-cards');
var baseNextUrl = $('link[rel="next"]').attr('href');
if (!$btn.length || !baseNextUrl) return;
function decodeHtml(str) {
return $('<textarea/>').html(str || '').text();
}
function buildNextPageUrl(urlString, pageNumber) {
try {
var url = new URL(String(urlString), window.location.origin);
if (/\/page\/\d+\/?$/.test(url.pathname)) {
url.pathname = url.pathname.replace(/\/page\/\d+\/?$/, '/page/' + pageNumber + '/');
} else {
url.pathname = url.pathname.replace(/\/$/, '') + '/page/' + pageNumber + '/';
}
return url.toString();
} catch (e) {
var raw = String(urlString || '');
if (/\/page\/\d+\/?$/.test(raw)) {
return raw.replace(/\/page\/\d+\/?$/, '/page/' + pageNumber + '/');
}
return raw.replace(/\/$/, '') + '/page/' + pageNumber + '/';
}
}
var nextPageNumber = Number(window.pagination_next_page_number || 2);
var availablePages = Number(window.pagination_available_pages_number || 1);
$btn.off('click').on('click', function (e) {
e.preventDefault();
e.stopImmediatePropagation();
var requestUrl = buildNextPageUrl(baseNextUrl, nextPageNumber);
$.ajax({
url: requestUrl,
beforeSend: function () {
$btn.text(decodeHtml(window.pagination_loading_text));
$btn.addClass('c-btn--loading');
}
}).done(function (data) {
var $posts = $('.js-card', data);
$('.js-grid').append($posts);
$btn.text(decodeHtml(window.pagination_more_posts_text));
$btn.removeClass('c-btn--loading');
nextPageNumber += 1;
window.pagination_next_page_number = nextPageNumber;
if (nextPageNumber > availablePages) {
$btn.addClass('c-btn--disabled').attr('disabled', true);
}
}).fail(function () {
$btn.text(decodeHtml(window.pagination_more_posts_text));
$btn.removeClass('c-btn--loading');
});
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment