mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-22 16:03:47 +01:00
Et2Number format improvements
- If precision is set, always show that many digits after the decimal - Better handling of formatting of initial value
This commit is contained in:
parent
3bb78f7f86
commit
f8a8cf69dc
@ -298,7 +298,8 @@ export class Et2Number extends Et2Textbox
|
|||||||
radix: this.decimalSeparator,
|
radix: this.decimalSeparator,
|
||||||
thousandsSeparator: this.thousandsSeparator,
|
thousandsSeparator: this.thousandsSeparator,
|
||||||
mask: this.mask ?? Number,
|
mask: this.mask ?? Number,
|
||||||
lazy: false
|
lazy: false,
|
||||||
|
padFractionalZeros: (typeof this.precision !== "undefined")
|
||||||
}
|
}
|
||||||
if(typeof this.precision != "undefined")
|
if(typeof this.precision != "undefined")
|
||||||
{
|
{
|
||||||
@ -322,18 +323,11 @@ export class Et2Number extends Et2Textbox
|
|||||||
{
|
{
|
||||||
// Number mask sometimes gets lost with different decimal characters
|
// Number mask sometimes gets lost with different decimal characters
|
||||||
this._mask.unmaskedValue = ("" + this.value);
|
this._mask.unmaskedValue = ("" + this.value);
|
||||||
|
}
|
||||||
|
|
||||||
// Fill decimals to precision
|
if(this.value !== "")
|
||||||
if(this.precision && ("" + this.value).includes("."))
|
|
||||||
{
|
{
|
||||||
this._mask.unmaskedValue = this._mask.unmaskedValue.padEnd(("" + this.value).length + this.precision, "0");
|
this._mask.value = formatNumber(this.value, this.decimalSeparator, this.thousandsSeparator, this.precision);
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(this.precision && ("" + this.value).includes("."))
|
|
||||||
{
|
|
||||||
// Fill decimals to precision
|
|
||||||
let v = formatNumber(this.value, this.decimalSeparator, this.thousandsSeparator);
|
|
||||||
this._mask.value = v.padEnd(v.length + this.precision, "0");
|
|
||||||
}
|
}
|
||||||
this._mask.updateValue();
|
this._mask.updateValue();
|
||||||
}
|
}
|
||||||
@ -407,11 +401,15 @@ export class Et2Number extends Et2Textbox
|
|||||||
* @param {number} value
|
* @param {number} value
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
export function formatNumber(value : number, decimalSeparator : string = ".", thousandsSeparator : string = "") : string
|
export function formatNumber(value : number, decimalSeparator : string = ".", thousandsSeparator : string = "", decimalPlaces = undefined) : string
|
||||||
{
|
{
|
||||||
// Split by . because value is a number, so . is decimal separator
|
// Split by . because value is a number, so . is decimal separator
|
||||||
let parts = ("" + value).split(".");
|
let parts = ("" + value).split(".");
|
||||||
|
|
||||||
parts[0] = parts[0].replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, thousandsSeparator);
|
parts[0] = parts[0].replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, thousandsSeparator) || "0";
|
||||||
|
if(typeof decimalPlaces != "undefined")
|
||||||
|
{
|
||||||
|
parts[1] = (parts[1] ?? "").padEnd(decimalPlaces, "0").substr(0, decimalPlaces);
|
||||||
|
}
|
||||||
return parts.join(decimalSeparator);
|
return parts.join(decimalSeparator);
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ export class Et2NumberReadonly extends Et2TextboxReadonly
|
|||||||
{
|
{
|
||||||
// use decimal separator from user prefs
|
// use decimal separator from user prefs
|
||||||
const format = this.egw().preference('number_format') ?? ".";
|
const format = this.egw().preference('number_format') ?? ".";
|
||||||
val = formatNumber(parseFloat(val), format[0], format[1]);
|
val = formatNumber(parseFloat(val), format[0], format[1], this.precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
// can not call super.set_value(), as it does not call the setter for value
|
// can not call super.set_value(), as it does not call the setter for value
|
||||||
|
Loading…
Reference in New Issue
Block a user