ui/js/coffee/charts_donut.coffee (38 lines of code) (raw):

charts_donutchart = (obj, data, maxN) -> a = 0 # Number of segments asDataArray = [] if data.counts data = data.counts for k, v of data asDataArray.push([k,v]) a++ asDataArray.sort((a,b) => b[1] - a[1]) if maxN and asDataArray.length > maxN others = 0 narr = asDataArray.slice(maxN, asDataArray.length-maxN) asDataArray = asDataArray.slice(0,maxN) for el in narr others += el[1] asDataArray.push(['Others', others]) asDataArray.sort((a,b) => b[1] - a[1]) config = { bindto: obj, data: { columns: asDataArray, type: 'donut' }, donut: { #title: "foo" width: 50 }, color: { pattern: genColors(a + 1, 0.55, 0.475, true) }, tooltip: { format: { value: (val) => d3.format(',')(val) } } } c = c3.generate(config) return [c, config]