UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 4.42 kB
import ToolTip from'./tooltip-component';import{getTouchEvent as touchSafeEvent,getScalingValue,getPosition,getMouseCoordinate,isSimilarObject}from'../../../fc-core/src/lib';const TOOL_TIP_KEY='__FC_tooltipText',MOVE_HANDLER='__FC_onTooltipMove',OUT_HANDLER='__FC_onTooltipOut',OVER_HANDLER='__FC_onTooltipOver';let moveHandler=function(a,b,c){c=touchSafeEvent(c),c=getMouseCoordinate(b.universe,c,b.chart);let d=11,e=11,f=c.chartX,g=c.chartY;this.applyScale&&(this._updateScalingValues(),d/=this.scaleFactor.scaleX,e/=this.scaleFactor.scaleY),f+=d,g+=e,ToolTipController._draw.call(b,f,g,this.data(TOOL_TIP_KEY),a)},outHandler=function(a){ToolTipController._hide(a)};class ToolTipController{constructor(a,b){let c=this,d={scaleX:1,scaleY:1},f=c.config={};c.universe=a,d=getScalingValue(a),this.scaleFactor=d,this.applyScale=0,this.chart=b,this.universeBounds=getPosition(a),this.restrictWithinCanvas={left:!1,right:!1,top:!1,bottom:!1},c.toolTips={implicit:[],explicit:[]},c.hideImplicitToolTip=function(a){let b=f.lastActiveToolip;b&&a.target!==b.getData('targetElement').node&&(ToolTipController._hide(b),c.config.lastActiveToolip=void 0)},f.positioningArr=[],f.canvasArr=[],a.FusionCharts.jsVars.fcObj.addEventListener('resized',c._updateAllToolTipBounds.bind(c))}setRestrictionWithinCanvas(a={}){Object.assign(this.restrictWithinCanvas,a)}getRestrictionWithinCanvas(){return this.restrictWithinCanvas}_updateAllToolTipBounds(){let a,b,c,d=this,e=d.config,f=e.canvasArr,g=e.positioningArr,h=b=>{b.universeBounds&&(c=b.universeBounds.canvas)&&(a=f.indexOf(c)),b.setUniverseBounds(g[a])},i=d.toolTips;for(b in i)i[b].forEach(h)}_setRelativePosition(a){let b=this,c=b.config,d=c.canvasArr,e=c.positioningArr,f=d.indexOf(a.canvas);-1===f?(d.push(a.canvas),e.push(a)):(d[f]=a.canvas,e[f]=a)}_createToolTip(a,b){let c,d=this,e=d.config,f=e.canvasArr,g=e.positioningArr,h=f.indexOf(b);return c=new ToolTip(this.universe,g[h]),c.setRestrictionWithinCanvas(this.restrictWithinCanvas),c.setStyle(this.config.tooltipStyle),d.toolTips[a].push(c),c}enableToolTip(a,b,c){let d,f=this,e=f.toolTips.implicit,g=e.length,h=f.config;return b?a.data(TOOL_TIP_KEY)?(0<g&&(d=e[g-1],d.getData('active')&&d.data.targetElement===a&&d.show(b)),a.data(TOOL_TIP_KEY,b),f):(d=f._getAvailableToolTip('implicit',c),f.disableToolTip(a),a.data(TOOL_TIP_KEY,b),a.data(MOVE_HANDLER,moveHandler.bind(a,d,f)),a.data(OUT_HANDLER,outHandler.bind(a,d)),a.data(OVER_HANDLER,function(b){return function(c){f.draw(c,a.data(TOOL_TIP_KEY),d),d.setData('targetElement',b),h.lastActiveToolip=d}}(a)),a.on('fc-mousemove',a.data(MOVE_HANDLER)),a.on('fc-mouseout',a.data(OUT_HANDLER)),a.on('fc-mouseover',a.data(OVER_HANDLER)),f):(f.disableToolTip(a),f)}disableToolTip(a){let b=a.data(OUT_HANDLER),c=a.data(MOVE_HANDLER),d=a.data(OVER_HANDLER);return c&&a.off('fc-mousemove',c),b&&a.off('fc-mouseout',b),d&&a.off('fc-mouseover',d),a.removeData(TOOL_TIP_KEY),this}_updateScalingValues(){let a=this.universe;this.scaleFactor=getScalingValue(a),this.universeBounds=getPosition(a)}draw(a,b,c,d){let e,f,g=11,h=11;return this.applyScale&&(this._updateScalingValues(),g/=this.scaleFactor.scaleX,h/=this.scaleFactor.scaleY),a=touchSafeEvent(a),a=getMouseCoordinate(this.universe,a,this.chart),e=a.chartX,f=a.chartY,c=c&&!c.disposed?c:this._getAvailableToolTip('explicit',d),e+=g,f+=h,ToolTipController._draw.call(this,e,f,b,c),c}drawAt(a,b,c,d,e){return this.applyScale&&this._updateScalingValues(),d=d&&!d.disposed?d:this._getAvailableToolTip('explicit',e),ToolTipController._draw.call(this,a,b,c,d),d}static _draw(a,b,c,d){let e=this.config;isSimilarObject(d.previousStyle,e.tooltipStyle)||(d.setStyle(e.tooltipStyle),d.previousStyle=Object.assign({},e.tooltipStyle)),d.show(c),d.update(a,b,this.universeBounds)}_getAvailableToolTip(a,b){let c,d,e=this.toolTips[a];for(var f=0,g=e.length;f<g;f++)if(c=e[f],d=!1===c.getData('active'),d)return c;return this._createToolTip(a,b)}setStyle(a){let b,c=this,d=c.config;for(var e in b=d.tooltipStyle={},a)'showToolTipShadow'===e?b.boxShadow=a[e]?'1px 1px 3px rgba(64,64,64,0.4)':'none':b[e]=a[e]}hide(a){return ToolTipController._hide(a),this}hideAll(){var a,b,c=this;for(a in c.toolTips)for(b=0;b<c.toolTips[a].length;b++)ToolTipController._hide(c.toolTips[a][b])}setApplyScale(a){this.applyScale=a}static _hide(a,b){a&&(b?a.dispose():a.hide())}}export default{extension:ToolTipController,name:'ToolTipController',type:'plugin'};