You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Hydro/packages/ui-default/components/time/time.page.js

47 lines
1.5 KiB
JavaScript

import $ from 'jquery';
import * as timeago from 'timeago.js';
import { AutoloadPage } from 'vj/misc/Page';
import { i18n } from 'vj/utils';
try {
const locales = require.context('timeago.js/lib/lang', false, /\.js$/);
let locale;
try {
locale = locales(`./${i18n('timeago_locale')}.js`).default;
} catch (e) {
locale = locales('./en_US.js').default;
}
timeago.register(i18n('timeago_locale'), locale);
} catch (e) {
console.error(`Cannot register timeago locale: ${i18n('timeago_locale')}`);
}
function runRelativeTime($container) {
$container.find('span.time.relative[data-timestamp]').get().forEach((element) => {
const $element = $(element);
if ($element.attr('data-has-timeago') !== undefined) return;
$element.attr('data-tooltip', $element.text());
$element.attr('datetime', ($element.attr('data-timestamp') || 0) * 1000);
$element.attr('data-has-timeago', '1');
timeago.render(element, i18n('timeago_locale'));
});
}
function cancelRelativeTime($container) {
$container.find('span.time.relative[data-timestamp]').get().forEach((element) => {
const $element = $(element);
if ($element.attr('data-has-timeago') === undefined) {
return;
}
$element.removeAttr('data-has-timeago');
timeago.cancel(element);
});
}
const relativeTimePage = new AutoloadPage('relativeTimePage', () => {
runRelativeTime($('body'));
$(document).on('vjContentNew', (e) => runRelativeTime($(e.target)));
$(document).on('vjContentRemove', (e) => cancelRelativeTime($(e.target)));
});
export default relativeTimePage;