MediaWiki:Common.js: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
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 () {
ensureChartJS(function(){
      const chart = new Chart(canvas.getContext('2d'), {
  const chart = new Chart(canvas.getContext('2d'), {
        type: type,
    type: type,
        data: { labels: out.labels, datasets: out.datasets },
    data: { labels: out.labels, datasets: out.datasets },
        options: {
    options: {
          responsive: true,
      responsive: true,
          maintainAspectRatio: false,
      maintainAspectRatio: false,
          interaction: { mode: 'nearest', intersect: false },
      interaction: { mode: 'nearest', intersect: false },
          scales: {
      scales: {
            x: { ticks: { font: { size: 12 } } },
        x: { ticks: { font: { size: 12 } } },
            y: { beginAtZero: true, ticks: { precision: 0, font: { size: 12 } } }
        y: { beginAtZero: true, ticks: { precision: 0, font: { size: 12 } } }
          },
      },
          plugins: {
      plugins: {
            legend: { position: 'bottom', labels: { font: { size: 13 }, boxWidth: 20 } },
        legend: { position: 'bottom', labels: { font: { size: 13 }, boxWidth: 20 } },
            title:  { display: !!title, text: title, font: { size: 16 } },
        title:  { display: !!title, text: title, font: { size: 16 } },
            tooltip:{ backgroundColor: 'rgba(0,0,0,0.8)', titleFont: {size:14}, bodyFont: {size:13} }
        tooltip:{ backgroundColor: 'rgba(0,0,0,0.8)', titleFont: {size:14}, bodyFont: {size:13} }
          },
      },
          elements: { line: { tension: 0.25, borderWidth: 2 }, point: { radius: 3 } }
      elements: { line: { tension: .25, borderWidth: 2 }, point: { radius: 3 } }
        }
    }
      });
  });


      // Gesamtzahl einfügen + bei Größenänderung neu berechnen
  // --- NEU: Total je nach Attribut anzeigen/ausblenden ---
      if (block.dataset.hideTotal !== 'true') {
  const hideTotal = isFlagTrue(block.dataset.hideTotal);
  addTotalBelowLegend(chart);
}


      if (window.ResizeObserver) {
  // Falls bereits eine Zeile existiert: erst mal entfernen
        const obs = new ResizeObserver(() => addTotalBelowLegend(chart));
  const oldInfo = block.querySelector(':scope > .chart-total-info');
        obs.observe(chart.canvas);
  if (oldInfo) oldInfo.remove();
      }


       block.dataset.rendered = '1';
  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 ------------------------------------------