3 let unpagedSearch = null;
4 if (!$(".quick-filter").val() && !$('.l-pagination li').length) {
8 function get_page(page, search, ordering, callback) {
9 get_page_by_url('.?page=' + page + '&order=' + ordering + '&search=' + search, callback);
12 let lastFulfilledPage = 0;
14 function get_page_by_url(url, callback) {
15 let requestTime = + new Date();
19 if (lastFulfilledPage > requestTime) return;
20 lastFulfilledPage = requestTime;
23 objectList = $('#object-list', html);
24 paginate = $('#paginate', html);
27 $(".icon-like", objectList).each(
29 ids.add($(e).attr('data-book'));
32 ids = [...ids].join(',');
35 $('#book-list').html(objectList.children());
36 $('#paginator').html(paginate.children());
37 history.replaceState({}, '', url);
38 callback && callback();
43 $("#paginator").on('click', 'a', function() {
44 get_page_by_url(url=$(this).attr('href'));
48 $(".quick-filter").each(function() {
49 let bookList = $('#' + $(this).data('for'));
50 let filterList = $('.' + $(this).data('filters'));
52 $(this).on('focus', function() {
53 filterList.addClass('filters-enabled');
55 $(this).on('blur', function() {
56 filterList.removeClass('filters-enabled');
59 $(this).on('input propertychange', function() {
60 let search = $(this).val().toLowerCase();
62 if (!search.startsWith(unpagedSearch)) {
63 get_page(1, search, 'title', function() {
64 if ($('.l-pagination li').length) {
69 bookList.children().each(function() {
71 $(".s", this).text().toLowerCase().search(search) != -1
80 $('.filter-container', filterList).children().each(function() {
82 $(this).text().toLowerCase().search(search) != -1
93 $(".l-books__sorting button").on('click', function() {
94 if ($(this).hasClass('is-active')) return;
95 $(".is-active", $(this).parent()).removeClass("is-active");
96 $(this).addClass("is-active");
97 let prop = $(this).attr('data-order');
100 // do we NOW have pages (possibly after filtering)?
101 // if we don't have pages, we can just sort here.
102 let havePages = $('.l-pagination li').length > 0;
104 $(".l-books__item").css('opacity', '0');
105 setTimeout(function() {
107 get_page(1, '', prop);
110 $(".l-books__item").each(function() {
111 $(this).css('order', $(this).attr('data-' + prop));
114 $(".l-books__item").css('order', '');
116 setTimeout(function() {
117 $(".l-books__item").css('opacity', '100%');