static/plugins/charts_pie.js (71 lines of code) (raw):
function chart_pie(title, description, values, styles, donut=false) {
const chartdiv = document.createElement('div');
chartdiv.style.width = "500px";
chartdiv.style.height = "300px";
chartdiv.style.display = "inline-block";
if (styles) {
for (const [k,v] of Object.entries(styles)) {
chartdiv.style.setProperty(k, v);
}
}
const chart_pie_option = {
backgroundColor: sys_theme === 'dark' ? "#212529" : "#0000",
animation: false,
title: {
text: title ? title : "",
left: 'center',
},
tooltip: {
trigger: 'item',
formatter: '{b} : {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 0,
top: 'center'
},
series: [
{
type: 'pie',
radius: donut? ['30%', '60%'] : '80%',
left: '15%',
itemStyle: donut ? {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2
} : null,
detail: {
offsetCenter: [0, 0],
formatter: '{value}%',
borderColor: '#eee'
},
title: {
fontSize: 14
},
label: {
formatter: '{c}',
position: 'inside'
},
data: values
}
]
};
var myChart = echarts.init(chartdiv, sys_theme);
myChart.setOption(chart_pie_option);
const outerdiv = document.createElement('div');
outerdiv.style.maxWidth = "400px";
outerdiv.style.height = "380px";
outerdiv.className = 'card';
outerdiv.style.overflow = "hidden";
outerdiv.style.display = 'inline-block';
outerdiv.style.margin = '4px';
outerdiv.style.padding = '6px';
outerdiv.appendChild(chartdiv)
if (description) {
const descdiv = document.createElement('p');
descdiv.innerText = description;
descdiv.className = 'card-text small';
outerdiv.appendChild(descdiv);
}
return outerdiv
}