Widget:Grafico: differenze tra le versioni
Da WikiLectio.
m test |
m test |
||
| Riga 35: | Riga 35: | ||
data-ymax="<!--{$yMax|escape:'html'}-->" | data-ymax="<!--{$yMax|escape:'html'}-->" | ||
></canvas> | ></canvas> | ||
<div id="chartmsg_<!--{$id|escape:'html'}-->" style="font-size:12px;color:#a00;margin-top:4px;"></div> | |||
</div> | </div> | ||
<!-- Chart.js (CDN) --> | <!-- Chart.js (CDN). Se il tuo hosting/CSP lo blocca, più sotto ti metto l'opzione "file locale". --> | ||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> | <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> | ||
| Riga 47: | Riga 48: | ||
function numOrUndef(s){ const n = Number(s); return isNaN(n) ? undefined : n; } | function numOrUndef(s){ const n = Number(s); return isNaN(n) ? undefined : n; } | ||
var id = "<!--{$id|escape:'html'}-->"; | |||
var c = document.getElementById("canvas_" + id); | |||
var msg = document.getElementById("chartmsg_" + id); | |||
if (!c) { | |||
console.error("[Widget:Grafico] canvas non trovato per id=", id); | |||
if (msg) msg.textContent = "Errore: canvas non trovato (id="+id+")."; | |||
return; | |||
} | } | ||
// 1) Verifica che Chart.js sia caricato | |||
if (typeof Chart === "undefined") { | |||
if (msg) msg.textContent = "Chart.js non caricato (CDN bloccato dalla tua rete/CSP). Vedi istruzioni più sotto per caricarlo in locale."; | |||
console.error("[Widget:Grafico] Chart.js non definito: probabilmente il CDN è bloccato."); | |||
return; | |||
} | |||
try { | |||
var ds = c.dataset; | var ds = c.dataset; | ||
var labels = csvToArray(ds.labels); | var labels = csvToArray(ds.labels); | ||
var series = [ | |||
var | |||
{ t: ds.series1Title, d: ds.series1Data, ty: ds.series1Type, c: ds.series1Color }, | { t: ds.series1Title, d: ds.series1Data, ty: ds.series1Type, c: ds.series1Color }, | ||
{ t: ds.series2Title, d: ds.series2Data, ty: ds.series2Type, c: ds.series2Color }, | { t: ds.series2Title, d: ds.series2Data, ty: ds.series2Type, c: ds.series2Color }, | ||
| Riga 74: | Riga 75: | ||
{ t: ds.series4Title, d: ds.series4Data, ty: ds.series4Type, c: ds.series4Color } | { t: ds.series4Title, d: ds.series4Data, ty: ds.series4Type, c: ds.series4Color } | ||
]; | ]; | ||
var datasets = []; | |||
series.forEach(function(s, i){ | |||
if (s.t && s.d) { | |||
datasets.push({ | |||
label: s.t, | |||
data: csvToNum(s.d), | |||
type: (s.ty || 'line'), | |||
fill: false, | |||
borderColor: s.c || undefined, | |||
backgroundColor: s.c || undefined, | |||
tension: 0, | |||
pointRadius: 2 | |||
}); | |||
} | |||
}); | }); | ||
| Riga 94: | Riga 107: | ||
} | } | ||
var numericLabels = labels.every(l | var numericLabels = labels.every(function(l){ return !isNaN(Number(l)); }); | ||
new Chart(c.getContext('2d'), { | new Chart(c.getContext('2d'), { | ||
type: 'line', | type: 'line', | ||
| Riga 124: | Riga 138: | ||
} | } | ||
}); | }); | ||
}); | |||
if (msg) msg.textContent = ""; // pulisci eventuale messaggio | |||
} catch (e) { | |||
console.error("[Widget:Grafico] Errore durante il rendering:", e); | |||
if (msg) msg.textContent = "Errore nel rendering del grafico: " + (e && e.message ? e.message : e); | |||
} | |||
})(); | })(); | ||
</script> | </script> | ||
</includeonly> | </includeonly> | ||