devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
114 lines (112 loc) • 4.16 kB
JavaScript
/**
* DevExtreme (cjs/common/core/localization/globalize/number.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
require("./core");
var _globalize = _interopRequireDefault(require("globalize"));
var _number = _interopRequireDefault(require("../number"));
var _errors = _interopRequireDefault(require("../../../../core/errors"));
require("globalize/number");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const MAX_FRACTION_DIGITS = 20;
if (_globalize.default && _globalize.default.formatNumber) {
if ("en" === _globalize.default.locale().locale) {
_globalize.default.locale("en")
}
const formattersCache = {};
const getFormatter = format => {
let formatter;
let formatCacheKey;
if ("object" === typeof format) {
formatCacheKey = _globalize.default.locale().locale + ":" + JSON.stringify(format)
} else {
formatCacheKey = _globalize.default.locale().locale + ":" + format
}
formatter = formattersCache[formatCacheKey];
if (!formatter) {
formatter = formattersCache[formatCacheKey] = _globalize.default.numberFormatter(format)
}
return formatter
};
const globalizeNumberLocalization = {
engine: function() {
return "globalize"
},
_formatNumberCore: function(value, format, formatConfig) {
if ("exponential" === format) {
return this.callBase.apply(this, arguments)
}
return getFormatter(this._normalizeFormatConfig(format, formatConfig, value))(value)
},
_normalizeFormatConfig: function(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: function(precision) {
let config;
if (null === precision) {
config = {
minimumFractionDigits: 0,
maximumFractionDigits: 20
}
} else {
config = {
minimumFractionDigits: precision || 0,
maximumFractionDigits: precision || 0
}
}
return config
},
format: function(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, arguments)
},
parse: function(text, format) {
if (!text) {
return
}
if (format && (format.parser || "string" === typeof format)) {
return this.callBase.apply(this, arguments)
}
if (format) {
_errors.default.log("W0011")
}
let result = _globalize.default.parseNumber(text);
if (isNaN(result)) {
result = this.callBase.apply(this, arguments)
}
return result
}
};
_number.default.resetInjection();
_number.default.inject(globalizeNumberLocalization)
}