// JenScript - 1.3.2 2017-06-10 // http://jenscript.io - Copyright 2017 Sébastien Janaud. All Rights reserved !function(){JenScript.Donut2DPlugin=function(a){this._init(a)},JenScript.Model.inheritPrototype(JenScript.Donut2DPlugin,JenScript.Plugin),JenScript.Model.addMethods(JenScript.Donut2DPlugin,{_init:function(a){a=a||{},a.name="Donut2DPlugin",this.donuts=[],this.donutListeners=[],JenScript.Plugin.call(this,a)},addDonut:function(a){a.plugin=this,this.donuts[this.donuts.length]=a,this.repaintPlugin()},select:function(a){for(var b=0;b=i.innerRadius){c>k.sc.x&&dk.sc.x&&d>=k.sc.y?m=Math.atan((k.sc.y-d)/(c-k.sc.x))+2*Math.PI:ck.sc.y&&(m=3*Math.PI/2);var n=JenScript.Math.toDegrees(m);n>k.startAngleDegree&&n360&&k.startAngleDegree+k.extendsDegree-360>=n?f(k):g(k)}else g(k)}return!1},onPress:function(a,b,c,d){return this.dispatchDonutAction(a,"press",c,d)},onRelease:function(a,b,c,d){return this.dispatchDonutAction(a,"release",c,d)},onMove:function(a,b,c,d){return this.dispatchDonutAction(a,"move",c,d)},onClick:function(a,b,c,d){return this.dispatchDonutAction(a,"click",c,d)},onEnter:function(a,b,c,d){return this.dispatchDonutAction(a,"enter",c,d)},onExit:function(a,b,c,d){return this.dispatchDonutAction(a,"exit",c,d)},onProjectionRegister:function(){var a=this;this.getProjection().addProjectionListener("boundChanged",function(){a.repaintPlugin()},"donut2D projection bound changed")},repaintDonuts:function(){this.repaintPlugin()},paintPlugin:function(a,b){if(b===JenScript.ViewPart.Device)for(var c=0;c0},solveDonut2D:function(){for(var a=this,b=(function(){if("User"==a.nature){var b=a.plugin.getProjection().userToPixel(new JenScript.Point2D(a.centerX,a.centerY));a.buildCenterX=b.x,a.buildCenterY=b.y}else"Device"==a.nature&&(a.buildCenterX=a.centerX,a.buildCenterY=a.centerY);a.buildCenter=new JenScript.Point2D(a.buildCenterX,a.buildCenterY)}(),function(){for(var b=0,c=0;c360&&(this.startAngleDegree=this.startAngleDegree-360);var c=this.startAngleDegree+b/2;c>360&&(c-=360);var d=this.startAngleDegree,e=this.buildCenterX+a.divergence*Math.cos(JenScript.Math.toRadians(c)),f=this.buildCenterY-a.divergence*Math.sin(JenScript.Math.toRadians(c));a.sc={x:e,y:f};var g={x:e+this.outerRadius*Math.cos(JenScript.Math.toRadians(d)),y:f-this.outerRadius*Math.sin(JenScript.Math.toRadians(d))},h={x:e+this.outerRadius*Math.cos(JenScript.Math.toRadians(d+b)),y:f-this.outerRadius*Math.sin(JenScript.Math.toRadians(d+b))};a.ob=g,a.oe=h;var i=b>180?"1":"0",j="M"+g.x+","+g.y+" A"+this.outerRadius+","+this.outerRadius+" 0 "+i+",0 "+h.x+","+h.y;a.outerArc=j;var k={x:e+this.innerRadius*Math.cos(JenScript.Math.toRadians(d)),y:f-this.innerRadius*Math.sin(JenScript.Math.toRadians(d))},l={x:e+this.innerRadius*Math.cos(JenScript.Math.toRadians(d+b)),y:f-this.innerRadius*Math.sin(JenScript.Math.toRadians(d+b))};a.ib=k,a.ie=l;var m="M"+k.x+","+k.y+" A"+this.sliceInnerEnd+","+this.sliceInnerEnd+" 0 "+i+",0 "+l.x+","+l.y;a.innerArc=m;var n="M"+g.x+","+g.y+" A"+this.outerRadius+","+this.outerRadius+" 0 "+i+",0 "+h.x+","+h.y+" L "+l.x+","+l.y+" A"+this.innerRadius+","+this.innerRadius+" 0 "+i+",1 "+k.x+","+k.y+" Z";a.face=n,a.medianDegree=c,a.startAngleDegree=d,a.endAngleDegree=d+b,a.extendsDegree=b,d+=b,this.startAngleDegree=d},getSlices:function(){return this.slices},isLockRollover:function(){for(var a=0;ac;c++)a(c)}})}(),function(){JenScript.Donut2DSlice=function(a){this.init(a)},JenScript.Model.addMethods(JenScript.Donut2DSlice,{init:function(a){if(a=a||{},this.name=void 0!==a.name?a.name:"Donut2DSlice name undefined",this.value=void 0!==a.value?a.value:1,this.themeColor=void 0!==a.themeColor?a.themeColor:JenScript.createColor(),this.divergence=void 0!==a.divergence?a.divergence:0,this.fillOpacity=void 0!==a.fillOpacity?a.fillOpacity:1,this.strokeOpacity=void 0!==a.strokeOpacity?a.strokeOpacity:1,this.ratio,this.startAngleDegree,this.endAngleDegree,this.face,this.outerArc,this.innerArc,this.lockRollover=!1,this.stroke,this.fill,this.sliceLabel,this.donut,this.value<=0)throw new Error("Slice value should be greater than 0")},repaint:function(){void 0!==this.donut&&this.donut.repaint()},setThemeColor:function(a){this.color=a,this.repaint()},getThemeColor:function(){return this.themeColor},setDivergence:function(a){this.divergence=a,this.repaint()},getDivergence:function(){return this.divergence},setFillOpacity:function(a){this.fillOpacity=a,this.repaint()},getFillOpacity:function(){return this.fillOpacity},setStrokeOpacity:function(a){this.strokeOpacity=a,this.repaint()},getStrokeOpacity:function(){return this.strokeOpacity},setSliceLabel:function(a){void 0!==a&&(a.slice=this),this.sliceLabel=a,this.repaint()},getSliceLabel:function(){return this.sliceLabel},getRatio:function(){return this.ratio},setStroke:function(a){this.stroke=a,this.repaint()},setFill:function(a){this.fill=a,this.repaint()},getStroke:function(){return this.stroke},getFill:function(){return this.fill}})}(),function(){JenScript.AbstractDonut2DFill=function(a){this.init(a)},JenScript.Model.addMethods(JenScript.AbstractDonut2DFill,{init:function(a){a=a||{},this.name=a.name},fillDonut2D:function(){throw new Error("AbstractDonut2DFill fillDonut2D method should be provide by override.")}}),JenScript.Donut2DDefaultFill=function(a){this._init(a)},JenScript.Model.inheritPrototype(JenScript.Donut2DDefaultFill,JenScript.AbstractDonut2DFill),JenScript.Model.addMethods(JenScript.Donut2DDefaultFill,{_init:function(a){a=a||{},this.fillColor=a.fillColor,a.name="JenScript.Donut2DDefaultFill",JenScript.AbstractDonut2DFill.call(this,a)},fillDonut2D:function(a,b){for(var c=0;c180?"1":"0",j=function(a,b){return{x:d.sc.x+a*Math.cos(JenScript.Math.toRadians(b)),y:d.sc.y-a*Math.sin(JenScript.Math.toRadians(b))}},k=j(e,g),l=j(e,g+h),m=j(f,g),n=j(f,g+h),o="M"+k.x+","+k.y+" A"+e+","+e+" 0 "+i+",0 "+l.x+","+l.y+" L "+n.x+","+n.y+" A"+f+","+f+" 0 "+i+",1 "+m.x+","+m.y+" Z",p=j(e,this.incidence),q=j(e,this.incidence+180);void 0===this.shader&&(this.shader=this.defaultShader);var r="gradient"+JenScript.sequenceId++;this.gradientsIds[this.gradientsIds.length]=r;var s=(new JenScript.SVGLinearGradient).Id(r).from(p.x,p.y).to(q.x,q.y).shade(this.shader.percents,this.shader.colors,this.shader.opacity).toSVG();a.definesSVG(s);var t=(new JenScript.SVGElement).name("path").attr("d",o).attr("stroke","none").attr("fill-opacity",d.fillOpacity).attr("fill","url(#"+r+")");b.svg.donutRoot.appendChild(t.buildHTML())}}}),JenScript.Donut2DReflectionEffect=function(a){this._init(a)},JenScript.Model.inheritPrototype(JenScript.Donut2DReflectionEffect,JenScript.AbstractDonut2DEffect),JenScript.Model.addMethods(JenScript.Donut2DReflectionEffect,{_init:function(a){a=a||{},this.deviation=void 0!==a.deviation?a.deviation:3,this.opacity=void 0!==a.opacity?a.opacity:.3,this.length=void 0!==a.length?a.length:.5,this.verticalOffset=void 0!==a.verticalOffset?a.verticalOffset:0,a.name="JenScript.Donut2DReflectionEffect",JenScript.AbstractDonut2DEffect.call(this,a)},effectDonut2D:function(a,b){var c=b.svg.donutRoot.getBBox(),d="clip"+JenScript.sequenceId++,e=(new JenScript.SVGRect).origin(c.x,c.y+c.height).size(c.width,c.height*this.length),f=(new JenScript.SVGClipPath).Id(d).appendPath(e);a.definesSVG(f.toSVG());var g="filter"+JenScript.sequenceId++,h=(new JenScript.SVGFilter).Id(g).from(c.x,c.y).size(c.width,c.height).toSVG(),i=(new JenScript.SVGElement).name("feGaussianBlur").attr("in","SourceGraphic").attr("stdDeviation",this.deviation);h.appendChild(i.buildHTML()),a.definesSVG(h);var j=b.svg.donutRoot.cloneNode(!0);j.removeAttribute("id"),j.setAttribute("filter","url(#"+g+")"),j.setAttribute("transform","translate(0,"+c.height+"), scale(1,-1), translate(0,"+(-2*(c.y+c.height/2)-this.verticalOffset)+")"),j.setAttribute("opacity",this.opacity);var k=(new JenScript.SVGElement).name("g").buildHTML();j.setAttribute("id",j.getAttribute("id")+"_reflection"+JenScript.sequenceId++),k.setAttribute("clip-path","url(#"+d+")"),k.appendChild(j),a.insertSVG(k)}})}(),function(){JenScript.Donut2DAbstractLabel=function(a){this._init(a)},JenScript.Model.inheritPrototype(JenScript.Donut2DAbstractLabel,JenScript.AbstractLabel),JenScript.Model.addMethods(JenScript.Donut2DAbstractLabel,{_init:function(a){JenScript.AbstractLabel.call(this,a)},paintDonut2DSliceLabel:function(){throw new Error("paintDonut2DSliceLabel method should be provide by override")}}),JenScript.Donut2DBorderLabel=function(a){this.__init(a)},JenScript.Model.inheritPrototype(JenScript.Donut2DBorderLabel,JenScript.Donut2DAbstractLabel),JenScript.Model.addMethods(JenScript.Donut2DBorderLabel,{__init:function(a){a=a||{},this.margin=void 0!==a.margin?a.margin:50,this.linkExtends=void 0!==a.linkExtends?a.linkExtends:30,a.name="JenScript.Donut2DBorderLabel",JenScript.Donut2DAbstractLabel.call(this,a)},setMargin:function(a){this.margin=a,this.slice.donut.plugin.repaintPlugin()},setLinkExtends:function(a){this.linkExtends=a,this.slice.donut.plugin.repaintPlugin()},paintDonut2DSliceLabel:function(a,b){var c=b.donut.getOuterRadius(),d=b.medianDegree,e=b.donut.buildCenterX+(c+b.getDivergence())*Math.cos(JenScript.Math.toRadians(d)),f=b.donut.buildCenterY-(c+b.getDivergence())*Math.sin(JenScript.Math.toRadians(d)),g=b.donut.buildCenterX+(c+this.linkExtends+b.getDivergence())*Math.cos(JenScript.Math.toRadians(d)),h=b.donut.buildCenterY-(c+this.linkExtends+b.getDivergence())*Math.sin(JenScript.Math.toRadians(d)),i=0,j=h,k=0,l=h,m="middle";d>=270&&360>=d||d>=0&&90>=d?(i=b.donut.buildCenterX+c+this.margin-5,k=b.donut.buildCenterX+c+this.margin+5,m="start",270===d&&(m="middle"),90===d&&(m="middle")):(i=b.donut.buildCenterX-c-this.margin+5,k=b.donut.buildCenterX-c-this.margin-5,m="end");var n="M "+e+","+f+" Q "+g+","+h+" "+i+","+j,o=(new JenScript.SVGElement).name("path").attr("d",n).attr("fill","none").attr("stroke","darkgray").buildHTML();this.setTextAnchor(m),this.setLocation(new JenScript.Point2D(k,l));var p=void 0!==this.textColor?this.textColor:b.themeColor;this.setTextColor(p),this.paintLabel(a),this.svg.label.appendChild(o)}}),JenScript.Donut2DRadialLabel=function(a){this.__init(a)},JenScript.Model.inheritPrototype(JenScript.Donut2DRadialLabel,JenScript.Donut2DAbstractLabel),JenScript.Model.addMethods(JenScript.Donut2DRadialLabel,{__init:function(a){a=a||{},this.offsetRadius=void 0!==a.offsetRadius?a.offsetRadius:20,a.name="JenScript.Donut2DAbstractLabel",JenScript.Donut2DAbstractLabel.call(this,a)},setOffsetRadius:function(a){this.offsetRadius=a,this.slice.donut.plugin.repaintPlugin()},paintDonut2DSliceLabel:function(a,b){var c={x:b.sc.x+(b.donut.outerRadius+this.offsetRadius)*Math.cos(JenScript.Math.toRadians(b.medianDegree)),y:b.sc.y-(b.donut.outerRadius+this.offsetRadius)*Math.sin(JenScript.Math.toRadians(b.medianDegree))},d="middle",e=0;b.medianDegree>0&&b.medianDegree<90?(d="start",e=10):b.medianDegree>90&&b.medianDegree<270?(d="end",e=-10):b.medianDegree>270&&b.medianDegree<=360?(d="start",e=10):(90===b.medianDegree||270===b.medianDegree)&&(d="middle"),this.setLocation(new JenScript.Point2D(c.x,c.y)),this.setTextAnchor(d);var f=void 0!==this.textColor?this.textColor:b.themeColor;this.setTextColor(f),this.paintLabel(a)}})}(),function(){JenScript.Donut2DBuilder=function(a,b,c){a.registerProjection(b);var d=new JenScript.Donut2DPlugin;b.registerPlugin(d);var e=new JenScript.Donut2D(c);d.addDonut(e);var f,g=[],h=[],i=[],j=function(a){var b=new JenScript.Donut2DSlice(a);return f=b,e.addSlice(b),h.push(b),this},k=function(a,b){var c;return"radial"===a&&(c=new JenScript.Donut2DRadialLabel(b)),"border"===a&&(c=new JenScript.Donut2DBorderLabel(b)),f.setSliceLabel(c),g.push(c),this},l=function(a,b){var c;return"linear"===a&&(c=new JenScript.Donut2DLinearEffect(b)),"reflection"===a&&(c=new JenScript.Donut2DReflectionEffect(b)),e.addEffect(c),i.push(c),this},m=function(a){return l("linear",a),this},n=function(a){return l("reflection",a),this};return{slice:j,label:k,effect:l,linearFx:m,reflectFx:n,view:function(){return a},projection:function(){return b},donut:function(){return e},labels:function(){return g},slices:function(){return j}}}}(); //# sourceMappingURL=jenscript-donut2d.min.js.map