2 lines
47 KiB
JavaScript
2 lines
47 KiB
JavaScript
function drawAxisX(e,b,c,h){if(!h.graph.axisX.showAxis){return}var i=new GraphDim(h);var a=d3.svg.axis().scale(c).orient("bottom").tickSize(h.graph.axisX.ticks);var g=b.append("g").attr("class","axis").attr("transform","translate(0,"+i.bottom+")").call(a).selectAll("text").style("text-anchor","end").attr("class","x-ticks-label").attr("transform","rotate(-45)");if(h.graph.axisX.showLabel){var f=i.left+i.width/2;var d=i.bottom+55;b.append("text").attr("transform","translate("+f+" ,"+d+")").attr("class","axis-label").style("text-anchor","middle").text(h.graph.axisX.label)}}function drawAxisY(e,c,f,g){if(!g.graph.axisY.showAxis){return}var b=new GraphDim(g);var a=d3.svg.axis().scale(f).orient("left").ticks(g.graph.axisY.ticks);var d=c.append("g").attr("class","axis").attr("transform","translate("+b.top+",0)").call(a).selectAll("text").attr("class","y-ticks-label");if(g.graph.axisY.showLabel){c.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("y",0).attr("x",-(b.left+b.height/2)).attr("dy","1.5em").style("text-anchor","end").text(g.graph.axisY.label)}}var BarChart=function(b,d,c,a){this.originalData=b;this.previousDataPoint=c;this.params=d;this.$container=$("#"+this.params.canvas.containerId);this.breadCrumbStack=(a==null)?[]:a;pushToStack(c,this)};BarChart.prototype.drawChart=function(){var a=$("#"+this.params.canvas.containerId);a.empty();$(".tooltipdiv").remove();stretchCanvas(null,this.$container,this.params);this.canvas=createCanvas(this.params.canvas.containerId,this.params.canvas);this.drawBars(this.originalData,this.canvas,this.params);refreshBreadCrumbs(this)};BarChart.prototype.addBarTransition=function(b,c,a){b.attr("stroke-width",4).transition().duration(300).attr("width",c.rangeBand()).attr("y",function(e){return a(e.value)});b.exit().transition().duration(300).ease("exp").attr("width",0).remove()};BarChart.prototype.drawBars=function(g,c,f){var k=createDefaultParamsForGraph(f);var a=createDefaultParamsForLineChart(f.graph);k.graph=a;var n=new GraphDim(f);var o=new ToolTip();var h=this;if(g==null||g.length==0){c.append("text").attr("class","pm-charts-no-draw").attr("y",n.height/2).attr("x",n.left*2+n.width/2).attr("dy","1.5em").style("text-anchor","end").text(f.canvas.noDataText);g=[{value:"0",datalabel:"None"}]}var d=g.map(function(p){return p.datalabel});var i=d3.max(g,function(p){return p.value*1});var m=d3.scale.ordinal().domain(d).rangeRoundBands([n.left,n.right],0.15);var b=d3.scale.linear().domain([0,i]).range([n.bottom,n.top]).nice();var j=c.append("g");var n=new GraphDim(k);drawAxisX(g,j,m,k);drawAxisY(g,j,b,k);drawLinesX(g,j,m,k);drawLinesY(g,j,b,k);var l=j.selectAll("rect").data(g);if(k.graph.allowZoom){addZoomToCanvas(j)}addGradient(j,"gradientForBars");l.enter().append("rect").attr({x:function(q,p){return m(q.datalabel)},y:function(p){return(k.graph.allowTransition)?0:b(p.value)},width:(k.graph.allowTransition)?0:m.rangeBand(),height:function(p){return n.bottom-b(p.value)},fill:"url(#gradientForBars)"}).attr("clip-path","url(#rectClip)").on("mouseover",function(q,p){d3.select(this).attr("fill",h.params.graph.colorPalette[p%h.params.graph.colorPalette.length]);if(f.graph.showTip){o.show(function(){return o.valuesToUse(q)})}}).on("mouseout",function(p){d3.select(this).attr("fill","url(#gradientForBars)");o.hide()});if(k.graph.allowTransition){this.addBarTransition(l,m,b)}if(k.graph.useShadows){addShadow(c,"110%",2);j.selectAll("rect").attr("filter","url(#drop-shadow)")}if(this.params.graph.allowDrillDown){this.addOnClick(g,c);if(this.breadCrumbStack.length>0){var e=j.append("defs").append("svg:clipPath").attr("id","clip").append("svg:rect").attr("id","clip-rect").attr("x","0").attr("y","0").attr("width",50).attr("height",50).transition().duration(2000).attr("width",500).attr("height",500);d3.select("svg g").attr("clip-path","url(#clip)")}}};BarChart.prototype.addOnClick=function(arrayData,canvas){var currObj=this;canvas.selectAll("rect").data(arrayData).on("click",function(pointData){if(pointData.callBack!=null&&pointData.callBack.length!=""){var $container=$(canvas[0]).parent();$container.empty();$(".tooltipdiv").remove();var funCallBack=eval(pointData.callBack);funCallBack(pointData,currObj)}})};var DEFAULT_PADDING=50;function defaultAxis(b){var a={};addValueForProperty(a,b,"showLabel",true);addValueForProperty(a,b,"showAxis",true);addValueForProperty(a,b,"label","X");addValueForProperty(a,b,"ticks",10);return a}function addValueForProperty(b,c,d,a){if(d in c){b[d]=c[d]}else{b[d]=a}}function createDefaultParamsForGraph(b){if(b.canvas==null){throw new Error("You need specify canvas configuration parameters.")}if(b.graph==null){throw new Error("You need specify graph configuration parameters.")}if(b.canvas.width==null){throw new Error("No canvas width specified.")}if(b.canvas.height==null){throw new Error("No canvas height specified.")}var a={canvas:{width:("width" in b.canvas)?b.canvas.width:100,height:("height" in b.canvas)?b.canvas.height:100,exportTo:("exportTo" in b.canvas)?b.canvas.exportTo:[],stretch:("stretch" in b.canvas)?b.canvas.stretch:true},graph:{allowTransition:("allowTransition" in b.graph)?b.graph.allowTransition:false,allowZoom:("allowZoom" in b.graph)?b.graph.allowZoom:false,useShadows:("useShadows" in b.graph)?b.graph.useShadows:false,showTip:("showTip" in b.graph)?b.graph.showTip:false,paddingTop:("paddingTop" in b.graph)?b.graph.paddingTop:50,axisX:("axisX" in b.graph)?defaultAxis(b.graph.axisX):defaultAxis({}),axisY:("axisY" in b.graph)?defaultAxis(b.graph.axisY):defaultAxis({}),colorPalette:("colorPalette" in b.graph)?b.graph.colorPalette:["#62C1A3","#FB906B","#8DA1CB","#E88AC2","#E4C18F","#B3B3B3","#3180BA","#50B14D","#9A51A4","#F87709","#A35920","#A6D954","#FED92F","#ED2617"]},linesx:true,linesy:true};return a}function createDefaultParamsForGraphRign(b){if(b.canvas==null){throw new Error("You need specify canvas configuration parameters.")}if(b.graph==null){throw new Error("You need specify graph configuration parameters.")}if(b.canvas.width==null){throw new Error("No canvas width specified.")}if(b.canvas.height==null){throw new Error("No canvas height specified.")}var a={canvas:{width:("width" in b.canvas)?b.canvas.width:200,height:("width" in b.canvas)?b.canvas.height:200,exportTo:("exportTo" in b.canvas)?b.canvas.exportTo:[],stretch:("stretch" in b.canvas)?b.canvas.stretch:true},graph:{ringColor:("ringColor" in b.graph)?b.graph.ringColor:"#74cc84",labelColor:("labelColor" in b.graph)?b.graph.labelColor:"red",diameter:("diameter" in b.graph)?b.graph.diameter:200,gapWidth:("gapWidth" in b.graph)?b.graph.gapWidth:50,useShadows:("useShadows" in b.graph)?b.graph.useShadows:false,allowTransition:("allowTransition" in b.graph)?b.graph.allowTransition:false,allowZoom:("allowZoom" in b.graph)?b.graph.allowZoom:false}};return a}function createDefaultParamsForGraphVelocimeter(b){if(b.canvas==null){throw new Error("You need specify canvas configuration parameters.")}if(b.graph==null){throw new Error("You need specify graph configuration parameters.")}if(b.canvas.width==null){throw new Error("No canvas width specified.")}if(b.canvas.height==null){throw new Error("No canvas height specified.")}var a={canvas:{width:("width" in b.canvas)?b.canvas.width:700,height:("width" in b.canvas)?b.canvas.height:200,exportTo:("exportTo" in b.canvas)?b.canvas.exportTo:[],stretch:("stretch" in b.canvas)?b.canvas.stretch:true},graph:{useShadows:("useShadows" in b.graph)?b.graph.useShadows:false,allowZoom:("allowZoom" in b.graph)?b.graph.allowZoom:false}};return a}function createDefaultParamsForGraphPie(b){if(b.canvas==null){throw new Error("You need specify canvas configuration parameters.")}if(b.graph==null){throw new Error("You need specify graph configuration parameters.")}if(b.canvas.width==null){throw new Error("No canvas width specified.")}if(b.canvas.height==null){throw new Error("No canvas height specified.")}var a={canvas:{width:("width" in b.canvas)?b.canvas.width:100,height:("height" in b.canvas)?b.canvas.height:100,exportTo:("exportTo" in b.canvas)?b.canvas.exportTo:[],stretch:("stretch" in b.canvas)?b.canvas.stretch:true},graph:{allowTransition:("allowTransition" in b.graph)?b.graph.allowTransition:false,allowDrillDown:("allowDrillDown" in b.graph)?b.graph.allowDrillDown:false,allowZoom:("allowZoom" in b.graph)?b.graph.allowZoom:false,useShadows:("useShadows" in b.graph)?b.graph.useShadows:false,showTip:("showTip" in b.graph)?b.graph.showTip:false,thickness:("thickness" in b.graph)?b.graph.thickness:50,showLabels:("showLabels" in b.graph)?b.graph.showLabels:false,colorPalette:("colorPalette" in b.graph)?b.graph.colorPalette:["#62C1A3","#FB906B","#8DA1CB","#E88AC2","#E4C18F","#B3B3B3","#3180BA","#50B14D","#9A51A4","#F87709","#A35920","#A6D954","#FED92F","#ED2617"]}};return a}function createDefaultParamsForLineChart(b){var a={axisX:("axisX" in b)?defaultAxis(b.axisX):defaultAxis({}),axisY:("axisY" in b)?defaultAxis(b.axisY):defaultAxis({})};addValueForProperty(a,b,"allowTransition",false);addValueForProperty(a,b,"allowZoom",false);addValueForProperty(a,b,"useShadows",false);addValueForProperty(a,b,"showTip",false);addValueForProperty(a,b,"paddingTop",0);addValueForProperty(a,b,"area",{visible:false,css:"area"});addValueForProperty(a,b,"marker",{visible:true,ratio:5,css:"line-chart-point"});addValueForProperty(a,b,"line",{visible:true,css:"line1"});addValueForProperty(a,b,"gridLinesX",true);addValueForProperty(a,b,"gridLinesY",true);addValueForProperty(a,b,"showErrorBars",false);return a}function stretchCanvas(a,f,e){if(e.canvas.stretch){if(f.width()==null||f.height()==null){throw new Error("stretchCanvas: The container "+f.attr("id")+" must have a width and height assigned.")}var d=(f.width()==null||f.width()==0)?e.canvas.width:f.width();var b=(f.height()==null||f.height()==0)?e.canvas.height:f.height();var c=d3.min([d,b],function(g){return g});e.canvas.width=d;e.canvas.height=b;e.graph.diameter=c}if(a==null){return}a.attr("width","100%").attr("height","98%").attr("viewBox","0 0 "+d+" "+b).attr("preserveAspectRatio","xMidYMid meet").attr("pointer-events","all");return a}function redrawChart(a){a.attr("transform","translate("+d3.event.translate+") scale("+d3.event.scale+")")}function createCanvas(b,c){d3.select("#"+b).select("svg").remove();var a=d3.select("#"+b).append("svg").attr("width",c.width).attr("height",c.height);return a}function addZoomToCanvas(a){var b=d3.behavior.zoom().scaleExtent([1,3]).on("zoom",function(){a.attr("transform","translate("+d3.event.translate+")scale("+d3.event.scale+")")});a.call(b)}function addExportOptions(b,d){var a=[];$(d).each(function(){a.push({val:this.toLowerCase(),text:this})});var c=$("<select>").appendTo(b);c.append($("<option>").attr("value","").text("Export To ..."));$(a).each(function(){c.append($("<option>").attr("value",this.val).text(this.text))});c.css({position:"absolute",top:0,left:0});c.change(function(){var f=this.options[this.selectedIndex].value;var h=b.get(0).getElementsByTagName("svg")[0];var e=(new XMLSerializer).serializeToString(h);var g=document.getElementById("svgform");g.output_format.value=f;g.data.value=e;g.submit()});b.append(c)}function addDefsSection(b){var a=b.select("defs");if(a.empty()){a=b.append("defs")}return a}function addGradient(a,b){defs=addDefsSection(a);var c=defs.append("linearGradient").attr("id",b).attr("y1",10).attr("y2",800).attr("x1","0").attr("x2","0").attr("gradientUnits","userSpaceOnUse");c.append("stop").attr("offset","0").attr("stop-color","#99d5cf");c.append("stop").attr("offset","0.5").attr("stop-color","#009688")}function linesX(d,c,j){var b=j.width;var e=d3.select("#"+c+" svg");var g=[],f;for(key in d){g.push(key)}f=g.length;var a=d.map(function(l){return l.datalabel});var i=d3.scale.ordinal().domain(a).rangePoints([50,b-50]);function h(){return d3.svg.axis().scale(i).orient("bottom").ticks(f)}var k=e.append("g");k.append("g").attr("class","grid").attr("transform","translate(0,"+240+")").call(h().tickSize(-220,0,0).tickFormat(""))}function linesY(b,a,c){}function addToolTipPie(a){var b=d3.tip().attr("class","d3-tip").offset([-10,0]).html(function(c){return"<strong>Value:</strong> <span style='color:#57B1DB'>"+c.data.value+"</span><br><strong>Data Label:</strong> <span style='color:#57B1DB'>"+c.data.label+"</span>"});a.call(b);return b}function addToolTipPie2D(b,a){var c=d3.tip().attr("class","d3-tip").offset(function(){if(a){return[240,0]}else{return[0,0]}}).html(function(f,e){return"<strong>Value:</strong> <span style='color:#57B1DB'>"+f.value+"</span><br><strong>Data Label:</strong> <span style='color:#57B1DB'>"+f.data.cat+"</span>"});b.call(c);return c}function addShadow(c,d,b){var a=addDefsSection(c);var e=a.append("filter").attr("id","drop-shadow").attr("height",d);e.append("feGaussianBlur").attr("in","SourceAlpha").attr("stdDeviation",b).attr("result","blur");e.append("feOffset").attr("in","blur").attr("dx",1.5).attr("dy",2).attr("result","offsetBlur");var f=e.append("feMerge");f.append("feMergeNode").attr("in","offsetBlur");f.append("feMergeNode").attr("in","SourceGraphic")}function drawLinesX(f,i,k,l){if(!l.graph.gridLinesX){return}var c=50;var o=c+l.graph.paddingTop;var m=l.canvas.height-o-c;var b=l.canvas.width-2*c;var d=b+c;var e=m+o;var h=[],g;for(key in f){h.push(key)}g=h.length;var a=f.map(function(p){return p.datalabel});function j(){return d3.svg.axis().scale(k).orient("bottom").ticks(l.graph.axisX.ticks)}var n=i.append("g");n.append("g").attr("class","grid").attr("transform","translate(0,"+o+")").call(j().tickSize(m,0,0).tickFormat(""))}function drawLinesY(f,h,i,j){if(!j.graph.gridLinesY){return}var c=50;var m=c+j.graph.paddingTop;var k=j.canvas.height-m-c;var b=j.canvas.width-2*c;var d=b+c;var e=k+m;var g=d3.max(f,function(n){return n.value*1});function a(){return d3.svg.axis().scale(i).orient("left").ticks(j.graph.axisY.ticks)}var l=h.append("g");l.append("g").attr("class","grid").attr("transform","translate("+c+",0)").call(a().tickSize(-b,0,0).tickFormat(""))}function pushToStack(b,a){var c={previousDataPoint:b,graph:a};a.breadCrumbStack.push(c)}function refreshBreadCrumbs(e){if(e.breadCrumbStack.length<=1){return}e.$container.children(".graph-breadcrumb-div").remove();e.$container.append('<div class="graph-breadcrumb-div" style=" height:20px; padding-left:80px;border:1px solid;"></div>');var a=e.$container.children(".graph-breadcrumb-div").first();for(var c=0;c<e.breadCrumbStack.length;c++){var d=e.breadCrumbStack[c];var b=$(document.createElement("a"));b.attr("class","graph-breadcrumb-link");b.text((d.previousDataPoint==null)?"init":d.previousDataPoint.datalabel);b.attr("href","#");b.attr("data-index",c);b.click(function(){var f=$(this).data("index");for(var h=f;h<e.breadCrumbStack.length;h++){e.breadCrumbStack.pop()}var g=e.breadCrumbStack.slice(-1)[0];g.graph.drawChart()});b.appendTo(a);if(c<e.breadCrumbStack.length-1){a.append(" >> ")}}}var GraphDim=function(b){var a=50;this.top=a;this.left=a;this.height=b.canvas.height-2*a-20;this.width=b.canvas.width-2*a;this.bottom=this.height+this.top;this.right=this.width+this.left};var LineChart=function(b,d,c,a){this.originalData=b;this.previousDataPoint=c;this.params=d;this.$container=$("#"+this.params.canvas.containerId);this.breadCrumbStack=(a==null)?[]:a;pushToStack(c,this)};LineChart.prototype.drawChart=function(){var a=$("#"+this.params.canvas.containerId);a.empty();$(".tooltipdiv").remove();stretchCanvas(null,this.$container,this.params);this.canvas=createCanvas(this.params.canvas.containerId,this.params.canvas);stretchCanvas(this.canvas,this.$container,this.params);this.drawLines(this.originalData,this.canvas,this.params);refreshBreadCrumbs(this)};LineChart.prototype.addTransitionToCircle=function(b,a){b.transition().duration(1000).attr({r:a})};LineChart.prototype.drawLines=function(j,e,h){if(j==null||j.length==0){}var o=createDefaultParamsForGraph(h);var a=createDefaultParamsForLineChart(h.graph);o.graph=a;var q=new GraphDim(h);tooltip=new ToolTip();var k=this;var n=e.append("g");if(j==null||j.length==0){e.append("text").attr("class","pm-charts-no-draw").attr("y",q.height/2).attr("x",q.width/2).attr("dy","1.5em").style("text-anchor","end").text("No data to draw...");j=[{value:"0",datalabel:"None"}]}var f=j.map(function(r){return r.datalabel});var m=d3.max(j,function(r){return r.value*1});var p=d3.scale.ordinal().domain(f).rangePoints([q.left,q.right],0);var d=d3.scale.linear().domain([0,m]).range([q.bottom,q.top]).nice();drawAxisX(j,n,p,o);drawAxisY(j,n,d,o);drawLinesX(j,n,p,o);drawLinesY(j,n,d,o);var b=d3.svg.area().x(function(r){return p(r.datalabel)}).y0(q.bottom).y1(function(r){return d(r.value)});var c=d3.svg.line().x(function(r){return p(r.datalabel)}).y(function(r){return d(r.value)});if(o.graph.allowZoom){addZoomToCanvas(n)}j.forEach(function(r){r.value=+r.value});var i;if(o.canvas.exportTo!=null&&o.canvas.exportTo.length>0){addExportOptions($("#"+this.params.canvas.containerId),this.params.canvas.exportTo)}if(o.graph.allowTransition){i=j.map(function(r){return{datalabel:r.datalabel,value:0}})}else{i=j}n.append("path").attr("d",c(i)).attr("class",o.graph.line.css).transition().duration(3000).attr("d",c(j));if(o.graph.area.visible){var l=n.append("path");l.datum(i).attr("class",o.graph.area.css).attr("d",b)}n.selectAll("circle").data(i).enter().append("circle").attr("class",o.graph.marker.css).each(function(r){d3.select(this).attr({cx:p(r.datalabel),cy:d(r.value),r:o.graph.marker.ratio})});if(o.graph.showErrorBars){n.selectAll(".errorBar").data(i).enter().append("path").attr("class","errorBar").each(function(u){var v=u.dispersion/2;var t=p(u.datalabel);var s=d(u.value-v);var r=d(u.value+v);d3.select(this).attr("d","M"+t+","+s+"L"+t+","+r)});n.selectAll(".errorBarLowerMark").data(i).enter().append("path").attr("class","errorBarLowerMark").each(function(u){var v=u.dispersion/2;var t=p(u.datalabel);var s=d(u.value-v);var r=d(u.value+v);d3.select(this).attr("d","M"+(t-5)+","+s+"L"+(t+5)+","+s)});n.selectAll(".errorBarUpperMark").data(i).enter().append("path").attr("class","errorBarUpperMark").each(function(u){var v=u.dispersion/2;var t=p(u.datalabel);var s=d(u.value-v);var r=d(u.value+v);d3.select(this).attr("d","M"+(t-5)+","+r+"L"+(t+5)+","+r)})}if(o.graph.allowTransition){if(o.graph.area.visible){l.datum(j).transition().duration(3000).attr("d",b)}n.selectAll("circle").data(j).each(function(r){d3.select(this).transition().duration(3000).attr("class",o.graph.marker.css).attr({cx:p(r.datalabel),cy:d(r.value)})})}if(o.graph.showTip){n.selectAll("circle").data(j).on("mouseover",function(r){tooltip.show(function(){if(o.graph.showErrorBars){return{value:r.value+" (sdv = "+r.dispersion+")",datalabel:(("longlabel" in r)&&r.longlabel!=null&&r.longlabel!="")?r.longlabel:r.datalabel}}else{return tooltip.valuesToUse(r)}});k.addTransitionToCircle(d3.select(this),o.graph.marker.ratio+2)}).on("mouseout",function(){k.addTransitionToCircle(d3.select(this),o.graph.marker.ratio);if(o.graph.showTip){tooltip.hide()}})}if(this.params.graph.allowDrillDown){this.addOnClick(j,e);if(this.breadCrumbStack.length>0){var g=n.append("defs").append("svg:clipPath").attr("id","clip").append("svg:rect").attr("id","clip-rect").attr("x","0").attr("y","0").attr("width",50).attr("height",50).transition().duration(2000).attr("width",500).attr("height",500);d3.select("svg g").attr("clip-path","url(#clip)")}}};LineChart.prototype.addOnClick=function(arrayData,canvas){var currObj=this;canvas.selectAll("circle").data(arrayData).on("click",function(pointData){if(pointData.callBack!=null&&pointData.callBack.length!=""){var $container=$(canvas[0]).parent();$container.empty();$(".d3-tip").remove();var funCallBack=eval(pointData.callBack);funCallBack(pointData,currObj)}})};var PieChart=function(b,d,c,a){this.originalData=b;this.previousDataPoint=c;this.params=d;this.$container=$("#"+this.params.canvas.containerId);this.breadCrumbStack=(a==null)?[]:a;pushToStack(c,this)};PieChart.prototype.drawChart=function(){var a=$("#"+this.params.canvas.containerId);a.empty();$(".tooltipdiv").remove();stretchCanvas(null,this.$container,this.params);this.canvas=createCanvas(this.params.canvas.containerId,this.params.canvas);this.drawPie2D(this.originalData,this.canvas,this.params);refreshBreadCrumbs(this)};PieChart.prototype.drawPie2D=function(r,f,n){if(r==null||r.length==0){this.$container.html("<div class='pm-charts-no-draw'>"+n.canvas.noDataText+"</div>")}var k=createDefaultParamsForGraphPie(n);var w=k.canvas.width,u=k.canvas.height;tooltip=new ToolTip();if(k.graph.showLabels){u=u-50;w=w-150}var t=50,j=Math.min(w-t,u-t)/2,o=d3.layout.pie().sort(null).value(function(i){return i.value}),p=d3.svg.arc().outerRadius(j);var c=k.graph.colorPalette;var D=h(r);function h(i){return i.map(function(I,G){var H;if(G==k.graph.colorPalette.length){H="#000000"}else{H=c[G%k.graph.colorPalette.length]}var F=[];var E=c[G];return{datalabel:(I.datalabel),longlabel:(I.longlabel),value:(I.value*1),color:H,children:F,callBack:I.callBack,valuePrefix:I.valuePrefix,valueSuffix:I.valueSuffix}})}var q=0;for(var y=0;y<D.length;y++){q=q+D[y].value}var s=f.append("g");var v=s,b=v.append("svg:defs"),B=b.append("svg:radialGradient").attr("gradientUnits","userSpaceOnUse").attr("cx",0).attr("cy",0).attr("r",j).attr("fx",0).attr("fy",0).attr("id","master");arcGroup=v.append("svg:g").attr("class","arcGroup").attr("transform","translate("+(w/2)+","+(u/2)+")"),header=v.append("text").text("").attr("transform","translate(10, 20)").attr("class","header");if(k.graph.allowZoom){addZoomToCanvas(s)}function C(G,I){var E=D;if(I!=undefined){E=d(I);d3.select(".header").text("")}else{d3.select(".header").text("")}var i=b.selectAll(".gradient").data(E,function(J){return J.datalabel});i.enter().append("svg:radialGradient").attr("id",function(K,J){return"gradient"+J}).attr("class","gradient").attr("xlink:href","#master");i.append("svg:stop").attr("offset","0%").attr("stop-color",e);i.append("svg:stop").attr("offset","90%").attr("stop-color",e);i.append("svg:stop").attr("offset","100%").attr("stop-color",m);var H=arcGroup.selectAll("path").data(o(E),function(J){return J.data.datalabel});H.enter().append("svg:path").attr("class","sector");if(G.params.graph.allowDrillDown){G.addOnClick(D,H,f);if(G.breadCrumbStack.length>0){var F=s.append("defs").append("svg:clipPath").attr("id","clip").append("svg:rect").attr("id","clip-rect").attr("x","0").attr("y","0").attr("width",50).attr("height",50).transition().duration(2000).attr("width",500).attr("height",500);d3.select("svg g").attr("clip-path","url(#clip)")}}H.attr("fill",function(K,J){return"url(#gradient"+J+")"}).transition().duration(1000).attrTween("d",z).each("end",function(){this._listenToEvents=true});H.on("mouseover",function(L){if(this._listenToEvents){var K=L.startAngle+(L.endAngle-L.startAngle)/2;K=(K-(Math.PI/2))*-1;var J=Math.cos(K)*j*0.1;var M=Math.sin(K)*j*-0.1;d3.select(this).transition().duration(250).attr("transform","translate("+J+","+M+")")}if(k.graph.showTip){tooltip.show(function(){return tooltip.valuesToUse(L.data)})}}).on("mouseout",function(J){if(this._listenToEvents){d3.select(this).transition().duration(150).attr("transform","translate(0,0)")}if(k.graph.showTip){tooltip.hide()}});H.exit().transition().duration(1000).attrTween("d",A).remove()}function A(E){E.startAngle=E.endAngle=(2*Math.PI);var i=d3.interpolate(this._current,E);this._current=i(0);return function(F){return p(i(F))}}function z(E){var i=d3.interpolate({startAngle:0,endAngle:0},E);this._current=i(0);return function(F){return p(i(F))}}function e(E,i){return E.color}function m(E,i){return d3.rgb(e(E,i)).darker(0.7)}function d(i){for(y=-1;y++<D.length-1;){if(D[y].datalabel==i){return D[y].children}}return D}function x(i){return(Math.round(100*i/q*10)/10+"%")}C(this);if(k.graph.showLabels){var a=119*Math.log(k.canvas.height)-645;var g=s.append("g").attr("class","group5").attr("transform","translate(0,"+a+")");for(var y=0;y<D.length;y++){var l;if(y==k.graph.colorPalette.length){l="#000000"}else{l=c[y%k.graph.colorPalette.length]}g.append("circle").attr("r",9).attr("fill",l).attr("cx",w).attr("cy",(y*25))}g.selectAll("text").data(D).enter().append("text").attr("x",w+30).attr("class","legend").text(function(F,E){return(F.datalabel+"-"+x(F.value))}).attr("transform",function(F,E){return"translate(0,"+(E*25+5)+")"})}};PieChart.prototype.addOnClick=function(arrayData,paths,canvas){var currObj=this;paths.on("click",function(pieData){var pointData=pieData.data;if(pointData.callBack!=null&&pointData.callBack.length!=""){var $container=$(canvas[0]).parent();$container.empty();$(".tooltipdiv").remove();var funCallBack=eval(pointData.callBack);funCallBack(pointData,currObj)}})};var Pie3DChart=function(b,d,c,a){this.originalData=b;this.previousDataPoint=c;this.params=d;this.$container=$("#"+this.params.canvas.containerId);this.breadCrumbStack=(a==null)?[]:a;pushToStack(c,this)};Pie3DChart.prototype.drawChart=function(){var a=$("#"+this.params.canvas.containerId);a.empty();$(".tooltipdiv").remove();stretchCanvas(null,this.$container,this.params);this.canvas=createCanvas(this.params.canvas.containerId,this.params.canvas);this.drawPie3D(this.originalData,this.canvas,this.params);refreshBreadCrumbs(this)};Pie3DChart.prototype.drawPie3D=function(y,b,o){if(y==null||y.length==0){this.$container.html("<div class='pm-charts-no-draw'>"+o.canvas.noDataText+"</div>")}var v=0;var j=createDefaultParamsForGraphPie(o);var p=0;var x=j.canvas.height,q=j.canvas.width;for(var u=0;u<y.length;u++){p=p+y[u].value*1}if(j.graph.showLabels){x=x-50;q=q-150}var d=q/2;var k=(x/2-50);var m=q/2-j.graph.thickness;var l=x/2/2;var s=j.graph.colorPalette;var r=b.append("g").attr("transform","translate(0,0)");var f=r.append("g").attr("class","group4").attr("id","salesDonut").attr("transform","translate(7,0)");if(j.graph.allowTransition){var v=100}var g=null;if(j.graph.showTip){g=new ToolTip()}Donut3D.draw("salesDonut",e(),d,k,m,l,o.graph.thickness,o.graph.gapWidth,v,g,j,b,this);function t(h){return(Math.round(100*h/p*10)/10+"%")}function e(){return y.map(function(z,h){var w;if(h==j.graph.colorPalette.length){w="#000000"}else{w=s[h%j.graph.colorPalette.length]}return{label:(z.datalabel),datalabel:(z.datalabel),longlabel:(z.longlabel),value:(z.value*1),callBack:z.callBack,valuePrefix:z.valuePrefix,valueSuffix:z.valueSuffix,color:w}})}if(j.graph.allowZoom){addZoomToCanvas(r)}if(j.graph.showLabels){var a=119*Math.log(j.canvas.height)-645;var c=r.append("g").attr("class","group5").attr("transform","translate(0,"+a+")");for(var u=0;u<y.length;u++){var n;if(u==j.graph.colorPalette.length){n="#000000"}else{n=s[u%j.graph.colorPalette.length]}c.append("circle").attr("r",9).attr("fill",n).attr("cx",q).attr("cy",(u*25))}c.selectAll("text").data(y).enter().append("text").attr("x",q+30).attr("class","legend").text(function(w,h){return w.datalabel+" - "+t(w.value*1)}).on("mouseover",function(w,h){d3.select("#salesDonut")}).on("mouseout",function(z,h){var w;if(h==j.graph.colorPalette.length){w="#000000"}else{w=s[h%j.graph.colorPalette.length]}d3.select("#salesDonut").select(".topSlice"+h).style("fill",d3.hsl(w)).style("stroke",d3.hsl(w))}).attr("transform",function(w,h){return"translate(0,"+(h*25+5)+")"})}if(j.graph.useShadows){addShadow(f,"130%",5);f.select(".slices").attr("filter","url(#drop-shadow)")}};var RingChart=function(b,d,c,a){this.originalData=b;this.previousDataPoint=c;this.params=d;this.$container=$("#"+this.params.canvas.containerId);this.breadCrumbStack=(a==null)?[]:a;pushToStack(c,this)};RingChart.prototype.drawChart=function(){var a=$("#"+this.params.canvas.containerId);a.empty();$(".tooltipdiv").remove();stretchCanvas(null,this.$container,this.params);this.canvas=createCanvas(this.params.canvas.containerId,this.params.canvas);this.drawRing(this.originalData,this.canvas,this.params);refreshBreadCrumbs(this)};RingChart.prototype.drawRing=function(data,canvas,param){if(data==null||data.length==0){this.$container.html("<div class='pm-charts-no-draw'>"+param.canvas.noDataText+"</div>")}var parameter=createDefaultParamsForGraphRign(param);var h=parameter.canvas.height,w=parameter.canvas.width;var value=data[0].value;var ringColor=parameter.graph.ringColor;var labelColor=parameter.graph.labelColor;var label=data[0].datalabel;var diameter1=parameter.graph.diameter;var currObject=this;if(parameter.graph.allowZoom){addZoomToCanvas(canvas)}var rp1=radialProgress(canvas).label(label).diameter(diameter1).value(value).render();function radialProgress(canvas){var _data=null,_duration=0,_selection,_margin={top:20,right:0,bottom:30,left:20},__width=parameter.graph.diameter,__height=parameter.graph.diameter,_diameter,_label="",_fontSize=10;if(parameter.graph.allowTransition){_duration=1000}var _mouseClick;var _value=0,_minValue=0,_maxValue=100;var _currentArc=0,_currentArc2=0,_currentValue=0;var _arc=d3.svg.arc().startAngle(0*(Math.PI/180));var _arc2=d3.svg.arc().startAngle(0*(Math.PI/180)).endAngle(0);_selection=canvas;function component(){_selection.each(function(data){var svg=d3.select(this).selectAll("svg").data([data]);var enter=svg.enter().append("svg").attr("class","radial-svg").append("g");measure();svg.attr("width",__width).attr("height",__height);var background=enter.append("g").attr("class","component").attr("cursor","pointer");_arc.endAngle(360*(Math.PI/180));background.append("rect").attr("class","background").attr("width",_width).attr("height",_height);background.append("path").attr("transform","translate("+_width/2+","+_width/2+")").attr("d",_arc);if(currObject.params.graph.showLabel){background.append("text").attr("class","label").attr("transform","translate("+_width/2+","+(_height+25)+")").attr("fill",labelColor).text(_label)}var g=svg.select("g").attr("transform","translate("+_margin.left+","+_margin.top+")");_arc.endAngle(_currentArc);enter.append("g").attr("class","arcs");var path=svg.select(".arcs").selectAll(".arc").data(data);path.enter().append("path").attr("class","arc").attr("fill",ringColor).attr("transform","translate("+_width/2+","+_width/2+")").attr("d",_arc).on("click",function(){if(currObject.params.graph.allowDrillDown){var pointData=currObject.originalData[0];if(pointData.callBack!=null&&pointData.callBack.length!=""){var $container=$(canvas[0]).parent();$container.empty();$(".tooltipdiv").remove();var funCallBack=eval(pointData.callBack);funCallBack(pointData,currObject)}if(currObject.breadCrumbStack.length>0){var clip=canvas.append("defs").append("svg:clipPath").attr("id","clip").append("svg:rect").attr("id","clip-rect").attr("x","0").attr("y","0").attr("width",50).attr("height",50).transition().duration(2000).attr("width",500).attr("height",500);d3.select("svg g").attr("clip-path","url(#clip)")}}});var path2=svg.select(".arcs").selectAll(".arc2").data(data);path2.enter().append("path").attr("class","arc2").attr("transform","translate("+_width/2+","+_width/2+")").attr("d",_arc2);enter.append("g").attr("class","labels");var label=svg.select(".labels").selectAll(".label").data(data);label.enter().append("text").attr("class","label").attr("y",_width/2+_fontSize/3).attr("x",_width/2).attr("cursor","pointer").attr("width",_width).text(function(d){return Math.round((_value-_minValue)/(_maxValue-_minValue)*100)+"%"}).style("font-size",_fontSize+"px").on("click",onMouseClick);if(parameter.graph.useShadows){addShadow(enter,"150%",5);var path1=svg.selectAll(".arc").attr("filter","url(#drop-shadow)")}path.exit().transition().duration(500).attr("x",1000).remove();layout(svg);function layout(svg){var ratio=(_value-_minValue)/(_maxValue-_minValue);var endAngle=Math.min(360*ratio,360);endAngle=endAngle*Math.PI/180;path.datum(endAngle);path.transition().duration(_duration).attrTween("d",arcTween);if(ratio>1){path2.datum(Math.min(360*(ratio-1),360)*Math.PI/180);path2.transition().delay(_duration).duration(_duration).attrTween("d",arcTween2)}label.datum(Math.round(ratio*100));label.transition().duration(_duration).tween("text",labelTween)}});function onMouseClick(d){if(typeof _mouseClick=="function"){}}}function labelTween(a){var i=d3.interpolate(_currentValue,a);_currentValue=i(0);return function(t){_currentValue=i(t);this.textContent=Math.round(i(t))+"%"}}function arcTween(a){var i=d3.interpolate(_currentArc,a);return function(t){_currentArc=i(t);return _arc.endAngle(i(t))()}}function arcTween2(a){var i=d3.interpolate(_currentArc2,a);return function(t){return _arc2.endAngle(i(t))()}}function measure(){_width=_diameter-_margin.right-_margin.left-_margin.top-_margin.bottom;_height=_width;_fontSize=_width*0.2;_arc.outerRadius(_width/2);_arc.innerRadius(_width/2*(parameter.graph.gapWidth/100));_arc2.outerRadius(_width/2*0.85);_arc2.innerRadius(_width/2*0.85-(_width/2*0.15))}component.render=function(){measure();component();return component};component.value=function(_){if(!arguments.length){return _value}_value=[_];_selection.datum([_value]);return component};component.margin=function(_){if(!arguments.length){return _margin}_margin=_;return component};component.diameter=function(_){if(!arguments.length){return _diameter}_diameter=_;return component};component.minValue=function(_){if(!arguments.length){return _minValue}_minValue=_;return component};component.maxValue=function(_){if(!arguments.length){return _maxValue}_maxValue=_;return component};component.label=function(_){if(!arguments.length){return _label}_label=_;return component};component._duration=function(_){if(!arguments.length){return _duration}_duration=_;return component};component.onClick=function(_){if(!arguments.length){return _mouseClick}_mouseClick=_;return component};return component}};var ToolTip=function(a){this.template=a;if(a==null){this.template="<strong>Value: </strong><span style='color:orange'>%value%</span><br/><strong>Label: </strong><span style='color:orange'>%datalabel%</span>"}this.div=d3.select("body").append("div").attr("class","tooltipdiv").style("opacity",0).style("width","auto").style("height","auto")};ToolTip.prototype.show=function(c){var a={"%value%":c().value,"%datalabel%":c().datalabel};var b=this.template.replace(/%\w+%/g,function(d){return a[d]||d});this.div.transition().duration(200).style("opacity",0.9);this.div.html(b).style("left",(d3.event.pageX-50)+"px").style("top",(d3.event.pageY-55)+"px")};ToolTip.prototype.hide=function(){this.div.transition().duration(500).style("opacity",0)};ToolTip.prototype.valuesToUse=function(e){var a=(("valuePrefix" in e)&&e.valuePrefix!=null&&e.valuePrefix!="")?e.valuePrefix:"";var b=(("valueSuffix" in e)&&e.valueSuffix!=null&&e.valueSuffix!="")?e.valueSuffix:"";var c=(("longlabel" in e)&&e.longlabel!=null&&e.longlabel!="")?e.longlabel:e.datalabel;return{value:a+e.value+b,datalabel:c}};function drawVelocimeter(a,b){window.onload=function(){var s=[];var e=[];var r=0;var d=0;var z=0;var u="#107618";var g="#FFC900";var n="#EC4922";var q="#101010";var j="#1030B0";var y="#101560";var o="#EEEEEE";var h="303030";var m="101010";var p="000000";var l="7095F0";A(a,b);function A(i,B){t(i,B);c(dashContainer,25,"inbox","Inbox",72,145,90,{from:0,to:25},{from:25,to:50},{from:50,to:100});c(dashContainer,50,"cases","Cases",72,505,90,{from:0,to:25},{from:25,to:50},{from:50,to:100});c(dashContainer,100,"drafts","Drafts",72,860,90,{from:0,to:25},{from:25,to:50},{from:50,to:100})}function f(){if(r>=0){for(var i in s){s[i].redraw(r)}if(r===0){clearInterval(d);d=setInterval(f,75)}r=r+5;if(r>100){r=-1;clearInterval(d);d=setInterval(f,1000)}}else{for(var i in s){e[i]=e[i]+10*Math.random()-5;if(e[i]<0){e[i]=0}if(e[i]>100){e[i]=100}s[i].redraw(e[i])}}}function k(){w(this.selectedIndex);for(var i in s){s[i].dimDisplay(this.selectedIndex)}}function x(){var B={Day:0,Night:1};var i=d3.select("#dimmable").append("form").append("select").on("change",k);i.selectAll("option").data(d3.keys(B)).enter().append("option").text(function(D){return D});i.selectAll("option").data(d3.values(B)).attr("value",function(D){return D});var C=function(D){if(D===z){return d3.select(this).attr("selected","selected")}};i.selectAll("option").each(C)}function t(i,B){if(B.canvas.stretch){this.body=d3.select("#"+i).append("svg:svg").attr("width","100%").attr("height","98%").attr("viewBox","0 0 "+B.canvas.width+" "+180).attr("preserveAspectRatio","xMidYMid meet").attr("pointer-events","all")}else{this.body=d3.select("#"+i).append("svg:svg").attr("class","dash").attr("width",B.canvas.width).attr("height",B.canvas.height)}dashContainer=this.body.append("svg:g").attr("class","dashContainer").attr("width",404).attr("height",202);if(B.graph.allowZoom){addZoomToCanvas(dashContainer)}}function w(B){var i=d3.select("#dashboardContainer").selectAll("ellipse");i.style("fill",B<0.5?j:y)}function c(G,K,i,J,F,I,H,B,E,C){var D={size:120+F,cx:I,cy:H,label:J,minorTicks:5};D.redZones=[];D.redZones.push(B);D.yellowZones=[];D.yellowZones.push(E);D.greenZones=[];D.greenZones.push(C);s[i]=new v(G,i,D,K);s[i].render();e[i]=50}function v(i,C,E,D){this.name=C;this.myContainer=i;var B=this;this.configure=function(F){this.config=F;this.config.size=this.config.size*0.9;this.config.raduis=this.config.size*0.97/2;this.config.cx=this.config.cx;this.config.cy=this.config.cy;this.config.min=F.min||0;this.config.max=F.max||100;this.config.range=this.config.max-this.config.min;this.config.majorTicks=F.majorTicks||5;this.config.minorTicks=F.minorTicks||2;this.config.bezelColor=F.bezelColor||o;this.config.bezelDimColor=F.bezelDimColor||h;this.config.greenColor=F.greenColor||u;this.config.yellowColor=F.yellowColor||g;this.config.redColor=F.redColor||n;this.config.faceColor=F.faceColor||o;this.config.dimFaceColor=F.dimFaceColor||m;this.config.lightColor=F.lightColor||"#EEEEEE";this.config.greyColor=F.greyColor||"101010";this.config.lightBlueColor=F.lightBlueColor||"6085A0"};this.render=function(){this.body=this.myContainer.append("svg:svg").attr("class","gauge").attr("x",this.myContainer.x).attr("y",this.myContainer.y).attr("width",this.myContainer.width).attr("height",this.myContainer.height);this.body.append("svg:circle").attr("cx",this.config.cx).attr("cy",this.config.cy).attr("r",this.config.raduis).style("fill","#ccc").style("stroke",p).style("stroke-width","0.5px");this.body.append("svg:circle").attr("cx",this.config.cx).attr("cy",this.config.cy).attr("r",0.9*this.config.raduis).style("fill",(z<0.5?this.config.bezelColor:this.config.bezelDimColor)).style("stroke","#e0e0e0").style("stroke-width","2px");var I=this.body.append("svg:g").attr("class","faceContainer");var G=this.body.append("svg:g").attr("class","bandsContainer");var H=this.body.append("svg:g").attr("class","ticksContainer");this.redrawDimmableFace(z);var F=this.body.append("svg:g").attr("class","pointerContainer");this.drawPointer(D);F.append("svg:circle").attr("cx",this.config.cx).attr("cy",this.config.cy).attr("r",0.12*this.config.raduis).style("fill","#4684EE").style("stroke","#666").style("opacity",1)};this.drawBands=function(F){for(var G in this.config.greenZones){this.drawBand(F,this.config.greenZones[G].from,this.config.greenZones[G].to,B.config.greenColor)}for(var G in this.config.yellowZones){this.drawBand(F,this.config.yellowZones[G].from,this.config.yellowZones[G].to,B.config.yellowColor)}for(var G in this.config.redZones){this.drawBand(F,this.config.redZones[G].from,this.config.redZones[G].to,B.config.redColor)}};this.redrawDimmableFace=function(F){this.drawFace(F<0.5?B.config.faceColor:B.config.dimFaceColor,F<0.5?B.config.greyColor:l)};this.drawTicks=function(F,H){var Q=Math.round(this.config.size/16);var J=this.config.range/(this.config.majorTicks-1);for(var K=this.config.min;K<=this.config.max;K+=J){var G=J/this.config.minorTicks;for(var I=K+G;I<Math.min(K+J,this.config.max);I+=G){var P=this.valueToPoint(I,0.75);var O=this.valueToPoint(I,0.85);F.append("svg:line").attr("x1",P.x).attr("y1",P.y).attr("x2",O.x).attr("y2",O.y).style("stroke",H).style("stroke-width","1px")}var N=this.valueToPoint(K,0.7);var M=this.valueToPoint(K,0.85);F.append("svg:line").attr("x1",N.x).attr("y1",N.y).attr("x2",M.x).attr("y2",M.y).style("stroke",H).style("stroke-width","2px");if(K==this.config.min||K==this.config.max){var L=this.valueToPoint(K,0.63);F.append("svg:text").attr("x",L.x).attr("y",L.y).attr("dy",Q/3).attr("text-anchor",K==this.config.min?"start":"end").text(K).style("font-size",Q+"px").style("fill",H).style("stroke-width","0px")}}};this.redraw=function(F){this.drawPointer(F)};this.dimDisplay=function(F){this.redrawDimmableFace(F)};this.drawBand=function(H,I,F,G){if(0>=F-I){return}H.append("svg:path").style("fill",G).attr("d",d3.svg.arc().startAngle(this.valueToRadians(I)).endAngle(this.valueToRadians(F)).innerRadius(0.7*this.config.raduis).outerRadius(0.85*this.config.raduis)).attr("transform",function(){return"translate("+B.config.cx+", "+B.config.cy+") rotate(270)"})};this.drawFace=function(K,F){var Q=d3.svg.arc().startAngle(0).endAngle(2*Math.PI).innerRadius(0*this.config.raduis).outerRadius(0.9*this.config.raduis);var O=this.body.selectAll(".faceContainer");var J=this.body.selectAll(".bandsContainer");var H=this.body.selectAll(".ticksContainer");var G=this.body.selectAll(".pointerContainer");var M=O.selectAll("path");if(M==0){O.append("svg:path").attr("d",Q).style("fill",K).style("fill-opacity",0.7).attr("transform","translate("+B.config.cx+", "+B.config.cy+")");this.drawBands(J);this.drawTicks(H,F);var R=Math.round(this.config.size/9);O.append("svg:text").attr("x",this.config.cx).attr("y",this.config.cy-this.config.size/6-R/2).attr("dy",R/2).attr("text-anchor","middle").text(this.config.label).style("font-size",R+"px").style("fill",F).style("stroke-width","0px")}else{M.style("fill",K);var L=O.selectAll("text");L.style("fill",F);var P=G.selectAll("text");P.style("fill",F);var N=H.selectAll("line");N.style("stroke",F);var I=H.selectAll("text");I.style("fill",F)}};this.drawPointer=function(P){var Q=this.config.range/13;var N=this.valueToPoint(P,0.85);var O=this.valueToPoint(P-Q,0.12);var M=this.valueToPoint(P+Q,0.12);var H=P-(this.config.range*(1/(270/360))/2);var J=this.valueToPoint(H,0.28);var L=this.valueToPoint(H-Q,0.12);var K=this.valueToPoint(H+Q,0.12);var I=[N,O,K,J,L,M,N];var S=d3.svg.line().x(function(T){return T.x}).y(function(T){return T.y}).interpolate("basis");var G=this.body.select(".pointerContainer");var F=G.selectAll("path").data([I]);F.enter().append("svg:path").attr("d",S).style("fill","#dc3912").style("stroke","#c63310").style("fill-opacity",0.7);F.transition().attr("d",S).duration(r>=0?50:500);var R=Math.round(this.config.size/10);G.selectAll("text").data([P]).text(Math.round(P)).enter().append("svg:text").attr("x",this.config.cx).attr("y",this.config.cy+this.config.size/6+R).attr("dy",R/2).attr("text-anchor","middle").text(Math.round(P)).style("font-size",R+"px").style("fill","#000").style("stroke-width","0px")};this.valueToDegrees=function(F){return F/this.config.range*270-45};this.valueToRadians=function(F){return this.valueToDegrees(F)*Math.PI/180};this.valueToPoint=function(J,I){var G=this.config.raduis*I;var H=this.valueToRadians(J);var F={x:this.config.cx-G*Math.cos(H),y:this.config.cy-G*Math.sin(H)};return F};this.configure(E)}}}!function(){var Donut3D={};function pieTop(d,rx,ry,ir){d.endAngle=d.endAngle-0.001;if(d.endAngle-d.startAngle==0){return"M 0 0"}var sx=rx*Math.cos(d.startAngle),sy=ry*Math.sin(d.startAngle),ex=rx*Math.cos(d.endAngle),ey=ry*Math.sin(d.endAngle);var ret=[];ret.push("M",sx,sy,"A",rx,ry,"0",(d.endAngle-d.startAngle>Math.PI?1:0),"1",ex,ey,"L",ir*ex,ir*ey);ret.push("A",ir*rx,ir*ry,"0",(d.endAngle-d.startAngle>Math.PI?1:0),"0",ir*sx,ir*sy,"z");return ret.join(" ")}function pieOuter(d,rx,ry,h){var startAngle=(d.startAngle>Math.PI?Math.PI:d.startAngle);var endAngle=(d.endAngle>Math.PI?Math.PI:d.endAngle);var sx=rx*Math.cos(startAngle),sy=ry*Math.sin(startAngle),ex=rx*Math.cos(endAngle),ey=ry*Math.sin(endAngle);var ret=[];ret.push("M",sx,h+sy,"A",rx,ry,"0 0 1",ex,h+ey,"L",ex,ey,"A",rx,ry,"0 0 0",sx,sy,"z");return ret.join(" ")}function pieInner(d,rx,ry,h,ir){var startAngle=(d.startAngle<Math.PI?Math.PI:d.startAngle);var endAngle=(d.endAngle<Math.PI?Math.PI:d.endAngle);var sx=ir*rx*Math.cos(startAngle),sy=ir*ry*Math.sin(startAngle),ex=ir*rx*Math.cos(endAngle),ey=ir*ry*Math.sin(endAngle);var ret=[];ret.push("M",sx,sy,"A",ir*rx,ir*ry,"0 0 1",ex,ey,"L",ex,h+ey,"A",ir*rx,ir*ry,"0 0 0",sx,h+sy,"z");return ret.join(" ")}function getPercent(d){return(d.endAngle-d.startAngle>0.2?Math.round(1000*(d.endAngle-d.startAngle)/(Math.PI*2))/10+"%":"")}Donut3D.transition=function(id,data,rx,ry,h,ir){function arcTweenInner(a){var i=d3.interpolate(this._current,a);this._current=i(0);return function(t){return pieInner(i(t),rx+0.5,ry+0.5,h,ir)}}function arcTweenTop(a){var i=d3.interpolate(this._current,a);this._current=i(0);return function(t){return pieTop(i(t),rx,ry,ir)}}function arcTweenOuter(a){var i=d3.interpolate(this._current,a);this._current=i(0);return function(t){return pieOuter(i(t),rx-0.5,ry-0.5,h)}}function textTweenX(a){var i=d3.interpolate(this._current,a);this._current=i(0);return function(t){return 0.6*rx*Math.cos(0.5*(i(t).startAngle+i(t).endAngle))}}function textTweenY(a){var i=d3.interpolate(this._current,a);this._current=i(0);return function(t){return 0.6*rx*Math.sin(0.5*(i(t).startAngle+i(t).endAngle))}}var _data=d3.layout.pie().sort(null).value(function(d){return d.value})(data);d3.select("#"+id).selectAll(".innerSlice").data(_data).transition().duration(750).attrTween("d",arcTweenInner);d3.select("#"+id).selectAll(".topSlice").data(_data).transition().duration(750).attrTween("d",arcTweenTop);d3.select("#"+id).selectAll(".outerSlice").data(_data).transition().duration(750).attrTween("d",arcTweenOuter);d3.select("#"+id).selectAll(".percent").data(_data).transition().duration(750).attrTween("x",textTweenX).attrTween("y",textTweenY).text(getPercent)};Donut3D.draw=function(id,data,x,y,rx,ry,h,ir,dt,tip,parameter,canvas,currObj){var _data=d3.layout.pie().sort(null).value(function(d){return d.value})(data);var slices=d3.select("#"+id).append("g").attr("transform","translate("+x+","+y+")").attr("class","slices");slices.selectAll(".innerSlice").data(_data).enter().append("path").transition().delay(function(d,i){return i*dt}).duration(dt*5).attr("class","innerSlice").style("fill",function(d){return d3.hsl(d.data.color).darker(0.7)}).attr("d",function(d){return pieInner(d,rx+0.5,ry+0.5,h,ir)}).each(function(d){this._current=d});slices.selectAll(".topSlice").data(_data).enter().append("path").on("mouseover",function(d){if(parameter.graph.showTip){tip.show(function(){return tip.valuesToUse(d.data)})}}).on("mouseout",function(){if(parameter.graph.showTip){tip.hide()}}).on("click",function(d){if(parameter.graph.allowDrillDown){var pointData=d.data;if(pointData.callBack!=null&&pointData.callBack.length!=""){var $container=$(canvas[0]).parent();$container.empty();$(".tooltipdiv").remove();var funCallBack=eval(pointData.callBack);funCallBack(pointData,currObj)}}}).transition().delay(function(d,i){return i*dt}).duration(dt*5).attr("class",function(d,i){return"topSlice"+i}).style("fill",function(d){return d.data.color}).style("stroke",function(d){return d.data.color}).attr("d",function(d){return pieTop(d,rx,ry,ir)}).each(function(d){this._current=d});slices.selectAll(".outerSlice").data(_data).enter().append("path").transition().delay(function(d,i){return i*dt}).duration(dt*5).attr("class","outerSlice").style("fill",function(d){return d3.hsl(d.data.color).darker(0.7)}).attr("d",function(d){return pieOuter(d,rx-0.5,ry-0.5,h)}).each(function(d){this._current=d});slices.selectAll(".percent").data(_data).enter().append("text").transition().delay(function(d,i){return i*dt}).duration(dt*5).attr("class","percent").attr("x",function(d){return 0.6*rx*Math.cos(0.5*(d.startAngle+d.endAngle))}).attr("y",function(d){return 0.6*ry*Math.sin(0.5*(d.startAngle+d.endAngle))}).text(getPercent).each(function(d){this._current=d})};this.Donut3D=Donut3D}();
|