UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

106 lines (105 loc) 3.95 kB
/** * 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) }