| 1 |
- angular.module("angularCharts",["angularChartsTemplates"]),angular.module("angularCharts").directive("acChart",["$templateCache","$compile","$rootElement","$window","$timeout","$sce",function(a,b,c,d,e,f){function g(){for(var a="0123456789ABCDEF".split(""),b="#",c=0;6>c;c++)b+=a[Math.round(15*Math.random())];return b}function h(a,b){var c=null;for(var d in a)if(angular.isElement(a[d])&&(c=angular.element(a[d]),c.hasClass(b)))return c;return c}function i(c,i){function j(){m(),k(),l();var a=n(L);a(),x()}function k(){if(!B.legend.display)return H=D,void(I=C);switch(B.legend.position){case"top":case"bottom":H=.75*D,I=C;break;case"left":case"right":H=D,I=.5*C}}function l(){var d=a.get("angularChartsTemplate_"+B.legend.position);i.html(d),b(i.contents())(c);var e=i.find("div");J=h(e,"ac-chart"),K=h(e,"ac-legend"),H-=h(e,"ac-title")[0].clientHeight}function m(){E=c.acData,L=c.acChart,F=E?E.series||[]:[],G=E?E.data||[]:[],c.acConfig&&angular.extend(B,c.acConfig)}function n(a){var b={pie:s,bar:p,line:q,area:r,point:t};return b[a]}function o(a,b){var c=b.domain();if(B.xAxisMaxTicks&&c.length>B.xAxisMaxTicks){var d=Math.ceil(c.length/B.xAxisMaxTicks);a.tickValues(c.filter(function(a,b){return b%d===0}))}}function p(){var a={top:0,right:20,bottom:30,left:40};I-=a.left+a.right,H-=a.top+a.bottom;var b=d3.scale.ordinal().rangeRoundBands([0,I],.1),d=d3.scale.linear().range([H,10]),e=d3.scale.ordinal().rangeRoundBands([0,I],.1),f=[0];G.forEach(function(a){a.nicedata=a.y.map(function(b,c){return f.push(b),{x:a.x,y:b,s:c,tooltip:angular.isArray(a.tooltip)?a.tooltip[c]:a.tooltip}})});var g=d3.max(G.map(function(a){return a.y.length}));c.yMaxData=g,b.domain(G.map(function(a){return a.x}));var h=.2*d3.max(f);d.domain([d3.min(f),d3.max(f)+h]),e.domain(d3.range(g)).rangeRoundBands([0,b.rangeBand()]);var i=d3.svg.axis().scale(b).orient("bottom");o(i,b);var j=d3.svg.axis().scale(d).orient("left").ticks(10).tickFormat(d3.format("s")),k=d3.select(J[0]).append("svg").attr("width",I+a.left+a.right).attr("height",H+a.top+a.bottom).append("g").attr("transform","translate("+a.left+","+a.top+")");k.append("g").attr("class","x axis").attr("transform","translate(0,"+H+")").call(i),k.append("g").attr("class","y axis").call(j);var l=k.selectAll(".state").data(G).enter().append("g").attr("class","g").attr("transform",function(a){return"translate("+b(a.x)+",0)"}),m=l.selectAll("rect").data(function(a){return a.nicedata}).enter().append("rect");m.attr("width",e.rangeBand()),m.attr("x",function(a,b){return e(b)}).attr("y",H).style("fill",function(a){return A(a.s)}).attr("height",0).transition().ease("cubic-in-out").duration(B.isAnimate?1e3:0).attr("y",function(a){return d(Math.max(0,a.y))}).attr("height",function(a){return Math.abs(d(a.y)-d(0))}),m.on("mouseover",function(a){u({index:a.x,value:a.tooltip?a.tooltip:a.y,series:F[a.s]},d3.event),B.mouseover(a,d3.event),c.$apply()}).on("mouseleave",function(a){v(),B.mouseout(a,d3.event),c.$apply()}).on("mousemove",function(a){w(a,d3.event)}).on("click",function(a){B.click.call(a,d3.event),c.$apply()}),B.labels&&l.selectAll("not-a-class").data(function(a){return a.nicedata}).enter().append("text").attr("x",function(a,b){return e(b)}).attr("y",function(a){return H-Math.abs(d(a.y)-d(0))}).text(function(a){return a.y}),k.append("line").attr("x1",I).attr("y1",d(0)).attr("y2",d(0)).style("stroke","silver")}function q(){function a(a){return Math.round(d(a))+d.rangeBand()/2}var b={top:0,right:40,bottom:20,left:40};I-=b.left+b.right,H-=b.top+b.bottom;var d=d3.scale.ordinal().domain(G.map(function(a){return a.x})).rangeRoundBands([0,I]),e=d3.scale.linear().range([H,10]),f=d3.svg.axis().scale(d).orient("bottom");o(f,d);var g=d3.svg.axis().scale(e).orient("left").ticks(5).tickFormat(d3.format("s")),h=d3.svg.line().interpolate(B.lineCurveType).x(function(b){return a(b.x)}).y(function(a){return e(a.y)}),i=[0],j=[];G.forEach(function(a){a.y.map(function(a){i.push(a)})});var k=d3.max(G.map(function(a){return a.y.length}));c.yMaxData=k,F.slice(0,k).forEach(function(a,b){var c={};c.series=a,c.values=G.map(function(a){return a.y.map(function(b){return{x:a.x,y:b,tooltip:a.tooltip}})[b]||{x:G[b].x,y:0}}),j.push(c)});var l=d3.select(J[0]).append("svg").attr("width",I+b.left+b.right).attr("height",H+b.top+b.bottom).append("g").attr("transform","translate("+b.left+","+b.top+")"),m=.2*d3.max(i);e.domain([d3.min(i),d3.max(i)+m]),l.append("g").attr("class","x axis").attr("transform","translate(0,"+H+")").call(f),l.append("g").attr("class","y axis").call(g);var n=l.selectAll(".points").data(j).enter().append("g"),p=n.attr("points","points").append("path").attr("class","ac-line").style("stroke",function(a,b){return A(b)}).attr("d",function(a){return h(a.values)}).attr("stroke-width","2").attr("fill","none");if(j.length>0){var q=j[j.length-1].values;if(q.length>0){var r=p.node().getTotalLength()+a(q[q.length-1].x);p.attr("stroke-dasharray",r+" "+r).attr("stroke-dashoffset",r).transition().duration(B.isAnimate?1500:0).ease("linear").attr("stroke-dashoffset",0).attr("d",function(a){return h(a.values)})}}return angular.forEach(j,function(b){var d=l.selectAll(".circle").data(b.values).enter();d.append("circle").attr("cx",function(b){return a(b.x)}).attr("cy",function(a){return e(a.y)}).attr("r",3).style("fill",A(j.indexOf(b))).style("stroke",A(j.indexOf(b))).on("mouseover",function(a){return function(b){u({index:b.x,value:b.tooltip?b.tooltip:b.y,series:a},d3.event),B.mouseover(b,d3.event),c.$apply()}}(b.series)).on("mouseleave",function(a){v(),B.mouseout(a,d3.event),c.$apply()}).on("mousemove",function(){w(d3.event)}).on("click",function(a){B.click(a,d3.event),c.$apply()}),B.labels&&d.append("text").attr("x",function(b){return a(b.x)}).attr("y",function(a){return e(a.y)}).text(function(a){return a.y})}),"lineEnd"===B.lineLegend&&n.append("text").datum(function(a){return{name:a.series,value:a.values[a.values.length-1]}}).attr("transform",function(b){return"translate("+a(b.value.x)+","+e(b.value.y)+")"}).attr("x",3).text(function(a){return a.name}),j}function r(){function a(a){return Math.round(d(a))+d.rangeBand()/2}var b={top:0,right:40,bottom:20,left:40};I-=b.left+b.right,H-=b.top+b.bottom;var d=d3.scale.ordinal().domain(G.map(function(a){return a.x})).rangePoints([0,I]),e=d3.scale.linear().range([H,10]),f=d3.svg.axis().scale(d).orient("bottom");o(f,d);var g=d3.svg.axis().scale(e).orient("left").ticks(5).tickFormat(d3.format("s"));d3.svg.line().interpolate(B.lineCurveType).x(function(b){return a(b.x)}).y(function(a){return e(a.y)});var h=[0],i=[];G.forEach(function(a){a.y.map(function(a){h.push(a)})});var j=d3.max(G.map(function(a){return a.y.length}));c.yMaxData=j,F.slice(0,j).forEach(function(a,b){var c={};c.series=a,c.values=G.map(function(a){return a.y.map(function(b){return{x:a.x,y:b}})[b]||{x:G[b].x,y:0}}),i.push(c)});var k=d3.select(J[0]).append("svg").attr("width",I+b.left+b.right).attr("height",H+b.top+b.bottom).append("g").attr("transform","translate("+b.left+","+b.top+")"),l=.2*d3.max(h);e.domain([d3.min(h),d3.max(h)+l]),k.append("g").attr("class","x axis").attr("transform","translate(0,"+H+")").call(f),k.append("g").attr("class","y axis").call(g);var m=k.selectAll(".points").data(i).enter().append("g"),n=d3.svg.area().interpolate("basis").x(function(b){return a(b.x)}).y0(function(){return e(0)}).y1(function(a){return e(0+a.y)});m.append("path").attr("class","area").attr("d",function(a){return n(a.values)}).style("fill",function(a,b){return A(b)}).style("opacity","0.7")}function s(){function a(a){a.innerRadius=0;var b=d3.interpolate({startAngle:0,endAngle:0},a);return function(a){return g(b(a))}}var b=Math.min(I,H)/2,d=d3.select(J[0]).append("svg").attr("width",I).attr("height",H).append("g").attr("transform","translate("+I/2+","+H/2+")"),e=0;if(B.innerRadius){var f=B.innerRadius;f="string"==typeof f&&f.indexOf("%")>0?.01*b*parseFloat(f):Number(f),f>=0&&(e=f)}c.yMaxData=G.length;var g=d3.svg.arc().outerRadius(b-10).innerRadius(e);d3.svg.arc().outerRadius(b+5).innerRadius(0);var h=d3.layout.pie().sort(null).value(function(a){return a.y[0]}),i=d.selectAll(".arc").data(h(G)).enter().append("g"),j=!1;i.append("path").style("fill",function(a,b){return A(b)}).transition().ease("linear").duration(B.isAnimate?500:0).attrTween("d",a).attr("class","arc").each("end",function(){j||(j=!0,i.on("mouseover",function(a){u({value:a.data.tooltip?a.data.tooltip:a.data.y[0]},d3.event),d3.select(this).select("path").transition().duration(200).style("stroke","white").style("stroke-width","2px"),B.mouseover(a,d3.event),c.$apply()}).on("mouseleave",function(a){d3.select(this).select("path").transition().duration(200).style("stroke","").style("stroke-width",""),v(),B.mouseout(a,d3.event),c.$apply()}).on("mousemove",function(a){w(a,d3.event)}).on("click",function(a){B.click(a,d3.event),c.$apply()}))}),B.labels&&i.append("text").attr("transform",function(a){return"translate("+g.centroid(a)+")"}).attr("dy",".35em").style("text-anchor","middle").text(function(a){return a.data.y[0]})}function t(){function a(a){return Math.round(d(a))+d.rangeBand()/2}var b={top:0,right:40,bottom:20,left:40};I-=b.left-b.right,H-=b.top-b.bottom;var d=d3.scale.ordinal().domain(G.map(function(a){return a.x})).rangeRoundBands([0,I]),e=d3.scale.linear().range([H,10]),f=d3.svg.axis().scale(d).orient("bottom");o(f,d);var g=d3.svg.axis().scale(e).orient("left").ticks(5).tickFormat(d3.format("s")),h=[0],i=[];G.forEach(function(a){a.y.map(function(a){h.push(a)})});var j=d3.max(G.map(function(a){return a.y.length}));c.yMaxPoints=j,F.slice(0,j).forEach(function(a,b){var c={};c.series=a,c.values=G.map(function(a){return a.y.map(function(b){return{x:a.x,y:b}})[b]||{x:G[b].x,y:0}}),i.push(c)});var k=d3.select(J[0]).append("svg").attr("width",I+b.left+b.right).attr("height",H+b.top+b.bottom).append("g").attr("transform","translate("+b.left+","+b.top+")"),l=.2*d3.max(h);e.domain([d3.min(h),d3.max(h)+l]),k.append("g").attr("class","x axis").attr("transform","translate(0,"+H+")").call(f),k.append("g").attr("class","y axis").call(g),k.selectAll(".points").data(i).enter().append("g"),angular.forEach(i,function(b){var d=k.selectAll(".circle").data(b.values).enter();d.append("circle").attr("cx",function(b){return a(b.x)}).attr("cy",function(a){return e(a.y)}).attr("r",3).style("fill",A(i.indexOf(b))).style("stroke",A(i.indexOf(b))).on("mouseover",function(a){return function(b){u({index:b.x,value:b.tooltip?b.tooltip:b.y,series:a},d3.event),B.mouseover(b,d3.event),c.$apply()}}(b.series)).on("mouseleave",function(a){v(),B.mouseout(a,d3.event),c.$apply()}).on("mousemove",function(){w(d3.event)}).on("click",function(a){B.click(a,d3.event),c.$apply()}),B.labels&&d.append("text").attr("x",function(b){return a(b.x)}).attr("y",function(a){return e(a.y)}).text(function(a){return a.y})})}function u(a,b){if(B.tooltips){a="function"==typeof B.tooltips?B.tooltips(a):a.value;var d=angular.element('<p class="ac-tooltip"></p>').html(a).css({left:b.pageX+20+"px",top:b.pageY-30+"px"});angular.element(document.querySelector(".ac-tooltip")).remove(),angular.element(document.body).append(d),c.$tooltip=d}}function v(){c.$tooltip&&c.$tooltip.remove()}function w(a){c.$tooltip&&c.$tooltip.css({left:a.pageX+20+"px",top:a.pageY-30+"px"})}function x(){c.legends=[],"pie"===L&&angular.forEach(G,function(a,b){c.legends.push({color:B.colors[b],title:z(a.x)})}),("bar"===L||"area"===L||"point"===L||"line"===L&&"traditional"===B.lineLegend)&&angular.forEach(F,function(a,b){c.legends.push({color:B.colors[b],title:z(a)})})}function y(a){return String(a).replace(/[&<>"'\/]/g,function(a){return M[a]})}function z(a){return f.trustAsHtml(B.legend.htmlEnabled?a:y(a))}function A(a){if(a<B.colors.length)return B.colors[a];var b=g();return B.colors.push(b),b}var B={title:"",tooltips:!0,labels:!1,mouseover:function(){},mouseout:function(){},click:function(){},legend:{display:!0,position:"left",htmlEnabled:!1},colors:[],innerRadius:0,lineLegend:"lineEnd",lineCurveType:"cardinal",isAnimate:!0},C=i[0].clientWidth,D=i[0].clientHeight;if(0===D||0===C)throw new Error("Please set height and width for the chart element");var E,F,G,H,I,J,K,L,M={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},N=angular.element(d),O=null;N.bind("resize",function(){O&&e.cancel(O),O=e(function(){C=i[0].clientWidth,D=i[0].clientHeight,j()},100)}),c.getWindowDimensions=function(){return{h:N[0].clientHeight,w:N[0].clientWidth}},c.$watch("[acChart, acData, acConfig]",j,!0),c.$watch(function(){return{w:i[0].clientWidth,h:i[0].clientHeight}},function(a){C=a.w,D=a.h,j()},!0)}return{restrict:"EA",link:i,transclude:"true",scope:{acChart:"=",acData:"=",acConfig:"="}}}]),function(){var a=".angular-charts-template .axis path,.angular-charts-template .axis line{fill:none;stroke:#333}.angular-charts-template .ac-title{font-weight:700;font-size:1.2em}.angular-charts-template .ac-chart{float:left;width:50%}.angular-charts-template .ac-line{fill:none;stroke-width:2px}.angular-charts-template table{float:left;max-width:25%;list-style:none;margin:0;padding:0}.angular-charts-template td[ng-bind]{display:inline-block}.angular-charts-template .ac-legend-box{border-radius:5px;height:15px;width:15px}.ac-tooltip{display:block;position:absolute;border:2px solid rgba(51,51,51,.9);background-color:rgba(22,22,22,.7);border-radius:5px;padding:5px;color:#fff}",b=document.createElement("style");if(document.getElementsByTagName("head")[0].appendChild(b),b.styleSheet)b.styleSheet.disabled||(b.styleSheet.cssText=a);else try{b.innerHTML=a}catch(c){b.innerText=a}}(),angular.module("angularChartsTemplates",["angularChartsTemplate_left","angularChartsTemplate_right"]),angular.module("angularChartsTemplate_left",[]).run(["$templateCache",function(a){a.put("angularChartsTemplate_left",'<div class="angular-charts-template"><div class="ac-title">{{acConfig.title}}</div><div class="ac-legend" ng-show="{{acConfig.legend.display}}"><table><tr ng-repeat="l in legends"><td><div class="ac-legend-box" ng-attr-style="background:{{l.color}};"></div></td><td ng-bind-html="l.title"></td></tr></table></div><div class="ac-chart"></div></div>')}]),angular.module("angularChartsTemplate_right",[]).run(["$templateCache",function(a){a.put("angularChartsTemplate_right",'<div class="angular-charts-template"><div class="ac-title">{{acConfig.title}}</div><div class="ac-chart"></div><div class="ac-legend" ng-show="{{acConfig.legend.display}}"><table><tr ng-repeat="l in legends | limitTo:yMaxData"><td><div class="ac-legend-box" ng-attr-style="background:{{l.color}};"></div></td><td ng-bind-html="l.title"></td></tr></table></div></div>')}]);
|