diff --git a/_includes/datetime.html b/_includes/datetime.html index b07b132aa..ea50087a4 100644 --- a/_includes/datetime.html +++ b/_includes/datetime.html @@ -10,7 +10,7 @@ {% if include.class %} class="{{ include.class }}" {% endif %} - data-ts="{{ include.date | date: '%s' }}" + datetime="{{ include.date | date_to_xmlschema }}" data-df="{{ df_dayjs }}" {% if include.tooltip %} data-bs-toggle="tooltip" data-bs-placement="bottom" diff --git a/_javascript/modules/components/locale-datetime.js b/_javascript/modules/components/locale-datetime.js index eb75626dd..c93475e55 100644 --- a/_javascript/modules/components/locale-datetime.js +++ b/_javascript/modules/components/locale-datetime.js @@ -6,24 +6,14 @@ /* A tool for locale datetime */ class LocaleHelper { - static get attrTimestamp() { - return 'data-ts'; - } - - static get attrDateFormat() { - return 'data-df'; - } + static datetimeAttr = 'datetime'; static get locale() { return document.documentElement.getAttribute('lang').substring(0, 2); } - static getTimestamp(elem) { - return Number(elem.getAttribute(this.attrTimestamp)); // unix timestamp - } - - static getDateFormat(elem) { - return elem.getAttribute(this.attrDateFormat); + static getDatetime(elem) { + return elem.getAttribute(this.datetimeAttr); } } @@ -32,22 +22,17 @@ export function initLocaleDatetime() { dayjs.extend(window.dayjs_plugin_localizedFormat); document - .querySelectorAll(`[${LocaleHelper.attrTimestamp}]`) + .querySelectorAll(`[${LocaleHelper.datetimeAttr}]`) .forEach((elem) => { - const date = dayjs.unix(LocaleHelper.getTimestamp(elem)); - const text = date.format(LocaleHelper.getDateFormat(elem)); - elem.textContent = text; - elem.removeAttribute(LocaleHelper.attrTimestamp); - elem.removeAttribute(LocaleHelper.attrDateFormat); + const date = dayjs(LocaleHelper.getDatetime(elem)); + elem.textContent = date.format(elem.dataset.df); + delete elem.dataset.df; // setup tooltips - if ( - elem.hasAttribute('data-bs-toggle') && - elem.getAttribute('data-bs-toggle') === 'tooltip' - ) { + if ('bsToggle' in elem.dataset && elem.dataset.bsToggle === 'tooltip') { // see: https://day.js.org/docs/en/display/format#list-of-localized-formats const tooltipText = date.format('llll'); - elem.setAttribute('data-bs-title', tooltipText); + elem.dataset.bsTitle = tooltipText; } }); }