From 1ffe87ee189040616669a1c747d2c4172ca3ea9c Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 6 Jul 2022 10:21:30 +0200 Subject: [PATCH] Widget: Expose variations filter in JavaScript --- src/pretix/presale/views/widget.py | 6 +++--- src/pretix/static/pretixpresale/js/widget/widget.js | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/pretix/presale/views/widget.py b/src/pretix/presale/views/widget.py index 16b8e7e1a..215923f6e 100644 --- a/src/pretix/presale/views/widget.py +++ b/src/pretix/presale/views/widget.py @@ -224,12 +224,12 @@ class WidgetAPIProductList(EventListMixin, View): def _get_items(self): qs = self.request.event.items if 'items' in self.request.GET: - qs = qs.filter(pk__in=[pk for pk in self.request.GET.get('items').split(",") if pk.isdigit()]) + qs = qs.filter(pk__in=[pk.strip() for pk in self.request.GET.get('items').split(",") if pk.strip().isdigit()]) if 'categories' in self.request.GET: - qs = qs.filter(category__pk__in=[pk for pk in self.request.GET.get('categories').split(",") if pk.isdigit()]) + qs = qs.filter(category__pk__in=[pk.strip() for pk in self.request.GET.get('categories').split(",") if pk.strip().isdigit()]) variation_filter = None if 'variations' in self.request.GET: - variation_filter = [int(pk) for pk in self.request.GET.get('variations').split(",") if pk.isdigit()] + variation_filter = [int(pk.strip()) for pk in self.request.GET.get('variations').split(",") if pk.strip().isdigit()] qs = qs.filter( pk__in=ItemVariation.objects.filter( item__event=self.request.event, diff --git a/src/pretix/static/pretixpresale/js/widget/widget.js b/src/pretix/static/pretixpresale/js/widget/widget.js index 1b2a342b7..15c14dc4c 100644 --- a/src/pretix/static/pretixpresale/js/widget/widget.js +++ b/src/pretix/static/pretixpresale/js/widget/widget.js @@ -1398,6 +1398,9 @@ var shared_root_methods = { if (this.$root.category_filter) { url += '&categories=' + encodeURIComponent(this.$root.category_filter); } + if (this.$root.variation_filter) { + url += '&variations=' + encodeURIComponent(this.$root.variation_filter); + } var cart_id = getCookie(this.cookieName); if (this.$root.voucher_code) { url += '&voucher=' + encodeURIComponent(this.$root.voucher_code); @@ -1464,7 +1467,7 @@ var shared_root_methods = { root.error = data.error; root.display_add_to_cart = data.display_add_to_cart; root.waiting_list_enabled = data.waiting_list_enabled; - root.show_variations_expanded = data.show_variations_expanded; + root.show_variations_expanded = data.show_variations_expanded || !!root.variation_filter; root.cart_id = cart_id; root.cart_exists = data.cart_exists; root.vouchers_exist = data.vouchers_exist; @@ -1665,6 +1668,7 @@ var create_widget = function (element) { var widget_data = JSON.parse(JSON.stringify(window.PretixWidget.widget_data)); var filter = element.attributes.filter ? element.attributes.filter.value : null; var items = element.attributes.items ? element.attributes.items.value : null; + var variations = element.attributes.variations ? element.attributes.variations.value : null; var categories = element.attributes.categories ? element.attributes.categories.value : null; for (var i = 0; i < element.attributes.length; i++) { var attrib = element.attributes[i]; @@ -1696,10 +1700,11 @@ var create_widget = function (element) { filter: filter, item_filter: items, category_filter: categories, + variation_filter: variations, voucher_code: voucher, display_net_prices: false, voucher_explanation_text: null, - show_variations_expanded: false, + show_variations_expanded: !!variations, skip_ssl: skip_ssl, disable_iframe: disable_iframe, style: style,