diff options
Diffstat (limited to 'deps/npm/node_modules/tiny-relative-date/lib/factory.js')
-rw-r--r-- | deps/npm/node_modules/tiny-relative-date/lib/factory.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/deps/npm/node_modules/tiny-relative-date/lib/factory.js b/deps/npm/node_modules/tiny-relative-date/lib/factory.js new file mode 100644 index 0000000000..ac90161445 --- /dev/null +++ b/deps/npm/node_modules/tiny-relative-date/lib/factory.js @@ -0,0 +1,100 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = relativeDateFactory; +var calculateDelta = function calculateDelta(now, date) { + return Math.round(Math.abs(now - date) / 1000); +}; + +function relativeDateFactory(translations) { + return function relativeDate(date) { + var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date(); + + if (!(date instanceof Date)) { + date = new Date(date); + } + + var delta = null; + + var minute = 60; + var hour = minute * 60; + var day = hour * 24; + var week = day * 7; + var month = day * 30; + var year = day * 365; + + delta = calculateDelta(now, date); + + if (delta > day && delta < week) { + date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); + delta = calculateDelta(now, date); + } + + var translate = function translate(translatePhrase, timeValue) { + var key = void 0; + + if (translatePhrase === 'justNow') { + key = translatePhrase; + } else if (now >= date) { + key = translatePhrase + 'Ago'; + } else { + key = translatePhrase + 'FromNow'; + } + + var translation = translations[key]; + + if (typeof translation === 'function') { + return translation(timeValue); + } + + return translation.replace('{{time}}', timeValue); + }; + + switch (false) { + case !(delta < 30): + return translate('justNow'); + + case !(delta < minute): + return translate('seconds', delta); + + case !(delta < 2 * minute): + return translate('aMinute'); + + case !(delta < hour): + return translate('minutes', Math.floor(delta / minute)); + + case Math.floor(delta / hour) !== 1: + return translate('anHour'); + + case !(delta < day): + return translate('hours', Math.floor(delta / hour)); + + case !(delta < day * 2): + return translate('aDay'); + + case !(delta < week): + return translate('days', Math.floor(delta / day)); + + case Math.floor(delta / week) !== 1: + return translate('aWeek'); + + case !(delta < month): + return translate('weeks', Math.floor(delta / week)); + + case Math.floor(delta / month) !== 1: + return translate('aMonth'); + + case !(delta < year): + return translate('months', Math.floor(delta / month)); + + case Math.floor(delta / year) !== 1: + return translate('aYear'); + + default: + return translate('overAYear'); + } + }; +} +module.exports = exports['default'];
\ No newline at end of file |