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');
98 $(".l-books__sorting select").val(prop);
99 if (prop == '-') prop = '';
102 $(".l-books__sorting select").on('change', function() {
103 let prop = $(this).val();
104 $(".is-active", $(this).parent()).removeClass("is-active");
105 $("[data-order='" + prop +"']", $(this).parent()).addClass("is-active");
106 if (prop == '-') prop = '';
110 function resort(prop) {
111 // do we NOW have pages (possibly after filtering)?
112 // if we don't have pages, we can just sort here.
113 let havePages = $('.l-pagination li').length > 0;
115 $(".l-books__item").css('opacity', '0');
116 setTimeout(function() {
118 get_page(1, '', prop);
121 $(".l-books__item").each(function() {
122 $(this).css('order', $(this).attr('data-' + prop));
125 $(".l-books__item").css('order', '');
127 setTimeout(function() {
128 $(".l-books__item").css('opacity', '100%');