Files
sori.studio/lib/content-gallery-images.js

57 lines
1.4 KiB
JavaScript

/**
* 공개 본문 라이트박스 이미지 목록을 만든다.
* @param {Array<Object>} blocks - Markdown 렌더링 블록 목록
* @returns {Array<Object>} 라이트박스 이미지 목록
*/
export const getContentLightboxImages = (blocks) => {
const images = []
for (const block of blocks || []) {
if (block?.type === 'image' && block.url) {
images.push({
...block,
lightboxKey: block.id
})
continue
}
if (block?.type !== 'gallery' || !Array.isArray(block.images)) {
continue
}
block.images.forEach((image, imageIndex) => {
if (!image?.url) {
return
}
images.push({
...image,
lightboxKey: `${block.id}:${imageIndex}`
})
})
}
return images
}
/**
* 갤러리 이미지를 행 단위로 나눈다.
* @param {Array<Object>} images - 갤러리 이미지 목록
* @param {number} [rowSize=3] - 행당 이미지 개수
* @returns {Array<{ startIndex: number, images: Array<Object> }>} 행 목록
*/
export const getGalleryRows = (images, rowSize = 3) => {
const safeImages = Array.isArray(images) ? images : []
const safeRowSize = Number.isInteger(rowSize) && rowSize > 0 ? rowSize : 3
const rows = []
for (let index = 0; index < safeImages.length; index += safeRowSize) {
rows.push({
startIndex: index,
images: safeImages.slice(index, index + safeRowSize)
})
}
return rows
}