Resources/chartjs/plugins/chartjs-chart-pcp.js
2023-10-06 12:31:19 +00:00

2 lines
7.4 KiB
JavaScript

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("chart.js"),require("chart.js/helpers")):"function"==typeof define&&define.amd?define(["exports","chart.js","chart.js/helpers"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).ChartPCP={},t.Chart,t.Chart.helpers)}(this,(function(t,e,s){"use strict";const a={axis:"y",dummyOption:t=>0,axisWidth:10,position:"right"};class r extends e.LinearScale{constructor(){super({})}update(){const t=this.options.axisWidth,e={...this.getProps(["width","height","top","bottom","left","right"])},s=e.bottom-e.top;this.left=0,this.right=t,this.top=e.top,this.bottom=e.bottom;const a=super.update(t,s);return this.top=e.top,this.bottom=e.bottom,this.configure(),a}_computeLabelArea(){}draw(t){const e=t;e.save();const s=this.getProps(["x","width","height","top","bottom","left","right"]),a=this.options.axisWidth;"left"===this.options.position?e.translate(s.x-a,0):e.translate(s.x,0),super.draw(s),e.restore()}}r.id="linearAxis",r.defaults=s.merge({},[e.defaults.scale,e.LinearScale.defaults,a]),r.descriptors={_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t};class i extends e.LogarithmicScale{constructor(){super({})}_computeLabelArea(){}update(){return r.prototype.update.call(this)}draw(t){return r.prototype.draw.call(this,t)}}i.id="logarithmicAxis",i.defaults=s.merge({},[e.defaults.scale,e.LogarithmicScale.defaults,a]),i.descriptors=r.descriptors;class o extends e.Element{_getLineParts(t){const e=(t.y1-t.y)/(t.x1-t.x);return{d:t.y-t.x*e,k:e}}inRange(t,e,s){const a=this.getProps(["x","x1","y","y1"],s),r=this._getLineParts(a),i=t*r.k+r.d,o=(e-r.d)/r.k+r.d,n=2*this.options.borderWidth;return(Math.abs(e-i)<n||Math.abs(t-o)<n)&&t+n>=a.x&&t-n<=a.x1&&e+n>=Math.min(a.y,a.y1)&&e-n<=Math.max(a.y,a.y1)}tooltipPosition(t){const e=this.getProps(["x","x1","y","y1"],t);return{x:(e.x1+e.x)/2,y:(e.y1+e.y)/2,padding:this.options.borderWidth}}getCenterPoint(t){const e=this.getProps(["x","x1","y","y1"],t);return{x:(e.x1+e.x)/2,y:(e.y1+e.y)/2}}inXRange(t,e){const s=this.getProps(["x","x1"],e),a=2*this.options.borderWidth;return t+a>=s.x&&t-a<=s.x1}inYRange(t,e){const s=this.getProps(["y","y1"],e),a=2*this.options.borderWidth;return t+a>=Math.min(s.y,s.y1)&&t-a<=Math.max(s.y,s.y1)}draw(t){const e=this.getProps(["x","x1","y","y1","xCPn","yCPn","xCPp1","yCPp1"]),{options:s}=this;t.save(),t.lineCap=s.borderCapStyle,t.setLineDash(s.borderDash||[]),t.lineDashOffset=s.borderDashOffset,t.lineJoin=s.borderJoinStyle,t.lineWidth=s.borderWidth,t.strokeStyle=s.borderColor,t.beginPath(),t.moveTo(e.x,e.y),s.tension?t.bezierCurveTo(e.xCPn,e.yCPn,e.xCPp1,e.yCPp1,e.x1,e.y1):t.lineTo(e.x1,e.y1),t.stroke(),t.restore()}}o.id="lineSegment",o.defaults={...e.LineElement.defaults,hoverBorderWidth:4,hoverBorderColor:"rgba(0,0,0,0.8)",borderCapStyle:"round",tension:0},o.defaultRoutes=e.LineElement.defaultRoutes,o.descriptors=e.LineElement.descriptors;class n extends e.CategoryScale{getLabels(){const{datasets:t}=this.chart.data;return this.getMatchingVisibleMetas().map((e=>{var s;return null!==(s=t[e.index].label)&&void 0!==s?s:""}))}}function l(t,s,a,r=[],i=[]){e.registry.addControllers(a),Array.isArray(r)?e.registry.addElements(...r):e.registry.addElements(r),Array.isArray(i)?e.registry.addScales(...i):e.registry.addScales(i);const o=s;return o.type=t,o}n.id="pcp",n.defaults=e.CategoryScale.defaults;class d extends e.DatasetController{initialize(){super.initialize(),this.enableOptionSharing=!0}linkScales(){const t=this.getDataset();t.yAxisID=t.label,super.linkScales(),this._cachedMeta.vScale=this._cachedMeta.dataset,this._cachedMeta.vScale=this._cachedMeta.dataset}resolveAxisOptions(t){return this.resolveDatasetElementOptions(t)}addElements(){super.addElements();const t=this._cachedMeta,e=t.dataset;t.yScale=e,t.vScale=e,Object.assign(e,{id:t.yAxisID,type:this.datasetElementType.id,chart:this.chart,ctx:this.chart.ctx});const s=this.resolveAxisOptions("reset");Object.assign(s,{setContext:()=>0}),e.init(s)}update(t){const e=this._cachedMeta;if(e._metas=this.chart.getSortedVisibleDatasetMetas(),e._metaIndex=e._metas.indexOf(this._cachedMeta),e._metaIndex<0)return;const s=this._cachedMeta.dataset;s&&this.updateAxis(s,t);const a=this._cachedMeta.data||[];this.updateElements(a,0,a.length,t)}draw(){const t=this._cachedMeta,e=t,s=t.data||[],{ctx:a}=this.chart;e._metaIndex<0||(t.dataset&&t.dataset.draw(a),0!==t._metaIndex&&s.forEach((t=>{t.draw(a)})))}updateAxis(t,e){var s,a;const r=this._cachedMeta,i=r,o=null!==(a=null===(s=r.xScale)||void 0===s?void 0:s.getPixelForTick(i._metaIndex))&&void 0!==a?a:0,n=this.resolveDatasetElementOptions(e),l={x:o,top:this.chart.chartArea.top,bottom:this.chart.chartArea.bottom,options:{...n,position:i._metaIndex>0?"right":"left"}};super.updateElement(t,void 0,l,e),t.update()}updateElements(t,e,a,r){var i;const o="reset"===r,n=this._cachedMeta,l=this.resolveDataElementOptions(e,r),d={},h=null!==(i=this.getSharedOptions(l))&&void 0!==i?i:d,c=this.includeOptions(r,h),p=(t,e,s)=>{var a,r,i;const l=n._metas[t];if(!l)return s;const d=null!==(r=null===(a=this._cachedMeta.xScale)||void 0===a?void 0:a.getPixelForTick(t))&&void 0!==r?r:0,h=l.vScale,c=o?null==h?void 0:h.getBasePixel():null==h?void 0:h.getPixelForValue(l._parsed[e][null!==(i=null==h?void 0:h.axis)&&void 0!==i?i:"y"],e);return{x:d,y:null==c||Number.isNaN(c)?s.y:c}};this.updateSharedOptions(h,r,l);for(let i=e;i<e+a;i+=1){const e=h===d?this.resolveDataElementOptions(i,r):h,a=p(n._metaIndex,i,{x:0,y:0}),o=p(n._metaIndex-1,i,a),l={x:o.x,y:o.y,x1:a.x,y1:a.y};if(e.tension){const t=p(n._metaIndex-2,i,o),r=p(n._metaIndex+1,i,a),d=s.splineCurve(t,o,a,e.tension),h=s.splineCurve(o,a,r,e.tension);l.xCPn=d.next.x,l.yCPn=d.next.y,l.xCPp1=h.previous.x,l.yCPp1=h.previous.y}c&&(l.options=e),this.updateElement(t[i],i,l,r)}}_findOtherControllers(){return this.chart.getSortedVisibleDatasetMetas().filter((t=>t.controller!==this&&t.controller instanceof d))}removeBaseHoverStyle(t,e,s){super.removeHoverStyle(t,e,s)}removeHoverStyle(t,e,s){super.removeHoverStyle(t,e,s),this._findOtherControllers().forEach((t=>{t.controller.removeBaseHoverStyle(t.data[s],t.index,s)}))}setBaseHoverStyle(t,e,s){super.setHoverStyle(t,e,s)}setHoverStyle(t,e,s){super.setHoverStyle(t,e,s),this._findOtherControllers().forEach((t=>{t.controller.setBaseHoverStyle(t.data[s],t.index,s)}))}}d.id="pcp",d.defaults={datasetElementType:r.id,dataElementType:o.id,animations:{numbers:{type:"number",properties:["x","y","x1","y1","axisWidth","xCPn","yCPn","xCPp1","yCPp1","borderWidth"]}}},d.overrides={scales:{x:{type:n.id,offset:!0,grid:{drawBorder:!1,display:!1}}},plugins:{tooltip:{callbacks:{title:()=>"",label(t){var e,s;return`${null===(s=null===(e=t.chart.data)||void 0===e?void 0:e.labels)||void 0===s?void 0:s[t.dataIndex]}(${t.chart.getSortedVisibleDatasetMetas().map((e=>`${e.label}=${e.controller.getDataset().data[t.dataIndex]}`)).join(", ")})`}}}}};class h extends e.Chart{constructor(t,e){super(t,l("pcp",e,d,[r,o],n))}}h.id=d.id;class c extends d{}c.id="logarithmicPcp",c.defaults={...d.defaults,datasetElementType:i.id},c.overrides=d.overrides;class p extends e.Chart{constructor(t,e){super(t,l("logarithmicPcp",e,c,[i,o],n))}}p.id=c.id,e.registry.addControllers(d,c),e.registry.addElements(o,r,i),e.registry.addScales(n),t.LineSegment=o,t.LinearAxis=r,t.LogarithmicAxis=i,t.LogarithmicParallelCoordinatesChart=p,t.LogarithmicParallelCoordinatesController=c,t.PCPScale=n,t.ParallelCoordinatesChart=h,t.ParallelCoordinatesController=d}));