devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
106 lines (105 loc) • 3.95 kB
JavaScript
/**
* DevExtreme (esm/__internal/core/localization/globalize/number.js)
* Version: 25.2.7
* Build date: Tue May 05 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import "../../../core/localization/globalize/core";
import "globalize/number";
import errors from "../../../../core/errors";
import numberLocalization from "../../../core/localization/number";
import Globalize from "globalize";
const MAX_FRACTION_DIGITS = 20;
if (null !== Globalize && void 0 !== Globalize && Globalize.formatNumber) {
if ("en" === Globalize.locale().locale) {
Globalize.locale("en")
}
const formattersCache = {};
const getFormatter = format => {
let formatter;
let formatCacheKey;
if ("object" === typeof format) {
formatCacheKey = `${Globalize.locale().locale}:${JSON.stringify(format)}`
} else {
formatCacheKey = `${Globalize.locale().locale}:${format}`
}
formatter = formattersCache[formatCacheKey];
if (!formatter) {
formatter = Globalize.numberFormatter(format);
formattersCache[formatCacheKey] = formatter
}
return formatter
};
const globalizeNumberLocalization = {
engine: () => "globalize",
_formatNumberCore(value, format, formatConfig) {
if ("exponential" === format) {
return this.callBase.apply(this, [value, format, formatConfig])
}
return getFormatter(this._normalizeFormatConfig(format, formatConfig, value))(value)
},
_normalizeFormatConfig(format, formatConfig, value) {
let config;
if ("decimal" === format) {
config = {
minimumIntegerDigits: formatConfig.precision || 1,
useGrouping: false,
minimumFractionDigits: 0,
maximumFractionDigits: 20,
round: value < 0 ? "ceil" : "floor"
}
} else {
config = this._getPrecisionConfig(formatConfig.precision)
}
if ("percent" === format) {
config.style = "percent"
}
return config
},
_getPrecisionConfig(precision) {
let config;
if (null === precision) {
config = {
minimumFractionDigits: 0,
maximumFractionDigits: 20
}
} else {
config = {
minimumFractionDigits: precision ?? 0,
maximumFractionDigits: precision ?? 0
}
}
return config
},
format(value, format) {
if ("number" !== typeof value) {
return value
}
format = this._normalizeFormat(format);
if (!format || "function" !== typeof format && !format.type && !format.formatter) {
return getFormatter(format)(value)
}
return this.callBase.apply(this, [value, format])
},
parse(text, format) {
if (!text) {
return
}
if (format && ("string" === typeof format || format.parser)) {
return this.callBase.apply(this, [text, format])
}
if (format) {
errors.log("W0011")
}
let result = Globalize.parseNumber(text);
if (isNaN(result)) {
result = this.callBase.apply(this, [text, format])
}
return result
}
};
numberLocalization.resetInjection();
numberLocalization.inject(globalizeNumberLocalization)
}