forked from Stigmatoz/web-activity-time-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchart-core.js
More file actions
8 lines (8 loc) · 3.53 KB
/
chart-core.js
File metadata and controls
8 lines (8 loc) · 3.53 KB
1
2
3
4
5
6
7
8
function donutChart(){var width,height,margin={top:10,right:10,bottom:10,left:10},colour=d3.scaleOrdinal(d3.schemeCategory20),variable,category,padAngle,floatFormat=d3.format('.4r'),cornerRadius,percentFormat=d3.format(',.2%');function chart(selection){selection.each(function(data){var radius=135;var pie=d3.pie().value(function(d){return floatFormat(d[variable])}).sort(null);var arc=d3.arc().outerRadius(radius*0.9).innerRadius(radius*0.6).cornerRadius(cornerRadius).padAngle(padAngle);var outerArc=d3.arc().outerRadius(radius*0.9).innerRadius(radius*0.9);var tempAngle;var tempOffset={x:1,y:0.95};var svg=selection.append('svg').attr('width',width+margin.left+margin.right).attr('height',height+margin.top+margin.bottom).attr('class','backColorChart').append('g').attr('transform','translate('+(width/2-105)+','+(height/2+12)+')');svg.append('g').attr('class','slices');svg.append('g').attr('class','labelName');svg.append('g').attr('class','lines');var path=svg.select('.slices').datum(data).selectAll('path').data(pie).enter().append('path').attr('fill',function(d){return colour(d.data[category])}).attr('d',arc).attr('id',function(d){return d.data[category]});var legendG=svg.selectAll(".legend").data(pie(data)).enter().append("g").attr("transform",function(d,i){return"translate("+(130)+","+(i*20-40)+")"}).attr("class","legend");legendG.append("rect").attr("width",10).attr("height",10).attr("fill",function(d,i){return colour(d.data[category])});legendG.append("text").text(function(d){return d.data.url}).style("font-size",13).attr("y",10).attr("x",11);d3.selectAll('.labelName text, .slices path').call(toolTip);function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2}
function toolTip(selection){selection.on('mouseenter',function(data){d3.selectAll('.toolCircle').remove();svg.append('text').attr('class','toolCircle').attr('dy',-15).html(toolTipHTML(data)).style('font-size','.9em').style('text-anchor','middle');svg.append('circle').attr('class','toolCircle').attr('r',radius*0.55).style('fill',colour(data.data[category])).style('fill-opacity',0.35)});selection.on('mouseout',function(){d3.selectAll('.toolCircle').remove()})}
function toolTipHTML(data){var tip='',i=0;for(var key in data.data){var value=(!isNaN(parseFloat(data.data[key])))?percentFormat(data.data[key]):data.data[key];if(key==='summary')
value=convertSummaryTimeToString(data.data[key]);var className='';if(key==='percentage')
className='class="percentageValue"';if(i===0)tip+='<tspan x="0">'+value+'</tspan>';else tip+='<tspan x="0" dy="1.2em"'+className+'>'+value+'</tspan>';i++}
return tip}
function angleIsInRangeDifference(tempAngle,currentAngle,difference){return currentAngle<(tempAngle+difference)&¤tAngle>(tempAngle-difference)}})}
chart.width=function(value){if(!arguments.length)return width;width=value;return chart};chart.height=function(value){if(!arguments.length)return height;height=value;return chart};chart.margin=function(value){if(!arguments.length)return margin;margin=value;return chart};chart.radius=function(value){if(!arguments.length)return radius;radius=value;return chart};chart.padAngle=function(value){if(!arguments.length)return padAngle;padAngle=value;return chart};chart.cornerRadius=function(value){if(!arguments.length)return cornerRadius;cornerRadius=value;return chart};chart.colour=function(value){if(!arguments.length)return colour;colour=value;return chart};chart.variable=function(value){if(!arguments.length)return variable;variable=value;return chart};chart.category=function(value){if(!arguments.length)return category;category=value;return chart};return chart}