elliptical-datetime
Version:
Elliptical phrases to handle natural language dates and times
48 lines (41 loc) • 1.34 kB
JavaScript
/** @jsx createElement */
import { createElement } from 'elliptical';
import { DigitString } from 'elliptical-number';
function suppressYear(input) {
return (/^('\d|\d|\d{3})$/.test(input)
);
}
function mapResult(result) {
if (result.twoDigitYear) {
var decade = parseInt(result.twoDigitYear, 10);
var year = decade < 29 ? 2000 + decade : 1900 + decade;
return { year: year, _ambiguousCentury: true };
} else if (result.fourDigitYear) {
return { year: parseInt(result.fourDigitYear, 10) };
}
}
var defaultProps = {
label: 'year'
};
function describe(_ref) {
var props = _ref.props;
return createElement(
'placeholder',
{
suppressWhen: suppressYear,
label: props.label,
arguments: props.phraseArguments || (props.phraseArguments ? [props.phraseArgument] : [props.label]) },
createElement(
'choice',
{ limit: 1 },
createElement(
'sequence',
null,
createElement('literal', { text: '\'', optional: true, limited: true }),
createElement(DigitString, { minLength: 2, maxLength: 2, id: 'twoDigitYear', label: 'yy' })
),
createElement(DigitString, { minLength: 4, maxLength: 4, id: 'fourDigitYear', label: 'yyyy' })
)
);
}
export var Year = { mapResult: mapResult, describe: describe, defaultProps: defaultProps };