UNPKG

matrix-react-sdk

Version:
175 lines (149 loc) 17.5 kB
"use strict"; 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