const PAGE_SIZE = 36 async function GetImagesList(page = 0, query = "") { const response = await fetch(`/api/v1/images?thumbnails&pageSize=${PAGE_SIZE}&page=${page}&query=${query}`);// const formData = await response.formData(); const result = { thumbnails: {} } for (const key of formData.keys()) { if (key === "image_list.json") { const buffer = await formData.get(key).arrayBuffer() result.images = JSON.parse(new TextDecoder().decode(buffer)) } else { let buffer = await formData.get(key).arrayBuffer() let b64 = await bytesToBase64DataUrl(buffer, key.endsWith('.svg') ? "image/svg+xml" : "image/png") result.thumbnails[key] = b64 } } return result } async function RenderImageListPage(mountPoint, options = {}) { mountPoint.innerHTML = `
` const container = mountPoint.querySelector('.images_page__container') new ImagesPage(container, options) document.addEventListener('imageclicked', (e) => { const url = `/images/${e.detail.imageId}` if (e.detail.ctrlKey) { window.open(url, '_blank') } else { window.location.href = url } }) } async function fullScreenImageSelect() { const div = document.createElement('div') div.classList.add('image_selector__back') document.body.appendChild(div) const page = new ImagesPage(div, { headless: true }) return new Promise((resolve, reject) => { const onClick = (e) => { document.removeEventListener('imageclicked', onClick) page.destroy() div.remove() resolve(e.detail.imageId) } document.addEventListener('imageclicked', onClick) }) } class ImagesPage { constructor(mountPoint, options) { this.page = 0 const head = options.headless ? "" : `