import $ from 'jquery'; import * as timeago from 'timeago.js'; import { AutoloadPage } from 'vj/misc/Page'; import i18n from 'vj/utils/i18n'; 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;