UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

235 lines (234 loc) 18.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { AbstractPipeFormatter } from './AbstractPipeFormatter'; import { Option } from '../decorator/Option.decorator'; var /** @type {?} */ NAME = 'number'; var /** @type {?} */ CEIL = 'ceil'; var /** @type {?} */ ROUND = 'round'; var /** @type {?} */ FLOOR = 'floor'; var NumberFormatter = /** @class */ (function (_super) { tslib_1.__extends(NumberFormatter, _super); function NumberFormatter() { var _this = _super.call(this, NAME) || this; _this.setDefaultValues(); return _this; } /** * @return {?} */ NumberFormatter.prototype.setDefaultValues = /** * @return {?} */ function () { if (this.roundingMode === null || typeof this.roundingMode === 'undefined') { this.roundingMode = ROUND; } }; /** * @param {?} num * @return {?} */ NumberFormatter.prototype.decimalCount = /** * @param {?} num * @return {?} */ function (num) { var /** @type {?} */ match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/); if (!match) { return 0; } return Math.max(0, // Number of digits right of decimal point. (match[1] ? match[1].length : 0) // Adjust for scientific notation. - (match[2] ? +match[2] : 0)); }; /** * @param {?} options * @return {?} */ NumberFormatter.prototype.setOptions = /** * @param {?} options * @return {?} */ function (options) { _super.prototype.setOptions.call(this, options); // Set default values of setting options this.setDefaultValues(); }; /** * @param {?} data * @return {?} */ NumberFormatter.prototype.format = /** * @param {?} data * @return {?} */ function (data) { if (data === null || typeof data !== 'number') { return ""; } var /** @type {?} */ formattedData = data.toString(); var /** @type {?} */ factor = null; if (this.maxFraction !== null && this.maxFraction !== undefined) { factor = Math.pow(10, this.maxFraction); } else if (this.minFraction !== null && this.minFraction !== undefined) { factor = Math.pow(10, this.minFraction); } if (factor !== null) { if (this.roundingMode === CEIL) { formattedData = (Math.ceil(data * factor) / factor).toString(); } else if (this.roundingMode === FLOOR) { formattedData = (Math.floor(data * factor) / factor).toString(); } else { // default as round formattedData = (Math.round(data * factor) / factor).toString(); } } if (this.minFraction !== null && this.minFraction !== undefined) { var /** @type {?} */ idx = formattedData.indexOf("."); if (idx > -1) { var /** @type {?} */ decimal = formattedData.slice(idx + 1, formattedData.length); if (decimal.length < this.minFraction) { for (var /** @type {?} */ i = decimal.length; i < this.minFraction; i++) { decimal += "0"; } } // add new fraction formattedData = formattedData.slice(0, idx) + "." + decimal; } else { var /** @type {?} */ decimal = ""; for (var /** @type {?} */ i = 0; i < this.minFraction; i++) { decimal += "0"; } formattedData = formattedData + "." + decimal; } } return formattedData; }; /** * @param {?} data * @return {?} */ NumberFormatter.prototype.parse = /** * @param {?} data * @return {?} */ function (data) { if (data === null || typeof data === 'undefined') { return null; } return 0; }; /** * @param {?} args * @return {?} */ NumberFormatter.prototype.parseToOptions = /** * @param {?} args * @return {?} */ function (args) { var /** @type {?} */ minFraction = undefined; var /** @type {?} */ maxFraction = undefined; var /** @type {?} */ roundingMode = undefined; if (args !== null && typeof args !== 'undefined') { if (args.length > 0) { minFraction = args[0]; } if (args.length > 1) { maxFraction = args[1]; } if (args.length > 2) { roundingMode = args[2]; } } return { minFraction: minFraction, maxFraction: maxFraction, roundingMode: roundingMode }; }; /** * @return {?} */ NumberFormatter.prototype.getMinFraction = /** * @return {?} */ function () { return this.minFraction; }; /** * @param {?} minFraction * @return {?} */ NumberFormatter.prototype.setMinFraction = /** * @param {?} minFraction * @return {?} */ function (minFraction) { this.minFraction = minFraction; }; /** * @return {?} */ NumberFormatter.prototype.getMaxFraction = /** * @return {?} */ function () { return this.maxFraction; }; /** * @param {?} maxFraction * @return {?} */ NumberFormatter.prototype.setMaxFraction = /** * @param {?} maxFraction * @return {?} */ function (maxFraction) { this.maxFraction = maxFraction; }; NumberFormatter.NAME = NAME; NumberFormatter.CEIL = CEIL; NumberFormatter.ROUND = ROUND; NumberFormatter.FLOOR = FLOOR; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Number) ], NumberFormatter.prototype, "minFraction", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Number) ], NumberFormatter.prototype, "maxFraction", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], NumberFormatter.prototype, "roundingMode", void 0); return NumberFormatter; }(AbstractPipeFormatter)); export { NumberFormatter }; function NumberFormatter_tsickle_Closure_declarations() { /** @type {?} */ NumberFormatter.NAME; /** @type {?} */ NumberFormatter.CEIL; /** @type {?} */ NumberFormatter.ROUND; /** @type {?} */ NumberFormatter.FLOOR; /** @type {?} */ NumberFormatter.prototype.minFraction; /** @type {?} */ NumberFormatter.prototype.maxFraction; /** @type {?} */ NumberFormatter.prototype.roundingMode; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVtYmVyRm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvZm9ybWF0dGVyL051bWJlckZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUt2RCxxQkFBTSxJQUFJLEdBQVcsUUFBUSxDQUFDO0FBRTlCLHFCQUFNLElBQUksR0FBVyxNQUFNLENBQUM7QUFDNUIscUJBQU0sS0FBSyxHQUFXLE9BQU8sQ0FBQztBQUM5QixxQkFBTSxLQUFLLEdBQVcsT0FBTyxDQUFDOztJQUVPLDJDQUFxQjtJQWN4RDtRQUFBLFlBQ0Usa0JBQU0sSUFBSSxDQUFDLFNBR1o7UUFEQyxLQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs7S0FDekI7Ozs7SUFFTywwQ0FBZ0I7Ozs7UUFDdEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7Ozs7OztJQUdLLHNDQUFZOzs7O2NBQUMsR0FBVztRQUM5QixxQkFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDakUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNWO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2IsQ0FBQzs7UUFFRCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxD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R0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hCO1NBQ0Y7UUFFRCxNQUFNLENBQUM7WUFDTCxXQUFXLEVBQUUsV0FBVztZQUN4QixXQUFXLEVBQUUsV0FBVztZQUN4QixZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDOzs7OztJQUdHLHdDQUFjOzs7O1FBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFBOzs7Ozs7SUFHbEIsd0NBQWM7Ozs7Y0FBQyxXQUFtQjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7Ozs7SUFHMUIsd0NBQWM7Ozs7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUE7Ozs7OztJQUdsQix3Q0FBYzs7OztjQUFDLFdBQW1CO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBOzsyQkE1SU0sSUFBSTsyQkFDSixJQUFJOzRCQUNILEtBQUs7NEJBQ0wsS0FBSzs7UUFFM0MsTUFBTSxFQUFFOzs7O1FBRVIsTUFBTSxFQUFFOzs7O1FBRVIsTUFBTSxFQUFFOzs7MEJBdkJYO0VBWXFDLHFCQUFxQjtTQUE3QyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RQaXBlRm9ybWF0dGVyIH0gZnJvbSAnLi9BYnN0cmFjdFBpcGVGb3JtYXR0ZXInO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlscyB9IGZyb20gJy4uL3V0aWxzL0RhdGVUaW1lVXRpbHMnO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2Uvc2VydmljZXMnO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vbW9kZWwvUGhsb3hBcHBJbmZvJztcblxuY29uc3QgTkFNRTogc3RyaW5nID0gJ251bWJlcic7XG5cbmNvbnN0IENFSUw6IHN0cmluZyA9ICdjZWlsJztcbmNvbnN0IFJPVU5EOiBzdHJpbmcgPSAncm91bmQnO1xuY29uc3QgRkxPT1I6IHN0cmluZyA9ICdmbG9vcic7XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJGb3JtYXR0ZXIgZXh0ZW5kcyBBYnN0cmFjdFBpcGVGb3JtYXR0ZXIge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkFNRTogc3RyaW5nID0gTkFNRTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDRUlMOiBzdHJpbmcgPSBDRUlMO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJPVU5EOiBzdHJpbmcgPSBST1VORDtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGTE9PUjogc3RyaW5nID0gRkxPT1I7XG5cbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgbWluRnJhY3Rpb246IG51bWJlcjtcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgbWF4RnJhY3Rpb246IG51bWJlcjtcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgcm91bmRpbmdNb2RlOiBzdHJpbmc7IC8vIHJvdW5kIGZsb29yIGNlaWxpbmcgZGVmYXVsdCBhcyBhIGNlaWxpbmdcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihOQU1FKTtcblxuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0VmFsdWVzKCkge1xuICAgIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy5yb3VuZGluZ01vZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnJvdW5kaW5nTW9kZSA9IFJPVU5EO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVjaW1hbENvdW50KG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgbWF0Y2ggPSAoJycgKyBudW0pLm1hdGNoKC8oPzpcXC4oXFxkKykpPyg/OltlRV0oWystXT9cXGQrKSk/JC8pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICAvLyBOdW1iZXIgb2YgZGlnaXRzIHJpZ2h0IG9mIGRlY2ltYWwgcG9pbnQuXG4gICAgICAobWF0Y2hbMV0gPyBtYXRjaFsxXS5sZW5ndGggOiAwKVxuICAgICAgLy8gQWRqdXN0IGZvciBzY2llbnRpZmljIG5vdGF0aW9uLlxuICAgICAgLSAobWF0Y2hbMl0gPyArbWF0Y2hbMl0gOiAwKSk7XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIHNldHRpbmcgb3B0aW9uc1xuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlcygpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdChkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgbGV0IGZvcm1hdHRlZERhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgbGV0IGZhY3RvciA9IG51bGw7XG4gICAgaWYgKHRoaXMubWF4RnJhY3Rpb24gIT09IG51bGwgJiYgdGhpcy5tYXhGcmFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5tYXhGcmFjdGlvbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1pbkZyYWN0aW9uICE9PSBudWxsICYmIHRoaXMubWluRnJhY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZmFjdG9yID0gTWF0aC5wb3coMTAsIHRoaXMubWluRnJhY3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChmYWN0b3IgIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gQ0VJTCkge1xuICAgICAgICBmb3JtYXR0ZWREYXRhID0gKE1hdGguY2VpbChkYXRhICogZmFjdG9yKSAvIGZhY3RvcikudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yb3VuZGluZ01vZGUgPT09IEZMT09SKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGEgPSAoTWF0aC5mbG9vcihkYXRhICogZmFjdG9yKSAvIGZhY3RvcikudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlZmF1bHQgYXMgcm91bmRcbiAgICAgICAgZm9ybWF0dGVkRGF0YSA9IChNYXRoLnJvdW5kKGRhdGEgKiBmYWN0b3IpIC8gZmFjdG9yKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1pbkZyYWN0aW9uICE9PSBudWxsICYmIHRoaXMubWluRnJhY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IGlkeCA9IGZvcm1hdHRlZERhdGEuaW5kZXhPZihcIi5cIik7XG4gICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgbGV0IGRlY2ltYWwgPSBmb3JtYXR0ZWREYXRhLnNsaWNlKGlkeCArIDEsIGZvcm1hdHRlZERhdGEubGVuZ3RoKTtcblxuICAgICAgICBpZiAoZGVjaW1hbC5sZW5ndGggPCB0aGlzLm1pbkZyYWN0aW9uKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGRlY2ltYWwubGVuZ3RoOyBpIDwgdGhpcy5taW5GcmFjdGlvbjsgaSsrKSB7XG4gICAgICAgICAgICBkZWNpbWFsICs9IFwiMFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBuZXcgZnJhY3Rpb25cbiAgICAgICAgZm9ybWF0dGVkRGF0YSA9IGZvcm1hdHRlZERhdGEuc2xpY2UoMCwgaWR4KSArIFwiLlwiICsgZGVjaW1hbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkZWNpbWFsID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1pbkZyYWN0aW9uOyBpKyspIHtcbiAgICAgICAgICBkZWNpbWFsICs9IFwiMFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0dGVkRGF0YSA9IGZvcm1hdHRlZERhdGEgKyBcIi5cIiArIGRlY2ltYWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZERhdGE7XG4gIH1cblxuICBwdWJsaWMgcGFyc2UoZGF0YTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZVRvT3B0aW9ucyhhcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgbGV0IG1pbkZyYWN0aW9uOiBudW1iZXIgPSB1bmRlZmluZWQ7XG4gICAgbGV0IG1heEZyYWN0aW9uOiBudW1iZXIgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHJvdW5kaW5nTW9kZTogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGFyZ3MgIT09IG51bGwgJiYgdHlwZW9mIGFyZ3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uID0gYXJnc1swXTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbWF4RnJhY3Rpb24gPSBhcmdzWzFdO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMikge1xuICAgICAgICByb3VuZGluZ01vZGUgPSBhcmdzWzJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtaW5GcmFjdGlvbjogbWluRnJhY3Rpb24sXG4gICAgICBtYXhGcmFjdGlvbjogbWF4RnJhY3Rpb24sXG4gICAgICByb3VuZGluZ01vZGU6IHJvdW5kaW5nTW9kZVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0TWluRnJhY3Rpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5taW5GcmFjdGlvblxuICB9XG5cbiAgcHVibGljIHNldE1pbkZyYWN0aW9uKG1pbkZyYWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1pbkZyYWN0aW9uID0gbWluRnJhY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0TWF4RnJhY3Rpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXhGcmFjdGlvblxuICB9XG5cbiAgcHVibGljIHNldE1heEZyYWN0aW9uKG1heEZyYWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heEZyYWN0aW9uID0gbWF4RnJhY3Rpb25cbiAgfVxufVxuIl19