matrix-react-sdk
Version:
SDK for matrix.org using React
175 lines (149 loc) • 17.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.formatDate = formatDate;
exports.formatFullDateNoTime = formatFullDateNoTime;
exports.formatFullDate = formatFullDate;
exports.formatFullTime = formatFullTime;
exports.formatTime = formatTime;
exports.wantsDateSeparator = wantsDateSeparator;
var _languageHandler = require("./languageHandler");
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
function getDaysArray()
/*: string[]*/
{
return [(0, _languageHandler._t)('Sun'), (0, _languageHandler._t)('Mon'), (0, _languageHandler._t)('Tue'), (0, _languageHandler._t)('Wed'), (0, _languageHandler._t)('Thu'), (0, _languageHandler._t)('Fri'), (0, _languageHandler._t)('Sat')];
}
function getMonthsArray()
/*: string[]*/
{
return [(0, _languageHandler._t)('Jan'), (0, _languageHandler._t)('Feb'), (0, _languageHandler._t)('Mar'), (0, _languageHandler._t)('Apr'), (0, _languageHandler._t)('May'), (0, _languageHandler._t)('Jun'), (0, _languageHandler._t)('Jul'), (0, _languageHandler._t)('Aug'), (0, _languageHandler._t)('Sep'), (0, _languageHandler._t)('Oct'), (0, _languageHandler._t)('Nov'), (0, _languageHandler._t)('Dec')];
}
function pad(n
/*: number*/
)
/*: string*/
{
return (n < 10 ? '0' : '') + n;
}
function twelveHourTime(date
/*: Date*/
, showSeconds = false)
/*: string*/
{
let hours = date.getHours() % 12;
const minutes = pad(date.getMinutes());
const ampm = date.getHours() >= 12 ? (0, _languageHandler._t)('PM') : (0, _languageHandler._t)('AM');
hours = hours ? hours : 12; // convert 0 -> 12
if (showSeconds) {
const seconds = pad(date.getSeconds());
return `${hours}:${minutes}:${seconds}${ampm}`;
}
return `${hours}:${minutes}${ampm}`;
}
function formatDate(date
/*: Date*/
, showTwelveHour = false)
/*: string*/
{
const now = new Date();
const days = getDaysArray();
const months = getMonthsArray();
if (date.toDateString() === now.toDateString()) {
return formatTime(date, showTwelveHour);
} else if (now.getTime() - date.getTime() < 6 * 24 * 60 * 60 * 1000) {
// TODO: use standard date localize function provided in counterpart
return (0, _languageHandler._t)('%(weekDayName)s %(time)s', {
weekDayName: days[date.getDay()],
time: formatTime(date, showTwelveHour)
});
} else if (now.getFullYear() === date.getFullYear()) {
// TODO: use standard date localize function provided in counterpart
return (0, _languageHandler._t)('%(weekDayName)s, %(monthName)s %(day)s %(time)s', {
weekDayName: days[date.getDay()],
monthName: months[date.getMonth()],
day: date.getDate(),
time: formatTime(date, showTwelveHour)
});
}
return formatFullDate(date, showTwelveHour);
}
function formatFullDateNoTime(date
/*: Date*/
)
/*: string*/
{
const days = getDaysArray();
const months = getMonthsArray();
return (0, _languageHandler._t)('%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s', {
weekDayName: days[date.getDay()],
monthName: months[date.getMonth()],
day: date.getDate(),
fullYear: date.getFullYear()
});
}
function formatFullDate(date
/*: Date*/
, showTwelveHour = false, showSeconds = true)
/*: string*/
{
const days = getDaysArray();
const months = getMonthsArray();
return (0, _languageHandler._t)('%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s', {
weekDayName: days[date.getDay()],
monthName: months[date.getMonth()],
day: date.getDate(),
fullYear: date.getFullYear(),
time: showSeconds ? formatFullTime(date, showTwelveHour) : formatTime(date, showTwelveHour)
});
}
function formatFullTime(date
/*: Date*/
, showTwelveHour = false)
/*: string*/
{
if (showTwelveHour) {
return twelveHourTime(date, true);
}
return pad(date.getHours()) + ':' + pad(date.getMinutes()) + ':' + pad(date.getSeconds());
}
function formatTime(date
/*: Date*/
, showTwelveHour = false)
/*: string*/
{
if (showTwelveHour) {
return twelveHourTime(date);
}
return pad(date.getHours()) + ':' + pad(date.getMinutes());
}
const MILLIS_IN_DAY = 86400000;
function wantsDateSeparator(prevEventDate
/*: Date*/
, nextEventDate
/*: Date*/
)
/*: boolean*/
{
if (!nextEventDate || !prevEventDate) {
return false;
} // Return early for events that are > 24h apart
if (Math.abs(prevEventDate.getTime() - nextEventDate.getTime()) > MILLIS_IN_DAY) {
return true;
} // Compare weekdays
return prevEventDate.getDay() !== nextEventDate.getDay();
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9EYXRlVXRpbHMudHMiXSwibmFtZXMiOlsiZ2V0RGF5c0FycmF5IiwiZ2V0TW9udGhzQXJyYXkiLCJwYWQiLCJuIiwidHdlbHZlSG91clRpbWUiLCJkYXRlIiwic2hvd1NlY29uZHMiLCJob3VycyIsImdldEhvdXJzIiwibWludXRlcyIsImdldE1pbnV0ZXMiLCJhbXBtIiwic2Vjb25kcyIsImdldFNlY29uZHMiLCJmb3JtYXREYXRlIiwic2hvd1R3ZWx2ZUhvdXIiLCJub3ciLCJEYXRlIiwiZGF5cyIsIm1vbnRocyIsInRvRGF0ZVN0cmluZyIsImZvcm1hdFRpbWUiLCJnZXRUaW1lIiwid2Vla0RheU5hbWUiLCJnZXREYXkiLCJ0aW1lIiwiZ2V0RnVsbFllYXIiLCJtb250aE5hbWUiLCJnZXRNb250aCIsImRheSIsImdldERhdGUiLCJmb3JtYXRGdWxsRGF0ZSIsImZvcm1hdEZ1bGxEYXRlTm9UaW1lIiwiZnVsbFllYXIiLCJmb3JtYXRGdWxsVGltZSIsIk1JTExJU19JTl9EQVkiLCJ3YW50c0RhdGVTZXBhcmF0b3IiLCJwcmV2RXZlbnREYXRlIiwibmV4dEV2ZW50RGF0ZSIsIk1hdGgiLCJhYnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQWlCQTs7QUFqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQSxTQUFTQSxZQUFUO0FBQUE7QUFBa0M7QUFDOUIsU0FBTyxDQUNILHlCQUFHLEtBQUgsQ0FERyxFQUVILHlCQUFHLEtBQUgsQ0FGRyxFQUdILHlCQUFHLEtBQUgsQ0FIRyxFQUlILHlCQUFHLEtBQUgsQ0FKRyxFQUtILHlCQUFHLEtBQUgsQ0FMRyxFQU1ILHlCQUFHLEtBQUgsQ0FORyxFQU9ILHlCQUFHLEtBQUgsQ0FQRyxDQUFQO0FBU0g7O0FBRUQsU0FBU0MsY0FBVDtBQUFBO0FBQW9DO0FBQ2hDLFNBQU8sQ0FDSCx5QkFBRyxLQUFI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QWEsQ0FBQ2hCLE9BQWQsRUFBbkMsSUFBOERhLGFBQWxFLEVBQWlGO0FBQzdFLFdBQU8sSUFBUDtBQUNILEdBUGlGLENBU2xGOzs7QUFDQSxTQUFPRSxhQUFhLENBQUNiLE1BQWQsT0FBMkJjLGFBQWEsQ0FBQ2QsTUFBZCxFQUFsQztBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDE1LCAyMDE2IE9wZW5NYXJrZXQgTHRkXG5Db3B5cmlnaHQgMjAxNyBWZWN0b3IgQ3JlYXRpb25zIEx0ZFxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7IF90IH0gZnJvbSAnLi9sYW5ndWFnZUhhbmRsZXInO1xuXG5mdW5jdGlvbiBnZXREYXlzQXJyYXkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAgIF90KCdTdW4nKSxcbiAgICAgICAgX3QoJ01vbicpLFxuICAgICAgICBfdCgnVHVlJyksXG4gICAgICAgIF90KCdXZWQnKSxcbiAgICAgICAgX3QoJ1RodScpLFxuICAgICAgICBfdCgnRnJpJyksXG4gICAgICAgIF90KCdTYXQnKSxcbiAgICBdO1xufVxuXG5mdW5jdGlvbiBnZXRNb250aHNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgX3QoJ0phbicpLFxuICAgICAgICBfdCgnRmViJyksXG4gICAgICAgIF90KCdNYXInKSxcbiAgICAgICAgX3QoJ0FwcicpLFxuICAgICAgICBfdCgnTWF5JyksXG4gICAgICAgIF90KCdKdW4nKSxcbiAgICAgICAgX3QoJ0p1bCcpLFxuICAgICAgICBfdCgnQXVnJyksXG4gICAgICAgIF90KCdTZXAnKSxcbiAgICAgICAgX3QoJ09jdCcpLFxuICAgICAgICBfdCgnTm92JyksXG4gICAgICAgIF90KCdEZWMnKSxcbiAgICBdO1xufVxuXG5mdW5jdGlvbiBwYWQobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKG4gPCAxMCA/ICcwJyA6ICcnKSArIG47XG59XG5cbmZ1bmN0aW9uIHR3ZWx2ZUhvdXJUaW1lKGRhdGU6IERhdGUsIHNob3dTZWNvbmRzID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpO1xuICAgIGNvbnN0IGFtcG0gPSBkYXRlLmdldEhvdXJzKCkgPj0gMTIgPyBfdCgnUE0nKSA6IF90KCdBTScpO1xuICAgIGhvdXJzID0gaG91cnMgPyBob3VycyA6IDEyOyAvLyBjb252ZXJ0IDAgLT4gMTJcbiAgICBpZiAoc2hvd1NlY29uZHMpIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHBhZChkYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfToke3NlY29uZHN9JHthbXBtfWA7XG4gICAgfVxuICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfSR7YW1wbX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlOiBEYXRlLCBzaG93VHdlbHZlSG91ciA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGRheXMgPSBnZXREYXlzQXJyYXkoKTtcbiAgICBjb25zdCBtb250aHMgPSBnZXRNb250aHNBcnJheSgpO1xuICAgIGlmIChkYXRlLnRvRGF0ZVN0cmluZygpID09PSBub3cudG9EYXRlU3RyaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWUoZGF0ZSwgc2hvd1R3ZWx2ZUhvdXIpO1xuICAgIH0gZWxzZSBpZiAobm93LmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZSgpIDwgNiAqIDI0ICogNjAgKiA2MCAqIDEwMDApIHtcbiAgICAgICAgLy8gVE9ETzogdXNlIHN0YW5kYXJkIGRhdGUgbG9jYWxpemUgZnVuY3Rpb24gcHJvdmlkZWQgaW4gY291bnRlcnBhcnRcbiAgICAgICAgcmV0dXJuIF90KCclKHdlZWtEYXlOYW1lKXMgJSh0aW1lKXMnLCB7XG4gICAgICAgICAgICB3ZWVrRGF5TmFtZTogZGF5c1tkYXRlLmdldERheSgpXSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWUoZGF0ZSwgc2hvd1R3ZWx2ZUhvdXIpLFxuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG5vdy5nZXRGdWxsWWVhcigpID09PSBkYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgLy8gVE9ETzogdXNlIHN0YW5kYXJkIGRhdGUgbG9jYWxpemUgZnVuY3Rpb24gcHJvdmlkZWQgaW4gY291bnRlcnBhcnRcbiAgICAgICAgcmV0dXJuIF90KCclKHdlZWtEYXlOYW1lKXMsICUobW9udGhOYW1lKXMgJShkYXkpcyAlKHRpbWUpcycsIHtcbiAgICAgICAgICAgIHdlZWtEYXlOYW1lOiBkYXlzW2RhdGUuZ2V0RGF5KCldLFxuICAgICAgICAgICAgbW9udGhOYW1lOiBtb250aHNbZGF0ZS5nZXRNb250aCgpXSxcbiAgICAgICAgICAgIGRheTogZGF0ZS5nZXREYXRlKCksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lKGRhdGUsIHNob3dUd2VsdmVIb3VyKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXRGdWxsRGF0ZShkYXRlLCBzaG93VHdlbHZlSG91cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGdWxsRGF0ZU5vVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gZ2V0RGF5c0FycmF5KCk7XG4gICAgY29uc3QgbW9udGhzID0gZ2V0TW9udGhzQXJyYXkoKTtcbiAgICByZXR1cm4gX3QoJyUod2Vla0RheU5hbWUpcywgJShtb250aE5hbWUpcyAlKGRheSlzICUoZnVsbFllYXIpcycsIHtcbiAgICAgICAgd2Vla0RheU5hbWU6IGRheXNbZGF0ZS5nZXREYXkoKV0sXG4gICAgICAgIG1vbnRoTmFtZTogbW9udGhzW2RhdGUuZ2V0TW9udGgoKV0sXG4gICAgICAgIGRheTogZGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGZ1bGxZZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGdWxsRGF0ZShkYXRlOiBEYXRlLCBzaG93VHdlbHZlSG91ciA9IGZhbHNlLCBzaG93U2Vjb25kcyA9IHRydWUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRheXMgPSBnZXREYXlzQXJyYXkoKTtcbiAgICBjb25zdCBtb250aHMgPSBnZXRNb250aHNBcnJheSgpO1xuICAgIHJldHVybiBfdCgnJSh3ZWVrRGF5TmFtZSlzLCAlKG1vbnRoTmFtZSlzICUoZGF5KXMgJShmdWxsWWVhcilzICUodGltZSlzJywge1xuICAgICAgICB3ZWVrRGF5TmFtZTogZGF5c1tkYXRlLmdldERheSgpXSxcbiAgICAgICAgbW9udGhOYW1lOiBtb250aHNbZGF0ZS5nZXRNb250aCgpXSxcbiAgICAgICAgZGF5OiBkYXRlLmdldERhdGUoKSxcbiAgICAgICAgZnVsbFllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgdGltZTogc2hvd1NlY29uZHMgPyBmb3JtYXRGdWxsVGltZShkYXRlLCBzaG93VHdlbHZlSG91cikgOiBmb3JtYXRUaW1lKGRhdGUsIHNob3dUd2VsdmVIb3VyKSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZ1bGxUaW1lKGRhdGU6IERhdGUsIHNob3dUd2VsdmVIb3VyID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmIChzaG93VHdlbHZlSG91cikge1xuICAgICAgICByZXR1cm4gdHdlbHZlSG91clRpbWUoZGF0ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYWQoZGF0ZS5nZXRIb3VycygpKSArICc6JyArIHBhZChkYXRlLmdldE1pbnV0ZXMoKSkgKyAnOicgKyBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZShkYXRlOiBEYXRlLCBzaG93VHdlbHZlSG91ciA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBpZiAoc2hvd1R3ZWx2ZUhvdXIpIHtcbiAgICAgICAgcmV0dXJuIHR3ZWx2ZUhvdXJUaW1lKGRhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGFkKGRhdGUuZ2V0SG91cnMoKSkgKyAnOicgKyBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpO1xufVxuXG5jb25zdCBNSUxMSVNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZnVuY3Rpb24gd2FudHNEYXRlU2VwYXJhdG9yKHByZXZFdmVudERhdGU6IERhdGUsIG5leHRFdmVudERhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIW5leHRFdmVudERhdGUgfHwgIXByZXZFdmVudERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBSZXR1cm4gZWFybHkgZm9yIGV2ZW50cyB0aGF0IGFyZSA+IDI0aCBhcGFydFxuICAgIGlmIChNYXRoLmFicyhwcmV2RXZlbnREYXRlLmdldFRpbWUoKSAtIG5leHRFdmVudERhdGUuZ2V0VGltZSgpKSA+IE1JTExJU19JTl9EQVkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ29tcGFyZSB3ZWVrZGF5c1xuICAgIHJldHVybiBwcmV2RXZlbnREYXRlLmdldERheSgpICE9PSBuZXh0RXZlbnREYXRlLmdldERheSgpO1xufVxuIl19