UNPKG

igniteui-react-core

Version:
516 lines (515 loc) 17.2 kB
/* THIS INFRAGISTICS ULTIMATE SOFTWARE LICENSE AGREEMENT ("AGREEMENT") LOCATED HERE: https://www.infragistics.com/legal/license/igultimate-la https://www.infragistics.com/legal/license/igultimate-eula GOVERNS THE LICENSING, INSTALLATION AND USE OF INFRAGISTICS SOFTWARE. BY DOWNLOADING AND/OR INSTALLING AND USING INFRAGISTICS SOFTWARE: you are indicating that you have read and understand this Agreement, and agree to be legally bound by it on behalf of the yourself and your company. */ import { CultureInfo } from "./culture"; import { FormatException } from "./type"; export function ieeeRemainder(a, b) { var r = Math.abs(a % b); if (isNaN(r) || r == b || r <= Math.abs(b) / 2.0) { return r; } else { return Math.sign(a) * (r - b); } } ; export function numberToString1(value, provider) { return value.toLocaleString(provider.name, { useGrouping: false }); // TODO: Figure out how to use the provider correctly here } export function tryParseNumber1(s, style, provider, v) { // TODO: had to change the provider from CultureInfo to any but that's not ideal. see what we should do here var value, i, currentCharCode; provider = provider || CultureInfo.currentCulture; /*jslint bitwise: true */ if ((style & 1 /* NumberStyles.AllowLeadingWhite */) !== 0) { var index = 0; while (index < s.length && s[index] === ' ') { index++; } s = s.substring(index); } if ((style & 2 /* NumberStyles.AllowTrailingWhite */) !== 0) { var index = s.length - 1; while (index >= 0 && s[index] === ' ') { index--; } s = s.substring(0, index + 1); } if (s.length != s.trim().length) { return { p3: 0, ret: false }; } var numberFormat = provider.numberFormat; if (style & 256 /* NumberStyles.AllowCurrencySymbol */) { // TODO: Use the locale specific symbol from the provider here if (s[0] == "$") { s = s.slice(1); } } var multiplier = 1; var hadParentheses = false; if (style & 16 /* NumberStyles.AllowParentheses */) { if (s[0] == "(" && s[s.length - 1] == ")") { hadParentheses = true; multiplier *= -1; s = s.slice(1, -1); } } if (style & 256 /* NumberStyles.AllowCurrencySymbol */) { // TODO: Use the locale specific symbol from the provider here if (s[0] == "$") { s = s.slice(1); } } if (style & 4 /* NumberStyles.AllowLeadingSign */) { var positiveSign = numberFormat.positiveSign; var negativeSign = numberFormat.negativeSign; if (s[0] == positiveSign || s[0] == negativeSign) { if (hadParentheses) { return { p3: 0, ret: false }; } if (s[0] == negativeSign) { multiplier *= -1; } s = s.slice(1); } } if (style & 8 /* NumberStyles.AllowTrailingSign */) { // TODO } if (style & 32 /* NumberStyles.AllowDecimalPoint */) { if (style & 128 /* NumberStyles.AllowExponent */) { // TODO } if (style & 64 /* NumberStyles.AllowThousands */) { var decimalSeparator = numberFormat.numberDecimalSeparator; var groupSeparator = numberFormat.numberGroupSeparator; var hitDecimalSeparator = false; for (i = 0; i < s.length; i++) { switch (s[i]) { case groupSeparator: if (hitDecimalSeparator) { return { p3: 0, ret: false }; } s = s.slice(0, i) + s.slice(i + 1); i--; break; case decimalSeparator: hitDecimalSeparator = true; if (decimalSeparator != ".") { s = s.slice(0, i) + "." + s.slice(i + 1); } break; } } } value = Number(s); if (value !== null && isFinite(value) && s.trim().length !== 0) { return { p3: value * multiplier, ret: true }; } } else { var zeroCharCode = "0".charCodeAt(0); var nineCharCode = "9".charCodeAt(0); value = 0; if (style & 512 /* NumberStyles.AllowHexSpecifier */) { var aCharCode = "a".charCodeAt(0); var fCharCode = "f".charCodeAt(0); var ACharCode = "A".charCodeAt(0); var FCharCode = "F".charCodeAt(0); for (i = 0; i < s.length; i++) { value *= 16; currentCharCode = s[i].charCodeAt(0); if (zeroCharCode <= currentCharCode && currentCharCode <= nineCharCode) { value += (currentCharCode - zeroCharCode); } else if (aCharCode <= currentCharCode && currentCharCode <= fCharCode) { value += (currentCharCode - aCharCode) + 10; } else if (ACharCode <= currentCharCode && currentCharCode <= FCharCode) { value += (currentCharCode - ACharCode) + 10; } else { return { p3: 0, ret: false }; } } } else { for (i = 0; i < s.length; i++) { value *= 10; currentCharCode = s[i].charCodeAt(0); if (zeroCharCode <= currentCharCode && currentCharCode <= nineCharCode) { value += (currentCharCode - zeroCharCode); } else { return { p3: 0, ret: false }; } } } return { p3: value * multiplier, ret: true }; } return { p3: 0, ret: false }; } export function parseNumber(s, provider) { return parseNumber1(s, 231, provider); } export function parseNumber1(s, style, provider) { var r = tryParseNumber1(s, style, provider); if (!r.ret) { throw new FormatException(1, "Incorrect number format"); } return r.p3; } export function parseInt8_1(s, provider) { return parseIntCore(s, provider, -128, 127); } ; export function parseInt8_2(s, style, provider) { return parseIntCore(s, provider, -128, 127, style); } ; export function parseInt16_1(s, provider) { return parseIntCore(s, provider, -32768, 32767); } ; export function parseInt16_2(s, style, provider) { return parseIntCore(s, provider, -32768, 32767, style); } ; export function parseInt32_1(s, provider) { return parseIntCore(s, provider, -2147483648, 2147483647); } ; export function parseInt32_2(s, style, provider) { return parseIntCore(s, provider, -2147483648, 2147483647, style); } ; export function parseInt64_1(s, provider) { return parseIntCore(s, provider, -9223372036854775808, 9223372036854775807); } ; export function parseInt64_2(s, style, provider) { return parseIntCore(s, provider, -9223372036854775808, 9223372036854775807, style); } ; export function parseUInt8_1(s, provider) { return parseIntCore(s, provider, 0, 255); } ; export function parseUInt8_2(s, style, provider) { return parseIntCore(s, provider, 0, 255, style); } ; export function parseUInt16_1(s, provider) { return parseIntCore(s, provider, 0, 65535); } ; export function parseUInt16_2(s, style, provider) { return parseIntCore(s, provider, 0, 65535, style); } ; export function parseUInt32_1(s, provider) { return parseIntCore(s, provider, 0, 4294967295); } ; export function parseUInt32_2(s, style, provider) { return parseIntCore(s, provider, 0, 4294967295, style); } ; export function parseUInt64_1(s, provider) { return parseIntCore(s, provider, 0, 18446744073709551615); } ; export function parseUInt64_2(s, style, provider) { return parseIntCore(s, provider, 0, 18446744073709551615, style); } ; export function parseIntCore(s, provider, min, max, style = 7 /* NumberStyles.Integer */) { var r = tryParseIntCore(s, provider, min, max, style); if (!r.ret) { throw new FormatException(1, "Incorrect number format"); } return r.p3; } ; export function tryParseInt8_1(s, value) { return tryParseIntCore(s, null, -128, 127); } ; export function tryParseInt8_2(s, style, provider, value) { return tryParseIntCore(s, provider, -128, 127, style); } ; export function tryParseInt16_1(s, value) { return tryParseIntCore(s, null, -32768, 32767); } ; export function tryParseInt16_2(s, style, provider, value) { return tryParseIntCore(s, provider, -32768, 32767, style); } ; export function tryParseInt32_1(s, value) { return tryParseIntCore(s, null, -2147483648, 2147483647); } ; export function tryParseInt32_2(s, style, provider, value) { return tryParseIntCore(s, provider, -2147483648, 2147483647, style); } ; export function tryParseInt64_1(s, value) { return tryParseIntCore(s, null, -9223372036854775808, 9223372036854775807); } ; export function tryParseInt64_2(s, style, provider, value) { return tryParseIntCore(s, provider, -9223372036854775808, 9223372036854775807, style); } ; export function tryParseUInt8_1(s, value) { return tryParseIntCore(s, null, 0, 255); } ; export function tryParseUInt8_2(s, style, provider, value) { return tryParseIntCore(s, provider, 0, 255, style); } ; export function tryParseUInt16_1(s, value) { return tryParseIntCore(s, null, 0, 65535); } ; export function tryParseUInt16_2(s, style, provider, value) { return tryParseIntCore(s, provider, 0, 65535, style); } ; export function tryParseUInt32_1(s, value) { return tryParseIntCore(s, null, 0, 4294967295); } ; export function tryParseUInt32_2(s, style, provider, value) { return tryParseIntCore(s, provider, 0, 4294967295, style); } ; export function tryParseUInt64_1(s, value) { return tryParseIntCore(s, null, 0, 18446744073709551615); } ; export function tryParseUInt64_2(s, style, provider, value) { return tryParseIntCore(s, provider, 0, 18446744073709551615, style); } ; export function tryParseIntCore(s, provider, min, max, style = 7 /* NumberStyles.Integer */) { /*jshint eqnull:true */ /*jslint bitwise: true */ //style = style != null ? style : NumberStyles.integer; // Don't use || here, because 0 could be a valid style provider = provider || CultureInfo.currentCulture; var r = tryParseNumber1(s, style, provider); if ((style & 512 /* NumberStyles.AllowHexSpecifier */) && max < r.p3) { r.p3 -= (-min * 2); } if (!r.ret || r.p3 < min || max < r.p3 || r.p3 % 1 !== 0) { return { p1: 0, p3: 0, ret: false }; } let ret = { p1: r.p3, p3: r.p3, ret: r.ret }; return ret; } export function numberToString(number, provider) { return numberToString2(number, "G", provider); } ; let gFormatOptions = { useGrouping: false, maximumSignificantDigits: 15 }; let zeroFormatOptions = { useGrouping: false, maximumSignificantDigits: 15, maximumFractionDigits: 0 }; export function numberToString2(number, format, provider) { // TODO: had to change the provider from CultureInfo to any but that's not ideal. see what we should do here provider = provider || CultureInfo.currentCulture; switch (format) { case "G": return number.toLocaleString(provider.name, gFormatOptions); case "R": case "r": return number.toString() .replace(".", provider.numberFormat.numberDecimalSeparator); } if (format.match(/[0\#\.]+/)) { var isValid = true; var formatIndexOfDecimalSeparator = format.indexOf("."); var decimalFormat = formatIndexOfDecimalSeparator == -1 ? "" : format.substring(formatIndexOfDecimalSeparator + 1); var numberString = number.toFixed(decimalFormat.length).toString(); var numberIndexOfDecimalSeparator = numberString.indexOf("."); var integralPart = numberIndexOfDecimalSeparator == -1 ? numberString : numberString.substring(0, numberIndexOfDecimalSeparator); var integralFormat = formatIndexOfDecimalSeparator == -1 ? format : format.substring(0, formatIndexOfDecimalSeparator); while (integralFormat.length < integralPart.length) { integralFormat = "0" + integralFormat; } while (integralPart.length < integralFormat.length) { integralPart = "0" + integralPart; } var formattedIntegralPart = ""; var digit; for (var ii = integralFormat.length - 1; ii >= 0; ii--) { if (integralFormat[ii] == "0") { formattedIntegralPart = integralPart[ii] + formattedIntegralPart; } else if (integralFormat[ii] == "#") { digit = integralPart.substring(0, ii + 1).match(/[1-9]/) ? integralPart[ii] : ""; formattedIntegralPart = digit + formattedIntegralPart; } else { isValid = false; } } var decimalPart = numberIndexOfDecimalSeparator == -1 ? "" : numberString.substring(numberIndexOfDecimalSeparator + 1); var formattedDecimalPart = ""; for (var jj = 0; jj < decimalFormat.length; jj++) { if (decimalFormat[jj] == "0") { formattedDecimalPart += decimalPart[jj]; } else if (decimalFormat[jj] == "#") { digit = decimalPart.length > jj && (decimalPart[jj] != "0" || decimalPart.substring(jj).match(/[1-9]/)) ? decimalPart[jj] : ""; formattedDecimalPart += digit; } else { isValid = false; } } if (isValid) { return formattedIntegralPart + (formattedDecimalPart.length > 0 ? "." + formattedDecimalPart : ""); } } throw new FormatException(1, "Unsupported format code: " + format); } export function intToString(number, provider) { return intToString1(number, "G", provider); } ; export function intToString1(number, format, provider) { provider = provider || CultureInfo.currentCulture; if (format && format.length) { if (format[0] == "X") { number = intSToU(number); var result = number.toString(16).toUpperCase(); if (format.length !== 1) { var digits = +format.substr(1); if (!isFinite(digits)) { throw new Error("Unsupported format code: " + format); } while (result.length < digits) { result = "0" + result; } } return result; } } switch (format) { case "G": return number.toLocaleString(provider.name, gFormatOptions); } throw new Error("Unsupported format code: " + format); } export function intSToU(number) { if (number < 0) { number = number + 1 + 0xFFFFFFFF; } return number; } export function u32BitwiseAnd(a, b) { var r = a & b; if (r < 0) { r += 4294967296; } return r; } export function u32BitwiseOr(a, b) { var r = a | b; if (r < 0) { r += 4294967296; } return r; } export function u32BitwiseXor(a, b) { var r = a ^ b; if (r < 0) { r += 4294967296; } return r; } export function u32LS(a, b) { var r = a << b; if (r < 0) { r += 4294967296; } return r; } export function decimalAdjust(type, value, exp) { // If the exp is undefined or zero... if (typeof exp === "undefined" || +exp === 0) { return Math[type](value); } value = +value; exp = +exp; // If the value is not a number or the exp is not an integer... if (isNaN(value) || !(typeof exp === "number" && exp % 1 === 0)) { return NaN; } // Shift value = value.toString().split("e"); value = Math[type](+(value[0] + "e" + (value[1] ? (+value[1] - exp) : -exp))); // Shift back value = value.toString().split("e"); return +(value[0] + "e" + (value[1] ? (+value[1] + exp) : exp)); } export function round10(value, exp) { return decimalAdjust("round", value, exp); } export function round10N(value, exp) { return decimalAdjust("round", value, -exp); } export function floor10(value, exp) { return decimalAdjust("floor", value, exp); } export function ceil10(value, exp) { return decimalAdjust("ceil", value, exp); }