UNPKG

@fusioncharts/core

Version:

JavaScript Data Visualisation Library

1 lines 2.77 kB
"use strict";exports.__esModule=true;exports.priorityList=exports.default=void 0;var jobList=[],pausedList={},priorityJobList=[],jobByID={},jobCount=0,win=window,nav=win.navigator,isIE11=/trident/i.test(nav.userAgent)&&/rv:11/i.test(nav.userAgent)&&!win.opera,isIE=/msie/i.test(nav.userAgent)&&!win.opera,isEdge=/Edge/.test(nav.userAgent),minMsThreshold=16,schedular={},fnStr="function",jobPrefixStr="JOB_",priorityList=exports.priorityList={instant:1,render:1,chartEvents:1,configure:2,chartClick:2,draw:3,entitydraw:4,label:4,animation:5,tracker:6,kdTree:6,postRender:7,verification:8},jobFrame=win.requestAnimationFrame||win.webkitRequestAnimationFrame||win.mozRequestAnimationFrame||win.oRequestAnimationFrame||win.msRequestAnimationFrame||function(callback){setTimeout(callback,minMsThreshold)},jobExecutionFramerequested=false,_executeJob=function executeJob(){var contd=true,jobObj,startTime=(new Date).getTime(),timeNow,sfDone;jobExecutionFramerequested=true;while(contd&&(jobObj=jobList[0])){timeNow=(new Date).getTime();if((!jobObj.OIAF||!sfDone)&&(!jobObj.executeAfter||jobObj.executeAfter<timeNow)&&timeNow-startTime<minMsThreshold){jobList.shift();priorityJobList[jobObj.priority]-=1;if(jobByID[jobObj.jobID]&&!jobObj.executed){jobObj.executed=true;delete jobByID[jobObj.jobID];jobObj.job();sfDone=jobObj.OIAF}}else{contd=false}}if(jobList.length){jobFrame(_executeJob)}else{jobExecutionFramerequested=false}};if(isIE11||isIE||isEdge){jobFrame=jobFrame.bind(window)}schedular.addJob=function(job,priority,options){var jobID,jobObj,i,position=0,OIAF=options&&options.oneInAFrame,loopLimit=options&&options.addToTop?priority-1:priority;if(typeof job===fnStr){jobID=jobPrefixStr+ ++jobCount+"_"+(priority||1);jobObj={job:job,priority:priority,OIAF:OIAF,jobID:jobID};if(options&&options.executionDelay){jobObj.executeAfter=(new Date).getTime()+options.executionDelay}}else{jobObj=job}for(i=0;i<=loopLimit;i++){position+=priorityJobList[i]||0}jobList.splice(position,0,jobObj);jobByID[jobObj.jobID]=jobObj;priorityJobList[priority]=(priorityJobList[priority]||0)+1;if(!jobExecutionFramerequested&&jobList.length===1){OIAF?jobFrame(_executeJob):setTimeout(_executeJob,0)}return jobID};schedular.removeJob=function(jobID){if(jobByID[jobID]){delete jobByID[jobID]}};schedular.updateJob=function(jobID,job,priority,options){if(jobByID[jobID]){jobByID[jobID].job=job;return jobID}return this.addJob(job,priority,options)};schedular.pauseExecution=function(jobID){if(jobByID[jobID]){pausedList[jobID]=jobByID[jobID];delete jobByID[jobID]}else{return false}};schedular.resumeExecution=function(jobID){var jobObj=pausedList[jobID];if(jobObj){schedular.addJob(jobObj,jobObj.priority);delete pausedList[jobID]}else{return false}};var _default=exports.default=schedular;