feat: navbar

This commit is contained in:
2026-04-26 18:38:49 +02:00
parent 21e1469b51
commit 748f52241f
9 changed files with 30 additions and 13 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ bun run build
- [x] build with github actions
- [x] config in sub repo
- [x] copyright
- [ ] nav bar on top
- [x] nav bar on top
- [ ] date updated
- [ ] archive page
- [ ] about page
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "md-blog",
"version": "1.4.0",
"version": "1.5.0",
"private": true,
"type": "module",
"repository": "https://github.com/klemek/md-blog",
+12
View File
@@ -0,0 +1,12 @@
<script setup lang="ts">
import { BASE_URL, TITLE, RSS_LINK } from '@/lib/meta'
</script>
<template>
<nav>
<RouterLink to="/" class="nav-title"><span v-html="TITLE"></span></RouterLink>
<span class="nav-items">
<a :href="BASE_URL + 'atom.xml'" v-html="RSS_LINK"></a>
</span>
</nav>
</template>
+2 -7
View File
@@ -1,16 +1,11 @@
<script setup lang="ts">
import { REPOSITORY, NAME, VERSION, BASE_URL, TITLE, COPYRIGHT } from '@/lib/meta'
import { REPOSITORY, NAME, VERSION, TITLE, COPYRIGHT } from '@/lib/meta'
import { stripHTML } from '@/lib/strings';
</script>
<template>
<template v-if="$route.fullPath != '/'">
<RouterLink to="/"><i icon="undo-2"></i> Back to home</RouterLink>
</template>
<hr />
<footer>
{{ stripHTML(TITLE) }} &copy; {{ new Date().getFullYear() }}, <span v-html="COPYRIGHT"></span> | Made with
<a :href="REPOSITORY">{{ NAME }} {{ VERSION }}</a> |
<a :href="BASE_URL + 'atom.xml'"><i icon="rss"></i> RSS</a>
<a :href="REPOSITORY">{{ NAME }} {{ VERSION }}</a>
</footer>
</template>
+2
View File
@@ -6,4 +6,6 @@ export const REPOSITORY = packageJson.repository
export const TITLE = import.meta.env.VITE_APP_TITLE
export const SIGNATURE = import.meta.env.VITE_APP_SIGNATURE
export const COPYRIGHT = import.meta.env.VITE_APP_COPYRIGHT
export const RSS_LINK = import.meta.env.VITE_APP_RSS_LINK
export const BACK_LINK = import.meta.env.VITE_APP_BACK_LINK
export const BASE_URL = import.meta.env.BASE_URL
+6 -2
View File
@@ -5,9 +5,10 @@ import { loadArticle } from '@lib/articles'
import { useRoute, onBeforeRouteUpdate, type RouteLocation } from 'vue-router'
import NotFoundView from './NotFoundView.vue'
import { simpleDateFormat } from '@lib/dates'
import { SIGNATURE, TITLE } from '@lib/meta'
import { BACK_LINK, SIGNATURE, TITLE } from '@lib/meta'
import PageFooter from '@components/PageFooter.vue'
import { stripHTML } from '@/lib/strings'
import NavBar from '@/components/NavBar.vue'
const article = ref<Article | null>(null)
const loading = ref<boolean>(true)
@@ -34,6 +35,7 @@ onBeforeRouteUpdate(loadPage)
</template>
<template v-else>
<main class="article">
<NavBar />
<div class="article-header">
<RouterLink class="link-home" to="/"><i icon="undo-2"></i></RouterLink>
<h1 class="article-title" v-html="article.metadata.title"></h1>
@@ -50,7 +52,9 @@ onBeforeRouteUpdate(loadPage)
</div>
<div class="article-text" v-html="article.html"></div>
<div class="article-signature" v-html="SIGNATURE"></div>
<br />
<template v-if="$route.fullPath != '/'">
<RouterLink class="link-back" to="/"><span v-html="BACK_LINK"></span></RouterLink>
</template>
<PageFooter />
</main>
</template>
+3 -2
View File
@@ -6,6 +6,7 @@ import { simpleDateFormat } from '@lib/dates'
import { TITLE } from '@lib/meta'
import PageFooter from '@components/PageFooter.vue'
import { stripHTML } from '@/lib/strings'
import NavBar from '@/components/NavBar.vue'
const articles = ref<ArticleMetadata[]>([])
@@ -17,8 +18,8 @@ onBeforeMount(async () => {
</script>
<template>
<main>
<h1 class="title" v-html="TITLE"></h1>
<main class="home">
<NavBar />
<template v-for="(metadata, index) in articles" v-bind:key="index">
<div v-if="!metadata.draft && metadata.path" class="article-item">
<RouterLink :to="metadata.path">
+1
View File
@@ -11,6 +11,7 @@ onBeforeMount(() => {
<template>
<main>
<NavBar />
<h1>Page not found</h1>
<PageFooter />
</main>
+2
View File
@@ -17,6 +17,8 @@ export default ({ mode }: { mode: string }) => {
process.env.VITE_APP_SIGNATURE = articlesConfig['signature']
process.env.VITE_CUSTOM_HEAD = articlesConfig['custom_head']
process.env.VITE_APP_COPYRIGHT = articlesConfig['copyright']
process.env.VITE_APP_RSS_LINK = articlesConfig['rss_link']
process.env.VITE_APP_BACK_LINK = articlesConfig['back_link']
return defineConfig({
plugins: [vue(), vueDevTools(), mdPlugin({ mode: [Mode.HTML] })],