게시글 미디어와 편집 표시 개선 v1.7.8

This commit is contained in:
2026-06-24 09:48:10 +09:00
parent c2acecffcd
commit cab71285d8
11 changed files with 54 additions and 37 deletions

View File

@@ -79,7 +79,7 @@ const isMediaPickerOpen = ref(false)
const isLoadingMedia = ref(false)
const isUploading = ref(false)
const mediaPickerTarget = ref('image')
const activeMediaPickerTab = ref('library')
const activeMediaPickerTab = ref('upload')
const mediaSearchQuery = ref('')
const selectedMediaUrls = ref([])
const lastSelectionState = ref({
@@ -3050,7 +3050,7 @@ const openMediaPicker = async (target) => {
}
mediaPickerTarget.value = target
activeMediaPickerTab.value = 'library'
activeMediaPickerTab.value = 'upload'
mediaSearchQuery.value = ''
selectedMediaUrls.value = []
isMediaPickerOpen.value = true
@@ -3088,7 +3088,7 @@ const closeMediaPicker = () => {
isMediaPickerOpen.value = false
selectedMediaUrls.value = []
activeMediaPickerTab.value = 'library'
activeMediaPickerTab.value = 'upload'
mediaSearchQuery.value = ''
liveSlashInsertLine.value = null
}
@@ -3355,10 +3355,16 @@ const uploadFromMediaModal = async (files) => {
...uploadedFiles,
...mediaItems.value
])
selectedMediaUrls.value = []
const uploadedUrls = uploadedFiles
.filter(isMediaItemSelectableForTarget)
.map((file) => file.url)
selectedMediaUrls.value = isGalleryMediaPicker.value
? uploadedUrls
: uploadedUrls.slice(0, 1)
activeMediaPickerTab.value = 'library'
mediaSearchQuery.value = ''
showToast('success', '업로드가 완료되었습니다. 목록에서 파일을 선택해 삽입해 주세요.')
showToast('success', '업로드가 완료되어 파일이 선택되었습니다.')
} catch (error) {
showToast('error', resolveUploadFetchErrorMessage(error))
} finally {
@@ -3708,14 +3714,6 @@ const handleKeydown = (event) => {
<div class="admin-markdown-editor__media-tabs flex items-center gap-3 border-b border-[#e3e6e8] px-5">
<div class="flex min-w-0 flex-1 items-center">
<button
class="admin-markdown-editor__media-tab border-b-2 px-3 py-3 text-sm font-semibold transition-colors"
:class="activeMediaPickerTab === 'library' ? 'border-[#15171a] text-[#15171a]' : 'border-transparent text-[#6b7280] hover:text-[#15171a]'"
type="button"
@click="activeMediaPickerTab = 'library'"
>
미디어 라이브러리
</button>
<button
class="admin-markdown-editor__media-tab border-b-2 px-3 py-3 text-sm font-semibold transition-colors"
:class="activeMediaPickerTab === 'upload' ? 'border-[#15171a] text-[#15171a]' : 'border-transparent text-[#6b7280] hover:text-[#15171a]'"
@@ -3724,8 +3722,16 @@ const handleKeydown = (event) => {
>
업로드
</button>
<button
class="admin-markdown-editor__media-tab border-b-2 px-3 py-3 text-sm font-semibold transition-colors"
:class="activeMediaPickerTab === 'library' ? 'border-[#15171a] text-[#15171a]' : 'border-transparent text-[#6b7280] hover:text-[#15171a]'"
type="button"
@click="activeMediaPickerTab = 'library'"
>
미디어 라이브러리
</button>
</div>
<label class="admin-markdown-editor__media-search mb-px flex w-full max-w-xs shrink-0 items-center py-2">
<label v-if="activeMediaPickerTab === 'library'" class="admin-markdown-editor__media-search mb-px flex w-full max-w-xs shrink-0 items-center py-2">
<span class="sr-only">파일명 검색</span>
<input
v-model="mediaSearchQuery"

View File

@@ -3283,7 +3283,7 @@ onBeforeUnmount(() => {
/>
<section
v-else-if="block.type === 'embed' && interactive"
class="content-markdown-renderer__embed-live group relative my-8 rounded-[12px] outline-none transition-shadow focus-within:ring-2 focus-within:ring-[var(--site-accent)] focus-within:ring-offset-2 focus-visible:ring-2 focus-visible:ring-[var(--site-accent)] focus-visible:ring-offset-2"
class="content-markdown-renderer__embed-live group relative mb-8 rounded-[12px] outline-none transition-shadow focus-within:ring-2 focus-within:ring-[var(--site-accent)] focus-within:ring-offset-2 focus-visible:ring-2 focus-visible:ring-[var(--site-accent)] focus-visible:ring-offset-2"
:data-source-line="block.meta.startLine"
data-preview-card-block="true"
tabindex="0"

View File

@@ -199,7 +199,7 @@ watch(mastodonEmbedUrl, () => {
<template>
<div
class="prose-embed prose-embed-card my-8 overflow-hidden rounded-[10px]"
class="prose-embed prose-embed-card mb-8 overflow-hidden rounded-[10px]"
:class="tweetEmbedUrl ? 'mx-auto max-w-[550px]' : mastodonEmbedUrl ? 'mx-auto max-w-[560px] border border-[var(--site-line)] bg-[var(--site-panel)]' : 'border border-[var(--site-line)] bg-[var(--site-panel)]'"
>
<iframe