Skip to content

Commit efe321b

Browse files
committed
Do not convert duration or elapsed
1 parent edb5667 commit efe321b

2 files changed

Lines changed: 42 additions & 12 deletions

File tree

src/relative-time-element.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ export class RelativeTimeElement extends HTMLElement implements Intl.DateTimeFor
122122
'title',
123123
'aria-hidden',
124124
'time-zone',
125-
'enable-user-time-preference'
126125
]
127126
}
128127

@@ -354,14 +353,6 @@ export class RelativeTimeElement extends HTMLElement implements Intl.DateTimeFor
354353
this.setAttribute('time-zone-name', value || '')
355354
}
356355

357-
get enableUserTimePreference(): boolean {
358-
return this.hasAttribute('enable-user-time-preference')
359-
}
360-
361-
set enableUserTimePreference(value: boolean | undefined) {
362-
this.toggleAttribute('enable-user-time-preference', value)
363-
}
364-
365356
/** @deprecated */
366357
get prefix(): string {
367358
return this.getAttribute('prefix') ?? (this.format === 'datetime' ? '' : 'on')
@@ -499,9 +490,9 @@ export class RelativeTimeElement extends HTMLElement implements Intl.DateTimeFor
499490
const format = this.#resolveFormat(duration)
500491
let newText = oldText
501492

502-
// Check if user preference is enabled.
503-
const userPrefersAbsoluteTime = this.ownerDocument.documentElement.querySelector('[data-prefers-absolute-time]')?.getAttribute('data-prefers-absolute-time') === 'true'
504-
if (userPrefersAbsoluteTime) {
493+
// Experimental: Enable absolute time based on user preference
494+
const userPrefersAbsoluteTime = (this.closest('[data-prefers-absolute-time]')?.getAttribute('data-prefers-absolute-time') === 'true') || this.ownerDocument.documentElement.getAttribute('data-prefers-absolute-time') === 'true'
495+
if (userPrefersAbsoluteTime && format !== 'duration') {
505496
newText = this.#getUserPrefersAbsoluteTime(date)
506497
} else {
507498
if (format === 'duration') {

test/relative-time.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,6 +1884,45 @@ suite('relative-time', function () {
18841884
}
18851885
})
18861886

1887+
suite('experimental: [data-prefers-absolute-time]', async () => {
1888+
test('formats with absolute time when data-prefers-absolute-time="true"', async () => {
1889+
document.documentElement.setAttribute('data-prefers-absolute-time', 'true')
1890+
const el = document.createElement('relative-time')
1891+
el.setAttribute('datetime', '2022-01-01T12:00:00.000Z')
1892+
await Promise.resolve()
1893+
1894+
assert.match(el.shadowRoot.textContent, /[A-Z][a-z]{2} \d{1,2}, \d{4}, \d{1,2}:\d{2} (AM|PM)/)
1895+
})
1896+
1897+
test('does not format with absolute time when format is elapsed or duration', async () => {
1898+
document.documentElement.setAttribute('data-prefers-absolute-time', 'true')
1899+
const el = document.createElement('relative-time')
1900+
el.setAttribute('datetime', '2022-01-01T12:00:00.000Z')
1901+
el.setAttribute('format', 'elapsed')
1902+
await Promise.resolve()
1903+
1904+
assert.notMatch(el.shadowRoot.textContent, /[A-Z][a-z]{2} \d{1,2}, \d{4}, \d{1,2}:\d{2} (AM|PM)/)
1905+
})
1906+
1907+
test('does not format with absolute time when data-prefers-absolute-time="false"', async () => {
1908+
document.documentElement.setAttribute('data-prefers-absolute-time', 'false')
1909+
const el = document.createElement('relative-time')
1910+
el.setAttribute('datetime', new Date(Date.now() - 3 * 60 * 60 * 24 * 1000).toISOString())
1911+
await Promise.resolve()
1912+
1913+
assert.equal(el.shadowRoot.textContent, '3 days ago')
1914+
})
1915+
1916+
test('does not format with absolute time when data-prefers-absolute-time is not set', async () => {
1917+
document.documentElement.setAttribute('data-prefers-absolute-time', 'false')
1918+
const el = document.createElement('relative-time')
1919+
el.setAttribute('datetime', new Date(Date.now() - 3 * 60 * 60 * 24 * 1000).toISOString())
1920+
await Promise.resolve()
1921+
1922+
assert.equal(el.shadowRoot.textContent, '3 days ago')
1923+
})
1924+
})
1925+
18871926
suite('[aria-hidden]', async () => {
18881927
test('[aria-hidden="true"] applies to shadow root', async () => {
18891928
const now = new Date().toISOString()

0 commit comments

Comments
 (0)