allow case-insensitive matching of stock images

Hunter
Friday, December 19th, 2025 at 11:02 PM

index.html+8-7

index.html
242  		const preview = document.getElementById('preview');
243  
244  		// Stock images loaded from manifest - can be referenced by bare filename
    -		let stockImages = new Set();
245 +		let stockImages = new Map(); // lowercase -> original filename
246  
247  		// Load stock image list from manifest
248  		const stockImagesReady = fetch('resource-manifest.json')
249  			.then(r => r.json())
250  			.then(manifest => {
251  				manifest.images.forEach(path => {
    -					const filename = path.split('/').pop().toLowerCase();
    -					stockImages.add(filename);
252 +					const filename = path.split('/').pop();
253 +					stockImages.set(filename.toLowerCase(), filename);
254  				});
255  			})
256  			.catch(() => console.log('Could not load resource manifest'));
257  
    -		// Rewrite bare image filenames to use images/ prefix
258 +		// Rewrite bare image filenames to use images/ prefix (case-insensitive, uses correct case)
259  		function rewriteBareImageSrcs(html) {
260  			return html.replace(/(<img\s[^>]*\bsrc\s*=\s*["'])([^"'/:]+\.(gif|png|jpg|jpeg|svg|webp))(["'])/gi,
261  				(match, before, filename, ext, after) => {
    -					if (stockImages.has(filename.toLowerCase())) {
    -						return before + 'images/' + filename + after;
262 +					const original = stockImages.get(filename.toLowerCase());
263 +					if (original) {
264 +						return before + 'images/' + original + after;
265  					}
266  					return match;
267  				});

270  		// Expand <images> tags into gallery table
271  		function expandImagesTag(html) {
272  			return html.replace(/<images\s*\/?>/gi, () => {
    -				const images = Array.from(stockImages).sort();
273 +				const images = Array.from(stockImages.values()).sort();
274  				if (images.length === 0) return '<p>No images available</p>';
275  				const rows = images.map(filename =>
276  					`<tr><td>${filename}</td><td style="text-align:center;"><img src="images/${filename}"></td></tr>`