diff --git a/src/pretix/static/pretixcontrol/js/ui/main.js b/src/pretix/static/pretixcontrol/js/ui/main.js index 11c49a397..78b6389d4 100644 --- a/src/pretix/static/pretixcontrol/js/ui/main.js +++ b/src/pretix/static/pretixcontrol/js/ui/main.js @@ -14,6 +14,43 @@ function ngettext(singular, plural, count) { return plural; } +function formatPrice(price, currency, locale) { + if (!window.Intl || !Intl.NumberFormat) return price; + var priceToFormat = price + if (currency === undefined) { + currency = $("[data-currency]").data("currency") + } + if (locale === undefined) { + locale = $("[data-locale]").data("locale") || $("[data-pretixlocale]").data("pretixlocale"); + } + + var opt = currency ? {style: "currency", currency: currency} : null; + var nf = new Intl.NumberFormat(locale, opt) + + if (isNaN(priceToFormat) && priceToFormat.replaceAll) { + // price is not a number, try to reformat based on locale/currency-format + var replacements = { + group: "", + decimal: "." + } + // format a dummy number to get parts of formatting and + // replace group and decimal according to replacements + // to hopefully get a parsable number + nf.formatToParts(1234.567).forEach(function(part) { + if (replacements.hasOwnProperty(part.type)) { + priceToFormat = priceToFormat.replaceAll(part.value, replacements[part.type]) + } + }); + if (isNaN(priceToFormat)) return price + } + + try { + return nf.format(priceToFormat) + } catch (error) { + return price + } +} + var waitingDialog = { show: function (message) { "use strict"; diff --git a/src/pretix/static/pretixcontrol/js/ui/variations.js b/src/pretix/static/pretixcontrol/js/ui/variations.js index 0b0f20d77..0d3648182 100644 --- a/src/pretix/static/pretixcontrol/js/ui/variations.js +++ b/src/pretix/static/pretixcontrol/js/ui/variations.js @@ -1,4 +1,4 @@ -/*global $, Morris, gettext*/ +/*global $, Morris, gettext, formatPrice*/ $(function () { // Question view if (!$("#item_variations").length) { @@ -8,7 +8,10 @@ $(function () { function update_variation_summary($el) { var var_name = $el.find("input[name*=-value_]").filter(function () {return !!this.value}).first().val(); var price = $el.find("input[name*=-default_price]").val(); - + if (price) { + var currency = $el.find("[name*=-default_price] + .input-group-addon").text(); + price = formatPrice(price, currency); + } $el.find(".variation-name").text(var_name); $el.find(".variation-price").text(price);