vtenext/include/chartjs/Chart.HorizontalBar.min.js
2021-04-28 20:10:26 +02:00

1 line
9.1 KiB
JavaScript

(function(){"use strict";var t=this.Chart,i=t.helpers;t.HorizontalRectangle=t.Element.extend({draw:function(){var t=this.ctx,i=this.height/2,e=this.y-i,s=this.y+i,a=this.left-(this.left-this.x),l=this.strokeWidth/2;this.showStroke&&(e+=l,s-=l,a+=l),t.beginPath(),t.fillStyle=this.fillColor,t.strokeStyle=this.strokeColor,t.lineWidth=this.strokeWidth,t.moveTo(this.left,e),t.lineTo(a,e),t.lineTo(a,s),t.lineTo(this.left,s),t.fill(),this.showStroke&&t.stroke()},inRange:function(t,i){return t>=this.left&&t<=this.x&&i>=this.y-this.height/2&&i<=this.y+this.height/2}}),t.Type.extend({name:"HorizontalBar",defaults:{scaleBeginAtZero:!0,scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,scaleShowHorizontalLines:!0,scaleShowVerticalLines:!0,barShowStroke:!0,barStrokeWidth:2,barValueSpacing:5,barDatasetSpacing:1,legendTemplate:'<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>'},initialize:function(e){var s=this.options;this.ScaleClass=t.Scale.extend({offsetGridLines:!0,calculateBarX:function(t,i,e){var a=this.calculateBaseWidth(),l=this.calculateX(e)-a/2,h=this.calculateBarWidth(t);return l+h*i+i*s.barDatasetSpacing+h/2},calculateBaseWidth:function(){return this.calculateX(1)-this.calculateX(0)-2*s.barValueSpacing},calculateBarWidth:function(t){return(this.calculateBaseWidth()-(t-1)*s.barDatasetSpacing)/t},calculateBaseHeight:function(){return(this.endPoint-this.startPoint)/this.yLabels.length-2*s.barValueSpacing},calculateBarHeight:function(t){return(this.calculateBaseHeight()-t*s.barDatasetSpacing)/t},calculateXInvertXY:function(t){var i=(this.width-Math.round(this.xScalePaddingLeft)-this.xScalePaddingRight)/(this.max-this.min);return Math.round(this.xScalePaddingLeft)+i*(t-this.min)},calculateYInvertXY:function(t){return t*((this.startPoint-this.endPoint)/this.yLabels.length)},calculateBarY:function(t,i,e){var a=this.calculateBaseHeight(),l=this.endPoint+this.calculateYInvertXY(e)-a/2-5,h=this.calculateBarHeight(t);return t>1&&(l=l+h*(i-1)-i*s.barDatasetSpacing+h/2),l},buildCalculatedLabels:function(){this.calculatedLabels=[];for(var t=i.getDecimalPlaces(this.stepValue),e=0;e<=this.steps;e++)this.calculatedLabels.push(i.template(this.templateString,{value:(this.min+e*this.stepValue).toFixed(t)}))},buildYLabels:function(){this.buildYLabelCounter=void 0===this.buildYLabelCounter?0:this.buildYLabelCounter+1,this.buildCalculatedLabels(),0===this.buildYLabelCounter&&(this.yLabels=this.xLabels),this.xLabels=this.calculatedLabels,this.yLabelWidth=this.display&&this.showLabels?i.longestText(this.ctx,this.font,this.yLabels)+10:0},calculateX:function(t){this.xLabelRotation;var i=(this.width-(this.xScalePaddingLeft+this.xScalePaddingRight))/(this.steps-(this.offsetGridLines?0:1)),e=i*t+this.xScalePaddingLeft;return this.offsetGridLines&&(e+=i/2),Math.round(e)},draw:function(){var t=this.ctx,e=(this.endPoint-this.startPoint)/this.yLabels.length,s=Math.round(this.xScalePaddingLeft);this.display&&(t.fillStyle=this.textColor,t.font=this.font,i.each(this.yLabels,function(a,l){var h=this.endPoint-e*l,o=Math.round(h),n=this.showHorizontalLines;h-=e/2,t.textAlign="right",t.textBaseline="middle",this.showLabels&&t.fillText(a,s-10,h),0!==l||n||(n=!0),n&&t.beginPath(),l>0?(t.lineWidth=this.gridLineWidth,t.strokeStyle=this.gridLineColor):(t.lineWidth=this.lineWidth,t.strokeStyle=this.lineColor),o+=i.aliasPixel(t.lineWidth),n&&(t.moveTo(s,o),t.lineTo(this.width,o),t.stroke(),t.closePath()),t.lineWidth=this.lineWidth,t.strokeStyle=this.lineColor,t.beginPath(),t.moveTo(s-5,o),t.lineTo(s,o),t.stroke(),t.closePath()},this),i.each(this.xLabels,function(e,s){var a=this.calculateX(1)-this.calculateX(0),l=this.calculateX(s)+i.aliasPixel(this.lineWidth)-a/2,h=this.calculateX(s-(this.offsetGridLines?.5:0))+i.aliasPixel(this.lineWidth),o=this.xLabelRotation>0;t.beginPath(),s>0?(t.lineWidth=this.gridLineWidth,t.strokeStyle=this.gridLineColor):(t.lineWidth=this.lineWidth,t.strokeStyle=this.lineColor),t.moveTo(h,this.endPoint),t.lineTo(h,this.startPoint-3),t.stroke(),t.closePath(),t.lineWidth=this.lineWidth,t.strokeStyle=this.lineColor,t.beginPath(),t.moveTo(h,this.endPoint),t.lineTo(h,this.endPoint+5),t.stroke(),t.closePath(),t.save(),t.translate(l,o?this.endPoint+12:this.endPoint+8),t.rotate(-1*i.radians(this.xLabelRotation)),t.font=this.font,t.textAlign=o?"right":"center",t.textBaseline=o?"middle":"top",t.fillText(e,0,0),t.restore()},this))}}),this.datasets=[],this.options.showTooltips&&i.bindEvents(this,this.options.tooltipEvents,function(t){var e="mouseout"!==t.type?this.getBarsAtEvent(t):[];this.eachBars(function(t){t.restore(["fillColor","strokeColor"])}),i.each(e,function(t){t.fillColor=t.highlightFill,t.strokeColor=t.highlightStroke}),this.showTooltip(e)}),this.BarClass=t.HorizontalRectangle.extend({strokeWidth:this.options.barStrokeWidth,showStroke:this.options.barShowStroke,ctx:this.chart.ctx}),i.each(e.datasets,function(t,s){var a={label:t.label||null,fillColor:t.fillColor,strokeColor:t.strokeColor,bars:[]};this.datasets.push(a),i.each(t.data,function(i,s){a.bars.push(new this.BarClass({value:i,label:e.labels[s],datasetLabel:t.label,anchor:e.anchors?e.anchors[s]:null,strokeColor:"object"==typeof t.strokeColor?t.strokeColor[s]:t.strokeColor,fillColor:"object"==typeof t.fillColor?t.fillColor[s]:t.fillColor,highlightFill:t.highlightFill?"object"==typeof t.highlightFill?t.highlightFill[s]:t.highlightFill:"object"==typeof t.fillColor?t.fillColor[s]:t.fillColor,highlightStroke:t.highlightStroke?"object"==typeof t.highlightStroke?t.highlightStroke[s]:t.highlightStroke:"object"==typeof t.strokeColor?t.strokeColor[s]:t.strokeColor}))},this)},this),this.buildScale(e.labels),this.BarClass.prototype.left=Math.round(this.scale.xScalePaddingLeft),this.eachBars(function(t,e,s){i.extend(t,{x:Math.round(this.scale.xScalePaddingLeft),y:this.scale.calculateBarY(this.datasets.length,s,e),height:this.scale.calculateBarHeight(this.datasets.length)}),t.save()},this),this.render()},update:function(){this.scale.update(),i.each(this.activeElements,function(t){t.restore(["fillColor","strokeColor"])}),this.eachBars(function(t){t.save()}),this.render()},eachBars:function(t){i.each(this.datasets,function(e,s){i.each(e.bars,t,this,s)},this)},getBarsAtEvent:function(t){for(var e,s=[],a=i.getRelativePosition(t),l=function(t){s.push(t.bars[e])},h=0;h<this.datasets.length;h++)for(e=0;e<this.datasets[h].bars.length;e++)if(this.datasets[h].bars[e].inRange(a.x,a.y))return i.each(this.datasets,l),s;return s},buildScale:function(t){var e=this,s={templateString:this.options.scaleLabel,height:this.chart.height,width:this.chart.width,ctx:this.chart.ctx,textColor:this.options.scaleFontColor,fontSize:this.options.scaleFontSize,fontStyle:this.options.scaleFontStyle,fontFamily:this.options.scaleFontFamily,valuesCount:t.length,beginAtZero:this.options.scaleBeginAtZero,integersOnly:this.options.scaleIntegersOnly,calculateYRange:function(t){var s,a=i.calculateScaleRange((s=[],e.eachBars(function(t){s.push(t.value)}),s),t,this.fontSize,this.beginAtZero,this.integersOnly);i.extend(this,a)},xLabels:t,font:i.fontString(this.options.scaleFontSize,this.options.scaleFontStyle,this.options.scaleFontFamily),lineWidth:this.options.scaleLineWidth,lineColor:this.options.scaleLineColor,showHorizontalLines:this.options.scaleShowHorizontalLines,showVerticalLines:this.options.scaleShowVerticalLines,gridLineWidth:this.options.scaleShowGridLines?this.options.scaleGridLineWidth:0,gridLineColor:this.options.scaleShowGridLines?this.options.scaleGridLineColor:"rgba(0,0,0,0)",padding:this.options.showScale?0:this.options.barShowStroke?this.options.barStrokeWidth:0,showLabels:this.options.scaleShowLabels,display:this.options.showScale};this.options.scaleOverride&&i.extend(s,{calculateYRange:i.noop,steps:this.options.scaleSteps,stepValue:this.options.scaleStepWidth,min:this.options.scaleStartValue,max:this.options.scaleStartValue+this.options.scaleSteps*this.options.scaleStepWidth}),this.scale=new this.ScaleClass(s)},addData:function(t,e){i.each(t,function(t,i){this.datasets[i].bars.push(new this.BarClass({value:t,label:e,x:this.scale.calculateBarX(this.datasets.length,i,this.scale.valuesCount+1),y:this.scale.endPoint,width:this.scale.calculateBarWidth(this.datasets.length),base:this.scale.endPoint,strokeColor:this.datasets[i].strokeColor,fillColor:this.datasets[i].fillColor}))},this),this.scale.addXLabel(e),this.update()},removeData:function(){this.scale.removeXLabel(),i.each(this.datasets,function(t){t.bars.shift()},this),this.update()},reflow:function(){i.extend(this.BarClass.prototype,{y:this.scale.endPoint,base:this.scale.endPoint});var t=i.extend({height:this.chart.height,width:this.chart.width});this.scale.update(t)},draw:function(t){var e=t||1;this.clear();this.chart.ctx;this.scale.draw(e),i.each(this.datasets,function(t,s){i.each(t.bars,function(t,i){t.hasValue()&&(t.left=Math.round(this.scale.xScalePaddingLeft),t.transition({x:this.scale.calculateXInvertXY(t.value),y:this.scale.calculateBarY(this.datasets.length,s,i),height:this.scale.calculateBarHeight(this.datasets.length)},e).draw())},this)},this)}})}).call(this);