UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 6.38 kB
import Ajax from'../../../../fc-core/src/ajax';import{ComponentInterface}from'../../../../fc-core/src/component-interface';import{componentFactory}from'../../../../fc-core/src/lib';const MS_MULTIPLIER=1e3;let UNDEF,THRESHOLD_MS=10,initializeDataStreamer=function(a){a.registerFactory('dataStreamer',()=>{let b;DataStreamer&&a.config.realtimeEnabled&&(componentFactory(a,DataStreamer,'dataStreamer',1),b=a.getChildren('dataStreamer')[0],b.configure(),a.addToEnv('dataStreamer',b))})},dataStreamerExt={};class DataStreamer extends ComponentInterface{constructor(){super(),this._handlerFn=function(a){return function(){let b=a.config;b&&(b.rtPreInit===UNDEF&&(b.rtPreInit=!1),b._rtPaused&&delete b._rtPaused,!b.rtStateChanged&&(b.rtStateChanged=!0,a.processRealtimeStateChange(arguments)))}}(this),this._handlerStop=function(a){return function(){a._dispose()}}(this)}getType(){return'dataStreamer'}getName(){return'dataStreamer'}static resetTimeout(a,b,c){return clearTimeout(c),setTimeout(a,b)}configure(){var a,b,c,d,e=this,f=e.config,g=e.getLinkedParent(),h=g.getFromEnv('dataSource')&&g.getFromEnv('dataSource').chart;c=g.getFromEnv('chartInstance'),d=g.config.realTimeConfig,f.clearMs=d.clearInterval*MS_MULTIPLIER,f.updateMs=b=d.updateInterval*MS_MULTIPLIER,f.refreshMs=a=d.refreshInterval*MS_MULTIPLIER,e.addEvents(),a<b&&(f.refreshMs=b),f.dataStamp=h.datastamp,e.config.chartObj=c,c.jsVars&&(c.jsVars._rtLastUpdatedData=null),e.updateIntervalHandler(0,!0),e.refreshVisualHandler(null,null,!0),e.initiateResetVisual(!0),f._rtAjaxLatencyStart=null,f._rtAjaxLatency=null,e.addToEnv('realtimeDrawingLatency',0)}_dispose(){var a=this;a.updateIntervalHandler(0,!0),a.refreshVisualHandler(null,null,!0),a.initiateResetVisual(!0),super._dispose()}processRealtimeStateChange(){var a,b=this,c=b.config,d=b.config.chartObj,e=d.__state,f=b.getLinkedParent(),g=f.config,h=g.realtimeEnabled,i=g.realTimeConfig.dataStreamURL;(e.dataSetDuringConstruction&&!c.rtStateChanged&&c.rtPreInit===UNDEF&&(d.dataReady()?(c.rtStateChanged=!0,c.rtPreInit=!0):c.rtPreInit=!1),!!c.rtStateChanged)&&(c.rtStateChanged=!1,f&&(a=c._rtAjaxObj,h&&(c._rtPaused===UNDEF&&(c._rtPaused=!1),c._rtDataUrl=i,b.initiateResetVisual(),a=c._rtAjaxObj||(c._rtAjaxObj=new Ajax),a.onSuccess||(a.onSuccess=function(){b.getFromEnv('chartConfig').realTimeConfig.dataStreamURL&&(b.setState('ajaxRequested',!0),b.responseTextHandler(arguments[0]),c._rtAjaxLatencyStart&&(c._rtAjaxLatency=new Date-c._rtAjaxLatencyStart||0),b.refreshVisualHandler({data:c.responseText,source:'XmlHttpRequest',url:c.url,networkLatency:c._rtAjaxLatency},c._rtAjaxLatency+(c._firstUpdate?new Date-c._firstUpdate:0),!b.getFromEnv('chartConfig').realTimeConfig.dataStreamURL),c._firstUpdate=void 0,!c._rtPaused&&c._rtAjaxLatency>=c.updateMs&&(c._rtAjaxLatency=c.updateMs-1),b.updateIntervalHandler(c._rtAjaxLatency,c._rtPaused))}),a.onError||(a.onError=function(){let a=arguments[0],e=arguments[1],g=arguments[3];c._rtAjaxLatencyStart&&(c._rtAjaxLatency=new Date-c._rtAjaxLatencyStart),f.fireChartInstanceEvent('realTimeUpdateError',{source:'XmlHttpRequest',url:g,xmlHttpRequestObject:e.xhr,error:a,httpStatus:e.xhr&&e.xhr.status?e.xhr.status:-1,networkLatency:c._rtAjaxLatency}),b.setState('ajaxRequested',!1),b.updateIntervalHandler(0,d.isActive())}),!c._rtPaused&&(b.updateIntervalHandler(0),c._firstUpdate=new Date))))}responseTextHandler(a){let b=this,c=b.config,d=b.getFromEnv('chart'),e=b.getFromEnv('chartConfig'),f=e.realtimeEnabled,g=d.feedData,h=d._linearDataParser(a);c.responseText=a,b.getFromEnv('chartInstance').isActive()&&g&&f&&(c.dataStamp=h.dataStamp?h.dataStamp:null,d.realTimeUpdate(h))}initiateResetVisual(a=!1){if(a)return void clearTimeout(this.config._toClearChart);let b=this,c=b.config,d=b.getFromEnv('chart'),e=function(){d._clearChart&&d._clearChart(),c.clearMs?c._toClearChart=DataStreamer.resetTimeout(e,c.clearMs,c._toClearChart):clearTimeout(c._toClearChart)};!a&&c.clearMs&&(c._toClearChart=DataStreamer.resetTimeout(e,c.clearMs,c._toClearChart))}updateIntervalHandler(a=0,b=!1){if(b)return void clearTimeout(this.config._toRealtimeUpdate);let c,d=this,e=d.config,f=e._rtAjaxObj,g=e.updateMs;return(d.requestData||(d.requestData=function(){let a=d.getFromEnv('chartConfig').realTimeConfig.dataStreamURL,b=e.dataStamp,c=e._rtAjaxObj,f=a;f+=(-1===a.indexOf('?')?'?num=':'&num=')+Math.random(),b&&(f+='&dataStamp='+b),e.url=f,c.open&&c.abort(),!a||c.get(f),e._rtAjaxLatencyStart=new Date}),0>=g)?(e._toRealtimeUpdate=clearTimeout(e._toRealtimeUpdate),void(f&&f.abort())):void(g<THRESHOLD_MS&&(g=THRESHOLD_MS),b||(c=g-a,e._toRealtimeUpdate=DataStreamer.resetTimeout(d.requestData,c,e._toRealtimeUpdate)))}refreshVisualHandler(a,b=0,c=!1){if(c)return clearTimeout(this.config._toRealtimeDraw),this._clearCachedData(),void(this.config.isAlive=!1);let d,e=this,f=e.config,g=f.refreshMs,h=e.getFromEnv('chart'),i=e.getFromEnv('chartConfig'),j=i.realtimeEnabled,k=e.getFromEnv('chartInstance').isActive(),l=new Date().getTime(),m=h.feedData;e.getState('ajaxRequested')&&f.lastRTDrawAt||(f.lastRTDrawAt=l),e.config.sourceInfo=a,e._rtDraw||(e._rtDraw=function(){f.isAlive=!1,f.lastRTDrawAt=new Date().getTime(),h.realTimeDraw(e.config.sourceInfo)}),k&&m&&j&&!c&&!f.isAlive&&(f.isAlive=!0,b+=l-f.lastRTDrawAt+e.getFromEnv('realtimeDrawingLatency'),d=0<g-b?g-b:0,f._toRealtimeDraw=DataStreamer.resetTimeout(e._rtDraw,d,f._toRealtimeDraw))}_clearCachedData(){this.getFromEnv('chart').config.cachedArrivedJSON={}}_stopUpdate(){var a=this,b=a.config;a.updateIntervalHandler(0,!0),a.refreshVisualHandler(null,null,!0),a.initiateResetVisual(!0),b._rtAjaxObj&&b._rtAjaxObj.abort(),b._rtPaused=!0,a.setState('ajaxRequested',!1)}_restartUpdate(){var a=this,b=a.config;b._rtDataUrl&&b._rtPaused&&(b._rtPaused=!1,b.rtStateChanged=!0,a.processRealtimeStateChange())}_isUpdateActive(){return!this.config._rtPaused}addEvents(){var a=this,b=a.getLinkedParent(),c=a.config;c.eventsAdded||(a.addExtEventListener('renderComplete',a._handlerFn,b.getFromEnv('chartInstance')),a.addExtEventListener('nodatatodisplay',a._handlerStop,b.getFromEnv('chartInstance'))),c.eventsAdded=!0}}function dataStreamer(a){a.addEventListener('instantiated',a=>{let b=a.sender;'chartAPI'===b.getType()&&initializeDataStreamer(b)})}dataStreamerExt={extension:dataStreamer,name:'DataStreamer',type:'extension',requiresFusionCharts:!0};export default dataStreamerExt;