diff --git a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list-experimental.js b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list-experimental.js index 6ba5db9206..c2dff1d393 100644 --- a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list-experimental.js +++ b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list-experimental.js @@ -26,7 +26,7 @@ import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mix import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-messages-list-experimental_html.js'; import {KeyboardShortcutBehavior} from '../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.js'; -import {util} from '../../../scripts/util.js'; +import {parseDate} from '../../../utils/date-util.js'; import {MessageTag} from '../../../constants/constants.js'; import {appContext} from '../../../services/app-context.js'; @@ -219,8 +219,8 @@ class GrMessagesListExperimental extends mixinBehaviors( [ combinedMessages = combinedMessages.concat(messages.slice(mi)); break; } - mDate = mDate || util.parseDate(messages[mi].date); - rDate = rDate || util.parseDate(reviewerUpdates[ri].date); + mDate = mDate || parseDate(messages[mi].date); + rDate = rDate || parseDate(reviewerUpdates[ri].date); if (rDate < mDate) { combinedMessages.push(reviewerUpdates[ri++]); rDate = null; diff --git a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.js b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.js index d1e6fced57..adf9fd35ca 100644 --- a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.js +++ b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.js @@ -25,7 +25,7 @@ import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mix import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-messages-list_html.js'; import {KeyboardShortcutBehavior} from '../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.js'; -import {util} from '../../../scripts/util.js'; +import {parseDate} from '../../../utils/date-util.js'; import {appContext} from '../../../services/app-context.js'; const MAX_INITIAL_SHOWN_MESSAGES = 20; @@ -191,8 +191,8 @@ class GrMessagesList extends mixinBehaviors( [ result = result.concat(messages.slice(mi)); break; } - mDate = mDate || util.parseDate(messages[mi].date); - rDate = rDate || util.parseDate(reviewerUpdates[ri].date); + mDate = mDate || parseDate(messages[mi].date); + rDate = rDate || parseDate(reviewerUpdates[ri].date); if (rDate < mDate) { result.push(reviewerUpdates[ri++]); rDate = null; @@ -303,14 +303,14 @@ class GrMessagesList extends mixinBehaviors( [ const messages = this.messages || []; const index = message._index; const authorId = message.author && message.author._account_id; - const mDate = util.parseDate(message.date).getTime(); + const mDate = parseDate(message.date).getTime(); // NB: Messages array has oldest messages first. let nextMDate; if (index > 0) { for (let i = index - 1; i >= 0; i--) { if (messages[i] && messages[i].author && messages[i].author._account_id === authorId) { - nextMDate = util.parseDate(messages[i].date).getTime(); + nextMDate = parseDate(messages[i].date).getTime(); break; } } @@ -324,7 +324,7 @@ class GrMessagesList extends mixinBehaviors( [ fileComments[i].author._account_id !== authorId) { continue; } - const cDate = util.parseDate(fileComments[i].updated).getTime(); + const cDate = parseDate(fileComments[i].updated).getTime(); if (cDate <= mDate) { if (nextMDate && cDate <= nextMDate) { continue; diff --git a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.js b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.js index 5a076a5a78..5ff48af14b 100644 --- a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.js +++ b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.js @@ -22,7 +22,7 @@ import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-l import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin.js'; import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-thread-list_html.js'; -import {util} from '../../../scripts/util.js'; +import {parseDate} from '../../../utils/date-util.js'; import {NO_THREADS_MSG} from '../../../constants/messages.js'; @@ -163,8 +163,8 @@ class GrThreadList extends GestureEventListeners( return c1.thread.line - c2.thread.line; } - const c1Date = c1.__date || util.parseDate(c1.updated); - const c2Date = c2.__date || util.parseDate(c2.updated); + const c1Date = c1.__date || parseDate(c1.updated); + const c2Date = c2.__date || parseDate(c2.updated); const dateCompare = c2Date - c1Date; if (dateCompare === 0 && (!c1.id || !c1.id.localeCompare)) { return 0; diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.js b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.js index cc4122d297..040b0bd4ae 100644 --- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.js +++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.js @@ -21,7 +21,7 @@ import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mix import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-comment-api_html.js'; import {PatchSetBehavior} from '../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.js'; -import {util} from '../../../scripts/util.js'; +import {parseDate} from '../../../utils/date-util.js'; const PARENT = 'PARENT'; @@ -470,7 +470,7 @@ class ChangeComments { .sort( (c1, c2) => { const dateDiff = - util.parseDate(c1.updated) - util.parseDate(c2.updated); + parseDate(c1.updated) - parseDate(c2.updated); if (dateDiff) { return dateDiff; } diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js index 684c4a8c5e..b367265ed3 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js @@ -27,7 +27,7 @@ import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-diff-host_html.js'; import {PatchSetBehavior} from '../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.js'; import {GrDiffBuilder} from '../gr-diff-builder/gr-diff-builder.js'; -import {util} from '../../../scripts/util.js'; +import {parseDate} from '../../../utils/date-util.js'; import {GerritNav} from '../../core/gr-navigation/gr-navigation.js'; import {DiffSide, rangesEqual} from '../gr-diff/gr-diff-utils.js'; import {appContext} from '../../../services/app-context.js'; @@ -667,7 +667,7 @@ class GrDiffHost extends mixinBehaviors( [ return comments.slice(0).sort((a, b) => { if (b.__draft && !a.__draft ) { return -1; } if (a.__draft && !b.__draft ) { return 1; } - return util.parseDate(a.updated) - util.parseDate(b.updated); + return parseDate(a.updated) - parseDate(b.updated); }); } diff --git a/polygerrit-ui/app/elements/gr-app-global-var-init.js b/polygerrit-ui/app/elements/gr-app-global-var-init.js index f0a9131d81..2c166f53f1 100644 --- a/polygerrit-ui/app/elements/gr-app-global-var-init.js +++ b/polygerrit-ui/app/elements/gr-app-global-var-init.js @@ -48,7 +48,6 @@ import {GrRangeNormalizer} from './diff/gr-diff-highlight/gr-range-normalizer.js import {GrCountStringFormatter} from './shared/gr-count-string-formatter/gr-count-string-formatter.js'; import {GrReviewerSuggestionsProvider, SUGGESTIONS_PROVIDERS_USERS_TYPES} from '../scripts/gr-reviewer-suggestions-provider/gr-reviewer-suggestions-provider.js'; import {util} from '../scripts/util.js'; -import moment from 'moment/src/moment.js'; import page from 'page/page.mjs'; import {Auth} from './shared/gr-rest-api-interface/gr-auth.js'; import {EventEmitter} from './shared/gr-event-interface/gr-event-interface.js'; @@ -103,7 +102,6 @@ export function initGlobalVariables() { window.GrCountStringFormatter = GrCountStringFormatter; window.GrReviewerSuggestionsProvider = GrReviewerSuggestionsProvider; window.util = util; - window.moment = moment; window.page = page; window.Auth = Auth; window.EventEmitter = EventEmitter; diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.js b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.js index 52e81c505c..8c10a113d8 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.js +++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.js @@ -26,7 +26,7 @@ import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-comment-thread_html.js'; import {PathListBehavior} from '../../../behaviors/gr-path-list-behavior/gr-path-list-behavior.js'; import {KeyboardShortcutBehavior} from '../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.js'; -import {util} from '../../../scripts/util.js'; +import {parseDate} from '../../../utils/date-util.js'; import {GerritNav} from '../../core/gr-navigation/gr-navigation.js'; import {appContext} from '../../../services/app-context.js'; @@ -307,8 +307,8 @@ class GrCommentThread extends mixinBehaviors( [ _sortedComments(comments) { return comments.slice().sort((c1, c2) => { - const c1Date = c1.__date || util.parseDate(c1.updated); - const c2Date = c2.__date || util.parseDate(c2.updated); + const c1Date = c1.__date || parseDate(c1.updated); + const c2Date = c2.__date || parseDate(c2.updated); const dateCompare = c1Date - c2Date; // Ensure drafts are at the end. There should only be one but in edge // cases could be more. In the unlikely event two drafts are being diff --git a/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter.js b/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter.js index aefb72f07e..5335edeab3 100644 --- a/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter.js +++ b/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter.js @@ -22,13 +22,7 @@ import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mix import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-date-formatter_html.js'; import {TooltipBehavior} from '../../../behaviors/gr-tooltip-behavior/gr-tooltip-behavior.js'; -import {util} from '../../../scripts/util.js'; -import moment from 'moment/src/moment.js'; - -const Duration = { - HOUR: 1000 * 60 * 60, - DAY: 1000 * 60 * 60 * 24, -}; +import {parseDate, fromNow, isValidDate, isWithinDay, isWithinHalfYear, formatDate, utcOffsetString} from '../../../utils/date-util.js'; const TimeFormats = { TIME_12: 'h:mm A', // 2:14 PM @@ -106,6 +100,10 @@ class GrDateFormatter extends mixinBehaviors( [ }; } + constructor() { + super(); + } + /** @override */ attached() { super.attached(); @@ -113,7 +111,7 @@ class GrDateFormatter extends mixinBehaviors( [ } _getUtcOffsetString() { - return ' UTC' + moment().format('Z'); + return utcOffsetString(); } _loadPreferences() { @@ -190,50 +188,28 @@ class GrDateFormatter extends mixinBehaviors( [ return this.$.restAPI.getPreferences(); } - /** - * Return true if date is within 24 hours and on the same day. - */ - _isWithinDay(now, date) { - const diff = -date.diff(now); - return diff < Duration.DAY && date.day() === now.getDay(); - } - - /** - * Returns true if date is from one to six months. - */ - _isWithinHalfYear(now, date) { - const diff = -date.diff(now); - return (date.day() !== now.getDay() || diff >= Duration.DAY) && - diff < 180 * Duration.DAY; - } - _computeDateStr( dateStr, timeFormat, dateFormat, relative, showDateAndTime ) { if (!dateStr || !timeFormat || !dateFormat) { return ''; } - const date = moment(util.parseDate(dateStr)); - if (!date.isValid()) { return ''; } + const date = parseDate(dateStr); + if (!isValidDate(date)) { return ''; } if (relative) { - const dateFromNow = date.fromNow(); - if (dateFromNow === 'a few seconds ago') { - return 'just now'; - } else { - return dateFromNow; - } + return fromNow(date); } const now = new Date(); let format = dateFormat.full; - if (this._isWithinDay(now, date)) { + if (isWithinDay(now, date)) { format = timeFormat; } else { - if (this._isWithinHalfYear(now, date)) { + if (isWithinHalfYear(now, date)) { format = dateFormat.short; } if (this.showDateAndTime) { format = `${format} ${timeFormat}`; } } - return date.format(format); + return formatDate(date, format); } _timeToSecondsFormat(timeFormat) { @@ -253,11 +229,11 @@ class GrDateFormatter extends mixinBehaviors( [ } if (!dateStr) { return ''; } - const date = moment(util.parseDate(dateStr)); - if (!date.isValid()) { return ''; } + const date = parseDate(dateStr); + if (!isValidDate(date)) { return ''; } let format = dateFormat.full + ', '; format += this._timeToSecondsFormat(timeFormat); - return date.format(format) + this._getUtcOffsetString(); + return formatDate(date, format) + this._getUtcOffsetString(); } } diff --git a/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter_test.html b/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter_test.html index 7169ef27c3..589a1576a0 100644 --- a/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter_test.html +++ b/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter_test.html @@ -34,7 +34,7 @@ limitations under the License.