UNPKG

elliptical-number

Version:

Elliptical phrases for numbers (Integer, Decimal, DigitString, Ordinal)

96 lines (75 loc) 2.61 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _elliptical = require('elliptical'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @jsx createElement */ var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; function isSignedDecimal(input) { return (/^[\-\+]?(\d+(\.\d*)?|\.\d+)$/.test(input) ); } function parseDecimal(string) { var parts = string.split('.'); var num = 0; if (parts[0] !== '' && parts[0] !== '-' && parts[0] !== '+') { num = parseInt(parts[0], 10); } if (parts.length > 1 && parts[1].length > 0) { var frac = parseInt(parts[1], 10) / Math.pow(10, parts[1].length); num += _lodash2.default.startsWith(parts[0], '-') ? -frac : frac; } return num; } function getValue(option) { return _lodash2.default.assign({}, option, { result: parseDecimal(option.result) }); } function _suppressWhen(input, props) { if (input === '-' || input === '+' || input === '.' || input === '-.' || input === '+.') return true; if (!isSignedDecimal(input)) return false; var numValue = parseDecimal(input); if (props.min >= 0) { if (_lodash2.default.startsWith(input, '-')) return false; if (numValue < 0) return false; if (numValue > props.max) return false; if (numValue < props.min) return true; } else if (props.max <= 0) { if (!_lodash2.default.startsWith(input, '-')) return false; if (numValue > 0) return false; if (numValue < props.min) return false; if (numValue > props.max) return true; } return false; } var defaultProps = { max: MAX_SAFE_INTEGER, min: -MAX_SAFE_INTEGER, argument: 'decimal', limit: 1 }; function filterResult(result, _ref) { var props = _ref.props; return result <= props.max && result >= props.min; } function describe(_ref2) { var props = _ref2.props; return (0, _elliptical.createElement)( 'placeholder', { label: props.label, arguments: props.phraseArguments || (props.phraseArguments ? [props.phraseArgument] : [props.label]), suppressWhen: function suppressWhen(input) { return _suppressWhen(input, props); } }, (0, _elliptical.createElement)( 'map', { outbound: getValue }, (0, _elliptical.createElement)('freetext', { filter: isSignedDecimal, limit: props.limit, splitOn: /[^\d\.]/, score: 1 }) ) ); } exports.default = { defaultProps: defaultProps, describe: describe, filterResult: filterResult, id: 'elliptical-number:Decimal' };