MediaWiki:Common.js: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
||
| Zeile 860: | Zeile 860: | ||
} | } | ||
} | } | ||
function isFlagTrue(v){ | |||
if (v == null) return false; | |||
v = String(v).trim().toLowerCase(); | |||
return v === 'true' || v === '1' || v === 'yes'; | |||
} | |||
// ---- Einzel-Chart rendern ----------------------------------------------- | // ---- Einzel-Chart rendern ----------------------------------------------- | ||
| Zeile 896: | Zeile 910: | ||
// Chart.js laden + Diagramm zeichnen | // Chart.js laden + Diagramm zeichnen | ||
ensureChartJS(function(){ | |||
const chart = new Chart(canvas.getContext('2d'), { | |||
type: type, | |||
data: { labels: out.labels, datasets: out.datasets }, | |||
options: { | |||
responsive: true, | |||
maintainAspectRatio: false, | |||
interaction: { mode: 'nearest', intersect: false }, | |||
scales: { | |||
x: { ticks: { font: { size: 12 } } }, | |||
y: { beginAtZero: true, ticks: { precision: 0, font: { size: 12 } } } | |||
}, | |||
plugins: { | |||
legend: { position: 'bottom', labels: { font: { size: 13 }, boxWidth: 20 } }, | |||
title: { display: !!title, text: title, font: { size: 16 } }, | |||
tooltip:{ backgroundColor: 'rgba(0,0,0,0.8)', titleFont: {size:14}, bodyFont: {size:13} } | |||
}, | |||
elements: { line: { tension: .25, borderWidth: 2 }, point: { radius: 3 } } | |||
} | |||
}); | |||
// --- NEU: Total je nach Attribut anzeigen/ausblenden --- | |||
const hideTotal = isFlagTrue(block.dataset.hideTotal); | |||
// Falls bereits eine Zeile existiert: erst mal entfernen | |||
const oldInfo = block.querySelector(':scope > .chart-total-info'); | |||
if (oldInfo) oldInfo.remove(); | |||
if (!hideTotal) { | |||
}); | addTotalBelowLegend(chart); | ||
if (window.ResizeObserver) { | |||
const obs = new ResizeObserver(() => addTotalBelowLegend(chart)); | |||
obs.observe(chart.canvas); | |||
chart.$adosTotalObserver = obs; // optional merken | |||
} | |||
} else { | |||
// Sicherheitshalber evtl. alten Observer trennen | |||
if (chart.$adosTotalObserver) { | |||
chart.$adosTotalObserver.disconnect(); | |||
chart.$adosTotalObserver = null; | |||
} | |||
} | } | ||
block.dataset.rendered = '1'; | |||
}); | |||
// ---- Auto-Init auf jeder Seite ------------------------------------------ | // ---- Auto-Init auf jeder Seite ------------------------------------------ | ||