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/ui/components/time/time.page.js

41 lines
1.3 KiB
JavaScript

import * as timeago from 'timeago.js';
import { AutoloadPage } from 'vj/misc/PageLoader';
import i18n from 'vj/utils/i18n';
const locales = require.context('timeago.js/lib/lang', false, /\.js$/);
timeago.register(i18n('timeago_locale'), locales(`./${i18n('timeago_locale')}.js`).default);
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;