113 lines
3.9 KiB
JavaScript
113 lines
3.9 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _gradation = require("../gradation");
|
|
|
|
var _locale = require("../locale");
|
|
|
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
|
|
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
|
|
// A cache for `Intl.DateTimeFormat` twitter formatters
|
|
// for various locales (is a global variable).
|
|
var formatters = {}; // Twitter style relative time formatting.
|
|
// ("1m", "2h", "Mar 3", "Apr 4, 2012").
|
|
// Seconds, minutes and hours are shown relatively,
|
|
// and other intervals can be shown using full date format.
|
|
|
|
var _default = {
|
|
// Twitter gradation is derived from "canonical" gradation
|
|
// adjusting its "minute" `threshold` to be 45.
|
|
gradation: [// Minutes
|
|
_objectSpread({}, (0, _gradation.getStep)(_gradation.canonical, 'minute'), {
|
|
threshold: 45
|
|
}), // Hours
|
|
(0, _gradation.getStep)(_gradation.canonical, 'hour'), // If `date` and `now` happened the same year,
|
|
// then only output month and day.
|
|
{
|
|
threshold: _gradation.day - 0.5 * _gradation.hour,
|
|
format: function format(value, locale) {
|
|
// Whether can use `Intl.DateTimeFormat`.
|
|
// If `Intl` is not available,
|
|
// or the locale is not supported,
|
|
// then don't override the default labels.
|
|
|
|
/* istanbul ignore if */
|
|
if (!(0, _locale.intlDateTimeFormatSupported)()) {
|
|
return;
|
|
}
|
|
/* istanbul ignore else */
|
|
|
|
|
|
if (!formatters[locale]) {
|
|
formatters[locale] = {};
|
|
}
|
|
/* istanbul ignore else */
|
|
|
|
|
|
if (!formatters[locale].this_year) {
|
|
// "Apr 11" (MMMd)
|
|
formatters[locale].this_year = new Intl.DateTimeFormat(locale, {
|
|
month: 'short',
|
|
day: 'numeric'
|
|
});
|
|
} // Output month and day.
|
|
|
|
|
|
return formatters[locale].this_year.format((0, _gradation.getDate)(value));
|
|
}
|
|
}, // If `date` and `now` happened in defferent years,
|
|
// then output day, month and year.
|
|
{
|
|
threshold: function threshold(now, future) {
|
|
if (future) {
|
|
// Jan 1st 00:00 of the next year.
|
|
var nextYear = new Date(new Date(now).getFullYear() + 1, 0);
|
|
return (nextYear.getTime() - now) / 1000;
|
|
} else {
|
|
// Jan 1st of the current year.
|
|
var thisYear = new Date(new Date(now).getFullYear(), 0);
|
|
return (now - thisYear.getTime()) / 1000;
|
|
}
|
|
},
|
|
format: function format(value, locale) {
|
|
// Whether can use `Intl.DateTimeFormat`.
|
|
// If `Intl` is not available,
|
|
// or the locale is not supported,
|
|
// then don't override the default labels.
|
|
|
|
/* istanbul ignore if */
|
|
if (!(0, _locale.intlDateTimeFormatSupported)()) {
|
|
return;
|
|
}
|
|
/* istanbul ignore if */
|
|
|
|
|
|
if (!formatters[locale]) {
|
|
formatters[locale] = {};
|
|
}
|
|
/* istanbul ignore else */
|
|
|
|
|
|
if (!formatters[locale].other) {
|
|
// "Apr 11, 2017" (yMMMd)
|
|
formatters[locale].other = new Intl.DateTimeFormat(locale, {
|
|
year: 'numeric',
|
|
month: 'short',
|
|
day: 'numeric'
|
|
});
|
|
} // Output day, month and year.
|
|
|
|
|
|
return formatters[locale].other.format((0, _gradation.getDate)(value));
|
|
}
|
|
}],
|
|
flavour: ['tiny', 'short-time', 'narrow', 'short']
|
|
};
|
|
exports.default = _default;
|
|
//# sourceMappingURL=twitter.js.map
|