quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 3.15 kB
JavaScript
import Base from'./input-base';import{isFirefox,UNDEF}from'../../../fc-core/src/lib';var fetchCoordFromEvent=function(a){return(a.originalEvent&&(a=a.originalEvent),a.type.match(/touch/))?{x:a.touches[0].pageX,y:a.touches[0].pageY}:a.type.match(/mouse|pointer/)?{x:a.pageX,y:a.pageY}:void 0},isSingleFinger=function(a){return!a.touches||1===a.touches.length},getDiffValXY=function(c,a){return{x:c.x-a.x,y:c.y-a.y}};class InputPan extends Base{constructor(){super();var a=this;a.controlArr=[{nativeInteraction:['fc-dragstart','fc-dragmove'],callback:a.onDrag.bind(a),component:a},{nativeInteraction:['fc-dragend'],callback:a.onDragEnd.bind(a),component:a}],a.toggle=a.toggle.bind(a),isFirefox&&a.controlArr.push({nativeInteraction:['fc-mousedown'],callback:InputPan.mousedown,component:a})}static mousedown(a){a&&a.preventDefault()}configure(){super.configure();var a=this,b=a.config;b.skipGraphics||a.setLinkedItem('button',a.createButton({icon:'panModeIcon',tooltext:a.config.tooltext,handlers:{click:a.toggle},state:'activated'})),a.getLinkedParent().registerDependancy([{derivedInteraction:['zoomin','zoomout','dragzoomenabled','dragzoomdisabled'],callback:a.dependancyFn,component:a}]),a.disable(UNDEF,!1)}getName(){return'dragPan'}enable(a,b){var c=this;c._checkStackLen()&&!0!==c.config.enabled&&(c.config.enabled=!0,c.config.state='pressed',c.fireEvent('panenabled'),!b&&c.getFromEnv('chart').fireChartInstanceEvent('zoommodechanged',{panModeActive:!0},a&&a.originalEvent),c.setControl())}disable(a,b){var c=this;!1!==c.config.enabled&&(c.config.enabled=!1,c.config.state=c._checkStackLen()?'activated':'disabled',c.fireEvent('pandisabled'),!b&&c.getFromEnv('chart').fireChartInstanceEvent('zoommodechanged',{panModeActive:!1},a&&a.originalEvent),c.setControl())}setControl(){var a=this,b=a.getLinkedParent(),c=a.getLinkedItem('button'),d=a.controlArr;b.releaseControl(d),a.isEnabled()&&b.getControl(d),c&&c.setCurrentState(a.isEnabled()?a.config.state:'disabled')}setDrag(a){this.config.isDragging=!!a}isDragging(){return!!this.config.isDragging}onDragEnd(){this.setDrag(!1),this.getFromEnv('chart').getContainer('parentgroup').attr({cursor:'default'})}onDrag(a){var b,c,d,e,f,g,h,i,j,k,l,m=this,n=fetchCoordFromEvent(a.originalEvent);isSingleFinger(a.originalEvent)&&(m.getFromEnv('chart').getContainer('parentgroup').attr({cursor:'move'}),this.getFromEnv('animationManager').setAnimationState('drag'),m.isDragging()?m.getFromEnv('axesObArr').forEach(function(a){var m=Math.min;if(b=a.origConfig.minValue,c=a.origConfig.maxValue,f=a.axis,g=f.config.axisRange,h=f.getScale(),i=h.getRange(),j=h.getDomain(),k=(i[1]-i[0])/(j[1]-j[0]),l=getDiffValXY(n,a.startCoord),e=c-b,d=a.isY?l.y/k:l.x/k,d=-d,0<d)d=m(g.max-c,d);else if(0>d)d=-m(b-g.min,-d);else return;b+=d,c=b+e,f.setVisibleConfig(b,c)}):(m.getFromEnv('axesObArr').forEach(function(a){a.origConfig=a.axis.getVisibleConfig(),a.startCoord=n}),m.setDrag(!0)))}dependancyFn(a){var b=this;'zoomout'===a.type?!b._checkStackLen()&&b.disable():'zoomin'===a.type?b.enable(a):'dragzoomdisabled'===a.type?b._checkStackLen()&&b.enable(a):'dragzoomenabled'===a.type&&b.disable(a)}}export default InputPan;