diff --git a/components/content/ContentMarkdownRenderer.vue b/components/content/ContentMarkdownRenderer.vue index 9f559bd..a793f9a 100644 --- a/components/content/ContentMarkdownRenderer.vue +++ b/components/content/ContentMarkdownRenderer.vue @@ -5,7 +5,11 @@ import { isImageUrl, parseImageMarkdownLine } from '../../lib/markdown-image.js' -import { getPostBodyPreviewThumbnailUrl, getPostBodyThumbnailUrl } from '../../lib/post-card-thumbnail-url.js' +import { + getPostBodyPreviewThumbnailUrl, + getPostBodyThumbnailUrl, + getPostLightboxThumbnailUrl +} from '../../lib/post-card-thumbnail-url.js' import { readEditableTextFromElement, setEditableCaretOffset } from '../../lib/markdown-inline.js' import { applyLiveSelectionDelete, @@ -1057,6 +1061,13 @@ const contentLightboxImages = computed(() => { */ const getContentDisplayImageUrl = (imageUrl) => getPostBodyThumbnailUrl(imageUrl) || imageUrl || '' +/** + * 게시물 라이트박스용 이미지 URL을 조회한다. + * @param {string|null|undefined} imageUrl - 원본 이미지 URL + * @returns {string} 라이트박스용 이미지 URL + */ +const getContentLightboxImageUrl = (imageUrl) => getPostLightboxThumbnailUrl(imageUrl) || imageUrl || '' + /** * 게시물 본문 이미지의 반응형 srcset을 만든다. * @param {string|null|undefined} imageUrl - 원본 이미지 URL @@ -1149,6 +1160,22 @@ const onGalleryImageError = (event, fallbackUrl) => { image.src = fallbackUrl } +/** + * 라이트박스용 파생 이미지 로드 실패 시 원본 이미지로 되돌린다. + * @param {Event} event - 이미지 로드 이벤트 + * @param {string} fallbackUrl - 원본 이미지 URL + * @returns {void} + */ +const onLightboxImageError = (event, fallbackUrl) => { + const image = event.target + + if (!(image instanceof HTMLImageElement) || !fallbackUrl || image.src.endsWith(fallbackUrl)) { + return + } + + image.src = fallbackUrl +} + /** * 갤러리 이미지 셀의 flex 비율 스타일을 만든다. * @param {Object} block - 갤러리 블록 @@ -3621,8 +3648,9 @@ onBeforeUnmount(() => {