Spaces:
Running
Running
thibaud frere
commited on
Commit
·
281e5ea
1
Parent(s):
4da5277
fix chart responsiveness
Browse files- app/src/content/embeds/against-baselines-deduplicated.html +26 -1
- app/src/content/embeds/against-baselines.html +26 -1
- app/src/content/embeds/all-ratings.html +40 -1
- app/src/content/embeds/filters-quad.html +42 -0
- app/src/content/embeds/formatting-filters.html +26 -1
- app/src/content/embeds/image-correspondence-filters.html +40 -1
- app/src/content/embeds/internal-deduplication.html +26 -1
- app/src/content/embeds/relevance-filters.html +40 -1
- app/src/content/embeds/remove-ch.html +40 -1
- app/src/content/embeds/s25-ratings.html +26 -1
- app/src/content/embeds/ss-vs-s1.html +40 -1
- app/src/content/embeds/visual-dependency-filters.html +26 -1
app/src/content/embeds/against-baselines-deduplicated.html
CHANGED
@@ -330,6 +330,20 @@
|
|
330 |
}
|
331 |
} catch {}
|
332 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
333 |
// Update clip rect to match inner plotting area with padding so
|
334 |
// first/last markers are not clipped at the edges
|
335 |
const clipPad = Math.max(6, Math.ceil(markerSize * 2));
|
@@ -368,6 +382,16 @@
|
|
368 |
// Axes
|
369 |
gAxes.selectAll('*').remove();
|
370 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
371 |
if (isRankStrictFlag) {
|
372 |
const [dx0, dx1] = xScale.domain();
|
373 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -375,9 +399,10 @@
|
|
375 |
const xTicks = [];
|
376 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
377 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
378 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
379 |
} else {
|
380 |
xAxis = xAxis.ticks(8);
|
|
|
381 |
}
|
382 |
const yAxis = d3.axisLeft(yScale)
|
383 |
.tickValues(yTicks)
|
|
|
330 |
}
|
331 |
} catch {}
|
332 |
|
333 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
334 |
+
try {
|
335 |
+
const isMobile = width < 640;
|
336 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
337 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
338 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
339 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
340 |
+
if (legendInline && legendInline.style) {
|
341 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
342 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
343 |
+
}
|
344 |
+
}
|
345 |
+
} catch {}
|
346 |
+
|
347 |
// Update clip rect to match inner plotting area with padding so
|
348 |
// first/last markers are not clipped at the edges
|
349 |
const clipPad = Math.max(6, Math.ceil(markerSize * 2));
|
|
|
382 |
// Axes
|
383 |
gAxes.selectAll('*').remove();
|
384 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
385 |
+
const isMobileTicks = width < 640;
|
386 |
+
const tfMobile = (d) => {
|
387 |
+
const abs = Math.abs(d);
|
388 |
+
if (abs >= 1000) {
|
389 |
+
const v = d / 1000;
|
390 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
391 |
+
return out + 'k';
|
392 |
+
}
|
393 |
+
return d3.format('d')(d);
|
394 |
+
};
|
395 |
if (isRankStrictFlag) {
|
396 |
const [dx0, dx1] = xScale.domain();
|
397 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
399 |
const xTicks = [];
|
400 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
401 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
402 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
403 |
} else {
|
404 |
xAxis = xAxis.ticks(8);
|
405 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
406 |
}
|
407 |
const yAxis = d3.axisLeft(yScale)
|
408 |
.tickValues(yTicks)
|
app/src/content/embeds/against-baselines.html
CHANGED
@@ -328,6 +328,20 @@
|
|
328 |
}
|
329 |
} catch {}
|
330 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
331 |
xScale.range([0, innerWidth]);
|
332 |
yScale.range([innerHeight, 0]);
|
333 |
|
@@ -365,6 +379,16 @@
|
|
365 |
// Axes
|
366 |
gAxes.selectAll('*').remove();
|
367 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
368 |
if (isRankStrictFlag) {
|
369 |
const [dx0, dx1] = xScale.domain();
|
370 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -372,9 +396,10 @@
|
|
372 |
const xTicks = [];
|
373 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
374 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
375 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
376 |
} else {
|
377 |
xAxis = xAxis.ticks(8);
|
|
|
378 |
}
|
379 |
const yAxis = d3.axisLeft(yScale)
|
380 |
.tickValues(yTicks)
|
|
|
328 |
}
|
329 |
} catch {}
|
330 |
|
331 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
332 |
+
try {
|
333 |
+
const isMobile = width < 640;
|
334 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
335 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
336 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
337 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
338 |
+
if (legendInline && legendInline.style) {
|
339 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
340 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
341 |
+
}
|
342 |
+
}
|
343 |
+
} catch {}
|
344 |
+
|
345 |
xScale.range([0, innerWidth]);
|
346 |
yScale.range([innerHeight, 0]);
|
347 |
|
|
|
379 |
// Axes
|
380 |
gAxes.selectAll('*').remove();
|
381 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
382 |
+
const isMobileTicks = width < 640;
|
383 |
+
const tfMobile = (d) => {
|
384 |
+
const abs = Math.abs(d);
|
385 |
+
if (abs >= 1000) {
|
386 |
+
const v = d / 1000;
|
387 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
388 |
+
return out + 'k';
|
389 |
+
}
|
390 |
+
return d3.format('d')(d);
|
391 |
+
};
|
392 |
if (isRankStrictFlag) {
|
393 |
const [dx0, dx1] = xScale.domain();
|
394 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
396 |
const xTicks = [];
|
397 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
398 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
399 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
400 |
} else {
|
401 |
xAxis = xAxis.ticks(8);
|
402 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
403 |
}
|
404 |
const yAxis = d3.axisLeft(yScale)
|
405 |
.tickValues(yTicks)
|
app/src/content/embeds/all-ratings.html
CHANGED
@@ -318,6 +318,20 @@
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
321 |
xScale.range([0, innerWidth]);
|
322 |
yScale.range([innerHeight, 0]);
|
323 |
|
@@ -347,6 +361,16 @@
|
|
347 |
// Axes
|
348 |
gAxes.selectAll('*').remove();
|
349 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
if (isRankStrictFlag) {
|
351 |
const [dx0, dx1] = xScale.domain();
|
352 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -354,9 +378,10 @@
|
|
354 |
const xTicks = [];
|
355 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
356 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
357 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
358 |
} else {
|
359 |
xAxis = xAxis.ticks(8);
|
|
|
360 |
}
|
361 |
const yAxis = d3.axisLeft(yScale)
|
362 |
.tickValues(yTicks)
|
@@ -415,6 +440,20 @@
|
|
415 |
color: 'var(--text-color)'
|
416 |
});
|
417 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
418 |
return { innerWidth, innerHeight };
|
419 |
}
|
420 |
|
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
321 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
322 |
+
try {
|
323 |
+
const isMobile = width < 640;
|
324 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
325 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
326 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
327 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
328 |
+
if (legendInline && legendInline.style) {
|
329 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
330 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
331 |
+
}
|
332 |
+
}
|
333 |
+
} catch {}
|
334 |
+
|
335 |
xScale.range([0, innerWidth]);
|
336 |
yScale.range([innerHeight, 0]);
|
337 |
|
|
|
361 |
// Axes
|
362 |
gAxes.selectAll('*').remove();
|
363 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
364 |
+
const isMobileTicks = width < 640;
|
365 |
+
const tfMobile = (d) => {
|
366 |
+
const abs = Math.abs(d);
|
367 |
+
if (abs >= 1000) {
|
368 |
+
const v = d / 1000;
|
369 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
370 |
+
return out + 'k';
|
371 |
+
}
|
372 |
+
return d3.format('d')(d);
|
373 |
+
};
|
374 |
if (isRankStrictFlag) {
|
375 |
const [dx0, dx1] = xScale.domain();
|
376 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
378 |
const xTicks = [];
|
379 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
380 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
381 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
382 |
} else {
|
383 |
xAxis = xAxis.ticks(8);
|
384 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
385 |
}
|
386 |
const yAxis = d3.axisLeft(yScale)
|
387 |
.tickValues(yTicks)
|
|
|
440 |
color: 'var(--text-color)'
|
441 |
});
|
442 |
|
443 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
444 |
+
try {
|
445 |
+
const isMobile = width < 640;
|
446 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
447 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
448 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
449 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
450 |
+
if (legendInline && legendInline.style) {
|
451 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
452 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
453 |
+
}
|
454 |
+
}
|
455 |
+
} catch {}
|
456 |
+
|
457 |
return { innerWidth, innerHeight };
|
458 |
}
|
459 |
|
app/src/content/embeds/filters-quad.html
CHANGED
@@ -202,6 +202,18 @@
|
|
202 |
// Axes
|
203 |
gAxes.selectAll('*').remove();
|
204 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0); xAxis = xAxis.ticks(8);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
const yAxis = d3.axisLeft(yScale).tickValues(yTicks).tickSizeOuter(0).tickFormat(isRankStrictFlag ? d3.format('d') : d3.format('.2f'));
|
206 |
gAxes.append('g').attr('transform', `translate(0,${innerHeight})`).call(xAxis).call(g=>{ g.selectAll('path, line').attr('stroke',axisColor); g.selectAll('text').attr('fill',tickColor).style('font-size','11px'); });
|
207 |
gAxes.append('g').call(yAxis).call(g=>{ g.selectAll('path, line').attr('stroke',axisColor); g.selectAll('text').attr('fill',tickColor).style('font-size','11px'); });
|
@@ -452,6 +464,36 @@
|
|
452 |
}
|
453 |
} catch {}
|
454 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
455 |
})();
|
456 |
};
|
457 |
|
|
|
202 |
// Axes
|
203 |
gAxes.selectAll('*').remove();
|
204 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0); xAxis = xAxis.ticks(8);
|
205 |
+
// Mobile tick formatter: 2k/2.5k instead of 2,000
|
206 |
+
const isMobileTicks = width < 640;
|
207 |
+
const tfMobile = (d) => {
|
208 |
+
const abs = Math.abs(d);
|
209 |
+
if (abs >= 1000) {
|
210 |
+
const v = d / 1000;
|
211 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
212 |
+
return out + 'k';
|
213 |
+
}
|
214 |
+
return d3.format('d')(d);
|
215 |
+
};
|
216 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
217 |
const yAxis = d3.axisLeft(yScale).tickValues(yTicks).tickSizeOuter(0).tickFormat(isRankStrictFlag ? d3.format('d') : d3.format('.2f'));
|
218 |
gAxes.append('g').attr('transform', `translate(0,${innerHeight})`).call(xAxis).call(g=>{ g.selectAll('path, line').attr('stroke',axisColor); g.selectAll('text').attr('fill',tickColor).style('font-size','11px'); });
|
219 |
gAxes.append('g').call(yAxis).call(g=>{ g.selectAll('path, line').attr('stroke',axisColor); g.selectAll('text').attr('fill',tickColor).style('font-size','11px'); });
|
|
|
464 |
}
|
465 |
} catch {}
|
466 |
}
|
467 |
+
|
468 |
+
// Mobile layout: legend above controls and full-width stacks
|
469 |
+
function adjustGlobalLayout(){
|
470 |
+
try {
|
471 |
+
const rect = host.getBoundingClientRect();
|
472 |
+
const isMobile = rect && rect.width < 640;
|
473 |
+
const ctrl = host.querySelector('.filters-quad__controls');
|
474 |
+
const legend = host.querySelector('.filters-quad__legend');
|
475 |
+
if (!ctrl || !legend) return;
|
476 |
+
if (isMobile) {
|
477 |
+
if (legend.nextElementSibling !== ctrl) {
|
478 |
+
host.insertBefore(legend, ctrl);
|
479 |
+
}
|
480 |
+
ctrl.style.justifyContent = 'flex-start';
|
481 |
+
legend.style.justifyContent = 'flex-start';
|
482 |
+
ctrl.style.width = '100%';
|
483 |
+
legend.style.width = '100%';
|
484 |
+
} else {
|
485 |
+
if (ctrl.nextElementSibling !== legend) {
|
486 |
+
host.insertBefore(ctrl, legend);
|
487 |
+
}
|
488 |
+
ctrl.style.justifyContent = '';
|
489 |
+
legend.style.justifyContent = '';
|
490 |
+
ctrl.style.width = '';
|
491 |
+
legend.style.width = '';
|
492 |
+
}
|
493 |
+
} catch {}
|
494 |
+
}
|
495 |
+
adjustGlobalLayout();
|
496 |
+
if (window.ResizeObserver) { const ro = new ResizeObserver(()=>adjustGlobalLayout()); ro.observe(host); }
|
497 |
})();
|
498 |
};
|
499 |
|
app/src/content/embeds/formatting-filters.html
CHANGED
@@ -318,6 +318,20 @@
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
321 |
xScale.range([0, innerWidth]);
|
322 |
yScale.range([innerHeight, 0]);
|
323 |
|
@@ -347,6 +361,16 @@
|
|
347 |
// Axes
|
348 |
gAxes.selectAll('*').remove();
|
349 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
if (isRankStrictFlag) {
|
351 |
const [dx0, dx1] = xScale.domain();
|
352 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -354,9 +378,10 @@
|
|
354 |
const xTicks = [];
|
355 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
356 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
357 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
358 |
} else {
|
359 |
xAxis = xAxis.ticks(8);
|
|
|
360 |
}
|
361 |
const yAxis = d3.axisLeft(yScale)
|
362 |
.tickValues(yTicks)
|
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
321 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
322 |
+
try {
|
323 |
+
const isMobile = width < 640;
|
324 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
325 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
326 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
327 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
328 |
+
if (legendInline && legendInline.style) {
|
329 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
330 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
331 |
+
}
|
332 |
+
}
|
333 |
+
} catch {}
|
334 |
+
|
335 |
xScale.range([0, innerWidth]);
|
336 |
yScale.range([innerHeight, 0]);
|
337 |
|
|
|
361 |
// Axes
|
362 |
gAxes.selectAll('*').remove();
|
363 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
364 |
+
const isMobileTicks = width < 640;
|
365 |
+
const tfMobile = (d) => {
|
366 |
+
const abs = Math.abs(d);
|
367 |
+
if (abs >= 1000) {
|
368 |
+
const v = d / 1000;
|
369 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
370 |
+
return out + 'k';
|
371 |
+
}
|
372 |
+
return d3.format('d')(d);
|
373 |
+
};
|
374 |
if (isRankStrictFlag) {
|
375 |
const [dx0, dx1] = xScale.domain();
|
376 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
378 |
const xTicks = [];
|
379 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
380 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
381 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
382 |
} else {
|
383 |
xAxis = xAxis.ticks(8);
|
384 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
385 |
}
|
386 |
const yAxis = d3.axisLeft(yScale)
|
387 |
.tickValues(yTicks)
|
app/src/content/embeds/image-correspondence-filters.html
CHANGED
@@ -318,6 +318,20 @@
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
321 |
xScale.range([0, innerWidth]);
|
322 |
yScale.range([innerHeight, 0]);
|
323 |
|
@@ -347,6 +361,16 @@
|
|
347 |
// Axes
|
348 |
gAxes.selectAll('*').remove();
|
349 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
if (isRankStrictFlag) {
|
351 |
const [dx0, dx1] = xScale.domain();
|
352 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -354,9 +378,10 @@
|
|
354 |
const xTicks = [];
|
355 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
356 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
357 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
358 |
} else {
|
359 |
xAxis = xAxis.ticks(8);
|
|
|
360 |
}
|
361 |
const yAxis = d3.axisLeft(yScale)
|
362 |
.tickValues(yTicks)
|
@@ -415,6 +440,20 @@
|
|
415 |
color: 'var(--text-color)'
|
416 |
});
|
417 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
418 |
return { innerWidth, innerHeight };
|
419 |
}
|
420 |
|
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
321 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
322 |
+
try {
|
323 |
+
const isMobile = width < 640;
|
324 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
325 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
326 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
327 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
328 |
+
if (legendInline && legendInline.style) {
|
329 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
330 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
331 |
+
}
|
332 |
+
}
|
333 |
+
} catch {}
|
334 |
+
|
335 |
xScale.range([0, innerWidth]);
|
336 |
yScale.range([innerHeight, 0]);
|
337 |
|
|
|
361 |
// Axes
|
362 |
gAxes.selectAll('*').remove();
|
363 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
364 |
+
const isMobileTicks = width < 640;
|
365 |
+
const tfMobile = (d) => {
|
366 |
+
const abs = Math.abs(d);
|
367 |
+
if (abs >= 1000) {
|
368 |
+
const v = d / 1000;
|
369 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
370 |
+
return out + 'k';
|
371 |
+
}
|
372 |
+
return d3.format('d')(d);
|
373 |
+
};
|
374 |
if (isRankStrictFlag) {
|
375 |
const [dx0, dx1] = xScale.domain();
|
376 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
378 |
const xTicks = [];
|
379 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
380 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
381 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
382 |
} else {
|
383 |
xAxis = xAxis.ticks(8);
|
384 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
385 |
}
|
386 |
const yAxis = d3.axisLeft(yScale)
|
387 |
.tickValues(yTicks)
|
|
|
440 |
color: 'var(--text-color)'
|
441 |
});
|
442 |
|
443 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
444 |
+
try {
|
445 |
+
const isMobile = width < 640;
|
446 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
447 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
448 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
449 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
450 |
+
if (legendInline && legendInline.style) {
|
451 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
452 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
453 |
+
}
|
454 |
+
}
|
455 |
+
} catch {}
|
456 |
+
|
457 |
return { innerWidth, innerHeight };
|
458 |
}
|
459 |
|
app/src/content/embeds/internal-deduplication.html
CHANGED
@@ -360,6 +360,16 @@
|
|
360 |
// Axes
|
361 |
gAxes.selectAll('*').remove();
|
362 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
363 |
if (isRankStrictFlag) {
|
364 |
const [dx0, dx1] = xScale.domain();
|
365 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -367,9 +377,10 @@
|
|
367 |
const xTicks = [];
|
368 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
369 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
370 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
371 |
} else {
|
372 |
xAxis = xAxis.ticks(8);
|
|
|
373 |
}
|
374 |
const yAxis = d3.axisLeft(yScale)
|
375 |
.tickValues(yTicks)
|
@@ -428,6 +439,20 @@
|
|
428 |
color: 'var(--text-color)'
|
429 |
});
|
430 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
431 |
return { innerWidth, innerHeight };
|
432 |
}
|
433 |
|
|
|
360 |
// Axes
|
361 |
gAxes.selectAll('*').remove();
|
362 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
363 |
+
const isMobileTicks = width < 640;
|
364 |
+
const tfMobile = (d) => {
|
365 |
+
const abs = Math.abs(d);
|
366 |
+
if (abs >= 1000) {
|
367 |
+
const v = d / 1000;
|
368 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
369 |
+
return out + 'k';
|
370 |
+
}
|
371 |
+
return d3.format('d')(d);
|
372 |
+
};
|
373 |
if (isRankStrictFlag) {
|
374 |
const [dx0, dx1] = xScale.domain();
|
375 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
377 |
const xTicks = [];
|
378 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
379 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
380 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
381 |
} else {
|
382 |
xAxis = xAxis.ticks(8);
|
383 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
384 |
}
|
385 |
const yAxis = d3.axisLeft(yScale)
|
386 |
.tickValues(yTicks)
|
|
|
439 |
color: 'var(--text-color)'
|
440 |
});
|
441 |
|
442 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
443 |
+
try {
|
444 |
+
const isMobile = width < 640;
|
445 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
446 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
447 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
448 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
449 |
+
if (legendInline && legendInline.style) {
|
450 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
451 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
452 |
+
}
|
453 |
+
}
|
454 |
+
} catch {}
|
455 |
+
|
456 |
return { innerWidth, innerHeight };
|
457 |
}
|
458 |
|
app/src/content/embeds/relevance-filters.html
CHANGED
@@ -318,6 +318,20 @@
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
321 |
xScale.range([0, innerWidth]);
|
322 |
yScale.range([innerHeight, 0]);
|
323 |
|
@@ -347,6 +361,16 @@
|
|
347 |
// Axes
|
348 |
gAxes.selectAll('*').remove();
|
349 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
if (isRankStrictFlag) {
|
351 |
const [dx0, dx1] = xScale.domain();
|
352 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -354,9 +378,10 @@
|
|
354 |
const xTicks = [];
|
355 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
356 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
357 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
358 |
} else {
|
359 |
xAxis = xAxis.ticks(8);
|
|
|
360 |
}
|
361 |
const yAxis = d3.axisLeft(yScale)
|
362 |
.tickValues(yTicks)
|
@@ -415,6 +440,20 @@
|
|
415 |
color: 'var(--text-color)'
|
416 |
});
|
417 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
418 |
return { innerWidth, innerHeight };
|
419 |
}
|
420 |
|
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
321 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
322 |
+
try {
|
323 |
+
const isMobile = width < 640;
|
324 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
325 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
326 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
327 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
328 |
+
if (legendInline && legendInline.style) {
|
329 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
330 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
331 |
+
}
|
332 |
+
}
|
333 |
+
} catch {}
|
334 |
+
|
335 |
xScale.range([0, innerWidth]);
|
336 |
yScale.range([innerHeight, 0]);
|
337 |
|
|
|
361 |
// Axes
|
362 |
gAxes.selectAll('*').remove();
|
363 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
364 |
+
const isMobileTicks = width < 640;
|
365 |
+
const tfMobile = (d) => {
|
366 |
+
const abs = Math.abs(d);
|
367 |
+
if (abs >= 1000) {
|
368 |
+
const v = d / 1000;
|
369 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
370 |
+
return out + 'k';
|
371 |
+
}
|
372 |
+
return d3.format('d')(d);
|
373 |
+
};
|
374 |
if (isRankStrictFlag) {
|
375 |
const [dx0, dx1] = xScale.domain();
|
376 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
378 |
const xTicks = [];
|
379 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
380 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
381 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
382 |
} else {
|
383 |
xAxis = xAxis.ticks(8);
|
384 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
385 |
}
|
386 |
const yAxis = d3.axisLeft(yScale)
|
387 |
.tickValues(yTicks)
|
|
|
440 |
color: 'var(--text-color)'
|
441 |
});
|
442 |
|
443 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
444 |
+
try {
|
445 |
+
const isMobile = width < 640;
|
446 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
447 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
448 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
449 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
450 |
+
if (legendInline && legendInline.style) {
|
451 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
452 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
453 |
+
}
|
454 |
+
}
|
455 |
+
} catch {}
|
456 |
+
|
457 |
return { innerWidth, innerHeight };
|
458 |
}
|
459 |
|
app/src/content/embeds/remove-ch.html
CHANGED
@@ -321,6 +321,20 @@
|
|
321 |
}
|
322 |
} catch {}
|
323 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
324 |
xScale.range([0, innerWidth]);
|
325 |
yScale.range([innerHeight, 0]);
|
326 |
|
@@ -350,6 +364,16 @@
|
|
350 |
// Axes
|
351 |
gAxes.selectAll('*').remove();
|
352 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
353 |
if (isRankStrictFlag) {
|
354 |
const [dx0, dx1] = xScale.domain();
|
355 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -357,9 +381,10 @@
|
|
357 |
const xTicks = [];
|
358 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
359 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
360 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
361 |
} else {
|
362 |
xAxis = xAxis.ticks(8);
|
|
|
363 |
}
|
364 |
const yAxis = d3.axisLeft(yScale)
|
365 |
.tickValues(yTicks)
|
@@ -418,6 +443,20 @@
|
|
418 |
color: 'var(--text-color)'
|
419 |
});
|
420 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
421 |
return { innerWidth, innerHeight };
|
422 |
}
|
423 |
|
|
|
321 |
}
|
322 |
} catch {}
|
323 |
|
324 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
325 |
+
try {
|
326 |
+
const isMobile = width < 640;
|
327 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
328 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
329 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
330 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
331 |
+
if (legendInline && legendInline.style) {
|
332 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
333 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
334 |
+
}
|
335 |
+
}
|
336 |
+
} catch {}
|
337 |
+
|
338 |
xScale.range([0, innerWidth]);
|
339 |
yScale.range([innerHeight, 0]);
|
340 |
|
|
|
364 |
// Axes
|
365 |
gAxes.selectAll('*').remove();
|
366 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
367 |
+
const isMobileTicks = width < 640;
|
368 |
+
const tfMobile = (d) => {
|
369 |
+
const abs = Math.abs(d);
|
370 |
+
if (abs >= 1000) {
|
371 |
+
const v = d / 1000;
|
372 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
373 |
+
return out + 'k';
|
374 |
+
}
|
375 |
+
return d3.format('d')(d);
|
376 |
+
};
|
377 |
if (isRankStrictFlag) {
|
378 |
const [dx0, dx1] = xScale.domain();
|
379 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
381 |
const xTicks = [];
|
382 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
383 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
384 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
385 |
} else {
|
386 |
xAxis = xAxis.ticks(8);
|
387 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
388 |
}
|
389 |
const yAxis = d3.axisLeft(yScale)
|
390 |
.tickValues(yTicks)
|
|
|
443 |
color: 'var(--text-color)'
|
444 |
});
|
445 |
|
446 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
447 |
+
try {
|
448 |
+
const isMobile = width < 640;
|
449 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
450 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
451 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
452 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
453 |
+
if (legendInline && legendInline.style) {
|
454 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
455 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
456 |
+
}
|
457 |
+
}
|
458 |
+
} catch {}
|
459 |
+
|
460 |
return { innerWidth, innerHeight };
|
461 |
}
|
462 |
|
app/src/content/embeds/s25-ratings.html
CHANGED
@@ -347,6 +347,16 @@
|
|
347 |
// Axes
|
348 |
gAxes.selectAll('*').remove();
|
349 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
if (isRankStrictFlag) {
|
351 |
const [dx0, dx1] = xScale.domain();
|
352 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -354,9 +364,10 @@
|
|
354 |
const xTicks = [];
|
355 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
356 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
357 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
358 |
} else {
|
359 |
xAxis = xAxis.ticks(8);
|
|
|
360 |
}
|
361 |
const yAxis = d3.axisLeft(yScale)
|
362 |
.tickValues(yTicks)
|
@@ -376,6 +387,20 @@
|
|
376 |
g.selectAll('text').attr('fill', tickColor).style('font-size', '12px');
|
377 |
});
|
378 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
379 |
// Axis labels (X and Y)
|
380 |
gAxes.append('text')
|
381 |
.attr('class', 'axis-label axis-label--x')
|
|
|
347 |
// Axes
|
348 |
gAxes.selectAll('*').remove();
|
349 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
350 |
+
const isMobileTicks = width < 640;
|
351 |
+
const tfMobile = (d) => {
|
352 |
+
const abs = Math.abs(d);
|
353 |
+
if (abs >= 1000) {
|
354 |
+
const v = d / 1000;
|
355 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
356 |
+
return out + 'k';
|
357 |
+
}
|
358 |
+
return d3.format('d')(d);
|
359 |
+
};
|
360 |
if (isRankStrictFlag) {
|
361 |
const [dx0, dx1] = xScale.domain();
|
362 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
364 |
const xTicks = [];
|
365 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
366 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
367 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
368 |
} else {
|
369 |
xAxis = xAxis.ticks(8);
|
370 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
371 |
}
|
372 |
const yAxis = d3.axisLeft(yScale)
|
373 |
.tickValues(yTicks)
|
|
|
387 |
g.selectAll('text').attr('fill', tickColor).style('font-size', '12px');
|
388 |
});
|
389 |
|
390 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
391 |
+
try {
|
392 |
+
const isMobile = width < 640;
|
393 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
394 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
395 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
396 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
397 |
+
if (legendInline && legendInline.style) {
|
398 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
399 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
400 |
+
}
|
401 |
+
}
|
402 |
+
} catch {}
|
403 |
+
|
404 |
// Axis labels (X and Y)
|
405 |
gAxes.append('text')
|
406 |
.attr('class', 'axis-label axis-label--x')
|
app/src/content/embeds/ss-vs-s1.html
CHANGED
@@ -318,6 +318,20 @@
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
321 |
xScale.range([0, innerWidth]);
|
322 |
yScale.range([innerHeight, 0]);
|
323 |
|
@@ -347,6 +361,16 @@
|
|
347 |
// Axes
|
348 |
gAxes.selectAll('*').remove();
|
349 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
if (isRankStrictFlag) {
|
351 |
const [dx0, dx1] = xScale.domain();
|
352 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -354,9 +378,10 @@
|
|
354 |
const xTicks = [];
|
355 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
356 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
357 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
358 |
} else {
|
359 |
xAxis = xAxis.ticks(8);
|
|
|
360 |
}
|
361 |
const yAxis = d3.axisLeft(yScale)
|
362 |
.tickValues(yTicks)
|
@@ -415,6 +440,20 @@
|
|
415 |
color: 'var(--text-color)'
|
416 |
});
|
417 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
418 |
return { innerWidth, innerHeight };
|
419 |
}
|
420 |
|
|
|
318 |
}
|
319 |
} catch {}
|
320 |
|
321 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
322 |
+
try {
|
323 |
+
const isMobile = width < 640;
|
324 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
325 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
326 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
327 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
328 |
+
if (legendInline && legendInline.style) {
|
329 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
330 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
331 |
+
}
|
332 |
+
}
|
333 |
+
} catch {}
|
334 |
+
|
335 |
xScale.range([0, innerWidth]);
|
336 |
yScale.range([innerHeight, 0]);
|
337 |
|
|
|
361 |
// Axes
|
362 |
gAxes.selectAll('*').remove();
|
363 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
364 |
+
const isMobileTicks = width < 640;
|
365 |
+
const tfMobile = (d) => {
|
366 |
+
const abs = Math.abs(d);
|
367 |
+
if (abs >= 1000) {
|
368 |
+
const v = d / 1000;
|
369 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
370 |
+
return out + 'k';
|
371 |
+
}
|
372 |
+
return d3.format('d')(d);
|
373 |
+
};
|
374 |
if (isRankStrictFlag) {
|
375 |
const [dx0, dx1] = xScale.domain();
|
376 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
378 |
const xTicks = [];
|
379 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
380 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
381 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
382 |
} else {
|
383 |
xAxis = xAxis.ticks(8);
|
384 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
385 |
}
|
386 |
const yAxis = d3.axisLeft(yScale)
|
387 |
.tickValues(yTicks)
|
|
|
440 |
color: 'var(--text-color)'
|
441 |
});
|
442 |
|
443 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
444 |
+
try {
|
445 |
+
const isMobile = width < 640;
|
446 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
447 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
448 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
449 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
450 |
+
if (legendInline && legendInline.style) {
|
451 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
452 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
453 |
+
}
|
454 |
+
}
|
455 |
+
} catch {}
|
456 |
+
|
457 |
return { innerWidth, innerHeight };
|
458 |
}
|
459 |
|
app/src/content/embeds/visual-dependency-filters.html
CHANGED
@@ -360,6 +360,16 @@
|
|
360 |
// Axes
|
361 |
gAxes.selectAll('*').remove();
|
362 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
363 |
if (isRankStrictFlag) {
|
364 |
const [dx0, dx1] = xScale.domain();
|
365 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
@@ -367,9 +377,10 @@
|
|
367 |
const xTicks = [];
|
368 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
369 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
370 |
-
xAxis = xAxis.tickValues(xTicks).tickFormat(d3.format('d'));
|
371 |
} else {
|
372 |
xAxis = xAxis.ticks(8);
|
|
|
373 |
}
|
374 |
const yAxis = d3.axisLeft(yScale)
|
375 |
.tickValues(yTicks)
|
@@ -428,6 +439,20 @@
|
|
428 |
color: 'var(--text-color)'
|
429 |
});
|
430 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
431 |
return { innerWidth, innerHeight };
|
432 |
}
|
433 |
|
|
|
360 |
// Axes
|
361 |
gAxes.selectAll('*').remove();
|
362 |
let xAxis = d3.axisBottom(xScale).tickSizeOuter(0);
|
363 |
+
const isMobileTicks = width < 640;
|
364 |
+
const tfMobile = (d) => {
|
365 |
+
const abs = Math.abs(d);
|
366 |
+
if (abs >= 1000) {
|
367 |
+
const v = d / 1000;
|
368 |
+
const out = Math.abs(v) >= 10 ? Math.round(v) : +v.toFixed(1);
|
369 |
+
return out + 'k';
|
370 |
+
}
|
371 |
+
return d3.format('d')(d);
|
372 |
+
};
|
373 |
if (isRankStrictFlag) {
|
374 |
const [dx0, dx1] = xScale.domain();
|
375 |
const start = Math.ceil(dx0 / 1000) * 1000;
|
|
|
377 |
const xTicks = [];
|
378 |
for (let v = start; v <= end; v += 1000) xTicks.push(v);
|
379 |
if (xTicks.length === 0) xTicks.push(Math.round(dx0));
|
380 |
+
xAxis = xAxis.tickValues(xTicks).tickFormat(isMobileTicks ? tfMobile : d3.format('d'));
|
381 |
} else {
|
382 |
xAxis = xAxis.ticks(8);
|
383 |
+
if (isMobileTicks) xAxis = xAxis.tickFormat(tfMobile);
|
384 |
}
|
385 |
const yAxis = d3.axisLeft(yScale)
|
386 |
.tickValues(yTicks)
|
|
|
439 |
color: 'var(--text-color)'
|
440 |
});
|
441 |
|
442 |
+
// Mobile layout: stack legend above select, allow legend to take full width
|
443 |
+
try {
|
444 |
+
const isMobile = width < 640;
|
445 |
+
if (controls && controls.style && labelMetric && labelMetric.style) {
|
446 |
+
controls.style.flexDirection = isMobile ? 'column' : 'row';
|
447 |
+
controls.style.alignItems = isMobile ? 'flex-start' : 'center';
|
448 |
+
labelMetric.style.marginLeft = isMobile ? '0' : 'auto';
|
449 |
+
if (legendInline && legendInline.style) {
|
450 |
+
legendInline.style.width = isMobile ? '100%' : '';
|
451 |
+
legendInline.style.justifyContent = isMobile ? 'flex-start' : '';
|
452 |
+
}
|
453 |
+
}
|
454 |
+
} catch {}
|
455 |
+
|
456 |
return { innerWidth, innerHeight };
|
457 |
}
|
458 |
|