quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 6.41 kB
JavaScript
import ComponentBase,{addAllEventsOnGraphic,removeAllEventsFromGraphic}from'./component-base';import{pluck,removeHtmlAttrs}from'../lib';let UNDEF,addEventOnAllGraphics=function(a,b,c){var d;b&&c&&(d=a=>{!a._skipEvents&&a.on&&a.on(b,c)},_mapSubFnForward(a.getGraphicalElement(),d))},removeEventFromAllGraphics=function(a,b,c){var d;b&&c&&(d=a=>{!a._skipEvents&&a.off&&a.off(b,c)},_mapSubFnForward(a.getGraphicalElement(),d))},_mapSubFnBackward=(a,b)=>{if(a&&a.hasOwnProperty&&b&&b.call){let c,d,e,f;for(d in a)for(c=a[d],e=c.elemStore,f=e&&e.length-1;0<=f&&!b(e[f],d,f);f--);}},_mapSubFnForward=(a,b)=>{if(a&&a.hasOwnProperty&&b&&b.call){let c,d,e,f,g;for(e in a)for(c=a[e],f=c.elemStore,(g=0,d=f&&f.length);g<d&&!b(f[g],e,g);g++);}},_getDifferentialAttributes=(a,b,c={})=>{let d,e,f,g;for(g in a)e=a[g],f=pluck(b[g],c[g]),void 0===f?(d||(d={}),d[g]=e):e instanceof Array?e.toString().replace(/,/g,'')!==f.toString().replace(/,/g,'')&&(d||(d={}),d[g]=e):'string'==typeof e?e.replace(/,/g,'')!==f.toString().replace(/,/g,'')&&(d||(d={}),d[g]=e):e!==f&&(d||(d={}),d[g]=e);return d};class SmartRenderer extends ComponentBase{constructor(a){super();let b=this;b._id=a,b._componentStore={},b._oldComponentStore=[],b.fireEvent('instantiated'),b.__setDefaultConfig()}isDrawingRequired(){return this}syncDraw(){this.isDrawingRequired()&&(this._removeUnusedComponent(),this._resetGraphicalStore(),super.syncDraw(),this._removeUnusedGraphics())}setDimension(a,b){this.config.width=a,this.config.height=b}setTranslation(a,b){var c=this,d=c.config;d._translateX=a,d._translateY=b,d.translate=`t${a},${b}`}getTranslation(){return{x:this.config._translateX,y:this.config._translateY}}_resetGraphicalStore(){let a=this;a._oldGraphicalStore=a._graphicalStore,a._graphicalStore={}}_getLastUsedElem(){return this.config.lastElemUsed}addGraphicalElement(a={},b){let c,d,e,f,g,h=this,i=h.getFromEnv('animationManager'),j=a.label,k=h._graphicalStore[j]||(h._graphicalStore[j]={elemStore:[],idMap:{},indexMap:{},lastIndexUsed:-1}),l=!0,m=h._oldGraphicalStore&&h._oldGraphicalStore[j],n=k.lastIndexUsed+=1,o=a.attr,p=a.id;m&&(p&&m.idMap[p]!==void 0?(f=m.idMap[p],g=m.elemStore[f],delete m.elemStore[f],delete m.indexMap[f],delete m.idMap[p]):m.elemStore[n]&&!m.indexMap[n]&&(g=m.elemStore[n],delete m.elemStore[n])),'text'===a.el&&a.css&&removeHtmlAttrs(a.css),g&&(a.el=g,l=!1,(o=_getDifferentialAttributes(a.attr,g.attrs))&&(a.attr=o),a.css&&(d=_getDifferentialAttributes(a.css,g.attrs,g.styles))&&(a.css=d)),(e=a.container)?(c=e.isParent?h.getLinkedParent():h,a.container=c.getGraphicalElement(e.id,e.label)||c.getChildContainer(e.id)):a.container=h.getFromEnv('chart-container'),(o||d)&&(g=i.setAnimation(a)),k.elemStore[n]=g,p&&(k.idMap[p]&&(delete k.indexMap[k.idMap[p]],delete k.idMap[p]),k.idMap[p]=n,k.indexMap[n]=p),h.fireEvent('graphicalelementattached',{element:g}),g._skipEvents=b,a.shadow&&g.shadow(a.shadow),a.tooltext!==UNDEF&&h.getFromEnv('toolTipController').enableToolTip(g,a.tooltext),h.config.lastElemUsed=g,!b&&l&&addAllEventsOnGraphic(g,h._middleListeners,h)}removeGraphicalElement(a,b){var c,d,e,f,g=this,h=g._graphicalStore;'object'==typeof a?_mapSubFnBackward(h,(b,d,e)=>{if(a===b)return f=!0,b._skipEvents||removeAllEventsFromGraphic(b,g._middleListeners),g._setRemoveAnim(b,d),c=h[d],c.elemStore.splice(e,1),delete c.idMap[c.indexMap[e]],delete c.indexMap[e],!0}):_mapSubFnBackward(h,(d,j,k)=>{if(c=h[j],e=c.indexMap,e[k]===a&&(!b||b===j))return f=!0,d._skipEvents||removeAllEventsFromGraphic(d,g._middleListeners),g._setRemoveAnim(d,j),c.elemStore.splice(k,1),delete c.idMap[c.indexMap[k]],delete c.indexMap[k],!0}),f&&this.fireEvent('graphicalelementremoved',{element:d})}getChildContainer(a){return this.getGraphicalElement(UNDEF,a)}_removeUnusedGraphics(){let a,b=this,c=b._oldGraphicalStore;_mapSubFnBackward(c,(d,e,f)=>{d&&(!d._skipEvents&&removeAllEventsFromGraphic(d,b._middleListeners),b._setRemoveAnim(d,e),a=c[e],delete a.idMap[a.indexMap[f]],delete a.indexMap[f])})}getGraphicalElement(a,b){let c,d,e,f,g,h=this,j=h._graphicalStore;return b||a?b?(c=j[b],a?c&&c.elemStore&&c.elemStore[c.idMap[a]]:c&&c.elemStore&&c.elemStore[0]):(_mapSubFnForward(j,function(){if(g=arguments[2],e=j[arguments[1]],d=e.idMap,d[g]===a)return f=e.elemStore[g],!0}),f):j}addEventListener(a,b,c){var d=super.addEventListener(a,b,c);return!0===d?(addEventOnAllGraphics(this,a,this._middleListeners[a]),b):!!d&&b}removeEventListener(a,b){super.removeEventListener(a,b)&&removeEventFromAllGraphics(this,a,this._middleListeners[a])}_dispose(){let a,b=this;if(super._dispose()){for(a in b.getFromEnv('paper')&&!b.getFromEnv('paper').removed&&_mapSubFnForward(b.getGraphicalElement(),b.__instantRemoveFn),b)b.hasOwnProperty(a)&&delete b[a];b.fireEvent('removed')}}removingDraw(){return this}configure(a){this._resetComponentStore(),super.configure(a)}_resetComponentStore(){let a=this;a._oldComponentStore.push(a._componentStore),a._componentStore={}}_mapChildren(a,b){b?_mapSubFnBackward(this.getChildren(),a):_mapSubFnForward(this.getChildren(),a)}attachChild(a,b,c){let d,e,f=this,g=f._componentStore[b]||(f._componentStore[b]={elemStore:[],idMap:{},indexMap:{},lastIndexUsed:-1}),h=f._oldComponentStore&&f._oldComponentStore.length&&f._oldComponentStore[f._oldComponentStore.length-1][b],i=g.lastIndexUsed+=1;if(h){const b=h.elemStore,f=b[i];c&&void 0!==h.idMap[c]?(d=h.idMap[c],e=b[d],delete b[d],delete h.indexMap[d],delete h.idMap[c]):f&&f.constructor===a&&!h.indexMap[i]&&(e=f,delete b[i])}return e||(e=new a(c)),g.elemStore[i]=e,c&&(g.idMap[c]=i,g.indexMap[i]=c),e._setLinkedParent(f),f.fireEvent('childattached',{attachedChild:e}),e}_removeUnusedComponent(){let a=this,b=a._oldComponentStore,c=b.length,d=0,e=(a,c,e)=>{let f;a&&(f=b[d][c],delete f.idMap[f.indexMap[e]],delete f.indexMap[e],a.remove())};for(;d<c;d+=1)_mapSubFnBackward(b[d],e);a._oldComponentStore.length=0}getChild(a,b){var c;return this._searchChildren(a,function(a){c=a},b),c}_searchChildren(a,b,c){var d,e,f,g,h=this,j=h._componentStore;if(a?_mapSubFnBackward(j,(b,h,k)=>{if(d=j[h],f=d.indexMap,f[k]===a&&(!c||c===h))return g=b,e=k,c=h,!0}):g=j[c]&&j[c].elemStore,g)return b(g,e,c)}getChildren(a){return a?this._componentStore[a]&&this._componentStore[a].elemStore:this._componentStore}_detachChild(a){let b=this;return a===UNDEF?UNDEF:(a._setLinkedParent(UNDEF),b.fireEvent('childdetached',{detachedChild:a}),a)}}export default SmartRenderer;