Current File : /home/d/i/g/digitaw/Ycof/admin/js/dynamic-pie-chart.js
(function() {
  var pieCharts = document.querySelectorAll('.pie-chart');
  
  Array.prototype.forEach.call(pieCharts, function(wrapperEl) {
    // Pull our variables out of our helper div
    var dataset = wrapperEl.dataset;
    var percentage = dataset.percentage ? parseInt(dataset.percentage, 10) : 0;
    var diameter = dataset.diameter ? parseInt(dataset.diameter, 10) : 150;
    var strokeWidth = dataset.strokeWidth ? parseInt(dataset.strokeWidth, 10) : 15;
    var fillColor = dataset.fillColor || '#f47b28'; // orange
    var bgColor = dataset.bgColor || '#fac5a1'; // light orange
    
    // Size our wrapper element and add our percentage
    wrapperEl.style.height = diameter + 'px';
    wrapperEl.style.width = diameter + 'px';
    var percentageEl = document.createElement('span');
    percentageEl.classList.add('pie-chart__percentage');
    percentageEl.style.color = fillColor;
    percentageEl.innerText = percentage + '%';
    wrapperEl.appendChild(percentageEl);
    
    // Setting up the values we're gonna use to draw our circles
    var center = diameter;
    var radius = center - (strokeWidth);
    var startAngle = degreesToRadians(-90);
    var fullCircle = degreesToRadians(365);
    var endAngle = startAngle + degreesToRadians(percentage / 100 * 365);
    
    // Draw our canvas! Note we're doubling our sizes so we look good on high res displays
    var canvas = document.createElement('canvas');
    canvas.classList.add('pie-chart__canvas');
    canvas.height = diameter * 2;
    canvas.width = diameter * 2;
    var ctx = canvas.getContext('2d');
    ctx.lineWidth = strokeWidth * 2;
    ctx.strokeStyle = bgColor;
    ctx.beginPath();
    ctx.arc(center, center, radius, startAngle, fullCircle);
    ctx.stroke();
    ctx.strokeStyle = fillColor;
    ctx.beginPath();
    ctx.arc(center, center, radius, startAngle, endAngle);
    ctx.stroke();

    wrapperEl.appendChild(canvas);
  });
  
  function degreesToRadians(degrees) {
    return (degrees / 360) * (2 * Math.PI);
  }
})();