CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
step.mjs163 linesDownload Raw Back to animation
1import easings from './easings.mjs';2import ease from './ease.mjs';3import * as is from '../../is.mjs';4import {bound} from '../../math.mjs';5 6function step( self, ani, now, isCore ){7  let isEles = !isCore;8  let _p = self._private;9  let ani_p = ani._private;10  let pEasing = ani_p.easing;11  let startTime = ani_p.startTime;12  let cy = isCore ? self : self.cy();13  let style = cy.style();14 15  if( !ani_p.easingImpl ){16 17    if( pEasing == null ){ // use default18      ani_p.easingImpl = easings[ 'linear' ];19 20    } else { // then define w/ name21      let easingVals;22 23      if( is.string( pEasing ) ){24        let easingProp = style.parse( 'transition-timing-function', pEasing );25 26        easingVals = easingProp.value;27 28      } else { // then assume preparsed array29        easingVals = pEasing;30      }31 32      let name, args;33 34      if( is.string( easingVals ) ){35        name = easingVals;36        args = [];37      } else {38        name = easingVals[1];39        args = easingVals.slice( 2 ).map( function( n ){ return +n; } );40      }41 42      if( args.length > 0 ){ // create with args43        if( name === 'spring' ){44          args.push( ani_p.duration ); // need duration to generate spring45        }46 47        ani_p.easingImpl = easings[ name ].apply( null, args );48      } else { // static impl by name49        ani_p.easingImpl = easings[ name ];50      }51    }52 53  }54 55  let easing = ani_p.easingImpl;56  let percent;57 58  if( ani_p.duration === 0 ){59    percent = 1;60  } else {61    percent = (now - startTime) / ani_p.duration;62  }63 64  if( ani_p.applying ){65    percent = ani_p.progress;66  }67 68  if( percent < 0 ){69    percent = 0;70  } else if( percent > 1 ){71    percent = 1;72  }73 74  if( ani_p.delay == null ){ // then update75 76    let startPos = ani_p.startPosition;77    let endPos = ani_p.position;78 79    if( endPos && isEles && !self.locked() ){80      let newPos = {};81 82      if( valid( startPos.x, endPos.x ) ){83        newPos.x = ease( startPos.x, endPos.x, percent, easing );84      }85 86      if( valid( startPos.y, endPos.y ) ){87        newPos.y = ease( startPos.y, endPos.y, percent, easing );88      }89 90      self.position( newPos );91    }92 93    let startPan = ani_p.startPan;94    let endPan = ani_p.pan;95    let pan = _p.pan;96    let animatingPan = endPan != null && isCore;97    if( animatingPan ){98      if( valid( startPan.x, endPan.x ) ){99        pan.x = ease( startPan.x, endPan.x, percent, easing );100      }101 102      if( valid( startPan.y, endPan.y ) ){103        pan.y = ease( startPan.y, endPan.y, percent, easing );104      }105 106      self.emit( 'pan' );107    }108 109    let startZoom = ani_p.startZoom;110    let endZoom = ani_p.zoom;111    let animatingZoom = endZoom != null && isCore;112    if( animatingZoom ){113      if( valid( startZoom, endZoom ) ){114        _p.zoom = bound( _p.minZoom, ease( startZoom, endZoom, percent, easing ), _p.maxZoom );115      }116 117      self.emit( 'zoom' );118    }119 120    if( animatingPan || animatingZoom ){121      self.emit( 'viewport' );122    }123 124    let props = ani_p.style;125    if( props && props.length > 0 && isEles ){126      for( let i = 0; i < props.length; i++ ){127        let prop = props[ i ];128        let name = prop.name;129        let end = prop;130        let start = ani_p.startStyle[ name ];131        let propSpec = style.properties[ start.name ];132        let easedVal = ease( start, end, percent, easing, propSpec );133 134        style.overrideBypass( self, name, easedVal );135      } // for props136 137      self.emit('style');138 139    } // if140 141  }142 143  ani_p.progress = percent;144 145  return percent;146}147 148function valid( start, end ){149  if( start == null || end == null ){150    return false;151  }152 153  if( is.number( start ) && is.number( end ) ){154    return true;155  } else if( (start) && (end) ){156    return true;157  }158 159  return false;160}161 162export default step;163 
basant307/AI_Governance_Project · CoolFace