coderuday21 commited on
Commit
216e4eb
·
1 Parent(s): 82f4285

Fix before/after slider in result modal: wait for image load, handle missing thumbnails

Browse files
Files changed (2) hide show
  1. static/js/app.js +36 -4
  2. templates/index.html +1 -1
static/js/app.js CHANGED
@@ -397,17 +397,49 @@ function showResult(data) {
397
 
398
  const beforeImg = document.getElementById('compare-before-img');
399
  const afterImg = document.getElementById('compare-after-img');
 
 
 
 
 
400
  if (data.overlayBase64Png) {
 
401
  afterImg.src = 'data:image/png;base64,' + data.overlayBase64Png;
402
  const beforeFile = document.getElementById('file-before').files?.[0];
403
- if (beforeFile) readFileAsDataURL(beforeFile).then((url) => { beforeImg.src = url; });
 
 
 
 
 
 
404
  } else {
 
405
  afterImg.src = data.overlayUrl || '';
406
- beforeImg.src = data.beforeThumbUrl || data.overlayUrl || '';
 
 
 
407
  }
408
 
409
- resetCompareSlider();
410
- resetZoom();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
 
412
  tbody.innerHTML = '';
413
  const regions = (data.regions || []).slice(0, 50);
 
397
 
398
  const beforeImg = document.getElementById('compare-before-img');
399
  const afterImg = document.getElementById('compare-after-img');
400
+
401
+ // "Before" side = original before image, "After" side = result overlay
402
+ const sliderSection = document.querySelector('.zoom-slider-section');
403
+ let hasBefore = false;
404
+
405
  if (data.overlayBase64Png) {
406
+ // Fresh detection: result image is base64, before image from file picker
407
  afterImg.src = 'data:image/png;base64,' + data.overlayBase64Png;
408
  const beforeFile = document.getElementById('file-before').files?.[0];
409
+ if (beforeFile) {
410
+ hasBefore = true;
411
+ readFileAsDataURL(beforeFile).then((url) => { beforeImg.src = url; });
412
+ } else if (data.beforeThumbUrl) {
413
+ hasBefore = true;
414
+ beforeImg.src = data.beforeThumbUrl;
415
+ }
416
  } else {
417
+ // Loading from history: use stored URLs
418
  afterImg.src = data.overlayUrl || '';
419
+ if (data.beforeThumbUrl) {
420
+ hasBefore = true;
421
+ beforeImg.src = data.beforeThumbUrl;
422
+ }
423
  }
424
 
425
+ // If no before image available, still show the overlay but hide the slider handle
426
+ if (!hasBefore) {
427
+ beforeImg.src = afterImg.src;
428
+ }
429
+
430
+ // Wait for images to load before positioning the slider, then reset
431
+ let loaded = 0;
432
+ const onReady = () => {
433
+ loaded++;
434
+ if (loaded >= 2) {
435
+ resetCompareSlider();
436
+ resetZoom();
437
+ }
438
+ };
439
+ afterImg.onload = onReady;
440
+ beforeImg.onload = onReady;
441
+ // Fallback for cached images (onload won't fire if already loaded)
442
+ setTimeout(() => { resetCompareSlider(); resetZoom(); }, 400);
443
 
444
  tbody.innerHTML = '';
445
  const regions = (data.regions || []).slice(0, 50);
templates/index.html CHANGED
@@ -345,6 +345,6 @@
345
  </div>
346
  </div>
347
 
348
- <script src="/static/js/app.js?v=17"></script>
349
  </body>
350
  </html>
 
345
  </div>
346
  </div>
347
 
348
+ <script src="/static/js/app.js?v=18"></script>
349
  </body>
350
  </html>