From 32331729cc52a9255dffd49c909b53b4e4866cba Mon Sep 17 00:00:00 2001 From: Sven Balzer <4653051+Kyuusokuna@users.noreply.github.com> Date: Tue, 6 May 2025 13:33:13 +0200 Subject: [PATCH] add PreisField and use it in Gegenstand --- src/main.css | 9 +++++++++ src/main.mjs | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main.css b/src/main.css index df61e5c..ad59665 100644 --- a/src/main.css +++ b/src/main.css @@ -123,6 +123,15 @@ html { } } + & .price-input { + display: grid; + grid-template-columns: minmax(min-content, 1fr) max-content; + + & input { + padding: 0; + } + } + & .placeholder { font-size: 0.8em; border-top: 1px solid; diff --git a/src/main.mjs b/src/main.mjs index 7614628..68008c3 100644 --- a/src/main.mjs +++ b/src/main.mjs @@ -277,6 +277,42 @@ function get_minified_formula(formula, data) { return Roll.getFormula(output); } +class PreisUnitField extends StringField { + constructor(options={}, context={}) { + return super({ + required: true, + choices: { + "kreuzer": "DSA41.currency.kreuzer", + "heller": "DSA41.currency.heller", + "silbertaler": "DSA41.currency.silbertaler", + "dukaten": "DSA41.currency.dukaten", + }, + initial: "silbertaler", + ...options + }, context); + } +} + +class PreisField extends SchemaField { + constructor() { + return super({ + value: new NumberField({ integer: true, initial: 0, min: 0 }), + unit: new PreisUnitField(), + }); + } + + _toInput(config) { + const value_input = this.fields["value"].toInput({ value: config.value.value, }); + const unit_input = this.fields["unit"] .toInput({ value: config.value.unit, localize: true }); + + let outer_div = document.createElement("div"); + outer_div.className = "price-input"; + outer_div.replaceChildren(value_input, unit_input); + + return outer_div; + } +} + class AttributeField extends SchemaField { constructor() { return super({ @@ -685,7 +721,7 @@ class DSA41_GegenstandData extends TypeDataModel { static defineSchema() { return { gewicht: new NumberField({ integer: false, initial: 0, min: 0 }), - preis: new NumberField({ integer: true, initial: 0, min: 0 }), + preis: new PreisField(), }; } }