From a1882294897e305cbd5a788faf12be98ee41964e Mon Sep 17 00:00:00 2001 From: zenn Date: Fri, 24 Jul 2026 18:31:53 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=90=EB=94=94=ED=84=B0=20=EB=AF=B8?= =?UTF-8?q?=EB=94=94=EC=96=B4=20=EB=B9=88=20=EC=83=81=ED=83=9C=20=EB=AC=B8?= =?UTF-8?q?=EA=B5=AC=20=EA=B3=84=EC=82=B0=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/admin/AdminMarkdownEditor.vue | 14 ++++++++------ docs/map.md | 2 +- docs/update.md | 5 +++++ lib/markdown-editor-media.js | 15 +++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- tests/markdown-editor-media.test.js | 6 ++++++ 7 files changed, 38 insertions(+), 10 deletions(-) diff --git a/components/admin/AdminMarkdownEditor.vue b/components/admin/AdminMarkdownEditor.vue index 920d6b4..de7e2cc 100644 --- a/components/admin/AdminMarkdownEditor.vue +++ b/components/admin/AdminMarkdownEditor.vue @@ -22,6 +22,7 @@ import { getEditorHistoryEntryValue } from '../../lib/markdown-editor-history.js' import { + buildMediaPickerEmptyMessage, buildMediaPickerUploadHint, buildMediaPickerPageItems, buildMediaPickerRangeLabel, @@ -3366,6 +3367,12 @@ const mediaPickerUploadHint = computed(() => buildMediaPickerUploadHint( uploadSizeLimits.value )) +/** + * 미디어 라이브러리 빈 상태 문구를 반환한다. + * @returns {string} 빈 상태 문구 + */ +const mediaPickerEmptyMessage = computed(() => buildMediaPickerEmptyMessage(mediaSearchQuery.value)) + /** * 붙여넣은 이미지 파일을 업로드한다. * @param {ClipboardEvent} event - 붙여넣기 이벤트 @@ -3702,12 +3709,7 @@ const handleKeydown = (event) => {
- - + {{ mediaPickerEmptyMessage }}
{ return `단일 이미지가 본문에 삽입됩니다. (최대 ${formatUploadSizeLimit(uploadSizeLimits.image)})` } +/** + * 미디어 선택 라이브러리 빈 상태 문구를 만든다. + * @param {string} searchQuery - 검색어 + * @returns {string} 빈 상태 문구 + */ +export const buildMediaPickerEmptyMessage = (searchQuery) => { + const normalizedQuery = String(searchQuery || '').trim() + + if (normalizedQuery) { + return `「${normalizedQuery}」에 맞는 미디어가 없습니다.` + } + + return '선택할 미디어가 없습니다. 업로드 탭에서 파일을 추가할 수 있습니다.' +} + /** * 미디어 항목으로 Prose 미디어 블록을 만든다. * @param {'video'|'audio'|'file'} blockType - 블록 유형 diff --git a/package-lock.json b/package-lock.json index bc4cddd..aa65718 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sori.studio", - "version": "1.11.75", + "version": "1.11.76", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sori.studio", - "version": "1.11.75", + "version": "1.11.76", "hasInstallScript": true, "dependencies": { "@nuxtjs/tailwindcss": "^6.14.0", diff --git a/package.json b/package.json index 76ec122..a330fdf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sori.studio", - "version": "1.11.75", + "version": "1.11.76", "private": true, "type": "module", "imports": { diff --git a/tests/markdown-editor-media.test.js b/tests/markdown-editor-media.test.js index 77dadcb..aeeaa0f 100644 --- a/tests/markdown-editor-media.test.js +++ b/tests/markdown-editor-media.test.js @@ -1,6 +1,7 @@ import assert from 'node:assert/strict' import test from 'node:test' import { + buildMediaPickerEmptyMessage, buildMediaPickerPageItems, buildMediaPickerRangeLabel, buildMediaPickerUploadHint, @@ -107,6 +108,11 @@ test('미디어 선택 대상별 갤러리 여부와 업로드 안내 문구를 assert.equal(buildMediaPickerUploadHint('image', uploadSizeLimits), '단일 이미지가 본문에 삽입됩니다. (최대 10MB)') }) +test('미디어 선택 라이브러리 빈 상태 문구를 계산한다', () => { + assert.equal(buildMediaPickerEmptyMessage(''), '선택할 미디어가 없습니다. 업로드 탭에서 파일을 추가할 수 있습니다.') + assert.equal(buildMediaPickerEmptyMessage(' car '), '「car」에 맞는 미디어가 없습니다.') +}) + test('미디어 항목으로 fenced 미디어 블록을 만든다', () => { assert.deepEqual(createMediaBlockMarkdown('video', { url: '/uploads/a.mp4',