X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/b89f3aa7efdc44a9b59b26384862df0f06803a7b..515610278a618c78e49ddd5410cb6a8952841685:/src/wolnelektury/static/js/main.js diff --git a/src/wolnelektury/static/js/main.js b/src/wolnelektury/static/js/main.js index c82516bf2..b646bf450 100644 --- a/src/wolnelektury/static/js/main.js +++ b/src/wolnelektury/static/js/main.js @@ -1,67 +1,37 @@ // JS Menu (function () { - let button = $('.js-menu'); - let menu = $('.l-navigation'); - let menuLinks = menu.find('a'); - - button.on('click', function() { - if(!$(this).hasClass('is-active')) { - $(this).addClass('is-active'); - menu.addClass('is-open'); - $('body').addClass('is-open'); - button.find('.bar').addClass('animate'); - menuLinks.attr('tabindex', 0); - } else { - $(this).removeClass('is-active'); - menu.removeClass('is-open'); - $('body').removeClass('is-open'); - button.find('.bar').removeClass('animate'); - menuLinks.attr('tabindex', -1); - } - }); - - $(document).keyup(function(e) { - if (e.keyCode === 27) { - button.removeClass('is-active'); - menu.removeClass('is-open'); - $('body').removeClass('is-open'); - button.find('.bar').removeClass('animate'); - menuLinks.attr('tabindex', -1); + const dialog = document.getElementById('main-menu'); + let buttonOn = $('.js-menu'); + let buttonOff = $('.js-menu-close'); + + async function closeMenu() { + // Może być od razu dialog.close bez is-closing, gdy przeglądarki nadrobią + // https://caniuse.com/wf-display-animation, https://caniuse.com/wf-overlay + if (!dialog.open || dialog.classList.contains('is-closing')) return; + dialog.classList.add('is-closing'); + buttonOn.find('.bar').removeClass('animate'); + buttonOff.find('.bar').removeClass('animate'); + await Promise.allSettled(dialog.getAnimations().map(a => a.finished)); + dialog.close(); } - }); -})(); - -// User menu. -(function() { - let button = $('.l-navigation__actions .user'); - let menu = $('#user-menu'); - let menuLinks = menu.find('a'); - - button.on('click', function() { - if (!menu.hasClass('is-open')) { - menu.addClass('is-open'); - menuLinks.attr('tabindex', 0); - } else { - menu.removeClass('is-open'); - menuLinks.attr('tabindex', -1) - } - return false; + dialog.addEventListener('close', () => { + dialog.classList.remove('is-closing'); }); - $(document).keyup(function(e) { - if (e.keyCode === 27) { - menu.removeClass('is-open'); - menuLinks.attr('tabindex', -1); - } + document.querySelector('.js-menu').addEventListener('click', () => { + dialog.showModal(); + buttonOn.find('.bar').addClass('animate'); + buttonOff.find('.bar').addClass('animate'); }); - $(document).click(function() { - menu.removeClass('is-open'); - menuLinks.attr('tabindex', -1); + dialog.querySelector('.js-menu-close').addEventListener('click', closeMenu); + dialog.addEventListener('cancel', e => { + e.preventDefault(); + closeMenu(); }); - })(); + // Ebook/Audiobook Btns (function() { let button = $('.c-media__btn button:not(.l-button--media--full)'); @@ -338,8 +308,34 @@ $('input', container).val($(this).val()); $('.is-active', container).removeClass('is-active'); $(this).closest('.l-checkout__payments__box').addClass('is-active'); - $('#kwota').val(''); - return false; + $('#id_custom_amount').val(''); + }); + + $('#id_custom_amount').on('input', function() { + if ($(this).val() > 0) { + $('.l-checkout__payments__box.is-active').removeClass('is-active'); + } else { + $('.l-checkout__payments__box.initial-active').addClass('is-active'); + } + }); + + $('.donation-mod-monthly').on('click', function() { + $.ajax({ + method: 'POST', + data: { + csrfmiddlewaretoken: $("[name=csrfmiddlewaretoken]").val(), + monthly: $(this).data('monthly'), + }, + url: $(this).data('url'), + success: function(data) { + if ($(".q-reload-is-monthly").length) { + window.location.reload() + } else { + $(".q-is-monthly").toggleClass('is-monthly', data.monthly); + } + } + }); + return false; }); })(); @@ -381,24 +377,27 @@ $.post({ url: '/ludzie/lektura/' + $(this).attr('data-book-slug') + '/nie_lubie/', data: {'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()}, + dataType: 'json', success: function() { delete state.liked[$btn.attr('data-book')]; updateLiked($btn); + }, + error: function() { + window.location.href = $('#login-link').attr('href'); } }) } else { $.post({ url: '/ludzie/lektura/' + $(this).attr('data-book-slug') + '/lubie/', data: {'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()}, + dataType: 'json', success: function() { - state.liked[$btn.attr('data-book')] = []; + state.liked[$btn.attr('data-book')] = [{'favorites': true}]; updateLiked($btn); }, - error: function(e) { - if (e.status == 403) { - window.location.href = $('#login-link').attr('href') - } - }, + error: function() { + window.location.href = $('#login-link').attr('href') + } }); } }) @@ -473,21 +472,27 @@ function updateLiked(e) { let bookId = $(e).attr('data-book'); - let liked = bookId in state.liked; - $(e).toggleClass('icon-liked', liked); + let liked = false; + let $bookContainer = $('.book-container-' + bookId); - $bookContainer.toggleClass('book-liked', liked); let $sets = $(".sets", $bookContainer); $sets.empty(); $.each(state.liked[bookId], (i,e) => { - let $set = $(""); - $set.attr("data-set", e.slug); - let $setA = $("").appendTo($set); - $setA.attr("href", e.url); - $setA.text(e.name); - let $setX = $("").appendTo($set); - $sets.append($set); + if (e.favorites) { + liked = true; + } else { + let $set = $(""); + $set.attr("data-set", e.slug); + let $setA = $("").appendTo($set); + $setA.attr("href", e.url); + $setA.text(e.name); + let $setX = $("").appendTo($set); + $sets.append($set); + } }); + + $(e).toggleClass('icon-liked', liked); + $bookContainer.toggleClass('book-liked', liked); } })(); @@ -531,24 +536,18 @@ window.location.reload(true); }); - $('.c-lang').on('click', function() { - !$(this).toggleClass('is-open'); - }); - - - - $(".c-media__settings > i").on('click', function() { $(".c-media__settings").toggleClass('active'); }); - const crisis = document.querySelector(".annoy-banner_crisis-container"); - const crisisLink = document.querySelector('.annoy-banner_crisis-container a.action'); - if (crisis) { - crisis.addEventListener("click", function() { - crisisLink.click(); - }); - } + $(".annoy-banner-clickable").each(function() { + let btn = $("a.action", this)[0]; + $(this).click((e) => { + if (e.target !== btn) { + btn.click(); + } + }); + }); })();