From 5940dbc4fc65a3268775f45920525cb168da9e18 Mon Sep 17 00:00:00 2001 From: Techit Thawiang Date: Sat, 8 Nov 2025 20:42:38 +0700 Subject: [PATCH] Add icon support for tree links entry --- app/assets/css/style.css | 17 +++++++++++++++ app/pages/tree/[...slug].vue | 42 ++++++++++++++++++++---------------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/app/assets/css/style.css b/app/assets/css/style.css index df1d64d..d3b304a 100644 --- a/app/assets/css/style.css +++ b/app/assets/css/style.css @@ -813,11 +813,20 @@ hr, .prose hr { height: 1px; margin-block: 1em; border: none; border-bottom: 1px background: var(--color-primary); color: var(--color-on-primary); margin-bottom: calc(var(--ui-spacing)*1); + display: flex; + align-items: center; +} +.tree-link-card .material-symbols-outlined { + margin-right: calc(var(--ui-spacing)*1); } .tree-link-card:hover { background: var(--color-inverse); color: var(--color-on-inverse); } +.tree-link-card:hover .material-symbols-outlined { + font-variation-settings: + 'FILL' 1 +} .tree-link-card:active { opacity: .8; } @@ -834,4 +843,12 @@ a.tree-link-card { z-index: -10; backdrop-filter: blur(36px); -webkit-backdrop-filter: (36px); +} +pre.codebox { + font-family: var(--font-mono); + font-size: 12px; + padding: calc(var(--ui-spacing)*3); + border-radius: calc(var(--ui-spacing)*2); + background: var(--color-inverse-surface-container); + color: var(--color-on-inverse-surface-container); } \ No newline at end of file diff --git a/app/pages/tree/[...slug].vue b/app/pages/tree/[...slug].vue index 42658c2..d53dbe3 100644 --- a/app/pages/tree/[...slug].vue +++ b/app/pages/tree/[...slug].vue @@ -10,7 +10,7 @@
- {{ link.name }} + {{ link.ico }}{{ link.name }}
@@ -46,33 +46,37 @@ interface TreeUserDataLink { url: string } -const tree = ref(null) +const { data: tree, error } = await useAsyncData('treeUserData', () => + $fetch(treeUserData) +) -onMounted(async () => { - try { - const data = await $fetch(treeUserData) +if (error.value) { + console.error('User tree fetch failed:', error.value) +} - if (!data) return - - tree.value = data - - } catch (err) { - console.error('User tree fetch failed:', err) - } - document.body.style.backgroundImage = `url('${tree.value?.background}')` +if (error.value?.statusCode === 404) { + await navigateTo('/tree') +} +if (tree.value) { useSeoMeta({ titleTemplate: "%s", - title: tree.value?.name + "'s Link", - description: tree.value?.desc, - ogTitle: tree.value?.name, - ogDescription: tree.value?.desc, + title: `${tree.value.name}'s Link`, + description: tree.value.desc, + ogTitle: tree.value.name, + ogDescription: tree.value.desc, ogSiteName: config.public.siteName, twitterCard: 'summary_large_image', - twitterTitle: tree.value?.name, - twitterDescription: tree.value?.desc, + twitterTitle: tree.value.name, + twitterDescription: tree.value.desc, twitterSite: config.public.twitterUsername }) +} + +onMounted(() => { + if (tree.value?.background) { + document.body.style.backgroundImage = `url('${tree.value.background}')` + } }) definePageMeta({