UNPKG

@fusioncharts/features

Version:

FusionCharts JavaScript charting framework

1 lines 4.69 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.default=void 0;var _inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _inputBase=_interopRequireDefault(require("./input-base"));var _lib=require("@fusioncharts/core/src/lib");var CHART_DRAW_TIMEOUT=250;var correctZoomRatio=function correctZoomRatio(val){if(val<0){return-val}return val},getZoomRange=function getZoomRange(axis,center,zoomTimes,isY,zoomLimit){var visibleRange=axis.getVisibleConfig(),val=axis.getValue(center[isY?"y":"x"]+axis.getTranslation()),left=val-visibleRange.minValue,right=visibleRange.maxValue-val,range=axis.config.axisRange;return{min:Math.round(Math.max(range.min,val-left/zoomTimes)*zoomLimit)/zoomLimit,max:Math.round(Math.min(range.max,val+right/zoomTimes)*zoomLimit)/zoomLimit}};var InputPinchZoom=function(_Base){function InputPinchZoom(){var _this;_this=_Base.call(this)||this;var input=_this;input.controlArr=[{nativeInteraction:["fc-pinchstart"],callback:input.pinchstart.bind(input),component:input},{nativeInteraction:["fc-pinchmove"],callback:input.pinchmove.bind(input),component:input}];return _this}(0,_inheritsLoose2.default)(InputPinchZoom,_Base);var _proto=InputPinchZoom.prototype;_proto.getName=function getName(){return"pinchZoom"};_proto.configure=function configure(){_Base.prototype.configure.call(this);this.enable()};_proto.getCenter=function getCenter(touch1,touch2){var chart=this.getFromEnv("chart"),coord=(0,_lib.getMouseCoordinate)(chart.getLinkedItem("container"),{pageX:(touch1.pageX+touch2.pageX)/2,pageY:(touch1.pageY+touch2.pageY)/2},chart);return{x:coord.chartX,y:coord.chartY}};_proto.pinchmove=function pinchmove(e){var input=this,data=e.originalEvent.data,distanceX=data.distanceX,distanceY=data.distanceY,config=input.config,touchConfig=config.touchConfig,zoomRatioX,zoomRatioY,events={},zoomed=false,axisZoomed,startX,endX,eventArgs={},startY,endY,chart=input.getFromEnv("chart"),axesObArr=input.getFromEnv("axesObArr"),level,zoomLimit=Math.pow(10,config.zoomDecimalLimit)||1,container=chart.getChildContainer().plotGroup;zoomRatioX=correctZoomRatio(distanceX/touchConfig.distanceX);zoomRatioY=correctZoomRatio(distanceY/touchConfig.distanceY);axesObArr.forEach((function(){container.transform("");container.scale(zoomRatioX,zoomRatioY,touchConfig.center.x,touchConfig.center.y)}));clearTimeout(config.chartDraw);config.chartDraw=setTimeout((function(){container.transform("");axesObArr.forEach((function(axisOb){var axis=axisOb.axis,zoomRange=getZoomRange(axis,touchConfig.center,axisOb.isY?zoomRatioY:zoomRatioX,axisOb.isY,zoomLimit),min=zoomRange.min,max=zoomRange.max,stack=axisOb.stack,visibleConfig=axis.getVisibleConfig(),axisLimits=axis.getLimit(),stackLength=stack.length-1,lastState=stack[stackLength],isNoZoom=Math.floor(min)===axisLimits.min&&Math.ceil(max)===axisLimits.max,isMaxZoomed=axis.getZoom()>=zoomLimit;if(lastState){if(isNoZoom){axisOb.stack=[];events.zoomout=true}else if(lastState.minValue>min&&lastState.maxValue<max){while(lastState&&lastState.minValue>min&&lastState.maxValue<max){stack.pop();lastState=stack[--stackLength]}events.zoomout=true}else{if(!isMaxZoomed){stack.push(visibleConfig);events.zoomin=true}}}else if(!isNoZoom){if(!isMaxZoomed){stack.push(visibleConfig);events.zoomin=true}}if(axisOb.isY){startY=min;endY=max}else{startX=min;endX=max;eventArgs=input.constructor._getZoomInfo(startX,endX,axis)}level=axisOb.stack.length+1;axisZoomed=axis.setVisibleConfig(min,max);zoomed=zoomed||axisZoomed}));if(zoomed){events.zoomout&&input._raiseZoomEvents("zoomout","zoomedout",Object.assign(eventArgs,{level:level,startX:startX,endX:endX,startY:startY,endY:endY}));events.zoomin&&input._raiseZoomEvents("zoomin","zoomedin",Object.assign(eventArgs,{level:level,startX:startX,endX:endX,startY:startY,endY:endY}))}config.chartDraw=null}),CHART_DRAW_TIMEOUT)};_proto.pinchstart=function pinchstart(e){var input=this,axis,data=e.originalEvent.data,touchConfig=data;this.getFromEnv("animationManager").setAnimationState("touch");touchConfig.center=input.getCenter(data.finger0,data.finger1);input.config.touchConfig=data;input.getFromEnv("axesObArr").forEach((function(axisOb){axis=axisOb.axis;axisOb.visibleConfig=axis.getVisibleConfig();axisOb.centerVal=axis.getValue(axisOb.isY?touchConfig.center.y:touchConfig.center.x)}))};_proto.setControl=function setControl(){var input=this,manager=input.getLinkedParent(),controlArr=input.controlArr;manager.releaseControl(controlArr);if(input.isEnabled()){manager.getControl(controlArr)}};return InputPinchZoom}(_inputBase.default);var _default=exports.default=InputPinchZoom;