mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-22 10:21:36 +03:00
9ce407966f
- when activating a theme, we need to load the current locale - this request used to be buried deep in the themeI18n init call - now we surface it in the bridge and pass it down, which is closer to what we want to do with eventually initialising the frontend with everything it needs up front (or not initialising it, if it isn't needed) - in the related helpers we depend on the site.locale value instead of proxy -> themeI18n -> settingsCache drastically simplifying the code and removing deep requires - site.locale is updated via middleware and can be relied upon
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
// # Date Helper
|
|
// Usage: `{{date format="DD MM, YYYY"}}`, `{{date updated_at format="DD MM, YYYY"}}`
|
|
//
|
|
// Formats a date using moment-timezone.js. Formats published_at by default but will also take a date as a parameter
|
|
|
|
const {SafeString} = require('../services/proxy');
|
|
const moment = require('moment-timezone');
|
|
const _ = require('lodash');
|
|
|
|
module.exports = function (...attrs) {
|
|
// Options is the last argument
|
|
const options = attrs.pop();
|
|
let date;
|
|
|
|
// If there is any more arguments, date is the first one
|
|
if (!_.isEmpty(attrs)) {
|
|
date = attrs.shift();
|
|
|
|
// If there is no date argument & the current context contains published_at use that by default,
|
|
// else date being undefined means moment will use the current date
|
|
} else if (this.published_at) {
|
|
date = this.published_at;
|
|
}
|
|
|
|
// ensure that date is undefined, not null, as that can cause errors
|
|
date = date === null ? undefined : date;
|
|
|
|
const timezone = options.data.site.timezone;
|
|
const locale = options.data.site.locale;
|
|
|
|
const {
|
|
format = 'll',
|
|
timeago
|
|
} = options.hash;
|
|
|
|
const timeNow = moment().tz(timezone);
|
|
// Our date might be user input
|
|
let testDateInput = Date.parse(date);
|
|
let dateMoment;
|
|
if (isNaN(testDateInput) === false) {
|
|
dateMoment = moment.parseZone(date);
|
|
} else {
|
|
dateMoment = timeNow;
|
|
}
|
|
|
|
// i18n: Making dates, including month names, translatable to any language.
|
|
// Documentation: http://momentjs.com/docs/#/i18n/
|
|
// Locales: https://github.com/moment/moment/tree/develop/locale
|
|
dateMoment.locale(locale);
|
|
|
|
if (timeago) {
|
|
date = dateMoment.tz(timezone).from(timeNow);
|
|
} else {
|
|
date = dateMoment.tz(timezone).format(format);
|
|
}
|
|
|
|
return new SafeString(date);
|
|
};
|