ng-number-to-text
Version:
Set of pipes for angular2+ projects to convert numbers to words as ordinal numbers
245 lines (244 loc) • 19.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Pipe } from '@angular/core';
export class NumberToTextPipe {
/**
* @param {?} value
* @return {?}
*/
transform(value) {
/** @type {?} */
let number;
if (typeof 'value' === 'string') {
number = parseInt(value, 10);
}
else {
number = value;
}
/** @type {?} */
let text = this.checkNumber(number);
return 'The ' + text;
}
/**
* @param {?} value
* @return {?}
*/
checkNumber(value) {
if (this.checkZero(value)) {
return 'zeroth';
}
else {
if (value > 0 && value <= 10)
return this.checkSingle(value);
else if (value > 10 && value <= 20)
return this.checkTenth(value);
else if (value > 20 && value <= 30)
return this.checkTwentieth(value);
else if (value > 30 && value <= 40)
return this.checkThirtieth(value);
else if (value > 40 && value <= 50)
return this.checkFortieth(value);
else if (value > 50 && value <= 60)
return this.checkFiftieth(value);
else if (value > 60 && value <= 70)
return this.checkSixtieth(value);
else if (value > 70 && value <= 80)
return this.checkSeventieth(value);
else if (value > 80 && value <= 90)
return this.checkEightieth(value);
else if (value > 90 && value <= 100)
return this.checkNinetieth(value);
}
}
/**
* @param {?} value
* @return {?}
*/
checkZero(value) {
return value === 0;
}
/**
* @param {?} value
* @return {?}
*/
checkSingle(value) {
if (value < 10 && value > 0) {
if (value === 1)
return 'first';
else if (value === 2)
return 'second';
else if (value === 3)
return 'third';
else if (value === 4)
return 'fourth';
else if (value === 5)
return 'fifth';
else if (value === 6)
return 'sixth';
else if (value === 7)
return 'seventh';
else if (value === 8)
return 'eighth';
else
return 'ninth';
}
else {
return 'tenth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkTenth(value) {
if (value > 10 && value < 20) {
if (value === 11)
return 'eleventh';
else if (value === 12)
return 'twelfth';
else if (value === 13)
return 'thirteenth';
else if (value === 14)
return 'fourteenth';
else if (value === 15)
return 'fifteenth';
else if (value === 16)
return 'sixteenth';
else if (value === 17)
return 'seventeenth';
else if (value === 18)
return 'eighteenth';
else if (value === 19)
return 'nineteenth';
}
else {
return 'twentieth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkTwentieth(value) {
/** @type {?} */
let prefix = 'twenty-';
if (value > 20 && value < 30) {
value -= 20;
return prefix + this.checkSingle(value);
}
else {
return 'thirtieth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkThirtieth(value) {
/** @type {?} */
let prefix = 'thirty-';
if (value > 30 && value < 40) {
value -= 30;
return prefix + this.checkSingle(value);
}
else {
return 'fortieth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkFortieth(value) {
/** @type {?} */
let prefix = 'forty-';
if (value > 40 && value < 50) {
value -= 40;
return prefix + this.checkSingle(value);
}
else {
return 'fiftieth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkFiftieth(value) {
/** @type {?} */
let prefix = 'fifty-';
if (value > 50 && value < 60) {
value -= 50;
return prefix + this.checkSingle(value);
}
else {
return 'sixtieth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkSixtieth(value) {
/** @type {?} */
let prefix = 'sixty-';
if (value > 60 && value < 70) {
value -= 60;
return prefix + this.checkSingle(value);
}
else {
return 'seventieth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkSeventieth(value) {
/** @type {?} */
let prefix = 'seventy-';
if (value > 70 && value < 80) {
value -= 70;
return prefix + this.checkSingle(value);
}
else {
return 'eightieth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkEightieth(value) {
/** @type {?} */
let prefix = 'eighty-';
if (value > 80 && value < 90) {
value -= 80;
return prefix + this.checkSingle(value);
}
else {
return 'ninetieth';
}
}
/**
* @param {?} value
* @return {?}
*/
checkNinetieth(value) {
/** @type {?} */
let prefix = 'ninety-';
if (value > 90 && value < 100) {
value -= 90;
return prefix + this.checkSingle(value);
}
else {
return 'hundredth';
}
}
}
NumberToTextPipe.decorators = [
{ type: Pipe, args: [{ name: 'numberToText' },] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXRvLXRleHQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLW51bWJlci10by10ZXh0LyIsInNvdXJjZXMiOlsibGliL3BpcGVzL251bWJlci10by10ZXh0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBR2xELE1BQU07Ozs7O0lBQ0osU0FBUyxDQUFDLEtBQVU7O1FBQ2xCLElBQUksTUFBTSxDQUFTO1FBRW5CLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQy9CLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ2hCOztRQUVELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEMsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDO0tBQ3RCOzs7OztJQUVPLFdBQVcsQ0FBQyxLQUFhO1FBQy9CLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QixPQUFPLFFBQVEsQ0FBQztTQUNqQjthQUFNO1lBQ0wsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUMxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzVCLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMzQixJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDL0IsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEtBQUssSUFB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBQaXBlKHtuYW1lOiAnbnVtYmVyVG9UZXh0J30pXHJcbmV4cG9ydCBjbGFzcyBOdW1iZXJUb1RleHRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgbGV0IG51bWJlcjogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0eXBlb2YgJ3ZhbHVlJyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgbnVtYmVyID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG51bWJlciA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBsZXQgdGV4dCA9IHRoaXMuY2hlY2tOdW1iZXIobnVtYmVyKTtcclxuXHJcbiAgICByZXR1cm4gJ1RoZSAnICsgdGV4dDtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBjaGVja051bWJlcih2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmNoZWNrWmVybyh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuICd6ZXJvdGgnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHZhbHVlID4gMCAmJiB2YWx1ZSA8PSAxMClcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja1NpbmdsZSh2YWx1ZSk7XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlID4gMTAgJiYgdmFsdWUgPD0gMjApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tUZW50aCh2YWx1ZSk7XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlID4gMjAgJiYgdmFsdWUgPD0gMzApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tUd2VudGlldGgodmFsdWUpO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA+IDMwICYmIHZhbHVlIDw9IDQwKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrVGhpcnRpZXRoKHZhbHVlKTtcclxuICAgICAgZWxzZSBpZiAodmFsdWUgPiA0MCAmJiB2YWx1ZSA8PSA1MClcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0ZvcnRpZXRoKHZhbHVlKTtcclxuICAgICAgZWxzZSBpZiAodmFsdWUgPiA1MCAmJiB2YWx1ZSA8PSA2MClcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0ZpZnRpZXRoKHZhbHVlKTtcclxuICAgICAgZWxzZSBpZiAodmFsdWUgPiA2MCAmJiB2YWx1ZSA8PSA3MClcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja1NpeHRpZXRoKHZhbHVlKTtcclxuICAgICAgZWxzZSBpZiAodmFsdWUgPiA3MCAmJiB2YWx1ZSA8PSA4MClcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja1NldmVudGlldGgodmFsdWUpO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA+IDgwICYmIHZhbHVlIDw9IDkwKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrRWlnaHRpZXRoKHZhbHVlKTtcclxuICAgICAgZWxzZSBpZiAodmFsdWUgPiA5MCAmJiB2YWx1ZSA8PSAxMDApXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tOaW5ldGlldGgodmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1plcm8odmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlID09PSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1NpbmdsZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA8IDEwICYmIHZhbHVlID4gMCkge1xyXG4gICAgICBpZiAodmFsdWUgPT09IDEpXHJcbiAgICAgICAgcmV0dXJuICdmaXJzdCc7XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAyKVxyXG4gICAgICAgIHJldHVybiAnc2Vjb25kJztcclxuICAgICAgZWxzZSBpZiAodmFsdWUgPT09IDMpXHJcbiAgICAgICAgcmV0dXJuICd0aGlyZCc7XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlID09PSA0KVxyXG4gICAgICAgIHJldHVybiAnZm91cnRoJztcclxuICAgICAgZWxzZSBpZiAodmFsdWUgPT09IDUpXHJcbiAgICAgICAgcmV0dXJuICdmaWZ0aCc7XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlID09PSA2KVxyXG4gICAgICAgIHJldHVybiAnc2l4dGgnO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gNylcclxuICAgICAgICByZXR1cm4gJ3NldmVudGgnO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gOClcclxuICAgICAgICByZXR1cm4gJ2VpZ2h0aCc7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gJ25pbnRoJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAndGVudGgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1RlbnRoKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID4gMTAgJiYgdmFsdWUgPCAyMCkge1xyXG4gICAgICBpZiAodmFsdWUgPT09IDExKVxyXG4gICAgICAgIHJldHVybiAnZWxldmVudGgnO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gMTIpXHJcbiAgICAgICAgcmV0dXJuICd0d2VsZnRoJztcclxuICAgICAgZWxzZSBpZiAodmFsdWUgPT09IDEzKVxyXG4gICAgICAgIHJldHVybiAndGhpcnRlZW50aCc7XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAxNClcclxuICAgICAgICByZXR1cm4gJ2ZvdXJ0ZWVudGgnO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gMTUpXHJcbiAgICAgICAgcmV0dXJuICdmaWZ0ZWVudGgnO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gMTYpXHJcbiAgICAgICAgcmV0dXJuICdzaXh0ZWVudGgnO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gMTcpXHJcbiAgICAgICAgcmV0dXJuICdzZXZlbnRlZW50aCc7XHJcbiAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAxOClcclxuICAgICAgICByZXR1cm4gJ2VpZ2h0ZWVudGgnO1xyXG4gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gMTkpXHJcbiAgICAgICAgcmV0dXJuICduaW5ldGVlbnRoJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAndHdlbnRpZXRoJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tUd2VudGlldGgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcHJlZml4ID0gJ3R3ZW50eS0nO1xyXG4gICAgaWYgKHZhbHVlID4gMjAgJiYgdmFsdWUgPCAzMCkge1xyXG4gICAgICB2YWx1ZSAtPSAyMDtcclxuICAgICAgcmV0dXJuIHByZWZpeCArIHRoaXMuY2hlY2tTaW5nbGUodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICd0aGlydGlldGgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1RoaXJ0aWV0aCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBwcmVmaXggPSAndGhpcnR5LSc7XHJcbiAgICBpZiAodmFsdWUgPiAzMCAmJiB2YWx1ZSA8IDQwKSB7XHJcbiAgICAgIHZhbHVlIC09IDMwO1xyXG4gICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy5jaGVja1NpbmdsZSh2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ2ZvcnRpZXRoJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tGb3J0aWV0aCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBwcmVmaXggPSAnZm9ydHktJztcclxuICAgIGlmICh2YWx1ZSA+IDQwICYmIHZhbHVlIDwgNTApIHtcclxuICAgICAgdmFsdWUgLT0gNDA7XHJcbiAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLmNoZWNrU2luZ2xlKHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnZmlmdGlldGgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0ZpZnRpZXRoKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHByZWZpeCA9ICdmaWZ0eS0nO1xyXG4gICAgaWYgKHZhbHVlID4gNTAgJiYgdmFsdWUgPCA2MCkge1xyXG4gICAgICB2YWx1ZSAtPSA1MDtcclxuICAgICAgcmV0dXJuIHByZWZpeCArIHRoaXMuY2hlY2tTaW5nbGUodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdzaXh0aWV0aCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrU2l4dGlldGgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcHJlZml4ID0gJ3NpeHR5LSc7XHJcbiAgICBpZiAodmFsdWUgPiA2MCAmJiB2YWx1ZSA8IDcwKSB7XHJcbiAgICAgIHZhbHVlIC09IDYwO1xyXG4gICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy5jaGVja1NpbmdsZSh2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ3NldmVudGlldGgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1NldmVudGlldGgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcHJlZml4ID0gJ3NldmVudHktJztcclxuICAgIGlmICh2YWx1ZSA+IDcwICYmIHZhbHVlIDwgODApIHtcclxuICAgICAgdmFsdWUgLT0gNzA7XHJcbiAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLmNoZWNrU2luZ2xlKHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnZWlnaHRpZXRoJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tFaWdodGlldGgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcHJlZml4ID0gJ2VpZ2h0eS0nO1xyXG4gICAgaWYgKHZhbHVlID4gODAgJiYgdmFsdWUgPCA5MCkge1xyXG4gICAgICB2YWx1ZSAtPSA4MDtcclxuICAgICAgcmV0dXJuIHByZWZpeCArIHRoaXMuY2hlY2tTaW5nbGUodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICduaW5ldGlldGgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja05pbmV0aWV0aCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBwcmVmaXggPSAnbmluZXR5LSc7XHJcbiAgICBpZiAodmFsdWUgPiA5MCAmJiB2YWx1ZSA8IDEwMCkge1xyXG4gICAgICB2YWx1ZSAtPSA5MDtcclxuICAgICAgcmV0dXJuIHByZWZpeCArIHRoaXMuY2hlY2tTaW5nbGUodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdodW5kcmVkdGgnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=