toshas commited on
Commit
4735dce
·
1 Parent(s): fc004f8

plugin works

Browse files
Files changed (3) hide show
  1. css/comparison-widget.css +5 -5
  2. index.html +6 -56
  3. js/comparison-widget.js +23 -85
css/comparison-widget.css CHANGED
@@ -245,7 +245,7 @@
245
  #ws-image-left,
246
  #ws-image-right {
247
  width: 100% !important;
248
- height: auto !important;
249
  }
250
 
251
  .twentytwenty-container {
@@ -368,8 +368,8 @@
368
  #ws-image-right {
369
  max-width: 100%;
370
  max-height: 100%;
371
- width: auto;
372
- height: auto;
373
  }
374
 
375
  /* Ensure twentytwenty slider fits based on image dimensions */
@@ -406,8 +406,8 @@
406
  vertical-align: bottom; /* Remove gaps */
407
  }
408
 
409
- #ws-image-baseline,
410
- #ws-image-stereospace {
411
  border-radius: 12px;
412
  display: block;
413
  vertical-align: bottom; /* Remove inline element gap */
 
245
  #ws-image-left,
246
  #ws-image-right {
247
  width: 100% !important;
248
+ height: 100% !important;
249
  }
250
 
251
  .twentytwenty-container {
 
368
  #ws-image-right {
369
  max-width: 100%;
370
  max-height: 100%;
371
+ width: 100% !important;
372
+ height: 100% !important;
373
  }
374
 
375
  /* Ensure twentytwenty slider fits based on image dimensions */
 
406
  vertical-align: bottom; /* Remove gaps */
407
  }
408
 
409
+ #ws-image-left,
410
+ #ws-image-right {
411
  border-radius: 12px;
412
  display: block;
413
  vertical-align: bottom; /* Remove inline element gap */
index.html CHANGED
@@ -192,50 +192,6 @@
192
  </div>
193
  </section>
194
 
195
-
196
- <!--<section class="section pt-0 pb-4">-->
197
- <!-- <div class="container is-max-desktop">-->
198
- <!-- <div class="columns is-centered has-text-centered">-->
199
- <!-- <div class="column is-four-fifths">-->
200
- <!-- <h2 class="title is-3">Gallery</h2>-->
201
- <!-- </div>-->
202
- <!-- </div>-->
203
- <!-- </div>-->
204
- <!--</section>-->
205
-
206
- <!--&lt;!&ndash; Results Carousel. &ndash;&gt;-->
207
- <!--<section class="hero is-light is-small mt-4">-->
208
- <!-- <div class="hero-body">-->
209
- <!-- &lt;!&ndash; <div class="container"> &ndash;&gt;-->
210
- <!-- <div id="results-carousel-horizontal" class="carousel results-carousel">-->
211
-
212
- <!-- <div class="twoitem">-->
213
- <!-- <div class="twentytwenty-container twentytwenty-container-top">-->
214
- <!-- <div class="cmpcontent">-->
215
- <!-- <img src="./images/comparison/car/original.jpg">-->
216
- <!-- </div>-->
217
- <!-- <div class="cmpcontent">-->
218
- <!-- <img src="./images/comparison/car/windowseat.png">-->
219
- <!-- </div>-->
220
- <!-- </div>-->
221
- <!-- </div>-->
222
-
223
- <!-- <div class="twoitem">-->
224
- <!-- <div class="twentytwenty-container twentytwenty-container-top">-->
225
- <!-- <div class="cmpcontent">-->
226
- <!-- <img src="./images/comparison/airport/original.jpg">-->
227
- <!-- </div>-->
228
- <!-- <div class="cmpcontent">-->
229
- <!-- <img src="./images/comparison/airport/windowseat.png">-->
230
- <!-- </div>-->
231
- <!-- </div>-->
232
- <!-- </div>-->
233
-
234
- <!-- </div>-->
235
- <!-- &lt;!&ndash; </div> &ndash;&gt;-->
236
- <!-- </div>-->
237
- <!--</section>-->
238
-
239
  <!-- Baseline Comparison Title -->
240
  <section class="section pt-0 pb-4">
