Skip to content

Commit 24abc7c

Browse files
Mateu Llullbrc-dd
Mateu Llull
andauthored
feat(theme): allow customizing last updated date time format options (#2332)
Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com>
1 parent e95015f commit 24abc7c

File tree

5 files changed

+62
-11
lines changed

5 files changed

+62
-11
lines changed

docs/reference/default-theme-config.md

+25-5
Original file line numberDiff line numberDiff line change
@@ -292,21 +292,41 @@ export interface EditLink {
292292
}
293293
```
294294

295-
## lastUpdatedText
295+
## lastUpdated
296296

297-
- Type: `string`
298-
- Default: `Last updated`
297+
- Type: `LastUpdatedOptions`
299298

300-
The prefix text showing right before the last updated time.
299+
Allows customization for the last updated text and date format.
301300

302301
```ts
303302
export default {
304303
themeConfig: {
305-
lastUpdatedText: 'Updated Date'
304+
lastUpdated: {
305+
text: 'Updated at',
306+
formatOptions: {
307+
dateStyle: 'full',
308+
timeStyle: 'medium'
309+
}
310+
}
306311
}
307312
}
308313
```
309314

315+
```ts
316+
export interface LastUpdatedOptions {
317+
/**
318+
* @default 'Last updated'
319+
*/
320+
text?: string
321+
322+
/**
323+
* @default
324+
* { dateStyle: 'short', timeStyle: 'short' }
325+
*/
326+
formatOptions?: Intl.DateTimeFormatOptions
327+
}
328+
```
329+
310330
## algolia
311331

312332
- Type: `AlgoliaSearch`

docs/reference/default-theme-last-updated.md

+1
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ lastUpdated: false
2020
---
2121
```
2222

23+
Also refer [Default Theme: Last Updated](./default-theme-last-updated#last-updated) for more details. Any truthy value at theme-level will also enable the feature unless explicitly disabled at site or page level.

src/client/theme-default/components/VPDocFooterLastUpdated.vue

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { ref, computed, watchEffect, onMounted } from 'vue'
33
import { useData } from '../composables/data'
44
5-
const { theme, page, lang } = useData()
5+
const { theme, page } = useData()
66
77
const date = computed(() => new Date(page.value.lastUpdated!))
88
const isoDatetime = computed(() => date.value.toISOString())
@@ -12,14 +12,20 @@ const datetime = ref('')
1212
// potential differences in timezones of the server and clients
1313
onMounted(() => {
1414
watchEffect(() => {
15-
datetime.value = date.value.toLocaleString(lang.value)
15+
datetime.value = new Intl.DateTimeFormat(
16+
undefined,
17+
theme.value.lastUpdated?.formatOptions ?? {
18+
dateStyle: 'short',
19+
timeStyle: 'short'
20+
}
21+
).format(date.value)
1622
})
1723
})
1824
</script>
1925

2026
<template>
2127
<p class="VPLastUpdated">
22-
{{ theme.lastUpdatedText || 'Last updated' }}:
28+
{{ theme.lastUpdated?.text || theme.lastUpdatedText || 'Last updated' }}:
2329
<time :datetime="isoDatetime">{{ datetime }}</time>
2430
</p>
2531
</template>

src/node/config.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ export async function resolveConfig(
105105
logger,
106106
tempDir: resolve(root, '.temp'),
107107
markdown: userConfig.markdown,
108-
lastUpdated: userConfig.lastUpdated,
108+
lastUpdated:
109+
userConfig.lastUpdated ?? !!userConfig.themeConfig?.lastUpdated,
109110
vue: userConfig.vue,
110111
vite: userConfig.vite,
111112
shouldPreload: userConfig.shouldPreload,

types/default-theme.d.ts

+25-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ export namespace DefaultTheme {
2525
outline?: Outline | Outline['level'] | false
2626

2727
/**
28-
* @deprecated
29-
* Use `outline.label` instead.
28+
* @deprecated Use `outline.label` instead.
3029
*
3130
* @default 'On this page'
3231
*/
@@ -58,12 +57,16 @@ export namespace DefaultTheme {
5857
editLink?: EditLink
5958

6059
/**
60+
* @deprecated Use `lastUpdated.text` instead.
61+
*
6162
* Set custom last updated text.
6263
*
6364
* @default 'Last updated'
6465
*/
6566
lastUpdatedText?: string
6667

68+
lastUpdated?: LastUpdatedOptions
69+
6770
/**
6871
* Set custom prev/next labels.
6972
*/
@@ -349,4 +352,24 @@ export namespace DefaultTheme {
349352
code: string
350353
placement: string
351354
}
355+
356+
// last updated --------------------------------------------------------------
357+
358+
export interface LastUpdatedOptions {
359+
/**
360+
* Set custom last updated text.
361+
*
362+
* @default 'Last updated'
363+
*/
364+
text?: string
365+
366+
/**
367+
* Set options for last updated time formatting.
368+
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_options
369+
*
370+
* @default
371+
* { dateStyle: 'short', timeStyle: 'short' }
372+
*/
373+
formatOptions?: Intl.DateTimeFormatOptions
374+
}
352375
}

0 commit comments

Comments
 (0)