* Prioritize widget-provided cookie consent information over localStorage
* Hide cookie-consent-reopen link if external consent info from widget present
* move iframe after close-button to follow tab-order
* add missing prevActiveElement
* prepare focus-handling for error_message
* iframe.src through prop instead of directly accessing it
* do not change close button HTML-element for compatability
* make all overlay elements role=dialog and modals
* fix close button
* fix re-opening of iframe
* make error-message read out when shown
* Improve handling of frame_src with frame_loading
* manually focus continue or close button in alert-box
* fix btn-focus in transition
* Improve quantity group
Use <fieldset> accordion-panels in checkout_customer, checkout_payment and
order_pay_change. Unify markup in checkout_payment and order_pay_change.
Adapt Javascript in the dynamic PayPal and Stripe payment forms.
---------
Co-authored-by: Richard Schreiber <schreiber@rami.io>
* Move country-dependent JS logic to separate file (avoids code duplication for presale and control)
* Correctly apply "required" attribute to address state field
* Load address format information when selecting country
* Fix some other bugs and inconsistencies
* Cross-selling: Use different label if there are no add-on products
* Update src/pretix/presale/templates/pretixpresale/event/checkout_addons.html
Co-authored-by: Richard Schreiber <schreiber@rami.io>
* Fix a11y problem
* Fix headline order
---------
Co-authored-by: Richard Schreiber <schreiber@rami.io>
Product categories can now be marked as "cross-selling categories", causing them to
appear in the add-on checkout step as additional recommendations, depending on
their cross-selling visibility (always, only if certain products are already in the cart, or
only if they qualify for a discount according to discount rules).
---------
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Richard Schreiber <schreiber@rami.io>
Allows organizers to test their shop as if it were a different date and time.
Implemented using a time_machine_now() function which is used instead of regular now(), which can overlay the real date time with a value from a ContextVar, assigned from a session value in EventMiddleware.
For more information, see doc/development/implementation/timemachine.rst
---------
Co-authored-by: Richard Schreiber <schreiber@rami.io>
Co-authored-by: Raphael Michel <michel@rami.io>
* Memberships: Prefer valid_from over event date for .is_valid()
* Fix tests
* Add parameter description
* Use reasonable default for requested_valid_from if membership starts in the future
* Set datetimepicker viewDate to closest allowed date
* Keep current value on going back to QuestionsStep
* Fix min_date/max_date in SplitDateTimePickerWidget
* Remove unused import
* Update src/pretix/base/models/memberships.py
Co-authored-by: Mira <weller@rami.io>
* Respect variations
---------
Co-authored-by: Mira Weller <weller@rami.io>