241
  <div class=" is-max-desktop">
@@ -279,23 +235,23 @@
279
  <div class="twentytwenty-container twentytwenty-container-top" id="ws-comparison-slider">
280
  <div class="cmpcontent">
281
  <img
282
- id="ws-image-baseline"
283
  src="./images/teaser_subfigures/215/tgt.png"
284
  alt="Ground Truth"
285
  />
286
  </div>
287
  <div class="cmpcontent">
288
  <img
289
- id="ws-image-windowseat"
290
  src="./images/teaser_subfigures/215/stereospace.png"
291
- alt="StereoSpace"
292
  />
293
  </div>
294
  </div>
295
 
296
  <!-- Model selector for baseline comparison -->
297
  <div class="ws-model-selector-overlay">
298
- <button class="ws-model-pill is-active" data-model="stereospace">StereoSpace</button>
299
  <button class="ws-model-pill" data-model="lyra">Lyra</button>
300
  <button class="ws-model-pill" data-model="genstereo">GenStereo</button>
301
  <button class="ws-model-pill" data-model="stereodiffusion">StereoDiffusion</button>
@@ -393,16 +349,10 @@
393
  autoplay: true,
394
  });
395
 
396
- $(".twentytwenty-container-top").twentytwenty({
397
- before_label: 'Input',
398
- after_label: 'StereoSpace',
399
- default_offset_pct: 0.4,
400
- });
401
-
402
  // Initialize comparison widget slider with different labels
403
  $("#ws-comparison-slider").twentytwenty({
404
- before_label: 'Ground Truth',
405
- after_label: 'StereoSpace',
406
  default_offset_pct: 0.5,
407
  });
408
 
 
192
  </div>
193
  </section>
194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  <!-- Baseline Comparison Title -->
196
  <section class="section pt-0 pb-4">
197
  <div class=" is-max-desktop">
 
235
  <div class="twentytwenty-container twentytwenty-container-top" id="ws-comparison-slider">
236
  <div class="cmpcontent">
237
  <img
238
+ id="ws-image-left"
239
  src="./images/teaser_subfigures/215/tgt.png"
240
  alt="Ground Truth"
241
  />
242
  </div>
243
  <div class="cmpcontent">
244
  <img
245
+ id="ws-image-right"
246
  src="./images/teaser_subfigures/215/stereospace.png"
247
+ alt="StereoSpace (ours)"
248
  />
249
  </div>
250
  </div>
251
 
252
  <!-- Model selector for baseline comparison -->
253
  <div class="ws-model-selector-overlay">
254
+ <button class="ws-model-pill is-active" data-model="stereospace">StereoSpace (ours)</button>
255
  <button class="ws-model-pill" data-model="lyra">Lyra</button>
256
  <button class="ws-model-pill" data-model="genstereo">GenStereo</button>
257
  <button class="ws-model-pill" data-model="stereodiffusion">StereoDiffusion</button>
 
349
  autoplay: true,
350
  });
351
 
 
 
 
 
 
 
352
  // Initialize comparison widget slider with different labels
353
  $("#ws-comparison-slider").twentytwenty({
354
+ before_label: 'StereoSpace (ours)',
355
+ after_label: 'Ground Truth',
356
  default_offset_pct: 0.5,
357
  });
358
 
