관리자 레이아웃과 네비게이션 정리

This commit is contained in:
2026-05-13 10:23:18 +09:00
parent ec9f9ea57f
commit b490d5b90f
17 changed files with 484 additions and 164 deletions

View File

@@ -53,10 +53,24 @@ const imageSrc = computed(() => props.thumbnail || faviconUrl.value)
* @returns {string}
*/
const displayTitle = computed(() => props.title || displayHost.value || props.url)
/**
* 외부 링크로 열어도 되는 URL인지 확인한다.
* @returns {boolean} 허용 여부
*/
const isSafeBookmarkUrl = computed(() => {
try {
const parsedUrl = new URL(props.url)
return ['http:', 'https:'].includes(parsedUrl.protocol)
} catch {
return false
}
})
</script>
<template>
<a
v-if="isSafeBookmarkUrl"
class="prose-bookmark group prose-bookmark-card my-8 flex max-w-full flex-col overflow-hidden rounded-[10px] border border-[var(--site-line)] bg-[var(--site-panel)] no-underline transition-[background-color,box-shadow] hover:bg-[color-mix(in_srgb,var(--site-panel)_86%,var(--site-text)_14%)] sm:flex-row"
:href="url"
target="_blank"
@@ -92,4 +106,7 @@ const displayTitle = computed(() => props.title || displayHost.value || props.ur
</p>
</div>
</a>
<p v-else class="prose-bookmark prose-bookmark-invalid my-8 rounded-[10px] border border-[var(--site-line)] bg-[var(--site-panel)] p-5 text-sm font-semibold text-[var(--site-muted)]">
지원하지 않는 북마크 URL입니다.
</p>
</template>