UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 2.64 kB
import Base from'./input-base';import{getMouseCoordinate}from'../../../fc-core/src/lib';var correctZoomRatio=function(a){return 0>a?-a:a},max=Math.max,min=Math.min,getZoomRange=function(a,b,c,d,e){var f=Math.round,g=a.getVisibleConfig(),h=a.getValue(b[d?'y':'x']+a.getTranslation()),i=h-g.minValue,j=g.maxValue-h,k=a.config.axisRange;return{min:f(max(k.min,h-i/c)*e)/e,max:f(min(k.max,h+j/c)*e)/e}};class InputPinchZoom extends Base{constructor(){super();var a=this;a.controlArr=[{nativeInteraction:['fc-pinchstart'],callback:a.pinchstart.bind(a),component:a},{nativeInteraction:['fc-pinchmove'],callback:a.pinchmove.bind(a),component:a}]}getName(){return'pinchZoom'}configure(){super.configure(),this.enable()}getCenter(a,b){var c=this.getFromEnv('chart'),d=getMouseCoordinate(c.getLinkedItem('container'),{pageX:(a.pageX+b.pageX)/2,pageY:(a.pageY+b.pageY)/2},c);return{x:d.chartX,y:d.chartY}}pinchmove(a){var b,c,d,e,f,g,h,i,j=this,k=a.originalEvent.data,l=k.distanceX,m=k.distanceY,n=j.config,o=n.touchConfig,p={},q=!1,r={},s=j.getFromEnv('chart'),t=j.getFromEnv('axesObArr'),u=Math.pow(10,n.zoomDecimalLimit)||1,v=s.getChildContainer().plotGroup;b=correctZoomRatio(l/o.distanceX),c=correctZoomRatio(m/o.distanceY),t.forEach(function(){v.transform(''),v.scale(b,c,o.center.x,o.center.y)}),clearTimeout(n.chartDraw),n.chartDraw=setTimeout(function(){v.transform(''),t.forEach(function(a){var k=a.axis,l=getZoomRange(k,o.center,a.isY?c:b,a.isY,u),m=l.min,n=l.max,s=a.stack,t=k.getVisibleConfig(),v=k.getLimit(),w=s.length-1,x=s[w],y=Math.floor(m)===v.min&&Math.ceil(n)===v.max,z=k.getZoom()>=u;if(!x)y||z||(s.push(t),p.zoomin=!0);else if(y)a.stack=[],p.zoomout=!0;else if(x.minValue>m&&x.maxValue<n){for(;x&&x.minValue>m&&x.maxValue<n;)s.pop(),x=s[--w];p.zoomout=!0}else z||(s.push(t),p.zoomin=!0);a.isY?(g=m,h=n):(e=m,f=n,r=j.constructor._getZoomInfo(e,f,k)),i=a.stack.length+1,d=k.setVisibleConfig(m,n),q=q||d}),q&&(p.zoomout&&j._raiseZoomEvents('zoomout','zoomedout',Object.assign(r,{level:i,startX:e,endX:f,startY:g,endY:h})),p.zoomin&&j._raiseZoomEvents('zoomin','zoomedin',Object.assign(r,{level:i,startX:e,endX:f,startY:g,endY:h}))),n.chartDraw=null},250)}pinchstart(a){var b,c=this,d=c.getFromEnv('axesObArr'),e=a.originalEvent.data,f=e;this.getFromEnv('animationManager').setAnimationState('touch'),f.center=c.getCenter(e.finger0,e.finger1),c.config.touchConfig=e,d.forEach(function(a){b=a.axis,a.visibleConfig=b.getVisibleConfig(),a.centerVal=b.getValue(a.isY?f.center.y:f.center.x)})}setControl(){var a=this,b=a.getLinkedParent(),c=a.controlArr;b.releaseControl(c),a.isEnabled()&&b.getControl(c)}}export default InputPinchZoom;