대표 이미지 원본 선택 보강 v1.7.9
This commit is contained in:
@@ -5,6 +5,7 @@ import {
|
||||
toAdminPostStoredTitle
|
||||
} from '../../lib/admin-post-title.js'
|
||||
import { normalizeMarkdownContent } from '../../lib/markdown-content-normalizer.js'
|
||||
import { isPostCardThumbnailUrl } from '../../lib/post-card-thumbnail-url.js'
|
||||
import { DEFAULT_POST_TAG_LIMIT, normalizePostTagLimit } from '../../lib/post-tag-limit.js'
|
||||
|
||||
const props = defineProps({
|
||||
@@ -92,6 +93,14 @@ const defaultTagColor = '#15171a'
|
||||
/** @type {number} 한국어 본문 예상 읽기 속도(분당 공백 제외 문자 수) */
|
||||
const READING_CHARS_PER_MINUTE = 600
|
||||
|
||||
/**
|
||||
* 대표 이미지로 선택 가능한 원본 이미지 목록
|
||||
* @returns {Array<Object>} 카드 썸네일을 제외한 이미지 목록
|
||||
*/
|
||||
const featuredImageMediaItems = computed(() => mediaItems.value.filter((item) => (
|
||||
item?.kind === 'image' && !isPostCardThumbnailUrl(item.url)
|
||||
)))
|
||||
|
||||
/**
|
||||
* ISO 날짜를 datetime-local 입력값으로 변환
|
||||
* @param {string} value - ISO 날짜 문자열
|
||||
@@ -750,7 +759,7 @@ const fetchMediaItems = async () => {
|
||||
const openMediaPicker = async (target = 'featuredImage') => {
|
||||
mediaPickerTarget.value = target
|
||||
activeMediaPickerTab.value = 'upload'
|
||||
selectedMediaPickerUrl.value = form[target] || ''
|
||||
selectedMediaPickerUrl.value = isPostCardThumbnailUrl(form[target]) ? '' : form[target] || ''
|
||||
isMediaPickerOpen.value = true
|
||||
await fetchMediaItems()
|
||||
}
|
||||
@@ -777,7 +786,7 @@ const selectPickedImage = (item) => {
|
||||
* @returns {void}
|
||||
*/
|
||||
const applyPickedImage = () => {
|
||||
if (!selectedMediaPickerUrl.value) {
|
||||
if (!selectedMediaPickerUrl.value || isPostCardThumbnailUrl(selectedMediaPickerUrl.value)) {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2138,9 +2147,9 @@ defineExpose({
|
||||
<p v-if="isLoadingMedia" class="admin-post-form__media-picker-loading text-sm text-muted">
|
||||
미디어를 불러오는 중입니다.
|
||||
</p>
|
||||
<div v-else-if="mediaItems.length" class="admin-post-form__media-picker-grid grid grid-cols-3 gap-2 sm:grid-cols-4 md:grid-cols-6">
|
||||
<div v-else-if="featuredImageMediaItems.length" class="admin-post-form__media-picker-grid grid grid-cols-3 gap-2 sm:grid-cols-4 md:grid-cols-6">
|
||||
<button
|
||||
v-for="item in mediaItems"
|
||||
v-for="item in featuredImageMediaItems"
|
||||
:key="item.url"
|
||||
class="admin-post-form__media-picker-item relative overflow-hidden border bg-white text-left transition hover:border-[#8e9cac] hover:shadow-sm"
|
||||
:class="selectedMediaPickerUrl === item.url ? 'border-[#15171a] ring-2 ring-[#15171a]' : 'border-line'"
|
||||
|
||||
Reference in New Issue
Block a user