mirror of https://github.com/go-gitea/gitea
Fix date rendering by adding `<gitea-absolute-date>` (#29725)
Alternative to: https://github.com/go-gitea/gitea/pull/29698 Fixes: https://github.com/go-gitea/gitea/issues/29034 <img width="278" alt="image" src="https://github.com/go-gitea/gitea/assets/115237/12ecd967-2723-410d-8a28-a1b0f41b7bba"> It also fixes a secondary issue that we were showing timestamp tooltips over date, which makes no sense, so these are now gone as well: <img width="284" alt="image" src="https://github.com/go-gitea/gitea/assets/115237/a70432f3-97b6-41e6-b202-b53b76924a66">pull/29748/head
parent
225fc40528
commit
857243bed7
@ -0,0 +1,40 @@ |
||||
window.customElements.define('gitea-absolute-date', class extends HTMLElement { |
||||
static observedAttributes = ['date', 'year', 'month', 'weekday', 'day']; |
||||
|
||||
update = () => { |
||||
const year = this.getAttribute('year') ?? ''; |
||||
const month = this.getAttribute('month') ?? ''; |
||||
const weekday = this.getAttribute('weekday') ?? ''; |
||||
const day = this.getAttribute('day') ?? ''; |
||||
const lang = this.closest('[lang]')?.getAttribute('lang') || |
||||
this.ownerDocument.documentElement.getAttribute('lang') || |
||||
''; |
||||
|
||||
// only extract the `yyyy-mm-dd` part. When converting to Date, it will become midnight UTC and when rendered
|
||||
// as localized date, will have a offset towards UTC, which we remove to shift the timestamp to midnight in the
|
||||
// localized date. We should eventually use `Temporal.PlainDate` which will make the correction unnecessary.
|
||||
// - https://stackoverflow.com/a/14569783/808699
|
||||
// - https://tc39.es/proposal-temporal/docs/plaindate.html
|
||||
const date = new Date(this.getAttribute('date').substring(0, 10)); |
||||
const correctedDate = new Date(date.getTime() - date.getTimezoneOffset() * -60000); |
||||
|
||||
if (!this.shadowRoot) this.attachShadow({mode: 'open'}); |
||||
this.shadowRoot.textContent = correctedDate.toLocaleString(lang ?? [], { |
||||
...(year && {year}), |
||||
...(month && {month}), |
||||
...(weekday && {weekday}), |
||||
...(day && {day}), |
||||
}); |
||||
}; |
||||
|
||||
attributeChangedCallback(_name, oldValue, newValue) { |
||||
if (!this.initialized || oldValue === newValue) return; |
||||
this.update(); |
||||
} |
||||
|
||||
connectedCallback() { |
||||
this.initialized = false; |
||||
this.update(); |
||||
this.initialized = true; |
||||
} |
||||
}); |
Loading…
Reference in new issue