@@ -11,9 +11,19 @@ export const polarToCartesian = (cx, cy, r, angleDeg) => {
1111export const describeSegment = ( cx , cy , innerR , outerR , startAngle , endAngle ) => {
1212 const startOuter = polarToCartesian ( cx , cy , outerR , endAngle ) ;
1313 const endOuter = polarToCartesian ( cx , cy , outerR , startAngle ) ;
14+ const largeArcFlag = endAngle - startAngle <= 180 ? '0' : '1' ;
15+
16+ if ( innerR === 0 ) {
17+ return `
18+ M ${ cx } ${ cy }
19+ L ${ startOuter . x } ${ startOuter . y }
20+ A ${ outerR } ${ outerR } 0 ${ largeArcFlag } 0 ${ endOuter . x } ${ endOuter . y }
21+ Z
22+ ` . trim ( ) ;
23+ }
24+
1425 const startInner = polarToCartesian ( cx , cy , innerR , startAngle ) ;
1526 const endInner = polarToCartesian ( cx , cy , innerR , endAngle ) ;
16- const largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1" ;
1727
1828 return `
1929 M ${ startOuter . x } ${ startOuter . y }
@@ -28,9 +38,9 @@ export const createDonutSegments = (languages, cx, geometry, colours, stroke) =>
2838 let currentAngle = - 0.1 ;
2939
3040 return languages . map ( ( lang , i ) => {
31- let angle = ( lang . pct / 100 ) * 360 ;
41+ let angle = ( lang . pct / 100 ) * 360 ;
3242
33- const segmentAngle = Math . min ( currentAngle + angle + 0.1 , FULL_CIRCLE_ANGLE ) ;
43+ const segmentAngle = Math . min ( currentAngle + angle + 0.1 , FULL_CIRCLE_ANGLE ) ;
3444 const path = describeSegment (
3545 cx ,
3646 geometry . CENTER_Y ,
@@ -39,9 +49,9 @@ export const createDonutSegments = (languages, cx, geometry, colours, stroke) =>
3949 currentAngle ,
4050 segmentAngle
4151 ) ;
42-
52+
4353 currentAngle += angle ;
44- const fillColour = colours [ i % colours . length ] ;
54+ const fillColour = colours [ i % colours . length ] ;
4555 const strokeAttr = stroke
4656 ? ` stroke="#000" stroke-width="0.5" stroke-linejoin="round"`
4757 : ` stroke="${ fillColour } " stroke-width="0.2"` ;
0 commit comments