Add icon support for tree links entry

This commit is contained in:
2025-11-08 20:42:38 +07:00
parent 28946028e8
commit 5940dbc4fc
2 changed files with 40 additions and 19 deletions
+17
View File
@@ -813,11 +813,20 @@ hr, .prose hr { height: 1px; margin-block: 1em; border: none; border-bottom: 1px
background: var(--color-primary); background: var(--color-primary);
color: var(--color-on-primary); color: var(--color-on-primary);
margin-bottom: calc(var(--ui-spacing)*1); 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 { .tree-link-card:hover {
background: var(--color-inverse); background: var(--color-inverse);
color: var(--color-on-inverse); color: var(--color-on-inverse);
} }
.tree-link-card:hover .material-symbols-outlined {
font-variation-settings:
'FILL' 1
}
.tree-link-card:active { .tree-link-card:active {
opacity: .8; opacity: .8;
} }
@@ -834,4 +843,12 @@ a.tree-link-card {
z-index: -10; z-index: -10;
backdrop-filter: blur(36px); backdrop-filter: blur(36px);
-webkit-backdrop-filter: (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);
} }
+23 -19
View File
@@ -10,7 +10,7 @@
<section class="web-section web-section-narrow-very"> <section class="web-section web-section-narrow-very">
<div v-for="link in tree.links"> <div v-for="link in tree.links">
<a class="tree-link-card" :href="link.url" v-if="link.enabled && !link.separate"> <a class="tree-link-card" :href="link.url" v-if="link.enabled && !link.separate">
{{ link.name }} <span v-if="link.ico" class="material-symbols-outlined">{{ link.ico }}</span>{{ link.name }}
</a> </a>
<hr v-else-if="link.separate"> <hr v-else-if="link.separate">
</div> </div>
@@ -46,33 +46,37 @@ interface TreeUserDataLink {
url: string url: string
} }
const tree = ref<TreeUserData | null>(null) const { data: tree, error } = await useAsyncData('treeUserData', () =>
$fetch<TreeUserData>(treeUserData)
)
onMounted(async () => { if (error.value) {
try { console.error('User tree fetch failed:', error.value)
const data = await $fetch<TreeUserData>(treeUserData) }
if (!data) return if (error.value?.statusCode === 404) {
await navigateTo('/tree')
tree.value = data }
} catch (err) {
console.error('User tree fetch failed:', err)
}
document.body.style.backgroundImage = `url('${tree.value?.background}')`
if (tree.value) {
useSeoMeta({ useSeoMeta({
titleTemplate: "%s", titleTemplate: "%s",
title: tree.value?.name + "'s Link", title: `${tree.value.name}'s Link`,
description: tree.value?.desc, description: tree.value.desc,
ogTitle: tree.value?.name, ogTitle: tree.value.name,
ogDescription: tree.value?.desc, ogDescription: tree.value.desc,
ogSiteName: config.public.siteName, ogSiteName: config.public.siteName,
twitterCard: 'summary_large_image', twitterCard: 'summary_large_image',
twitterTitle: tree.value?.name, twitterTitle: tree.value.name,
twitterDescription: tree.value?.desc, twitterDescription: tree.value.desc,
twitterSite: config.public.twitterUsername twitterSite: config.public.twitterUsername
}) })
}
onMounted(() => {
if (tree.value?.background) {
document.body.style.backgroundImage = `url('${tree.value.background}')`
}
}) })
definePageMeta({ definePageMeta({