quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 3.75 kB
JavaScript
import ScaleTimeBin from'../../../../../../fc-utils/src/scales/time-bin';import ScaleUTCTimeBin from'../../../../../../fc-utils/src/scales/utc-bin';import ScaleTime from'../../../../../../fc-utils/src/scales/time';import ScaleUTCTime from'../../../../../../fc-utils/src/scales/utc';import BinDecider,{DEFAULT_THRESHOLD_PIXELS}from'../../../../../../fc-utils/src/bin-decider';import standardBins from'../../../../../../fc-utils/src/bin-decider/standard-bins';import Linear from'../../../../../../fc-core/src/axis/scales/linear';import Log from'../../../../../../fc-utils/src/scales/log';import{extent}from'../../../../../../fc-core/src/lib';import getAtomicity from'../../_utils/atomicity';import timeFormatter from'../../../../../../fc-utils/src/time-converter';import{timeMillisecond,timeSecond,timeMinute,timeHour,timeDay,timeWeek,timeMonth,timeQuarter,timeYear}from'../../../../../../fc-utils/src/time-intervals';import{utcMillisecond,utcSecond,utcMinute,utcHour,utcDay,utcWeek,utcMonth,utcQuarter,utcYear}from'../../../../../../fc-utils/src/time-intervals/utc';const TYPES={time:ScaleTimeBin,utctime:ScaleUTCTimeBin,scaletime:ScaleTime,scaleutctime:ScaleUTCTime,numeric:Linear,log:Log},SHARE_RATIO=.8,getInterVal=function(a,b){return'year'===a?b?utcYear:timeYear:'quarter'===a?b?utcQuarter:timeQuarter:'month'===a?b?utcMonth:timeMonth:'week'===a?b?utcWeek:timeWeek:'day'===a?b?utcDay:timeDay:'hour'===a?b?utcHour:timeHour:'minute'===a?b?utcMinute:timeMinute:'second'===a?b?utcSecond:timeSecond:void 0};export default(a=>{let b=a.config,c=b.focusAxesX,d=b.contextAxesX||[],e=b.dataTable,{schema:f,data:g}=e.getData(),h=a.getFromEnv('UTC'),i=a.getFromEnv('chartWidth'),j=[0,SHARE_RATIO*i/c.length],k=({type:a,plot:b})=>{a=a||'time';let c=('time'===a&&h?TYPES['utc'+a]:TYPES[a])||TYPES.time,d=new c;return d},l=({type:a,plot:c,maxbin:d,minbin:i})=>{a=a||'time';let k='time'===a&&h?new BinDecider(standardBins(utcYear,utcMonth,utcWeek,utcDay,utcHour,utcMinute,utcSecond,utcMillisecond)):new BinDecider(standardBins(timeYear,timeMonth,timeWeek,timeDay,timeHour,timeMinute,timeSecond,timeMillisecond)),l=('time'===a&&h?TYPES['scaleutc'+a]:TYPES['scale'+a])||TYPES.time,m=new l;return k.setScale(m),d=d?d.ms?{unit:d,multiplier:1}:d.unit?{unit:d.unit,multiplier:+d.multiplier||1}:void 0:void 0,d&&k.setBinMax(d),i=i?i.ms?{unit:i,multiplier:1}:i.unit?{unit:i.unit,multiplier:+i.multiplier||1}:void 0:void 0,i&&k.setBinMin(i)||k.setBinMin(getAtomicity(f[e.indexOf(c[0].value)].format,e.indexOf(c[0].value),g,k.getStandardBins(),k.intervalIndexMap)),k.setBinRange(j),k.setRangeThreshold(b.pixelMultiplier*DEFAULT_THRESHOLD_PIXELS),k},m=a=>{let b,c=[],d=[],e=a.length;for(b=0;b<e;b++)c[b]=k(a[b]),d[b]=l(a[b]),c[b].setThresholdIntervals(d[b].getStandardBins()),c[b].setBinMin(d[b].getBinMin()),c[b].setRangeThreshold(d[b].getRangeThreshold());return{scales:c,bins:d}},n=({value:a})=>{const b=e.min(a),c=e.max(a);return[b,c]};const o=m(d),p=m(c),{focus:q,context:r}=(b=>{let c,d,e=b.plot.map(n),g=extent([].concat(...e),Number),i=b.plot[0].value,j=b.format||f.find(({name:a})=>a===i).format,k=timeFormatter.parser(j),l=a.getFromEnv('dataSource').extensions||{},m=l.standardrangeselector,o=m&&0!==m.enabled&&m.initialselection||{},p=(a,b)=>{let c=k.parse(a);return null===c?b:c<b?+c:b},q=(a,b)=>{let c=k.parse(a);return null===c?b:c>b?+c:b};return g[0]=p(b.min,g[0]),g[1]=q(b.max,g[1]),d=g.slice(),d[0]=q(b.activemin,d[0]),d[1]=p(b.activemax,d[1]),o.unit&&o.multiplier&&(c=getInterVal(o.unit,h),c&&(d[0]=c.offset(d[1],-o.multiplier))),d=extent(d),{focus:d,context:g}})(d[0]);a.addToEnv('contextScalesX',o.scales),a.addToEnv('focusScalesX',p.scales),a.addToEnv('contextBins',o.bins),a.addToEnv('focusBins',p.bins),a.setContextLimit(r),a.setFocusLimit(q)});