에디터 미디어 선택 제목 계산 분리
This commit is contained in:
@@ -33,6 +33,7 @@ import {
|
||||
getGallerySelectionOrder as getGallerySelectionOrderFromSelection,
|
||||
getMediaItemKind,
|
||||
getMediaPickerPreviewUrl,
|
||||
getMediaPickerTitleForTarget,
|
||||
isGalleryMediaPickerTarget,
|
||||
isMediaItemSelectableForTarget,
|
||||
isUploadFileAllowedForMediaTarget,
|
||||
@@ -3348,25 +3349,7 @@ const handleMediaModalDrop = async (event) => {
|
||||
* 미디어 모달의 삽입 대상 라벨을 반환한다.
|
||||
* @returns {string} 모달 제목
|
||||
*/
|
||||
const mediaPickerTitle = computed(() => {
|
||||
if (mediaPickerTarget.value === 'gallery' || mediaPickerTarget.value === 'active-gallery') {
|
||||
return '갤러리 이미지 선택'
|
||||
}
|
||||
|
||||
if (mediaPickerTarget.value === 'video') {
|
||||
return '비디오 선택'
|
||||
}
|
||||
|
||||
if (mediaPickerTarget.value === 'audio') {
|
||||
return '오디오 선택'
|
||||
}
|
||||
|
||||
if (mediaPickerTarget.value === 'file') {
|
||||
return '파일 선택'
|
||||
}
|
||||
|
||||
return '이미지 선택'
|
||||
})
|
||||
const mediaPickerTitle = computed(() => getMediaPickerTitleForTarget(mediaPickerTarget.value))
|
||||
|
||||
/**
|
||||
* 미디어 모달에서 다중 선택 여부를 반환한다.
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
| lib/navigation-editor-tree.js | 관리자 메뉴 UI·서버 `renumberSortOrderByTree`가 쓰는 `buildNavigationEditorTree`, 관리자 상단 네비 평면 표용 `flattenNavigationEditorWrappers` |
|
||||
| lib/markdown-content-normalizer.js | 관리자 Markdown-first 전환 후 레거시 블록 배열·객체 본문 값을 저장용 마크다운 문자열로 변환 |
|
||||
| lib/markdown-editor-history.js | 관리자 Markdown-first 에디터 undo/redo 히스토리 항목 생성, 레거시 문자열 항목 본문 추출, 선택 범위 보정 |
|
||||
| lib/markdown-editor-media.js | 관리자 Markdown-first 에디터 미디어 선택 모달의 미디어 종류 판별, 대상별 선택 가능 여부, 미리보기 URL, 업로드 MIME 허용, 선택 대상별 accept·API kind·업로드 안내, 선택 순서·토글·항목 해석, 업로드 오류·한도 검증, 페이지 상태·범위·페이지 번호 계산, fenced 미디어 블록 생성 |
|
||||
| lib/markdown-editor-media.js | 관리자 Markdown-first 에디터 미디어 선택 모달의 미디어 종류 판별, 대상별 선택 가능 여부, 미리보기 URL, 업로드 MIME 허용, 선택 대상별 제목·accept·API kind·업로드 안내, 선택 순서·토글·항목 해석, 업로드 오류·한도 검증, 페이지 상태·범위·페이지 번호 계산, fenced 미디어 블록 생성 |
|
||||
| lib/markdown-block-parser.js | 공개 Markdown 본문 문자열을 제목·문단·이미지·갤러리·fenced 블록·인용·목록·코드·표 렌더링 블록으로 변환 |
|
||||
| lib/markdown-block-context.js | 관리자 Markdown textarea·라이브 편집 포커스 위치 기준 이미지·갤러리·링크·iframe·HTML·인용·콜아웃·코드·토글 블록 설정 패널 대상 판별, 인용 옵션 공통 파서 연결, 코드 fenced 블록 여닫는 펜스 쌍 판별 |
|
||||
| lib/markdown-iframe-embed.js | 게시물 본문 iframe 블록의 코드 판별과 안전 속성 추출, `allowfullscreen`을 `allow=fullscreen` 권한으로 정규화 |
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# 업데이트 이력
|
||||
|
||||
## v1.11.75
|
||||
|
||||
- 관리자 Markdown 에디터 미디어 선택 대상별 모달 제목 계산을 공통 helper로 분리.
|
||||
- 미디어 선택 대상별 제목 계산 단위 테스트 추가.
|
||||
|
||||
## v1.11.74
|
||||
|
||||
- 관리자 Markdown 에디터 미디어 선택 대상별 accept·API kind·다중 선택 여부·업로드 안내 문구 계산을 공통 helper로 분리.
|
||||
|
||||
@@ -175,6 +175,31 @@ export const getMediaPickerKindForTarget = (target) => {
|
||||
return 'all'
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 선택 대상에 맞는 모달 제목을 반환한다.
|
||||
* @param {string} target - 선택 대상
|
||||
* @returns {string} 모달 제목
|
||||
*/
|
||||
export const getMediaPickerTitleForTarget = (target) => {
|
||||
if (isGalleryMediaPickerTarget(target)) {
|
||||
return '갤러리 이미지 선택'
|
||||
}
|
||||
|
||||
if (target === 'video') {
|
||||
return '비디오 선택'
|
||||
}
|
||||
|
||||
if (target === 'audio') {
|
||||
return '오디오 선택'
|
||||
}
|
||||
|
||||
if (target === 'file') {
|
||||
return '파일 선택'
|
||||
}
|
||||
|
||||
return '이미지 선택'
|
||||
}
|
||||
|
||||
/**
|
||||
* 미디어 선택 대상별 업로드 안내 문구를 만든다.
|
||||
* @param {string} target - 선택 대상
|
||||
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "sori.studio",
|
||||
"version": "1.11.74",
|
||||
"version": "1.11.75",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "sori.studio",
|
||||
"version": "1.11.74",
|
||||
"version": "1.11.75",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@nuxtjs/tailwindcss": "^6.14.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sori.studio",
|
||||
"version": "1.11.74",
|
||||
"version": "1.11.75",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"imports": {
|
||||
|
||||
@@ -13,6 +13,7 @@ import {
|
||||
getMediaPickerAcceptForTarget,
|
||||
getMediaPickerKindForTarget,
|
||||
getMediaPickerPreviewUrl,
|
||||
getMediaPickerTitleForTarget,
|
||||
isGalleryMediaPickerTarget,
|
||||
isMediaItemSelectableForTarget,
|
||||
isUploadFileAllowedForMediaTarget,
|
||||
@@ -78,6 +79,16 @@ test('미디어 선택 대상별 입력 accept와 API kind를 계산한다', ()
|
||||
assert.equal(getMediaPickerKindForTarget('unknown'), 'all')
|
||||
})
|
||||
|
||||
test('미디어 선택 대상별 모달 제목을 계산한다', () => {
|
||||
assert.equal(getMediaPickerTitleForTarget('image'), '이미지 선택')
|
||||
assert.equal(getMediaPickerTitleForTarget('gallery'), '갤러리 이미지 선택')
|
||||
assert.equal(getMediaPickerTitleForTarget('active-gallery'), '갤러리 이미지 선택')
|
||||
assert.equal(getMediaPickerTitleForTarget('video'), '비디오 선택')
|
||||
assert.equal(getMediaPickerTitleForTarget('audio'), '오디오 선택')
|
||||
assert.equal(getMediaPickerTitleForTarget('file'), '파일 선택')
|
||||
assert.equal(getMediaPickerTitleForTarget('unknown'), '이미지 선택')
|
||||
})
|
||||
|
||||
test('미디어 선택 대상별 갤러리 여부와 업로드 안내 문구를 계산한다', () => {
|
||||
const uploadSizeLimits = buildDefaultUploadSizeLimits({
|
||||
image: 10485760,
|
||||
|
||||
Reference in New Issue
Block a user