diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index acfbd36179..a314874eda 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -2527,8 +2527,7 @@ Your {organizer} team""")) 'default': LazyI18nString.from_gettext(gettext_noop( 'We use cookies and similar technologies to gather data that allows us to improve this website and our ' 'offerings. If you do not agree, we will only use cookies if they are essential to providing the services ' - 'this website offers. This includes cookies used to store your cart and personal settings, cookies used for ' - 'payment processing, as well as cookies required for technical or security reasons.' + 'this website offers.' )), 'type': LazyI18nString, 'serializer_class': I18nField, diff --git a/src/pretix/presale/context.py b/src/pretix/presale/context.py index 7ab386647b..0dbeea77ce 100644 --- a/src/pretix/presale/context.py +++ b/src/pretix/presale/context.py @@ -45,6 +45,7 @@ from pretix.base.settings import GlobalSettingsObject from pretix.helpers.i18n import ( get_javascript_format_without_seconds, get_moment_locale, ) +from .cookies import get_cookie_providers from ..base.i18n import get_language_without_region from .signals import ( @@ -140,6 +141,8 @@ def _default_context(request): ctx['event'] = request.event ctx['languages'] = [get_language_info(code) for code in request.event.settings.locales] + ctx['cookie_providers'] = get_cookie_providers(request.event, request) + if request.resolver_match: ctx['cart_namespace'] = request.resolver_match.kwargs.get('cart_namespace', '') elif hasattr(request, 'organizer'): diff --git a/src/pretix/presale/signals.py b/src/pretix/presale/signals.py index 373e13049b..343f047f46 100644 --- a/src/pretix/presale/signals.py +++ b/src/pretix/presale/signals.py @@ -401,3 +401,13 @@ This signal is sent out when the description of an item or variation is rendered additional text to the description. You are passed the ``item`` and ``variation`` and expected to return HTML. """ + +register_cookie_providers = EventPluginSignal() +""" +Arguments: ``request`` + +This signal is sent out to get all cookie providers that could set a cookie on this page, regardless of +consent state. Receivers should return a list of pretix.presale.cookies.CookieProvider objects. + +As with all event-plugin signals, the ``sender`` keyword argument will contain the event. +""" diff --git a/src/pretix/presale/templates/pretixpresale/event/base.html b/src/pretix/presale/templates/pretixpresale/event/base.html index 6c75b3e105..cec01ee158 100644 --- a/src/pretix/presale/templates/pretixpresale/event/base.html +++ b/src/pretix/presale/templates/pretixpresale/event/base.html @@ -172,7 +172,7 @@ {% if request.event.settings.privacy_url %}
  • {% trans "Privacy policy" %}
  • {% endif %} - {% if request.event.settings.cookie_consent %} + {% if request.event.settings.cookie_consent and cookie_providers %}
  • {% trans "Cookie settings" %}
  • {% endif %} {% if request.event.settings.imprint_url %} diff --git a/src/pretix/presale/templates/pretixpresale/fragment_modals.html b/src/pretix/presale/templates/pretixpresale/fragment_modals.html index c59fb05e79..2bf3b2d47c 100644 --- a/src/pretix/presale/templates/pretixpresale/fragment_modals.html +++ b/src/pretix/presale/templates/pretixpresale/fragment_modals.html @@ -17,7 +17,7 @@ -{% if request.organizer %} +{% if request.organizer and cookie_providers %} -{% endif %} \ No newline at end of file +{% endif %} diff --git a/src/pretix/presale/templates/pretixpresale/organizers/base.html b/src/pretix/presale/templates/pretixpresale/organizers/base.html index 50bc5d74b5..8e8e1b19b3 100644 --- a/src/pretix/presale/templates/pretixpresale/organizers/base.html +++ b/src/pretix/presale/templates/pretixpresale/organizers/base.html @@ -90,7 +90,7 @@ {% if not request.event and request.organizer.settings.privacy_url %}
  • {% trans "Privacy policy" %}
  • {% endif %} - {% if not request.event and request.organizer.settings.cookie_consent %} + {% if not request.event and request.organizer.settings.cookie_consent and cookie_providers %}
  • {% trans "Cookie settings" %}
  • {% endif %} {% if not request.event and request.organizer.settings.imprint_url %} diff --git a/src/pretix/static/pretixpresale/js/ui/cookieconsent.js b/src/pretix/static/pretixpresale/js/ui/cookieconsent.js index ad283d17c1..8b232feabe 100644 --- a/src/pretix/static/pretixpresale/js/ui/cookieconsent.js +++ b/src/pretix/static/pretixpresale/js/ui/cookieconsent.js @@ -31,9 +31,20 @@ $(function () { } $("#cookie-consent-modal").hide() }) + $("#cookie-consent-details").on("toggle", function (e) { + if ($("#cookie-consent-details").attr("open")) { + $("#cookie-consent-button-no").text( + $("#cookie-consent-button-no").attr("data-detail-text") + ) + } else { + $("#cookie-consent-button-no").text( + $("#cookie-consent-button-no").attr("data-summary-text") + ) + } + }) $("#cookie-consent-reopen").on("click", function (e) { $("#cookie-consent-modal").show() e.preventDefault() return true }) -}); \ No newline at end of file +}); diff --git a/src/pretix/static/pretixpresale/scss/_forms.scss b/src/pretix/static/pretixpresale/scss/_forms.scss index 1233609762..63134ed3e4 100644 --- a/src/pretix/static/pretixpresale/scss/_forms.scss +++ b/src/pretix/static/pretixpresale/scss/_forms.scss @@ -132,6 +132,15 @@ a.btn, button.btn { } } +details { + summary .chevron::before { + content: $fa-var-caret-right; + } + &[open] .chevron::before { + content: $fa-var-caret-down; + } +} + @media(max-width: $screen-xs-max) { .nameparts-form-group { diff --git a/src/pretix/static/pretixpresale/scss/main.scss b/src/pretix/static/pretixpresale/scss/main.scss index 013143ba47..e8cb80b9f8 100644 --- a/src/pretix/static/pretixpresale/scss/main.scss +++ b/src/pretix/static/pretixpresale/scss/main.scss @@ -187,6 +187,15 @@ body.loading .container { .modal-card-content { margin-left: 0; } + details { + & > summary { + list-style: inherit; + } + & > summary::-webkit-details-marker { + display: inherit; + } + margin-bottom: 10px; + } } } @media (max-width: 700px) {