js/comparison-widget.js CHANGED
@@ -30,7 +30,7 @@ function wsRenderHotspots() {
30
  // Scene-based image mapping
31
  const WS_SCENE_IMAGES = {
32
  215: {
33
- target: '/images/teaser_subfigures/215/tgt.jpg',
34
  stereospace: '/images/teaser_subfigures/215/stereospace.png',
35
  lyra: '/images/teaser_subfigures/215/lyra.png',
36
  genstereo: '/images/teaser_subfigures/215/genstereo.png',
@@ -38,51 +38,39 @@ const WS_SCENE_IMAGES = {
38
  zerostereo: '/images/teaser_subfigures/215/zerostereo.png',
39
  },
40
  249: {
41
- target: '/images/teaser_subfigures/249/tgt.jpg',
42
  stereospace: '/images/teaser_subfigures/249/stereospace.png',
43
- lyra: '/images/teaser_subfigures/249/lyra.jpg',
44
  genstereo: '/images/teaser_subfigures/249/genstereo.png',
45
  stereodiffusion: '/images/teaser_subfigures/249/stereodiffusion.png',
46
  zerostereo: '/images/teaser_subfigures/249/zerostereo.png',
47
  },
48
  252: {
49
- target: '/images/teaser_subfigures/252/tgt.jpg',
50
  stereospace: '/images/teaser_subfigures/252/stereospace.png',
51
- lyra: '/images/teaser_subfigures/252/lyra.jpg',
52
  genstereo: '/images/teaser_subfigures/252/genstereo.png',
53
  stereodiffusion: '/images/teaser_subfigures/252/stereodiffusion.png',
54
  zerostereo: '/images/teaser_subfigures/252/zerostereo.png',
55
  },
56
  285: {
57
- target: '/images/teaser_subfigures/285/tgt.jpg',
58
  stereospace: '/images/teaser_subfigures/285/stereospace.png',
59
- lyra: '/images/teaser_subfigures/285/lyra.jpg',
60
  genstereo: '/images/teaser_subfigures/285/genstereo.png',
61
  stereodiffusion: '/images/teaser_subfigures/285/stereodiffusion.png',
62
  zerostereo: '/images/teaser_subfigures/285/zerostereo.png',
63
  },
64
  297: {
65
- target: '/images/teaser_subfigures/297/tgt.jpg',
66
  stereospace: '/images/teaser_subfigures/297/stereospace.png',
67
- lyra: '/images/teaser_subfigures/297/lyra.jpg',
68
  genstereo: '/images/teaser_subfigures/297/genstereo.png',
69
  stereodiffusion: '/images/teaser_subfigures/297/stereodiffusion.png',
70
  zerostereo: '/images/teaser_subfigures/297/zerostereo.png',
71
  },
72
  };
73
 
74
- function wsLoadScene(sceneName) {
75
- const sceneData = WS_SCENE_IMAGES[sceneName];
76
- if (!sceneData) return;
77
-
78
- // Update left image (target input)
79
- $('#ws-image-left').attr('src', sceneData.target);
80
-
81
- // Update right image with current selected model
82
- const activeModel = $('.ws-model-pill[data-model].is-active').data('model') || 'lyra';
83
- $('#ws-image-right').attr('src', sceneData[activeModel]);
84
- }
85
-
86
  $(document).ready(function() {
87
  // Initialize state
88
  let currentScene = '215';
@@ -91,9 +79,9 @@ $(document).ready(function() {
91
 
92
  // map model keys -> readable label shown on the slider
93
  const WS_MODEL_LABELS = {
94
- stereospace: 'StereoSpace (ours)',
95
- src: 'Source',
96
  tgt: 'Ground Truth',
 
97
  genstereo: 'GenStereo',
98
  lyra: 'Lyra',
99
  stereodiffusion: 'StereoDiffusion',
@@ -113,30 +101,10 @@ $(document).ready(function() {
113
  });
114
  }
115
 
116
- // Initialize the twentytwenty slider
117
- function initSlider(beforeLabel = 'Baseline') {
118
- $("#ws-teaser_subfigures-slider").twentytwenty({
119
- before_label: beforeLabel,
120
- after_label: 'stereospace',
121
- default_offset_pct: 0.5,
122
- });
123
- sliderInitialized = true;
124
- // Clear any accidental zero clip applied by the plugin
125
- setTimeout(() => {
126
- $('.twentytwenty-overlay').css('clip', 'auto');
127
- }, 50);
128
- }
129
-
130
  // Update labels on an already-initialized twentytwenty instance
131
  function wsSetSliderLabels(beforeLabel, afterLabel) {
132
- // plugin creates either "-label" or plain classes in different versions; update both
133
- $('#ws-teaser_subfigures-slider .twentytwenty-before-label').attr('data-content', afterLabel);
134
- $('#ws-teaser_subfigures-slider .twentytwenty-after-label').attr('data-content', beforeLabel);
135
- // log that labels were updated
136
- console.log('Updated slider labels to:', $wsSlider.find('.twentytwenty-before-label').attr('data-content'),
137
- $wsSlider.find('.twentytwenty-after-label').attr('data-content'));
138
- // log if $wsSlider exists
139
- console.log('Slider element exists:', $wsSlider.length > 0);
140
  }
141
 
142
  // Function to update images
@@ -149,46 +117,30 @@ $(document).ready(function() {
149
 
150
  // Preload all images we will use, then swap and (re)initialize slider.
151
  const leftUrl = sceneData.target;
152
- const stereospaceUrl = sceneData.stereospace;
153
- const baselineUrl = sceneData[model];
154
 
155
  // show light loading state if you have CSS for it
156
- $('#ws-teaser_subfigures-container').addClass('ws-loading');
157
 
158
  Promise.all([
159
  wsPreloadImage(leftUrl),
160
- wsPreloadImage(stereospaceUrl),
161
- wsPreloadImage(baselineUrl),
162
  ]).then(() => {
163
- // swap sources only after loaded
164
  $('#ws-image-left').attr('src', leftUrl);
165
- $('#ws-image-stereospace').attr('src', stereospaceUrl);
166
- $('#ws-image-baseline').attr('src', baselineUrl);
167
 
168
  const modelLabel = WS_MODEL_LABELS[model] || model;
169
- // log sliderInitialized
170
- // destroy only if already initialized
171
- // if (sliderInitialized) {
172
- // $('#ws-teaser_subfigures-slider').trigger('destroy');
173
- // sliderInitialized = false;
174
- // }
175
- // small delay to allow browser layout, then init
176
  setTimeout(() => {
177
- // initSlider(modelLabel);
178
- // if the plugin was already initialized and you prefer updating labels instead of reinit:
179
- wsSetSliderLabels('StereoSpace', modelLabel);
180
- $('#ws-teaser_subfigures-container').removeClass('ws-loading');
181
  }, 60);
182
  }).catch((err) => {
183
  console.warn('Image preload failed:', err);
184
- // fallback: swap anyway and try init
185
  $('#ws-image-left').attr('src', leftUrl);
186
- $('#ws-image-stereospace').attr('src', stereospaceUrl);
187
- $('#ws-image-baseline').attr('src', baselineUrl);
188
- if (sliderInitialized) $('#ws-teaser_subfigures-slider').trigger('destroy');
189
- // setTimeout(initSlider, 100);
190
- wsSetSliderLabels('StereoSpace', modelLabel);
191
- $('#ws-teaser_subfigures-container').removeClass('ws-loading');
192
  });
193
  }
194
 
@@ -212,18 +164,4 @@ $(document).ready(function() {
212
 
213
  // Initialize with default scene and model
214
  updateImages(currentScene, currentModel);
215
-
216
- // Remove or comment out hotspot code:
217
- /*
218
- // Hotspot toggle
219
- let hotspotsVisible = false;
220
- $('#ws-hotspots-toggle').on('click', function() {
221
- hotspotsVisible = !hotspotsVisible;
222
- if (hotspotsVisible) {
223
- wsRenderHotspots();
224
- } else {
225
- $('#ws-hotspots-layer').empty();
226
- }
227
- });
228
- */
229
  });
 
30
  // Scene-based image mapping
31
  const WS_SCENE_IMAGES = {
32
  215: {
33
+ target: '/images/teaser_subfigures/215/tgt.png',
34
  stereospace: '/images/teaser_subfigures/215/stereospace.png',
35
  lyra: '/images/teaser_subfigures/215/lyra.png',
36
  genstereo: '/images/teaser_subfigures/215/genstereo.png',
 
38
  zerostereo: '/images/teaser_subfigures/215/zerostereo.png',
39
  },
40
  249: {
41
+ target: '/images/teaser_subfigures/249/tgt.png',
42
  stereospace: '/images/teaser_subfigures/249/stereospace.png',
43
+ lyra: '/images/teaser_subfigures/249/lyra.png',
44
  genstereo: '/images/teaser_subfigures/249/genstereo.png',
45
  stereodiffusion: '/images/teaser_subfigures/249/stereodiffusion.png',
46
  zerostereo: '/images/teaser_subfigures/249/zerostereo.png',
47
  },
48
  252: {
49
+ target: '/images/teaser_subfigures/252/tgt.png',
50
  stereospace: '/images/teaser_subfigures/252/stereospace.png',
51
+ lyra: '/images/teaser_subfigures/252/lyra.png',
52
  genstereo: '/images/teaser_subfigures/252/genstereo.png',
53
  stereodiffusion: '/images/teaser_subfigures/252/stereodiffusion.png',
54
  zerostereo: '/images/teaser_subfigures/252/zerostereo.png',
55
  },
56
  285: {
57
+ target: '/images/teaser_subfigures/285/tgt.png',
58
  stereospace: '/images/teaser_subfigures/285/stereospace.png',
59
+ lyra: '/images/teaser_subfigures/285/lyra.png',
60
  genstereo: '/images/teaser_subfigures/285/genstereo.png',
61
  stereodiffusion: '/images/teaser_subfigures/285/stereodiffusion.png',
62
  zerostereo: '/images/teaser_subfigures/285/zerostereo.png',
63
  },
64
  297: {
65
+ target: '/images/teaser_subfigures/297/tgt.png',
66
  stereospace: '/images/teaser_subfigures/297/stereospace.png',
67
+ lyra: '/images/teaser_subfigures/297/lyra.png',
68
  genstereo: '/images/teaser_subfigures/297/genstereo.png',
69
  stereodiffusion: '/images/teaser_subfigures/297/stereodiffusion.png',
70
  zerostereo: '/images/teaser_subfigures/297/zerostereo.png',
71
  },
72
  };
73
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  $(document).ready(function() {
75
  // Initialize state
76
  let currentScene = '215';
 
79
 
80
  // map model keys -> readable label shown on the slider
81
  const WS_MODEL_LABELS = {
82
+ src: 'Input',
 
83
  tgt: 'Ground Truth',
84
+ stereospace: 'StereoSpace (ours)',
85
  genstereo: 'GenStereo',
86
  lyra: 'Lyra',
87
  stereodiffusion: 'StereoDiffusion',
 
101
  });
102
  }
103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  // Update labels on an already-initialized twentytwenty instance
105
  function wsSetSliderLabels(beforeLabel, afterLabel) {
106
+ $('#ws-comparison-slider .twentytwenty-before-label').attr('data-content', beforeLabel);
107
+ $('#ws-comparison-slider .twentytwenty-after-label').attr('data-content', afterLabel);
 
 
 
 
 
 
108
  }
109
 
110
  // Function to update images
 
117
 
118
  // Preload all images we will use, then swap and (re)initialize slider.
119
  const leftUrl = sceneData.target;
120
+ const rightUrl = sceneData[model];
 
121
 
122
  // show light loading state if you have CSS for it
123
+ $('#ws-comparison-container').addClass('ws-loading');
124
 
125
  Promise.all([
126
  wsPreloadImage(leftUrl),
127
+ wsPreloadImage(rightUrl),
 
128
  ]).then(() => {
 
129
  $('#ws-image-left').attr('src', leftUrl);
130
+ $('#ws-image-right').attr('src', rightUrl);
 
131
 
132
  const modelLabel = WS_MODEL_LABELS[model] || model;
 
 
 
 
 
 
 
133
  setTimeout(() => {
134
+ wsSetSliderLabels('Ground Truth', modelLabel);
135
+ $('#ws-comparison-container').removeClass('ws-loading');
 
 
136
  }, 60);
137
  }).catch((err) => {
138
  console.warn('Image preload failed:', err);
 
139
  $('#ws-image-left').attr('src', leftUrl);
140
+ $('#ws-image-right').attr('src', rightUrl);
141
+ if (sliderInitialized) $('#ws-comparison-slider').trigger('destroy');
142
+ wsSetSliderLabels('Ground Truth', modelLabel);
143
+ $('#ws-comparison-container').removeClass('ws-loading');
 
 
144
  });
145
  }
146
 
 
164
 
165
  // Initialize with default scene and model
166
  updateImages(currentScene, currentModel);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  });