mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-25 19:48:50 +03:00
Fixed gh-format-post-time not showing hours when time is <12 hours away
refs https://github.com/TryGhost/Ghost/issues/11965 - changed to native class syntax - extracted main method out so that it can be used outside of templates - switched the "in x hours" logic to use moment's `.from()` method when time is within 12 hours rather than 15 minutes
This commit is contained in:
parent
07ac30076a
commit
eacf8a72d8
@ -3,47 +3,50 @@ import moment from 'moment';
|
||||
import {assert} from '@ember/debug';
|
||||
import {inject as service} from '@ember/service';
|
||||
|
||||
export default Helper.extend({
|
||||
settings: service(),
|
||||
export function formatPostTime(timeago, {timezone = 'ect/UTC', draft, scheduled, published}) {
|
||||
if (draft) {
|
||||
// No special handling for drafts, just use moment.from
|
||||
return moment(timeago).from(moment.utc());
|
||||
}
|
||||
|
||||
compute([timeago], {draft, scheduled, published}) {
|
||||
let time = moment.tz(timeago, timezone);
|
||||
let now = moment.tz(moment.utc(), timezone);
|
||||
|
||||
// If not a draft and post was published <= 12 hours ago
|
||||
// or scheduled to be published <= 12 hours from now, use moment.from
|
||||
if (Math.abs(now.diff(time, 'hours')) <= 12) {
|
||||
return time.from(now);
|
||||
}
|
||||
|
||||
// If scheduled for or published on the same day, render the time + Today
|
||||
if (time.isSame(now, 'day')) {
|
||||
let formatted = time.format('HH:mm [Today]');
|
||||
return scheduled ? `at ${formatted}` : formatted;
|
||||
}
|
||||
|
||||
// if published yesterday, render time + yesterday
|
||||
// This check comes before scheduled, because there are likely to be more published
|
||||
// posts than scheduled posts.
|
||||
if (published && time.isSame(now.clone().subtract(1, 'days').startOf('day'), 'day')) {
|
||||
return time.format('HH:mm [Yesterday]');
|
||||
}
|
||||
|
||||
// if scheduled for tomorrow, render the time + Tomorrow
|
||||
if (scheduled && time.isSame(now.clone().add(1, 'days').startOf('day'), 'day')) {
|
||||
return time.format('[at] HH:mm [Tomorrow]');
|
||||
}
|
||||
|
||||
// Else, render just the date if published, or the time & date if scheduled
|
||||
let format = scheduled ? '[at] HH:mm [on] DD MMM YYYY' : 'DD MMM YYYY';
|
||||
return time.format(format);
|
||||
}
|
||||
|
||||
export default class GhFormatPostTimeHelper extends Helper {
|
||||
@service settings;
|
||||
|
||||
compute([timeago], options) {
|
||||
assert('You must pass a time to the gh-format-post-time helper', timeago);
|
||||
|
||||
if (draft) {
|
||||
// No special handling for drafts, just use moment.from
|
||||
return moment(timeago).from(moment.utc());
|
||||
}
|
||||
|
||||
let timezone = this.get('settings.timezone');
|
||||
let time = moment.tz(timeago, timezone);
|
||||
let now = moment.tz(moment.utc(), timezone);
|
||||
|
||||
// If not a draft and post was published <= 15 minutes ago
|
||||
// or scheduled to be published <= 15 minutes from now, use moment.from
|
||||
if (Math.abs(now.diff(time, 'minutes')) <= 15) {
|
||||
return time.from(now);
|
||||
}
|
||||
|
||||
// If scheduled for or published on the same day, render the time + Today
|
||||
if (time.isSame(now, 'day')) {
|
||||
let formatted = time.format('HH:mm [Today]');
|
||||
return scheduled ? `at ${formatted}` : formatted;
|
||||
}
|
||||
|
||||
// if published yesterday, render time + yesterday
|
||||
// This check comes before scheduled, because there are likely to be more published
|
||||
// posts than scheduled posts.
|
||||
if (published && time.isSame(now.clone().subtract(1, 'days').startOf('day'), 'day')) {
|
||||
return time.format('HH:mm [Yesterday]');
|
||||
}
|
||||
|
||||
// if scheduled for tomorrow, render the time + Tomorrow
|
||||
if (scheduled && time.isSame(now.clone().add(1, 'days').startOf('day'), 'day')) {
|
||||
return time.format('[at] HH:mm [Tomorrow]');
|
||||
}
|
||||
|
||||
// Else, render just the date if published, or the time & date if scheduled
|
||||
let format = scheduled ? '[at] HH:mm [on] DD MMM YYYY' : 'DD MMM YYYY';
|
||||
return time.format(format);
|
||||
return formatPostTime(timeago, Object.assign({}, options, {timezone: this.settings.get('timezone')}));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user