35 lines
994 B
Vue
35 lines
994 B
Vue
<script setup lang="ts">
|
|
/* The document language and the fallback title follow the interface locale:
|
|
the callback form of useHead re-runs them whenever the locale changes. */
|
|
const { t } = useI18n()
|
|
const { locale } = useAppLocale()
|
|
|
|
useHead(() => ({
|
|
htmlAttrs: { lang: locale.value },
|
|
titleTemplate: (title?: string | null) => (title ? `${title} · Mathew` : t('app.title')),
|
|
}))
|
|
|
|
/* keep the book's stack of open pages in step with the route */
|
|
useArticleTabsSync()
|
|
</script>
|
|
|
|
<template>
|
|
<div class="app-shell">
|
|
<NuxtRouteAnnouncer />
|
|
<AppHeader />
|
|
<main class="app-main">
|
|
<div class="container">
|
|
<NuxtPage />
|
|
</div>
|
|
</main>
|
|
<!-- after the page: the article route has put its article on the shelf
|
|
by the time the book is rendered, so the page in view arrives with
|
|
its text already written out -->
|
|
<ArticleBookStack />
|
|
<SearchModal />
|
|
<SettingsModal />
|
|
<ProfileModal />
|
|
<AuthModal />
|
|
</div>
|
|
</template>
|