add optional legend flip to plots

This commit is contained in:
Christoph Kluge
2025-11-12 17:20:50 +01:00
parent f56783a439
commit 404be5f317
10 changed files with 37 additions and 13 deletions

View File

@@ -217,6 +217,7 @@
cluster={clusters.find((c) => c.name == cluster)} cluster={clusters.find((c) => c.name == cluster)}
subCluster={$nodeMetricsData.data.nodeMetrics[0].subCluster} subCluster={$nodeMetricsData.data.nodeMetrics[0].subCluster}
series={item.metric.series} series={item.metric.series}
enableFlip
forNode forNode
/> />
{:else if item.disabled === true && item.metric} {:else if item.disabled === true && item.metric}

View File

@@ -348,6 +348,7 @@
ylabel="Number of Jobs" ylabel="Number of Jobs"
yunit="Jobs" yunit="Jobs"
usesBins usesBins
enableFlip
/> />
{/snippet} {/snippet}

View File

@@ -271,9 +271,12 @@
function update(u) { function update(u) {
const { left, top } = u.cursor; const { left, top } = u.cursor;
const width = u?.over?.querySelector(".u-legend")?.offsetWidth ? u.over.querySelector(".u-legend").offsetWidth : 0; const internalWidth = u?.over?.querySelector(".u-legend")?.offsetWidth ? u.over.querySelector(".u-legend").offsetWidth : 0;
legendEl.style.transform = if (left < (width/2)) {
"translate(" + (left - width - 15) + "px, " + (top + 15) + "px)"; legendEl.style.transform = "translate(" + (left + 15) + "px, " + (top + 15) + "px)";
} else {
legendEl.style.transform = "translate(" + (left - internalWidth - 15) + "px, " + (top + 15) + "px)";
}
} }
return { return {

View File

@@ -34,6 +34,7 @@
xtime = false, xtime = false,
ylabel = "", ylabel = "",
yunit = "", yunit = "",
enableFlip = false,
} = $props(); } = $props();
/* Const Init */ /* Const Init */
@@ -117,8 +118,12 @@
function update(u) { function update(u) {
const { left, top } = u.cursor; const { left, top } = u.cursor;
legendEl.style.transform = const internalWidth = u?.over?.querySelector(".u-legend")?.offsetWidth ? u.over.querySelector(".u-legend").offsetWidth : 0;
"translate(" + (left + 15) + "px, " + (top + 15) + "px)"; if (enableFlip && (left < (width/2))) {
legendEl.style.transform = "translate(" + (left + 15) + "px, " + (top + 15) + "px)";
} else {
legendEl.style.transform = "translate(" + (left - internalWidth - 15) + "px, " + (top + 15) + "px)";
}
} }
return { return {

View File

@@ -49,6 +49,7 @@
thresholdState = null, thresholdState = null,
extendedLegendData = null, extendedLegendData = null,
plotSync = null, plotSync = null,
enableFlip = false,
onZoom onZoom
} = $props(); } = $props();
@@ -396,9 +397,12 @@
function update(u) { function update(u) {
const { left, top } = u.cursor; const { left, top } = u.cursor;
const width = u?.over?.querySelector(".u-legend")?.offsetWidth ? u.over.querySelector(".u-legend").offsetWidth : 0; const internalWidth = u?.over?.querySelector(".u-legend")?.offsetWidth ? u.over.querySelector(".u-legend").offsetWidth : 0;
legendEl.style.transform = if (enableFlip && (left < (width/2))) {
"translate(" + (left - width - 15) + "px, " + (top + 15) + "px)"; legendEl.style.transform = "translate(" + (left + 15) + "px, " + (top + 15) + "px)";
} else {
legendEl.style.transform = "translate(" + (left - internalWidth - 15) + "px, " + (top + 15) + "px)";
}
} }
if (dataSize <= 12 || useStatsSeries) { if (dataSize <= 12 || useStatsSeries) {

View File

@@ -271,9 +271,12 @@
function update(u) { function update(u) {
const { left, top } = u.cursor; const { left, top } = u.cursor;
const width = u?.over?.querySelector(".u-legend")?.offsetWidth ? u.over.querySelector(".u-legend").offsetWidth : 0; const internalWidth = u?.over?.querySelector(".u-legend")?.offsetWidth ? u.over.querySelector(".u-legend").offsetWidth : 0;
legendEl.style.transform = if (left < (width/2)) {
"translate(" + (left - width - 15) + "px, " + (top + 15) + "px)"; legendEl.style.transform = "translate(" + (left + 15) + "px, " + (top + 15) + "px)";
} else {
legendEl.style.transform = "translate(" + (left - internalWidth - 15) + "px, " + (top + 15) + "px)";
}
} }
return { return {

View File

@@ -185,6 +185,7 @@
{isShared} {isShared}
{zoomState} {zoomState}
{thresholdState} {thresholdState}
enableFlip
/> />
{:else if statsSeries[selectedScopeIndex] != null && patternMatches} {:else if statsSeries[selectedScopeIndex] != null && patternMatches}
<MetricPlot <MetricPlot
@@ -202,6 +203,7 @@
{thresholdState} {thresholdState}
statisticsSeries={statsSeries[selectedScopeIndex]} statisticsSeries={statsSeries[selectedScopeIndex]}
useStatsSeries={!!statsSeries[selectedScopeIndex]} useStatsSeries={!!statsSeries[selectedScopeIndex]}
enableFlip
/> />
{/if} {/if}
{/key} {/key}

View File

@@ -132,6 +132,7 @@
ylabel="Number of Jobs" ylabel="Number of Jobs"
yunit="Jobs" yunit="Jobs"
usesBins usesBins
enableFlip
/> />
{/snippet} {/snippet}

View File

@@ -255,6 +255,7 @@
height="275" height="275"
usesBins usesBins
xtime xtime
enableFlip
/> />
{/key} {/key}
</Col> </Col>
@@ -359,6 +360,7 @@
ylabel="Number of Jobs" ylabel="Number of Jobs"
yunit="Jobs" yunit="Jobs"
height="275" height="275"
enableFlip
/> />
</Col> </Col>
<Col xs="6" md="3" lg="2" class="p-2"> <Col xs="6" md="3" lg="2" class="p-2">
@@ -462,6 +464,7 @@
ylabel="Number of Jobs" ylabel="Number of Jobs"
yunit="Jobs" yunit="Jobs"
height="275" height="275"
enableFlip
/> />
</Col> </Col>
<Col xs="6" md="3" lg="2" class="p-2"> <Col xs="6" md="3" lg="2" class="p-2">

View File

@@ -149,6 +149,7 @@
{cluster} {cluster}
subCluster={item.subCluster} subCluster={item.subCluster}
forNode forNode
enableFlip
/> />
{/key} {/key}
{:else if item.disabled === null} {:else if item.disabled === null}