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(), }; } }