1 line
8.6 KiB
JavaScript
1 line
8.6 KiB
JavaScript
|
define("echarts/chart/funnel",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Polygon","../config","../util/ecData","../util/number","zrender/tool/util","zrender/tool/color","zrender/tool/area","../chart"],function(t){function e(t,e,s,o,a){i.call(this,t,e,s,o,a),this.refresh(o)}var i=t("./base"),s=t("zrender/shape/Text"),o=t("zrender/shape/Line"),a=t("zrender/shape/Polygon"),n=t("../config");n.funnel={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,x:10,y:80,x2:10,y2:60,min:0,max:100,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",itemStyle:{normal:{borderColor:"#fff",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:10,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0},labelLine:{show:!0}}}};var r=t("../util/ecData"),h=t("../util/number"),l=t("zrender/tool/util"),d=t("zrender/tool/color"),p=t("zrender/tool/area");return e.prototype={type:n.CHART_TYPE_FUNNEL,_buildShape:function(){var t=this.series,e=this.component.legend;this._paramsMap={},this._selected={},this.selectedMap={};for(var i,s=0,o=t.length;o>s;s++)if(t[s].type===n.CHART_TYPE_FUNNEL){if(t[s]=this.reformOption(t[s]),this.legendHoverLink=t[s].legendHoverLink||this.legendHoverLink,i=t[s].name||"",this.selectedMap[i]=e?e.isSelected(i):!0,!this.selectedMap[i])continue;this._buildSingleFunnel(s),this.buildMark(s)}this.addShapeList()},_buildSingleFunnel:function(t){var e=this.component.legend,i=this.series[t],s=this._mapData(t),o=this._getLocation(t);this._paramsMap[t]={location:o,data:s};for(var a,n=0,r=[],l=0,d=s.length;d>l;l++)a=s[l].name,this.selectedMap[a]=e?e.isSelected(a):!0,this.selectedMap[a]&&!isNaN(s[l].value)&&(r.push(s[l]),n++);if(0!==n){for(var p,c,u,g,f=this._buildFunnelCase(t),y=i.funnelAlign,m=i.gap,_=n>1?(o.height-(n-1)*m)/n:o.height,x=o.y,v="descending"===i.sort?this._getItemWidth(t,r[0].value):h.parsePercent(i.minSize,o.width),b="descending"===i.sort?1:0,S=o.centerX,z=[],l=0,d=r.length;d>l;l++)if(a=r[l].name,this.selectedMap[a]&&!isNaN(r[l].value)){switch(p=d-2>=l?this._getItemWidth(t,r[l+b].value):"descending"===i.sort?h.parsePercent(i.minSize,o.width):h.parsePercent(i.maxSize,o.width),y){case"left":c=o.x;break;case"right":c=o.x+o.width-v;break;default:c=S-v/2}u=this._buildItem(t,r[l]._index,e?e.getColor(a):this.zr.getColor(r[l]._index),c,x,v,p,_,y),x+=_+m,g=u.style.pointList,z.unshift([g[0][0]-10,g[0][1]]),z.push([g[1][0]+10,g[1][1]]),0===l&&(0===v?(g=z.pop(),"center"==y&&(z[0][0]+=10),"right"==y&&(z[0][0]=g[0]),z[0][1]-="center"==y?10:15,1==d&&(g=u.style.pointList)):(z[z.length-1][1]-=5,z[0][1]-=5)),v=p}f&&(z.unshift([g[3][0]-10,g[3][1]]),z.push([g[2][0]+10,g[2][1]]),0===v?(g=z.pop(),"center"==y&&(z[0][0]+=10),"right"==y&&(z[0][0]=g[0]),z[0][1]+="center"==y?10:15):(z[z.length-1][1]+=5,z[0][1]+=5),f.style.pointList=z)}},_buildFunnelCase:function(t){var e=this.series[t];if(this.deepQuery([e,this.option],"calculable")){var i=this._paramsMap[t].location,s=10,o={hoverable:!1,style:{pointListd:[[i.x-s,i.y-s],[i.x+i.width+s,i.y-s],[i.x+i.width+s,i.y+i.height+s],[i.x-s,i.y+i.height+s]],brushType:"stroke",lineWidth:1,strokeColor:e.calculableHolderColor||this.ecTheme.calculableHolderColor||n.calculableHolderColor}};return r.pack(o,e,t,void 0,-1),this.setCalculable(o),o=new a(o),this.shapeList.push(o),o}},_getLocation:function(t){var e=this.series[t],i=this.zr.getWidth(),s=this.zr.getHeight(),o=this.parsePercent(e.x,i),a=this.parsePercent(e.y,s),n=null==e.width?i-o-this.parsePercent(e.x2,i):this.parsePercent(e.width,i);return{x:o,y:a,width:n,height:null==e.height?s-a-this.parsePercent(e.y2,s):this.parsePercent(e.height,s),centerX:o+n/2}},_mapData:function(t){function e(t,e){return"-"===t.value?1:"-"===e.value?-1:e.value-t.value}function i(t,i){return-e(t,i)}for(var s=this.series[t],o=l.clone(s.data),a=0,n=o.length;n>a;a++)o[a]._index=a;return"none"!=s.sort&&o.sort("descending"===s.sort?e:i),o},_buildItem:function(t,e,i,s,o,a,n,h,l){var d=this.series,p=d[t],c=p.data[e],u=this.getPolygon(t,e,i,s,o,a,n,h,l);r.pack(u,d[t],t,d[t].data
|