UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 4.52 kB
import Base from'./input-base';import{getMouseCoordinate,isFirefox}from'../../../fc-core/src/lib';var UNDEF,min=Math.min,abs=Math.abs,getRectDimension=function(a,b,c,d){b.x<c.x&&(b.x=c.x),b.y<c.y&&(b.y=c.y),b.x>c.width+c.x&&(b.x=c.width+c.x),b.y>c.height+c.y&&(b.y=c.height+c.y);var e,f=b.x-a.x,g=a.y-b.y,h=min(a.x,b.x),i=min(a.y,b.y);return 0<f&&0<g?e=d?'ne-resize':'e-resize':0>f&&0<g?e=d?'nw-resize':'w-resize':0>f&&0>g?e=d?'sw-resize':'w-resize':0<f&&0>g&&(e=d?'se-resize':'e-resize'),f=abs(f),g=abs(g),{x:h,y:i,width:f,height:g,cursor:e}};class InputDragZoom extends Base{constructor(){super();var a=this;a.controlArr=[{nativeInteraction:['fc-dragstart'],callback:a.dragStart.bind(a),component:a},{nativeInteraction:['fc-dragmove'],callback:a.onDrag.bind(a),component:a},{nativeInteraction:['fc-dragend'],callback:a.onDragEnd.bind(a),component:a}],isFirefox&&a.controlArr.push({nativeInteraction:['fc-mousedown'],callback:InputDragZoom.mousedown,component:a}),a._toggle=function(){a._checkStackLen()&&a.toggle()}}getName(){return'dragZoomIn'}configure(){super.configure();var a=this,b=a.getLinkedParent(),c=a.config;c.boxStyle=c.boxStyle||{"stroke-width":1,stroke:'red',fill:'#00FF00',opacity:.2,cursor:'ne-resize'},a.config.skipGraphics||a.setLinkedItem('button',a.createButton({icon:'zoomModeIcon',tooltext:a.config.tooltext,handlers:{click:a._toggle},state:'activated'})),a.enable('pressed'),b.registerDependancy([{derivedInteraction:['pinenabled','pindisabled','panenabled','pandisabled'],callback:a.dependancyFn,component:a}])}static mousedown(a){a&&a.preventDefault()}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')}getCoordinates(a){var b=this.getFromEnv('chart'),c=getMouseCoordinate(b.getFromEnv('chart-container'),a,b);return{x:c.chartX,y:c.chartY}}inCanvasLimit(a){var b=this.getFromEnv('canvas').getGraphicalElement('canvasElement').attrs,c=b.x,d=b.y,e=a.x-b.x,f=a.y-b.y,g=b.width-e,h=b.height-f;return a.x>c&&a.y>d&&a.width<g&&a.height<h}drawBox(){var a,b=this,c=b.config,d=b.getGraphicalElement('box'),e=b.getFromEnv('paper'),f=b.getFromEnv('canvas').getGraphicalElement('canvasElement').attrs;d||(d=b.addGraphicalElement('box',e.rect()),d.attr(c.boxStyle)),a=getRectDimension(b.dragBoxConfig.startPos,b.dragBoxConfig.currentPos,f,b.getFromEnv('chart').isXY),c.scaleX||(a.x=f.x,a.width=f.width),c.scaleY||(a.y=f.y,a.height=f.height),d.attr(a),d.show()}onDragEnd(a){var b,c,d,e,f=this,g=f.config,h=f.getFromEnv('canvas').getGraphicalElement('canvasElement').attrs,i=f.getGraphicalElement('box')||{},j=i.attrs;j&&g.dragmove&&(g.dragmove=!1,i.hide(),g.startPosX=b=(j.x-h.x)/h.width,g.endPosX=c=(j.x+j.width-h.x)/h.width,g.startPosY=d=(j.y-h.y)/h.height,g.endPosY=e=(j.y+j.height-h.y)/h.height,.01>c-b||.01>e-d||f.zoomTo(UNDEF,UNDEF,a))}zoomTo(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=l.getFromEnv('axesObArr'),n=l.config,o=!1,p={},q=n.catZoomLimit-1;m.forEach(function(m){var r=Math.round,s=m.axis,t=s.getVisibleConfig(),u=m.isY?t.maxValue:t.minValue,v=t.maxValue-t.minValue;m.isY?(g=d=a===UNDEF?u-v*n.endPosY:a,i=e=b===UNDEF?u-n.startPosY*v:b):(h=d=a===UNDEF?u+n.startPosX*v:a,j=e=b===UNDEF?u+v*n.endPosX:b,p=l.constructor._getZoomInfo(h,j,s)),q&&!s.config.isVertical&&r(e-d)<q&&(d=r(d),e=d+q),(1<v||1<e-d)&&(n.dragendFn&&'function'==typeof n.dragendFn&&n.dragendFn(c,d,e),k=s.setVisibleConfig(d,e),o=o||k,m.stack.push(t),f=m.stack.length+1)}),o&&l._raiseZoomEvents('zoomin','zoomedin',Object.assign(p,{level:f,startX:h,endX:j,startY:g,endY:i},{originalEvent:c&&c.originalEvent}))}onDrag(a){var b=this,c=b.config,d=b.getCoordinates(a.originalEvent);c.dragmove=!0,this.getFromEnv('animationManager').setAnimationState('drag'),c.dragmoveFn&&'function'==typeof c.dragmoveFn&&c.dragmoveFn(a),b.dragBoxConfig.currentPos=d,b.drawBox()}dragStart(a){var b=this,c=b.config,d=b.getCoordinates(a.originalEvent);c.dragstartFn&&'function'==typeof c.dragstartFn&&c.dragstartFn(a),b.dragBoxConfig={startPos:d,currentPos:d}}enable(){var a=this;!0!==a.config.enabled&&(a.config.enabled=!0,a.config.state='pressed',a.fireEvent('dragzoomenabled'),a.setControl())}disable(){var a=this;!1!==a.config.enabled&&(a.config.enabled=!1,a.config.state='activated',a.fireEvent('dragzoomdisabled'),a.setControl())}dependancyFn(a){'pinenabled'===a.type||'panenabled'===a.type?this.disable():('pindisabled'===a.type||'pandisabled'===a.type)&&this.enable()}}export default InputDragZoom;