{"version":3,"file":"format-number.js","sourceRoot":"","sources":["../../../Scripts/commons/format-number.ts"],"names":[],"mappings":"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","sourcesContent":["namespace Seac.Commons {\r\n\t/**\r\n\t * Porting in typescript della libreria Javascript-number-formatter\r\n\t * http://mottie.github.com/javascript-number-formatter/\r\n\t * versione 2.0.9\r\n\t * */\r\n\texport class FormatNumber {\r\n\t\tprivate static maskRegex = /[0-9\\-+#]/;\r\n\t\tprivate static notMaskRegex = /[^\\d\\-+#]/g;\r\n\r\n\t\tprivate static getIndex(mask) {\r\n\t\t\treturn mask.search(this.maskRegex);\r\n\t\t}\r\n\r\n\t\tprivate static processMask(mask = \"#.##\"): MaskObject {\r\n\t\t\tconst maskObj: MaskObject = {};\r\n\t\t\tconst len = mask.length;\r\n\t\t\tconst start = this.getIndex(mask);\r\n\t\t\tmaskObj.prefix = start > 0 ? mask.substring(0, start) : \"\";\r\n\r\n\t\t\t// Reverse string: not an ideal method if there are surrogate pairs\r\n\t\t\tconst end = this.getIndex(mask.split(\"\").reverse().join(\"\"));\r\n\t\t\tconst offset = len - end;\r\n\t\t\tconst substr = mask.substring(offset, offset + 1);\r\n\t\t\t// Add 1 to offset if mask has a trailing decimal/comma\r\n\t\t\tconst indx = offset + ((substr === \".\" || (substr === \",\")) ? 1 : 0);\r\n\t\t\tmaskObj.suffix = end > 0 ? mask.substring(indx, len) : \"\";\r\n\r\n\t\t\tmaskObj.mask = mask.substring(start, indx);\r\n\t\t\tmaskObj.maskHasNegativeSign = maskObj.mask.charAt(0) === \"-\";\r\n\t\t\tmaskObj.maskHasPositiveSign = maskObj.mask.charAt(0) === \"+\";\r\n\r\n\t\t\t// Search for group separator & decimal; anything not digit,\r\n\t\t\t// not +/- sign, and not #\r\n\t\t\tlet result = maskObj.mask.match(this.notMaskRegex);\r\n\t\t\t// Treat the right most symbol as decimal\r\n\t\t\tmaskObj.decimal = (result && result[result.length - 1]) || \".\";\r\n\t\t\t// Treat the left most symbol as group separator\r\n\t\t\tmaskObj.separator = (result && result[1] && result[0]) || \",\";\r\n\r\n\t\t\t// Split the decimal for the format string if any\r\n\t\t\tresult = maskObj.mask.split(maskObj.decimal);\r\n\t\t\tmaskObj.integer = result[0];\r\n\t\t\tmaskObj.fraction = result[1];\r\n\t\t\treturn maskObj;\r\n\t\t}\r\n\r\n\t\tprivate static processValue(value: number, maskObj, options) {\r\n\t\t\tlet isNegative = false;\r\n\t\t\tconst valObj: ValObject = {\r\n\t\t\t\tvalue\r\n\t\t\t};\r\n\t\t\tif (value < 0) {\r\n\t\t\t\tisNegative = true;\r\n\t\t\t\t// Process only abs(), and turn on flag.\r\n\t\t\t\tvalObj.value = -valObj.value;\r\n\t\t\t}\r\n\r\n\t\t\tvalObj.sign = isNegative ? \"-\" : \"\";\r\n\r\n\t\t\t// Fix the decimal first, toFixed will auto fill trailing zero.\r\n\t\t\tvalObj.value = Number(valObj.value).toFixed(maskObj.fraction && maskObj.fraction.length);\r\n\t\t\t// Convert number to string to trim off *all* trailing decimal zero(es)\r\n\t\t\tvalObj.value = Number(valObj.value).toString();\r\n\r\n\t\t\t// Fill back any trailing zero according to format\r\n\t\t\t// look for last zero in format\r\n\t\t\tconst posTrailZero = maskObj.fraction && maskObj.fraction.lastIndexOf(\"0\");\r\n\t\t\tlet [valInteger = \"0\", valFraction = \"\"] = valObj.value.split(\".\");\r\n\t\t\tif (!valFraction || (valFraction && valFraction.length <= posTrailZero)) {\r\n\t\t\t\tvalFraction = posTrailZero < 0\r\n\t\t\t\t\t? \"\"\r\n\t\t\t\t\t: (Number(\"0.\" + valFraction).toFixed(posTrailZero + 1)).replace(\"0.\", \"\");\r\n\t\t\t}\r\n\r\n\t\t\tvalObj.integer = valInteger;\r\n\t\t\tvalObj.fraction = valFraction;\r\n\t\t\tthis.addSeparators(valObj, maskObj);\r\n\r\n\t\t\t// Remove negative sign if result is zero\r\n\t\t\tif (valObj.result === \"0\" || valObj.result === \"\") {\r\n\t\t\t\t// Remove negative sign if result is zero\r\n\t\t\t\tisNegative = false;\r\n\t\t\t\tvalObj.sign = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tif (!isNegative && maskObj.maskHasPositiveSign) {\r\n\t\t\t\tvalObj.sign = \"+\";\r\n\t\t\t}else if (isNegative && maskObj.maskHasPositiveSign) {\r\n\t\t\t\tvalObj.sign = \"-\";\r\n\t\t\t}else if (isNegative) {\r\n\t\t\t\tvalObj.sign = options && options.enforceMaskSign && !maskObj.maskHasNegativeSign\r\n\t\t\t\t\t? \"\"\r\n\t\t\t\t\t: \"-\";\r\n\t\t\t}\r\n\r\n\t\t\treturn valObj;\r\n\t\t}\r\n\r\n\t\tprivate static addSeparators(valObj: ValObject, maskObj) {\r\n\t\t\tvalObj.result = \"\";\r\n\t\t\t// Look for separator\r\n\t\t\tconst szSep = maskObj.integer.split(maskObj.separator);\r\n\t\t\t// Join back without separator for counting the pos of any leading 0\r\n\t\t\tconst maskInteger = szSep.join(\"\");\r\n\r\n\t\t\tconst posLeadZero = maskInteger && maskInteger.indexOf(\"0\");\r\n\t\t\tif (posLeadZero > -1) {\r\n\t\t\t\twhile (valObj.integer.length < (maskInteger.length - posLeadZero)) {\r\n\t\t\t\t\tvalObj.integer = \"0\" + valObj.integer;\r\n\t\t\t\t}\r\n\t\t\t}else if (Number(valObj.integer) === 0) {\r\n\t\t\t\tvalObj.integer = \"\";\r\n\t\t\t}\r\n\r\n\t\t\t// Process the first group separator from decimal (.) only, the rest ignore.\r\n\t\t\t// get the length of the last slice of split result.\r\n\t\t\tconst posSeparator = (szSep[1] && szSep[szSep.length - 1].length);\r\n\t\t\tif (posSeparator) {\r\n\t\t\t\tconst len = valObj.integer.length;\r\n\t\t\t\tconst offset = len % posSeparator;\r\n\t\t\t\tfor (let indx = 0; indx < len; indx++) {\r\n\t\t\t\t\tvalObj.result += valObj.integer.charAt(indx);\r\n\t\t\t\t\t// -posSeparator so that won't trail separator on full length\r\n\t\t\t\t\tif (!((indx - offset + 1) % posSeparator) && indx < len - posSeparator) {\r\n\t\t\t\t\t\tvalObj.result += maskObj.separator;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else {\r\n\t\t\t\tvalObj.result = valObj.integer;\r\n\t\t\t}\r\n\r\n\t\t\tvalObj.result += (maskObj.fraction && valObj.fraction)\r\n\t\t\t\t? maskObj.decimal + valObj.fraction\r\n\t\t\t\t: \"\";\r\n\t\t\treturn valObj;\r\n\t\t}\r\n\r\n\t\tpublic static format(mask: string, value: number, options: any = {}): string {\r\n\t\t\tif (!mask || isNaN(Number(value))) {\r\n\t\t\t\t// Invalid inputs\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\r\n\t\t\tconst maskObj = this.processMask(mask);\r\n\t\t\tconst valObj = this.processValue(value, maskObj, options);\r\n\t\t\treturn maskObj.prefix + valObj.sign + valObj.result + maskObj.suffix;\r\n\t\t};\r\n\t}\r\n\r\n\texport interface ValObject {\r\n\t\tvalue\t\t: number | string;\r\n\t\tsign\t\t: string;\r\n\t\tinteger\t\t: string;\r\n\t\tfraction\t: string;\r\n\t\tresult\t\t: string;\r\n\t}\r\n\r\n\texport interface MaskObject {\r\n\t\tprefix\t\t\t\t: string;\r\n\t\tsuffix\t\t\t\t: string;\r\n\t\tmask\t\t\t\t: string;\r\n\t\tmaskHasNegativeSign\t: boolean;\r\n\t\tmaskHasPositiveSign\t: boolean;\r\n\t\tdecimal\t\t\t\t: string;\r\n\t\tseparator\t\t\t: string;\r\n\t\tinteger\t\t\t\t: string;\r\n\t\tfraction\t\t\t: string;\r\n\t}\r\n}\r\n"]}