3 const dialog = document.getElementById('main-menu');
4 let buttonOn = $('.js-menu');
5 let buttonOff = $('.js-menu-close');
7 async function closeMenu() {
8 // Może być od razu dialog.close bez is-closing, gdy przeglądarki nadrobią
9 // https://caniuse.com/wf-display-animation, https://caniuse.com/wf-overlay
10 if (!dialog.open || dialog.classList.contains('is-closing')) return;
11 dialog.classList.add('is-closing');
12 buttonOn.find('.bar').removeClass('animate');
13 buttonOff.find('.bar').removeClass('animate');
14 await Promise.allSettled(dialog.getAnimations().map(a => a.finished));
17 dialog.addEventListener('close', () => {
18 dialog.classList.remove('is-closing');
21 document.querySelector('.js-menu').addEventListener('click', () => {
23 buttonOn.find('.bar').addClass('animate');
24 buttonOff.find('.bar').addClass('animate');
27 dialog.querySelector('.js-menu-close').addEventListener('click', closeMenu);
28 dialog.addEventListener('cancel', e => {
35 // Ebook/Audiobook Btns
37 let dialogs = $(".l-button--dialog");
38 dialogs.on('click', function () {
39 let target = $(this).attr('id');
40 $('[data-popup=' + target)[0].showModal();
43 $('.c-media__popup__close').on('click', function() {
44 $(this).closest('dialog')[0].close();
51 let playButton = $('.c-player__btn--md');
52 let chaptersButton = $('.c-player__chapters span');
53 let select = $('.c-select');
54 let selectItem = $('.c-select li');
55 let volumeButton = $('.icon-volume');
57 chaptersButton.on('click', function() {
58 $(this).parent().toggleClass('is-active');
61 select.on('click', function() {
62 $(this).toggleClass('is-active');
65 selectItem.on('click', function() {
66 selectItem.removeClass('is-active');
67 $(this).addClass('is-active');
71 // Homepage books sliders
73 let shelfSlider = $('.l-your-books__shelf .l-books');
74 let shelfNextSlide = $('.l-your-books__shelf .js-next-slide');
75 let shelfPrevSlide = $('.l-your-books__shelf .js-prev-slide');
76 let shelfCollapse = $('.l-your-books__shelf .js-collapse');
96 shelfNextSlide.on('click', function (event) {
97 event.preventDefault();
98 shelfSlider.slick('slickNext');
101 shelfPrevSlide.on('click', function (event) {
102 event.preventDefault();
103 shelfSlider.slick('slickPrev');
106 shelfCollapse.on('click', function (event) {
107 event.preventDefault();
108 shelfSlider.slick('slickPrev');
112 $('.js-collections').each(function() {
114 let collectionsSlider = $('.l-books', this);
115 if (collectionsSlider.children().length < 2) return;
118 collectionsSlider.css('display', 'block');
120 let collectionsNextSlide = $('.js-next-slide', this);
121 let collectionsPrevSlide = $('.js-prev-slide', this);
123 collectionsSlider.slick({
124 //prevArrow, nextArrow,
138 breakpoint: 360 - .01,
144 breakpoint: 520 - .01,
150 breakpoint: 680 - .01,
156 breakpoint: 840 - .01,
162 breakpoint: 1172 - .01,
171 collectionsNextSlide.on('click', function (event) {
172 event.preventDefault();
173 collectionsSlider.slick('slickNext');
176 collectionsPrevSlide.on('click', function (event) {
177 event.preventDefault();
178 collectionsSlider.slick('slickPrev');
181 let newBooksSlider = $('.js-new-books-slider .l-books');
182 let newBooksNextSlide = $('.js-new-books-slider .js-next-slide');
183 let newBooksPrevSlide = $('.js-new-books-slider .js-prev-slide');
185 newBooksSlider.slick({
203 newBooksNextSlide.on('click', function (event) {
204 event.preventDefault();
205 newBooksSlider.slick('slickNext');
208 newBooksPrevSlide.on('click', function (event) {
209 event.preventDefault();
210 newBooksSlider.slick('slickPrev');
216 let slider = $('.l-author__quotes__slider');
229 let sliderHomepage = $('.l-quotes');
230 sliderHomepage.slick({
247 let slider = $('.p-homepage__info__box--carousel');
265 // Text overlay toggler
267 let overlays = $('.l-article__overlay');
268 let button = $('.l-article__read-more');
270 overlays.each(function () {
271 let maxHeight = $(this).attr('data-max-height');
272 if($(this).outerHeight() > maxHeight) {
273 $(this).css({'maxHeight': maxHeight+'px'}).addClass('is-active');
275 $(this).next('.l-article__read-more').hide();
279 button.on('click', function() {
280 let dataLabel = $(this).attr('data-label');
281 let dataAction = $(this).attr('data-action');
282 $(this).parent().parent().find('.l-article__overlay').toggleClass('is-clicked');
283 if($(this).text() === dataLabel) {
284 $(this).text(dataAction);
286 $(this).text(dataLabel);
292 $('.l-checkout__payments__box button').on('click', function() {
293 let container = $(this).closest('.l-checkout__payments');
294 $('input', container).val($(this).val());
295 $('.is-active', container).removeClass('is-active');
296 $(this).closest('.l-checkout__payments__box').addClass('is-active');
297 $('#id_custom_amount').val('');
300 $('#id_custom_amount').on('input', function() {
301 if ($(this).val() > 0) {
302 $('.l-checkout__payments__box.is-active').removeClass('is-active');
304 $('.l-checkout__payments__box.initial-active').addClass('is-active');
308 $('.donation-mod-monthly').on('click', function() {
312 csrfmiddlewaretoken: $("[name=csrfmiddlewaretoken]").val(),
313 monthly: $(this).data('monthly'),
315 url: $(this).data('url'),
316 success: function(data) {
317 if ($(".q-reload-is-monthly").length) {
318 window.location.reload()
320 $(".q-is-monthly").toggleClass('is-monthly', data.monthly);
332 let $copy = $('.js-copy');
334 $copy.on('click', function() {
335 let $copyText = $(this).closest('.l-checkout__info__item').find('input');
337 document.execCommand('copy');
347 $(".icon-like").each(
349 ids.add($(e).attr('data-book'));
352 ids = [...ids].join(',');
358 $(document).on('click', '.icon-like', function(e) {
360 let liked = $(this).hasClass('icon-liked');
364 url: '/ludzie/lektura/' + $(this).attr('data-book-slug') + '/nie_lubie/',
365 data: {'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()},
367 success: function() {
368 delete state.liked[$btn.attr('data-book')];
372 window.location.href = $('.login-link').attr('href');
377 url: '/ludzie/lektura/' + $(this).attr('data-book-slug') + '/lubie/',
378 data: {'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()},
380 success: function() {
381 state.liked[$btn.attr('data-book')] = [{'favorites': true}];
385 window.location.href = $('.login-link').attr('href')
391 // TODO: DYNAMICALLY ADD
392 $(".add-set-tag input[name=name]").autocomplete({
393 source: '/ludzie/moje-tagi/',
394 }).on('autocompleteopen', function() {
395 $(this).closest('article').addClass('ac-hover');
396 }).on('autocompleteclose', function() {
397 $(this).closest('article').removeClass('ac-hover');
399 $(".add-set-tag").on("submit", function(e) {
403 url: $form.attr("action"),
404 data: $form.serialize(),
406 updateFromData(data);
408 $('input[name=name]', $form).val('');
413 $(document).on("click", ".sets .close", function() {
414 let bookId = $(this).closest("[data-book]").attr('data-book');
416 url: '/ludzie/usun-tag/',
418 csrfmiddlewaretoken: $("[name=csrfmiddlewaretoken]").val(),
420 slug: $(this).parent().attr('data-set'),
423 updateFromData(data);
430 function refreshAll(ids) {
431 $.ajax('/ludzie/ulubione/?ids=' + ids, {
432 success: function(result) {
433 updateFromData(result);
439 $.refreshLikes = refreshAll;
441 function updateFromData(data) {
443 if (data[pk] === null) {
444 delete state.liked[pk];
446 state.liked[pk] = data[pk];
451 function updateLikedAll() {
452 $(".icon-like").each(
459 function updateLiked(e) {
460 let bookId = $(e).attr('data-book');
463 let $bookContainer = $('.book-container-' + bookId);
464 let $sets = $(".sets", $bookContainer);
466 $.each(state.liked[bookId], (i,e) => {
470 let $set = $("<span>");
471 $set.attr("data-set", e.slug);
472 let $setA = $("<a>").appendTo($set);
473 $setA.attr("href", e.url);
475 let $setX = $("<a class='close'></a>").appendTo($set);
480 $(e).toggleClass('icon-liked', liked);
481 $bookContainer.toggleClass('book-liked', liked);
488 // Toggle a class on long press.
493 $("[data-longpress]").on("touchstart", (e) => {
494 $e = $(e.currentTarget);
495 timer = setTimeout(() => {
496 $e.toggleClass($e.attr('data-longpress'));
500 $("[data-longpress]").on("touchend", () => {
507 // Update search form filters.
509 $('.j-form-auto').each(function() {
511 $('input', $form).change(function() {$form.submit()});
512 $('select', $form).change(function() {$form.submit()});
513 $('textarea', $form).change(function() {$form.submit()});
518 $(".experiment input").on('change', function() {
519 let name = $(this).attr('name');
520 let val = $(this).val();
521 document.cookie = 'EXPERIMENT_' + name + '=' + val + '; path=/; max-age=31536000';
522 window.location.reload(true);
526 $(".c-media__settings > i").on('click', function() {
527 $(".c-media__settings").toggleClass('active');
530 $(".annoy-banner-clickable").each(function() {
531 let btn = $("a.action", this)[0];
532 $(this).click((e) => {
533 if (e.target !== btn) {