forked from Mirrors/elk
chore: update pages with useHydratedHeader
and use isHydrated on nav side and settings
This commit is contained in:
parent
da76c0076b
commit
8fe904d0b5
41 changed files with 64 additions and 61 deletions
|
@ -29,7 +29,7 @@ router.afterEach(() => {
|
||||||
@click.prevent="onClickLogo"
|
@click.prevent="onClickLogo"
|
||||||
>
|
>
|
||||||
<NavLogo shrink-0 aspect="1/1" sm:h-8 xl:h-10 class="rtl-flip" />
|
<NavLogo shrink-0 aspect="1/1" sm:h-8 xl:h-10 class="rtl-flip" />
|
||||||
<div hidden xl:block text-secondary>
|
<div v-show="isHydrated" hidden xl:block text-secondary>
|
||||||
{{ $t('app_name') }} <sup text-sm italic mt-1>{{ env === 'release' ? 'alpha' : env }}</sup>
|
{{ $t('app_name') }} <sup text-sm italic mt-1>{{ env === 'release' ? 'alpha' : env }}</sup>
|
||||||
</div>
|
</div>
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
|
|
|
@ -22,7 +22,7 @@ const createdAt = useFormattedDateTime(status.createdAt)
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${getDisplayName(status.account)} ${t('common.in')} ${t('app_name')}: "${removeHTMLTags(status.content) || ''}"`,
|
title: () => `${getDisplayName(status.account)} ${t('common.in')} ${t('app_name')}: "${removeHTMLTags(status.content) || ''}"`,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ export function setupPageHeader() {
|
||||||
return acc
|
return acc
|
||||||
}, {} as Record<string, Directions>)
|
}, {} as Record<string, Directions>)
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
htmlAttrs: {
|
htmlAttrs: {
|
||||||
lang: () => locale.value,
|
lang: () => locale.value,
|
||||||
dir: () => localeMap[locale.value] ?? 'ltr',
|
dir: () => localeMap[locale.value] ?? 'ltr',
|
||||||
|
@ -23,6 +23,9 @@ export function setupPageHeader() {
|
||||||
content: () => `width=device-width,initial-scale=1${enablePinchToZoom.value ? '' : ',maximum-scale=1,user-scalable=0'},viewport-fit=cover`,
|
content: () => `width=device-width,initial-scale=1${enablePinchToZoom.value ? '' : ',maximum-scale=1,user-scalable=0'},viewport-fit=cover`,
|
||||||
}],
|
}],
|
||||||
titleTemplate: (title) => {
|
titleTemplate: (title) => {
|
||||||
|
if (!isHydrated)
|
||||||
|
return ''
|
||||||
|
|
||||||
let titleTemplate = title ?? ''
|
let titleTemplate = title ?? ''
|
||||||
|
|
||||||
if (titleTemplate.match(/&[a-z0-9#]+;/gi)) {
|
if (titleTemplate.match(/&[a-z0-9#]+;/gi)) {
|
||||||
|
|
|
@ -11,7 +11,7 @@ const paginator = account ? useMastoClient().v1.accounts.listFollowers(account.i
|
||||||
const isSelf = useSelfAccount(account)
|
const isSelf = useSelfAccount(account)
|
||||||
|
|
||||||
if (account) {
|
if (account) {
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('account.followers')} | ${getDisplayName(account)} (@${account.acct})`,
|
title: () => `${t('account.followers')} | ${getDisplayName(account)} (@${account.acct})`,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ const paginator = account ? useMastoClient().v1.accounts.listFollowing(account.i
|
||||||
const isSelf = useSelfAccount(account)
|
const isSelf = useSelfAccount(account)
|
||||||
|
|
||||||
if (account) {
|
if (account) {
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('account.following')} | ${getDisplayName(account)} (@${account.acct})`,
|
title: () => `${t('account.following')} | ${getDisplayName(account)} (@${account.acct})`,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ const reorderAndFilter = (items: mastodon.v1.Status[]) => reorderedTimeline(item
|
||||||
const paginator = useMastoClient().v1.accounts.listStatuses(account.id, { limit: 30, excludeReplies: true })
|
const paginator = useMastoClient().v1.accounts.listStatuses(account.id, { limit: 30, excludeReplies: true })
|
||||||
|
|
||||||
if (account) {
|
if (account) {
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('account.posts')} | ${getDisplayName(account)} (@${account.acct})`,
|
title: () => `${t('account.posts')} | ${getDisplayName(account)} (@${account.acct})`,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ const account = await fetchAccountByHandle(handle)
|
||||||
const paginator = useMastoClient().v1.accounts.listStatuses(account.id, { onlyMedia: true, excludeReplies: false })
|
const paginator = useMastoClient().v1.accounts.listStatuses(account.id, { onlyMedia: true, excludeReplies: false })
|
||||||
|
|
||||||
if (account) {
|
if (account) {
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('tab.media')} | ${getDisplayName(account)} (@${account.acct})`,
|
title: () => `${t('tab.media')} | ${getDisplayName(account)} (@${account.acct})`,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ const account = await fetchAccountByHandle(handle)
|
||||||
const paginator = useMastoClient().v1.accounts.listStatuses(account.id, { excludeReplies: false })
|
const paginator = useMastoClient().v1.accounts.listStatuses(account.id, { excludeReplies: false })
|
||||||
|
|
||||||
if (account) {
|
if (account) {
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('tab.posts_with_replies')} | ${getDisplayName(account)} (@${account.acct})`,
|
title: () => `${t('tab.posts_with_replies')} | ${getDisplayName(account)} (@${account.acct})`,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ const paginator = useMastoClient().v1.trends.listStatuses()
|
||||||
|
|
||||||
const hideNewsTips = useLocalStorage(STORAGE_KEY_HIDE_EXPLORE_POSTS_TIPS, false)
|
const hideNewsTips = useLocalStorage(STORAGE_KEY_HIDE_EXPLORE_POSTS_TIPS, false)
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('tab.posts')} | ${t('nav.explore')}`,
|
title: () => `${t('tab.posts')} | ${t('nav.explore')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -7,7 +7,7 @@ const paginator = useMastoClient().v1.trends.listLinks()
|
||||||
|
|
||||||
const hideNewsTips = useLocalStorage(STORAGE_KEY_HIDE_EXPLORE_NEWS_TIPS, false)
|
const hideNewsTips = useLocalStorage(STORAGE_KEY_HIDE_EXPLORE_NEWS_TIPS, false)
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('tab.news')} | ${t('nav.explore')}`,
|
title: () => `${t('tab.news')} | ${t('nav.explore')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -10,7 +10,7 @@ const paginator = client.v1.trends.listTags({
|
||||||
|
|
||||||
const hideTagsTips = useLocalStorage(STORAGE_KEY_HIDE_EXPLORE_TAGS_TIPS, false)
|
const hideTagsTips = useLocalStorage(STORAGE_KEY_HIDE_EXPLORE_TAGS_TIPS, false)
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('tab.hashtags')} | ${t('nav.explore')}`,
|
title: () => `${t('tab.hashtags')} | ${t('nav.explore')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -4,7 +4,7 @@ const { t } = useI18n()
|
||||||
// limit: 20 is the default configuration of the official client
|
// limit: 20 is the default configuration of the official client
|
||||||
const paginator = useMastoClient().v2.suggestions.list({ limit: 20 })
|
const paginator = useMastoClient().v2.suggestions.list({ limit: 20 })
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('tab.for_you')} | ${t('nav.explore')}`,
|
title: () => `${t('tab.for_you')} | ${t('nav.explore')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -35,7 +35,7 @@ const { client } = $(useMasto())
|
||||||
const { data: listInfo, refresh } = $(await useAsyncData(() => client.v1.lists.fetch(list), { default: () => shallowRef() }))
|
const { data: listInfo, refresh } = $(await useAsyncData(() => client.v1.lists.fetch(list), { default: () => shallowRef() }))
|
||||||
|
|
||||||
if (listInfo) {
|
if (listInfo) {
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${listInfo.title} | ${route.fullPath.endsWith('/accounts') ? t('tab.accounts') : t('tab.posts')} | ${t('nav.lists')}`,
|
title: () => `${listInfo.title} | ${route.fullPath.endsWith('/accounts') ? t('tab.accounts') : t('tab.posts')} | ${t('nav.lists')}`,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ const client = useMastoClient()
|
||||||
|
|
||||||
const paginator = client.v1.lists.list()
|
const paginator = client.v1.lists.list()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.lists'),
|
title: () => t('nav.lists'),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('title.federated_timeline'),
|
title: () => t('title.federated_timeline'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('title.local_timeline'),
|
title: () => t('title.local_timeline'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -13,7 +13,7 @@ const paginator = client.v1.timelines.listHashtag(tagName)
|
||||||
const stream = useStreaming(client => client.v1.stream.streamTagTimeline(tagName))
|
const stream = useStreaming(client => client.v1.stream.streamTagTimeline(tagName))
|
||||||
|
|
||||||
if (tag) {
|
if (tag) {
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `#${tag.name}`,
|
title: () => `#${tag.name}`,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.blocked_users'),
|
title: () => t('nav.blocked_users'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.bookmarks'),
|
title: () => t('nav.bookmarks'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.compose'),
|
title: () => t('nav.compose'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.conversations'),
|
title: () => t('nav.conversations'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.blocked_domains'),
|
title: () => t('nav.blocked_domains'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.favourites'),
|
title: () => t('nav.favourites'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -10,7 +10,7 @@ if (process.client && route.path === '/signin/callback')
|
||||||
router.push('/home')
|
router.push('/home')
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.home'),
|
title: () => t('nav.home'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.muted_users'),
|
title: () => t('nav.muted_users'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('tab.notifications_all')} | ${t('nav.notifications')}`,
|
title: () => `${t('tab.notifications_all')} | ${t('nav.notifications')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const { t } = useI18n()
|
const { t, setLocale } = useI18n()
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('tab.notifications_mention')} | ${t('nav.notifications')}`,
|
title: () => `${t('tab.notifications_mention')} | ${t('nav.notifications')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('account.pinned'),
|
title: () => t('account.pinned'),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => t('nav.settings'),
|
title: () => t('nav.settings'),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ const isRootPath = computedEager(() => route.name === 'settings')
|
||||||
<template #title>
|
<template #title>
|
||||||
<div timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
<div timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||||
<div i-ri:settings-3-line />
|
<div i-ri:settings-3-line />
|
||||||
<span>{{ $t('nav.settings') }}</span>
|
<span>{{ isHydrated ? $t('nav.settings') : '' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div xl:w-97 lg:w-78 w-full>
|
<div xl:w-97 lg:w-78 w-full>
|
||||||
|
@ -37,7 +37,7 @@ const isRootPath = computedEager(() => route.name === 'settings')
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command
|
command
|
||||||
icon="i-ri-compasses-2-line"
|
icon="i-ri-compasses-2-line"
|
||||||
:text="$t('settings.interface.label')"
|
:text="isHydrated ? $t('settings.interface.label') : ''"
|
||||||
to="/settings/interface"
|
to="/settings/interface"
|
||||||
:match="$route.path.startsWith('/settings/interface/')"
|
:match="$route.path.startsWith('/settings/interface/')"
|
||||||
/>
|
/>
|
||||||
|
@ -52,28 +52,28 @@ const isRootPath = computedEager(() => route.name === 'settings')
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command
|
command
|
||||||
icon="i-ri-globe-line"
|
icon="i-ri-globe-line"
|
||||||
:text="$t('settings.language.label')"
|
:text="isHydrated ? $t('settings.language.label') : ''"
|
||||||
to="/settings/language"
|
to="/settings/language"
|
||||||
:match="$route.path.startsWith('/settings/language/')"
|
:match="$route.path.startsWith('/settings/language/')"
|
||||||
/>
|
/>
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command
|
command
|
||||||
icon="i-ri-equalizer-line"
|
icon="i-ri-equalizer-line"
|
||||||
:text="$t('settings.preferences.label')"
|
:text="isHydrated ? $t('settings.preferences.label') : ''"
|
||||||
to="/settings/preferences"
|
to="/settings/preferences"
|
||||||
:match="$route.path.startsWith('/settings/preferences/')"
|
:match="$route.path.startsWith('/settings/preferences/')"
|
||||||
/>
|
/>
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command
|
command
|
||||||
icon="i-ri-group-line"
|
icon="i-ri-group-line"
|
||||||
:text="$t('settings.users.label')"
|
:text="isHydrated ? $t('settings.users.label') : ''"
|
||||||
to="/settings/users"
|
to="/settings/users"
|
||||||
:match="$route.path.startsWith('/settings/users/')"
|
:match="$route.path.startsWith('/settings/users/')"
|
||||||
/>
|
/>
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command
|
command
|
||||||
icon="i-ri:information-line"
|
icon="i-ri:information-line"
|
||||||
:text="$t('settings.about.label')"
|
:text="isHydrated ? $t('settings.about.label') : ''"
|
||||||
to="/settings/about"
|
to="/settings/about"
|
||||||
:match="$route.path.startsWith('/settings/about/')"
|
:match="$route.path.startsWith('/settings/about/')"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
const buildInfo = useBuildInfo()
|
const buildInfo = useBuildInfo()
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.about.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.about.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div min-h-screen flex justify-center items-center>
|
<div min-h-screen flex justify-center items-center>
|
||||||
<div text-center flex="~ col gap-2" items-center>
|
<div text-center flex="~ col gap-2" items-center>
|
||||||
<div i-ri:settings-3-line text-5xl />
|
<div i-ri:settings-3-line text-5xl />
|
||||||
<span text-xl>{{ $t('settings.select_a_settings') }}</span>
|
<span text-xl>{{ isHydrated ? $t('settings.select_a_settings') : '' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.interface.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.interface.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ const { t, locale } = useI18n()
|
||||||
|
|
||||||
const translationStatus: ElkTranslationStatus = await import('~/elk-translation-status.json').then(m => m.default)
|
const translationStatus: ElkTranslationStatus = await import('~/elk-translation-status.json').then(m => m.default)
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.language.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.language.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
const status = computed(() => {
|
const status = computed(() => {
|
||||||
|
|
|
@ -6,7 +6,7 @@ definePageMeta({
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const pwaEnabled = useAppConfig().pwaEnabled
|
const pwaEnabled = useAppConfig().pwaEnabled
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.notifications.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.notifications.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -15,20 +15,20 @@ useHead({
|
||||||
<MainContent back-on-small-screen>
|
<MainContent back-on-small-screen>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||||
<span>{{ $t('settings.notifications.label') }}</span>
|
<span>{{ isHydrated ? $t('settings.notifications.label') : '' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command
|
command
|
||||||
:text="$t('settings.notifications.notifications.label')"
|
:text="isHydrated ? $t('settings.notifications.notifications.label') : ''"
|
||||||
to="/settings/notifications/notifications"
|
to="/settings/notifications/notifications"
|
||||||
/>
|
/>
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command
|
command
|
||||||
:disabled="!pwaEnabled"
|
:disabled="!pwaEnabled"
|
||||||
:text="$t('settings.notifications.push_notifications.label')"
|
:text="isHydrated ? $t('settings.notifications.push_notifications.label') : ''"
|
||||||
:description="$t('settings.notifications.push_notifications.description')"
|
:description="isHydrated ? $t('settings.notifications.push_notifications.description') : ''"
|
||||||
to="/settings/notifications/push-notifications"
|
to="/settings/notifications/push-notifications"
|
||||||
/>
|
/>
|
||||||
</MainContent>
|
</MainContent>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.notifications.notifications.label')} | ${t('settings.notifications.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.notifications.notifications.label')} | ${t('settings.notifications.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -14,14 +14,14 @@ useHead({
|
||||||
<MainContent back>
|
<MainContent back>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||||
<span>{{ $t('settings.notifications.notifications.label') }}</span>
|
<span>{{ isHydrated ? $t('settings.notifications.notifications.label') : '' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<h3 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
<h3 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
||||||
{{ $t('settings.notifications.notifications.label') }}
|
{{ isHydrated ? $t('settings.notifications.notifications.label') : '' }}
|
||||||
</h3>
|
</h3>
|
||||||
<p text-4xl text-center>
|
<p text-4xl text-center>
|
||||||
<span sr-only>{{ $t('settings.notifications.under_construction') }}</span> 🚧
|
<span sr-only>{{ isHydrated ? $t('settings.notifications.under_construction') : '' }}</span> 🚧
|
||||||
</p>
|
</p>
|
||||||
</MainContent>
|
</MainContent>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -8,7 +8,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.notifications.push_notifications.label')} | ${t('settings.notifications.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.notifications.push_notifications.label')} | ${t('settings.notifications.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -17,7 +17,7 @@ useHead({
|
||||||
<MainContent back>
|
<MainContent back>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||||
<span>{{ $t('settings.notifications.push_notifications.label') }}</span>
|
<span>{{ isHydrated ? $t('settings.notifications.push_notifications.label') : '' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<NotificationPreferences show />
|
<NotificationPreferences show />
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.preferences.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.preferences.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.profile.appearance.title')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.profile.appearance.title')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.profile.featured_tags.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.profile.featured_tags.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,7 +5,7 @@ definePageMeta({
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.profile.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.profile.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -14,22 +14,22 @@ useHead({
|
||||||
<MainContent back-on-small-screen>
|
<MainContent back-on-small-screen>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||||
<span>{{ $t('settings.profile.label') }}</span>
|
<span>{{ isHydrated ? $t('settings.profile.label') : '' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command large
|
command large
|
||||||
icon="i-ri:user-settings-line"
|
icon="i-ri:user-settings-line"
|
||||||
:text="$t('settings.profile.appearance.label')"
|
:text="isHydrated ? $t('settings.profile.appearance.label') : ''"
|
||||||
:description="$t('settings.profile.appearance.description')"
|
:description="isHydrated ? $t('settings.profile.appearance.description') : ''"
|
||||||
to="/settings/profile/appearance"
|
to="/settings/profile/appearance"
|
||||||
/>
|
/>
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
command large
|
command large
|
||||||
icon="i-ri:hashtag"
|
icon="i-ri:hashtag"
|
||||||
:text="$t('settings.profile.featured_tags.label')"
|
:text="isHydrated ? $t('settings.profile.featured_tags.label') : ''"
|
||||||
:description="$t('settings.profile.featured_tags.description')"
|
:description="isHydrated ? $t('settings.profile.featured_tags.description') : ''"
|
||||||
to="/settings/profile/featured-tags"
|
to="/settings/profile/featured-tags"
|
||||||
/>
|
/>
|
||||||
<SettingsItem
|
<SettingsItem
|
||||||
|
|
|
@ -5,7 +5,7 @@ import type { UserLogin } from '~/types'
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
useHead({
|
useHydratedHead({
|
||||||
title: () => `${t('settings.users.label')} | ${t('nav.settings')}`,
|
title: () => `${t('settings.users.label')} | ${t('nav.settings')}`,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue