From 2663e9ff327f408601b09ee6274d2d15b2bbd6cc Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Mon, 25 Nov 2024 13:35:00 +0100 Subject: [PATCH] Move country-dependent state field JS logic to separate file (avoids code duplication for presale and control) --- .../control/templates/pretixcontrol/base.html | 1 + .../templates/pretixpresale/fragment_js.html | 1 + .../static/pretixbase/js/addressform.js | 44 +++++++++++++++++++ src/pretix/static/pretixcontrol/js/ui/main.js | 36 --------------- src/pretix/static/pretixpresale/js/ui/main.js | 41 ----------------- 5 files changed, 46 insertions(+), 77 deletions(-) create mode 100644 src/pretix/static/pretixbase/js/addressform.js diff --git a/src/pretix/control/templates/pretixcontrol/base.html b/src/pretix/control/templates/pretixcontrol/base.html index 65c4a9235..79d9c5f52 100644 --- a/src/pretix/control/templates/pretixcontrol/base.html +++ b/src/pretix/control/templates/pretixcontrol/base.html @@ -61,6 +61,7 @@ + {% endcompress %} {{ html_head|safe }} diff --git a/src/pretix/presale/templates/pretixpresale/fragment_js.html b/src/pretix/presale/templates/pretixpresale/fragment_js.html index f79c396da..304452adc 100644 --- a/src/pretix/presale/templates/pretixpresale/fragment_js.html +++ b/src/pretix/presale/templates/pretixpresale/fragment_js.html @@ -20,4 +20,5 @@ + {% endcompress %} diff --git a/src/pretix/static/pretixbase/js/addressform.js b/src/pretix/static/pretixbase/js/addressform.js new file mode 100644 index 000000000..5468ed9c0 --- /dev/null +++ b/src/pretix/static/pretixbase/js/addressform.js @@ -0,0 +1,44 @@ +$(function () { + "use strict"; + + $("select[name$=state]:not([data-static])").each(function () { + var dependent = $(this), + counter = 0, + dependency = $(this).closest(".panel-body, form").find('select[name$=country]'), + update = function (ev) { + counter++; + var curCounter = counter; + dependent.prop("disabled", true); + dependency.closest(".form-group").find("label").prepend(" "); + $.getJSON('/js_helpers/states/?country=' + dependency.val(), function (data) { + if (counter > curCounter) { + return; // Lost race + } + var selected_value = dependent.prop("data-selected-value"); + dependent.find("option").filter(function (t) {return !!$(this).attr("value")}).remove(); + if (data.data.length > 0) { + $.each(data.data, function (k, s) { + var o = $("