UNPKG

ng-units

Version:

Angular component library for units of measurement.

73 lines 10.4 kB
import { SimpleUnit } from './unit'; import { QuantityFormatters } from './formatters'; import { QuantityParsers } from './parsers'; export class Quantity { name; unit; units = []; formatter; parser; constructor(definition) { if (definition) { this.name = definition.name; for (const symbol of Object.keys(definition.units)) { const def = definition.units[symbol]; this.units.push(new SimpleUnit(symbol, def[0], def[1])); } this.unit = this.units[0]; const formatterName = definition.formatter || 'default'; const parserName = definition.parser || 'default'; this.formatter = QuantityFormatters[formatterName]; this.parser = QuantityParsers[parserName]; } } fromBase(value, unit) { const n = this.parser(value); return isNumeric(n) ? this.getUnit(unit).fromBase(n) : null; } toBase(value, unit) { const n = this.parser(value); return isNumeric(n) ? this.getUnit(unit).toBase(n) : null; } getUnit(unit) { return this.findUnit(unit) || this.unit; } selectUnit(unit) { const u = this.findUnit(unit); if (u) { this.unit = u; } } findUnit(unit) { if (!unit) { return; } const id = typeof unit === 'string' ? unit : unit.symbol; const units = this.units; for (let i = 0, e = units.length; i !== e; i++) { if (units[i].symbol === id) { return units[i]; } } } /** * Returns a string containing formatted number and unit symbol (optional). * @param value string or number */ print(value, addUnitSymbol, unit) { const number = this.parser(value); if (typeof number !== 'number') { return ''; } const result = this.formatter(number); return addUnitSymbol ? (result + ' ' + this.getUnit(unit).symbol) : result; } } function isNumeric(value) { return typeof value === 'number' && !isNaN(value); } export function defaultPrint(value) { const num = QuantityParsers['default'](value); return typeof num === 'number' ? QuantityFormatters['default'](num) : ''; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy11bml0cy9zcmMvbGliL3F1YW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFxQixrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyRSxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVc1RCxNQUFNLE9BQU8sUUFBUTtJQUNqQixJQUFJLENBQVU7SUFDZCxJQUFJLENBQVE7SUFDWixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFNBQVMsQ0FBcUI7SUFDOUIsTUFBTSxDQUFrQjtJQUV4QixZQUFZLFVBQStCO1FBQ3ZDLElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzVCLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRDtZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQztZQUN4RCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQztZQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFH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Q0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2ltcGxlVW5pdCwgVW5pdCB9IGZyb20gJy4vdW5pdCc7XHJcbmltcG9ydCB7IFF1YW50aXR5Rm9ybWF0dGVyLCBRdWFudGl0eUZvcm1hdHRlcnMgfSBmcm9tICcuL2Zvcm1hdHRlcnMnO1xyXG5pbXBvcnQgeyBRdWFudGl0eVBhcnNlciwgUXVhbnRpdHlQYXJzZXJzIH0gZnJvbSAnLi9wYXJzZXJzJztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1YW50aXR5RGVmaW5pdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB1bml0czogeyBbc3ltYm9sOiBzdHJpbmddOiBudW1iZXJbXSB9O1xyXG4gICAgZm9ybWF0dGVyPzogc3RyaW5nO1xyXG4gICAgcGFyc2VyPzogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFF1YW50aXR5IHtcclxuICAgIG5hbWUhOiBzdHJpbmc7XHJcbiAgICB1bml0ITogVW5pdDtcclxuICAgIHVuaXRzOiBVbml0W10gPSBbXTtcclxuICAgIGZvcm1hdHRlciE6IFF1YW50aXR5Rm9ybWF0dGVyO1xyXG4gICAgcGFyc2VyITogUXVhbnRpdHlQYXJzZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoZGVmaW5pdGlvbj86IFF1YW50aXR5RGVmaW5pdGlvbikge1xyXG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IGRlZmluaXRpb24ubmFtZTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2wgb2YgT2JqZWN0LmtleXMoZGVmaW5pdGlvbi51bml0cykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZiA9IGRlZmluaXRpb24udW5pdHNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5pdHMucHVzaChuZXcgU2ltcGxlVW5pdChzeW1ib2wsIGRlZlswXSwgZGVmWzFdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51bml0ID0gdGhpcy51bml0c1swXTtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyTmFtZSA9IGRlZmluaXRpb24uZm9ybWF0dGVyIHx8ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VyTmFtZSA9IGRlZmluaXRpb24ucGFyc2VyIHx8ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZXIgPSBRdWFudGl0eUZvcm1hdHRlcnNbZm9ybWF0dGVyTmFtZV07XHJcbiAgICAgICAgICAgIHRoaXMucGFyc2VyID0gUXVhbnRpdHlQYXJzZXJzW3BhcnNlck5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmcm9tQmFzZSh2YWx1ZTogc3RyaW5nfG51bWJlcnx1bmRlZmluZWR8bnVsbCwgdW5pdD86IFVuaXR8c3RyaW5nKTogbnVtYmVyfG51bGwge1xyXG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLnBhcnNlcih2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGlzTnVtZXJpYyhuKSA/IHRoaXMuZ2V0VW5pdCh1bml0KS5mcm9tQmFzZShuKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdG9CYXNlKHZhbHVlOiBzdHJpbmd8bnVtYmVyfG51bGx8dW5kZWZpbmVkLCB1bml0PzogVW5pdHxzdHJpbmcpOiBudW1iZXJ8bnVsbCB7XHJcbiAgICAgICAgY29uc3QgbiA9IHRoaXMucGFyc2VyKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gaXNOdW1lcmljKG4pID8gdGhpcy5nZXRVbml0KHVuaXQpLnRvQmFzZShuKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVbml0KHVuaXQ/OiBzdHJpbmd8VW5pdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRVbml0KHVuaXQpIHx8IHRoaXMudW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbml0KHVuaXQ/OiBzdHJpbmd8VW5pdHxudWxsKSB7XHJcbiAgICAgICAgY29uc3QgdSA9IHRoaXMuZmluZFVuaXQodW5pdCk7XHJcbiAgICAgICAgaWYgKHUpIHtcclxuICAgICAgICAgICAgdGhpcy51bml0ID0gdTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmluZFVuaXQodW5pdD86IHN0cmluZ3xVbml0fG51bGwpOiBVbml0fHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKCF1bml0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWQgPSB0eXBlb2YgdW5pdCA9PT0gJ3N0cmluZycgPyB1bml0IDogdW5pdC5zeW1ib2w7XHJcbiAgICAgICAgY29uc3QgdW5pdHMgPSB0aGlzLnVuaXRzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBlID0gdW5pdHMubGVuZ3RoOyBpICE9PSBlOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHVuaXRzW2ldLnN5bWJvbCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bml0c1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBmb3JtYXR0ZWQgbnVtYmVyIGFuZCB1bml0IHN5bWJvbCAob3B0aW9uYWwpLlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZyBvciBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHJpbnQodmFsdWU6IHN0cmluZ3xudW1iZXJ8bnVsbHx1bmRlZmluZWQsIGFkZFVuaXRTeW1ib2w/OiBib29sZWFuLCB1bml0Pzogc3RyaW5nfFVuaXQpIHtcclxuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnBhcnNlcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBudW1iZXIgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mb3JtYXR0ZXIobnVtYmVyKTtcclxuICAgICAgICByZXR1cm4gYWRkVW5pdFN5bWJvbCA/IChyZXN1bHQgKyAnICcgKyB0aGlzLmdldFVuaXQodW5pdCkuc3ltYm9sKSA6IHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNOdW1lcmljKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVtYmVyIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFpc05hTih2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0UHJpbnQodmFsdWU6IHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkfG51bGwpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbnVtID0gUXVhbnRpdHlQYXJzZXJzWydkZWZhdWx0J10odmFsdWUpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBudW0gPT09ICdudW1iZXInID8gUXVhbnRpdHlGb3JtYXR0ZXJzWydkZWZhdWx0J10obnVtKSA6ICcnO1xyXG59XHJcbiJdfQ==