function imageItem(url, index) { return {url, src: url, index, attempt: 0, failed: false, settled: false} } export function startImages(urls) { return urls.length ? [imageItem(urls[0], 0)] : [] } export function settleImage(items, urls, item, failed = false) { // Ignore events from images removed by a page change or dialog close. if (!items.includes(item)) return item.failed = failed if (item.settled) return item.settled = true if (items.length < urls.length) items.push(imageItem(urls[items.length], items.length)) } export function retryImage(item) { item.failed = false item.attempt++ item.src = item.url + (item.url.includes('?') ? '&' : '?') + 'retry=' + item.attempt }