com.phloxui
Version:
PhloxUI Ng2+ Framework
194 lines (193 loc) • 17.2 kB
JavaScript
/**
* @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';
const /** @type {?} */ NAME = 'number';
const /** @type {?} */ CEIL = 'ceil';
const /** @type {?} */ ROUND = 'round';
const /** @type {?} */ FLOOR = 'floor';
export class NumberFormatter extends AbstractPipeFormatter {
constructor() {
super(NAME);
this.setDefaultValues();
}
/**
* @return {?}
*/
setDefaultValues() {
if (this.roundingMode === null || typeof this.roundingMode === 'undefined') {
this.roundingMode = ROUND;
}
}
/**
* @param {?} num
* @return {?}
*/
decimalCount(num) {
let /** @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 {?}
*/
setOptions(options) {
super.setOptions(options);
// Set default values of setting options
this.setDefaultValues();
}
/**
* @param {?} data
* @return {?}
*/
format(data) {
if (data === null || typeof data !== 'number') {
return "";
}
let /** @type {?} */ formattedData = data.toString();
let /** @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) {
let /** @type {?} */ idx = formattedData.indexOf(".");
if (idx > -1) {
let /** @type {?} */ decimal = formattedData.slice(idx + 1, formattedData.length);
if (decimal.length < this.minFraction) {
for (let /** @type {?} */ i = decimal.length; i < this.minFraction; i++) {
decimal += "0";
}
}
// add new fraction
formattedData = formattedData.slice(0, idx) + "." + decimal;
}
else {
let /** @type {?} */ decimal = "";
for (let /** @type {?} */ i = 0; i < this.minFraction; i++) {
decimal += "0";
}
formattedData = formattedData + "." + decimal;
}
}
return formattedData;
}
/**
* @param {?} data
* @return {?}
*/
parse(data) {
if (data === null || typeof data === 'undefined') {
return null;
}
return 0;
}
/**
* @param {?} args
* @return {?}
*/
parseToOptions(args) {
let /** @type {?} */ minFraction = undefined;
let /** @type {?} */ maxFraction = undefined;
let /** @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 {?}
*/
getMinFraction() {
return this.minFraction;
}
/**
* @param {?} minFraction
* @return {?}
*/
setMinFraction(minFraction) {
this.minFraction = minFraction;
}
/**
* @return {?}
*/
getMaxFraction() {
return this.maxFraction;
}
/**
* @param {?} maxFraction
* @return {?}
*/
setMaxFraction(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);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVtYmVyRm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvZm9ybWF0dGVyL051bWJlckZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUt2RCx1QkFBTSxJQUFJLEdBQVcsUUFBUSxDQUFDO0FBRTlCLHVCQUFNLElBQUksR0FBVyxNQUFNLENBQUM7QUFDNUIsdUJBQU0sS0FBSyxHQUFXLE9BQU8sQ0FBQztBQUM5Qix1QkFBTSxLQUFLLEdBQVcsT0FBTyxDQUFDO0FBRTlCLE1BQU0sc0JBQXVCLFNBQVEscUJBQXFCO0lBY3hEO1FBQ0UsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRVosSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7S0FDekI7Ozs7SUFFTyxnQkFBZ0I7UUFDdEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7Ozs7OztJQUdLLFlBQVksQ0FBQyxHQUFXO1FBQzlCLHFCQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNqRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDYixDQUFDOztRQUVELENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FB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LENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkI7WUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEI7U0FDRjtRQUVELE1BQU0sQ0FBQztZQUNMLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUM7Ozs7O0lBR0csY0FBYztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQTs7Ozs7O0lBR2xCLGNBQWMsQ0FBQyxXQUFtQjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7Ozs7SUFHMUIsY0FBYztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQTs7Ozs7O0lBR2xCLGNBQWMsQ0FBQyxXQUFtQjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTs7O3VCQTVJTSxJQUFJO3VCQUNKLElBQUk7d0JBQ0gsS0FBSzt3QkFDTCxLQUFLOztJQUUzQyxNQUFNLEVBQUU7Ozs7SUFFUixNQUFNLEVBQUU7Ozs7SUFFUixNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdFBpcGVGb3JtYXR0ZXIgfSBmcm9tICcuL0Fic3RyYWN0UGlwZUZvcm1hdHRlcic7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvRGF0ZVRpbWVVdGlscyc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm8gfSBmcm9tICcuLi9tb2RlbC9QaGxveEFwcEluZm8nO1xuXG5jb25zdCBOQU1FOiBzdHJpbmcgPSAnbnVtYmVyJztcblxuY29uc3QgQ0VJTDogc3RyaW5nID0gJ2NlaWwnO1xuY29uc3QgUk9VTkQ6IHN0cmluZyA9ICdyb3VuZCc7XG5jb25zdCBGTE9PUjogc3RyaW5nID0gJ2Zsb29yJztcblxuZXhwb3J0IGNsYXNzIE51bWJlckZvcm1hdHRlciBleHRlbmRzIEFic3RyYWN0UGlwZUZvcm1hdHRlciB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOQU1FOiBzdHJpbmcgPSBOQU1FO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENFSUw6IHN0cmluZyA9IENFSUw7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUk9VTkQ6IHN0cmluZyA9IFJPVU5EO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZMT09SOiBzdHJpbmcgPSBGTE9PUjtcblxuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBtaW5GcmFjdGlvbjogbnVtYmVyO1xuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBtYXhGcmFjdGlvbjogbnVtYmVyO1xuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSByb3VuZGluZ01vZGU6IHN0cmluZzsgLy8gcm91bmQgZmxvb3IgY2VpbGluZyBkZWZhdWx0IGFzIGEgY2VpbGluZ1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKE5BTUUpO1xuXG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWVzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMucm91bmRpbmdNb2RlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLnJvdW5kaW5nTW9kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMucm91bmRpbmdNb2RlID0gUk9VTkQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWNpbWFsQ291bnQobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBtYXRjaCA9ICgnJyArIG51bSkubWF0Y2goLyg/OlxcLihcXGQrKSk/KD86W2VFXShbKy1dP1xcZCspKT8kLyk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIC8vIE51bWJlciBvZiBkaWdpdHMgcmlnaHQgb2YgZGVjaW1hbCBwb2ludC5cbiAgICAgIChtYXRjaFsxXSA/IG1hdGNoWzFdLmxlbmd0aCA6IDApXG4gICAgICAvLyBBZGp1c3QgZm9yIHNjaWVudGlmaWMgbm90YXRpb24uXG4gICAgICAtIChtYXRjaFsyXSA/ICttYXRjaFsyXSA6IDApKTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgb2Ygc2V0dGluZyBvcHRpb25zXG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWVzKCk7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBsZXQgZm9ybWF0dGVkRGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICBsZXQgZmFjdG9yID0gbnVsbDtcbiAgICBpZiAodGhpcy5tYXhGcmFjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLm1heEZyYWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZhY3RvciA9IE1hdGgucG93KDEwLCB0aGlzLm1heEZyYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluRnJhY3Rpb24gIT09IG51bGwgJiYgdGhpcy5taW5GcmFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5taW5GcmFjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKGZhY3RvciAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMucm91bmRpbmdNb2RlID09PSBDRUlMKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGEgPSAoTWF0aC5jZWlsKGRhdGEgKiBmYWN0b3IpIC8gZmFjdG9yKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gRkxPT1IpIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0YSA9IChNYXRoLmZsb29yKGRhdGEgKiBmYWN0b3IpIC8gZmFjdG9yKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBhcyByb3VuZFxuICAgICAgICBmb3JtYXR0ZWREYXRhID0gKE1hdGgucm91bmQoZGF0YSAqIGZhY3RvcikgLyBmYWN0b3IpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWluRnJhY3Rpb24gIT09IG51bGwgJiYgdGhpcy5taW5GcmFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgaWR4ID0gZm9ybWF0dGVkRGF0YS5pbmRleE9mKFwiLlwiKTtcbiAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICBsZXQgZGVjaW1hbCA9IGZvcm1hdHRlZERhdGEuc2xpY2UoaWR4ICsgMSwgZm9ybWF0dGVkRGF0YS5sZW5ndGgpO1xuXG4gICAgICAgIGlmIChkZWNpbWFsLmxlbmd0aCA8IHRoaXMubWluRnJhY3Rpb24pIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gZGVjaW1hbC5sZW5ndGg7IGkgPCB0aGlzLm1pbkZyYWN0aW9uOyBpKyspIHtcbiAgICAgICAgICAgIGRlY2ltYWwgKz0gXCIwXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIG5ldyBmcmFjdGlvblxuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZm9ybWF0dGVkRGF0YS5zbGljZSgwLCBpZHgpICsgXCIuXCIgKyBkZWNpbWFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGRlY2ltYWwgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWluRnJhY3Rpb247IGkrKykge1xuICAgICAgICAgIGRlY2ltYWwgKz0gXCIwXCI7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZm9ybWF0dGVkRGF0YSArIFwiLlwiICsgZGVjaW1hbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVkRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZShkYXRhOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHVibGljIHBhcnNlVG9PcHRpb25zKGFyZ3M6IGFueVtdKTogYW55IHtcbiAgICBsZXQgbWluRnJhY3Rpb246IG51bWJlciA9IHVuZGVmaW5lZDtcbiAgICBsZXQgbWF4RnJhY3Rpb246IG51bWJlciA9IHVuZGVmaW5lZDtcbiAgICBsZXQgcm91bmRpbmdNb2RlOiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoYXJncyAhPT0gbnVsbCAmJiB0eXBlb2YgYXJncyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWluRnJhY3Rpb24gPSBhcmdzWzBdO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICBtYXhGcmFjdGlvbiA9IGFyZ3NbMV07XG4gICAgICB9XG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJvdW5kaW5nTW9kZSA9IGFyZ3NbMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1pbkZyYWN0aW9uOiBtaW5GcmFjdGlvbixcbiAgICAgIG1heEZyYWN0aW9uOiBtYXhGcmFjdGlvbixcbiAgICAgIHJvdW5kaW5nTW9kZTogcm91bmRpbmdNb2RlXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNaW5GcmFjdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1pbkZyYWN0aW9uXG4gIH1cblxuICBwdWJsaWMgc2V0TWluRnJhY3Rpb24obWluRnJhY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubWluRnJhY3Rpb24gPSBtaW5GcmFjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhGcmFjdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1heEZyYWN0aW9uXG4gIH1cblxuICBwdWJsaWMgc2V0TWF4RnJhY3Rpb24obWF4RnJhY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubWF4RnJhY3Rpb24gPSBtYXhGcmFjdGlvblxuICB9XG59XG4iXX0=