{"version":3,"sources":["webpack://in-store-appraisal/./src/Spinner.tsx","webpack://in-store-appraisal/./node_modules/lottie-web/build/player/lottie.js","webpack://in-store-appraisal/webpack/bootstrap","webpack://in-store-appraisal/webpack/runtime/compat get default export","webpack://in-store-appraisal/webpack/runtime/define property getters","webpack://in-store-appraisal/webpack/runtime/hasOwnProperty shorthand","webpack://in-store-appraisal/webpack/startup"],"names":["container","document","querySelector","animationData","window","svgNS","locationHref","initialDefaultFrame","subframeEnabled","idPrefix","expressionsPlugin","isSafari","test","navigator","userAgent","cachedColors","bmRnd","bmPow","Math","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","max","bmMin","min","BMMath","ProjectInterface","i","propertyNames","len","length","random","abs","val","absArr","createSizedArray","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","round","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","type","currentTime","totalTime","frameMultiplier","this","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","s","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","toString","BaseEvent","prototype","triggerEvent","eventName","args","_cbs","addEventListener","callback","push","removeEventListener","bind","splice","createTypedArray","createRegularArray","value","arr","Uint8ClampedArray","Float32Array","Int16Array","Array","apply","createNS","createElementNS","createTag","createElement","DynamicPropertyContainer","addDynamicProperty","prop","dynamicProperties","indexOf","_isAnimated","iterateDynamicProperties","_mdf","getValue","initDynamicPropertyContainer","getBlendMode","blendModeEnums","mode","Matrix","_cos","cos","_sin","sin","_tan","tan","_rnd","reset","props","rotate","angle","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","sy","skew","ax","ay","skewFromAxis","scale","sz","setTransform","a","c","e","j","k","l","m","n","o","translate","tx","ty","tz","transform","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","_identityCalculated","a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","isIdentity","_identity","equals","matr","clone","cloneFromProps","applyToPoint","x","y","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","pt1","pt2","pt3","p0","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","pool","math","global","width","startdenom","significance","overflow","mask","ARC4","key","keylen","me","S","count","copy","slice","flatten","obj","depth","result","typ","mixkey","seed","smear","stringseed","charCodeAt","tostring","String","fromCharCode","options","shortseed","entropy","out","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","Date","screen","autoseed","arc4","prng","int32","quick","double","pass","is_math_call","state","BezierFactory","ob","nm","str","replace","beziers","bezEasing","BezierEasing","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_mSampleValues","_precomputed","get","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","extendPrototype","sources","destination","sourcePrototype","attr","Object","hasOwnProperty","call","getDescriptor","object","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","bezierLengthPool","newElement","percents","lengths","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","segmentsLengthPool","closed","pathV","pathO","pathI","_length","totalLength","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataFunctionManager","completeLayers","layers","comps","fontManager","layerData","jLen","kLen","data","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","shapes","singleShape","__used","JSON","parse","stringify","ks","it","path","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","iterateLayers","textLayer","documentData","assets","checkChars","chars","pathData","paths","__converted","checkColors","iterateShapes","checkShapes","completeClosingShapes","cl","moduleOb","__complete","dataManager","getFontProperties","fontData","styles","fStyle","fWeight","toLowerCase","weight","FontManager","emptyChar","w","size","combinedCharacters","setUpNode","font","family","parentNode","setAttribute","fontFamily","node","innerText","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","familyArray","enabledFamilies","join","trimFontOptions","parent","createHelper","def","tHelper","fontProps","fFamily","textContent","fClass","getContext","concat","Font","fonts","typekitLoaded","isLoaded","_warned","initTime","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","getCombinedCharacterCodes","addChars","found","ch","addFonts","defs","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","origin","querySelectorAll","href","rel","src","sc","helper","cache","getCharData","char","console","warn","getFontByName","name","fName","measureText","fontName","index","doubleSize","getComputedTextLength","singleSize","loadedCount","removeChild","PropertyFactory","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","fnc","iterationIndex","lastIndex","keyframes","endValue","quat","qx","qy","qz","qw","heading","attitude","bank","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quatStart","createQuaternion","quatEnd","omega","cosom","sinom","scale0","scale1","az","aw","bx","by","bz","bw","acos","slerp","atan2","asin","constructor","values","c3","s1","s2","s3","getValueAtCurrentTime","comp","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","processEffectsSequence","elem","globalData","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","ValueProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","st","KeyframedMultidimensionalProperty","arrLen","getProp","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","or","sk","sa","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","frameRate","autoOriented","v1","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","ShapePath","_maxLength","setPathData","setLength","pointPool","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","init","cnt","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","localShapeCollection","shape1","shape2","shapesEqual","shapePool","releaseShapes","addShape","ShapeProperty","shapeCollectionPool","newShapeCollection","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","os","rad","roundness","perimSegment","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","ShapeModifiers","modifiers","registerModifier","factory","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","PuckerAndBloatModifier","RepeaterModifier","ShapeCollection","DashProperty","renderer","dataProps","dashStr","dashArray","dashoffset","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","initModifierProperties","addShapeToModifier","shape","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segments","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","release","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","pop","addPaths","newPaths","addSegment","shapePath","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","segment","rd","processPath","clonedPath","currentV","currentI","currentO","closerV","distance","newPosPerc","amount","centerPoint","pathLength","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","op","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","comparePoints","buildShapeString","pathNodes","_o","_i","shapeString","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","ImagePreloader","proxyImage","canvas","height","ctx","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","createFootageData","assetLoader","load","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","destroy","getAsset","createImgData","crossOrigin","createImageData","setAttributeNS","_elementHelper","append","setCacheType","elementHelper","featureSupport","maskType","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","formatResponse","xhr","response","responseText","errorCallback","XMLHttpRequest","responseType","err","onreadystatechange","readyState","status","open","send","TextAnimatorProperty","textData","renderType","_hasMaskedPath","_frameId","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","sw","fc","fh","fs","fb","TextSelectorProp","getTextSelectorProp","LetterProps","TextProperty","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","of","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","searchProperties","maskManager","getMaskProperty","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","animators","matrixHelper","mHelper","renderedLettersCount","letters","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","currentLine","letterM","letterP","defaultPropsArray","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","isNewLine","getMult","anIndexes","totalChars","line","extra","an","animatorOffset","add","rot","atan","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","text","charCode","charactersArray","charAt","substr","newLineFlag","charData","anchorGrouping","currentSize","currentPos","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","animatorData","letterData","based","indexes","rn","newInd","currentInd","updateDocumentData","newData","undefined","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","textProperty","easer","tot","newCharsFlag","divisor","poolFactory","initialLength","_create","_release","pooling","cloned","shapeCollection","markerParser","parsePayloadLines","payload","lines","keys","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","BaseRenderer","SVGRenderer","animationItem","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","maskElement","layerElement","renderConfig","preserveAspectRatio","imagePreserveAspectRatio","progressiveLoad","hideOnTransparent","viewBoxOnly","viewBoxSize","className","focusable","filterSize","pendingElements","destroyed","rendererType","CanvasRenderer","clearCanvas","context","dpr","wrapper","devicePixelRatio","currentGlobalAlpha","contextData","CVContextData","transformMat","HybridRenderer","threeDElements","camera","supports3d","MaskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","layerId","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","invRect","drawPath","maskedElement","addRenderableComponent","HierarchyElement","FrameElement","TransformElement","RenderableElement","RenderableDOMElement","ProcessedElement","SVGStyleData","level","lvl","hd","pElem","msElem","SVGShapeData","transformers","caches","lStr","SVGTransformData","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","checkLayers","num","ip","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","AudioElement","FootageElement","buildAllItems","includeLayers","newLayers","setProjectInterface","pInterface","projectInterface","initItems","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","searchExtraCompositions","xt","initExpressions","registerComposition","setupGlobalData","animData","fontsContainer","getAssetData","imageLoader","imagePreloader","audioController","fr","compSize","NullElement","SVGShapeElement","SVGTextLottieElement","IImageElement","SVGCompElement","ISolidElement","configAnimation","maskId","updateContainerSize","appendElementInPos","setMatte","checkParenting","renderFrame","currentFrame","prepareFrame","getBaseElement","nextElement","insertBefore","hide","show","CVShapeElement","CVTextElement","CVImageElement","CVCompElement","CVSolidElement","ctxTransform","cProps","cTr","trProps","canvasContext","ctxOpacity","globalAlpha","cO","restore","save","actionFlag","cArrPos","duplicate","saved","savedOp","blendMode","popped","containerStyle","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","par","fillType","beginPath","closePath","clip","clearRect","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","HShapeElement","HTextElement","HCameraElement","HImageElement","HCompElement","HSolidElement","startPos","endPos","perspectiveElem","createThreeDContainer","center","webkitTransform","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","svg","setup","cWidth","cHeight","webkitPerspective","perspective","floatingContainer","isFirstFrame","finalMat","finalTransform","mProp","getMaskelement","pathString","pathShapeValue","initHierarchy","_isParent","prepareProperties","isVisible","initTransform","_matMdf","_opMdf","ao","renderTransform","globalToLocal","transforms","ptNew","initRenderable","isInRange","hidden","isTransparent","renderableComponents","component","removeRenderableComponent","prepareRenderableFrame","checkLayerLimits","checkTransparency","renderRenderable","sourceRectAtTime","getLayerSize","initElement","initBaseData","initRendererElement","createContainerElements","createRenderableComponents","createContent","baseElement","renderElement","renderInnerContent","innerElem","destroyBaseElement","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","stop","gf","cst","opacityId","opFill","ms","ost","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","dist","createRenderFunction","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","BaseElement","SVGBaseElement","IShapeElement","ITextElement","ICompElement","sourceRect","_isPlaying","_canPlay","_currentTime","_placeholder","textSpans","shapesData","stylesList","shapeModifiers","itemsData","processedElements","animatedContents","SVGTintFilter","filter","filterManager","matrixFilter","effectElements","feMergeNode","feMerge","SVGFillFilter","SVGGaussianBlurEffect","feGaussianBlur","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","feOffset","feFlood","feComposite","originalNodeAdded","sequence","processSequence","processSequences","getNewKey","checkMasks","layerInterface","LayerExpressionInterface","registerMaskInterface","effectsInterface","EffectsExpressionInterface","createEffectsInterface","registerEffectsInterface","compInterface","CompExpressionInterface","shapeInterface","ShapeExpressionInterface","content","textInterface","TextExpressionInterface","setBlendMode","blendModeValue","bm","sr","effectsManager","EffectsManager","getType","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","createFilter","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","ln","cp","clipId","cpGroup","renderableEffectsManager","SVGEffects","addShapeToModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","lcEnum","ljEnum","searchProcessedElement","addProcessedElement","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","timeRemapped","setElements","getElements","destroyElements","pr","volumeValue","FootageInterface","getFootageData","textContainer","buildTextContents","textArray","textContents","currentTextContent","tSpan","usesGlyphs","cachedSpansLength","tElement","justify","textBox","bbox","renderedLetter","textSpan","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","lc","lj","ml","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","fn","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","colorBlack","colorWhite","opacity","sigma","dimensions","sigmaX","sigmaY","edgeMode","initialize","groupPath","elemChildren","children","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","ef","filters","CVBaseElement","CVMaskElement","hasMasks","stroke","fill","currentRender","sWidth","fValue","CVEffects","HBaseElement","shapesContainer","currentBBox","textPaths","isMasked","pe","_prevMat","HEffects","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","newLength","currentSavedOp","set","createElements","globalCompositeOperation","hideElement","showElement","forceRealStack","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","drawImage","moveTo","lineTo","bezierCurveTo","transformHelper","dashResetter","preTransforms","co","wi","da","do","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","lastFill","lastStroke","lastStrokeW","checkBlendMode","tg","transformedElementStyle","matrixValue","addEffects","backgroundColor","_createBaseContainerElements","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","bounds","shapeBoundingBox","xMax","right","yMax","bottom","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","currentBoxContains","box","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","Image","imageElem","perspectiveStyle","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","animationManager","registeredAnimations","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","animation","isPaused","subtractPlayingCount","registerAnimation","AnimationItem","setupAnimation","setData","addPlayingCount","activate","nowTime","elapsedTime","advanceTime","first","loadAnimation","params","setParams","setSpeed","setDirection","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","lenAnims","getElementsByTagName","div","resize","goToAndStop","isFrame","freeze","unfreeze","getRegisteredAnimations","animations","currentRawFrame","frameMult","playSpeed","playDirection","playCount","autoplay","loop","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","animType","rendererSettings","parseInt","autoloadSegments","initialSegment","lastIndexOf","fileName","trigger","wrapperAttributes","attributes","getNamedItem","prerender","completeData","loadNextSegment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","updaFrameModifier","waitForFontsLoaded","error","triggerConfigError","gotoFrame","setSubframe","triggerRenderFrameError","setCurrentRawFrameValue","getMarkerData","markerName","marker","numValue","Number","isNaN","frameModifier","goToAndPlay","playSegments","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onComplete","onSegmentStart","onDestroy","getPath","getDuration","onError","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","ExpressionManager","fetch","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","sum","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","needsVelocity","_needsRandom","elemType","$bm_transform","effect","thisProperty","valueAtTime","defineProperty","frameDuration","displayStartTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","frames","fps","timeToFrames","seedRandom","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","_value","frameExpressionId","expressionHelpers","searchExpressions","getSpeedAtTime","speed","delta","_cachingAtTime","getStaticValueAtTime","setGroupProperty","propertyGroup","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","skewAxis","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","propertyIndex","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","propertyGetShapeProp","trims","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","ShapePathInterface","view","interfaceFunction","_propertyGroup","propertyGroupFactory","PropertyInterface","defineProperties","_name","mn","parentPropertyGroup","propertyName","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","numProperties","transformInterface","transformInterfaceFactory","cix","contentsInterfaceFactory","np","ExpressionPropertyInterface","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","start","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","_prevValue","_sourceText","_thisLayerFunction","sourceText","stringValue","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","anchorPointDescriptor","TransformExpressionInterface","anchor_point","startTime","source","MaskManagerInterface","effects","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","pixelAspect","numLayers","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","compositions","_thisProjectFunction","createGroupInterface","groupInterface","createValueInterface","enabled","en","expressionProperty","effectsData","MaskInterface","_mask","_data","_masksInterfaces","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","assign","speedAtTime","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","propertyGetTextProp","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","effectItem","GroupEffect","TextExpressionSelectorPropFactory","eff","lottie","setLocationHref","setSubframeRendering","setIDPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","__getFactory","version","scripts","myScript","root","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","getter","__esModule","definition","enumerable","__webpack_exports__"],"mappings":"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","file":"spinner.0426f6c2adb582d6919d.bundle.js","sourcesContent":["import animation from './assets/loader.json';\nimport lottie from 'lottie-web';\nimport './spinner.scss';\n\nlottie.loadAnimation({\n container: document.querySelector('#spinner-animation'),\n animationData: animation,\n});\n","(typeof navigator !== \"undefined\") && (function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return factory(root);\n });\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory(root);\n } else {\n root.lottie = factory(root);\n root.bodymovin = root.lottie;\n }\n}((window || {}), function(window) {\n\t/* global locationHref:writable, animationManager, subframeEnabled:writable, defaultCurveSegments:writable, roundValues,\r\nexpressionsPlugin:writable, PropertyFactory, ShapePropertyFactory, Matrix, idPrefix:writable */\r\n/* exported locationHref, subframeEnabled, expressionsPlugin, idPrefix */\r\n\r\n'use strict';\r\n\r\n/* exported svgNS, locationHref, initialDefaultFrame */\r\n\r\nvar svgNS = 'http://www.w3.org/2000/svg';\r\n\r\nvar locationHref = '';\r\n\r\nvar initialDefaultFrame = -999999;\r\n\r\n/* global createSizedArray */\r\n/* exported subframeEnabled, expressionsPlugin, isSafari, cachedColors, bmPow, bmSqrt, bmFloor, bmMax, bmMin, ProjectInterface,\r\ndefaultCurveSegments, degToRads, roundCorner, bmRnd, styleDiv, BMEnterFrameEvent, BMCompleteEvent, BMCompleteLoopEvent,\r\nBMSegmentStartEvent, BMDestroyEvent, BMRenderFrameErrorEvent, BMConfigErrorEvent, BMAnimationConfigErrorEvent, createElementID,\r\naddSaturationToRGB, addBrightnessToRGB, addHueToRGB, rgbToHex */\r\n\r\nvar subframeEnabled = true;\r\nvar idPrefix = '';\r\nvar expressionsPlugin;\r\nvar isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\nvar cachedColors = {};\r\nvar bmRnd;\r\nvar bmPow = Math.pow;\r\nvar bmSqrt = Math.sqrt;\r\nvar bmFloor = Math.floor;\r\nvar bmMax = Math.max;\r\nvar bmMin = Math.min;\r\n\r\nvar BMMath = {};\r\n(function () {\r\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\r\n var i;\r\n var len = propertyNames.length;\r\n for (i = 0; i < len; i += 1) {\r\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\r\n }\r\n}());\r\n\r\nfunction ProjectInterface() { return {}; }\r\n\r\nBMMath.random = Math.random;\r\nBMMath.abs = function (val) {\r\n var tOfVal = typeof val;\r\n if (tOfVal === 'object' && val.length) {\r\n var absArr = createSizedArray(val.length);\r\n var i;\r\n var len = val.length;\r\n for (i = 0; i < len; i += 1) {\r\n absArr[i] = Math.abs(val[i]);\r\n }\r\n return absArr;\r\n }\r\n return Math.abs(val);\r\n};\r\nvar defaultCurveSegments = 150;\r\nvar degToRads = Math.PI / 180;\r\nvar roundCorner = 0.5519;\r\n\r\nfunction roundValues(flag) {\r\n if (flag) {\r\n bmRnd = Math.round;\r\n } else {\r\n bmRnd = function (val) {\r\n return val;\r\n };\r\n }\r\n}\r\nroundValues(false);\r\n\r\nfunction styleDiv(element) {\r\n element.style.position = 'absolute';\r\n element.style.top = 0;\r\n element.style.left = 0;\r\n element.style.display = 'block';\r\n element.style.transformOrigin = '0 0';\r\n element.style.webkitTransformOrigin = '0 0';\r\n element.style.backfaceVisibility = 'visible';\r\n element.style.webkitBackfaceVisibility = 'visible';\r\n element.style.transformStyle = 'preserve-3d';\r\n element.style.webkitTransformStyle = 'preserve-3d';\r\n element.style.mozTransformStyle = 'preserve-3d';\r\n}\r\n\r\nfunction BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\r\n this.type = type;\r\n this.currentTime = currentTime;\r\n this.totalTime = totalTime;\r\n this.direction = frameMultiplier < 0 ? -1 : 1;\r\n}\r\n\r\nfunction BMCompleteEvent(type, frameMultiplier) {\r\n this.type = type;\r\n this.direction = frameMultiplier < 0 ? -1 : 1;\r\n}\r\n\r\nfunction BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\r\n this.type = type;\r\n this.currentLoop = currentLoop;\r\n this.totalLoops = totalLoops;\r\n this.direction = frameMultiplier < 0 ? -1 : 1;\r\n}\r\n\r\nfunction BMSegmentStartEvent(type, firstFrame, totalFrames) {\r\n this.type = type;\r\n this.firstFrame = firstFrame;\r\n this.totalFrames = totalFrames;\r\n}\r\n\r\nfunction BMDestroyEvent(type, target) {\r\n this.type = type;\r\n this.target = target;\r\n}\r\n\r\nfunction BMRenderFrameErrorEvent(nativeError, currentTime) {\r\n this.type = 'renderFrameError';\r\n this.nativeError = nativeError;\r\n this.currentTime = currentTime;\r\n}\r\n\r\nfunction BMConfigErrorEvent(nativeError) {\r\n this.type = 'configError';\r\n this.nativeError = nativeError;\r\n}\r\n\r\nfunction BMAnimationConfigErrorEvent(type, nativeError) {\r\n this.type = type;\r\n this.nativeError = nativeError;\r\n}\r\n\r\nvar createElementID = (function () {\r\n var _count = 0;\r\n return function createID() {\r\n _count += 1;\r\n return idPrefix + '__lottie_element_' + _count;\r\n };\r\n}());\r\n\r\nfunction HSVtoRGB(h, s, v) {\r\n var r;\r\n var g;\r\n var b;\r\n var i;\r\n var f;\r\n var p;\r\n var q;\r\n var t;\r\n i = Math.floor(h * 6);\r\n f = h * 6 - i;\r\n p = v * (1 - s);\r\n q = v * (1 - f * s);\r\n t = v * (1 - (1 - f) * s);\r\n switch (i % 6) {\r\n case 0: r = v; g = t; b = p; break;\r\n case 1: r = q; g = v; b = p; break;\r\n case 2: r = p; g = v; b = t; break;\r\n case 3: r = p; g = q; b = v; break;\r\n case 4: r = t; g = p; b = v; break;\r\n case 5: r = v; g = p; b = q; break;\r\n default: break;\r\n }\r\n return [r,\r\n g,\r\n b];\r\n}\r\n\r\nfunction RGBtoHSV(r, g, b) {\r\n var max = Math.max(r, g, b);\r\n var min = Math.min(r, g, b);\r\n var d = max - min;\r\n var h;\r\n var s = (max === 0 ? 0 : d / max);\r\n var v = max / 255;\r\n\r\n switch (max) {\r\n case min: h = 0; break;\r\n case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break;\r\n case g: h = (b - r) + d * 2; h /= 6 * d; break;\r\n case b: h = (r - g) + d * 4; h /= 6 * d; break;\r\n default: break;\r\n }\r\n\r\n return [\r\n h,\r\n s,\r\n v,\r\n ];\r\n}\r\n\r\nfunction addSaturationToRGB(color, offset) {\r\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n hsv[1] += offset;\r\n if (hsv[1] > 1) {\r\n hsv[1] = 1;\r\n } else if (hsv[1] <= 0) {\r\n hsv[1] = 0;\r\n }\r\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n}\r\n\r\nfunction addBrightnessToRGB(color, offset) {\r\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n hsv[2] += offset;\r\n if (hsv[2] > 1) {\r\n hsv[2] = 1;\r\n } else if (hsv[2] < 0) {\r\n hsv[2] = 0;\r\n }\r\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n}\r\n\r\nfunction addHueToRGB(color, offset) {\r\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\r\n hsv[0] += offset / 360;\r\n if (hsv[0] > 1) {\r\n hsv[0] -= 1;\r\n } else if (hsv[0] < 0) {\r\n hsv[0] += 1;\r\n }\r\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\r\n}\r\n\r\nvar rgbToHex = (function () {\r\n var colorMap = [];\r\n var i;\r\n var hex;\r\n for (i = 0; i < 256; i += 1) {\r\n hex = i.toString(16);\r\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\r\n }\r\n\r\n return function (r, g, b) {\r\n if (r < 0) {\r\n r = 0;\r\n }\r\n if (g < 0) {\r\n g = 0;\r\n }\r\n if (b < 0) {\r\n b = 0;\r\n }\r\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\r\n };\r\n}());\r\n\r\nfunction BaseEvent() {}\r\nBaseEvent.prototype = {\r\n triggerEvent: function (eventName, args) {\r\n if (this._cbs[eventName]) {\r\n var len = this._cbs[eventName].length;\r\n for (var i = 0; i < len; i += 1) {\r\n this._cbs[eventName][i](args);\r\n }\r\n }\r\n },\r\n addEventListener: function (eventName, callback) {\r\n if (!this._cbs[eventName]) {\r\n this._cbs[eventName] = [];\r\n }\r\n this._cbs[eventName].push(callback);\r\n\r\n return function () {\r\n this.removeEventListener(eventName, callback);\r\n }.bind(this);\r\n },\r\n removeEventListener: function (eventName, callback) {\r\n if (!callback) {\r\n this._cbs[eventName] = null;\r\n } else if (this._cbs[eventName]) {\r\n var i = 0;\r\n var len = this._cbs[eventName].length;\r\n while (i < len) {\r\n if (this._cbs[eventName][i] === callback) {\r\n this._cbs[eventName].splice(i, 1);\r\n i -= 1;\r\n len -= 1;\r\n }\r\n i += 1;\r\n }\r\n if (!this._cbs[eventName].length) {\r\n this._cbs[eventName] = null;\r\n }\r\n }\r\n },\r\n};\r\n\r\n/* exported createTypedArray, createSizedArray */\r\n\r\nvar createTypedArray = (function () {\r\n function createRegularArray(type, len) {\r\n var i = 0;\r\n var arr = [];\r\n var value;\r\n switch (type) {\r\n case 'int16':\r\n case 'uint8c':\r\n value = 1;\r\n break;\r\n default:\r\n value = 1.1;\r\n break;\r\n }\r\n for (i = 0; i < len; i += 1) {\r\n arr.push(value);\r\n }\r\n return arr;\r\n }\r\n function createTypedArrayFactory(type, len) {\r\n if (type === 'float32') {\r\n return new Float32Array(len);\r\n } if (type === 'int16') {\r\n return new Int16Array(len);\r\n } if (type === 'uint8c') {\r\n return new Uint8ClampedArray(len);\r\n }\r\n return createRegularArray(type, len);\r\n }\r\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\r\n return createTypedArrayFactory;\r\n }\r\n return createRegularArray;\r\n}());\r\n\r\nfunction createSizedArray(len) {\r\n return Array.apply(null, { length: len });\r\n}\r\n\r\n/* global svgNS */\r\n/* exported createNS */\r\n\r\nfunction createNS(type) {\r\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\r\n return document.createElementNS(svgNS, type);\r\n}\r\n\r\n/* exported createTag */\r\n\r\nfunction createTag(type) {\r\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\r\n return document.createElement(type);\r\n}\r\n\r\nfunction DynamicPropertyContainer() {}\r\nDynamicPropertyContainer.prototype = {\r\n addDynamicProperty: function (prop) {\r\n if (this.dynamicProperties.indexOf(prop) === -1) {\r\n this.dynamicProperties.push(prop);\r\n this.container.addDynamicProperty(this);\r\n this._isAnimated = true;\r\n }\r\n },\r\n iterateDynamicProperties: function () {\r\n this._mdf = false;\r\n var i;\r\n var len = this.dynamicProperties.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.dynamicProperties[i].getValue();\r\n if (this.dynamicProperties[i]._mdf) {\r\n this._mdf = true;\r\n }\r\n }\r\n },\r\n initDynamicPropertyContainer: function (container) {\r\n this.container = container;\r\n this.dynamicProperties = [];\r\n this._mdf = false;\r\n this._isAnimated = false;\r\n },\r\n};\r\n\r\n/* exported getBlendMode */\r\n\r\nvar getBlendMode = (function () {\r\n var blendModeEnums = {\r\n 0: 'source-over',\r\n 1: 'multiply',\r\n 2: 'screen',\r\n 3: 'overlay',\r\n 4: 'darken',\r\n 5: 'lighten',\r\n 6: 'color-dodge',\r\n 7: 'color-burn',\r\n 8: 'hard-light',\r\n 9: 'soft-light',\r\n 10: 'difference',\r\n 11: 'exclusion',\r\n 12: 'hue',\r\n 13: 'saturation',\r\n 14: 'color',\r\n 15: 'luminosity',\r\n };\r\n\r\n return function (mode) {\r\n return blendModeEnums[mode] || '';\r\n };\r\n}());\r\n\r\n/* global createTypedArray */\r\n\r\n/*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\r\n\r\n/**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\r\n\r\nvar Matrix = (function () {\r\n var _cos = Math.cos;\r\n var _sin = Math.sin;\r\n var _tan = Math.tan;\r\n var _rnd = Math.round;\r\n\r\n function reset() {\r\n this.props[0] = 1;\r\n this.props[1] = 0;\r\n this.props[2] = 0;\r\n this.props[3] = 0;\r\n this.props[4] = 0;\r\n this.props[5] = 1;\r\n this.props[6] = 0;\r\n this.props[7] = 0;\r\n this.props[8] = 0;\r\n this.props[9] = 0;\r\n this.props[10] = 1;\r\n this.props[11] = 0;\r\n this.props[12] = 0;\r\n this.props[13] = 0;\r\n this.props[14] = 0;\r\n this.props[15] = 1;\r\n return this;\r\n }\r\n\r\n function rotate(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateX(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateY(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateZ(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function shear(sx, sy) {\r\n return this._t(1, sy, sx, 1, 0, 0);\r\n }\r\n\r\n function skew(ax, ay) {\r\n return this.shear(_tan(ax), _tan(ay));\r\n }\r\n\r\n function skewFromAxis(ax, angle) {\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\r\n ._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\r\n ._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\r\n }\r\n\r\n function scale(sx, sy, sz) {\r\n if (!sz && sz !== 0) {\r\n sz = 1;\r\n }\r\n if (sx === 1 && sy === 1 && sz === 1) {\r\n return this;\r\n }\r\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\r\n this.props[0] = a;\r\n this.props[1] = b;\r\n this.props[2] = c;\r\n this.props[3] = d;\r\n this.props[4] = e;\r\n this.props[5] = f;\r\n this.props[6] = g;\r\n this.props[7] = h;\r\n this.props[8] = i;\r\n this.props[9] = j;\r\n this.props[10] = k;\r\n this.props[11] = l;\r\n this.props[12] = m;\r\n this.props[13] = n;\r\n this.props[14] = o;\r\n this.props[15] = p;\r\n return this;\r\n }\r\n\r\n function translate(tx, ty, tz) {\r\n tz = tz || 0;\r\n if (tx !== 0 || ty !== 0 || tz !== 0) {\r\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\r\n }\r\n return this;\r\n }\r\n\r\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\r\n var _p = this.props;\r\n\r\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\r\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\r\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\r\n _p[12] = _p[12] * a2 + _p[15] * m2;\r\n _p[13] = _p[13] * f2 + _p[15] * n2;\r\n _p[14] = _p[14] * k2 + _p[15] * o2;\r\n _p[15] *= p2;\r\n // }\r\n this._identityCalculated = false;\r\n return this;\r\n }\r\n\r\n var a1 = _p[0];\r\n var b1 = _p[1];\r\n var c1 = _p[2];\r\n var d1 = _p[3];\r\n var e1 = _p[4];\r\n var f1 = _p[5];\r\n var g1 = _p[6];\r\n var h1 = _p[7];\r\n var i1 = _p[8];\r\n var j1 = _p[9];\r\n var k1 = _p[10];\r\n var l1 = _p[11];\r\n var m1 = _p[12];\r\n var n1 = _p[13];\r\n var o1 = _p[14];\r\n var p1 = _p[15];\r\n\r\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\r\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\r\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\r\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\r\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\r\n\r\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\r\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\r\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\r\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\r\n\r\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\r\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\r\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\r\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\r\n\r\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\r\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\r\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\r\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\r\n\r\n this._identityCalculated = false;\r\n return this;\r\n }\r\n\r\n function isIdentity() {\r\n if (!this._identityCalculated) {\r\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\r\n this._identityCalculated = true;\r\n }\r\n return this._identity;\r\n }\r\n\r\n function equals(matr) {\r\n var i = 0;\r\n while (i < 16) {\r\n if (matr.props[i] !== this.props[i]) {\r\n return false;\r\n }\r\n i += 1;\r\n }\r\n return true;\r\n }\r\n\r\n function clone(matr) {\r\n var i;\r\n for (i = 0; i < 16; i += 1) {\r\n matr.props[i] = this.props[i];\r\n }\r\n return matr;\r\n }\r\n\r\n function cloneFromProps(props) {\r\n var i;\r\n for (i = 0; i < 16; i += 1) {\r\n this.props[i] = props[i];\r\n }\r\n }\r\n\r\n function applyToPoint(x, y, z) {\r\n return {\r\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\r\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\r\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14],\r\n };\r\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\r\n }\r\n function applyToX(x, y, z) {\r\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\r\n }\r\n function applyToY(x, y, z) {\r\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\r\n }\r\n function applyToZ(x, y, z) {\r\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\r\n }\r\n\r\n function getInverseMatrix() {\r\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\r\n var a = this.props[5] / determinant;\r\n var b = -this.props[1] / determinant;\r\n var c = -this.props[4] / determinant;\r\n var d = this.props[0] / determinant;\r\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\r\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\r\n var inverseMatrix = new Matrix();\r\n inverseMatrix.props[0] = a;\r\n inverseMatrix.props[1] = b;\r\n inverseMatrix.props[4] = c;\r\n inverseMatrix.props[5] = d;\r\n inverseMatrix.props[12] = e;\r\n inverseMatrix.props[13] = f;\r\n return inverseMatrix;\r\n }\r\n\r\n function inversePoint(pt) {\r\n var inverseMatrix = this.getInverseMatrix();\r\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\r\n }\r\n\r\n function inversePoints(pts) {\r\n var i;\r\n var len = pts.length;\r\n var retPts = [];\r\n for (i = 0; i < len; i += 1) {\r\n retPts[i] = inversePoint(pts[i]);\r\n }\r\n return retPts;\r\n }\r\n\r\n function applyToTriplePoints(pt1, pt2, pt3) {\r\n var arr = createTypedArray('float32', 6);\r\n if (this.isIdentity()) {\r\n arr[0] = pt1[0];\r\n arr[1] = pt1[1];\r\n arr[2] = pt2[0];\r\n arr[3] = pt2[1];\r\n arr[4] = pt3[0];\r\n arr[5] = pt3[1];\r\n } else {\r\n var p0 = this.props[0];\r\n var p1 = this.props[1];\r\n var p4 = this.props[4];\r\n var p5 = this.props[5];\r\n var p12 = this.props[12];\r\n var p13 = this.props[13];\r\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\r\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\r\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\r\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\r\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\r\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\r\n }\r\n return arr;\r\n }\r\n\r\n function applyToPointArray(x, y, z) {\r\n var arr;\r\n if (this.isIdentity()) {\r\n arr = [x, y, z];\r\n } else {\r\n arr = [\r\n x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\r\n x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\r\n x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14],\r\n ];\r\n }\r\n return arr;\r\n }\r\n\r\n function applyToPointStringified(x, y) {\r\n if (this.isIdentity()) {\r\n return x + ',' + y;\r\n }\r\n var _p = this.props;\r\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\r\n }\r\n\r\n function toCSS() {\r\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\r\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\r\n var i = 0;\r\n var props = this.props;\r\n var cssValue = 'matrix3d(';\r\n var v = 10000;\r\n while (i < 16) {\r\n cssValue += _rnd(props[i] * v) / v;\r\n cssValue += i === 15 ? ')' : ',';\r\n i += 1;\r\n }\r\n return cssValue;\r\n }\r\n\r\n function roundMatrixProperty(val) {\r\n var v = 10000;\r\n if ((val < 0.000001 && val > 0) || (val > -0.000001 && val < 0)) {\r\n return _rnd(val * v) / v;\r\n }\r\n return val;\r\n }\r\n\r\n function to2dCSS() {\r\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\r\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\r\n var props = this.props;\r\n var _a = roundMatrixProperty(props[0]);\r\n var _b = roundMatrixProperty(props[1]);\r\n var _c = roundMatrixProperty(props[4]);\r\n var _d = roundMatrixProperty(props[5]);\r\n var _e = roundMatrixProperty(props[12]);\r\n var _f = roundMatrixProperty(props[13]);\r\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\r\n }\r\n\r\n return function () {\r\n this.reset = reset;\r\n this.rotate = rotate;\r\n this.rotateX = rotateX;\r\n this.rotateY = rotateY;\r\n this.rotateZ = rotateZ;\r\n this.skew = skew;\r\n this.skewFromAxis = skewFromAxis;\r\n this.shear = shear;\r\n this.scale = scale;\r\n this.setTransform = setTransform;\r\n this.translate = translate;\r\n this.transform = transform;\r\n this.applyToPoint = applyToPoint;\r\n this.applyToX = applyToX;\r\n this.applyToY = applyToY;\r\n this.applyToZ = applyToZ;\r\n this.applyToPointArray = applyToPointArray;\r\n this.applyToTriplePoints = applyToTriplePoints;\r\n this.applyToPointStringified = applyToPointStringified;\r\n this.toCSS = toCSS;\r\n this.to2dCSS = to2dCSS;\r\n this.clone = clone;\r\n this.cloneFromProps = cloneFromProps;\r\n this.equals = equals;\r\n this.inversePoints = inversePoints;\r\n this.inversePoint = inversePoint;\r\n this.getInverseMatrix = getInverseMatrix;\r\n this._t = this.transform;\r\n this.isIdentity = isIdentity;\r\n this._identity = true;\r\n this._identityCalculated = false;\r\n\r\n this.props = createTypedArray('float32', 16);\r\n this.reset();\r\n };\r\n}());\r\n\r\n/* eslint-disable */\r\n/*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\r\n\r\n(function (pool, math) {\r\n//\r\n// The following constants are related to IEEE 754 limits.\r\n//\r\n var global = this,\r\n width = 256, // each RC4 output is 0 <= x < 256\r\n chunks = 6, // at least six RC4 outputs for each double\r\n digits = 52, // there are 52 significant digits in a double\r\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\r\n startdenom = math.pow(width, chunks),\r\n significance = math.pow(2, digits),\r\n overflow = significance * 2,\r\n mask = width - 1,\r\n nodecrypto; // node.js crypto module, initialized at the bottom.\r\n\r\n//\r\n// seedrandom()\r\n// This is the seedrandom function described above.\r\n//\r\n function seedrandom(seed, options, callback) {\r\n var key = [];\r\n options = (options === true) ? { entropy: true } : (options || {});\r\n\r\n // Flatten the seed string or build one from local entropy if needed.\r\n var shortseed = mixkey(flatten(\r\n options.entropy ? [seed, tostring(pool)] :\r\n (seed === null) ? autoseed() : seed, 3), key);\r\n\r\n // Use the seed to initialize an ARC4 generator.\r\n var arc4 = new ARC4(key);\r\n\r\n // This function returns a random double in [0, 1) that contains\r\n // randomness in every bit of the mantissa of the IEEE 754 value.\r\n var prng = function() {\r\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\r\n d = startdenom, // and denominator d = 2 ^ 48.\r\n x = 0; // and no 'extra last byte'.\r\n while (n < significance) { // Fill up all significant digits by\r\n n = (n + x) * width; // shifting numerator and\r\n d *= width; // denominator and generating a\r\n x = arc4.g(1); // new least-significant-byte.\r\n }\r\n while (n >= overflow) { // To avoid rounding up, before adding\r\n n /= 2; // last byte, shift everything\r\n d /= 2; // right using integer math until\r\n x >>>= 1; // we have exactly the desired bits.\r\n }\r\n return (n + x) / d; // Form the number within [0, 1).\r\n };\r\n\r\n prng.int32 = function() { return arc4.g(4) | 0; };\r\n prng.quick = function() { return arc4.g(4) / 0x100000000; };\r\n prng.double = prng;\r\n\r\n // Mix the randomness into accumulated entropy.\r\n mixkey(tostring(arc4.S), pool);\r\n\r\n // Calling convention: what to return as a function of prng, seed, is_math.\r\n return (options.pass || callback ||\r\n function(prng, seed, is_math_call, state) {\r\n if (state) {\r\n // Load the arc4 state from the given state if it has an S array.\r\n if (state.S) { copy(state, arc4); }\r\n // Only provide the .state method if requested via options.state.\r\n prng.state = function() { return copy(arc4, {}); };\r\n }\r\n\r\n // If called as a method of Math (Math.seedrandom()), mutate\r\n // Math.random because that is how seedrandom.js has worked since v1.0.\r\n if (is_math_call) { math[rngname] = prng; return seed; }\r\n\r\n // Otherwise, it is a newer calling convention, so return the\r\n // prng directly.\r\n else return prng;\r\n })(\r\n prng,\r\n shortseed,\r\n 'global' in options ? options.global : (this == math),\r\n options.state);\r\n }\r\n math['seed' + rngname] = seedrandom;\r\n\r\n//\r\n// ARC4\r\n//\r\n// An ARC4 implementation. The constructor takes a key in the form of\r\n// an array of at most (width) integers that should be 0 <= x < (width).\r\n//\r\n// The g(count) method returns a pseudorandom integer that concatenates\r\n// the next (count) outputs from ARC4. Its return value is a number x\r\n// that is in the range 0 <= x < (width ^ count).\r\n//\r\n function ARC4(key) {\r\n var t, keylen = key.length,\r\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\r\n\r\n // The empty key [] is treated as [0].\r\n if (!keylen) { key = [keylen++]; }\r\n\r\n // Set up S using the standard key scheduling algorithm.\r\n while (i < width) {\r\n s[i] = i++;\r\n }\r\n for (i = 0; i < width; i++) {\r\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\r\n s[j] = t;\r\n }\r\n\r\n // The \"g\" method returns the next (count) outputs as one number.\r\n me.g = function(count) {\r\n // Using instance members instead of closure state nearly doubles speed.\r\n var t, r = 0,\r\n i = me.i, j = me.j, s = me.S;\r\n while (count--) {\r\n t = s[i = mask & (i + 1)];\r\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\r\n }\r\n me.i = i; me.j = j;\r\n return r;\r\n // For robust unpredictability, the function call below automatically\r\n // discards an initial batch of values. This is called RC4-drop[256].\r\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\r\n };\r\n }\r\n\r\n//\r\n// copy()\r\n// Copies internal state of ARC4 to or from a plain object.\r\n//\r\n function copy(f, t) {\r\n t.i = f.i;\r\n t.j = f.j;\r\n t.S = f.S.slice();\r\n return t;\r\n }\r\n\r\n//\r\n// flatten()\r\n// Converts an object tree to nested arrays of strings.\r\n//\r\n function flatten(obj, depth) {\r\n var result = [], typ = (typeof obj), prop;\r\n if (depth && typ == 'object') {\r\n for (prop in obj) {\r\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\r\n }\r\n }\r\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\r\n }\r\n\r\n//\r\n// mixkey()\r\n// Mixes a string seed into a key that is an array of integers, and\r\n// returns a shortened string seed that is equivalent to the result key.\r\n//\r\n function mixkey(seed, key) {\r\n var stringseed = seed + '', smear, j = 0;\r\n while (j < stringseed.length) {\r\n key[mask & j] =\r\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\r\n }\r\n return tostring(key);\r\n }\r\n\r\n//\r\n// autoseed()\r\n// Returns an object for autoseeding, using window.crypto and Node crypto\r\n// module if available.\r\n//\r\n function autoseed() {\r\n try {\r\n if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); }\r\n var out = new Uint8Array(width);\r\n (global.crypto || global.msCrypto).getRandomValues(out);\r\n return tostring(out);\r\n } catch (e) {\r\n var browser = global.navigator,\r\n plugins = browser && browser.plugins;\r\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\r\n }\r\n }\r\n\r\n//\r\n// tostring()\r\n// Converts an array of charcodes to a string\r\n//\r\n function tostring(a) {\r\n return String.fromCharCode.apply(0, a);\r\n }\r\n\r\n//\r\n// When seedrandom.js is loaded, we immediately mix a few bits\r\n// from the built-in RNG into the entropy pool. Because we do\r\n// not want to interfere with deterministic PRNG state later,\r\n// seedrandom will not call math.random on its own again after\r\n// initialization.\r\n//\r\n mixkey(math.random(), pool);\r\n\r\n//\r\n// Nodejs and AMD support: export the implementation as a module using\r\n// either convention.\r\n//\r\n\r\n// End anonymous scope, and pass initial values.\r\n})(\r\n [], // pool: entropy pool starts empty\r\n BMMath // math: package containing random, pow, and seedrandom\r\n);\r\n/* eslint-disable */\r\nvar BezierFactory = (function () {\r\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\r\n\r\n var ob = {};\r\n ob.getBezierEasing = getBezierEasing;\r\n var beziers = {};\r\n\r\n function getBezierEasing(a, b, c, d, nm) {\r\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\r\n if (beziers[str]) {\r\n return beziers[str];\r\n }\r\n var bezEasing = new BezierEasing([a, b, c, d]);\r\n beziers[str] = bezEasing;\r\n return bezEasing;\r\n }\r\n\r\n // These values are established by empiricism with tests (tradeoff: performance VS precision)\r\n var NEWTON_ITERATIONS = 4;\r\n var NEWTON_MIN_SLOPE = 0.001;\r\n var SUBDIVISION_PRECISION = 0.0000001;\r\n var SUBDIVISION_MAX_ITERATIONS = 10;\r\n\r\n var kSplineTableSize = 11;\r\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\r\n\r\n var float32ArraySupported = typeof Float32Array === 'function';\r\n\r\n function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\r\n function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\r\n function C(aA1) { return 3.0 * aA1; }\r\n\r\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\r\n function calcBezier(aT, aA1, aA2) {\r\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\r\n }\r\n\r\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\r\n function getSlope(aT, aA1, aA2) {\r\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\r\n }\r\n\r\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\r\n var currentX,\r\n currentT,\r\n i = 0;\r\n do {\r\n currentT = aA + (aB - aA) / 2.0;\r\n currentX = calcBezier(currentT, mX1, mX2) - aX;\r\n if (currentX > 0.0) {\r\n aB = currentT;\r\n } else {\r\n aA = currentT;\r\n }\r\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\r\n return currentT;\r\n }\r\n\r\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\r\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\r\n var currentSlope = getSlope(aGuessT, mX1, mX2);\r\n if (currentSlope === 0.0) return aGuessT;\r\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\r\n aGuessT -= currentX / currentSlope;\r\n }\r\n return aGuessT;\r\n }\r\n\r\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\r\n function BezierEasing(points) {\r\n this._p = points;\r\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\r\n this._precomputed = false;\r\n\r\n this.get = this.get.bind(this);\r\n }\r\n\r\n BezierEasing.prototype = {\r\n\r\n get: function (x) {\r\n var mX1 = this._p[0],\r\n mY1 = this._p[1],\r\n mX2 = this._p[2],\r\n mY2 = this._p[3];\r\n if (!this._precomputed) this._precompute();\r\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\r\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\r\n if (x === 0) return 0;\r\n if (x === 1) return 1;\r\n return calcBezier(this._getTForX(x), mY1, mY2);\r\n },\r\n\r\n // Private part\r\n\r\n _precompute: function () {\r\n var mX1 = this._p[0],\r\n mY1 = this._p[1],\r\n mX2 = this._p[2],\r\n mY2 = this._p[3];\r\n this._precomputed = true;\r\n if (mX1 !== mY1 || mX2 !== mY2) { this._calcSampleValues(); }\r\n },\r\n\r\n _calcSampleValues: function () {\r\n var mX1 = this._p[0],\r\n mX2 = this._p[2];\r\n for (var i = 0; i < kSplineTableSize; ++i) {\r\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\r\n }\r\n },\r\n\r\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\r\n _getTForX: function (aX) {\r\n var mX1 = this._p[0],\r\n mX2 = this._p[2],\r\n mSampleValues = this._mSampleValues;\r\n\r\n var intervalStart = 0.0;\r\n var currentSample = 1;\r\n var lastSample = kSplineTableSize - 1;\r\n\r\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\r\n intervalStart += kSampleStepSize;\r\n }\r\n --currentSample;\r\n\r\n // Interpolate to provide an initial guess for t\r\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\r\n var guessForT = intervalStart + dist * kSampleStepSize;\r\n\r\n var initialSlope = getSlope(guessForT, mX1, mX2);\r\n if (initialSlope >= NEWTON_MIN_SLOPE) {\r\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\r\n } if (initialSlope === 0.0) {\r\n return guessForT;\r\n }\r\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\r\n },\r\n };\r\n\r\n return ob;\r\n}());\r\n\r\n(function () {\r\n var lastTime = 0;\r\n var vendors = ['ms', 'moz', 'webkit', 'o'];\r\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { // eslint-disable-line no-plusplus\r\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n }\r\n if (!window.requestAnimationFrame) {\r\n window.requestAnimationFrame = function (callback) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = setTimeout(function () {\r\n callback(currTime + timeToCall);\r\n },\r\n timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n }\r\n if (!window.cancelAnimationFrame) {\r\n window.cancelAnimationFrame = function (id) {\r\n clearTimeout(id);\r\n };\r\n }\r\n}());\r\n\r\n/* exported extendPrototype, getDescriptor, createProxyFunction */\r\n\r\nfunction extendPrototype(sources, destination) {\r\n var i;\r\n var len = sources.length;\r\n var sourcePrototype;\r\n for (i = 0; i < len; i += 1) {\r\n sourcePrototype = sources[i].prototype;\r\n for (var attr in sourcePrototype) {\r\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\r\n }\r\n }\r\n}\r\n\r\nfunction getDescriptor(object, prop) {\r\n return Object.getOwnPropertyDescriptor(object, prop);\r\n}\r\n\r\nfunction createProxyFunction(prototype) {\r\n function ProxyFunction() {}\r\n ProxyFunction.prototype = prototype;\r\n return ProxyFunction;\r\n}\r\n\r\n/* global segmentsLengthPool, defaultCurveSegments, createSizedArray, bmPow, bmSqrt, bmFloor, createTypedArray, bezierLengthPool */\r\n/* exported bez */\r\n\r\nfunction bezFunction() {\r\n var math = Math;\r\n\r\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\r\n var det1 = (x1 * y2) + (y1 * x3) + (x2 * y3) - (x3 * y2) - (y3 * x1) - (x2 * y1);\r\n return det1 > -0.001 && det1 < 0.001;\r\n }\r\n\r\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\r\n if (z1 === 0 && z2 === 0 && z3 === 0) {\r\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\r\n }\r\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\r\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\r\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\r\n var diffDist;\r\n if (dist1 > dist2) {\r\n if (dist1 > dist3) {\r\n diffDist = dist1 - dist2 - dist3;\r\n } else {\r\n diffDist = dist3 - dist2 - dist1;\r\n }\r\n } else if (dist3 > dist2) {\r\n diffDist = dist3 - dist2 - dist1;\r\n } else {\r\n diffDist = dist2 - dist1 - dist3;\r\n }\r\n return diffDist > -0.0001 && diffDist < 0.0001;\r\n }\r\n\r\n var getBezierLength = (function () {\r\n return function (pt1, pt2, pt3, pt4) {\r\n var curveSegments = defaultCurveSegments;\r\n var k;\r\n var i;\r\n var len;\r\n var ptCoord;\r\n var perc;\r\n var addedLength = 0;\r\n var ptDistance;\r\n var point = [];\r\n var lastPoint = [];\r\n var lengthData = bezierLengthPool.newElement();\r\n len = pt3.length;\r\n for (k = 0; k < curveSegments; k += 1) {\r\n perc = k / (curveSegments - 1);\r\n ptDistance = 0;\r\n for (i = 0; i < len; i += 1) {\r\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\r\n point[i] = ptCoord;\r\n if (lastPoint[i] !== null) {\r\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\r\n }\r\n lastPoint[i] = point[i];\r\n }\r\n if (ptDistance) {\r\n ptDistance = bmSqrt(ptDistance);\r\n addedLength += ptDistance;\r\n }\r\n lengthData.percents[k] = perc;\r\n lengthData.lengths[k] = addedLength;\r\n }\r\n lengthData.addedLength = addedLength;\r\n return lengthData;\r\n };\r\n }());\r\n\r\n function getSegmentsLength(shapeData) {\r\n var segmentsLength = segmentsLengthPool.newElement();\r\n var closed = shapeData.c;\r\n var pathV = shapeData.v;\r\n var pathO = shapeData.o;\r\n var pathI = shapeData.i;\r\n var i;\r\n var len = shapeData._length;\r\n var lengths = segmentsLength.lengths;\r\n var totalLength = 0;\r\n for (i = 0; i < len - 1; i += 1) {\r\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\r\n totalLength += lengths[i].addedLength;\r\n }\r\n if (closed && len) {\r\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\r\n totalLength += lengths[i].addedLength;\r\n }\r\n segmentsLength.totalLength = totalLength;\r\n return segmentsLength;\r\n }\r\n\r\n function BezierData(length) {\r\n this.segmentLength = 0;\r\n this.points = new Array(length);\r\n }\r\n\r\n function PointData(partial, point) {\r\n this.partialLength = partial;\r\n this.point = point;\r\n }\r\n\r\n var buildBezierData = (function () {\r\n var storedData = {};\r\n\r\n return function (pt1, pt2, pt3, pt4) {\r\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\r\n if (!storedData[bezierName]) {\r\n var curveSegments = defaultCurveSegments;\r\n var k;\r\n var i;\r\n var len;\r\n var ptCoord;\r\n var perc;\r\n var addedLength = 0;\r\n var ptDistance;\r\n var point;\r\n var lastPoint = null;\r\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\r\n curveSegments = 2;\r\n }\r\n var bezierData = new BezierData(curveSegments);\r\n len = pt3.length;\r\n for (k = 0; k < curveSegments; k += 1) {\r\n point = createSizedArray(len);\r\n perc = k / (curveSegments - 1);\r\n ptDistance = 0;\r\n for (i = 0; i < len; i += 1) {\r\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\r\n point[i] = ptCoord;\r\n if (lastPoint !== null) {\r\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\r\n }\r\n }\r\n ptDistance = bmSqrt(ptDistance);\r\n addedLength += ptDistance;\r\n bezierData.points[k] = new PointData(ptDistance, point);\r\n lastPoint = point;\r\n }\r\n bezierData.segmentLength = addedLength;\r\n storedData[bezierName] = bezierData;\r\n }\r\n return storedData[bezierName];\r\n };\r\n }());\r\n\r\n function getDistancePerc(perc, bezierData) {\r\n var percents = bezierData.percents;\r\n var lengths = bezierData.lengths;\r\n var len = percents.length;\r\n var initPos = bmFloor((len - 1) * perc);\r\n var lengthPos = perc * bezierData.addedLength;\r\n var lPerc = 0;\r\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\r\n return percents[initPos];\r\n }\r\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\r\n var flag = true;\r\n while (flag) {\r\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\r\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\r\n flag = false;\r\n } else {\r\n initPos += dir;\r\n }\r\n if (initPos < 0 || initPos >= len - 1) {\r\n // FIX for TypedArrays that don't store floating point values with enough accuracy\r\n if (initPos === len - 1) {\r\n return percents[initPos];\r\n }\r\n flag = false;\r\n }\r\n }\r\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\r\n }\r\n\r\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\r\n var t1 = getDistancePerc(percent, bezierData);\r\n var u1 = 1 - t1;\r\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\r\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\r\n return [ptX, ptY];\r\n }\r\n\r\n var bezierSegmentPoints = createTypedArray('float32', 8);\r\n\r\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\r\n if (startPerc < 0) {\r\n startPerc = 0;\r\n } else if (startPerc > 1) {\r\n startPerc = 1;\r\n }\r\n var t0 = getDistancePerc(startPerc, bezierData);\r\n endPerc = endPerc > 1 ? 1 : endPerc;\r\n var t1 = getDistancePerc(endPerc, bezierData);\r\n var i;\r\n var len = pt1.length;\r\n var u0 = 1 - t0;\r\n var u1 = 1 - t1;\r\n var u0u0u0 = u0 * u0 * u0;\r\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\r\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\r\n var t0t0t0 = t0 * t0 * t0;\r\n //\r\n var u0u0u1 = u0 * u0 * u1;\r\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\r\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\r\n var t0t0t1 = t0 * t0 * t1;\r\n //\r\n var u0u1u1 = u0 * u1 * u1;\r\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\r\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\r\n var t0t1t1 = t0 * t1 * t1;\r\n //\r\n var u1u1u1 = u1 * u1 * u1;\r\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\r\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\r\n var t1t1t1 = t1 * t1 * t1;\r\n for (i = 0; i < len; i += 1) {\r\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\r\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\r\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\r\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\r\n }\r\n\r\n return bezierSegmentPoints;\r\n }\r\n\r\n return {\r\n getSegmentsLength: getSegmentsLength,\r\n getNewSegment: getNewSegment,\r\n getPointInSegment: getPointInSegment,\r\n buildBezierData: buildBezierData,\r\n pointOnLine2D: pointOnLine2D,\r\n pointOnLine3D: pointOnLine3D,\r\n };\r\n}\r\n\r\nvar bez = bezFunction();\r\n\r\n/* exported dataManager */\r\n\r\nfunction dataFunctionManager() {\r\n // var tCanvasHelper = createTag('canvas').getContext('2d');\r\n\r\n function completeLayers(layers, comps, fontManager) {\r\n var layerData;\r\n var i;\r\n var len = layers.length;\r\n var j;\r\n var jLen;\r\n var k;\r\n var kLen;\r\n for (i = 0; i < len; i += 1) {\r\n layerData = layers[i];\r\n if (('ks' in layerData) && !layerData.completed) {\r\n layerData.completed = true;\r\n if (layerData.tt) {\r\n layers[i - 1].td = layerData.tt;\r\n }\r\n if (layerData.hasMask) {\r\n var maskProps = layerData.masksProperties;\r\n jLen = maskProps.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n if (maskProps[j].pt.k.i) {\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\r\n } else {\r\n kLen = maskProps[j].pt.k.length;\r\n for (k = 0; k < kLen; k += 1) {\r\n if (maskProps[j].pt.k[k].s) {\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\r\n }\r\n if (maskProps[j].pt.k[k].e) {\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (layerData.ty === 0) {\r\n layerData.layers = findCompLayers(layerData.refId, comps);\r\n completeLayers(layerData.layers, comps, fontManager);\r\n } else if (layerData.ty === 4) {\r\n completeShapes(layerData.shapes);\r\n } else if (layerData.ty === 5) {\r\n completeText(layerData, fontManager);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function findCompLayers(id, comps) {\r\n var i = 0;\r\n var len = comps.length;\r\n while (i < len) {\r\n if (comps[i].id === id) {\r\n if (!comps[i].layers.__used) {\r\n comps[i].layers.__used = true;\r\n return comps[i].layers;\r\n }\r\n return JSON.parse(JSON.stringify(comps[i].layers));\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n }\r\n\r\n function completeShapes(arr) {\r\n var i;\r\n var len = arr.length;\r\n var j;\r\n var jLen;\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (arr[i].ty === 'sh') {\r\n if (arr[i].ks.k.i) {\r\n convertPathsToAbsoluteValues(arr[i].ks.k);\r\n } else {\r\n jLen = arr[i].ks.k.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n if (arr[i].ks.k[j].s) {\r\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\r\n }\r\n if (arr[i].ks.k[j].e) {\r\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\r\n }\r\n }\r\n }\r\n } else if (arr[i].ty === 'gr') {\r\n completeShapes(arr[i].it);\r\n }\r\n }\r\n }\r\n\r\n function convertPathsToAbsoluteValues(path) {\r\n var i;\r\n var len = path.i.length;\r\n for (i = 0; i < len; i += 1) {\r\n path.i[i][0] += path.v[i][0];\r\n path.i[i][1] += path.v[i][1];\r\n path.o[i][0] += path.v[i][0];\r\n path.o[i][1] += path.v[i][1];\r\n }\r\n }\r\n\r\n function checkVersion(minimum, animVersionString) {\r\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\r\n if (minimum[0] > animVersion[0]) {\r\n return true;\r\n } if (animVersion[0] > minimum[0]) {\r\n return false;\r\n }\r\n if (minimum[1] > animVersion[1]) {\r\n return true;\r\n } if (animVersion[1] > minimum[1]) {\r\n return false;\r\n }\r\n if (minimum[2] > animVersion[2]) {\r\n return true;\r\n } if (animVersion[2] > minimum[2]) {\r\n return false;\r\n }\r\n return null;\r\n }\r\n\r\n var checkText = (function () {\r\n var minimumVersion = [4, 4, 14];\r\n\r\n function updateTextLayer(textLayer) {\r\n var documentData = textLayer.t.d;\r\n textLayer.t.d = {\r\n k: [\r\n {\r\n s: documentData,\r\n t: 0,\r\n },\r\n ],\r\n };\r\n }\r\n\r\n function iterateLayers(layers) {\r\n var i;\r\n var len = layers.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (layers[i].ty === 5) {\r\n updateTextLayer(layers[i]);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData) {\r\n if (checkVersion(minimumVersion, animationData.v)) {\r\n iterateLayers(animationData.layers);\r\n if (animationData.assets) {\r\n var i;\r\n var len = animationData.assets.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (animationData.assets[i].layers) {\r\n iterateLayers(animationData.assets[i].layers);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }());\r\n\r\n var checkChars = (function () {\r\n var minimumVersion = [4, 7, 99];\r\n return function (animationData) {\r\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\r\n var i;\r\n var len = animationData.chars.length;\r\n var j;\r\n var jLen;\r\n var pathData;\r\n var paths;\r\n for (i = 0; i < len; i += 1) {\r\n if (animationData.chars[i].data && animationData.chars[i].data.shapes) {\r\n paths = animationData.chars[i].data.shapes[0].it;\r\n jLen = paths.length;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n pathData = paths[j].ks.k;\r\n if (!pathData.__converted) {\r\n convertPathsToAbsoluteValues(paths[j].ks.k);\r\n pathData.__converted = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }());\r\n\r\n var checkColors = (function () {\r\n var minimumVersion = [4, 1, 9];\r\n\r\n function iterateShapes(shapes) {\r\n var i;\r\n var len = shapes.length;\r\n var j;\r\n var jLen;\r\n for (i = 0; i < len; i += 1) {\r\n if (shapes[i].ty === 'gr') {\r\n iterateShapes(shapes[i].it);\r\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\r\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\r\n jLen = shapes[i].c.k.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n if (shapes[i].c.k[j].s) {\r\n shapes[i].c.k[j].s[0] /= 255;\r\n shapes[i].c.k[j].s[1] /= 255;\r\n shapes[i].c.k[j].s[2] /= 255;\r\n shapes[i].c.k[j].s[3] /= 255;\r\n }\r\n if (shapes[i].c.k[j].e) {\r\n shapes[i].c.k[j].e[0] /= 255;\r\n shapes[i].c.k[j].e[1] /= 255;\r\n shapes[i].c.k[j].e[2] /= 255;\r\n shapes[i].c.k[j].e[3] /= 255;\r\n }\r\n }\r\n } else {\r\n shapes[i].c.k[0] /= 255;\r\n shapes[i].c.k[1] /= 255;\r\n shapes[i].c.k[2] /= 255;\r\n shapes[i].c.k[3] /= 255;\r\n }\r\n }\r\n }\r\n }\r\n\r\n function iterateLayers(layers) {\r\n var i;\r\n var len = layers.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (layers[i].ty === 4) {\r\n iterateShapes(layers[i].shapes);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData) {\r\n if (checkVersion(minimumVersion, animationData.v)) {\r\n iterateLayers(animationData.layers);\r\n if (animationData.assets) {\r\n var i;\r\n var len = animationData.assets.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (animationData.assets[i].layers) {\r\n iterateLayers(animationData.assets[i].layers);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }());\r\n\r\n var checkShapes = (function () {\r\n var minimumVersion = [4, 4, 18];\r\n\r\n function completeClosingShapes(arr) {\r\n var i;\r\n var len = arr.length;\r\n var j;\r\n var jLen;\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (arr[i].ty === 'sh') {\r\n if (arr[i].ks.k.i) {\r\n arr[i].ks.k.c = arr[i].closed;\r\n } else {\r\n jLen = arr[i].ks.k.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n if (arr[i].ks.k[j].s) {\r\n arr[i].ks.k[j].s[0].c = arr[i].closed;\r\n }\r\n if (arr[i].ks.k[j].e) {\r\n arr[i].ks.k[j].e[0].c = arr[i].closed;\r\n }\r\n }\r\n }\r\n } else if (arr[i].ty === 'gr') {\r\n completeClosingShapes(arr[i].it);\r\n }\r\n }\r\n }\r\n\r\n function iterateLayers(layers) {\r\n var layerData;\r\n var i;\r\n var len = layers.length;\r\n var j;\r\n var jLen;\r\n var k;\r\n var kLen;\r\n for (i = 0; i < len; i += 1) {\r\n layerData = layers[i];\r\n if (layerData.hasMask) {\r\n var maskProps = layerData.masksProperties;\r\n jLen = maskProps.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n if (maskProps[j].pt.k.i) {\r\n maskProps[j].pt.k.c = maskProps[j].cl;\r\n } else {\r\n kLen = maskProps[j].pt.k.length;\r\n for (k = 0; k < kLen; k += 1) {\r\n if (maskProps[j].pt.k[k].s) {\r\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\r\n }\r\n if (maskProps[j].pt.k[k].e) {\r\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (layerData.ty === 4) {\r\n completeClosingShapes(layerData.shapes);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData) {\r\n if (checkVersion(minimumVersion, animationData.v)) {\r\n iterateLayers(animationData.layers);\r\n if (animationData.assets) {\r\n var i;\r\n var len = animationData.assets.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (animationData.assets[i].layers) {\r\n iterateLayers(animationData.assets[i].layers);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }());\r\n\r\n function completeData(animationData, fontManager) {\r\n if (animationData.__complete) {\r\n return;\r\n }\r\n checkColors(animationData);\r\n checkText(animationData);\r\n checkChars(animationData);\r\n checkShapes(animationData);\r\n completeLayers(animationData.layers, animationData.assets, fontManager);\r\n animationData.__complete = true;\r\n }\r\n\r\n function completeText(data) {\r\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\r\n data.singleShape = true;\r\n }\r\n }\r\n\r\n var moduleOb = {};\r\n moduleOb.completeData = completeData;\r\n moduleOb.checkColors = checkColors;\r\n moduleOb.checkChars = checkChars;\r\n moduleOb.checkShapes = checkShapes;\r\n moduleOb.completeLayers = completeLayers;\r\n\r\n return moduleOb;\r\n}\r\n\r\nvar dataManager = dataFunctionManager();\r\n\r\n/* exported getFontProperties */\r\n\r\nfunction getFontProperties(fontData) {\r\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\r\n\r\n var fWeight = 'normal'; var\r\n fStyle = 'normal';\r\n var len = styles.length;\r\n var styleName;\r\n for (var i = 0; i < len; i += 1) {\r\n styleName = styles[i].toLowerCase();\r\n switch (styleName) {\r\n case 'italic':\r\n fStyle = 'italic';\r\n break;\r\n case 'bold':\r\n fWeight = '700';\r\n break;\r\n case 'black':\r\n fWeight = '900';\r\n break;\r\n case 'medium':\r\n fWeight = '500';\r\n break;\r\n case 'regular':\r\n case 'normal':\r\n fWeight = '400';\r\n break;\r\n case 'light':\r\n case 'thin':\r\n fWeight = '200';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n style: fStyle,\r\n weight: fontData.fWeight || fWeight,\r\n };\r\n}\r\n\r\n/* global createNS, createTag, getFontProperties */\r\n/* exported FontManager */\r\n\r\nvar FontManager = (function () {\r\n var maxWaitingTime = 5000;\r\n var emptyChar = {\r\n w: 0,\r\n size: 0,\r\n shapes: [],\r\n };\r\n var combinedCharacters = [];\r\n // Hindi characters\r\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366,\r\n 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379,\r\n 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\r\n\r\n function trimFontOptions(font) {\r\n var familyArray = font.split(',');\r\n var i;\r\n var len = familyArray.length;\r\n var enabledFamilies = [];\r\n for (i = 0; i < len; i += 1) {\r\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\r\n enabledFamilies.push(familyArray[i]);\r\n }\r\n }\r\n return enabledFamilies.join(',');\r\n }\r\n\r\n function setUpNode(font, family) {\r\n var parentNode = createTag('span');\r\n // Node is invisible to screen readers.\r\n parentNode.setAttribute('aria-hidden', true);\r\n parentNode.style.fontFamily = family;\r\n var node = createTag('span');\r\n // Characters that vary significantly among different fonts\r\n node.innerText = 'giItT1WQy@!-/#';\r\n // Visible - so we can measure it - but not on the screen\r\n parentNode.style.position = 'absolute';\r\n parentNode.style.left = '-10000px';\r\n parentNode.style.top = '-10000px';\r\n // Large font size makes even subtle changes obvious\r\n parentNode.style.fontSize = '300px';\r\n // Reset any font properties\r\n parentNode.style.fontVariant = 'normal';\r\n parentNode.style.fontStyle = 'normal';\r\n parentNode.style.fontWeight = 'normal';\r\n parentNode.style.letterSpacing = '0';\r\n parentNode.appendChild(node);\r\n document.body.appendChild(parentNode);\r\n\r\n // Remember width with no applied web font\r\n var width = node.offsetWidth;\r\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\r\n return { node: node, w: width, parent: parentNode };\r\n }\r\n\r\n function checkLoadedFonts() {\r\n var i;\r\n var len = this.fonts.length;\r\n var node;\r\n var w;\r\n var loadedCount = len;\r\n for (i = 0; i < len; i += 1) {\r\n if (this.fonts[i].loaded) {\r\n loadedCount -= 1;\r\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\r\n this.fonts[i].loaded = true;\r\n } else {\r\n node = this.fonts[i].monoCase.node;\r\n w = this.fonts[i].monoCase.w;\r\n if (node.offsetWidth !== w) {\r\n loadedCount -= 1;\r\n this.fonts[i].loaded = true;\r\n } else {\r\n node = this.fonts[i].sansCase.node;\r\n w = this.fonts[i].sansCase.w;\r\n if (node.offsetWidth !== w) {\r\n loadedCount -= 1;\r\n this.fonts[i].loaded = true;\r\n }\r\n }\r\n if (this.fonts[i].loaded) {\r\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\r\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\r\n }\r\n }\r\n }\r\n\r\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\r\n setTimeout(this.checkLoadedFontsBinded, 20);\r\n } else {\r\n setTimeout(this.setIsLoadedBinded, 10);\r\n }\r\n }\r\n\r\n function createHelper(def, fontData) {\r\n var tHelper = createNS('text');\r\n tHelper.style.fontSize = '100px';\r\n // tHelper.style.fontFamily = fontData.fFamily;\r\n\r\n var fontProps = getFontProperties(fontData);\r\n tHelper.setAttribute('font-family', fontData.fFamily);\r\n tHelper.setAttribute('font-style', fontProps.style);\r\n tHelper.setAttribute('font-weight', fontProps.weight);\r\n tHelper.textContent = '1';\r\n if (fontData.fClass) {\r\n tHelper.style.fontFamily = 'inherit';\r\n tHelper.setAttribute('class', fontData.fClass);\r\n } else {\r\n tHelper.style.fontFamily = fontData.fFamily;\r\n }\r\n def.appendChild(tHelper);\r\n var tCanvasHelper = createTag('canvas').getContext('2d');\r\n tCanvasHelper.font = fontData.fWeight + ' ' + fontData.fStyle + ' 100px ' + fontData.fFamily;\r\n // tCanvasHelper.font = ' 100px '+ fontData.fFamily;\r\n return tHelper;\r\n }\r\n\r\n function addFonts(fontData, defs) {\r\n if (!fontData) {\r\n this.isLoaded = true;\r\n return;\r\n }\r\n if (this.chars) {\r\n this.isLoaded = true;\r\n this.fonts = fontData.list;\r\n return;\r\n }\r\n\r\n var fontArr = fontData.list;\r\n var i;\r\n var len = fontArr.length;\r\n var _pendingFonts = len;\r\n for (i = 0; i < len; i += 1) {\r\n var shouldLoadFont = true;\r\n var loadedSelector;\r\n var j;\r\n fontArr[i].loaded = false;\r\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\r\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\r\n if (!fontArr[i].fPath) {\r\n fontArr[i].loaded = true;\r\n _pendingFonts -= 1;\r\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\r\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\r\n\r\n if (loadedSelector.length > 0) {\r\n shouldLoadFont = false;\r\n }\r\n\r\n if (shouldLoadFont) {\r\n var s = createTag('style');\r\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n s.setAttribute('f-origin', fontArr[i].origin);\r\n s.setAttribute('f-family', fontArr[i].fFamily);\r\n s.type = 'text/css';\r\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\r\n defs.appendChild(s);\r\n }\r\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\r\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\r\n\r\n for (j = 0; j < loadedSelector.length; j += 1) {\r\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\r\n // Font is already loaded\r\n shouldLoadFont = false;\r\n }\r\n }\r\n\r\n if (shouldLoadFont) {\r\n var l = createTag('link');\r\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n l.setAttribute('f-origin', fontArr[i].origin);\r\n l.type = 'text/css';\r\n l.rel = 'stylesheet';\r\n l.href = fontArr[i].fPath;\r\n document.body.appendChild(l);\r\n }\r\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\r\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\r\n\r\n for (j = 0; j < loadedSelector.length; j += 1) {\r\n if (fontArr[i].fPath === loadedSelector[j].src) {\r\n // Font is already loaded\r\n shouldLoadFont = false;\r\n }\r\n }\r\n\r\n if (shouldLoadFont) {\r\n var sc = createTag('link');\r\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\r\n sc.setAttribute('f-origin', fontArr[i].origin);\r\n sc.setAttribute('rel', 'stylesheet');\r\n sc.setAttribute('href', fontArr[i].fPath);\r\n defs.appendChild(sc);\r\n }\r\n }\r\n fontArr[i].helper = createHelper(defs, fontArr[i]);\r\n fontArr[i].cache = {};\r\n this.fonts.push(fontArr[i]);\r\n }\r\n if (_pendingFonts === 0) {\r\n this.isLoaded = true;\r\n } else {\r\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\r\n // Adding this timeout seems to fix it\r\n setTimeout(this.checkLoadedFonts.bind(this), 100);\r\n }\r\n }\r\n\r\n function addChars(chars) {\r\n if (!chars) {\r\n return;\r\n }\r\n if (!this.chars) {\r\n this.chars = [];\r\n }\r\n var i;\r\n var len = chars.length;\r\n var j;\r\n var jLen = this.chars.length;\r\n var found;\r\n for (i = 0; i < len; i += 1) {\r\n j = 0;\r\n found = false;\r\n while (j < jLen) {\r\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\r\n found = true;\r\n }\r\n j += 1;\r\n }\r\n if (!found) {\r\n this.chars.push(chars[i]);\r\n jLen += 1;\r\n }\r\n }\r\n }\r\n\r\n function getCharData(char, style, font) {\r\n var i = 0;\r\n var len = this.chars.length;\r\n while (i < len) {\r\n if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {\r\n return this.chars[i];\r\n }\r\n i += 1;\r\n }\r\n if (((typeof char === 'string' && char.charCodeAt(0) !== 13) || !char)\r\n && console\r\n && console.warn // eslint-disable-line no-console\r\n && !this._warned\r\n ) {\r\n this._warned = true;\r\n console.warn('Missing character from exported characters list: ', char, style, font); // eslint-disable-line no-console\r\n }\r\n return emptyChar;\r\n }\r\n\r\n function measureText(char, fontName, size) {\r\n var fontData = this.getFontByName(fontName);\r\n var index = char.charCodeAt(0);\r\n if (!fontData.cache[index + 1]) {\r\n var tHelper = fontData.helper;\r\n // Canvas version\r\n // fontData.cache[index] = tHelper.measureText(char).width / 100;\r\n // SVG version\r\n // console.log(tHelper.getBBox().width)\r\n if (char === ' ') {\r\n tHelper.textContent = '|' + char + '|';\r\n var doubleSize = tHelper.getComputedTextLength();\r\n tHelper.textContent = '||';\r\n var singleSize = tHelper.getComputedTextLength();\r\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\r\n } else {\r\n tHelper.textContent = char;\r\n fontData.cache[index + 1] = (tHelper.getComputedTextLength()) / 100;\r\n }\r\n }\r\n return fontData.cache[index + 1] * size;\r\n }\r\n\r\n function getFontByName(name) {\r\n var i = 0;\r\n var len = this.fonts.length;\r\n while (i < len) {\r\n if (this.fonts[i].fName === name) {\r\n return this.fonts[i];\r\n }\r\n i += 1;\r\n }\r\n return this.fonts[0];\r\n }\r\n\r\n function getCombinedCharacterCodes() {\r\n return combinedCharacters;\r\n }\r\n\r\n function setIsLoaded() {\r\n this.isLoaded = true;\r\n }\r\n\r\n var Font = function () {\r\n this.fonts = [];\r\n this.chars = null;\r\n this.typekitLoaded = 0;\r\n this.isLoaded = false;\r\n this._warned = false;\r\n this.initTime = Date.now();\r\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\r\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\r\n };\r\n // TODO: for now I'm adding these methods to the Class and not the prototype. Think of a better way to implement it.\r\n Font.getCombinedCharacterCodes = getCombinedCharacterCodes;\r\n\r\n var fontPrototype = {\r\n addChars: addChars,\r\n addFonts: addFonts,\r\n getCharData: getCharData,\r\n getFontByName: getFontByName,\r\n measureText: measureText,\r\n checkLoadedFonts: checkLoadedFonts,\r\n setIsLoaded: setIsLoaded,\r\n };\r\n\r\n Font.prototype = fontPrototype;\r\n\r\n return Font;\r\n}());\r\n\r\n/* global initialDefaultFrame, BezierFactory, degToRads, bez, createTypedArray */\r\n/* exported PropertyFactory */\r\n\r\nvar PropertyFactory = (function () {\r\n var initFrame = initialDefaultFrame;\r\n var mathAbs = Math.abs;\r\n\r\n function interpolateValue(frameNum, caching) {\r\n var offsetTime = this.offsetTime;\r\n var newValue;\r\n if (this.propType === 'multidimensional') {\r\n newValue = createTypedArray('float32', this.pv.length);\r\n }\r\n var iterationIndex = caching.lastIndex;\r\n var i = iterationIndex;\r\n var len = this.keyframes.length - 1;\r\n var flag = true;\r\n var keyData;\r\n var nextKeyData;\r\n\r\n while (flag) {\r\n keyData = this.keyframes[i];\r\n nextKeyData = this.keyframes[i + 1];\r\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\r\n if (keyData.h) {\r\n keyData = nextKeyData;\r\n }\r\n iterationIndex = 0;\r\n break;\r\n }\r\n if ((nextKeyData.t - offsetTime) > frameNum) {\r\n iterationIndex = i;\r\n break;\r\n }\r\n if (i < len - 1) {\r\n i += 1;\r\n } else {\r\n iterationIndex = 0;\r\n flag = false;\r\n }\r\n }\r\n\r\n var k;\r\n var kLen;\r\n var perc;\r\n var jLen;\r\n var j;\r\n var fnc;\r\n var nextKeyTime = nextKeyData.t - offsetTime;\r\n var keyTime = keyData.t - offsetTime;\r\n var endValue;\r\n if (keyData.to) {\r\n if (!keyData.bezierData) {\r\n keyData.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\r\n }\r\n var bezierData = keyData.bezierData;\r\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\r\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\r\n kLen = bezierData.points[ind].point.length;\r\n for (k = 0; k < kLen; k += 1) {\r\n newValue[k] = bezierData.points[ind].point[k];\r\n }\r\n // caching._lastKeyframeIndex = -1;\r\n } else {\r\n if (keyData.__fnct) {\r\n fnc = keyData.__fnct;\r\n } else {\r\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\r\n keyData.__fnct = fnc;\r\n }\r\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\r\n var distanceInLine = bezierData.segmentLength * perc;\r\n\r\n var segmentPerc;\r\n var addedLength = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastAddedLength : 0;\r\n j = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastPoint : 0;\r\n flag = true;\r\n jLen = bezierData.points.length;\r\n while (flag) {\r\n addedLength += bezierData.points[j].partialLength;\r\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\r\n kLen = bezierData.points[j].point.length;\r\n for (k = 0; k < kLen; k += 1) {\r\n newValue[k] = bezierData.points[j].point[k];\r\n }\r\n break;\r\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\r\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\r\n kLen = bezierData.points[j].point.length;\r\n for (k = 0; k < kLen; k += 1) {\r\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\r\n }\r\n break;\r\n }\r\n if (j < jLen - 1) {\r\n j += 1;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n caching._lastPoint = j;\r\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\r\n caching._lastKeyframeIndex = i;\r\n }\r\n } else {\r\n var outX;\r\n var outY;\r\n var inX;\r\n var inY;\r\n var keyValue;\r\n len = keyData.s.length;\r\n endValue = nextKeyData.s || keyData.e;\r\n if (this.sh && keyData.h !== 1) {\r\n if (frameNum >= nextKeyTime) {\r\n newValue[0] = endValue[0];\r\n newValue[1] = endValue[1];\r\n newValue[2] = endValue[2];\r\n } else if (frameNum <= keyTime) {\r\n newValue[0] = keyData.s[0];\r\n newValue[1] = keyData.s[1];\r\n newValue[2] = keyData.s[2];\r\n } else {\r\n var quatStart = createQuaternion(keyData.s);\r\n var quatEnd = createQuaternion(endValue);\r\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\r\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\r\n }\r\n } else {\r\n for (i = 0; i < len; i += 1) {\r\n if (keyData.h !== 1) {\r\n if (frameNum >= nextKeyTime) {\r\n perc = 1;\r\n } else if (frameNum < keyTime) {\r\n perc = 0;\r\n } else {\r\n if (keyData.o.x.constructor === Array) {\r\n if (!keyData.__fnct) {\r\n keyData.__fnct = [];\r\n }\r\n if (!keyData.__fnct[i]) {\r\n outX = (typeof keyData.o.x[i] === 'undefined') ? keyData.o.x[0] : keyData.o.x[i];\r\n outY = (typeof keyData.o.y[i] === 'undefined') ? keyData.o.y[0] : keyData.o.y[i];\r\n inX = (typeof keyData.i.x[i] === 'undefined') ? keyData.i.x[0] : keyData.i.x[i];\r\n inY = (typeof keyData.i.y[i] === 'undefined') ? keyData.i.y[0] : keyData.i.y[i];\r\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\r\n keyData.__fnct[i] = fnc;\r\n } else {\r\n fnc = keyData.__fnct[i];\r\n }\r\n } else if (!keyData.__fnct) {\r\n outX = keyData.o.x;\r\n outY = keyData.o.y;\r\n inX = keyData.i.x;\r\n inY = keyData.i.y;\r\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\r\n keyData.__fnct = fnc;\r\n } else {\r\n fnc = keyData.__fnct;\r\n }\r\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\r\n }\r\n }\r\n\r\n endValue = nextKeyData.s || keyData.e;\r\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\r\n\r\n if (this.propType === 'multidimensional') {\r\n newValue[i] = keyValue;\r\n } else {\r\n newValue = keyValue;\r\n }\r\n }\r\n }\r\n }\r\n caching.lastIndex = iterationIndex;\r\n return newValue;\r\n }\r\n\r\n // based on @Toji's https://github.com/toji/gl-matrix/\r\n function slerp(a, b, t) {\r\n var out = [];\r\n var ax = a[0];\r\n var ay = a[1];\r\n var az = a[2];\r\n var aw = a[3];\r\n var bx = b[0];\r\n var by = b[1];\r\n var bz = b[2];\r\n var bw = b[3];\r\n\r\n var omega;\r\n var cosom;\r\n var sinom;\r\n var scale0;\r\n var scale1;\r\n\r\n cosom = ax * bx + ay * by + az * bz + aw * bw;\r\n if (cosom < 0.0) {\r\n cosom = -cosom;\r\n bx = -bx;\r\n by = -by;\r\n bz = -bz;\r\n bw = -bw;\r\n }\r\n if ((1.0 - cosom) > 0.000001) {\r\n omega = Math.acos(cosom);\r\n sinom = Math.sin(omega);\r\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\r\n scale1 = Math.sin(t * omega) / sinom;\r\n } else {\r\n scale0 = 1.0 - t;\r\n scale1 = t;\r\n }\r\n out[0] = scale0 * ax + scale1 * bx;\r\n out[1] = scale0 * ay + scale1 * by;\r\n out[2] = scale0 * az + scale1 * bz;\r\n out[3] = scale0 * aw + scale1 * bw;\r\n\r\n return out;\r\n }\r\n\r\n function quaternionToEuler(out, quat) {\r\n var qx = quat[0];\r\n var qy = quat[1];\r\n var qz = quat[2];\r\n var qw = quat[3];\r\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\r\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\r\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\r\n out[0] = heading / degToRads;\r\n out[1] = attitude / degToRads;\r\n out[2] = bank / degToRads;\r\n }\r\n\r\n function createQuaternion(values) {\r\n var heading = values[0] * degToRads;\r\n var attitude = values[1] * degToRads;\r\n var bank = values[2] * degToRads;\r\n var c1 = Math.cos(heading / 2);\r\n var c2 = Math.cos(attitude / 2);\r\n var c3 = Math.cos(bank / 2);\r\n var s1 = Math.sin(heading / 2);\r\n var s2 = Math.sin(attitude / 2);\r\n var s3 = Math.sin(bank / 2);\r\n var w = c1 * c2 * c3 - s1 * s2 * s3;\r\n var x = s1 * s2 * c3 + c1 * c2 * s3;\r\n var y = s1 * c2 * c3 + c1 * s2 * s3;\r\n var z = c1 * s2 * c3 - s1 * c2 * s3;\r\n\r\n return [x, y, z, w];\r\n }\r\n\r\n function getValueAtCurrentTime() {\r\n var frameNum = this.comp.renderedFrame - this.offsetTime;\r\n var initTime = this.keyframes[0].t - this.offsetTime;\r\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\r\n if (!(frameNum === this._caching.lastFrame || (this._caching.lastFrame !== initFrame && ((this._caching.lastFrame >= endTime && frameNum >= endTime) || (this._caching.lastFrame < initTime && frameNum < initTime))))) {\r\n if (this._caching.lastFrame >= frameNum) {\r\n this._caching._lastKeyframeIndex = -1;\r\n this._caching.lastIndex = 0;\r\n }\r\n\r\n var renderResult = this.interpolateValue(frameNum, this._caching);\r\n this.pv = renderResult;\r\n }\r\n this._caching.lastFrame = frameNum;\r\n return this.pv;\r\n }\r\n\r\n function setVValue(val) {\r\n var multipliedValue;\r\n if (this.propType === 'unidimensional') {\r\n multipliedValue = val * this.mult;\r\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\r\n this.v = multipliedValue;\r\n this._mdf = true;\r\n }\r\n } else {\r\n var i = 0;\r\n var len = this.v.length;\r\n while (i < len) {\r\n multipliedValue = val[i] * this.mult;\r\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\r\n this.v[i] = multipliedValue;\r\n this._mdf = true;\r\n }\r\n i += 1;\r\n }\r\n }\r\n }\r\n\r\n function processEffectsSequence() {\r\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\r\n return;\r\n }\r\n if (this.lock) {\r\n this.setVValue(this.pv);\r\n return;\r\n }\r\n this.lock = true;\r\n this._mdf = this._isFirstFrame;\r\n var i;\r\n var len = this.effectsSequence.length;\r\n var finalValue = this.kf ? this.pv : this.data.k;\r\n for (i = 0; i < len; i += 1) {\r\n finalValue = this.effectsSequence[i](finalValue);\r\n }\r\n this.setVValue(finalValue);\r\n this._isFirstFrame = false;\r\n this.lock = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function addEffect(effectFunction) {\r\n this.effectsSequence.push(effectFunction);\r\n this.container.addDynamicProperty(this);\r\n }\r\n\r\n function ValueProperty(elem, data, mult, container) {\r\n this.propType = 'unidimensional';\r\n this.mult = mult || 1;\r\n this.data = data;\r\n this.v = mult ? data.k * mult : data.k;\r\n this.pv = data.k;\r\n this._mdf = false;\r\n this.elem = elem;\r\n this.container = container;\r\n this.comp = elem.comp;\r\n this.k = false;\r\n this.kf = false;\r\n this.vel = 0;\r\n this.effectsSequence = [];\r\n this._isFirstFrame = true;\r\n this.getValue = processEffectsSequence;\r\n this.setVValue = setVValue;\r\n this.addEffect = addEffect;\r\n }\r\n\r\n function MultiDimensionalProperty(elem, data, mult, container) {\r\n this.propType = 'multidimensional';\r\n this.mult = mult || 1;\r\n this.data = data;\r\n this._mdf = false;\r\n this.elem = elem;\r\n this.container = container;\r\n this.comp = elem.comp;\r\n this.k = false;\r\n this.kf = false;\r\n this.frameId = -1;\r\n var i;\r\n var len = data.k.length;\r\n this.v = createTypedArray('float32', len);\r\n this.pv = createTypedArray('float32', len);\r\n this.vel = createTypedArray('float32', len);\r\n for (i = 0; i < len; i += 1) {\r\n this.v[i] = data.k[i] * this.mult;\r\n this.pv[i] = data.k[i];\r\n }\r\n this._isFirstFrame = true;\r\n this.effectsSequence = [];\r\n this.getValue = processEffectsSequence;\r\n this.setVValue = setVValue;\r\n this.addEffect = addEffect;\r\n }\r\n\r\n function KeyframedValueProperty(elem, data, mult, container) {\r\n this.propType = 'unidimensional';\r\n this.keyframes = data.k;\r\n this.offsetTime = elem.data.st;\r\n this.frameId = -1;\r\n this._caching = {\r\n lastFrame: initFrame, lastIndex: 0, value: 0, _lastKeyframeIndex: -1,\r\n };\r\n this.k = true;\r\n this.kf = true;\r\n this.data = data;\r\n this.mult = mult || 1;\r\n this.elem = elem;\r\n this.container = container;\r\n this.comp = elem.comp;\r\n this.v = initFrame;\r\n this.pv = initFrame;\r\n this._isFirstFrame = true;\r\n this.getValue = processEffectsSequence;\r\n this.setVValue = setVValue;\r\n this.interpolateValue = interpolateValue;\r\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\r\n this.addEffect = addEffect;\r\n }\r\n\r\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\r\n this.propType = 'multidimensional';\r\n var i;\r\n var len = data.k.length;\r\n var s;\r\n var e;\r\n var to;\r\n var ti;\r\n for (i = 0; i < len - 1; i += 1) {\r\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\r\n s = data.k[i].s;\r\n e = data.k[i + 1].s;\r\n to = data.k[i].to;\r\n ti = data.k[i].ti;\r\n if ((s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1])) || (s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2]))) {\r\n data.k[i].to = null;\r\n data.k[i].ti = null;\r\n }\r\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\r\n if (s.length === 2 || (s[2] === e[2] && to[2] === 0 && ti[2] === 0)) {\r\n data.k[i].to = null;\r\n data.k[i].ti = null;\r\n }\r\n }\r\n }\r\n }\r\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\r\n this.data = data;\r\n this.keyframes = data.k;\r\n this.offsetTime = elem.data.st;\r\n this.k = true;\r\n this.kf = true;\r\n this._isFirstFrame = true;\r\n this.mult = mult || 1;\r\n this.elem = elem;\r\n this.container = container;\r\n this.comp = elem.comp;\r\n this.getValue = processEffectsSequence;\r\n this.setVValue = setVValue;\r\n this.interpolateValue = interpolateValue;\r\n this.frameId = -1;\r\n var arrLen = data.k[0].s.length;\r\n this.v = createTypedArray('float32', arrLen);\r\n this.pv = createTypedArray('float32', arrLen);\r\n for (i = 0; i < arrLen; i += 1) {\r\n this.v[i] = initFrame;\r\n this.pv[i] = initFrame;\r\n }\r\n this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray('float32', arrLen) };\r\n this.addEffect = addEffect;\r\n }\r\n\r\n function getProp(elem, data, type, mult, container) {\r\n var p;\r\n if (!data.k.length) {\r\n p = new ValueProperty(elem, data, mult, container);\r\n } else if (typeof (data.k[0]) === 'number') {\r\n p = new MultiDimensionalProperty(elem, data, mult, container);\r\n } else {\r\n switch (type) {\r\n case 0:\r\n p = new KeyframedValueProperty(elem, data, mult, container);\r\n break;\r\n case 1:\r\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n if (p.effectsSequence.length) {\r\n container.addDynamicProperty(p);\r\n }\r\n return p;\r\n }\r\n\r\n var ob = {\r\n getProp: getProp,\r\n };\r\n return ob;\r\n}());\r\n\r\n/* global Matrix, degToRads, PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\n/* exported TransformPropertyFactory */\r\n\r\nvar TransformPropertyFactory = (function () {\r\n var defaultVector = [0, 0];\r\n\r\n function applyToMatrix(mat) {\r\n var _mdf = this._mdf;\r\n this.iterateDynamicProperties();\r\n this._mdf = this._mdf || _mdf;\r\n if (this.a) {\r\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n }\r\n if (this.s) {\r\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n }\r\n if (this.sk) {\r\n mat.skewFromAxis(-this.sk.v, this.sa.v);\r\n }\r\n if (this.r) {\r\n mat.rotate(-this.r.v);\r\n } else {\r\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\r\n .rotateY(this.or.v[1])\r\n .rotateX(this.or.v[0]);\r\n }\r\n if (this.data.p.s) {\r\n if (this.data.p.z) {\r\n mat.translate(this.px.v, this.py.v, -this.pz.v);\r\n } else {\r\n mat.translate(this.px.v, this.py.v, 0);\r\n }\r\n } else {\r\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\r\n }\r\n }\r\n function processKeys(forceRender) {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n if (this._isDirty) {\r\n this.precalculateMatrix();\r\n this._isDirty = false;\r\n }\r\n\r\n this.iterateDynamicProperties();\r\n\r\n if (this._mdf || forceRender) {\r\n var frameRate;\r\n this.v.cloneFromProps(this.pre.props);\r\n if (this.appliedTransformations < 1) {\r\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n }\r\n if (this.appliedTransformations < 2) {\r\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n }\r\n if (this.sk && this.appliedTransformations < 3) {\r\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\r\n }\r\n if (this.r && this.appliedTransformations < 4) {\r\n this.v.rotate(-this.r.v);\r\n } else if (!this.r && this.appliedTransformations < 4) {\r\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\r\n .rotateY(this.or.v[1])\r\n .rotateX(this.or.v[0]);\r\n }\r\n if (this.autoOriented) {\r\n var v1;\r\n var v2;\r\n frameRate = this.elem.globalData.frameRate;\r\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\r\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\r\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\r\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\r\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\r\n v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / frameRate), 0);\r\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\r\n } else {\r\n v1 = this.p.pv;\r\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\r\n }\r\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\r\n v1 = [];\r\n v2 = [];\r\n var px = this.px;\r\n var py = this.py;\r\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\r\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\r\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\r\n v2[0] = px.getValueAtTime((px.keyframes[0].t) / frameRate, 0);\r\n v2[1] = py.getValueAtTime((py.keyframes[0].t) / frameRate, 0);\r\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\r\n v1[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t / frameRate), 0);\r\n v1[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t / frameRate), 0);\r\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\r\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\r\n } else {\r\n v1 = [px.pv, py.pv];\r\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\r\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\r\n }\r\n } else {\r\n v2 = defaultVector;\r\n v1 = v2;\r\n }\r\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\r\n }\r\n if (this.data.p && this.data.p.s) {\r\n if (this.data.p.z) {\r\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\r\n } else {\r\n this.v.translate(this.px.v, this.py.v, 0);\r\n }\r\n } else {\r\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\r\n }\r\n }\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function precalculateMatrix() {\r\n if (!this.a.k) {\r\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n this.appliedTransformations = 1;\r\n } else {\r\n return;\r\n }\r\n if (!this.s.effectsSequence.length) {\r\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n this.appliedTransformations = 2;\r\n } else {\r\n return;\r\n }\r\n if (this.sk) {\r\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\r\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\r\n this.appliedTransformations = 3;\r\n } else {\r\n return;\r\n }\r\n }\r\n if (this.r) {\r\n if (!this.r.effectsSequence.length) {\r\n this.pre.rotate(-this.r.v);\r\n this.appliedTransformations = 4;\r\n }\r\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\r\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])\r\n .rotateY(this.or.v[1])\r\n .rotateX(this.or.v[0]);\r\n this.appliedTransformations = 4;\r\n }\r\n }\r\n\r\n function autoOrient() {\r\n //\r\n // var prevP = this.getValueAtTime();\r\n }\r\n\r\n function addDynamicProperty(prop) {\r\n this._addDynamicProperty(prop);\r\n this.elem.addDynamicProperty(prop);\r\n this._isDirty = true;\r\n }\r\n\r\n function TransformProperty(elem, data, container) {\r\n this.elem = elem;\r\n this.frameId = -1;\r\n this.propType = 'transform';\r\n this.data = data;\r\n this.v = new Matrix();\r\n // Precalculated matrix with non animated properties\r\n this.pre = new Matrix();\r\n this.appliedTransformations = 0;\r\n this.initDynamicPropertyContainer(container || elem);\r\n if (data.p && data.p.s) {\r\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\r\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\r\n if (data.p.z) {\r\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\r\n }\r\n } else {\r\n this.p = PropertyFactory.getProp(elem, data.p || { k: [0, 0, 0] }, 1, 0, this);\r\n }\r\n if (data.rx) {\r\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\r\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\r\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\r\n if (data.or.k[0].ti) {\r\n var i;\r\n var len = data.or.k.length;\r\n for (i = 0; i < len; i += 1) {\r\n data.or.k[i].to = null;\r\n data.or.k[i].ti = null;\r\n }\r\n }\r\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\r\n // sh Indicates it needs to be capped between -180 and 180\r\n this.or.sh = true;\r\n } else {\r\n this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this);\r\n }\r\n if (data.sk) {\r\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\r\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\r\n }\r\n this.a = PropertyFactory.getProp(elem, data.a || { k: [0, 0, 0] }, 1, 0, this);\r\n this.s = PropertyFactory.getProp(elem, data.s || { k: [100, 100, 100] }, 1, 0.01, this);\r\n // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\r\n if (data.o) {\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\r\n } else {\r\n this.o = { _mdf: false, v: 1 };\r\n }\r\n this._isDirty = true;\r\n if (!this.dynamicProperties.length) {\r\n this.getValue(true);\r\n }\r\n }\r\n\r\n TransformProperty.prototype = {\r\n applyToMatrix: applyToMatrix,\r\n getValue: processKeys,\r\n precalculateMatrix: precalculateMatrix,\r\n autoOrient: autoOrient,\r\n };\r\n\r\n extendPrototype([DynamicPropertyContainer], TransformProperty);\r\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\r\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\r\n\r\n function getTransformProperty(elem, data, container) {\r\n return new TransformProperty(elem, data, container);\r\n }\r\n\r\n return {\r\n getTransformProperty: getTransformProperty,\r\n };\r\n}());\r\n\r\n/* global createSizedArray, createSizedArray, pointPool */\r\n\r\nfunction ShapePath() {\r\n this.c = false;\r\n this._length = 0;\r\n this._maxLength = 8;\r\n this.v = createSizedArray(this._maxLength);\r\n this.o = createSizedArray(this._maxLength);\r\n this.i = createSizedArray(this._maxLength);\r\n}\r\n\r\nShapePath.prototype.setPathData = function (closed, len) {\r\n this.c = closed;\r\n this.setLength(len);\r\n var i = 0;\r\n while (i < len) {\r\n this.v[i] = pointPool.newElement();\r\n this.o[i] = pointPool.newElement();\r\n this.i[i] = pointPool.newElement();\r\n i += 1;\r\n }\r\n};\r\n\r\nShapePath.prototype.setLength = function (len) {\r\n while (this._maxLength < len) {\r\n this.doubleArrayLength();\r\n }\r\n this._length = len;\r\n};\r\n\r\nShapePath.prototype.doubleArrayLength = function () {\r\n this.v = this.v.concat(createSizedArray(this._maxLength));\r\n this.i = this.i.concat(createSizedArray(this._maxLength));\r\n this.o = this.o.concat(createSizedArray(this._maxLength));\r\n this._maxLength *= 2;\r\n};\r\n\r\nShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\r\n var arr;\r\n this._length = Math.max(this._length, pos + 1);\r\n if (this._length >= this._maxLength) {\r\n this.doubleArrayLength();\r\n }\r\n switch (type) {\r\n case 'v':\r\n arr = this.v;\r\n break;\r\n case 'i':\r\n arr = this.i;\r\n break;\r\n case 'o':\r\n arr = this.o;\r\n break;\r\n default:\r\n arr = [];\r\n break;\r\n }\r\n if (!arr[pos] || (arr[pos] && !replace)) {\r\n arr[pos] = pointPool.newElement();\r\n }\r\n arr[pos][0] = x;\r\n arr[pos][1] = y;\r\n};\r\n\r\nShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\r\n this.setXYAt(vX, vY, 'v', pos, replace);\r\n this.setXYAt(oX, oY, 'o', pos, replace);\r\n this.setXYAt(iX, iY, 'i', pos, replace);\r\n};\r\n\r\nShapePath.prototype.reverse = function () {\r\n var newPath = new ShapePath();\r\n newPath.setPathData(this.c, this._length);\r\n var vertices = this.v;\r\n var outPoints = this.o;\r\n var inPoints = this.i;\r\n var init = 0;\r\n if (this.c) {\r\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\r\n init = 1;\r\n }\r\n var cnt = this._length - 1;\r\n var len = this._length;\r\n\r\n var i;\r\n for (i = init; i < len; i += 1) {\r\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\r\n cnt -= 1;\r\n }\r\n return newPath;\r\n};\r\n\r\n/* global extendPrototype, roundCorner, BezierFactory, shapePool, degToRads,\r\n shapeCollectionPool, PropertyFactory, bmMin, DynamicPropertyContainer */\r\n/* exported ShapePropertyFactory */\r\n\r\nvar ShapePropertyFactory = (function () {\r\n var initFrame = -999999;\r\n\r\n function interpolateShape(frameNum, previousValue, caching) {\r\n var iterationIndex = caching.lastIndex;\r\n var keyPropS;\r\n var keyPropE;\r\n var isHold;\r\n var j;\r\n var k;\r\n var jLen;\r\n var kLen;\r\n var perc;\r\n var vertexValue;\r\n var kf = this.keyframes;\r\n if (frameNum < kf[0].t - this.offsetTime) {\r\n keyPropS = kf[0].s[0];\r\n isHold = true;\r\n iterationIndex = 0;\r\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\r\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\r\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\r\n isHold = true;\r\n } else {\r\n var i = iterationIndex;\r\n var len = kf.length - 1;\r\n var flag = true;\r\n var keyData;\r\n var nextKeyData;\r\n while (flag) {\r\n keyData = kf[i];\r\n nextKeyData = kf[i + 1];\r\n if ((nextKeyData.t - this.offsetTime) > frameNum) {\r\n break;\r\n }\r\n if (i < len - 1) {\r\n i += 1;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n isHold = keyData.h === 1;\r\n iterationIndex = i;\r\n if (!isHold) {\r\n if (frameNum >= nextKeyData.t - this.offsetTime) {\r\n perc = 1;\r\n } else if (frameNum < keyData.t - this.offsetTime) {\r\n perc = 0;\r\n } else {\r\n var fnc;\r\n if (keyData.__fnct) {\r\n fnc = keyData.__fnct;\r\n } else {\r\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\r\n keyData.__fnct = fnc;\r\n }\r\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / ((nextKeyData.t - this.offsetTime) - (keyData.t - this.offsetTime)));\r\n }\r\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\r\n }\r\n keyPropS = keyData.s[0];\r\n }\r\n jLen = previousValue._length;\r\n kLen = keyPropS.i[0].length;\r\n caching.lastIndex = iterationIndex;\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n for (k = 0; k < kLen; k += 1) {\r\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\r\n previousValue.i[j][k] = vertexValue;\r\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\r\n previousValue.o[j][k] = vertexValue;\r\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\r\n previousValue.v[j][k] = vertexValue;\r\n }\r\n }\r\n }\r\n\r\n function interpolateShapeCurrentTime() {\r\n var frameNum = this.comp.renderedFrame - this.offsetTime;\r\n var initTime = this.keyframes[0].t - this.offsetTime;\r\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\r\n var lastFrame = this._caching.lastFrame;\r\n if (!(lastFrame !== initFrame && ((lastFrame < initTime && frameNum < initTime) || (lastFrame > endTime && frameNum > endTime)))) {\r\n /// /\r\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\r\n this.interpolateShape(frameNum, this.pv, this._caching);\r\n /// /\r\n }\r\n this._caching.lastFrame = frameNum;\r\n return this.pv;\r\n }\r\n\r\n function resetShape() {\r\n this.paths = this.localShapeCollection;\r\n }\r\n\r\n function shapesEqual(shape1, shape2) {\r\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\r\n return false;\r\n }\r\n var i;\r\n var len = shape1._length;\r\n for (i = 0; i < len; i += 1) {\r\n if (shape1.v[i][0] !== shape2.v[i][0]\r\n || shape1.v[i][1] !== shape2.v[i][1]\r\n || shape1.o[i][0] !== shape2.o[i][0]\r\n || shape1.o[i][1] !== shape2.o[i][1]\r\n || shape1.i[i][0] !== shape2.i[i][0]\r\n || shape1.i[i][1] !== shape2.i[i][1]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function setVValue(newPath) {\r\n if (!shapesEqual(this.v, newPath)) {\r\n this.v = shapePool.clone(newPath);\r\n this.localShapeCollection.releaseShapes();\r\n this.localShapeCollection.addShape(this.v);\r\n this._mdf = true;\r\n this.paths = this.localShapeCollection;\r\n }\r\n }\r\n\r\n function processEffectsSequence() {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n } if (!this.effectsSequence.length) {\r\n this._mdf = false;\r\n return;\r\n }\r\n if (this.lock) {\r\n this.setVValue(this.pv);\r\n return;\r\n }\r\n this.lock = true;\r\n this._mdf = false;\r\n var finalValue;\r\n if (this.kf) {\r\n finalValue = this.pv;\r\n } else if (this.data.ks) {\r\n finalValue = this.data.ks.k;\r\n } else {\r\n finalValue = this.data.pt.k;\r\n }\r\n var i;\r\n var len = this.effectsSequence.length;\r\n for (i = 0; i < len; i += 1) {\r\n finalValue = this.effectsSequence[i](finalValue);\r\n }\r\n this.setVValue(finalValue);\r\n this.lock = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function ShapeProperty(elem, data, type) {\r\n this.propType = 'shape';\r\n this.comp = elem.comp;\r\n this.container = elem;\r\n this.elem = elem;\r\n this.data = data;\r\n this.k = false;\r\n this.kf = false;\r\n this._mdf = false;\r\n var pathData = type === 3 ? data.pt.k : data.ks.k;\r\n this.v = shapePool.clone(pathData);\r\n this.pv = shapePool.clone(this.v);\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.paths.addShape(this.v);\r\n this.reset = resetShape;\r\n this.effectsSequence = [];\r\n }\r\n\r\n function addEffect(effectFunction) {\r\n this.effectsSequence.push(effectFunction);\r\n this.container.addDynamicProperty(this);\r\n }\r\n\r\n ShapeProperty.prototype.interpolateShape = interpolateShape;\r\n ShapeProperty.prototype.getValue = processEffectsSequence;\r\n ShapeProperty.prototype.setVValue = setVValue;\r\n ShapeProperty.prototype.addEffect = addEffect;\r\n\r\n function KeyframedShapeProperty(elem, data, type) {\r\n this.propType = 'shape';\r\n this.comp = elem.comp;\r\n this.elem = elem;\r\n this.container = elem;\r\n this.offsetTime = elem.data.st;\r\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\r\n this.k = true;\r\n this.kf = true;\r\n var len = this.keyframes[0].s[0].i.length;\r\n this.v = shapePool.newElement();\r\n this.v.setPathData(this.keyframes[0].s[0].c, len);\r\n this.pv = shapePool.clone(this.v);\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.paths.addShape(this.v);\r\n this.lastFrame = initFrame;\r\n this.reset = resetShape;\r\n this._caching = { lastFrame: initFrame, lastIndex: 0 };\r\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\r\n }\r\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\r\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\r\n KeyframedShapeProperty.prototype.setVValue = setVValue;\r\n KeyframedShapeProperty.prototype.addEffect = addEffect;\r\n\r\n var EllShapeProperty = (function () {\r\n var cPoint = roundCorner;\r\n\r\n function EllShapePropertyFactory(elem, data) {\r\n /* this.v = {\r\n v: createSizedArray(4),\r\n i: createSizedArray(4),\r\n o: createSizedArray(4),\r\n c: true\r\n }; */\r\n this.v = shapePool.newElement();\r\n this.v.setPathData(true, 4);\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.localShapeCollection.addShape(this.v);\r\n this.d = data.d;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.frameId = -1;\r\n this.initDynamicPropertyContainer(elem);\r\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.k = false;\r\n this.convertEllToPath();\r\n }\r\n }\r\n\r\n EllShapePropertyFactory.prototype = {\r\n reset: resetShape,\r\n getValue: function () {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n\r\n if (this._mdf) {\r\n this.convertEllToPath();\r\n }\r\n },\r\n convertEllToPath: function () {\r\n var p0 = this.p.v[0];\r\n var p1 = this.p.v[1];\r\n var s0 = this.s.v[0] / 2;\r\n var s1 = this.s.v[1] / 2;\r\n var _cw = this.d !== 3;\r\n var _v = this.v;\r\n _v.v[0][0] = p0;\r\n _v.v[0][1] = p1 - s1;\r\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n _v.v[1][1] = p1;\r\n _v.v[2][0] = p0;\r\n _v.v[2][1] = p1 + s1;\r\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n _v.v[3][1] = p1;\r\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\r\n _v.i[0][1] = p1 - s1;\r\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n _v.i[1][1] = p1 - s1 * cPoint;\r\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\r\n _v.i[2][1] = p1 + s1;\r\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n _v.i[3][1] = p1 + s1 * cPoint;\r\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\r\n _v.o[0][1] = p1 - s1;\r\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\r\n _v.o[1][1] = p1 + s1 * cPoint;\r\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\r\n _v.o[2][1] = p1 + s1;\r\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\r\n _v.o[3][1] = p1 - s1 * cPoint;\r\n },\r\n };\r\n\r\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\r\n\r\n return EllShapePropertyFactory;\r\n }());\r\n\r\n var StarShapeProperty = (function () {\r\n function StarShapePropertyFactory(elem, data) {\r\n this.v = shapePool.newElement();\r\n this.v.setPathData(true, 0);\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.data = data;\r\n this.frameId = -1;\r\n this.d = data.d;\r\n this.initDynamicPropertyContainer(elem);\r\n if (data.sy === 1) {\r\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\r\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\r\n this.convertToPath = this.convertStarToPath;\r\n } else {\r\n this.convertToPath = this.convertPolygonToPath;\r\n }\r\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\r\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\r\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\r\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.localShapeCollection.addShape(this.v);\r\n this.paths = this.localShapeCollection;\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.k = false;\r\n this.convertToPath();\r\n }\r\n }\r\n\r\n StarShapePropertyFactory.prototype = {\r\n reset: resetShape,\r\n getValue: function () {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n if (this._mdf) {\r\n this.convertToPath();\r\n }\r\n },\r\n convertStarToPath: function () {\r\n var numPts = Math.floor(this.pt.v) * 2;\r\n var angle = (Math.PI * 2) / numPts;\r\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\r\n var longFlag = true;\r\n var longRad = this.or.v;\r\n var shortRad = this.ir.v;\r\n var longRound = this.os.v;\r\n var shortRound = this.is.v;\r\n var longPerimSegment = (2 * Math.PI * longRad) / (numPts * 2);\r\n var shortPerimSegment = (2 * Math.PI * shortRad) / (numPts * 2);\r\n var i;\r\n var rad;\r\n var roundness;\r\n var perimSegment;\r\n var currentAng = -Math.PI / 2;\r\n currentAng += this.r.v;\r\n var dir = this.data.d === 3 ? -1 : 1;\r\n this.v._length = 0;\r\n for (i = 0; i < numPts; i += 1) {\r\n rad = longFlag ? longRad : shortRad;\r\n roundness = longFlag ? longRound : shortRound;\r\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\r\n var x = rad * Math.cos(currentAng);\r\n var y = rad * Math.sin(currentAng);\r\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\r\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\r\n x += +this.p.v[0];\r\n y += +this.p.v[1];\r\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\r\n\r\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\r\n longFlag = !longFlag;\r\n currentAng += angle * dir;\r\n }\r\n },\r\n convertPolygonToPath: function () {\r\n var numPts = Math.floor(this.pt.v);\r\n var angle = (Math.PI * 2) / numPts;\r\n var rad = this.or.v;\r\n var roundness = this.os.v;\r\n var perimSegment = (2 * Math.PI * rad) / (numPts * 4);\r\n var i;\r\n var currentAng = -Math.PI * 0.5;\r\n var dir = this.data.d === 3 ? -1 : 1;\r\n currentAng += this.r.v;\r\n this.v._length = 0;\r\n for (i = 0; i < numPts; i += 1) {\r\n var x = rad * Math.cos(currentAng);\r\n var y = rad * Math.sin(currentAng);\r\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\r\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\r\n x += +this.p.v[0];\r\n y += +this.p.v[1];\r\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\r\n currentAng += angle * dir;\r\n }\r\n this.paths.length = 0;\r\n this.paths[0] = this.v;\r\n },\r\n\r\n };\r\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\r\n\r\n return StarShapePropertyFactory;\r\n }());\r\n\r\n var RectShapeProperty = (function () {\r\n function RectShapePropertyFactory(elem, data) {\r\n this.v = shapePool.newElement();\r\n this.v.c = true;\r\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\r\n this.localShapeCollection.addShape(this.v);\r\n this.paths = this.localShapeCollection;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.frameId = -1;\r\n this.d = data.d;\r\n this.initDynamicPropertyContainer(elem);\r\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\r\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\r\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.k = false;\r\n this.convertRectToPath();\r\n }\r\n }\r\n\r\n RectShapePropertyFactory.prototype = {\r\n convertRectToPath: function () {\r\n var p0 = this.p.v[0];\r\n var p1 = this.p.v[1];\r\n var v0 = this.s.v[0] / 2;\r\n var v1 = this.s.v[1] / 2;\r\n var round = bmMin(v0, v1, this.r.v);\r\n var cPoint = round * (1 - roundCorner);\r\n this.v._length = 0;\r\n\r\n if (this.d === 2 || this.d === 1) {\r\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\r\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\r\n if (round !== 0) {\r\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\r\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\r\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\r\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\r\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\r\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\r\n } else {\r\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\r\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\r\n }\r\n } else {\r\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\r\n if (round !== 0) {\r\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\r\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\r\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\r\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\r\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\r\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\r\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\r\n } else {\r\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\r\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\r\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\r\n }\r\n }\r\n },\r\n getValue: function () {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n if (this._mdf) {\r\n this.convertRectToPath();\r\n }\r\n },\r\n reset: resetShape,\r\n };\r\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\r\n\r\n return RectShapePropertyFactory;\r\n }());\r\n\r\n function getShapeProp(elem, data, type) {\r\n var prop;\r\n if (type === 3 || type === 4) {\r\n var dataProp = type === 3 ? data.pt : data.ks;\r\n var keys = dataProp.k;\r\n if (keys.length) {\r\n prop = new KeyframedShapeProperty(elem, data, type);\r\n } else {\r\n prop = new ShapeProperty(elem, data, type);\r\n }\r\n } else if (type === 5) {\r\n prop = new RectShapeProperty(elem, data);\r\n } else if (type === 6) {\r\n prop = new EllShapeProperty(elem, data);\r\n } else if (type === 7) {\r\n prop = new StarShapeProperty(elem, data);\r\n }\r\n if (prop.k) {\r\n elem.addDynamicProperty(prop);\r\n }\r\n return prop;\r\n }\r\n\r\n function getConstructorFunction() {\r\n return ShapeProperty;\r\n }\r\n\r\n function getKeyframedConstructorFunction() {\r\n return KeyframedShapeProperty;\r\n }\r\n\r\n var ob = {};\r\n ob.getShapeProp = getShapeProp;\r\n ob.getConstructorFunction = getConstructorFunction;\r\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\r\n return ob;\r\n}());\r\n\r\n/* global shapeCollectionPool, initialDefaultFrame, extendPrototype, DynamicPropertyContainer */\r\n/* exported ShapeModifiers */\r\n\r\nvar ShapeModifiers = (function () {\r\n var ob = {};\r\n var modifiers = {};\r\n ob.registerModifier = registerModifier;\r\n ob.getModifier = getModifier;\r\n\r\n function registerModifier(nm, factory) {\r\n if (!modifiers[nm]) {\r\n modifiers[nm] = factory;\r\n }\r\n }\r\n\r\n function getModifier(nm, elem, data) {\r\n return new modifiers[nm](elem, data);\r\n }\r\n\r\n return ob;\r\n}());\r\n\r\nfunction ShapeModifier() {}\r\nShapeModifier.prototype.initModifierProperties = function () {};\r\nShapeModifier.prototype.addShapeToModifier = function () {};\r\nShapeModifier.prototype.addShape = function (data) {\r\n if (!this.closed) {\r\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\r\n data.sh.container.addDynamicProperty(data.sh);\r\n var shapeData = { shape: data.sh, data: data, localShapeCollection: shapeCollectionPool.newShapeCollection() };\r\n this.shapes.push(shapeData);\r\n this.addShapeToModifier(shapeData);\r\n if (this._isAnimated) {\r\n data.setAsAnimated();\r\n }\r\n }\r\n};\r\nShapeModifier.prototype.init = function (elem, data) {\r\n this.shapes = [];\r\n this.elem = elem;\r\n this.initDynamicPropertyContainer(elem);\r\n this.initModifierProperties(elem, data);\r\n this.frameId = initialDefaultFrame;\r\n this.closed = false;\r\n this.k = false;\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.getValue(true);\r\n }\r\n};\r\nShapeModifier.prototype.processKeys = function () {\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n};\r\n\r\nextendPrototype([DynamicPropertyContainer], ShapeModifier);\r\n\r\n/* global extendPrototype, ShapeModifier, PropertyFactory, segmentsLengthPool, bez, shapePool, ShapeModifiers */\r\n\r\nfunction TrimModifier() {\r\n}\r\nextendPrototype([ShapeModifier], TrimModifier);\r\nTrimModifier.prototype.initModifierProperties = function (elem, data) {\r\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\r\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\r\n this.sValue = 0;\r\n this.eValue = 0;\r\n this.getValue = this.processKeys;\r\n this.m = data.m;\r\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\r\n};\r\n\r\nTrimModifier.prototype.addShapeToModifier = function (shapeData) {\r\n shapeData.pathsData = [];\r\n};\r\n\r\nTrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\r\n var segments = [];\r\n if (e <= 1) {\r\n segments.push({\r\n s: s,\r\n e: e,\r\n });\r\n } else if (s >= 1) {\r\n segments.push({\r\n s: s - 1,\r\n e: e - 1,\r\n });\r\n } else {\r\n segments.push({\r\n s: s,\r\n e: 1,\r\n });\r\n segments.push({\r\n s: 0,\r\n e: e - 1,\r\n });\r\n }\r\n var shapeSegments = [];\r\n var i;\r\n var len = segments.length;\r\n var segmentOb;\r\n for (i = 0; i < len; i += 1) {\r\n segmentOb = segments[i];\r\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\r\n var shapeS;\r\n var shapeE;\r\n if (segmentOb.s * totalModifierLength <= addedLength) {\r\n shapeS = 0;\r\n } else {\r\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\r\n }\r\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\r\n shapeE = 1;\r\n } else {\r\n shapeE = ((segmentOb.e * totalModifierLength - addedLength) / shapeLength);\r\n }\r\n shapeSegments.push([shapeS, shapeE]);\r\n }\r\n }\r\n if (!shapeSegments.length) {\r\n shapeSegments.push([0, 0]);\r\n }\r\n return shapeSegments;\r\n};\r\n\r\nTrimModifier.prototype.releasePathsData = function (pathsData) {\r\n var i;\r\n var len = pathsData.length;\r\n for (i = 0; i < len; i += 1) {\r\n segmentsLengthPool.release(pathsData[i]);\r\n }\r\n pathsData.length = 0;\r\n return pathsData;\r\n};\r\n\r\nTrimModifier.prototype.processShapes = function (_isFirstFrame) {\r\n var s;\r\n var e;\r\n if (this._mdf || _isFirstFrame) {\r\n var o = (this.o.v % 360) / 360;\r\n if (o < 0) {\r\n o += 1;\r\n }\r\n if (this.s.v > 1) {\r\n s = 1 + o;\r\n } else if (this.s.v < 0) {\r\n s = 0 + o;\r\n } else {\r\n s = this.s.v + o;\r\n }\r\n if (this.e.v > 1) {\r\n e = 1 + o;\r\n } else if (this.e.v < 0) {\r\n e = 0 + o;\r\n } else {\r\n e = this.e.v + o;\r\n }\r\n\r\n if (s > e) {\r\n var _s = s;\r\n s = e;\r\n e = _s;\r\n }\r\n s = Math.round(s * 10000) * 0.0001;\r\n e = Math.round(e * 10000) * 0.0001;\r\n this.sValue = s;\r\n this.eValue = e;\r\n } else {\r\n s = this.sValue;\r\n e = this.eValue;\r\n }\r\n var shapePaths;\r\n var i;\r\n var len = this.shapes.length;\r\n var j;\r\n var jLen;\r\n var pathsData;\r\n var pathData;\r\n var totalShapeLength;\r\n var totalModifierLength = 0;\r\n\r\n if (e === s) {\r\n for (i = 0; i < len; i += 1) {\r\n this.shapes[i].localShapeCollection.releaseShapes();\r\n this.shapes[i].shape._mdf = true;\r\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\r\n if (this._mdf) {\r\n this.shapes[i].pathsData.length = 0;\r\n }\r\n }\r\n } else if (!((e === 1 && s === 0) || (e === 0 && s === 1))) {\r\n var segments = [];\r\n var shapeData;\r\n var localShapeCollection;\r\n for (i = 0; i < len; i += 1) {\r\n shapeData = this.shapes[i];\r\n // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\r\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\r\n shapeData.shape.paths = shapeData.localShapeCollection;\r\n } else {\r\n shapePaths = shapeData.shape.paths;\r\n jLen = shapePaths._length;\r\n totalShapeLength = 0;\r\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\r\n totalShapeLength = shapeData.totalShapeLength;\r\n } else {\r\n pathsData = this.releasePathsData(shapeData.pathsData);\r\n for (j = 0; j < jLen; j += 1) {\r\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\r\n pathsData.push(pathData);\r\n totalShapeLength += pathData.totalLength;\r\n }\r\n shapeData.totalShapeLength = totalShapeLength;\r\n shapeData.pathsData = pathsData;\r\n }\r\n\r\n totalModifierLength += totalShapeLength;\r\n shapeData.shape._mdf = true;\r\n }\r\n }\r\n var shapeS = s;\r\n var shapeE = e;\r\n var addedLength = 0;\r\n var edges;\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n shapeData = this.shapes[i];\r\n if (shapeData.shape._mdf) {\r\n localShapeCollection = shapeData.localShapeCollection;\r\n localShapeCollection.releaseShapes();\r\n // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\r\n if (this.m === 2 && len > 1) {\r\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\r\n addedLength += shapeData.totalShapeLength;\r\n } else {\r\n edges = [[shapeS, shapeE]];\r\n }\r\n jLen = edges.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n shapeS = edges[j][0];\r\n shapeE = edges[j][1];\r\n segments.length = 0;\r\n if (shapeE <= 1) {\r\n segments.push({\r\n s: shapeData.totalShapeLength * shapeS,\r\n e: shapeData.totalShapeLength * shapeE,\r\n });\r\n } else if (shapeS >= 1) {\r\n segments.push({\r\n s: shapeData.totalShapeLength * (shapeS - 1),\r\n e: shapeData.totalShapeLength * (shapeE - 1),\r\n });\r\n } else {\r\n segments.push({\r\n s: shapeData.totalShapeLength * shapeS,\r\n e: shapeData.totalShapeLength,\r\n });\r\n segments.push({\r\n s: 0,\r\n e: shapeData.totalShapeLength * (shapeE - 1),\r\n });\r\n }\r\n var newShapesData = this.addShapes(shapeData, segments[0]);\r\n if (segments[0].s !== segments[0].e) {\r\n if (segments.length > 1) {\r\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\r\n if (lastShapeInCollection.c) {\r\n var lastShape = newShapesData.pop();\r\n this.addPaths(newShapesData, localShapeCollection);\r\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\r\n } else {\r\n this.addPaths(newShapesData, localShapeCollection);\r\n newShapesData = this.addShapes(shapeData, segments[1]);\r\n }\r\n }\r\n this.addPaths(newShapesData, localShapeCollection);\r\n }\r\n }\r\n shapeData.shape.paths = localShapeCollection;\r\n }\r\n }\r\n } else if (this._mdf) {\r\n for (i = 0; i < len; i += 1) {\r\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\r\n // Don't remove this even if it's losing cached info.\r\n this.shapes[i].pathsData.length = 0;\r\n this.shapes[i].shape._mdf = true;\r\n }\r\n }\r\n};\r\n\r\nTrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\r\n var i;\r\n var len = newPaths.length;\r\n for (i = 0; i < len; i += 1) {\r\n localShapeCollection.addShape(newPaths[i]);\r\n }\r\n};\r\n\r\nTrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\r\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\r\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\r\n if (newShape) {\r\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\r\n }\r\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\r\n};\r\n\r\nTrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\r\n shapePath.setXYAt(points[1], points[5], 'o', pos);\r\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\r\n if (newShape) {\r\n shapePath.setXYAt(points[0], points[4], 'v', pos);\r\n }\r\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\r\n};\r\n\r\nTrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\r\n var pathsData = shapeData.pathsData;\r\n var shapePaths = shapeData.shape.paths.shapes;\r\n var i;\r\n var len = shapeData.shape.paths._length;\r\n var j;\r\n var jLen;\r\n var addedLength = 0;\r\n var currentLengthData;\r\n var segmentCount;\r\n var lengths;\r\n var segment;\r\n var shapes = [];\r\n var initPos;\r\n var newShape = true;\r\n if (!shapePath) {\r\n shapePath = shapePool.newElement();\r\n segmentCount = 0;\r\n initPos = 0;\r\n } else {\r\n segmentCount = shapePath._length;\r\n initPos = shapePath._length;\r\n }\r\n shapes.push(shapePath);\r\n for (i = 0; i < len; i += 1) {\r\n lengths = pathsData[i].lengths;\r\n shapePath.c = shapePaths[i].c;\r\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\r\n for (j = 1; j < jLen; j += 1) {\r\n currentLengthData = lengths[j - 1];\r\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\r\n addedLength += currentLengthData.addedLength;\r\n shapePath.c = false;\r\n } else if (addedLength > shapeSegment.e) {\r\n shapePath.c = false;\r\n break;\r\n } else {\r\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\r\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\r\n newShape = false;\r\n } else {\r\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\r\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\r\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\r\n newShape = false;\r\n shapePath.c = false;\r\n }\r\n addedLength += currentLengthData.addedLength;\r\n segmentCount += 1;\r\n }\r\n }\r\n if (shapePaths[i].c && lengths.length) {\r\n currentLengthData = lengths[j - 1];\r\n if (addedLength <= shapeSegment.e) {\r\n var segmentLength = lengths[j - 1].addedLength;\r\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\r\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\r\n newShape = false;\r\n } else {\r\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\r\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\r\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\r\n newShape = false;\r\n shapePath.c = false;\r\n }\r\n } else {\r\n shapePath.c = false;\r\n }\r\n addedLength += currentLengthData.addedLength;\r\n segmentCount += 1;\r\n }\r\n if (shapePath._length) {\r\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\r\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\r\n }\r\n if (addedLength > shapeSegment.e) {\r\n break;\r\n }\r\n if (i < len - 1) {\r\n shapePath = shapePool.newElement();\r\n newShape = true;\r\n shapes.push(shapePath);\r\n segmentCount = 0;\r\n }\r\n }\r\n return shapes;\r\n};\r\n\r\nShapeModifiers.registerModifier('tm', TrimModifier);\r\n\r\n/* global extendPrototype, ShapeModifier, PropertyFactory, shapePool, roundCorner, ShapeModifiers */\r\n\r\nfunction RoundCornersModifier() {}\r\nextendPrototype([ShapeModifier], RoundCornersModifier);\r\nRoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\r\n this.getValue = this.processKeys;\r\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\r\n this._isAnimated = !!this.rd.effectsSequence.length;\r\n};\r\n\r\nRoundCornersModifier.prototype.processPath = function (path, round) {\r\n var clonedPath = shapePool.newElement();\r\n clonedPath.c = path.c;\r\n var i;\r\n var len = path._length;\r\n var currentV;\r\n var currentI;\r\n var currentO;\r\n var closerV;\r\n var distance;\r\n var newPosPerc;\r\n var index = 0;\r\n var vX;\r\n var vY;\r\n var oX;\r\n var oY;\r\n var iX;\r\n var iY;\r\n for (i = 0; i < len; i += 1) {\r\n currentV = path.v[i];\r\n currentO = path.o[i];\r\n currentI = path.i[i];\r\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\r\n if ((i === 0 || i === len - 1) && !path.c) {\r\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\r\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\r\n index += 1;\r\n } else {\r\n if (i === 0) {\r\n closerV = path.v[len - 1];\r\n } else {\r\n closerV = path.v[i - 1];\r\n }\r\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\r\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\r\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\r\n vX = iX;\r\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\r\n vY = iY;\r\n oX = vX - (vX - currentV[0]) * roundCorner;\r\n oY = vY - (vY - currentV[1]) * roundCorner;\r\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\r\n index += 1;\r\n\r\n if (i === len - 1) {\r\n closerV = path.v[0];\r\n } else {\r\n closerV = path.v[i + 1];\r\n }\r\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\r\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\r\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\r\n vX = oX;\r\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\r\n vY = oY;\r\n iX = vX - (vX - currentV[0]) * roundCorner;\r\n iY = vY - (vY - currentV[1]) * roundCorner;\r\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\r\n index += 1;\r\n }\r\n } else {\r\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\r\n index += 1;\r\n }\r\n }\r\n return clonedPath;\r\n};\r\n\r\nRoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\r\n var shapePaths;\r\n var i;\r\n var len = this.shapes.length;\r\n var j;\r\n var jLen;\r\n var rd = this.rd.v;\r\n\r\n if (rd !== 0) {\r\n var shapeData;\r\n var localShapeCollection;\r\n for (i = 0; i < len; i += 1) {\r\n shapeData = this.shapes[i];\r\n localShapeCollection = shapeData.localShapeCollection;\r\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\r\n localShapeCollection.releaseShapes();\r\n shapeData.shape._mdf = true;\r\n shapePaths = shapeData.shape.paths.shapes;\r\n jLen = shapeData.shape.paths._length;\r\n for (j = 0; j < jLen; j += 1) {\r\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\r\n }\r\n }\r\n shapeData.shape.paths = shapeData.localShapeCollection;\r\n }\r\n }\r\n if (!this.dynamicProperties.length) {\r\n this._mdf = false;\r\n }\r\n};\r\n\r\nShapeModifiers.registerModifier('rd', RoundCornersModifier);\r\n\r\n/* global extendPrototype, ShapeModifier, PropertyFactory, shapePool, ShapeModifiers */\r\n\r\nfunction PuckerAndBloatModifier() {}\r\nextendPrototype([ShapeModifier], PuckerAndBloatModifier);\r\nPuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\r\n this.getValue = this.processKeys;\r\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\r\n this._isAnimated = !!this.amount.effectsSequence.length;\r\n};\r\n\r\nPuckerAndBloatModifier.prototype.processPath = function (path, amount) {\r\n var percent = amount / 100;\r\n var centerPoint = [0, 0];\r\n var pathLength = path._length;\r\n var i = 0;\r\n for (i = 0; i < pathLength; i += 1) {\r\n centerPoint[0] += path.v[i][0];\r\n centerPoint[1] += path.v[i][1];\r\n }\r\n centerPoint[0] /= pathLength;\r\n centerPoint[1] /= pathLength;\r\n var clonedPath = shapePool.newElement();\r\n clonedPath.c = path.c;\r\n var vX;\r\n var vY;\r\n var oX;\r\n var oY;\r\n var iX;\r\n var iY;\r\n for (i = 0; i < pathLength; i += 1) {\r\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\r\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\r\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\r\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\r\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\r\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\r\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\r\n }\r\n return clonedPath;\r\n};\r\n\r\nPuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\r\n var shapePaths;\r\n var i;\r\n var len = this.shapes.length;\r\n var j;\r\n var jLen;\r\n var amount = this.amount.v;\r\n\r\n if (amount !== 0) {\r\n var shapeData;\r\n var localShapeCollection;\r\n for (i = 0; i < len; i += 1) {\r\n shapeData = this.shapes[i];\r\n localShapeCollection = shapeData.localShapeCollection;\r\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\r\n localShapeCollection.releaseShapes();\r\n shapeData.shape._mdf = true;\r\n shapePaths = shapeData.shape.paths.shapes;\r\n jLen = shapeData.shape.paths._length;\r\n for (j = 0; j < jLen; j += 1) {\r\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\r\n }\r\n }\r\n shapeData.shape.paths = shapeData.localShapeCollection;\r\n }\r\n }\r\n if (!this.dynamicProperties.length) {\r\n this._mdf = false;\r\n }\r\n};\r\nShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\r\n\r\n/* global extendPrototype, ShapeModifier, TransformPropertyFactory, PropertyFactory, Matrix, ShapeModifiers */\r\n\r\nfunction RepeaterModifier() {}\r\nextendPrototype([ShapeModifier], RepeaterModifier);\r\n\r\nRepeaterModifier.prototype.initModifierProperties = function (elem, data) {\r\n this.getValue = this.processKeys;\r\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\r\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\r\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\r\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\r\n this.data = data;\r\n if (!this.dynamicProperties.length) {\r\n this.getValue(true);\r\n }\r\n this._isAnimated = !!this.dynamicProperties.length;\r\n this.pMatrix = new Matrix();\r\n this.rMatrix = new Matrix();\r\n this.sMatrix = new Matrix();\r\n this.tMatrix = new Matrix();\r\n this.matrix = new Matrix();\r\n};\r\n\r\nRepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\r\n var dir = inv ? -1 : 1;\r\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\r\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\r\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\r\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\r\n rMatrix.rotate(-transform.r.v * dir * perc);\r\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\r\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\r\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\r\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\r\n};\r\n\r\nRepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\r\n this.elem = elem;\r\n this.arr = arr;\r\n this.pos = pos;\r\n this.elemsData = elemsData;\r\n this._currentCopies = 0;\r\n this._elements = [];\r\n this._groups = [];\r\n this.frameId = -1;\r\n this.initDynamicPropertyContainer(elem);\r\n this.initModifierProperties(elem, arr[pos]);\r\n while (pos > 0) {\r\n pos -= 1;\r\n // this._elements.unshift(arr.splice(pos,1)[0]);\r\n this._elements.unshift(arr[pos]);\r\n }\r\n if (this.dynamicProperties.length) {\r\n this.k = true;\r\n } else {\r\n this.getValue(true);\r\n }\r\n};\r\n\r\nRepeaterModifier.prototype.resetElements = function (elements) {\r\n var i;\r\n var len = elements.length;\r\n for (i = 0; i < len; i += 1) {\r\n elements[i]._processed = false;\r\n if (elements[i].ty === 'gr') {\r\n this.resetElements(elements[i].it);\r\n }\r\n }\r\n};\r\n\r\nRepeaterModifier.prototype.cloneElements = function (elements) {\r\n var newElements = JSON.parse(JSON.stringify(elements));\r\n this.resetElements(newElements);\r\n return newElements;\r\n};\r\n\r\nRepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\r\n var i;\r\n var len = elements.length;\r\n for (i = 0; i < len; i += 1) {\r\n elements[i]._render = renderFlag;\r\n if (elements[i].ty === 'gr') {\r\n this.changeGroupRender(elements[i].it, renderFlag);\r\n }\r\n }\r\n};\r\n\r\nRepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\r\n var items;\r\n var itemsTransform;\r\n var i;\r\n var dir;\r\n var cont;\r\n var hasReloaded = false;\r\n if (this._mdf || _isFirstFrame) {\r\n var copies = Math.ceil(this.c.v);\r\n if (this._groups.length < copies) {\r\n while (this._groups.length < copies) {\r\n var group = {\r\n it: this.cloneElements(this._elements),\r\n ty: 'gr',\r\n };\r\n group.it.push({\r\n a: { a: 0, ix: 1, k: [0, 0] }, nm: 'Transform', o: { a: 0, ix: 7, k: 100 }, p: { a: 0, ix: 2, k: [0, 0] }, r: { a: 1, ix: 6, k: [{ s: 0, e: 0, t: 0 }, { s: 0, e: 0, t: 1 }] }, s: { a: 0, ix: 3, k: [100, 100] }, sa: { a: 0, ix: 5, k: 0 }, sk: { a: 0, ix: 4, k: 0 }, ty: 'tr',\r\n });\r\n\r\n this.arr.splice(0, 0, group);\r\n this._groups.splice(0, 0, group);\r\n this._currentCopies += 1;\r\n }\r\n this.elem.reloadShapes();\r\n hasReloaded = true;\r\n }\r\n cont = 0;\r\n var renderFlag;\r\n for (i = 0; i <= this._groups.length - 1; i += 1) {\r\n renderFlag = cont < copies;\r\n this._groups[i]._render = renderFlag;\r\n this.changeGroupRender(this._groups[i].it, renderFlag);\r\n if (!renderFlag) {\r\n var elems = this.elemsData[i].it;\r\n var transformData = elems[elems.length - 1];\r\n if (transformData.transform.op.v !== 0) {\r\n transformData.transform.op._mdf = true;\r\n transformData.transform.op.v = 0;\r\n } else {\r\n transformData.transform.op._mdf = false;\r\n }\r\n }\r\n cont += 1;\r\n }\r\n\r\n this._currentCopies = copies;\r\n /// /\r\n\r\n var offset = this.o.v;\r\n var offsetModulo = offset % 1;\r\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\r\n var pProps = this.pMatrix.props;\r\n var rProps = this.rMatrix.props;\r\n var sProps = this.sMatrix.props;\r\n this.pMatrix.reset();\r\n this.rMatrix.reset();\r\n this.sMatrix.reset();\r\n this.tMatrix.reset();\r\n this.matrix.reset();\r\n var iteration = 0;\r\n\r\n if (offset > 0) {\r\n while (iteration < roundOffset) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\r\n iteration += 1;\r\n }\r\n if (offsetModulo) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\r\n iteration += offsetModulo;\r\n }\r\n } else if (offset < 0) {\r\n while (iteration > roundOffset) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\r\n iteration -= 1;\r\n }\r\n if (offsetModulo) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\r\n iteration -= offsetModulo;\r\n }\r\n }\r\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\r\n dir = this.data.m === 1 ? 1 : -1;\r\n cont = this._currentCopies;\r\n var j;\r\n var jLen;\r\n while (cont) {\r\n items = this.elemsData[i].it;\r\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\r\n jLen = itemsTransform.length;\r\n items[items.length - 1].transform.mProps._mdf = true;\r\n items[items.length - 1].transform.op._mdf = true;\r\n items[items.length - 1].transform.op.v = this._currentCopies === 1\r\n ? this.so.v\r\n : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\r\n\r\n if (iteration !== 0) {\r\n if ((i !== 0 && dir === 1) || (i !== this._currentCopies - 1 && dir === -1)) {\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\r\n }\r\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\r\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\r\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n itemsTransform[j] = this.matrix.props[j];\r\n }\r\n this.matrix.reset();\r\n } else {\r\n this.matrix.reset();\r\n for (j = 0; j < jLen; j += 1) {\r\n itemsTransform[j] = this.matrix.props[j];\r\n }\r\n }\r\n iteration += 1;\r\n cont -= 1;\r\n i += dir;\r\n }\r\n } else {\r\n cont = this._currentCopies;\r\n i = 0;\r\n dir = 1;\r\n while (cont) {\r\n items = this.elemsData[i].it;\r\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\r\n items[items.length - 1].transform.mProps._mdf = false;\r\n items[items.length - 1].transform.op._mdf = false;\r\n cont -= 1;\r\n i += dir;\r\n }\r\n }\r\n return hasReloaded;\r\n};\r\n\r\nRepeaterModifier.prototype.addShape = function () {};\r\n\r\nShapeModifiers.registerModifier('rp', RepeaterModifier);\r\n\r\n/* global createSizedArray, shapePool */\r\n\r\nfunction ShapeCollection() {\r\n this._length = 0;\r\n this._maxLength = 4;\r\n this.shapes = createSizedArray(this._maxLength);\r\n}\r\n\r\nShapeCollection.prototype.addShape = function (shapeData) {\r\n if (this._length === this._maxLength) {\r\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\r\n this._maxLength *= 2;\r\n }\r\n this.shapes[this._length] = shapeData;\r\n this._length += 1;\r\n};\r\n\r\nShapeCollection.prototype.releaseShapes = function () {\r\n var i;\r\n for (i = 0; i < this._length; i += 1) {\r\n shapePool.release(this.shapes[i]);\r\n }\r\n this._length = 0;\r\n};\r\n\r\n/* global createSizedArray, createTypedArray, PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\n\r\nfunction DashProperty(elem, data, renderer, container) {\r\n this.elem = elem;\r\n this.frameId = -1;\r\n this.dataProps = createSizedArray(data.length);\r\n this.renderer = renderer;\r\n this.k = false;\r\n this.dashStr = '';\r\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\r\n this.dashoffset = createTypedArray('float32', 1);\r\n this.initDynamicPropertyContainer(container);\r\n var i;\r\n var len = data.length || 0;\r\n var prop;\r\n for (i = 0; i < len; i += 1) {\r\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\r\n this.k = prop.k || this.k;\r\n this.dataProps[i] = { n: data[i].n, p: prop };\r\n }\r\n if (!this.k) {\r\n this.getValue(true);\r\n }\r\n this._isAnimated = this.k;\r\n}\r\n\r\nDashProperty.prototype.getValue = function (forceRender) {\r\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\r\n return;\r\n }\r\n this.frameId = this.elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n this._mdf = this._mdf || forceRender;\r\n if (this._mdf) {\r\n var i = 0;\r\n var len = this.dataProps.length;\r\n if (this.renderer === 'svg') {\r\n this.dashStr = '';\r\n }\r\n for (i = 0; i < len; i += 1) {\r\n if (this.dataProps[i].n !== 'o') {\r\n if (this.renderer === 'svg') {\r\n this.dashStr += ' ' + this.dataProps[i].p.v;\r\n } else {\r\n this.dashArray[i] = this.dataProps[i].p.v;\r\n }\r\n } else {\r\n this.dashoffset[0] = this.dataProps[i].p.v;\r\n }\r\n }\r\n }\r\n};\r\nextendPrototype([DynamicPropertyContainer], DashProperty);\r\n\r\n/* global createTypedArray, PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\nfunction GradientProperty(elem, data, container) {\r\n this.data = data;\r\n this.c = createTypedArray('uint8c', data.p * 4);\r\n var cLength = data.k.k[0].s ? (data.k.k[0].s.length - data.p * 4) : data.k.k.length - data.p * 4;\r\n this.o = createTypedArray('float32', cLength);\r\n this._cmdf = false;\r\n this._omdf = false;\r\n this._collapsable = this.checkCollapsable();\r\n this._hasOpacity = cLength;\r\n this.initDynamicPropertyContainer(container);\r\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\r\n this.k = this.prop.k;\r\n this.getValue(true);\r\n}\r\n\r\nGradientProperty.prototype.comparePoints = function (values, points) {\r\n var i = 0;\r\n var len = this.o.length / 2;\r\n var diff;\r\n while (i < len) {\r\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\r\n if (diff > 0.01) {\r\n return false;\r\n }\r\n i += 1;\r\n }\r\n return true;\r\n};\r\n\r\nGradientProperty.prototype.checkCollapsable = function () {\r\n if (this.o.length / 2 !== this.c.length / 4) {\r\n return false;\r\n }\r\n if (this.data.k.k[0].s) {\r\n var i = 0;\r\n var len = this.data.k.k.length;\r\n while (i < len) {\r\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\r\n return false;\r\n }\r\n i += 1;\r\n }\r\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nGradientProperty.prototype.getValue = function (forceRender) {\r\n this.prop.getValue();\r\n this._mdf = false;\r\n this._cmdf = false;\r\n this._omdf = false;\r\n if (this.prop._mdf || forceRender) {\r\n var i;\r\n var len = this.data.p * 4;\r\n var mult;\r\n var val;\r\n for (i = 0; i < len; i += 1) {\r\n mult = i % 4 === 0 ? 100 : 255;\r\n val = Math.round(this.prop.v[i] * mult);\r\n if (this.c[i] !== val) {\r\n this.c[i] = val;\r\n this._cmdf = !forceRender;\r\n }\r\n }\r\n if (this.o.length) {\r\n len = this.prop.v.length;\r\n for (i = this.data.p * 4; i < len; i += 1) {\r\n mult = i % 2 === 0 ? 100 : 1;\r\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\r\n if (this.o[i - this.data.p * 4] !== val) {\r\n this.o[i - this.data.p * 4] = val;\r\n this._omdf = !forceRender;\r\n }\r\n }\r\n }\r\n this._mdf = !forceRender;\r\n }\r\n};\r\n\r\nextendPrototype([DynamicPropertyContainer], GradientProperty);\r\n\r\n/* exported buildShapeString */\r\n\r\nvar buildShapeString = function (pathNodes, length, closed, mat) {\r\n if (length === 0) {\r\n return '';\r\n }\r\n var _o = pathNodes.o;\r\n var _i = pathNodes.i;\r\n var _v = pathNodes.v;\r\n var i;\r\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\r\n for (i = 1; i < length; i += 1) {\r\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\r\n }\r\n if (closed && length) {\r\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\r\n shapeString += 'z';\r\n }\r\n return shapeString;\r\n};\r\n\r\n/* global Howl */\r\n/* exported audioControllerFactory */\r\n\r\nvar audioControllerFactory = (function () {\r\n function AudioController(audioFactory) {\r\n this.audios = [];\r\n this.audioFactory = audioFactory;\r\n this._volume = 1;\r\n this._isMuted = false;\r\n }\r\n\r\n AudioController.prototype = {\r\n addAudio: function (audio) {\r\n this.audios.push(audio);\r\n },\r\n pause: function () {\r\n var i;\r\n var len = this.audios.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.audios[i].pause();\r\n }\r\n },\r\n resume: function () {\r\n var i;\r\n var len = this.audios.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.audios[i].resume();\r\n }\r\n },\r\n setRate: function (rateValue) {\r\n var i;\r\n var len = this.audios.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.audios[i].setRate(rateValue);\r\n }\r\n },\r\n createAudio: function (assetPath) {\r\n if (this.audioFactory) {\r\n return this.audioFactory(assetPath);\r\n } if (Howl) {\r\n return new Howl({\r\n src: [assetPath],\r\n });\r\n }\r\n return {\r\n isPlaying: false,\r\n play: function () { this.isPlaying = true; },\r\n seek: function () { this.isPlaying = false; },\r\n playing: function () {},\r\n rate: function () {},\r\n setVolume: function () {},\r\n };\r\n },\r\n setAudioFactory: function (audioFactory) {\r\n this.audioFactory = audioFactory;\r\n },\r\n setVolume: function (value) {\r\n this._volume = value;\r\n this._updateVolume();\r\n },\r\n mute: function () {\r\n this._isMuted = true;\r\n this._updateVolume();\r\n },\r\n unmute: function () {\r\n this._isMuted = false;\r\n this._updateVolume();\r\n },\r\n getVolume: function () {\r\n return this._volume;\r\n },\r\n _updateVolume: function () {\r\n var i;\r\n var len = this.audios.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\r\n }\r\n },\r\n };\r\n\r\n return function () {\r\n return new AudioController();\r\n };\r\n}());\r\n\r\n/* global createTag, createNS, isSafari, assetLoader */\r\n/* exported ImagePreloader */\r\n\r\nvar ImagePreloader = (function () {\r\n var proxyImage = (function () {\r\n var canvas = createTag('canvas');\r\n canvas.width = 1;\r\n canvas.height = 1;\r\n var ctx = canvas.getContext('2d');\r\n ctx.fillStyle = 'rgba(0,0,0,0)';\r\n ctx.fillRect(0, 0, 1, 1);\r\n return canvas;\r\n }());\r\n\r\n function imageLoaded() {\r\n this.loadedAssets += 1;\r\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\r\n if (this.imagesLoadedCb) {\r\n this.imagesLoadedCb(null);\r\n }\r\n }\r\n }\r\n function footageLoaded() {\r\n this.loadedFootagesCount += 1;\r\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\r\n if (this.imagesLoadedCb) {\r\n this.imagesLoadedCb(null);\r\n }\r\n }\r\n }\r\n\r\n function getAssetsPath(assetData, assetsPath, originalPath) {\r\n var path = '';\r\n if (assetData.e) {\r\n path = assetData.p;\r\n } else if (assetsPath) {\r\n var imagePath = assetData.p;\r\n if (imagePath.indexOf('images/') !== -1) {\r\n imagePath = imagePath.split('/')[1];\r\n }\r\n path = assetsPath + imagePath;\r\n } else {\r\n path = originalPath;\r\n path += assetData.u ? assetData.u : '';\r\n path += assetData.p;\r\n }\r\n return path;\r\n }\r\n\r\n function testImageLoaded(img) {\r\n var _count = 0;\r\n var intervalId = setInterval(function () {\r\n var box = img.getBBox();\r\n if (box.width || _count > 500) {\r\n this._imageLoaded();\r\n clearInterval(intervalId);\r\n }\r\n _count += 1;\r\n }.bind(this), 50);\r\n }\r\n\r\n function createImageData(assetData) {\r\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\r\n var img = createNS('image');\r\n if (isSafari) {\r\n this.testImageLoaded(img);\r\n } else {\r\n img.addEventListener('load', this._imageLoaded, false);\r\n }\r\n img.addEventListener('error', function () {\r\n ob.img = proxyImage;\r\n this._imageLoaded();\r\n }.bind(this), false);\r\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\r\n if (this._elementHelper.append) {\r\n this._elementHelper.append(img);\r\n } else {\r\n this._elementHelper.appendChild(img);\r\n }\r\n var ob = {\r\n img: img,\r\n assetData: assetData,\r\n };\r\n return ob;\r\n }\r\n\r\n function createImgData(assetData) {\r\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\r\n var img = createTag('img');\r\n img.crossOrigin = 'anonymous';\r\n img.addEventListener('load', this._imageLoaded, false);\r\n img.addEventListener('error', function () {\r\n ob.img = proxyImage;\r\n this._imageLoaded();\r\n }.bind(this), false);\r\n img.src = path;\r\n var ob = {\r\n img: img,\r\n assetData: assetData,\r\n };\r\n return ob;\r\n }\r\n\r\n function createFootageData(data) {\r\n var ob = {\r\n assetData: data,\r\n };\r\n var path = getAssetsPath(data, this.assetsPath, this.path);\r\n assetLoader.load(path, function (footageData) {\r\n ob.img = footageData;\r\n this._footageLoaded();\r\n }.bind(this), function () {\r\n ob.img = {};\r\n this._footageLoaded();\r\n }.bind(this));\r\n return ob;\r\n }\r\n\r\n function loadAssets(assets, cb) {\r\n this.imagesLoadedCb = cb;\r\n var i;\r\n var len = assets.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (!assets[i].layers) {\r\n if (!assets[i].t || assets[i].t === 'seq') {\r\n this.totalImages += 1;\r\n this.images.push(this._createImageData(assets[i]));\r\n } else if (assets[i].t === 3) {\r\n this.totalFootages += 1;\r\n this.images.push(this.createFootageData(assets[i]));\r\n }\r\n }\r\n }\r\n }\r\n\r\n function setPath(path) {\r\n this.path = path || '';\r\n }\r\n\r\n function setAssetsPath(path) {\r\n this.assetsPath = path || '';\r\n }\r\n\r\n function getAsset(assetData) {\r\n var i = 0;\r\n var len = this.images.length;\r\n while (i < len) {\r\n if (this.images[i].assetData === assetData) {\r\n return this.images[i].img;\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n }\r\n\r\n function destroy() {\r\n this.imagesLoadedCb = null;\r\n this.images.length = 0;\r\n }\r\n\r\n function loadedImages() {\r\n return this.totalImages === this.loadedAssets;\r\n }\r\n\r\n function loadedFootages() {\r\n return this.totalFootages === this.loadedFootagesCount;\r\n }\r\n\r\n function setCacheType(type, elementHelper) {\r\n if (type === 'svg') {\r\n this._elementHelper = elementHelper;\r\n this._createImageData = this.createImageData.bind(this);\r\n } else {\r\n this._createImageData = this.createImgData.bind(this);\r\n }\r\n }\r\n\r\n function ImagePreloaderFactory() {\r\n this._imageLoaded = imageLoaded.bind(this);\r\n this._footageLoaded = footageLoaded.bind(this);\r\n this.testImageLoaded = testImageLoaded.bind(this);\r\n this.createFootageData = createFootageData.bind(this);\r\n this.assetsPath = '';\r\n this.path = '';\r\n this.totalImages = 0;\r\n this.totalFootages = 0;\r\n this.loadedAssets = 0;\r\n this.loadedFootagesCount = 0;\r\n this.imagesLoadedCb = null;\r\n this.images = [];\r\n }\r\n\r\n ImagePreloaderFactory.prototype = {\r\n loadAssets: loadAssets,\r\n setAssetsPath: setAssetsPath,\r\n setPath: setPath,\r\n loadedImages: loadedImages,\r\n loadedFootages: loadedFootages,\r\n destroy: destroy,\r\n getAsset: getAsset,\r\n createImgData: createImgData,\r\n createImageData: createImageData,\r\n imageLoaded: imageLoaded,\r\n footageLoaded: footageLoaded,\r\n setCacheType: setCacheType,\r\n };\r\n\r\n return ImagePreloaderFactory;\r\n}());\r\n\r\n/* exported featureSupport */\r\n\r\nvar featureSupport = (function () {\r\n var ob = {\r\n maskType: true,\r\n };\r\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\r\n ob.maskType = false;\r\n }\r\n return ob;\r\n}());\r\n\r\n/* global createNS */\r\n/* exported filtersFactory */\r\n\r\nvar filtersFactory = (function () {\r\n var ob = {};\r\n ob.createFilter = createFilter;\r\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\r\n\r\n function createFilter(filId, skipCoordinates) {\r\n var fil = createNS('filter');\r\n fil.setAttribute('id', filId);\r\n if (skipCoordinates !== true) {\r\n fil.setAttribute('filterUnits', 'objectBoundingBox');\r\n fil.setAttribute('x', '0%');\r\n fil.setAttribute('y', '0%');\r\n fil.setAttribute('width', '100%');\r\n fil.setAttribute('height', '100%');\r\n }\r\n return fil;\r\n }\r\n\r\n function createAlphaToLuminanceFilter() {\r\n var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\r\n return feColorMatrix;\r\n }\r\n\r\n return ob;\r\n}());\r\n\r\n/* exported assetLoader */\r\n\r\nvar assetLoader = (function () {\r\n function formatResponse(xhr) {\r\n if (xhr.response && typeof xhr.response === 'object') {\r\n return xhr.response;\r\n } if (xhr.response && typeof xhr.response === 'string') {\r\n return JSON.parse(xhr.response);\r\n } if (xhr.responseText) {\r\n return JSON.parse(xhr.responseText);\r\n }\r\n return null;\r\n }\r\n\r\n function loadAsset(path, callback, errorCallback) {\r\n var response;\r\n var xhr = new XMLHttpRequest();\r\n // set responseType after calling open or IE will break.\r\n try {\r\n // This crashes on Android WebView prior to KitKat\r\n xhr.responseType = 'json';\r\n } catch (err) {} // eslint-disable-line no-empty\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status === 200) {\r\n response = formatResponse(xhr);\r\n callback(response);\r\n } else {\r\n try {\r\n response = formatResponse(xhr);\r\n callback(response);\r\n } catch (err) {\r\n if (errorCallback) {\r\n errorCallback(err);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n xhr.open('GET', path, true);\r\n xhr.send();\r\n }\r\n return {\r\n load: loadAsset,\r\n };\r\n}());\r\n\r\n/* global createSizedArray, PropertyFactory, TextAnimatorDataProperty, bez, addHueToRGB,\r\n addSaturationToRGB, addBrightnessToRGB, LetterProps, Matrix, extendPrototype, DynamicPropertyContainer */\r\n\r\nfunction TextAnimatorProperty(textData, renderType, elem) {\r\n this._isFirstFrame = true;\r\n this._hasMaskedPath = false;\r\n this._frameId = -1;\r\n this._textData = textData;\r\n this._renderType = renderType;\r\n this._elem = elem;\r\n this._animatorsData = createSizedArray(this._textData.a.length);\r\n this._pathData = {};\r\n this._moreOptions = {\r\n alignment: {},\r\n };\r\n this.renderedLetters = [];\r\n this.lettersChangedFlag = false;\r\n this.initDynamicPropertyContainer(elem);\r\n}\r\n\r\nTextAnimatorProperty.prototype.searchProperties = function () {\r\n var i;\r\n var len = this._textData.a.length;\r\n var animatorProps;\r\n var getProp = PropertyFactory.getProp;\r\n for (i = 0; i < len; i += 1) {\r\n animatorProps = this._textData.a[i];\r\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\r\n }\r\n if (this._textData.p && 'm' in this._textData.p) {\r\n this._pathData = {\r\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\r\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\r\n r: this._textData.p.r,\r\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m),\r\n };\r\n this._hasMaskedPath = true;\r\n } else {\r\n this._hasMaskedPath = false;\r\n }\r\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\r\n};\r\n\r\nTextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\r\n this.lettersChangedFlag = lettersChangedFlag;\r\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\r\n return;\r\n }\r\n this._isFirstFrame = false;\r\n var alignment = this._moreOptions.alignment.v;\r\n var animators = this._animatorsData;\r\n var textData = this._textData;\r\n var matrixHelper = this.mHelper;\r\n var renderType = this._renderType;\r\n var renderedLettersCount = this.renderedLetters.length;\r\n var xPos;\r\n var yPos;\r\n var i;\r\n var len;\r\n var letters = documentData.l;\r\n var pathInfo;\r\n var currentLength;\r\n var currentPoint;\r\n var segmentLength;\r\n var flag;\r\n var pointInd;\r\n var segmentInd;\r\n var prevPoint;\r\n var points;\r\n var segments;\r\n var partialLength;\r\n var totalLength;\r\n var perc;\r\n var tanAngle;\r\n var mask;\r\n if (this._hasMaskedPath) {\r\n mask = this._pathData.m;\r\n if (!this._pathData.n || this._pathData._mdf) {\r\n var paths = mask.v;\r\n if (this._pathData.r) {\r\n paths = paths.reverse();\r\n }\r\n // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\r\n pathInfo = {\r\n tLength: 0,\r\n segments: [],\r\n };\r\n len = paths._length - 1;\r\n var bezierData;\r\n totalLength = 0;\r\n for (i = 0; i < len; i += 1) {\r\n bezierData = bez.buildBezierData(paths.v[i],\r\n paths.v[i + 1],\r\n [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\r\n [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\r\n pathInfo.tLength += bezierData.segmentLength;\r\n pathInfo.segments.push(bezierData);\r\n totalLength += bezierData.segmentLength;\r\n }\r\n i = len;\r\n if (mask.v.c) {\r\n bezierData = bez.buildBezierData(paths.v[i],\r\n paths.v[0],\r\n [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\r\n [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\r\n pathInfo.tLength += bezierData.segmentLength;\r\n pathInfo.segments.push(bezierData);\r\n totalLength += bezierData.segmentLength;\r\n }\r\n this._pathData.pi = pathInfo;\r\n }\r\n pathInfo = this._pathData.pi;\r\n\r\n currentLength = this._pathData.f.v;\r\n segmentInd = 0;\r\n pointInd = 1;\r\n segmentLength = 0;\r\n flag = true;\r\n segments = pathInfo.segments;\r\n if (currentLength < 0 && mask.v.c) {\r\n if (pathInfo.tLength < Math.abs(currentLength)) {\r\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\r\n }\r\n segmentInd = segments.length - 1;\r\n points = segments[segmentInd].points;\r\n pointInd = points.length - 1;\r\n while (currentLength < 0) {\r\n currentLength += points[pointInd].partialLength;\r\n pointInd -= 1;\r\n if (pointInd < 0) {\r\n segmentInd -= 1;\r\n points = segments[segmentInd].points;\r\n pointInd = points.length - 1;\r\n }\r\n }\r\n }\r\n points = segments[segmentInd].points;\r\n prevPoint = points[pointInd - 1];\r\n currentPoint = points[pointInd];\r\n partialLength = currentPoint.partialLength;\r\n }\r\n\r\n len = letters.length;\r\n xPos = 0;\r\n yPos = 0;\r\n var yOff = documentData.finalSize * 1.2 * 0.714;\r\n var firstLine = true;\r\n var animatorProps;\r\n var animatorSelector;\r\n var j;\r\n var jLen;\r\n var letterValue;\r\n\r\n jLen = animators.length;\r\n\r\n var mult;\r\n var ind = -1;\r\n var offf;\r\n var xPathPos;\r\n var yPathPos;\r\n var initPathPos = currentLength;\r\n var initSegmentInd = segmentInd;\r\n var initPointInd = pointInd;\r\n var currentLine = -1;\r\n var elemOpacity;\r\n var sc;\r\n var sw;\r\n var fc;\r\n var k;\r\n var letterSw;\r\n var letterSc;\r\n var letterFc;\r\n var letterM = '';\r\n var letterP = this.defaultPropsArray;\r\n var letterO;\r\n\r\n //\r\n if (documentData.j === 2 || documentData.j === 1) {\r\n var animatorJustifyOffset = 0;\r\n var animatorFirstCharOffset = 0;\r\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\r\n var lastIndex = 0;\r\n var isNewLine = true;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (letters[i].n) {\r\n if (animatorJustifyOffset) {\r\n animatorJustifyOffset += animatorFirstCharOffset;\r\n }\r\n while (lastIndex < i) {\r\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\r\n lastIndex += 1;\r\n }\r\n animatorJustifyOffset = 0;\r\n isNewLine = true;\r\n } else {\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n if (animatorProps.t.propType) {\r\n if (isNewLine && documentData.j === 2) {\r\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\r\n }\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n if (mult.length) {\r\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\r\n } else {\r\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\r\n }\r\n }\r\n }\r\n isNewLine = false;\r\n }\r\n }\r\n if (animatorJustifyOffset) {\r\n animatorJustifyOffset += animatorFirstCharOffset;\r\n }\r\n while (lastIndex < i) {\r\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\r\n lastIndex += 1;\r\n }\r\n }\r\n //\r\n\r\n for (i = 0; i < len; i += 1) {\r\n matrixHelper.reset();\r\n elemOpacity = 1;\r\n if (letters[i].n) {\r\n xPos = 0;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n currentLength = initPathPos;\r\n firstLine = false;\r\n if (this._hasMaskedPath) {\r\n segmentInd = initSegmentInd;\r\n pointInd = initPointInd;\r\n points = segments[segmentInd].points;\r\n prevPoint = points[pointInd - 1];\r\n currentPoint = points[pointInd];\r\n partialLength = currentPoint.partialLength;\r\n segmentLength = 0;\r\n }\r\n letterM = '';\r\n letterFc = '';\r\n letterSw = '';\r\n letterO = '';\r\n letterP = this.defaultPropsArray;\r\n } else {\r\n if (this._hasMaskedPath) {\r\n if (currentLine !== letters[i].line) {\r\n switch (documentData.j) {\r\n case 1:\r\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\r\n break;\r\n case 2:\r\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\r\n break;\r\n default:\r\n break;\r\n }\r\n currentLine = letters[i].line;\r\n }\r\n if (ind !== letters[i].ind) {\r\n if (letters[ind]) {\r\n currentLength += letters[ind].extra;\r\n }\r\n currentLength += letters[i].an / 2;\r\n ind = letters[i].ind;\r\n }\r\n currentLength += (alignment[0] * letters[i].an) * 0.005;\r\n var animatorOffset = 0;\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n if (animatorProps.p.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n if (mult.length) {\r\n animatorOffset += animatorProps.p.v[0] * mult[0];\r\n } else {\r\n animatorOffset += animatorProps.p.v[0] * mult;\r\n }\r\n }\r\n if (animatorProps.a.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n if (mult.length) {\r\n animatorOffset += animatorProps.a.v[0] * mult[0];\r\n } else {\r\n animatorOffset += animatorProps.a.v[0] * mult;\r\n }\r\n }\r\n }\r\n flag = true;\r\n while (flag) {\r\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\r\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\r\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\r\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\r\n matrixHelper.translate((-alignment[0] * letters[i].an) * 0.005, -(alignment[1] * yOff) * 0.01);\r\n flag = false;\r\n } else if (points) {\r\n segmentLength += currentPoint.partialLength;\r\n pointInd += 1;\r\n if (pointInd >= points.length) {\r\n pointInd = 0;\r\n segmentInd += 1;\r\n if (!segments[segmentInd]) {\r\n if (mask.v.c) {\r\n pointInd = 0;\r\n segmentInd = 0;\r\n points = segments[segmentInd].points;\r\n } else {\r\n segmentLength -= currentPoint.partialLength;\r\n points = null;\r\n }\r\n } else {\r\n points = segments[segmentInd].points;\r\n }\r\n }\r\n if (points) {\r\n prevPoint = currentPoint;\r\n currentPoint = points[pointInd];\r\n partialLength = currentPoint.partialLength;\r\n }\r\n }\r\n }\r\n offf = letters[i].an / 2 - letters[i].add;\r\n matrixHelper.translate(-offf, 0, 0);\r\n } else {\r\n offf = letters[i].an / 2 - letters[i].add;\r\n matrixHelper.translate(-offf, 0, 0);\r\n\r\n // Grouping alignment\r\n matrixHelper.translate((-alignment[0] * letters[i].an) * 0.005, (-alignment[1] * yOff) * 0.01, 0);\r\n }\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n if (animatorProps.t.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\r\n if (xPos !== 0 || documentData.j !== 0) {\r\n if (this._hasMaskedPath) {\r\n if (mult.length) {\r\n currentLength += animatorProps.t.v * mult[0];\r\n } else {\r\n currentLength += animatorProps.t.v * mult;\r\n }\r\n } else if (mult.length) {\r\n xPos += animatorProps.t.v * mult[0];\r\n } else {\r\n xPos += animatorProps.t.v * mult;\r\n }\r\n }\r\n }\r\n }\r\n if (documentData.strokeWidthAnim) {\r\n sw = documentData.sw || 0;\r\n }\r\n if (documentData.strokeColorAnim) {\r\n if (documentData.sc) {\r\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\r\n } else {\r\n sc = [0, 0, 0];\r\n }\r\n }\r\n if (documentData.fillColorAnim && documentData.fc) {\r\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\r\n }\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n if (animatorProps.a.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n\r\n if (mult.length) {\r\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\r\n } else {\r\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\r\n }\r\n }\r\n }\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n if (animatorProps.s.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n if (mult.length) {\r\n matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult[0]), 1 + ((animatorProps.s.v[1] - 1) * mult[1]), 1);\r\n } else {\r\n matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult), 1 + ((animatorProps.s.v[1] - 1) * mult), 1);\r\n }\r\n }\r\n }\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n if (animatorProps.sk.propType) {\r\n if (mult.length) {\r\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\r\n } else {\r\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\r\n }\r\n }\r\n if (animatorProps.r.propType) {\r\n if (mult.length) {\r\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\r\n } else {\r\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\r\n }\r\n }\r\n if (animatorProps.ry.propType) {\r\n if (mult.length) {\r\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\r\n } else {\r\n matrixHelper.rotateY(animatorProps.ry.v * mult);\r\n }\r\n }\r\n if (animatorProps.rx.propType) {\r\n if (mult.length) {\r\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\r\n } else {\r\n matrixHelper.rotateX(animatorProps.rx.v * mult);\r\n }\r\n }\r\n if (animatorProps.o.propType) {\r\n if (mult.length) {\r\n elemOpacity += ((animatorProps.o.v) * mult[0] - elemOpacity) * mult[0];\r\n } else {\r\n elemOpacity += ((animatorProps.o.v) * mult - elemOpacity) * mult;\r\n }\r\n }\r\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\r\n if (mult.length) {\r\n sw += animatorProps.sw.v * mult[0];\r\n } else {\r\n sw += animatorProps.sw.v * mult;\r\n }\r\n }\r\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\r\n for (k = 0; k < 3; k += 1) {\r\n if (mult.length) {\r\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\r\n } else {\r\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\r\n }\r\n }\r\n }\r\n if (documentData.fillColorAnim && documentData.fc) {\r\n if (animatorProps.fc.propType) {\r\n for (k = 0; k < 3; k += 1) {\r\n if (mult.length) {\r\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\r\n } else {\r\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\r\n }\r\n }\r\n }\r\n if (animatorProps.fh.propType) {\r\n if (mult.length) {\r\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\r\n } else {\r\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\r\n }\r\n }\r\n if (animatorProps.fs.propType) {\r\n if (mult.length) {\r\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\r\n } else {\r\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\r\n }\r\n }\r\n if (animatorProps.fb.propType) {\r\n if (mult.length) {\r\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\r\n } else {\r\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n\r\n if (animatorProps.p.propType) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\r\n if (this._hasMaskedPath) {\r\n if (mult.length) {\r\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\r\n } else {\r\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\r\n }\r\n } else if (mult.length) {\r\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\r\n } else {\r\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\r\n }\r\n }\r\n }\r\n if (documentData.strokeWidthAnim) {\r\n letterSw = sw < 0 ? 0 : sw;\r\n }\r\n if (documentData.strokeColorAnim) {\r\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\r\n }\r\n if (documentData.fillColorAnim && documentData.fc) {\r\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\r\n }\r\n\r\n if (this._hasMaskedPath) {\r\n matrixHelper.translate(0, -documentData.ls);\r\n\r\n matrixHelper.translate(0, (alignment[1] * yOff) * 0.01 + yPos, 0);\r\n if (textData.p.p) {\r\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\r\n var rot = (Math.atan(tanAngle) * 180) / Math.PI;\r\n if (currentPoint.point[0] < prevPoint.point[0]) {\r\n rot += 180;\r\n }\r\n matrixHelper.rotate((-rot * Math.PI) / 180);\r\n }\r\n matrixHelper.translate(xPathPos, yPathPos, 0);\r\n currentLength -= (alignment[0] * letters[i].an) * 0.005;\r\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\r\n currentLength += letters[i].an / 2;\r\n currentLength += (documentData.tr * 0.001) * documentData.finalSize;\r\n }\r\n } else {\r\n matrixHelper.translate(xPos, yPos, 0);\r\n\r\n if (documentData.ps) {\r\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\r\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\r\n }\r\n switch (documentData.j) {\r\n case 1:\r\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\r\n break;\r\n case 2:\r\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\r\n break;\r\n default:\r\n break;\r\n }\r\n matrixHelper.translate(0, -documentData.ls);\r\n matrixHelper.translate(offf, 0, 0);\r\n matrixHelper.translate((alignment[0] * letters[i].an) * 0.005, (alignment[1] * yOff) * 0.01, 0);\r\n xPos += letters[i].l + (documentData.tr * 0.001) * documentData.finalSize;\r\n }\r\n if (renderType === 'html') {\r\n letterM = matrixHelper.toCSS();\r\n } else if (renderType === 'svg') {\r\n letterM = matrixHelper.to2dCSS();\r\n } else {\r\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\r\n }\r\n letterO = elemOpacity;\r\n }\r\n\r\n if (renderedLettersCount <= i) {\r\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\r\n this.renderedLetters.push(letterValue);\r\n renderedLettersCount += 1;\r\n this.lettersChangedFlag = true;\r\n } else {\r\n letterValue = this.renderedLetters[i];\r\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\r\n }\r\n }\r\n};\r\n\r\nTextAnimatorProperty.prototype.getValue = function () {\r\n if (this._elem.globalData.frameId === this._frameId) {\r\n return;\r\n }\r\n this._frameId = this._elem.globalData.frameId;\r\n this.iterateDynamicProperties();\r\n};\r\n\r\nTextAnimatorProperty.prototype.mHelper = new Matrix();\r\nTextAnimatorProperty.prototype.defaultPropsArray = [];\r\nextendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\r\n\r\n/* global PropertyFactory, degToRads, TextSelectorProp */\r\n/* exported TextAnimatorDataProperty */\r\n\r\nfunction TextAnimatorDataProperty(elem, animatorProps, container) {\r\n var defaultData = { propType: false };\r\n var getProp = PropertyFactory.getProp;\r\n var textAnimatorAnimatables = animatorProps.a;\r\n this.a = {\r\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\r\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\r\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\r\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\r\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\r\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\r\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\r\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\r\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\r\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\r\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\r\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\r\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\r\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\r\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\r\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData,\r\n };\r\n\r\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\r\n this.s.t = animatorProps.s.t;\r\n}\r\n\r\nfunction LetterProps(o, sw, sc, fc, m, p) {\r\n this.o = o;\r\n this.sw = sw;\r\n this.sc = sc;\r\n this.fc = fc;\r\n this.m = m;\r\n this.p = p;\r\n this._mdf = {\r\n o: true,\r\n sw: !!sw,\r\n sc: !!sc,\r\n fc: !!fc,\r\n m: true,\r\n p: true,\r\n };\r\n}\r\n\r\nLetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\r\n this._mdf.o = false;\r\n this._mdf.sw = false;\r\n this._mdf.sc = false;\r\n this._mdf.fc = false;\r\n this._mdf.m = false;\r\n this._mdf.p = false;\r\n var updated = false;\r\n\r\n if (this.o !== o) {\r\n this.o = o;\r\n this._mdf.o = true;\r\n updated = true;\r\n }\r\n if (this.sw !== sw) {\r\n this.sw = sw;\r\n this._mdf.sw = true;\r\n updated = true;\r\n }\r\n if (this.sc !== sc) {\r\n this.sc = sc;\r\n this._mdf.sc = true;\r\n updated = true;\r\n }\r\n if (this.fc !== fc) {\r\n this.fc = fc;\r\n this._mdf.fc = true;\r\n updated = true;\r\n }\r\n if (this.m !== m) {\r\n this.m = m;\r\n this._mdf.m = true;\r\n updated = true;\r\n }\r\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\r\n this.p = p;\r\n this._mdf.p = true;\r\n updated = true;\r\n }\r\n return updated;\r\n};\r\n\r\n/* global FontManager, initialDefaultFrame, getFontProperties */\r\n/* exported TextProperty */\r\n\r\nfunction TextProperty(elem, data) {\r\n this._frameId = initialDefaultFrame;\r\n this.pv = '';\r\n this.v = '';\r\n this.kf = false;\r\n this._isFirstFrame = true;\r\n this._mdf = false;\r\n this.data = data;\r\n this.elem = elem;\r\n this.comp = this.elem.comp;\r\n this.keysIndex = 0;\r\n this.canResize = false;\r\n this.minimumFontSize = 1;\r\n this.effectsSequence = [];\r\n this.currentData = {\r\n ascent: 0,\r\n boxWidth: this.defaultBoxWidth,\r\n f: '',\r\n fStyle: '',\r\n fWeight: '',\r\n fc: '',\r\n j: '',\r\n justifyOffset: '',\r\n l: [],\r\n lh: 0,\r\n lineWidths: [],\r\n ls: '',\r\n of: '',\r\n s: '',\r\n sc: '',\r\n sw: 0,\r\n t: 0,\r\n tr: 0,\r\n sz: 0,\r\n ps: null,\r\n fillColorAnim: false,\r\n strokeColorAnim: false,\r\n strokeWidthAnim: false,\r\n yOffset: 0,\r\n finalSize: 0,\r\n finalText: [],\r\n finalLineHeight: 0,\r\n __complete: false,\r\n\r\n };\r\n this.copyData(this.currentData, this.data.d.k[0].s);\r\n\r\n if (!this.searchProperty()) {\r\n this.completeTextData(this.currentData);\r\n }\r\n}\r\n\r\nTextProperty.prototype.defaultBoxWidth = [0, 0];\r\n\r\nTextProperty.prototype.copyData = function (obj, data) {\r\n for (var s in data) {\r\n if (Object.prototype.hasOwnProperty.call(data, s)) {\r\n obj[s] = data[s];\r\n }\r\n }\r\n return obj;\r\n};\r\n\r\nTextProperty.prototype.setCurrentData = function (data) {\r\n if (!data.__complete) {\r\n this.completeTextData(data);\r\n }\r\n this.currentData = data;\r\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\r\n this._mdf = true;\r\n};\r\n\r\nTextProperty.prototype.searchProperty = function () {\r\n return this.searchKeyframes();\r\n};\r\n\r\nTextProperty.prototype.searchKeyframes = function () {\r\n this.kf = this.data.d.k.length > 1;\r\n if (this.kf) {\r\n this.addEffect(this.getKeyframeValue.bind(this));\r\n }\r\n return this.kf;\r\n};\r\n\r\nTextProperty.prototype.addEffect = function (effectFunction) {\r\n this.effectsSequence.push(effectFunction);\r\n this.elem.addDynamicProperty(this);\r\n};\r\n\r\nTextProperty.prototype.getValue = function (_finalValue) {\r\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\r\n return;\r\n }\r\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\r\n var currentValue = this.currentData;\r\n var currentIndex = this.keysIndex;\r\n if (this.lock) {\r\n this.setCurrentData(this.currentData);\r\n return;\r\n }\r\n this.lock = true;\r\n this._mdf = false;\r\n var i; var\r\n len = this.effectsSequence.length;\r\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\r\n for (i = 0; i < len; i += 1) {\r\n // Checking if index changed to prevent creating a new object every time the expression updates.\r\n if (currentIndex !== this.keysIndex) {\r\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\r\n } else {\r\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\r\n }\r\n }\r\n if (currentValue !== finalValue) {\r\n this.setCurrentData(finalValue);\r\n }\r\n this.v = this.currentData;\r\n this.pv = this.v;\r\n this.lock = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n};\r\n\r\nTextProperty.prototype.getKeyframeValue = function () {\r\n var textKeys = this.data.d.k;\r\n var frameNum = this.elem.comp.renderedFrame;\r\n var i = 0; var\r\n len = textKeys.length;\r\n while (i <= len - 1) {\r\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\r\n break;\r\n }\r\n i += 1;\r\n }\r\n if (this.keysIndex !== i) {\r\n this.keysIndex = i;\r\n }\r\n return this.data.d.k[this.keysIndex].s;\r\n};\r\n\r\nTextProperty.prototype.buildFinalText = function (text) {\r\n var combinedCharacters = FontManager.getCombinedCharacterCodes();\r\n var charactersArray = [];\r\n var i = 0; var\r\n len = text.length;\r\n var charCode;\r\n while (i < len) {\r\n charCode = text.charCodeAt(i);\r\n if (combinedCharacters.indexOf(charCode) !== -1) {\r\n charactersArray[charactersArray.length - 1] += text.charAt(i);\r\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\r\n charCode = text.charCodeAt(i + 1);\r\n if (charCode >= 0xDC00 && charCode <= 0xDFFF) {\r\n charactersArray.push(text.substr(i, 2));\r\n i += 1;\r\n } else {\r\n charactersArray.push(text.charAt(i));\r\n }\r\n } else {\r\n charactersArray.push(text.charAt(i));\r\n }\r\n i += 1;\r\n }\r\n return charactersArray;\r\n};\r\n\r\nTextProperty.prototype.completeTextData = function (documentData) {\r\n documentData.__complete = true;\r\n var fontManager = this.elem.globalData.fontManager;\r\n var data = this.data;\r\n var letters = [];\r\n var i; var\r\n len;\r\n var newLineFlag; var index = 0; var\r\n val;\r\n var anchorGrouping = data.m.g;\r\n var currentSize = 0; var currentPos = 0; var currentLine = 0; var\r\n lineWidths = [];\r\n var lineWidth = 0;\r\n var maxLineWidth = 0;\r\n var j; var\r\n jLen;\r\n var fontData = fontManager.getFontByName(documentData.f);\r\n var charData; var\r\n cLength = 0;\r\n\r\n var fontProps = getFontProperties(fontData);\r\n documentData.fWeight = fontProps.weight;\r\n documentData.fStyle = fontProps.style;\r\n documentData.finalSize = documentData.s;\r\n documentData.finalText = this.buildFinalText(documentData.t);\r\n len = documentData.finalText.length;\r\n documentData.finalLineHeight = documentData.lh;\r\n var trackingOffset = (documentData.tr / 1000) * documentData.finalSize;\r\n var charCode;\r\n if (documentData.sz) {\r\n var flag = true;\r\n var boxWidth = documentData.sz[0];\r\n var boxHeight = documentData.sz[1];\r\n var currentHeight; var\r\n finalText;\r\n while (flag) {\r\n finalText = this.buildFinalText(documentData.t);\r\n currentHeight = 0;\r\n lineWidth = 0;\r\n len = finalText.length;\r\n trackingOffset = (documentData.tr / 1000) * documentData.finalSize;\r\n var lastSpaceIndex = -1;\r\n for (i = 0; i < len; i += 1) {\r\n charCode = finalText[i].charCodeAt(0);\r\n newLineFlag = false;\r\n if (finalText[i] === ' ') {\r\n lastSpaceIndex = i;\r\n } else if (charCode === 13 || charCode === 3) {\r\n lineWidth = 0;\r\n newLineFlag = true;\r\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n }\r\n if (fontManager.chars) {\r\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\r\n cLength = newLineFlag ? 0 : (charData.w * documentData.finalSize) / 100;\r\n } else {\r\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\r\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\r\n }\r\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\r\n if (lastSpaceIndex === -1) {\r\n len += 1;\r\n } else {\r\n i = lastSpaceIndex;\r\n }\r\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r');\r\n // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\r\n lastSpaceIndex = -1;\r\n lineWidth = 0;\r\n } else {\r\n lineWidth += cLength;\r\n lineWidth += trackingOffset;\r\n }\r\n }\r\n currentHeight += (fontData.ascent * documentData.finalSize) / 100;\r\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\r\n documentData.finalSize -= 1;\r\n documentData.finalLineHeight = (documentData.finalSize * documentData.lh) / documentData.s;\r\n } else {\r\n documentData.finalText = finalText;\r\n len = documentData.finalText.length;\r\n flag = false;\r\n }\r\n }\r\n }\r\n lineWidth = -trackingOffset;\r\n cLength = 0;\r\n var uncollapsedSpaces = 0;\r\n var currentChar;\r\n for (i = 0; i < len; i += 1) {\r\n newLineFlag = false;\r\n currentChar = documentData.finalText[i];\r\n charCode = currentChar.charCodeAt(0);\r\n if (charCode === 13 || charCode === 3) {\r\n uncollapsedSpaces = 0;\r\n lineWidths.push(lineWidth);\r\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\r\n lineWidth = -2 * trackingOffset;\r\n val = '';\r\n newLineFlag = true;\r\n currentLine += 1;\r\n } else {\r\n val = currentChar;\r\n }\r\n if (fontManager.chars) {\r\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\r\n cLength = newLineFlag ? 0 : (charData.w * documentData.finalSize) / 100;\r\n } else {\r\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\r\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\r\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\r\n }\r\n\r\n //\r\n if (currentChar === ' ') {\r\n uncollapsedSpaces += cLength + trackingOffset;\r\n } else {\r\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\r\n uncollapsedSpaces = 0;\r\n }\r\n letters.push({\r\n l: cLength, an: cLength, add: currentSize, n: newLineFlag, anIndexes: [], val: val, line: currentLine, animatorJustifyOffset: 0,\r\n });\r\n if (anchorGrouping == 2) { // eslint-disable-line eqeqeq\r\n currentSize += cLength;\r\n if (val === '' || val === ' ' || i === len - 1) {\r\n if (val === '' || val === ' ') {\r\n currentSize -= cLength;\r\n }\r\n while (currentPos <= i) {\r\n letters[currentPos].an = currentSize;\r\n letters[currentPos].ind = index;\r\n letters[currentPos].extra = cLength;\r\n currentPos += 1;\r\n }\r\n index += 1;\r\n currentSize = 0;\r\n }\r\n } else if (anchorGrouping == 3) { // eslint-disable-line eqeqeq\r\n currentSize += cLength;\r\n if (val === '' || i === len - 1) {\r\n if (val === '') {\r\n currentSize -= cLength;\r\n }\r\n while (currentPos <= i) {\r\n letters[currentPos].an = currentSize;\r\n letters[currentPos].ind = index;\r\n letters[currentPos].extra = cLength;\r\n currentPos += 1;\r\n }\r\n currentSize = 0;\r\n index += 1;\r\n }\r\n } else {\r\n letters[index].ind = index;\r\n letters[index].extra = 0;\r\n index += 1;\r\n }\r\n }\r\n documentData.l = letters;\r\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\r\n lineWidths.push(lineWidth);\r\n if (documentData.sz) {\r\n documentData.boxWidth = documentData.sz[0];\r\n documentData.justifyOffset = 0;\r\n } else {\r\n documentData.boxWidth = maxLineWidth;\r\n switch (documentData.j) {\r\n case 1:\r\n documentData.justifyOffset = -documentData.boxWidth;\r\n break;\r\n case 2:\r\n documentData.justifyOffset = -documentData.boxWidth / 2;\r\n break;\r\n default:\r\n documentData.justifyOffset = 0;\r\n }\r\n }\r\n documentData.lineWidths = lineWidths;\r\n\r\n var animators = data.a; var animatorData; var\r\n letterData;\r\n jLen = animators.length;\r\n var based; var ind; var\r\n indexes = [];\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorData = animators[j];\r\n if (animatorData.a.sc) {\r\n documentData.strokeColorAnim = true;\r\n }\r\n if (animatorData.a.sw) {\r\n documentData.strokeWidthAnim = true;\r\n }\r\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\r\n documentData.fillColorAnim = true;\r\n }\r\n ind = 0;\r\n based = animatorData.s.b;\r\n for (i = 0; i < len; i += 1) {\r\n letterData = letters[i];\r\n letterData.anIndexes[j] = ind;\r\n if ((based == 1 && letterData.val !== '') || (based == 2 && letterData.val !== '' && letterData.val !== ' ') || (based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1)) || (based == 4 && (letterData.n || i == len - 1))) { // eslint-disable-line eqeqeq\r\n if (animatorData.s.rn === 1) {\r\n indexes.push(ind);\r\n }\r\n ind += 1;\r\n }\r\n }\r\n data.a[j].s.totalChars = ind;\r\n var currentInd = -1; var\r\n newInd;\r\n if (animatorData.s.rn === 1) {\r\n for (i = 0; i < len; i += 1) {\r\n letterData = letters[i];\r\n if (currentInd != letterData.anIndexes[j]) { // eslint-disable-line eqeqeq\r\n currentInd = letterData.anIndexes[j];\r\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\r\n }\r\n letterData.anIndexes[j] = newInd;\r\n }\r\n }\r\n }\r\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\r\n documentData.ls = documentData.ls || 0;\r\n documentData.ascent = (fontData.ascent * documentData.finalSize) / 100;\r\n};\r\n\r\nTextProperty.prototype.updateDocumentData = function (newData, index) {\r\n index = index === undefined ? this.keysIndex : index;\r\n var dData = this.copyData({}, this.data.d.k[index].s);\r\n dData = this.copyData(dData, newData);\r\n this.data.d.k[index].s = dData;\r\n this.recalculate(index);\r\n this.elem.addDynamicProperty(this);\r\n};\r\n\r\nTextProperty.prototype.recalculate = function (index) {\r\n var dData = this.data.d.k[index].s;\r\n dData.__complete = false;\r\n this.keysIndex = 0;\r\n this._isFirstFrame = true;\r\n this.getValue(dData);\r\n};\r\n\r\nTextProperty.prototype.canResizeFont = function (_canResize) {\r\n this.canResize = _canResize;\r\n this.recalculate(this.keysIndex);\r\n this.elem.addDynamicProperty(this);\r\n};\r\n\r\nTextProperty.prototype.setMinimumFontSize = function (_fontValue) {\r\n this.minimumFontSize = Math.floor(_fontValue) || 1;\r\n this.recalculate(this.keysIndex);\r\n this.elem.addDynamicProperty(this);\r\n};\r\n\r\n/* global extendPrototype, BezierFactory, PropertyFactory, DynamicPropertyContainer */\r\n/* exported TextSelectorProp */\r\n\r\nvar TextSelectorProp = (function () {\r\n var max = Math.max;\r\n var min = Math.min;\r\n var floor = Math.floor;\r\n\r\n function TextSelectorPropFactory(elem, data) {\r\n this._currentTextLength = -1;\r\n this.k = false;\r\n this.data = data;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.finalS = 0;\r\n this.finalE = 0;\r\n this.initDynamicPropertyContainer(elem);\r\n this.s = PropertyFactory.getProp(elem, data.s || { k: 0 }, 0, 0, this);\r\n if ('e' in data) {\r\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\r\n } else {\r\n this.e = { v: 100 };\r\n }\r\n this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this);\r\n this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this);\r\n this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this);\r\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\r\n if (!this.dynamicProperties.length) {\r\n this.getValue();\r\n }\r\n }\r\n\r\n TextSelectorPropFactory.prototype = {\r\n getMult: function (ind) {\r\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\r\n this.getValue();\r\n }\r\n // var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\r\n var x1 = 0;\r\n var y1 = 0;\r\n var x2 = 1;\r\n var y2 = 1;\r\n if (this.ne.v > 0) {\r\n x1 = this.ne.v / 100.0;\r\n } else {\r\n y1 = -this.ne.v / 100.0;\r\n }\r\n if (this.xe.v > 0) {\r\n x2 = 1.0 - this.xe.v / 100.0;\r\n } else {\r\n y2 = 1.0 + this.xe.v / 100.0;\r\n }\r\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\r\n\r\n var mult = 0;\r\n var s = this.finalS;\r\n var e = this.finalE;\r\n var type = this.data.sh;\r\n if (type === 2) {\r\n if (e === s) {\r\n mult = ind >= e ? 1 : 0;\r\n } else {\r\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n }\r\n mult = easer(mult);\r\n } else if (type === 3) {\r\n if (e === s) {\r\n mult = ind >= e ? 0 : 1;\r\n } else {\r\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n }\r\n\r\n mult = easer(mult);\r\n } else if (type === 4) {\r\n if (e === s) {\r\n mult = 0;\r\n } else {\r\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\r\n if (mult < 0.5) {\r\n mult *= 2;\r\n } else {\r\n mult = 1 - 2 * (mult - 0.5);\r\n }\r\n }\r\n mult = easer(mult);\r\n } else if (type === 5) {\r\n if (e === s) {\r\n mult = 0;\r\n } else {\r\n var tot = e - s;\r\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\r\n ind = min(max(0, ind + 0.5 - s), e - s);\r\n var x = -tot / 2 + ind;\r\n var a = tot / 2;\r\n mult = Math.sqrt(1 - (x * x) / (a * a));\r\n }\r\n mult = easer(mult);\r\n } else if (type === 6) {\r\n if (e === s) {\r\n mult = 0;\r\n } else {\r\n ind = min(max(0, ind + 0.5 - s), e - s);\r\n mult = (1 + (Math.cos((Math.PI + Math.PI * 2 * (ind) / (e - s))))) / 2; // eslint-disable-line\r\n }\r\n mult = easer(mult);\r\n } else {\r\n if (ind >= floor(s)) {\r\n if (ind - s < 0) {\r\n mult = max(0, min(min(e, 1) - (s - ind), 1));\r\n } else {\r\n mult = max(0, min(e - ind, 1));\r\n }\r\n }\r\n mult = easer(mult);\r\n }\r\n return mult * this.a.v;\r\n },\r\n getValue: function (newCharsFlag) {\r\n this.iterateDynamicProperties();\r\n this._mdf = newCharsFlag || this._mdf;\r\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\r\n if (newCharsFlag && this.data.r === 2) {\r\n this.e.v = this._currentTextLength;\r\n }\r\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\r\n var o = this.o.v / divisor;\r\n var s = this.s.v / divisor + o;\r\n var e = (this.e.v / divisor) + o;\r\n if (s > e) {\r\n var _s = s;\r\n s = e;\r\n e = _s;\r\n }\r\n this.finalS = s;\r\n this.finalE = e;\r\n },\r\n };\r\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\r\n\r\n function getTextSelectorProp(elem, data, arr) {\r\n return new TextSelectorPropFactory(elem, data, arr);\r\n }\r\n\r\n return {\r\n getTextSelectorProp: getTextSelectorProp,\r\n };\r\n}());\r\n\r\n/* global createSizedArray, pooling */\r\n/* exported poolFactory */\r\n\r\nvar poolFactory = (function () {\r\n return function (initialLength, _create, _release) {\r\n var _length = 0;\r\n var _maxLength = initialLength;\r\n var pool = createSizedArray(_maxLength);\r\n\r\n var ob = {\r\n newElement: newElement,\r\n release: release,\r\n };\r\n\r\n function newElement() {\r\n var element;\r\n if (_length) {\r\n _length -= 1;\r\n element = pool[_length];\r\n } else {\r\n element = _create();\r\n }\r\n return element;\r\n }\r\n\r\n function release(element) {\r\n if (_length === _maxLength) {\r\n pool = pooling.double(pool);\r\n _maxLength *= 2;\r\n }\r\n if (_release) {\r\n _release(element);\r\n }\r\n pool[_length] = element;\r\n _length += 1;\r\n }\r\n\r\n return ob;\r\n };\r\n}());\r\n\r\n/* global createSizedArray */\r\n/* exported pooling */\r\n\r\nvar pooling = (function () {\r\n function double(arr) {\r\n return arr.concat(createSizedArray(arr.length));\r\n }\r\n\r\n return {\r\n double: double,\r\n };\r\n}());\r\n\r\n/* global createTypedArray, poolFactory */\r\n/* exported pointPool */\r\n\r\nvar pointPool = (function () {\r\n function create() {\r\n return createTypedArray('float32', 2);\r\n }\r\n return poolFactory(8, create);\r\n}());\r\n\r\n/* global ShapePath, pointPool, poolFactory */\r\n/* exported shapePool */\r\n\r\nvar shapePool = (function () {\r\n function create() {\r\n return new ShapePath();\r\n }\r\n\r\n function release(shapePath) {\r\n var len = shapePath._length;\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n pointPool.release(shapePath.v[i]);\r\n pointPool.release(shapePath.i[i]);\r\n pointPool.release(shapePath.o[i]);\r\n shapePath.v[i] = null;\r\n shapePath.i[i] = null;\r\n shapePath.o[i] = null;\r\n }\r\n shapePath._length = 0;\r\n shapePath.c = false;\r\n }\r\n\r\n function clone(shape) {\r\n var cloned = factory.newElement();\r\n var i;\r\n var len = shape._length === undefined ? shape.v.length : shape._length;\r\n cloned.setLength(len);\r\n cloned.c = shape.c;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\r\n }\r\n return cloned;\r\n }\r\n\r\n var factory = poolFactory(4, create, release);\r\n factory.clone = clone;\r\n\r\n return factory;\r\n}());\r\n\r\n/* global createSizedArray, ShapeCollection, shapePool, pooling */\r\n/* exported shapeCollectionPool */\r\n\r\nvar shapeCollectionPool = (function () {\r\n var ob = {\r\n newShapeCollection: newShapeCollection,\r\n release: release,\r\n };\r\n\r\n var _length = 0;\r\n var _maxLength = 4;\r\n var pool = createSizedArray(_maxLength);\r\n\r\n function newShapeCollection() {\r\n var shapeCollection;\r\n if (_length) {\r\n _length -= 1;\r\n shapeCollection = pool[_length];\r\n } else {\r\n shapeCollection = new ShapeCollection();\r\n }\r\n return shapeCollection;\r\n }\r\n\r\n function release(shapeCollection) {\r\n var i;\r\n var len = shapeCollection._length;\r\n for (i = 0; i < len; i += 1) {\r\n shapePool.release(shapeCollection.shapes[i]);\r\n }\r\n shapeCollection._length = 0;\r\n\r\n if (_length === _maxLength) {\r\n pool = pooling.double(pool);\r\n _maxLength *= 2;\r\n }\r\n pool[_length] = shapeCollection;\r\n _length += 1;\r\n }\r\n\r\n return ob;\r\n}());\r\n\r\n/* global poolFactory, bezierLengthPool */\r\n/* exported segmentsLengthPool */\r\n\r\nvar segmentsLengthPool = (function () {\r\n function create() {\r\n return {\r\n lengths: [],\r\n totalLength: 0,\r\n };\r\n }\r\n\r\n function release(element) {\r\n var i;\r\n var len = element.lengths.length;\r\n for (i = 0; i < len; i += 1) {\r\n bezierLengthPool.release(element.lengths[i]);\r\n }\r\n element.lengths.length = 0;\r\n }\r\n\r\n return poolFactory(8, create, release);\r\n}());\r\n\r\n/* global createTypedArray, defaultCurveSegments, poolFactory */\r\n/* exported bezierLengthPool */\r\n\r\nvar bezierLengthPool = (function () {\r\n function create() {\r\n return {\r\n addedLength: 0,\r\n percents: createTypedArray('float32', defaultCurveSegments),\r\n lengths: createTypedArray('float32', defaultCurveSegments),\r\n };\r\n }\r\n return poolFactory(8, create);\r\n}());\r\n\r\n/* exported markerParser */\r\n\r\nvar markerParser = (\r\n\r\n function () {\r\n function parsePayloadLines(payload) {\r\n var lines = payload.split('\\r\\n');\r\n var keys = {};\r\n var line;\r\n var keysCount = 0;\r\n for (var i = 0; i < lines.length; i += 1) {\r\n line = lines[i].split(':');\r\n if (line.length === 2) {\r\n keys[line[0]] = line[1].trim();\r\n keysCount += 1;\r\n }\r\n }\r\n if (keysCount === 0) {\r\n throw new Error();\r\n }\r\n return keys;\r\n }\r\n\r\n return function (_markers) {\r\n var markers = [];\r\n for (var i = 0; i < _markers.length; i += 1) {\r\n var _marker = _markers[i];\r\n var markerData = {\r\n time: _marker.tm,\r\n duration: _marker.dr,\r\n };\r\n try {\r\n markerData.payload = JSON.parse(_markers[i].cm);\r\n } catch (_) {\r\n try {\r\n markerData.payload = parsePayloadLines(_markers[i].cm);\r\n } catch (__) {\r\n markerData.payload = {\r\n name: _markers[i],\r\n };\r\n }\r\n }\r\n markers.push(markerData);\r\n }\r\n return markers;\r\n };\r\n }());\r\n\r\n/* global AudioElement, FootageElement, FontManager */\r\n\r\nfunction BaseRenderer() {}\r\nBaseRenderer.prototype.checkLayers = function (num) {\r\n var i;\r\n var len = this.layers.length;\r\n var data;\r\n this.completeLayers = true;\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (!this.elements[i]) {\r\n data = this.layers[i];\r\n if (data.ip - data.st <= (num - this.layers[i].st) && data.op - data.st > (num - this.layers[i].st)) {\r\n this.buildItem(i);\r\n }\r\n }\r\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\r\n }\r\n this.checkPendingElements();\r\n};\r\n\r\nBaseRenderer.prototype.createItem = function (layer) {\r\n switch (layer.ty) {\r\n case 2:\r\n return this.createImage(layer);\r\n case 0:\r\n return this.createComp(layer);\r\n case 1:\r\n return this.createSolid(layer);\r\n case 3:\r\n return this.createNull(layer);\r\n case 4:\r\n return this.createShape(layer);\r\n case 5:\r\n return this.createText(layer);\r\n case 6:\r\n return this.createAudio(layer);\r\n case 13:\r\n return this.createCamera(layer);\r\n case 15:\r\n return this.createFootage(layer);\r\n default:\r\n return this.createNull(layer);\r\n }\r\n};\r\n\r\nBaseRenderer.prototype.createCamera = function () {\r\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\r\n};\r\n\r\nBaseRenderer.prototype.createAudio = function (data) {\r\n return new AudioElement(data, this.globalData, this);\r\n};\r\n\r\nBaseRenderer.prototype.createFootage = function (data) {\r\n return new FootageElement(data, this.globalData, this);\r\n};\r\n\r\nBaseRenderer.prototype.buildAllItems = function () {\r\n var i;\r\n var len = this.layers.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.buildItem(i);\r\n }\r\n this.checkPendingElements();\r\n};\r\n\r\nBaseRenderer.prototype.includeLayers = function (newLayers) {\r\n this.completeLayers = false;\r\n var i;\r\n var len = newLayers.length;\r\n var j;\r\n var jLen = this.layers.length;\r\n for (i = 0; i < len; i += 1) {\r\n j = 0;\r\n while (j < jLen) {\r\n if (this.layers[j].id === newLayers[i].id) {\r\n this.layers[j] = newLayers[i];\r\n break;\r\n }\r\n j += 1;\r\n }\r\n }\r\n};\r\n\r\nBaseRenderer.prototype.setProjectInterface = function (pInterface) {\r\n this.globalData.projectInterface = pInterface;\r\n};\r\n\r\nBaseRenderer.prototype.initItems = function () {\r\n if (!this.globalData.progressiveLoad) {\r\n this.buildAllItems();\r\n }\r\n};\r\nBaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\r\n var elements = this.elements;\r\n var layers = this.layers;\r\n var i = 0;\r\n var len = layers.length;\r\n while (i < len) {\r\n if (layers[i].ind == parentName) { // eslint-disable-line eqeqeq\r\n if (!elements[i] || elements[i] === true) {\r\n this.buildItem(i);\r\n this.addPendingElement(element);\r\n } else {\r\n hierarchy.push(elements[i]);\r\n elements[i].setAsParent();\r\n if (layers[i].parent !== undefined) {\r\n this.buildElementParenting(element, layers[i].parent, hierarchy);\r\n } else {\r\n element.setHierarchy(hierarchy);\r\n }\r\n }\r\n }\r\n i += 1;\r\n }\r\n};\r\n\r\nBaseRenderer.prototype.addPendingElement = function (element) {\r\n this.pendingElements.push(element);\r\n};\r\n\r\nBaseRenderer.prototype.searchExtraCompositions = function (assets) {\r\n var i;\r\n var len = assets.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (assets[i].xt) {\r\n var comp = this.createComp(assets[i]);\r\n comp.initExpressions();\r\n this.globalData.projectInterface.registerComposition(comp);\r\n }\r\n }\r\n};\r\n\r\nBaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\r\n this.globalData.fontManager = new FontManager();\r\n this.globalData.fontManager.addChars(animData.chars);\r\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\r\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\r\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\r\n this.globalData.imageLoader = this.animationItem.imagePreloader;\r\n this.globalData.audioController = this.animationItem.audioController;\r\n this.globalData.frameId = 0;\r\n this.globalData.frameRate = animData.fr;\r\n this.globalData.nm = animData.nm;\r\n this.globalData.compSize = {\r\n w: animData.w,\r\n h: animData.h,\r\n };\r\n};\r\n\r\n/* global createElementID, extendPrototype, BaseRenderer, NullElement, SVGShapeElement, SVGTextLottieElement,\r\nIImageElement, SVGCompElement, ISolidElement, createNS, locationHref, createSizedArray, expressionsPlugin */\r\n\r\nfunction SVGRenderer(animationItem, config) {\r\n this.animationItem = animationItem;\r\n this.layers = null;\r\n this.renderedFrame = -1;\r\n this.svgElement = createNS('svg');\r\n var ariaLabel = '';\r\n if (config && config.title) {\r\n var titleElement = createNS('title');\r\n var titleId = createElementID();\r\n titleElement.setAttribute('id', titleId);\r\n titleElement.textContent = config.title;\r\n this.svgElement.appendChild(titleElement);\r\n ariaLabel += titleId;\r\n }\r\n if (config && config.description) {\r\n var descElement = createNS('desc');\r\n var descId = createElementID();\r\n descElement.setAttribute('id', descId);\r\n descElement.textContent = config.description;\r\n this.svgElement.appendChild(descElement);\r\n ariaLabel += ' ' + descId;\r\n }\r\n if (ariaLabel) {\r\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\r\n }\r\n var defs = createNS('defs');\r\n this.svgElement.appendChild(defs);\r\n var maskElement = createNS('g');\r\n this.svgElement.appendChild(maskElement);\r\n this.layerElement = maskElement;\r\n this.renderConfig = {\r\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\r\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\r\n progressiveLoad: (config && config.progressiveLoad) || false,\r\n hideOnTransparent: !((config && config.hideOnTransparent === false)),\r\n viewBoxOnly: (config && config.viewBoxOnly) || false,\r\n viewBoxSize: (config && config.viewBoxSize) || false,\r\n className: (config && config.className) || '',\r\n id: (config && config.id) || '',\r\n focusable: config && config.focusable,\r\n filterSize: {\r\n width: (config && config.filterSize && config.filterSize.width) || '100%',\r\n height: (config && config.filterSize && config.filterSize.height) || '100%',\r\n x: (config && config.filterSize && config.filterSize.x) || '0%',\r\n y: (config && config.filterSize && config.filterSize.y) || '0%',\r\n },\r\n };\r\n\r\n this.globalData = {\r\n _mdf: false,\r\n frameNum: -1,\r\n defs: defs,\r\n renderConfig: this.renderConfig,\r\n };\r\n this.elements = [];\r\n this.pendingElements = [];\r\n this.destroyed = false;\r\n this.rendererType = 'svg';\r\n}\r\n\r\nextendPrototype([BaseRenderer], SVGRenderer);\r\n\r\nSVGRenderer.prototype.createNull = function (data) {\r\n return new NullElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createShape = function (data) {\r\n return new SVGShapeElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createText = function (data) {\r\n return new SVGTextLottieElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createImage = function (data) {\r\n return new IImageElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createComp = function (data) {\r\n return new SVGCompElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.createSolid = function (data) {\r\n return new ISolidElement(data, this.globalData, this);\r\n};\r\n\r\nSVGRenderer.prototype.configAnimation = function (animData) {\r\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n if (this.renderConfig.viewBoxSize) {\r\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\r\n } else {\r\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\r\n }\r\n\r\n if (!this.renderConfig.viewBoxOnly) {\r\n this.svgElement.setAttribute('width', animData.w);\r\n this.svgElement.setAttribute('height', animData.h);\r\n this.svgElement.style.width = '100%';\r\n this.svgElement.style.height = '100%';\r\n this.svgElement.style.transform = 'translate3d(0,0,0)';\r\n }\r\n if (this.renderConfig.className) {\r\n this.svgElement.setAttribute('class', this.renderConfig.className);\r\n }\r\n if (this.renderConfig.id) {\r\n this.svgElement.setAttribute('id', this.renderConfig.id);\r\n }\r\n if (this.renderConfig.focusable !== undefined) {\r\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\r\n }\r\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\r\n // this.layerElement.style.transform = 'translate3d(0,0,0)';\r\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\r\n this.animationItem.wrapper.appendChild(this.svgElement);\r\n // Mask animation\r\n var defs = this.globalData.defs;\r\n\r\n this.setupGlobalData(animData, defs);\r\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\r\n this.data = animData;\r\n\r\n var maskElement = createNS('clipPath');\r\n var rect = createNS('rect');\r\n rect.setAttribute('width', animData.w);\r\n rect.setAttribute('height', animData.h);\r\n rect.setAttribute('x', 0);\r\n rect.setAttribute('y', 0);\r\n var maskId = createElementID();\r\n maskElement.setAttribute('id', maskId);\r\n maskElement.appendChild(rect);\r\n this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + maskId + ')');\r\n\r\n defs.appendChild(maskElement);\r\n this.layers = animData.layers;\r\n this.elements = createSizedArray(animData.layers.length);\r\n};\r\n\r\nSVGRenderer.prototype.destroy = function () {\r\n if (this.animationItem.wrapper) {\r\n this.animationItem.wrapper.innerText = '';\r\n }\r\n this.layerElement = null;\r\n this.globalData.defs = null;\r\n var i;\r\n var len = this.layers ? this.layers.length : 0;\r\n for (i = 0; i < len; i += 1) {\r\n if (this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n this.elements.length = 0;\r\n this.destroyed = true;\r\n this.animationItem = null;\r\n};\r\n\r\nSVGRenderer.prototype.updateContainerSize = function () {\r\n};\r\n\r\nSVGRenderer.prototype.buildItem = function (pos) {\r\n var elements = this.elements;\r\n if (elements[pos] || this.layers[pos].ty === 99) {\r\n return;\r\n }\r\n elements[pos] = true;\r\n var element = this.createItem(this.layers[pos]);\r\n\r\n elements[pos] = element;\r\n if (expressionsPlugin) {\r\n if (this.layers[pos].ty === 0) {\r\n this.globalData.projectInterface.registerComposition(element);\r\n }\r\n element.initExpressions();\r\n }\r\n this.appendElementInPos(element, pos);\r\n if (this.layers[pos].tt) {\r\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\r\n this.buildItem(pos - 1);\r\n this.addPendingElement(element);\r\n } else {\r\n element.setMatte(elements[pos - 1].layerId);\r\n }\r\n }\r\n};\r\n\r\nSVGRenderer.prototype.checkPendingElements = function () {\r\n while (this.pendingElements.length) {\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n if (element.data.tt) {\r\n var i = 0;\r\n var len = this.elements.length;\r\n while (i < len) {\r\n if (this.elements[i] === element) {\r\n element.setMatte(this.elements[i - 1].layerId);\r\n break;\r\n }\r\n i += 1;\r\n }\r\n }\r\n }\r\n};\r\n\r\nSVGRenderer.prototype.renderFrame = function (num) {\r\n if (this.renderedFrame === num || this.destroyed) {\r\n return;\r\n }\r\n if (num === null) {\r\n num = this.renderedFrame;\r\n } else {\r\n this.renderedFrame = num;\r\n }\r\n // console.log('-------');\r\n // console.log('FRAME ',num);\r\n this.globalData.frameNum = num;\r\n this.globalData.frameId += 1;\r\n this.globalData.projectInterface.currentFrame = num;\r\n this.globalData._mdf = false;\r\n var i;\r\n var len = this.layers.length;\r\n if (!this.completeLayers) {\r\n this.checkLayers(num);\r\n }\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].prepareFrame(num - this.layers[i].st);\r\n }\r\n }\r\n if (this.globalData._mdf) {\r\n for (i = 0; i < len; i += 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n }\r\n};\r\n\r\nSVGRenderer.prototype.appendElementInPos = function (element, pos) {\r\n var newElement = element.getBaseElement();\r\n if (!newElement) {\r\n return;\r\n }\r\n var i = 0;\r\n var nextElement;\r\n while (i < pos) {\r\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\r\n nextElement = this.elements[i].getBaseElement();\r\n }\r\n i += 1;\r\n }\r\n if (nextElement) {\r\n this.layerElement.insertBefore(newElement, nextElement);\r\n } else {\r\n this.layerElement.appendChild(newElement);\r\n }\r\n};\r\n\r\nSVGRenderer.prototype.hide = function () {\r\n this.layerElement.style.display = 'none';\r\n};\r\n\r\nSVGRenderer.prototype.show = function () {\r\n this.layerElement.style.display = 'block';\r\n};\r\n\r\n/* global CVContextData, Matrix, extendPrototype, BaseRenderer, CVShapeElement, CVTextElement,\r\nCVImageElement, CVCompElement, CVSolidElement, SVGRenderer, createTag, createSizedArray */\r\n\r\nfunction CanvasRenderer(animationItem, config) {\r\n this.animationItem = animationItem;\r\n this.renderConfig = {\r\n clearCanvas: (config && config.clearCanvas !== undefined) ? config.clearCanvas : true,\r\n context: (config && config.context) || null,\r\n progressiveLoad: (config && config.progressiveLoad) || false,\r\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\r\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\r\n className: (config && config.className) || '',\r\n id: (config && config.id) || '',\r\n };\r\n this.renderConfig.dpr = (config && config.dpr) || 1;\r\n if (this.animationItem.wrapper) {\r\n this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1;\r\n }\r\n this.renderedFrame = -1;\r\n this.globalData = {\r\n frameNum: -1,\r\n _mdf: false,\r\n renderConfig: this.renderConfig,\r\n currentGlobalAlpha: -1,\r\n };\r\n this.contextData = new CVContextData();\r\n this.elements = [];\r\n this.pendingElements = [];\r\n this.transformMat = new Matrix();\r\n this.completeLayers = false;\r\n this.rendererType = 'canvas';\r\n}\r\nextendPrototype([BaseRenderer], CanvasRenderer);\r\n\r\nCanvasRenderer.prototype.createShape = function (data) {\r\n return new CVShapeElement(data, this.globalData, this);\r\n};\r\n\r\nCanvasRenderer.prototype.createText = function (data) {\r\n return new CVTextElement(data, this.globalData, this);\r\n};\r\n\r\nCanvasRenderer.prototype.createImage = function (data) {\r\n return new CVImageElement(data, this.globalData, this);\r\n};\r\n\r\nCanvasRenderer.prototype.createComp = function (data) {\r\n return new CVCompElement(data, this.globalData, this);\r\n};\r\n\r\nCanvasRenderer.prototype.createSolid = function (data) {\r\n return new CVSolidElement(data, this.globalData, this);\r\n};\r\n\r\nCanvasRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\r\n\r\nCanvasRenderer.prototype.ctxTransform = function (props) {\r\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\r\n return;\r\n }\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\r\n return;\r\n }\r\n this.transformMat.cloneFromProps(props);\r\n var cProps = this.contextData.cTr.props;\r\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]);\r\n // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\r\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\r\n var trProps = this.contextData.cTr.props;\r\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\r\n};\r\n\r\nCanvasRenderer.prototype.ctxOpacity = function (op) {\r\n /* if(op === 1){\r\n return;\r\n } */\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\r\n this.globalData.currentGlobalAlpha = this.contextData.cO;\r\n return;\r\n }\r\n this.contextData.cO *= op < 0 ? 0 : op;\r\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\r\n this.canvasContext.globalAlpha = this.contextData.cO;\r\n this.globalData.currentGlobalAlpha = this.contextData.cO;\r\n }\r\n};\r\n\r\nCanvasRenderer.prototype.reset = function () {\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.restore();\r\n return;\r\n }\r\n this.contextData.reset();\r\n};\r\n\r\nCanvasRenderer.prototype.save = function (actionFlag) {\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.save();\r\n return;\r\n }\r\n if (actionFlag) {\r\n this.canvasContext.save();\r\n }\r\n var props = this.contextData.cTr.props;\r\n if (this.contextData._length <= this.contextData.cArrPos) {\r\n this.contextData.duplicate();\r\n }\r\n var i;\r\n var arr = this.contextData.saved[this.contextData.cArrPos];\r\n for (i = 0; i < 16; i += 1) {\r\n arr[i] = props[i];\r\n }\r\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\r\n this.contextData.cArrPos += 1;\r\n};\r\n\r\nCanvasRenderer.prototype.restore = function (actionFlag) {\r\n if (!this.renderConfig.clearCanvas) {\r\n this.canvasContext.restore();\r\n return;\r\n }\r\n if (actionFlag) {\r\n this.canvasContext.restore();\r\n this.globalData.blendMode = 'source-over';\r\n }\r\n this.contextData.cArrPos -= 1;\r\n var popped = this.contextData.saved[this.contextData.cArrPos];\r\n var i;\r\n var arr = this.contextData.cTr.props;\r\n for (i = 0; i < 16; i += 1) {\r\n arr[i] = popped[i];\r\n }\r\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\r\n popped = this.contextData.savedOp[this.contextData.cArrPos];\r\n this.contextData.cO = popped;\r\n if (this.globalData.currentGlobalAlpha !== popped) {\r\n this.canvasContext.globalAlpha = popped;\r\n this.globalData.currentGlobalAlpha = popped;\r\n }\r\n};\r\n\r\nCanvasRenderer.prototype.configAnimation = function (animData) {\r\n if (this.animationItem.wrapper) {\r\n this.animationItem.container = createTag('canvas');\r\n var containerStyle = this.animationItem.container.style;\r\n containerStyle.width = '100%';\r\n containerStyle.height = '100%';\r\n var origin = '0px 0px 0px';\r\n containerStyle.transformOrigin = origin;\r\n containerStyle.mozTransformOrigin = origin;\r\n containerStyle.webkitTransformOrigin = origin;\r\n containerStyle['-webkit-transform'] = origin;\r\n this.animationItem.wrapper.appendChild(this.animationItem.container);\r\n this.canvasContext = this.animationItem.container.getContext('2d');\r\n if (this.renderConfig.className) {\r\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\r\n }\r\n if (this.renderConfig.id) {\r\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\r\n }\r\n } else {\r\n this.canvasContext = this.renderConfig.context;\r\n }\r\n this.data = animData;\r\n this.layers = animData.layers;\r\n this.transformCanvas = {\r\n w: animData.w,\r\n h: animData.h,\r\n sx: 0,\r\n sy: 0,\r\n tx: 0,\r\n ty: 0,\r\n };\r\n this.setupGlobalData(animData, document.body);\r\n this.globalData.canvasContext = this.canvasContext;\r\n this.globalData.renderer = this;\r\n this.globalData.isDashed = false;\r\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\r\n this.globalData.transformCanvas = this.transformCanvas;\r\n this.elements = createSizedArray(animData.layers.length);\r\n\r\n this.updateContainerSize();\r\n};\r\n\r\nCanvasRenderer.prototype.updateContainerSize = function () {\r\n this.reset();\r\n var elementWidth;\r\n var elementHeight;\r\n if (this.animationItem.wrapper && this.animationItem.container) {\r\n elementWidth = this.animationItem.wrapper.offsetWidth;\r\n elementHeight = this.animationItem.wrapper.offsetHeight;\r\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\r\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\r\n } else {\r\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\r\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\r\n }\r\n var elementRel;\r\n var animationRel;\r\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\r\n var par = this.renderConfig.preserveAspectRatio.split(' ');\r\n var fillType = par[1] || 'meet';\r\n var pos = par[0] || 'xMidYMid';\r\n var xPos = pos.substr(0, 4);\r\n var yPos = pos.substr(4);\r\n elementRel = elementWidth / elementHeight;\r\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\r\n if ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice')) {\r\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\r\n } else {\r\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\r\n }\r\n\r\n if (xPos === 'xMid' && ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))) {\r\n this.transformCanvas.tx = ((elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2) * this.renderConfig.dpr;\r\n } else if (xPos === 'xMax' && ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))) {\r\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\r\n } else {\r\n this.transformCanvas.tx = 0;\r\n }\r\n if (yPos === 'YMid' && ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))) {\r\n this.transformCanvas.ty = ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2) * this.renderConfig.dpr;\r\n } else if (yPos === 'YMax' && ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))) {\r\n this.transformCanvas.ty = ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w))) * this.renderConfig.dpr;\r\n } else {\r\n this.transformCanvas.ty = 0;\r\n }\r\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\r\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\r\n this.transformCanvas.tx = 0;\r\n this.transformCanvas.ty = 0;\r\n } else {\r\n this.transformCanvas.sx = this.renderConfig.dpr;\r\n this.transformCanvas.sy = this.renderConfig.dpr;\r\n this.transformCanvas.tx = 0;\r\n this.transformCanvas.ty = 0;\r\n }\r\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\r\n /* var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\r\n if (this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n this.elements.length = 0;\r\n this.globalData.canvasContext = null;\r\n this.animationItem.container = null;\r\n this.destroyed = true;\r\n};\r\n\r\nCanvasRenderer.prototype.renderFrame = function (num, forceRender) {\r\n if ((this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender) || this.destroyed || num === -1) {\r\n return;\r\n }\r\n this.renderedFrame = num;\r\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\r\n this.globalData.frameId += 1;\r\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\r\n this.globalData.projectInterface.currentFrame = num;\r\n\r\n // console.log('--------');\r\n // console.log('NEW: ',num);\r\n var i;\r\n var len = this.layers.length;\r\n if (!this.completeLayers) {\r\n this.checkLayers(num);\r\n }\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].prepareFrame(num - this.layers[i].st);\r\n }\r\n }\r\n if (this.globalData._mdf) {\r\n if (this.renderConfig.clearCanvas === true) {\r\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\r\n } else {\r\n this.save();\r\n }\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n if (this.renderConfig.clearCanvas !== true) {\r\n this.restore();\r\n }\r\n }\r\n};\r\n\r\nCanvasRenderer.prototype.buildItem = function (pos) {\r\n var elements = this.elements;\r\n if (elements[pos] || this.layers[pos].ty === 99) {\r\n return;\r\n }\r\n var element = this.createItem(this.layers[pos], this, this.globalData);\r\n elements[pos] = element;\r\n element.initExpressions();\r\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\r\n};\r\n\r\nCanvasRenderer.prototype.checkPendingElements = function () {\r\n while (this.pendingElements.length) {\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n }\r\n};\r\n\r\nCanvasRenderer.prototype.hide = function () {\r\n this.animationItem.container.style.display = 'none';\r\n};\r\n\r\nCanvasRenderer.prototype.show = function () {\r\n this.animationItem.container.style.display = 'block';\r\n};\r\n\r\n/* global extendPrototype, BaseRenderer, SVGRenderer, SVGShapeElement, HShapeElement, SVGTextLottieElement,\r\nHTextElement, HCameraElement, IImageElement, HImageElement, SVGCompElement, HCompElement, ISolidElement,\r\nHSolidElement, styleDiv, createTag, createNS */\r\n\r\nfunction HybridRenderer(animationItem, config) {\r\n this.animationItem = animationItem;\r\n this.layers = null;\r\n this.renderedFrame = -1;\r\n this.renderConfig = {\r\n className: (config && config.className) || '',\r\n imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\r\n hideOnTransparent: !(config && config.hideOnTransparent === false),\r\n filterSize: {\r\n width: (config && config.filterSize && config.filterSize.width) || '400%',\r\n height: (config && config.filterSize && config.filterSize.height) || '400%',\r\n x: (config && config.filterSize && config.filterSize.x) || '-100%',\r\n y: (config && config.filterSize && config.filterSize.y) || '-100%',\r\n },\r\n };\r\n this.globalData = {\r\n _mdf: false,\r\n frameNum: -1,\r\n renderConfig: this.renderConfig,\r\n };\r\n this.pendingElements = [];\r\n this.elements = [];\r\n this.threeDElements = [];\r\n this.destroyed = false;\r\n this.camera = null;\r\n this.supports3d = true;\r\n this.rendererType = 'html';\r\n}\r\n\r\nextendPrototype([BaseRenderer], HybridRenderer);\r\n\r\nHybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem;\r\n\r\nHybridRenderer.prototype.checkPendingElements = function () {\r\n while (this.pendingElements.length) {\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.appendElementInPos = function (element, pos) {\r\n var newDOMElement = element.getBaseElement();\r\n if (!newDOMElement) {\r\n return;\r\n }\r\n var layer = this.layers[pos];\r\n if (!layer.ddd || !this.supports3d) {\r\n if (this.threeDElements) {\r\n this.addTo3dContainer(newDOMElement, pos);\r\n } else {\r\n var i = 0;\r\n var nextDOMElement;\r\n var nextLayer;\r\n var tmpDOMElement;\r\n while (i < pos) {\r\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\r\n nextLayer = this.elements[i];\r\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\r\n nextDOMElement = tmpDOMElement || nextDOMElement;\r\n }\r\n i += 1;\r\n }\r\n if (nextDOMElement) {\r\n if (!layer.ddd || !this.supports3d) {\r\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\r\n }\r\n } else if (!layer.ddd || !this.supports3d) {\r\n this.layerElement.appendChild(newDOMElement);\r\n }\r\n }\r\n } else {\r\n this.addTo3dContainer(newDOMElement, pos);\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.createShape = function (data) {\r\n if (!this.supports3d) {\r\n return new SVGShapeElement(data, this.globalData, this);\r\n }\r\n return new HShapeElement(data, this.globalData, this);\r\n};\r\n\r\nHybridRenderer.prototype.createText = function (data) {\r\n if (!this.supports3d) {\r\n return new SVGTextLottieElement(data, this.globalData, this);\r\n }\r\n return new HTextElement(data, this.globalData, this);\r\n};\r\n\r\nHybridRenderer.prototype.createCamera = function (data) {\r\n this.camera = new HCameraElement(data, this.globalData, this);\r\n return this.camera;\r\n};\r\n\r\nHybridRenderer.prototype.createImage = function (data) {\r\n if (!this.supports3d) {\r\n return new IImageElement(data, this.globalData, this);\r\n }\r\n return new HImageElement(data, this.globalData, this);\r\n};\r\n\r\nHybridRenderer.prototype.createComp = function (data) {\r\n if (!this.supports3d) {\r\n return new SVGCompElement(data, this.globalData, this);\r\n }\r\n return new HCompElement(data, this.globalData, this);\r\n};\r\n\r\nHybridRenderer.prototype.createSolid = function (data) {\r\n if (!this.supports3d) {\r\n return new ISolidElement(data, this.globalData, this);\r\n }\r\n return new HSolidElement(data, this.globalData, this);\r\n};\r\n\r\nHybridRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\r\n\r\nHybridRenderer.prototype.getThreeDContainerByPos = function (pos) {\r\n var i = 0;\r\n var len = this.threeDElements.length;\r\n while (i < len) {\r\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\r\n return this.threeDElements[i].perspectiveElem;\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n};\r\n\r\nHybridRenderer.prototype.createThreeDContainer = function (pos, type) {\r\n var perspectiveElem = createTag('div');\r\n var style;\r\n var containerStyle;\r\n styleDiv(perspectiveElem);\r\n var container = createTag('div');\r\n styleDiv(container);\r\n if (type === '3d') {\r\n style = perspectiveElem.style;\r\n style.width = this.globalData.compSize.w + 'px';\r\n style.height = this.globalData.compSize.h + 'px';\r\n var center = '50% 50%';\r\n style.webkitTransformOrigin = center;\r\n style.mozTransformOrigin = center;\r\n style.transformOrigin = center;\r\n containerStyle = container.style;\r\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\r\n containerStyle.transform = matrix;\r\n containerStyle.webkitTransform = matrix;\r\n }\r\n\r\n perspectiveElem.appendChild(container);\r\n // this.resizerElem.appendChild(perspectiveElem);\r\n var threeDContainerData = {\r\n container: container,\r\n perspectiveElem: perspectiveElem,\r\n startPos: pos,\r\n endPos: pos,\r\n type: type,\r\n };\r\n this.threeDElements.push(threeDContainerData);\r\n return threeDContainerData;\r\n};\r\n\r\nHybridRenderer.prototype.build3dContainers = function () {\r\n var i;\r\n var len = this.layers.length;\r\n var lastThreeDContainerData;\r\n var currentContainer = '';\r\n for (i = 0; i < len; i += 1) {\r\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\r\n if (currentContainer !== '3d') {\r\n currentContainer = '3d';\r\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\r\n }\r\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\r\n } else {\r\n if (currentContainer !== '2d') {\r\n currentContainer = '2d';\r\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\r\n }\r\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\r\n }\r\n }\r\n len = this.threeDElements.length;\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.addTo3dContainer = function (elem, pos) {\r\n var i = 0;\r\n var len = this.threeDElements.length;\r\n while (i < len) {\r\n if (pos <= this.threeDElements[i].endPos) {\r\n var j = this.threeDElements[i].startPos;\r\n var nextElement;\r\n while (j < pos) {\r\n if (this.elements[j] && this.elements[j].getBaseElement) {\r\n nextElement = this.elements[j].getBaseElement();\r\n }\r\n j += 1;\r\n }\r\n if (nextElement) {\r\n this.threeDElements[i].container.insertBefore(elem, nextElement);\r\n } else {\r\n this.threeDElements[i].container.appendChild(elem);\r\n }\r\n break;\r\n }\r\n i += 1;\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.configAnimation = function (animData) {\r\n var resizerElem = createTag('div');\r\n var wrapper = this.animationItem.wrapper;\r\n var style = resizerElem.style;\r\n style.width = animData.w + 'px';\r\n style.height = animData.h + 'px';\r\n this.resizerElem = resizerElem;\r\n styleDiv(resizerElem);\r\n style.transformStyle = 'flat';\r\n style.mozTransformStyle = 'flat';\r\n style.webkitTransformStyle = 'flat';\r\n if (this.renderConfig.className) {\r\n resizerElem.setAttribute('class', this.renderConfig.className);\r\n }\r\n wrapper.appendChild(resizerElem);\r\n\r\n style.overflow = 'hidden';\r\n var svg = createNS('svg');\r\n svg.setAttribute('width', '1');\r\n svg.setAttribute('height', '1');\r\n styleDiv(svg);\r\n this.resizerElem.appendChild(svg);\r\n var defs = createNS('defs');\r\n svg.appendChild(defs);\r\n this.data = animData;\r\n // Mask animation\r\n this.setupGlobalData(animData, svg);\r\n this.globalData.defs = defs;\r\n this.layers = animData.layers;\r\n this.layerElement = this.resizerElem;\r\n this.build3dContainers();\r\n this.updateContainerSize();\r\n};\r\n\r\nHybridRenderer.prototype.destroy = function () {\r\n if (this.animationItem.wrapper) {\r\n this.animationItem.wrapper.innerText = '';\r\n }\r\n this.animationItem.container = null;\r\n this.globalData.defs = null;\r\n var i;\r\n var len = this.layers ? this.layers.length : 0;\r\n for (i = 0; i < len; i += 1) {\r\n this.elements[i].destroy();\r\n }\r\n this.elements.length = 0;\r\n this.destroyed = true;\r\n this.animationItem = null;\r\n};\r\n\r\nHybridRenderer.prototype.updateContainerSize = function () {\r\n var elementWidth = this.animationItem.wrapper.offsetWidth;\r\n var elementHeight = this.animationItem.wrapper.offsetHeight;\r\n var elementRel = elementWidth / elementHeight;\r\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\r\n var sx;\r\n var sy;\r\n var tx;\r\n var ty;\r\n if (animationRel > elementRel) {\r\n sx = elementWidth / (this.globalData.compSize.w);\r\n sy = elementWidth / (this.globalData.compSize.w);\r\n tx = 0;\r\n ty = ((elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2);\r\n } else {\r\n sx = elementHeight / (this.globalData.compSize.h);\r\n sy = elementHeight / (this.globalData.compSize.h);\r\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\r\n ty = 0;\r\n }\r\n var style = this.resizerElem.style;\r\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\r\n style.transform = style.webkitTransform;\r\n};\r\n\r\nHybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\r\n\r\nHybridRenderer.prototype.hide = function () {\r\n this.resizerElem.style.display = 'none';\r\n};\r\n\r\nHybridRenderer.prototype.show = function () {\r\n this.resizerElem.style.display = 'block';\r\n};\r\n\r\nHybridRenderer.prototype.initItems = function () {\r\n this.buildAllItems();\r\n if (this.camera) {\r\n this.camera.setup();\r\n } else {\r\n var cWidth = this.globalData.compSize.w;\r\n var cHeight = this.globalData.compSize.h;\r\n var i;\r\n var len = this.threeDElements.length;\r\n for (i = 0; i < len; i += 1) {\r\n var style = this.threeDElements[i].perspectiveElem.style;\r\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\r\n style.perspective = style.webkitPerspective;\r\n }\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.searchExtraCompositions = function (assets) {\r\n var i;\r\n var len = assets.length;\r\n var floatingContainer = createTag('div');\r\n for (i = 0; i < len; i += 1) {\r\n if (assets[i].xt) {\r\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\r\n comp.initExpressions();\r\n this.globalData.projectInterface.registerComposition(comp);\r\n }\r\n }\r\n};\r\n\r\n/* global createSizedArray, createElementID, PropertyFactory, ShapePropertyFactory, createNS, locationHref */\r\n\r\nfunction MaskElement(data, element, globalData) {\r\n this.data = data;\r\n this.element = element;\r\n this.globalData = globalData;\r\n this.storedData = [];\r\n this.masksProperties = this.data.masksProperties || [];\r\n this.maskElement = null;\r\n var defs = this.globalData.defs;\r\n var i;\r\n var len = this.masksProperties ? this.masksProperties.length : 0;\r\n this.viewData = createSizedArray(len);\r\n this.solidPath = '';\r\n\r\n var path;\r\n var properties = this.masksProperties;\r\n var count = 0;\r\n var currentMasks = [];\r\n var j;\r\n var jLen;\r\n var layerId = createElementID();\r\n var rect;\r\n var expansor;\r\n var feMorph;\r\n var x;\r\n var maskType = 'clipPath';\r\n var maskRef = 'clip-path';\r\n for (i = 0; i < len; i += 1) {\r\n if ((properties[i].mode !== 'a' && properties[i].mode !== 'n') || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\r\n maskType = 'mask';\r\n maskRef = 'mask';\r\n }\r\n\r\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\r\n rect = createNS('rect');\r\n rect.setAttribute('fill', '#ffffff');\r\n rect.setAttribute('width', this.element.comp.data.w || 0);\r\n rect.setAttribute('height', this.element.comp.data.h || 0);\r\n currentMasks.push(rect);\r\n } else {\r\n rect = null;\r\n }\r\n\r\n path = createNS('path');\r\n if (properties[i].mode === 'n') {\r\n // TODO move this to a factory or to a constructor\r\n this.viewData[i] = {\r\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\r\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\r\n elem: path,\r\n lastPath: '',\r\n };\r\n defs.appendChild(path);\r\n } else {\r\n count += 1;\r\n\r\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\r\n path.setAttribute('clip-rule', 'nonzero');\r\n var filterID;\r\n\r\n if (properties[i].x.k !== 0) {\r\n maskType = 'mask';\r\n maskRef = 'mask';\r\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\r\n filterID = createElementID();\r\n expansor = createNS('filter');\r\n expansor.setAttribute('id', filterID);\r\n feMorph = createNS('feMorphology');\r\n feMorph.setAttribute('operator', 'erode');\r\n feMorph.setAttribute('in', 'SourceGraphic');\r\n feMorph.setAttribute('radius', '0');\r\n expansor.appendChild(feMorph);\r\n defs.appendChild(expansor);\r\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\r\n } else {\r\n feMorph = null;\r\n x = null;\r\n }\r\n\r\n // TODO move this to a factory or to a constructor\r\n this.storedData[i] = {\r\n elem: path,\r\n x: x,\r\n expan: feMorph,\r\n lastPath: '',\r\n lastOperator: '',\r\n filterId: filterID,\r\n lastRadius: 0,\r\n };\r\n if (properties[i].mode === 'i') {\r\n jLen = currentMasks.length;\r\n var g = createNS('g');\r\n for (j = 0; j < jLen; j += 1) {\r\n g.appendChild(currentMasks[j]);\r\n }\r\n var mask = createNS('mask');\r\n mask.setAttribute('mask-type', 'alpha');\r\n mask.setAttribute('id', layerId + '_' + count);\r\n mask.appendChild(path);\r\n defs.appendChild(mask);\r\n g.setAttribute('mask', 'url(' + locationHref + '#' + layerId + '_' + count + ')');\r\n\r\n currentMasks.length = 0;\r\n currentMasks.push(g);\r\n } else {\r\n currentMasks.push(path);\r\n }\r\n if (properties[i].inv && !this.solidPath) {\r\n this.solidPath = this.createLayerSolidPath();\r\n }\r\n // TODO move this to a factory or to a constructor\r\n this.viewData[i] = {\r\n elem: path,\r\n lastPath: '',\r\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\r\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\r\n invRect: rect,\r\n };\r\n if (!this.viewData[i].prop.k) {\r\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\r\n }\r\n }\r\n }\r\n\r\n this.maskElement = createNS(maskType);\r\n\r\n len = currentMasks.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.maskElement.appendChild(currentMasks[i]);\r\n }\r\n\r\n if (count > 0) {\r\n this.maskElement.setAttribute('id', layerId);\r\n this.element.maskedElement.setAttribute(maskRef, 'url(' + locationHref + '#' + layerId + ')');\r\n defs.appendChild(this.maskElement);\r\n }\r\n if (this.viewData.length) {\r\n this.element.addRenderableComponent(this);\r\n }\r\n}\r\n\r\nMaskElement.prototype.getMaskProperty = function (pos) {\r\n return this.viewData[pos].prop;\r\n};\r\n\r\nMaskElement.prototype.renderFrame = function (isFirstFrame) {\r\n var finalMat = this.element.finalTransform.mat;\r\n var i;\r\n var len = this.masksProperties.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (this.viewData[i].prop._mdf || isFirstFrame) {\r\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\r\n }\r\n if (this.viewData[i].op._mdf || isFirstFrame) {\r\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\r\n }\r\n if (this.masksProperties[i].mode !== 'n') {\r\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\r\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\r\n }\r\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\r\n var feMorph = this.storedData[i].expan;\r\n if (this.storedData[i].x.v < 0) {\r\n if (this.storedData[i].lastOperator !== 'erode') {\r\n this.storedData[i].lastOperator = 'erode';\r\n this.storedData[i].elem.setAttribute('filter', 'url(' + locationHref + '#' + this.storedData[i].filterId + ')');\r\n }\r\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\r\n } else {\r\n if (this.storedData[i].lastOperator !== 'dilate') {\r\n this.storedData[i].lastOperator = 'dilate';\r\n this.storedData[i].elem.setAttribute('filter', null);\r\n }\r\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nMaskElement.prototype.getMaskelement = function () {\r\n return this.maskElement;\r\n};\r\n\r\nMaskElement.prototype.createLayerSolidPath = function () {\r\n var path = 'M0,0 ';\r\n path += ' h' + this.globalData.compSize.w;\r\n path += ' v' + this.globalData.compSize.h;\r\n path += ' h-' + this.globalData.compSize.w;\r\n path += ' v-' + this.globalData.compSize.h + ' ';\r\n return path;\r\n};\r\n\r\nMaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\r\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\r\n var i;\r\n var len;\r\n len = pathNodes._length;\r\n for (i = 1; i < len; i += 1) {\r\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\r\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\r\n }\r\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\r\n if (pathNodes.c && len > 1) {\r\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\r\n }\r\n // pathNodes.__renderedString = pathString;\r\n\r\n if (viewData.lastPath !== pathString) {\r\n var pathShapeValue = '';\r\n if (viewData.elem) {\r\n if (pathNodes.c) {\r\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\r\n }\r\n viewData.elem.setAttribute('d', pathShapeValue);\r\n }\r\n viewData.lastPath = pathString;\r\n }\r\n};\r\n\r\nMaskElement.prototype.destroy = function () {\r\n this.element = null;\r\n this.globalData = null;\r\n this.maskElement = null;\r\n this.data = null;\r\n this.masksProperties = null;\r\n};\r\n\r\n/**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\r\n\r\nfunction HierarchyElement() {}\r\n\r\nHierarchyElement.prototype = {\r\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\r\n initHierarchy: function () {\r\n // element's parent list\r\n this.hierarchy = [];\r\n // if element is parent of another layer _isParent will be true\r\n this._isParent = false;\r\n this.checkParenting();\r\n },\r\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\r\n setHierarchy: function (hierarchy) {\r\n this.hierarchy = hierarchy;\r\n },\r\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\r\n setAsParent: function () {\r\n this._isParent = true;\r\n },\r\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\r\n checkParenting: function () {\r\n if (this.data.parent !== undefined) {\r\n this.comp.buildElementParenting(this, this.data.parent, []);\r\n }\r\n },\r\n};\r\n\r\n/**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\r\n\r\nfunction FrameElement() {}\r\n\r\nFrameElement.prototype = {\r\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\r\n initFrame: function () {\r\n // set to true when inpoint is rendered\r\n this._isFirstFrame = false;\r\n // list of animated properties\r\n this.dynamicProperties = [];\r\n // If layer has been modified in current tick this will be true\r\n this._mdf = false;\r\n },\r\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\r\n prepareProperties: function (num, isVisible) {\r\n var i;\r\n var len = this.dynamicProperties.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (isVisible || (this._isParent && this.dynamicProperties[i].propType === 'transform')) {\r\n this.dynamicProperties[i].getValue();\r\n if (this.dynamicProperties[i]._mdf) {\r\n this.globalData._mdf = true;\r\n this._mdf = true;\r\n }\r\n }\r\n }\r\n },\r\n addDynamicProperty: function (prop) {\r\n if (this.dynamicProperties.indexOf(prop) === -1) {\r\n this.dynamicProperties.push(prop);\r\n }\r\n },\r\n};\r\n\r\n/* global TransformPropertyFactory, Matrix */\r\n\r\nfunction TransformElement() {}\r\n\r\nTransformElement.prototype = {\r\n initTransform: function () {\r\n this.finalTransform = {\r\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 },\r\n _matMdf: false,\r\n _opMdf: false,\r\n mat: new Matrix(),\r\n };\r\n if (this.data.ao) {\r\n this.finalTransform.mProp.autoOriented = true;\r\n }\r\n\r\n // TODO: check TYPE 11: Guided elements\r\n if (this.data.ty !== 11) {\r\n // this.createElements();\r\n }\r\n },\r\n renderTransform: function () {\r\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\r\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\r\n\r\n if (this.hierarchy) {\r\n var mat;\r\n var finalMat = this.finalTransform.mat;\r\n var i = 0;\r\n var len = this.hierarchy.length;\r\n // Checking if any of the transformation matrices in the hierarchy chain has changed.\r\n if (!this.finalTransform._matMdf) {\r\n while (i < len) {\r\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\r\n this.finalTransform._matMdf = true;\r\n break;\r\n }\r\n i += 1;\r\n }\r\n }\r\n\r\n if (this.finalTransform._matMdf) {\r\n mat = this.finalTransform.mProp.v.props;\r\n finalMat.cloneFromProps(mat);\r\n for (i = 0; i < len; i += 1) {\r\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\r\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\r\n }\r\n }\r\n }\r\n },\r\n globalToLocal: function (pt) {\r\n var transforms = [];\r\n transforms.push(this.finalTransform);\r\n var flag = true;\r\n var comp = this.comp;\r\n while (flag) {\r\n if (comp.finalTransform) {\r\n if (comp.data.hasMask) {\r\n transforms.splice(0, 0, comp.finalTransform);\r\n }\r\n comp = comp.comp;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n var i;\r\n var len = transforms.length;\r\n var ptNew;\r\n for (i = 0; i < len; i += 1) {\r\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\r\n // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\r\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\r\n }\r\n return pt;\r\n },\r\n mHelper: new Matrix(),\r\n};\r\n\r\nfunction RenderableElement() {\r\n\r\n}\r\n\r\nRenderableElement.prototype = {\r\n initRenderable: function () {\r\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\r\n this.isInRange = false;\r\n // layer's display state\r\n this.hidden = false;\r\n // If layer's transparency equals 0, it can be hidden\r\n this.isTransparent = false;\r\n // list of animated components\r\n this.renderableComponents = [];\r\n },\r\n addRenderableComponent: function (component) {\r\n if (this.renderableComponents.indexOf(component) === -1) {\r\n this.renderableComponents.push(component);\r\n }\r\n },\r\n removeRenderableComponent: function (component) {\r\n if (this.renderableComponents.indexOf(component) !== -1) {\r\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\r\n }\r\n },\r\n prepareRenderableFrame: function (num) {\r\n this.checkLayerLimits(num);\r\n },\r\n checkTransparency: function () {\r\n if (this.finalTransform.mProp.o.v <= 0) {\r\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\r\n this.isTransparent = true;\r\n this.hide();\r\n }\r\n } else if (this.isTransparent) {\r\n this.isTransparent = false;\r\n this.show();\r\n }\r\n },\r\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\r\n checkLayerLimits: function (num) {\r\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\r\n if (this.isInRange !== true) {\r\n this.globalData._mdf = true;\r\n this._mdf = true;\r\n this.isInRange = true;\r\n this.show();\r\n }\r\n } else if (this.isInRange !== false) {\r\n this.globalData._mdf = true;\r\n this.isInRange = false;\r\n this.hide();\r\n }\r\n },\r\n renderRenderable: function () {\r\n var i;\r\n var len = this.renderableComponents.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\r\n }\r\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\r\n },\r\n sourceRectAtTime: function () {\r\n return {\r\n top: 0,\r\n left: 0,\r\n width: 100,\r\n height: 100,\r\n };\r\n },\r\n getLayerSize: function () {\r\n if (this.data.ty === 5) {\r\n return { w: this.data.textData.width, h: this.data.textData.height };\r\n }\r\n return { w: this.data.width, h: this.data.height };\r\n },\r\n};\r\n\r\n/* global extendPrototype, RenderableElement, createProxyFunction */\r\n\r\nfunction RenderableDOMElement() {}\r\n\r\n(function () {\r\n var _prototype = {\r\n initElement: function (data, globalData, comp) {\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.initTransform(data, globalData, comp);\r\n this.initHierarchy();\r\n this.initRenderable();\r\n this.initRendererElement();\r\n this.createContainerElements();\r\n this.createRenderableComponents();\r\n this.createContent();\r\n this.hide();\r\n },\r\n hide: function () {\r\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\r\n var elem = this.baseElement || this.layerElement;\r\n elem.style.display = 'none';\r\n this.hidden = true;\r\n }\r\n },\r\n show: function () {\r\n if (this.isInRange && !this.isTransparent) {\r\n if (!this.data.hd) {\r\n var elem = this.baseElement || this.layerElement;\r\n elem.style.display = 'block';\r\n }\r\n this.hidden = false;\r\n this._isFirstFrame = true;\r\n }\r\n },\r\n renderFrame: function () {\r\n // If it is exported as hidden (data.hd === true) no need to render\r\n // If it is not visible no need to render\r\n if (this.data.hd || this.hidden) {\r\n return;\r\n }\r\n this.renderTransform();\r\n this.renderRenderable();\r\n this.renderElement();\r\n this.renderInnerContent();\r\n if (this._isFirstFrame) {\r\n this._isFirstFrame = false;\r\n }\r\n },\r\n renderInnerContent: function () {},\r\n prepareFrame: function (num) {\r\n this._mdf = false;\r\n this.prepareRenderableFrame(num);\r\n this.prepareProperties(num, this.isInRange);\r\n this.checkTransparency();\r\n },\r\n destroy: function () {\r\n this.innerElem = null;\r\n this.destroyBaseElement();\r\n },\r\n };\r\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\r\n}());\r\n\r\n/* exported ProcessedElement */\r\n\r\nfunction ProcessedElement(element, position) {\r\n this.elem = element;\r\n this.pos = position;\r\n}\r\n\r\n/* global createNS */\r\n\r\nfunction SVGStyleData(data, level) {\r\n this.data = data;\r\n this.type = data.ty;\r\n this.d = '';\r\n this.lvl = level;\r\n this._mdf = false;\r\n this.closed = data.hd === true;\r\n this.pElem = createNS('path');\r\n this.msElem = null;\r\n}\r\n\r\nSVGStyleData.prototype.reset = function () {\r\n this.d = '';\r\n this._mdf = false;\r\n};\r\n\r\nfunction SVGShapeData(transformers, level, shape) {\r\n this.caches = [];\r\n this.styles = [];\r\n this.transformers = transformers;\r\n this.lStr = '';\r\n this.sh = shape;\r\n this.lvl = level;\r\n // TODO find if there are some cases where _isAnimated can be false.\r\n // For now, since shapes add up with other shapes. They have to be calculated every time.\r\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\r\n this._isAnimated = !!shape.k;\r\n // TODO: commenting this for now since all shapes are animated\r\n var i = 0;\r\n var len = transformers.length;\r\n while (i < len) {\r\n if (transformers[i].mProps.dynamicProperties.length) {\r\n this._isAnimated = true;\r\n break;\r\n }\r\n i += 1;\r\n }\r\n}\r\n\r\nSVGShapeData.prototype.setAsAnimated = function () {\r\n this._isAnimated = true;\r\n};\r\n\r\n/* exported SVGTransformData */\r\n\r\nfunction SVGTransformData(mProps, op, container) {\r\n this.transform = {\r\n mProps: mProps,\r\n op: op,\r\n container: container,\r\n };\r\n this.elements = [];\r\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\r\n}\r\n\r\n/* global DashProperty, PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\n\r\nfunction SVGStrokeStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\r\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\r\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\r\n this.style = styleOb;\r\n this._isAnimated = !!this._isAnimated;\r\n}\r\n\r\nextendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\r\n\r\n/* global PropertyFactory, extendPrototype, DynamicPropertyContainer */\r\n\r\nfunction SVGFillStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\r\n this.style = styleOb;\r\n}\r\n\r\nextendPrototype([DynamicPropertyContainer], SVGFillStyleData);\r\n\r\n/* global PropertyFactory, degToRads, GradientProperty, createElementID, createNS, locationHref,\r\nextendPrototype, DynamicPropertyContainer */\r\n\r\nfunction SVGGradientFillStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.initGradientData(elem, data, styleOb);\r\n}\r\n\r\nSVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\r\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\r\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\r\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\r\n this.h = PropertyFactory.getProp(elem, data.h || { k: 0 }, 0, 0.01, this);\r\n this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 0, degToRads, this);\r\n this.g = new GradientProperty(elem, data.g, this);\r\n this.style = styleOb;\r\n this.stops = [];\r\n this.setGradientData(styleOb.pElem, data);\r\n this.setGradientOpacity(data, styleOb);\r\n this._isAnimated = !!this._isAnimated;\r\n};\r\n\r\nSVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\r\n var gradientId = createElementID();\r\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\r\n gfill.setAttribute('id', gradientId);\r\n gfill.setAttribute('spreadMethod', 'pad');\r\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\r\n var stops = [];\r\n var stop;\r\n var j;\r\n var jLen;\r\n jLen = data.g.p * 4;\r\n for (j = 0; j < jLen; j += 4) {\r\n stop = createNS('stop');\r\n gfill.appendChild(stop);\r\n stops.push(stop);\r\n }\r\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + gradientId + ')');\r\n\r\n this.gf = gfill;\r\n this.cst = stops;\r\n};\r\n\r\nSVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\r\n if (this.g._hasOpacity && !this.g._collapsable) {\r\n var stop;\r\n var j;\r\n var jLen;\r\n var mask = createNS('mask');\r\n var maskElement = createNS('path');\r\n mask.appendChild(maskElement);\r\n var opacityId = createElementID();\r\n var maskId = createElementID();\r\n mask.setAttribute('id', maskId);\r\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\r\n opFill.setAttribute('id', opacityId);\r\n opFill.setAttribute('spreadMethod', 'pad');\r\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\r\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\r\n var stops = this.stops;\r\n for (j = data.g.p * 4; j < jLen; j += 2) {\r\n stop = createNS('stop');\r\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\r\n opFill.appendChild(stop);\r\n stops.push(stop);\r\n }\r\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + opacityId + ')');\r\n this.of = opFill;\r\n this.ms = mask;\r\n this.ost = stops;\r\n this.maskId = maskId;\r\n styleOb.msElem = maskElement;\r\n }\r\n};\r\n\r\nextendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\r\n\r\n/* global PropertyFactory, DashProperty, extendPrototype, SVGGradientFillStyleData, DynamicPropertyContainer */\r\n\r\nfunction SVGGradientStrokeStyleData(elem, data, styleOb) {\r\n this.initDynamicPropertyContainer(elem);\r\n this.getValue = this.iterateDynamicProperties;\r\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\r\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\r\n this.initGradientData(elem, data, styleOb);\r\n this._isAnimated = !!this._isAnimated;\r\n}\r\n\r\nextendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\r\n\r\n/* global createNS */\r\n/* exported ShapeGroupData */\r\n\r\nfunction ShapeGroupData() {\r\n this.it = [];\r\n this.prevViewData = [];\r\n this.gr = createNS('g');\r\n}\r\n\r\n/* global Matrix, buildShapeString, bmFloor */\r\n/* exported SVGElementsRenderer */\r\n\r\nvar SVGElementsRenderer = (function () {\r\n var _identityMatrix = new Matrix();\r\n var _matrixHelper = new Matrix();\r\n\r\n var ob = {\r\n createRenderFunction: createRenderFunction,\r\n };\r\n\r\n function createRenderFunction(data) {\r\n switch (data.ty) {\r\n case 'fl':\r\n return renderFill;\r\n case 'gf':\r\n return renderGradient;\r\n case 'gs':\r\n return renderGradientStroke;\r\n case 'st':\r\n return renderStroke;\r\n case 'sh':\r\n case 'el':\r\n case 'rc':\r\n case 'sr':\r\n return renderPath;\r\n case 'tr':\r\n return renderContentTransform;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n function renderContentTransform(styleData, itemData, isFirstFrame) {\r\n if (isFirstFrame || itemData.transform.op._mdf) {\r\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\r\n }\r\n if (isFirstFrame || itemData.transform.mProps._mdf) {\r\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\r\n }\r\n }\r\n\r\n function renderPath(styleData, itemData, isFirstFrame) {\r\n var j;\r\n var jLen;\r\n var pathStringTransformed;\r\n var redraw;\r\n var pathNodes;\r\n var l;\r\n var lLen = itemData.styles.length;\r\n var lvl = itemData.lvl;\r\n var paths;\r\n var mat;\r\n var props;\r\n var iterations;\r\n var k;\r\n for (l = 0; l < lLen; l += 1) {\r\n redraw = itemData.sh._mdf || isFirstFrame;\r\n if (itemData.styles[l].lvl < lvl) {\r\n mat = _matrixHelper.reset();\r\n iterations = lvl - itemData.styles[l].lvl;\r\n k = itemData.transformers.length - 1;\r\n while (!redraw && iterations > 0) {\r\n redraw = itemData.transformers[k].mProps._mdf || redraw;\r\n iterations -= 1;\r\n k -= 1;\r\n }\r\n if (redraw) {\r\n iterations = lvl - itemData.styles[l].lvl;\r\n k = itemData.transformers.length - 1;\r\n while (iterations > 0) {\r\n props = itemData.transformers[k].mProps.v.props;\r\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\r\n iterations -= 1;\r\n k -= 1;\r\n }\r\n }\r\n } else {\r\n mat = _identityMatrix;\r\n }\r\n paths = itemData.sh.paths;\r\n jLen = paths._length;\r\n if (redraw) {\r\n pathStringTransformed = '';\r\n for (j = 0; j < jLen; j += 1) {\r\n pathNodes = paths.shapes[j];\r\n if (pathNodes && pathNodes._length) {\r\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\r\n }\r\n }\r\n itemData.caches[l] = pathStringTransformed;\r\n } else {\r\n pathStringTransformed = itemData.caches[l];\r\n }\r\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\r\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\r\n }\r\n }\r\n\r\n function renderFill(styleData, itemData, isFirstFrame) {\r\n var styleElem = itemData.style;\r\n\r\n if (itemData.c._mdf || isFirstFrame) {\r\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\r\n }\r\n if (itemData.o._mdf || isFirstFrame) {\r\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\r\n }\r\n }\r\n\r\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\r\n renderGradient(styleData, itemData, isFirstFrame);\r\n renderStroke(styleData, itemData, isFirstFrame);\r\n }\r\n\r\n function renderGradient(styleData, itemData, isFirstFrame) {\r\n var gfill = itemData.gf;\r\n var hasOpacity = itemData.g._hasOpacity;\r\n var pt1 = itemData.s.v;\r\n var pt2 = itemData.e.v;\r\n\r\n if (itemData.o._mdf || isFirstFrame) {\r\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\r\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\r\n }\r\n if (itemData.s._mdf || isFirstFrame) {\r\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\r\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\r\n gfill.setAttribute(attr1, pt1[0]);\r\n gfill.setAttribute(attr2, pt1[1]);\r\n if (hasOpacity && !itemData.g._collapsable) {\r\n itemData.of.setAttribute(attr1, pt1[0]);\r\n itemData.of.setAttribute(attr2, pt1[1]);\r\n }\r\n }\r\n var stops;\r\n var i;\r\n var len;\r\n var stop;\r\n if (itemData.g._cmdf || isFirstFrame) {\r\n stops = itemData.cst;\r\n var cValues = itemData.g.c;\r\n len = stops.length;\r\n for (i = 0; i < len; i += 1) {\r\n stop = stops[i];\r\n stop.setAttribute('offset', cValues[i * 4] + '%');\r\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\r\n }\r\n }\r\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\r\n var oValues = itemData.g.o;\r\n if (itemData.g._collapsable) {\r\n stops = itemData.cst;\r\n } else {\r\n stops = itemData.ost;\r\n }\r\n len = stops.length;\r\n for (i = 0; i < len; i += 1) {\r\n stop = stops[i];\r\n if (!itemData.g._collapsable) {\r\n stop.setAttribute('offset', oValues[i * 2] + '%');\r\n }\r\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\r\n }\r\n }\r\n if (styleData.t === 1) {\r\n if (itemData.e._mdf || isFirstFrame) {\r\n gfill.setAttribute('x2', pt2[0]);\r\n gfill.setAttribute('y2', pt2[1]);\r\n if (hasOpacity && !itemData.g._collapsable) {\r\n itemData.of.setAttribute('x2', pt2[0]);\r\n itemData.of.setAttribute('y2', pt2[1]);\r\n }\r\n }\r\n } else {\r\n var rad;\r\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\r\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\r\n gfill.setAttribute('r', rad);\r\n if (hasOpacity && !itemData.g._collapsable) {\r\n itemData.of.setAttribute('r', rad);\r\n }\r\n }\r\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\r\n if (!rad) {\r\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\r\n }\r\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\r\n\r\n var percent = itemData.h.v;\r\n if (percent >= 1) {\r\n percent = 0.99;\r\n } else if (percent <= -1) {\r\n percent = -0.99;\r\n }\r\n var dist = rad * percent;\r\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\r\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\r\n gfill.setAttribute('fx', x);\r\n gfill.setAttribute('fy', y);\r\n if (hasOpacity && !itemData.g._collapsable) {\r\n itemData.of.setAttribute('fx', x);\r\n itemData.of.setAttribute('fy', y);\r\n }\r\n }\r\n // gfill.setAttribute('fy','200');\r\n }\r\n }\r\n\r\n function renderStroke(styleData, itemData, isFirstFrame) {\r\n var styleElem = itemData.style;\r\n var d = itemData.d;\r\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\r\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\r\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\r\n }\r\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\r\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\r\n }\r\n if (itemData.o._mdf || isFirstFrame) {\r\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\r\n }\r\n if (itemData.w._mdf || isFirstFrame) {\r\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\r\n if (styleElem.msElem) {\r\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\r\n }\r\n }\r\n }\r\n\r\n return ob;\r\n}());\r\n\r\n/* global Matrix */\r\n\r\nfunction ShapeTransformManager() {\r\n this.sequences = {};\r\n this.sequenceList = [];\r\n this.transform_key_count = 0;\r\n}\r\n\r\nShapeTransformManager.prototype = {\r\n addTransformSequence: function (transforms) {\r\n var i;\r\n var len = transforms.length;\r\n var key = '_';\r\n for (i = 0; i < len; i += 1) {\r\n key += transforms[i].transform.key + '_';\r\n }\r\n var sequence = this.sequences[key];\r\n if (!sequence) {\r\n sequence = {\r\n transforms: [].concat(transforms),\r\n finalTransform: new Matrix(),\r\n _mdf: false,\r\n };\r\n this.sequences[key] = sequence;\r\n this.sequenceList.push(sequence);\r\n }\r\n return sequence;\r\n },\r\n processSequence: function (sequence, isFirstFrame) {\r\n var i = 0;\r\n var len = sequence.transforms.length;\r\n var _mdf = isFirstFrame;\r\n while (i < len && !isFirstFrame) {\r\n if (sequence.transforms[i].transform.mProps._mdf) {\r\n _mdf = true;\r\n break;\r\n }\r\n i += 1;\r\n }\r\n if (_mdf) {\r\n var props;\r\n sequence.finalTransform.reset();\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n props = sequence.transforms[i].transform.mProps.v.props;\r\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\r\n }\r\n }\r\n sequence._mdf = _mdf;\r\n },\r\n processSequences: function (isFirstFrame) {\r\n var i;\r\n var len = this.sequenceList.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.processSequence(this.sequenceList[i], isFirstFrame);\r\n }\r\n },\r\n getNewKey: function () {\r\n this.transform_key_count += 1;\r\n return '_' + this.transform_key_count;\r\n },\r\n};\r\n\r\n/* global ShapePropertyFactory, SVGShapeData */\r\n\r\nfunction CVShapeData(element, data, styles, transformsManager) {\r\n this.styledShapes = [];\r\n this.tr = [0, 0, 0, 0, 0, 0];\r\n var ty = 4;\r\n if (data.ty === 'rc') {\r\n ty = 5;\r\n } else if (data.ty === 'el') {\r\n ty = 6;\r\n } else if (data.ty === 'sr') {\r\n ty = 7;\r\n }\r\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\r\n var i;\r\n var len = styles.length;\r\n var styledShape;\r\n for (i = 0; i < len; i += 1) {\r\n if (!styles[i].closed) {\r\n styledShape = {\r\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\r\n trNodes: [],\r\n };\r\n this.styledShapes.push(styledShape);\r\n styles[i].elements.push(styledShape);\r\n }\r\n }\r\n}\r\n\r\nCVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\r\n\r\n/* global LayerExpressionInterface, EffectsExpressionInterface, CompExpressionInterface, ShapeExpressionInterface,\r\nTextExpressionInterface, getBlendMode,createElementID, EffectsManager */\r\n\r\nfunction BaseElement() {\r\n}\r\n\r\nBaseElement.prototype = {\r\n checkMasks: function () {\r\n if (!this.data.hasMask) {\r\n return false;\r\n }\r\n var i = 0;\r\n var len = this.data.masksProperties.length;\r\n while (i < len) {\r\n if ((this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false)) {\r\n return true;\r\n }\r\n i += 1;\r\n }\r\n return false;\r\n },\r\n initExpressions: function () {\r\n this.layerInterface = LayerExpressionInterface(this);\r\n if (this.data.hasMask && this.maskManager) {\r\n this.layerInterface.registerMaskInterface(this.maskManager);\r\n }\r\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\r\n this.layerInterface.registerEffectsInterface(effectsInterface);\r\n\r\n if (this.data.ty === 0 || this.data.xt) {\r\n this.compInterface = CompExpressionInterface(this);\r\n } else if (this.data.ty === 4) {\r\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\r\n this.layerInterface.content = this.layerInterface.shapeInterface;\r\n } else if (this.data.ty === 5) {\r\n this.layerInterface.textInterface = TextExpressionInterface(this);\r\n this.layerInterface.text = this.layerInterface.textInterface;\r\n }\r\n },\r\n setBlendMode: function () {\r\n var blendModeValue = getBlendMode(this.data.bm);\r\n var elem = this.baseElement || this.layerElement;\r\n\r\n elem.style['mix-blend-mode'] = blendModeValue;\r\n },\r\n initBaseData: function (data, globalData, comp) {\r\n this.globalData = globalData;\r\n this.comp = comp;\r\n this.data = data;\r\n this.layerId = createElementID();\r\n\r\n // Stretch factor for old animations missing this property.\r\n if (!this.data.sr) {\r\n this.data.sr = 1;\r\n }\r\n // effects manager\r\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\r\n },\r\n getType: function () {\r\n return this.type;\r\n },\r\n sourceRectAtTime: function () {},\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, HierarchyElement, FrameElement */\r\n\r\nfunction NullElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.initFrame();\r\n this.initTransform(data, globalData, comp);\r\n this.initHierarchy();\r\n}\r\n\r\nNullElement.prototype.prepareFrame = function (num) {\r\n this.prepareProperties(num, true);\r\n};\r\n\r\nNullElement.prototype.renderFrame = function () {\r\n};\r\n\r\nNullElement.prototype.getBaseElement = function () {\r\n return null;\r\n};\r\n\r\nNullElement.prototype.destroy = function () {\r\n};\r\n\r\nNullElement.prototype.sourceRectAtTime = function () {\r\n};\r\n\r\nNullElement.prototype.hide = function () {\r\n};\r\n\r\nextendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\r\n\r\n/* global filtersFactory, featureSupport, filtersFactory, createElementID, createNS, MaskElement, SVGEffects, locationHref */\r\n\r\nfunction SVGBaseElement() {\r\n}\r\n\r\nSVGBaseElement.prototype = {\r\n initRendererElement: function () {\r\n this.layerElement = createNS('g');\r\n },\r\n createContainerElements: function () {\r\n this.matteElement = createNS('g');\r\n this.transformedElement = this.layerElement;\r\n this.maskedElement = this.layerElement;\r\n this._sizeChanged = false;\r\n var layerElementParent = null;\r\n // If this layer acts as a mask for the following layer\r\n var filId;\r\n var fil;\r\n var gg;\r\n if (this.data.td) {\r\n if (this.data.td == 3 || this.data.td == 1) { // eslint-disable-line eqeqeq\r\n var masker = createNS('mask');\r\n masker.setAttribute('id', this.layerId);\r\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\r\n masker.appendChild(this.layerElement);\r\n layerElementParent = masker;\r\n this.globalData.defs.appendChild(masker);\r\n // This is only for IE and Edge when mask if of type alpha\r\n if (!featureSupport.maskType && this.data.td == 1) { // eslint-disable-line eqeqeq\r\n masker.setAttribute('mask-type', 'luminance');\r\n filId = createElementID();\r\n fil = filtersFactory.createFilter(filId);\r\n this.globalData.defs.appendChild(fil);\r\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\r\n gg = createNS('g');\r\n gg.appendChild(this.layerElement);\r\n layerElementParent = gg;\r\n masker.appendChild(gg);\r\n gg.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\r\n }\r\n } else if (this.data.td == 2) { // eslint-disable-line eqeqeq\r\n var maskGroup = createNS('mask');\r\n maskGroup.setAttribute('id', this.layerId);\r\n maskGroup.setAttribute('mask-type', 'alpha');\r\n var maskGrouper = createNS('g');\r\n maskGroup.appendChild(maskGrouper);\r\n filId = createElementID();\r\n fil = filtersFactory.createFilter(filId);\r\n /// /\r\n\r\n // This solution doesn't work on Android when meta tag with viewport attribute is set\r\n /* var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix); */\r\n /// /\r\n var feCTr = createNS('feComponentTransfer');\r\n feCTr.setAttribute('in', 'SourceGraphic');\r\n fil.appendChild(feCTr);\r\n var feFunc = createNS('feFuncA');\r\n feFunc.setAttribute('type', 'table');\r\n feFunc.setAttribute('tableValues', '1.0 0.0');\r\n feCTr.appendChild(feFunc);\r\n /// /\r\n this.globalData.defs.appendChild(fil);\r\n var alphaRect = createNS('rect');\r\n alphaRect.setAttribute('width', this.comp.data.w);\r\n alphaRect.setAttribute('height', this.comp.data.h);\r\n alphaRect.setAttribute('x', '0');\r\n alphaRect.setAttribute('y', '0');\r\n alphaRect.setAttribute('fill', '#ffffff');\r\n alphaRect.setAttribute('opacity', '0');\r\n maskGrouper.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\r\n maskGrouper.appendChild(alphaRect);\r\n maskGrouper.appendChild(this.layerElement);\r\n layerElementParent = maskGrouper;\r\n if (!featureSupport.maskType) {\r\n maskGroup.setAttribute('mask-type', 'luminance');\r\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\r\n gg = createNS('g');\r\n maskGrouper.appendChild(alphaRect);\r\n gg.appendChild(this.layerElement);\r\n layerElementParent = gg;\r\n maskGrouper.appendChild(gg);\r\n }\r\n this.globalData.defs.appendChild(maskGroup);\r\n }\r\n } else if (this.data.tt) {\r\n this.matteElement.appendChild(this.layerElement);\r\n layerElementParent = this.matteElement;\r\n this.baseElement = this.matteElement;\r\n } else {\r\n this.baseElement = this.layerElement;\r\n }\r\n if (this.data.ln) {\r\n this.layerElement.setAttribute('id', this.data.ln);\r\n }\r\n if (this.data.cl) {\r\n this.layerElement.setAttribute('class', this.data.cl);\r\n }\r\n // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\r\n if (this.data.ty === 0 && !this.data.hd) {\r\n var cp = createNS('clipPath');\r\n var pt = createNS('path');\r\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\r\n var clipId = createElementID();\r\n cp.setAttribute('id', clipId);\r\n cp.appendChild(pt);\r\n this.globalData.defs.appendChild(cp);\r\n\r\n if (this.checkMasks()) {\r\n var cpGroup = createNS('g');\r\n cpGroup.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\r\n cpGroup.appendChild(this.layerElement);\r\n this.transformedElement = cpGroup;\r\n if (layerElementParent) {\r\n layerElementParent.appendChild(this.transformedElement);\r\n } else {\r\n this.baseElement = this.transformedElement;\r\n }\r\n } else {\r\n this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\r\n }\r\n }\r\n if (this.data.bm !== 0) {\r\n this.setBlendMode();\r\n }\r\n },\r\n renderElement: function () {\r\n if (this.finalTransform._matMdf) {\r\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\r\n }\r\n if (this.finalTransform._opMdf) {\r\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\r\n }\r\n },\r\n destroyBaseElement: function () {\r\n this.layerElement = null;\r\n this.matteElement = null;\r\n this.maskManager.destroy();\r\n },\r\n getBaseElement: function () {\r\n if (this.data.hd) {\r\n return null;\r\n }\r\n return this.baseElement;\r\n },\r\n createRenderableComponents: function () {\r\n this.maskManager = new MaskElement(this.data, this, this.globalData);\r\n this.renderableEffectsManager = new SVGEffects(this);\r\n },\r\n setMatte: function (id) {\r\n if (!this.matteElement) {\r\n return;\r\n }\r\n this.matteElement.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');\r\n },\r\n};\r\n\r\n/* global ProcessedElement */\r\n\r\nfunction IShapeElement() {\r\n}\r\n\r\nIShapeElement.prototype = {\r\n addShapeToModifiers: function (data) {\r\n var i;\r\n var len = this.shapeModifiers.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.shapeModifiers[i].addShape(data);\r\n }\r\n },\r\n isShapeInAnimatedModifiers: function (data) {\r\n var i = 0;\r\n var len = this.shapeModifiers.length;\r\n while (i < len) {\r\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n renderModifiers: function () {\r\n if (!this.shapeModifiers.length) {\r\n return;\r\n }\r\n var i;\r\n var len = this.shapes.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.shapes[i].sh.reset();\r\n }\r\n\r\n len = this.shapeModifiers.length;\r\n var shouldBreakProcess;\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\r\n // workaround to fix cases where a repeater resets the shape so the following processes get called twice\r\n // TODO: find a better solution for this\r\n if (shouldBreakProcess) {\r\n break;\r\n }\r\n }\r\n },\r\n lcEnum: {\r\n 1: 'butt',\r\n 2: 'round',\r\n 3: 'square',\r\n },\r\n ljEnum: {\r\n 1: 'miter',\r\n 2: 'round',\r\n 3: 'bevel',\r\n },\r\n searchProcessedElement: function (elem) {\r\n var elements = this.processedElements;\r\n var i = 0;\r\n var len = elements.length;\r\n while (i < len) {\r\n if (elements[i].elem === elem) {\r\n return elements[i].pos;\r\n }\r\n i += 1;\r\n }\r\n return 0;\r\n },\r\n addProcessedElement: function (elem, pos) {\r\n var elements = this.processedElements;\r\n var i = elements.length;\r\n while (i) {\r\n i -= 1;\r\n if (elements[i].elem === elem) {\r\n elements[i].pos = pos;\r\n return;\r\n }\r\n }\r\n elements.push(new ProcessedElement(elem, pos));\r\n },\r\n prepareFrame: function (num) {\r\n this.prepareRenderableFrame(num);\r\n this.prepareProperties(num, this.isInRange);\r\n },\r\n};\r\n\r\n/* global TextProperty, TextAnimatorProperty, buildShapeString, LetterProps */\r\n\r\nfunction ITextElement() {\r\n}\r\n\r\nITextElement.prototype.initElement = function (data, globalData, comp) {\r\n this.lettersChangedFlag = true;\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\r\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\r\n this.initTransform(data, globalData, comp);\r\n this.initHierarchy();\r\n this.initRenderable();\r\n this.initRendererElement();\r\n this.createContainerElements();\r\n this.createRenderableComponents();\r\n this.createContent();\r\n this.hide();\r\n this.textAnimator.searchProperties(this.dynamicProperties);\r\n};\r\n\r\nITextElement.prototype.prepareFrame = function (num) {\r\n this._mdf = false;\r\n this.prepareRenderableFrame(num);\r\n this.prepareProperties(num, this.isInRange);\r\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\r\n this.buildNewText();\r\n this.textProperty._isFirstFrame = false;\r\n this.textProperty._mdf = false;\r\n }\r\n};\r\n\r\nITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\r\n var j;\r\n var jLen = shapes.length;\r\n var pathNodes;\r\n var shapeStr = '';\r\n for (j = 0; j < jLen; j += 1) {\r\n pathNodes = shapes[j].ks.k;\r\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\r\n }\r\n return shapeStr;\r\n};\r\n\r\nITextElement.prototype.updateDocumentData = function (newData, index) {\r\n this.textProperty.updateDocumentData(newData, index);\r\n};\r\n\r\nITextElement.prototype.canResizeFont = function (_canResize) {\r\n this.textProperty.canResizeFont(_canResize);\r\n};\r\n\r\nITextElement.prototype.setMinimumFontSize = function (_fontSize) {\r\n this.textProperty.setMinimumFontSize(_fontSize);\r\n};\r\n\r\nITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\r\n if (documentData.ps) {\r\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\r\n }\r\n matrixHelper.translate(0, -documentData.ls, 0);\r\n switch (documentData.j) {\r\n case 1:\r\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\r\n break;\r\n case 2:\r\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\r\n break;\r\n default:\r\n break;\r\n }\r\n matrixHelper.translate(xPos, yPos, 0);\r\n};\r\n\r\nITextElement.prototype.buildColor = function (colorData) {\r\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\r\n};\r\n\r\nITextElement.prototype.emptyProp = new LetterProps();\r\n\r\nITextElement.prototype.destroy = function () {\r\n\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement */\r\n\r\nfunction ICompElement() {}\r\n\r\nextendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\r\n\r\nICompElement.prototype.initElement = function (data, globalData, comp) {\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.initTransform(data, globalData, comp);\r\n this.initRenderable();\r\n this.initHierarchy();\r\n this.initRendererElement();\r\n this.createContainerElements();\r\n this.createRenderableComponents();\r\n if (this.data.xt || !globalData.progressiveLoad) {\r\n this.buildAllItems();\r\n }\r\n this.hide();\r\n};\r\n\r\n/* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n}; */\r\n\r\nICompElement.prototype.prepareFrame = function (num) {\r\n this._mdf = false;\r\n this.prepareRenderableFrame(num);\r\n this.prepareProperties(num, this.isInRange);\r\n if (!this.isInRange && !this.data.xt) {\r\n return;\r\n }\r\n\r\n if (!this.tm._placeholder) {\r\n var timeRemapped = this.tm.v;\r\n if (timeRemapped === this.data.op) {\r\n timeRemapped = this.data.op - 1;\r\n }\r\n this.renderedFrame = timeRemapped;\r\n } else {\r\n this.renderedFrame = num / this.data.sr;\r\n }\r\n var i;\r\n var len = this.elements.length;\r\n if (!this.completeLayers) {\r\n this.checkLayers(this.renderedFrame);\r\n }\r\n // This iteration needs to be backwards because of how expressions connect between each other\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\r\n if (this.elements[i]._mdf) {\r\n this._mdf = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nICompElement.prototype.renderInnerContent = function () {\r\n var i;\r\n var len = this.layers.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n};\r\n\r\nICompElement.prototype.setElements = function (elems) {\r\n this.elements = elems;\r\n};\r\n\r\nICompElement.prototype.getElements = function () {\r\n return this.elements;\r\n};\r\n\r\nICompElement.prototype.destroyElements = function () {\r\n var i;\r\n var len = this.layers.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n};\r\n\r\nICompElement.prototype.destroy = function () {\r\n this.destroyElements();\r\n this.destroyBaseElement();\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, createNS */\r\n\r\nfunction IImageElement(data, globalData, comp) {\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.initElement(data, globalData, comp);\r\n this.sourceRect = {\r\n top: 0, left: 0, width: this.assetData.w, height: this.assetData.h,\r\n };\r\n}\r\n\r\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\r\n\r\nIImageElement.prototype.createContent = function () {\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n\r\n this.innerElem = createNS('image');\r\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\r\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\r\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\r\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\r\n\r\n this.layerElement.appendChild(this.innerElem);\r\n};\r\n\r\nIImageElement.prototype.sourceRectAtTime = function () {\r\n return this.sourceRect;\r\n};\r\n\r\n/* global extendPrototype, IImageElement, createNS */\r\n\r\nfunction ISolidElement(data, globalData, comp) {\r\n this.initElement(data, globalData, comp);\r\n}\r\nextendPrototype([IImageElement], ISolidElement);\r\n\r\nISolidElement.prototype.createContent = function () {\r\n var rect = createNS('rect');\r\n /// /rect.style.width = this.data.sw;\r\n /// /rect.style.height = this.data.sh;\r\n /// /rect.style.fill = this.data.sc;\r\n rect.setAttribute('width', this.data.sw);\r\n rect.setAttribute('height', this.data.sh);\r\n rect.setAttribute('fill', this.data.sc);\r\n this.layerElement.appendChild(rect);\r\n};\r\n\r\n/* global PropertyFactory, extendPrototype, RenderableElement, BaseElement, FrameElement */\r\n\r\nfunction AudioElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initRenderable();\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.initBaseData(data, globalData, comp);\r\n this._isPlaying = false;\r\n this._canPlay = false;\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n this.audio = this.globalData.audioController.createAudio(assetPath);\r\n this._currentTime = 0;\r\n this.globalData.audioController.addAudio(this);\r\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\r\n}\r\n\r\nAudioElement.prototype.prepareFrame = function (num) {\r\n this.prepareRenderableFrame(num, true);\r\n this.prepareProperties(num, true);\r\n if (!this.tm._placeholder) {\r\n var timeRemapped = this.tm.v;\r\n this._currentTime = timeRemapped;\r\n } else {\r\n this._currentTime = num / this.data.sr;\r\n }\r\n};\r\n\r\nextendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\r\n\r\nAudioElement.prototype.renderFrame = function () {\r\n if (this.isInRange && this._canPlay) {\r\n if (!this._isPlaying) {\r\n this.audio.play();\r\n this.audio.seek(this._currentTime / this.globalData.frameRate);\r\n this._isPlaying = true;\r\n } else if (!this.audio.playing()\r\n || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1\r\n ) {\r\n this.audio.seek(this._currentTime / this.globalData.frameRate);\r\n }\r\n }\r\n};\r\n\r\nAudioElement.prototype.show = function () {\r\n // this.audio.play()\r\n};\r\n\r\nAudioElement.prototype.hide = function () {\r\n this.audio.pause();\r\n this._isPlaying = false;\r\n};\r\n\r\nAudioElement.prototype.pause = function () {\r\n this.audio.pause();\r\n this._isPlaying = false;\r\n this._canPlay = false;\r\n};\r\n\r\nAudioElement.prototype.resume = function () {\r\n this._canPlay = true;\r\n};\r\n\r\nAudioElement.prototype.setRate = function (rateValue) {\r\n this.audio.rate(rateValue);\r\n};\r\n\r\nAudioElement.prototype.volume = function (volumeValue) {\r\n this.audio.volume(volumeValue);\r\n};\r\n\r\nAudioElement.prototype.getBaseElement = function () {\r\n return null;\r\n};\r\n\r\nAudioElement.prototype.destroy = function () {\r\n};\r\n\r\nAudioElement.prototype.sourceRectAtTime = function () {\r\n};\r\n\r\nAudioElement.prototype.initExpressions = function () {\r\n};\r\n\r\n/* global extendPrototype, RenderableElement, BaseElement, FrameElement, FootageInterface */\r\n\r\nfunction FootageElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initRenderable();\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\r\n this.initBaseData(data, globalData, comp);\r\n}\r\n\r\nFootageElement.prototype.prepareFrame = function () {\r\n};\r\n\r\nextendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\r\n\r\nFootageElement.prototype.getBaseElement = function () {\r\n return null;\r\n};\r\n\r\nFootageElement.prototype.renderFrame = function () {\r\n};\r\n\r\nFootageElement.prototype.destroy = function () {\r\n};\r\n\r\nFootageElement.prototype.initExpressions = function () {\r\n this.layerInterface = FootageInterface(this);\r\n};\r\n\r\nFootageElement.prototype.getFootageData = function () {\r\n return this.footageData;\r\n};\r\n\r\n/* global createSizedArray, PropertyFactory, extendPrototype, SVGRenderer, ICompElement, SVGBaseElement */\r\n\r\nfunction SVGCompElement(data, globalData, comp) {\r\n this.layers = data.layers;\r\n this.supports3d = true;\r\n this.completeLayers = false;\r\n this.pendingElements = [];\r\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\r\n // this.layerElement = createNS('g');\r\n this.initElement(data, globalData, comp);\r\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\r\n}\r\n\r\nextendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement,\r\nRenderableDOMElement, ITextElement, createSizedArray, createNS */\r\n\r\nfunction SVGTextLottieElement(data, globalData, comp) {\r\n this.textSpans = [];\r\n this.renderType = 'svg';\r\n this.initElement(data, globalData, comp);\r\n}\r\n\r\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\r\n\r\nSVGTextLottieElement.prototype.createContent = function () {\r\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\r\n this.textContainer = createNS('text');\r\n }\r\n};\r\n\r\nSVGTextLottieElement.prototype.buildTextContents = function (textArray) {\r\n var i = 0;\r\n var len = textArray.length;\r\n var textContents = [];\r\n var currentTextContent = '';\r\n while (i < len) {\r\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\r\n textContents.push(currentTextContent);\r\n currentTextContent = '';\r\n } else {\r\n currentTextContent += textArray[i];\r\n }\r\n i += 1;\r\n }\r\n textContents.push(currentTextContent);\r\n return textContents;\r\n};\r\n\r\nSVGTextLottieElement.prototype.buildNewText = function () {\r\n var i;\r\n var len;\r\n\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\r\n if (documentData.fc) {\r\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\r\n } else {\r\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\r\n }\r\n if (documentData.sc) {\r\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\r\n this.layerElement.setAttribute('stroke-width', documentData.sw);\r\n }\r\n this.layerElement.setAttribute('font-size', documentData.finalSize);\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n if (fontData.fClass) {\r\n this.layerElement.setAttribute('class', fontData.fClass);\r\n } else {\r\n this.layerElement.setAttribute('font-family', fontData.fFamily);\r\n var fWeight = documentData.fWeight;\r\n var fStyle = documentData.fStyle;\r\n this.layerElement.setAttribute('font-style', fStyle);\r\n this.layerElement.setAttribute('font-weight', fWeight);\r\n }\r\n this.layerElement.setAttribute('aria-label', documentData.t);\r\n\r\n var letters = documentData.l || [];\r\n var usesGlyphs = !!this.globalData.fontManager.chars;\r\n len = letters.length;\r\n\r\n var tSpan;\r\n var matrixHelper = this.mHelper;\r\n var shapes;\r\n var shapeStr = '';\r\n var singleShape = this.data.singleShape;\r\n var xPos = 0;\r\n var yPos = 0;\r\n var firstLine = true;\r\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\r\n if (singleShape && !usesGlyphs && !documentData.sz) {\r\n var tElement = this.textContainer;\r\n var justify = 'start';\r\n switch (documentData.j) {\r\n case 1:\r\n justify = 'end';\r\n break;\r\n case 2:\r\n justify = 'middle';\r\n break;\r\n default:\r\n justify = 'start';\r\n break;\r\n }\r\n tElement.setAttribute('text-anchor', justify);\r\n tElement.setAttribute('letter-spacing', trackingOffset);\r\n var textContent = this.buildTextContents(documentData.finalText);\r\n len = textContent.length;\r\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\r\n for (i = 0; i < len; i += 1) {\r\n tSpan = this.textSpans[i] || createNS('tspan');\r\n tSpan.textContent = textContent[i];\r\n tSpan.setAttribute('x', 0);\r\n tSpan.setAttribute('y', yPos);\r\n tSpan.style.display = 'inherit';\r\n tElement.appendChild(tSpan);\r\n this.textSpans[i] = tSpan;\r\n yPos += documentData.finalLineHeight;\r\n }\r\n\r\n this.layerElement.appendChild(tElement);\r\n } else {\r\n var cachedSpansLength = this.textSpans.length;\r\n var shapeData;\r\n var charData;\r\n for (i = 0; i < len; i += 1) {\r\n if (!usesGlyphs || !singleShape || i === 0) {\r\n tSpan = cachedSpansLength > i ? this.textSpans[i] : createNS(usesGlyphs ? 'path' : 'text');\r\n if (cachedSpansLength <= i) {\r\n tSpan.setAttribute('stroke-linecap', 'butt');\r\n tSpan.setAttribute('stroke-linejoin', 'round');\r\n tSpan.setAttribute('stroke-miterlimit', '4');\r\n this.textSpans[i] = tSpan;\r\n this.layerElement.appendChild(tSpan);\r\n }\r\n tSpan.style.display = 'inherit';\r\n }\r\n\r\n matrixHelper.reset();\r\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\r\n if (singleShape) {\r\n if (letters[i].n) {\r\n xPos = -trackingOffset;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n firstLine = false;\r\n }\r\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\r\n xPos += letters[i].l || 0;\r\n // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\r\n xPos += trackingOffset;\r\n }\r\n if (usesGlyphs) {\r\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n shapeData = (charData && charData.data) || {};\r\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\r\n if (!singleShape) {\r\n tSpan.setAttribute('d', this.createPathShape(matrixHelper, shapes));\r\n } else {\r\n shapeStr += this.createPathShape(matrixHelper, shapes);\r\n }\r\n } else {\r\n if (singleShape) {\r\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\r\n }\r\n tSpan.textContent = letters[i].val;\r\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\r\n }\r\n //\r\n }\r\n if (singleShape && tSpan) {\r\n tSpan.setAttribute('d', shapeStr);\r\n }\r\n }\r\n while (i < this.textSpans.length) {\r\n this.textSpans[i].style.display = 'none';\r\n i += 1;\r\n }\r\n\r\n this._sizeChanged = true;\r\n};\r\n\r\nSVGTextLottieElement.prototype.sourceRectAtTime = function () {\r\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\r\n this.renderInnerContent();\r\n if (this._sizeChanged) {\r\n this._sizeChanged = false;\r\n var textBox = this.layerElement.getBBox();\r\n this.bbox = {\r\n top: textBox.y,\r\n left: textBox.x,\r\n width: textBox.width,\r\n height: textBox.height,\r\n };\r\n }\r\n return this.bbox;\r\n};\r\n\r\nSVGTextLottieElement.prototype.renderInnerContent = function () {\r\n if (!this.data.singleShape) {\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\r\n this._sizeChanged = true;\r\n var i;\r\n var len;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n\r\n var letters = this.textProperty.currentData.l;\r\n\r\n len = letters.length;\r\n var renderedLetter;\r\n var textSpan;\r\n for (i = 0; i < len; i += 1) {\r\n if (!letters[i].n) {\r\n renderedLetter = renderedLetters[i];\r\n textSpan = this.textSpans[i];\r\n if (renderedLetter._mdf.m) {\r\n textSpan.setAttribute('transform', renderedLetter.m);\r\n }\r\n if (renderedLetter._mdf.o) {\r\n textSpan.setAttribute('opacity', renderedLetter.o);\r\n }\r\n if (renderedLetter._mdf.sw) {\r\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\r\n }\r\n if (renderedLetter._mdf.sc) {\r\n textSpan.setAttribute('stroke', renderedLetter.sc);\r\n }\r\n if (renderedLetter._mdf.fc) {\r\n textSpan.setAttribute('fill', renderedLetter.fc);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement,\r\nFrameElement, RenderableDOMElement, Matrix, SVGStyleData, SVGStrokeStyleData, SVGFillStyleData,\r\nSVGGradientFillStyleData, SVGGradientStrokeStyleData, locationHref, getBlendMode, ShapeGroupData,\r\nTransformPropertyFactory, SVGTransformData, ShapePropertyFactory, SVGShapeData, SVGElementsRenderer, ShapeModifiers */\r\n\r\nfunction SVGShapeElement(data, globalData, comp) {\r\n // List of drawable elements\r\n this.shapes = [];\r\n // Full shape data\r\n this.shapesData = data.shapes;\r\n // List of styles that will be applied to shapes\r\n this.stylesList = [];\r\n // List of modifiers that will be applied to shapes\r\n this.shapeModifiers = [];\r\n // List of items in shape tree\r\n this.itemsData = [];\r\n // List of items in previous shape tree\r\n this.processedElements = [];\r\n // List of animated components\r\n this.animatedContents = [];\r\n this.initElement(data, globalData, comp);\r\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\r\n // List of elements that have been created\r\n this.prevViewData = [];\r\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\r\n}\r\n\r\nextendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\r\n\r\nSVGShapeElement.prototype.initSecondaryElement = function () {\r\n};\r\n\r\nSVGShapeElement.prototype.identityMatrix = new Matrix();\r\n\r\nSVGShapeElement.prototype.buildExpressionInterface = function () {};\r\n\r\nSVGShapeElement.prototype.createContent = function () {\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\r\n this.filterUniqueShapes();\r\n};\r\n\r\n/*\r\nThis method searches for multiple shapes that affect a single element and one of them is animated\r\n*/\r\nSVGShapeElement.prototype.filterUniqueShapes = function () {\r\n var i;\r\n var len = this.shapes.length;\r\n var shape;\r\n var j;\r\n var jLen = this.stylesList.length;\r\n var style;\r\n var tempShapes = [];\r\n var areAnimated = false;\r\n for (j = 0; j < jLen; j += 1) {\r\n style = this.stylesList[j];\r\n areAnimated = false;\r\n tempShapes.length = 0;\r\n for (i = 0; i < len; i += 1) {\r\n shape = this.shapes[i];\r\n if (shape.styles.indexOf(style) !== -1) {\r\n tempShapes.push(shape);\r\n areAnimated = shape._isAnimated || areAnimated;\r\n }\r\n }\r\n if (tempShapes.length > 1 && areAnimated) {\r\n this.setShapesAsAnimated(tempShapes);\r\n }\r\n }\r\n};\r\n\r\nSVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\r\n var i;\r\n var len = shapes.length;\r\n for (i = 0; i < len; i += 1) {\r\n shapes[i].setAsAnimated();\r\n }\r\n};\r\n\r\nSVGShapeElement.prototype.createStyleElement = function (data, level) {\r\n // TODO: prevent drawing of hidden styles\r\n var elementData;\r\n var styleOb = new SVGStyleData(data, level);\r\n\r\n var pathElement = styleOb.pElem;\r\n if (data.ty === 'st') {\r\n elementData = new SVGStrokeStyleData(this, data, styleOb);\r\n } else if (data.ty === 'fl') {\r\n elementData = new SVGFillStyleData(this, data, styleOb);\r\n } else if (data.ty === 'gf' || data.ty === 'gs') {\r\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\r\n elementData = new GradientConstructor(this, data, styleOb);\r\n this.globalData.defs.appendChild(elementData.gf);\r\n if (elementData.maskId) {\r\n this.globalData.defs.appendChild(elementData.ms);\r\n this.globalData.defs.appendChild(elementData.of);\r\n pathElement.setAttribute('mask', 'url(' + locationHref + '#' + elementData.maskId + ')');\r\n }\r\n }\r\n\r\n if (data.ty === 'st' || data.ty === 'gs') {\r\n pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round');\r\n pathElement.setAttribute('stroke-linejoin', this.ljEnum[data.lj] || 'round');\r\n pathElement.setAttribute('fill-opacity', '0');\r\n if (data.lj === 1) {\r\n pathElement.setAttribute('stroke-miterlimit', data.ml);\r\n }\r\n }\r\n\r\n if (data.r === 2) {\r\n pathElement.setAttribute('fill-rule', 'evenodd');\r\n }\r\n\r\n if (data.ln) {\r\n pathElement.setAttribute('id', data.ln);\r\n }\r\n if (data.cl) {\r\n pathElement.setAttribute('class', data.cl);\r\n }\r\n if (data.bm) {\r\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\r\n }\r\n this.stylesList.push(styleOb);\r\n this.addToAnimatedContents(data, elementData);\r\n return elementData;\r\n};\r\n\r\nSVGShapeElement.prototype.createGroupElement = function (data) {\r\n var elementData = new ShapeGroupData();\r\n if (data.ln) {\r\n elementData.gr.setAttribute('id', data.ln);\r\n }\r\n if (data.cl) {\r\n elementData.gr.setAttribute('class', data.cl);\r\n }\r\n if (data.bm) {\r\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\r\n }\r\n return elementData;\r\n};\r\n\r\nSVGShapeElement.prototype.createTransformElement = function (data, container) {\r\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\r\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\r\n this.addToAnimatedContents(data, elementData);\r\n return elementData;\r\n};\r\n\r\nSVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\r\n var ty = 4;\r\n if (data.ty === 'rc') {\r\n ty = 5;\r\n } else if (data.ty === 'el') {\r\n ty = 6;\r\n } else if (data.ty === 'sr') {\r\n ty = 7;\r\n }\r\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\r\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\r\n this.shapes.push(elementData);\r\n this.addShapeToModifiers(elementData);\r\n this.addToAnimatedContents(data, elementData);\r\n return elementData;\r\n};\r\n\r\nSVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\r\n var i = 0;\r\n var len = this.animatedContents.length;\r\n while (i < len) {\r\n if (this.animatedContents[i].element === element) {\r\n return;\r\n }\r\n i += 1;\r\n }\r\n this.animatedContents.push({\r\n fn: SVGElementsRenderer.createRenderFunction(data),\r\n element: element,\r\n data: data,\r\n });\r\n};\r\n\r\nSVGShapeElement.prototype.setElementStyles = function (elementData) {\r\n var arr = elementData.styles;\r\n var j;\r\n var jLen = this.stylesList.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n if (!this.stylesList[j].closed) {\r\n arr.push(this.stylesList[j]);\r\n }\r\n }\r\n};\r\n\r\nSVGShapeElement.prototype.reloadShapes = function () {\r\n this._isFirstFrame = true;\r\n var i;\r\n var len = this.itemsData.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.prevViewData[i] = this.itemsData[i];\r\n }\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\r\n this.filterUniqueShapes();\r\n len = this.dynamicProperties.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.dynamicProperties[i].getValue();\r\n }\r\n this.renderModifiers();\r\n};\r\n\r\nSVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\r\n var ownTransformers = [].concat(transformers);\r\n var i;\r\n var len = arr.length - 1;\r\n var j;\r\n var jLen;\r\n var ownStyles = [];\r\n var ownModifiers = [];\r\n var currentTransform;\r\n var modifier;\r\n var processedPos;\r\n for (i = len; i >= 0; i -= 1) {\r\n processedPos = this.searchProcessedElement(arr[i]);\r\n if (!processedPos) {\r\n arr[i]._render = render;\r\n } else {\r\n itemsData[i] = prevViewData[processedPos - 1];\r\n }\r\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createStyleElement(arr[i], level);\r\n } else {\r\n itemsData[i].style.closed = false;\r\n }\r\n if (arr[i]._render) {\r\n container.appendChild(itemsData[i].style.pElem);\r\n }\r\n ownStyles.push(itemsData[i].style);\r\n } else if (arr[i].ty === 'gr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createGroupElement(arr[i]);\r\n } else {\r\n jLen = itemsData[i].it.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\r\n }\r\n }\r\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\r\n if (arr[i]._render) {\r\n container.appendChild(itemsData[i].gr);\r\n }\r\n } else if (arr[i].ty === 'tr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createTransformElement(arr[i], container);\r\n }\r\n currentTransform = itemsData[i].transform;\r\n ownTransformers.push(currentTransform);\r\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\r\n }\r\n this.setElementStyles(itemsData[i]);\r\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\r\n if (!processedPos) {\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n modifier.init(this, arr[i]);\r\n itemsData[i] = modifier;\r\n this.shapeModifiers.push(modifier);\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = false;\r\n }\r\n ownModifiers.push(modifier);\r\n } else if (arr[i].ty === 'rp') {\r\n if (!processedPos) {\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n itemsData[i] = modifier;\r\n modifier.init(this, arr, i, itemsData);\r\n this.shapeModifiers.push(modifier);\r\n render = false;\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = true;\r\n }\r\n ownModifiers.push(modifier);\r\n }\r\n this.addProcessedElement(arr[i], i + 1);\r\n }\r\n len = ownStyles.length;\r\n for (i = 0; i < len; i += 1) {\r\n ownStyles[i].closed = true;\r\n }\r\n len = ownModifiers.length;\r\n for (i = 0; i < len; i += 1) {\r\n ownModifiers[i].closed = true;\r\n }\r\n};\r\n\r\nSVGShapeElement.prototype.renderInnerContent = function () {\r\n this.renderModifiers();\r\n var i;\r\n var len = this.stylesList.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.stylesList[i].reset();\r\n }\r\n this.renderShape();\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\r\n if (this.stylesList[i].msElem) {\r\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\r\n // Adding M0 0 fixes same mask bug on all browsers\r\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\r\n }\r\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\r\n }\r\n }\r\n};\r\n\r\nSVGShapeElement.prototype.renderShape = function () {\r\n var i;\r\n var len = this.animatedContents.length;\r\n var animatedContent;\r\n for (i = 0; i < len; i += 1) {\r\n animatedContent = this.animatedContents[i];\r\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\r\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\r\n }\r\n }\r\n};\r\n\r\nSVGShapeElement.prototype.destroy = function () {\r\n this.destroyBaseElement();\r\n this.shapesData = null;\r\n this.itemsData = null;\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGTintFilter(filter, filterManager) {\r\n this.filterManager = filterManager;\r\n var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\r\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result', 'f1');\r\n filter.appendChild(feColorMatrix);\r\n feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result', 'f2');\r\n filter.appendChild(feColorMatrix);\r\n this.matrixFilter = feColorMatrix;\r\n if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {\r\n var feMerge = createNS('feMerge');\r\n filter.appendChild(feMerge);\r\n var feMergeNode;\r\n feMergeNode = createNS('feMergeNode');\r\n feMergeNode.setAttribute('in', 'SourceGraphic');\r\n feMerge.appendChild(feMergeNode);\r\n feMergeNode = createNS('feMergeNode');\r\n feMergeNode.setAttribute('in', 'f2');\r\n feMerge.appendChild(feMergeNode);\r\n }\r\n}\r\n\r\nSVGTintFilter.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n var colorBlack = this.filterManager.effectElements[0].p.v;\r\n var colorWhite = this.filterManager.effectElements[1].p.v;\r\n var opacity = this.filterManager.effectElements[2].p.v / 100;\r\n this.matrixFilter.setAttribute('values', (colorWhite[0] - colorBlack[0]) + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\r\n }\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGFillFilter(filter, filterManager) {\r\n this.filterManager = filterManager;\r\n var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\r\n filter.appendChild(feColorMatrix);\r\n this.matrixFilter = feColorMatrix;\r\n}\r\nSVGFillFilter.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n var color = this.filterManager.effectElements[2].p.v;\r\n var opacity = this.filterManager.effectElements[6].p.v;\r\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\r\n }\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGGaussianBlurEffect(filter, filterManager) {\r\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\r\n filter.setAttribute('x', '-100%');\r\n filter.setAttribute('y', '-100%');\r\n filter.setAttribute('width', '300%');\r\n filter.setAttribute('height', '300%');\r\n\r\n this.filterManager = filterManager;\r\n var feGaussianBlur = createNS('feGaussianBlur');\r\n filter.appendChild(feGaussianBlur);\r\n this.feGaussianBlur = feGaussianBlur;\r\n}\r\n\r\nSVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n // Empirical value, matching AE's blur appearance.\r\n var kBlurrinessToSigma = 0.3;\r\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma;\r\n\r\n // Dimensions mapping:\r\n //\r\n // 1 -> horizontal & vertical\r\n // 2 -> horizontal only\r\n // 3 -> vertical only\r\n //\r\n var dimensions = this.filterManager.effectElements[1].p.v;\r\n var sigmaX = (dimensions == 3) ? 0 : sigma; // eslint-disable-line eqeqeq\r\n var sigmaY = (dimensions == 2) ? 0 : sigma; // eslint-disable-line eqeqeq\r\n\r\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY);\r\n\r\n // Repeat edges mapping:\r\n //\r\n // 0 -> off -> duplicate\r\n // 1 -> on -> wrap\r\n var edgeMode = (this.filterManager.effectElements[2].p.v == 1) ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\r\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\r\n }\r\n};\r\n\r\n/* global createNS, createElementID, locationHref, bmFloor */\r\n\r\nfunction SVGStrokeEffect(elem, filterManager) {\r\n this.initialized = false;\r\n this.filterManager = filterManager;\r\n this.elem = elem;\r\n this.paths = [];\r\n}\r\n\r\nSVGStrokeEffect.prototype.initialize = function () {\r\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\r\n var path;\r\n var groupPath;\r\n var i;\r\n var len;\r\n if (this.filterManager.effectElements[1].p.v === 1) {\r\n len = this.elem.maskManager.masksProperties.length;\r\n i = 0;\r\n } else {\r\n i = this.filterManager.effectElements[0].p.v - 1;\r\n len = i + 1;\r\n }\r\n groupPath = createNS('g');\r\n groupPath.setAttribute('fill', 'none');\r\n groupPath.setAttribute('stroke-linecap', 'round');\r\n groupPath.setAttribute('stroke-dashoffset', 1);\r\n for (i; i < len; i += 1) {\r\n path = createNS('path');\r\n groupPath.appendChild(path);\r\n this.paths.push({ p: path, m: i });\r\n }\r\n if (this.filterManager.effectElements[10].p.v === 3) {\r\n var mask = createNS('mask');\r\n var id = createElementID();\r\n mask.setAttribute('id', id);\r\n mask.setAttribute('mask-type', 'alpha');\r\n mask.appendChild(groupPath);\r\n this.elem.globalData.defs.appendChild(mask);\r\n var g = createNS('g');\r\n g.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');\r\n while (elemChildren[0]) {\r\n g.appendChild(elemChildren[0]);\r\n }\r\n this.elem.layerElement.appendChild(g);\r\n this.masker = mask;\r\n groupPath.setAttribute('stroke', '#fff');\r\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\r\n if (this.filterManager.effectElements[10].p.v === 2) {\r\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\r\n while (elemChildren.length) {\r\n this.elem.layerElement.removeChild(elemChildren[0]);\r\n }\r\n }\r\n this.elem.layerElement.appendChild(groupPath);\r\n this.elem.layerElement.removeAttribute('mask');\r\n groupPath.setAttribute('stroke', '#fff');\r\n }\r\n this.initialized = true;\r\n this.pathMasker = groupPath;\r\n};\r\n\r\nSVGStrokeEffect.prototype.renderFrame = function (forceRender) {\r\n if (!this.initialized) {\r\n this.initialize();\r\n }\r\n var i;\r\n var len = this.paths.length;\r\n var mask;\r\n var path;\r\n for (i = 0; i < len; i += 1) {\r\n if (this.paths[i].m !== -1) {\r\n mask = this.elem.maskManager.viewData[this.paths[i].m];\r\n path = this.paths[i].p;\r\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\r\n path.setAttribute('d', mask.lastPath);\r\n }\r\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\r\n var dasharrayValue;\r\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\r\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\r\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\r\n var l = path.getTotalLength();\r\n dasharrayValue = '0 0 0 ' + l * s + ' ';\r\n var lineLength = l * (e - s);\r\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\r\n var units = Math.floor(lineLength / segment);\r\n var j;\r\n for (j = 0; j < units; j += 1) {\r\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\r\n }\r\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\r\n } else {\r\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\r\n }\r\n path.setAttribute('stroke-dasharray', dasharrayValue);\r\n }\r\n }\r\n }\r\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\r\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\r\n }\r\n\r\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\r\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\r\n }\r\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\r\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\r\n var color = this.filterManager.effectElements[3].p.v;\r\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\r\n }\r\n }\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGTritoneFilter(filter, filterManager) {\r\n this.filterManager = filterManager;\r\n var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\r\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result', 'f1');\r\n filter.appendChild(feColorMatrix);\r\n var feComponentTransfer = createNS('feComponentTransfer');\r\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n this.matrixFilter = feComponentTransfer;\r\n var feFuncR = createNS('feFuncR');\r\n feFuncR.setAttribute('type', 'table');\r\n feComponentTransfer.appendChild(feFuncR);\r\n this.feFuncR = feFuncR;\r\n var feFuncG = createNS('feFuncG');\r\n feFuncG.setAttribute('type', 'table');\r\n feComponentTransfer.appendChild(feFuncG);\r\n this.feFuncG = feFuncG;\r\n var feFuncB = createNS('feFuncB');\r\n feFuncB.setAttribute('type', 'table');\r\n feComponentTransfer.appendChild(feFuncB);\r\n this.feFuncB = feFuncB;\r\n}\r\n\r\nSVGTritoneFilter.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n var color1 = this.filterManager.effectElements[0].p.v;\r\n var color2 = this.filterManager.effectElements[1].p.v;\r\n var color3 = this.filterManager.effectElements[2].p.v;\r\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\r\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\r\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\r\n this.feFuncR.setAttribute('tableValues', tableR);\r\n this.feFuncG.setAttribute('tableValues', tableG);\r\n this.feFuncB.setAttribute('tableValues', tableB);\r\n // var opacity = this.filterManager.effectElements[2].p.v/100;\r\n // this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');\r\n }\r\n};\r\n\r\n/* global createNS */\r\n\r\nfunction SVGProLevelsFilter(filter, filterManager) {\r\n this.filterManager = filterManager;\r\n var effectElements = this.filterManager.effectElements;\r\n var feComponentTransfer = createNS('feComponentTransfer');\r\n\r\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\r\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\r\n }\r\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\r\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\r\n }\r\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\r\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\r\n }\r\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\r\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\r\n }\r\n\r\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\r\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n feComponentTransfer = createNS('feComponentTransfer');\r\n }\r\n\r\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\r\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\r\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\r\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\r\n }\r\n}\r\n\r\nSVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\r\n var feFunc = createNS(type);\r\n feFunc.setAttribute('type', 'table');\r\n feComponentTransfer.appendChild(feFunc);\r\n return feFunc;\r\n};\r\n\r\nSVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\r\n var cnt = 0;\r\n var segments = 256;\r\n var perc;\r\n var min = Math.min(inputBlack, inputWhite);\r\n var max = Math.max(inputBlack, inputWhite);\r\n var table = Array.call(null, { length: segments });\r\n var colorValue;\r\n var pos = 0;\r\n var outputDelta = outputWhite - outputBlack;\r\n var inputDelta = inputWhite - inputBlack;\r\n while (cnt <= 256) {\r\n perc = cnt / 256;\r\n if (perc <= min) {\r\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\r\n } else if (perc >= max) {\r\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\r\n } else {\r\n colorValue = (outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma));\r\n }\r\n table[pos] = colorValue;\r\n pos += 1;\r\n cnt += 256 / (segments - 1);\r\n }\r\n return table.join(' ');\r\n};\r\n\r\nSVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n var val;\r\n var effectElements = this.filterManager.effectElements;\r\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\r\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\r\n this.feFuncRComposed.setAttribute('tableValues', val);\r\n this.feFuncGComposed.setAttribute('tableValues', val);\r\n this.feFuncBComposed.setAttribute('tableValues', val);\r\n }\r\n\r\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\r\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\r\n this.feFuncR.setAttribute('tableValues', val);\r\n }\r\n\r\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\r\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\r\n this.feFuncG.setAttribute('tableValues', val);\r\n }\r\n\r\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\r\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\r\n this.feFuncB.setAttribute('tableValues', val);\r\n }\r\n\r\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\r\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\r\n this.feFuncA.setAttribute('tableValues', val);\r\n }\r\n }\r\n};\r\n\r\n/* global createNS, rgbToHex, degToRads */\r\n\r\nfunction SVGDropShadowEffect(filter, filterManager) {\r\n var filterSize = filterManager.container.globalData.renderConfig.filterSize;\r\n filter.setAttribute('x', filterSize.x);\r\n filter.setAttribute('y', filterSize.y);\r\n filter.setAttribute('width', filterSize.width);\r\n filter.setAttribute('height', filterSize.height);\r\n this.filterManager = filterManager;\r\n\r\n var feGaussianBlur = createNS('feGaussianBlur');\r\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\r\n feGaussianBlur.setAttribute('result', 'drop_shadow_1');\r\n feGaussianBlur.setAttribute('stdDeviation', '0');\r\n this.feGaussianBlur = feGaussianBlur;\r\n filter.appendChild(feGaussianBlur);\r\n\r\n var feOffset = createNS('feOffset');\r\n feOffset.setAttribute('dx', '25');\r\n feOffset.setAttribute('dy', '0');\r\n feOffset.setAttribute('in', 'drop_shadow_1');\r\n feOffset.setAttribute('result', 'drop_shadow_2');\r\n this.feOffset = feOffset;\r\n filter.appendChild(feOffset);\r\n var feFlood = createNS('feFlood');\r\n feFlood.setAttribute('flood-color', '#00ff00');\r\n feFlood.setAttribute('flood-opacity', '1');\r\n feFlood.setAttribute('result', 'drop_shadow_3');\r\n this.feFlood = feFlood;\r\n filter.appendChild(feFlood);\r\n\r\n var feComposite = createNS('feComposite');\r\n feComposite.setAttribute('in', 'drop_shadow_3');\r\n feComposite.setAttribute('in2', 'drop_shadow_2');\r\n feComposite.setAttribute('operator', 'in');\r\n feComposite.setAttribute('result', 'drop_shadow_4');\r\n filter.appendChild(feComposite);\r\n\r\n var feMerge = createNS('feMerge');\r\n filter.appendChild(feMerge);\r\n var feMergeNode;\r\n feMergeNode = createNS('feMergeNode');\r\n feMerge.appendChild(feMergeNode);\r\n feMergeNode = createNS('feMergeNode');\r\n feMergeNode.setAttribute('in', 'SourceGraphic');\r\n this.feMergeNode = feMergeNode;\r\n this.feMerge = feMerge;\r\n this.originalNodeAdded = false;\r\n feMerge.appendChild(feMergeNode);\r\n}\r\n\r\nSVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\r\n if (forceRender || this.filterManager._mdf) {\r\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\r\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\r\n }\r\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\r\n var col = this.filterManager.effectElements[0].p.v;\r\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\r\n }\r\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\r\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\r\n }\r\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\r\n var distance = this.filterManager.effectElements[3].p.v;\r\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\r\n var x = distance * Math.cos(angle);\r\n var y = distance * Math.sin(angle);\r\n this.feOffset.setAttribute('dx', x);\r\n this.feOffset.setAttribute('dy', y);\r\n }\r\n /* if(forceRender || this.filterManager.effectElements[5].p._mdf){\r\n if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n this.feMerge.removeChild(this.feMergeNode);\r\n this.originalNodeAdded = false;\r\n } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n this.feMerge.appendChild(this.feMergeNode);\r\n this.originalNodeAdded = true;\r\n }\r\n } */\r\n }\r\n};\r\n\r\n/* global createElementID, createNS */\r\n\r\nvar _svgMatteSymbols = [];\r\n\r\nfunction SVGMatte3Effect(filterElem, filterManager, elem) {\r\n this.initialized = false;\r\n this.filterManager = filterManager;\r\n this.filterElem = filterElem;\r\n this.elem = elem;\r\n elem.matteElement = createNS('g');\r\n elem.matteElement.appendChild(elem.layerElement);\r\n elem.matteElement.appendChild(elem.transformedElement);\r\n elem.baseElement = elem.matteElement;\r\n}\r\n\r\nSVGMatte3Effect.prototype.findSymbol = function (mask) {\r\n var i = 0;\r\n var len = _svgMatteSymbols.length;\r\n while (i < len) {\r\n if (_svgMatteSymbols[i] === mask) {\r\n return _svgMatteSymbols[i];\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n};\r\n\r\nSVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\r\n var parentNode = mask.layerElement.parentNode;\r\n if (!parentNode) {\r\n return;\r\n }\r\n var children = parentNode.children;\r\n var i = 0;\r\n var len = children.length;\r\n while (i < len) {\r\n if (children[i] === mask.layerElement) {\r\n break;\r\n }\r\n i += 1;\r\n }\r\n var nextChild;\r\n if (i <= len - 2) {\r\n nextChild = children[i + 1];\r\n }\r\n var useElem = createNS('use');\r\n useElem.setAttribute('href', '#' + symbolId);\r\n if (nextChild) {\r\n parentNode.insertBefore(useElem, nextChild);\r\n } else {\r\n parentNode.appendChild(useElem);\r\n }\r\n};\r\n\r\nSVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\r\n if (!this.findSymbol(mask)) {\r\n var symbolId = createElementID();\r\n var masker = createNS('mask');\r\n masker.setAttribute('id', mask.layerId);\r\n masker.setAttribute('mask-type', 'alpha');\r\n _svgMatteSymbols.push(mask);\r\n var defs = elem.globalData.defs;\r\n defs.appendChild(masker);\r\n var symbol = createNS('symbol');\r\n symbol.setAttribute('id', symbolId);\r\n this.replaceInParent(mask, symbolId);\r\n symbol.appendChild(mask.layerElement);\r\n defs.appendChild(symbol);\r\n var useElem = createNS('use');\r\n useElem.setAttribute('href', '#' + symbolId);\r\n masker.appendChild(useElem);\r\n mask.data.hd = false;\r\n mask.show();\r\n }\r\n elem.setMatte(mask.layerId);\r\n};\r\n\r\nSVGMatte3Effect.prototype.initialize = function () {\r\n var ind = this.filterManager.effectElements[0].p.v;\r\n var elements = this.elem.comp.elements;\r\n var i = 0;\r\n var len = elements.length;\r\n while (i < len) {\r\n if (elements[i] && elements[i].data.ind === ind) {\r\n this.setElementAsMask(this.elem, elements[i]);\r\n }\r\n i += 1;\r\n }\r\n this.initialized = true;\r\n};\r\n\r\nSVGMatte3Effect.prototype.renderFrame = function () {\r\n if (!this.initialized) {\r\n this.initialize();\r\n }\r\n};\r\n\r\n/* global createElementID, filtersFactory, SVGTintFilter, SVGFillFilter, SVGStrokeEffect, SVGTritoneFilter,\r\nSVGProLevelsFilter, SVGDropShadowEffect, SVGMatte3Effect, SVGGaussianBlurEffect, locationHref */\r\n\r\nfunction SVGEffects(elem) {\r\n var i;\r\n var len = elem.data.ef ? elem.data.ef.length : 0;\r\n var filId = createElementID();\r\n var fil = filtersFactory.createFilter(filId, true);\r\n var count = 0;\r\n this.filters = [];\r\n var filterManager;\r\n for (i = 0; i < len; i += 1) {\r\n filterManager = null;\r\n if (elem.data.ef[i].ty === 20) {\r\n count += 1;\r\n filterManager = new SVGTintFilter(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 21) {\r\n count += 1;\r\n filterManager = new SVGFillFilter(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 22) {\r\n filterManager = new SVGStrokeEffect(elem, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 23) {\r\n count += 1;\r\n filterManager = new SVGTritoneFilter(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 24) {\r\n count += 1;\r\n filterManager = new SVGProLevelsFilter(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 25) {\r\n count += 1;\r\n filterManager = new SVGDropShadowEffect(fil, elem.effectsManager.effectElements[i]);\r\n } else if (elem.data.ef[i].ty === 28) {\r\n // count += 1;\r\n filterManager = new SVGMatte3Effect(fil, elem.effectsManager.effectElements[i], elem);\r\n } else if (elem.data.ef[i].ty === 29) {\r\n count += 1;\r\n filterManager = new SVGGaussianBlurEffect(fil, elem.effectsManager.effectElements[i]);\r\n }\r\n if (filterManager) {\r\n this.filters.push(filterManager);\r\n }\r\n }\r\n if (count) {\r\n elem.globalData.defs.appendChild(fil);\r\n elem.layerElement.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\r\n }\r\n if (this.filters.length) {\r\n elem.addRenderableComponent(this);\r\n }\r\n}\r\n\r\nSVGEffects.prototype.renderFrame = function (_isFirstFrame) {\r\n var i;\r\n var len = this.filters.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.filters[i].renderFrame(_isFirstFrame);\r\n }\r\n};\r\n\r\n/* global Matrix, createTypedArray */\r\n\r\nfunction CVContextData() {\r\n this.saved = [];\r\n this.cArrPos = 0;\r\n this.cTr = new Matrix();\r\n this.cO = 1;\r\n var i;\r\n var len = 15;\r\n this.savedOp = createTypedArray('float32', len);\r\n for (i = 0; i < len; i += 1) {\r\n this.saved[i] = createTypedArray('float32', 16);\r\n }\r\n this._length = len;\r\n}\r\n\r\nCVContextData.prototype.duplicate = function () {\r\n var newLength = this._length * 2;\r\n var currentSavedOp = this.savedOp;\r\n this.savedOp = createTypedArray('float32', newLength);\r\n this.savedOp.set(currentSavedOp);\r\n var i = 0;\r\n for (i = this._length; i < newLength; i += 1) {\r\n this.saved[i] = createTypedArray('float32', 16);\r\n }\r\n this._length = newLength;\r\n};\r\n\r\nCVContextData.prototype.reset = function () {\r\n this.cArrPos = 0;\r\n this.cTr.reset();\r\n this.cO = 1;\r\n};\r\n\r\n/* global CVEffects, getBlendMode, CVMaskElement, Matrix */\r\n\r\nfunction CVBaseElement() {\r\n}\r\n\r\nCVBaseElement.prototype = {\r\n createElements: function () {},\r\n initRendererElement: function () {},\r\n createContainerElements: function () {\r\n this.canvasContext = this.globalData.canvasContext;\r\n this.renderableEffectsManager = new CVEffects(this);\r\n },\r\n createContent: function () {},\r\n setBlendMode: function () {\r\n var globalData = this.globalData;\r\n if (globalData.blendMode !== this.data.bm) {\r\n globalData.blendMode = this.data.bm;\r\n var blendModeValue = getBlendMode(this.data.bm);\r\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\r\n }\r\n },\r\n createRenderableComponents: function () {\r\n this.maskManager = new CVMaskElement(this.data, this);\r\n },\r\n hideElement: function () {\r\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\r\n this.hidden = true;\r\n }\r\n },\r\n showElement: function () {\r\n if (this.isInRange && !this.isTransparent) {\r\n this.hidden = false;\r\n this._isFirstFrame = true;\r\n this.maskManager._isFirstFrame = true;\r\n }\r\n },\r\n renderFrame: function () {\r\n if (this.hidden || this.data.hd) {\r\n return;\r\n }\r\n this.renderTransform();\r\n this.renderRenderable();\r\n this.setBlendMode();\r\n var forceRealStack = this.data.ty === 0;\r\n this.globalData.renderer.save(forceRealStack);\r\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\r\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\r\n this.renderInnerContent();\r\n this.globalData.renderer.restore(forceRealStack);\r\n if (this.maskManager.hasMasks) {\r\n this.globalData.renderer.restore(true);\r\n }\r\n if (this._isFirstFrame) {\r\n this._isFirstFrame = false;\r\n }\r\n },\r\n destroy: function () {\r\n this.canvasContext = null;\r\n this.data = null;\r\n this.globalData = null;\r\n this.maskManager.destroy();\r\n },\r\n mHelper: new Matrix(),\r\n};\r\nCVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\r\nCVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, CVBaseElement,HierarchyElement, FrameElement,\r\nRenderableElement, SVGShapeElement, IImageElement, createTag */\r\n\r\nfunction CVImageElement(data, globalData, comp) {\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.img = globalData.imageLoader.getAsset(this.assetData);\r\n this.initElement(data, globalData, comp);\r\n}\r\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\r\n\r\nCVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\r\nCVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\r\n\r\nCVImageElement.prototype.createContent = function () {\r\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\r\n var canvas = createTag('canvas');\r\n canvas.width = this.assetData.w;\r\n canvas.height = this.assetData.h;\r\n var ctx = canvas.getContext('2d');\r\n\r\n var imgW = this.img.width;\r\n var imgH = this.img.height;\r\n var imgRel = imgW / imgH;\r\n var canvasRel = this.assetData.w / this.assetData.h;\r\n var widthCrop;\r\n var heightCrop;\r\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\r\n if ((imgRel > canvasRel && par === 'xMidYMid slice') || (imgRel < canvasRel && par !== 'xMidYMid slice')) {\r\n heightCrop = imgH;\r\n widthCrop = heightCrop * canvasRel;\r\n } else {\r\n widthCrop = imgW;\r\n heightCrop = widthCrop / canvasRel;\r\n }\r\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\r\n this.img = canvas;\r\n }\r\n};\r\n\r\nCVImageElement.prototype.renderInnerContent = function () {\r\n this.canvasContext.drawImage(this.img, 0, 0);\r\n};\r\n\r\nCVImageElement.prototype.destroy = function () {\r\n this.img = null;\r\n};\r\n\r\n/* global createSizedArray, PropertyFactory, extendPrototype, CanvasRenderer, ICompElement, CVBaseElement */\r\n\r\nfunction CVCompElement(data, globalData, comp) {\r\n this.completeLayers = false;\r\n this.layers = data.layers;\r\n this.pendingElements = [];\r\n this.elements = createSizedArray(this.layers.length);\r\n this.initElement(data, globalData, comp);\r\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\r\n}\r\n\r\nextendPrototype([CanvasRenderer, ICompElement, CVBaseElement], CVCompElement);\r\n\r\nCVCompElement.prototype.renderInnerContent = function () {\r\n var ctx = this.canvasContext;\r\n ctx.beginPath();\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(this.data.w, 0);\r\n ctx.lineTo(this.data.w, this.data.h);\r\n ctx.lineTo(0, this.data.h);\r\n ctx.lineTo(0, 0);\r\n ctx.clip();\r\n var i;\r\n var len = this.layers.length;\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.completeLayers || this.elements[i]) {\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n};\r\n\r\nCVCompElement.prototype.destroy = function () {\r\n var i;\r\n var len = this.layers.length;\r\n for (i = len - 1; i >= 0; i -= 1) {\r\n if (this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n this.layers = null;\r\n this.elements = null;\r\n};\r\n\r\n/* global createSizedArray, ShapePropertyFactory, MaskElement */\r\n\r\nfunction CVMaskElement(data, element) {\r\n this.data = data;\r\n this.element = element;\r\n this.masksProperties = this.data.masksProperties || [];\r\n this.viewData = createSizedArray(this.masksProperties.length);\r\n var i;\r\n var len = this.masksProperties.length;\r\n var hasMasks = false;\r\n for (i = 0; i < len; i += 1) {\r\n if (this.masksProperties[i].mode !== 'n') {\r\n hasMasks = true;\r\n }\r\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\r\n }\r\n this.hasMasks = hasMasks;\r\n if (hasMasks) {\r\n this.element.addRenderableComponent(this);\r\n }\r\n}\r\n\r\nCVMaskElement.prototype.renderFrame = function () {\r\n if (!this.hasMasks) {\r\n return;\r\n }\r\n var transform = this.element.finalTransform.mat;\r\n var ctx = this.element.canvasContext;\r\n var i;\r\n var len = this.masksProperties.length;\r\n var pt;\r\n var pts;\r\n var data;\r\n ctx.beginPath();\r\n for (i = 0; i < len; i += 1) {\r\n if (this.masksProperties[i].mode !== 'n') {\r\n if (this.masksProperties[i].inv) {\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(this.element.globalData.compSize.w, 0);\r\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\r\n ctx.lineTo(0, this.element.globalData.compSize.h);\r\n ctx.lineTo(0, 0);\r\n }\r\n data = this.viewData[i].v;\r\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\r\n ctx.moveTo(pt[0], pt[1]);\r\n var j;\r\n var jLen = data._length;\r\n for (j = 1; j < jLen; j += 1) {\r\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\r\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\r\n }\r\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\r\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\r\n }\r\n }\r\n this.element.globalData.renderer.save(true);\r\n ctx.clip();\r\n};\r\n\r\nCVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\r\n\r\nCVMaskElement.prototype.destroy = function () {\r\n this.element = null;\r\n};\r\n\r\n/* global ShapeTransformManager, extendPrototype, BaseElement, TransformElement, CVBaseElement, IShapeElement,\r\nHierarchyElement, FrameElement, RenderableElement, RenderableDOMElement, PropertyFactory, degToRads, GradientProperty,\r\nDashProperty, TransformPropertyFactory, CVShapeData, ShapeModifiers, bmFloor */\r\n\r\nfunction CVShapeElement(data, globalData, comp) {\r\n this.shapes = [];\r\n this.shapesData = data.shapes;\r\n this.stylesList = [];\r\n this.itemsData = [];\r\n this.prevViewData = [];\r\n this.shapeModifiers = [];\r\n this.processedElements = [];\r\n this.transformsManager = new ShapeTransformManager();\r\n this.initElement(data, globalData, comp);\r\n}\r\n\r\nextendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\r\n\r\nCVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\r\n\r\nCVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: false };\r\n\r\nCVShapeElement.prototype.dashResetter = [];\r\n\r\nCVShapeElement.prototype.createContent = function () {\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\r\n};\r\n\r\nCVShapeElement.prototype.createStyleElement = function (data, transforms) {\r\n var styleElem = {\r\n data: data,\r\n type: data.ty,\r\n preTransforms: this.transformsManager.addTransformSequence(transforms),\r\n transforms: [],\r\n elements: [],\r\n closed: data.hd === true,\r\n };\r\n var elementData = {};\r\n if (data.ty === 'fl' || data.ty === 'st') {\r\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\r\n if (!elementData.c.k) {\r\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\r\n }\r\n } else if (data.ty === 'gf' || data.ty === 'gs') {\r\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\r\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\r\n elementData.h = PropertyFactory.getProp(this, data.h || { k: 0 }, 0, 0.01, this);\r\n elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this);\r\n elementData.g = new GradientProperty(this, data.g, this);\r\n }\r\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\r\n if (data.ty === 'st' || data.ty === 'gs') {\r\n styleElem.lc = this.lcEnum[data.lc] || 'round';\r\n styleElem.lj = this.ljEnum[data.lj] || 'round';\r\n if (data.lj == 1) { // eslint-disable-line eqeqeq\r\n styleElem.ml = data.ml;\r\n }\r\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\r\n if (!elementData.w.k) {\r\n styleElem.wi = elementData.w.v;\r\n }\r\n if (data.d) {\r\n var d = new DashProperty(this, data.d, 'canvas', this);\r\n elementData.d = d;\r\n if (!elementData.d.k) {\r\n styleElem.da = elementData.d.dashArray;\r\n styleElem.do = elementData.d.dashoffset[0];\r\n }\r\n }\r\n } else {\r\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\r\n }\r\n this.stylesList.push(styleElem);\r\n elementData.style = styleElem;\r\n return elementData;\r\n};\r\n\r\nCVShapeElement.prototype.createGroupElement = function () {\r\n var elementData = {\r\n it: [],\r\n prevViewData: [],\r\n };\r\n return elementData;\r\n};\r\n\r\nCVShapeElement.prototype.createTransformElement = function (data) {\r\n var elementData = {\r\n transform: {\r\n opacity: 1,\r\n _opMdf: false,\r\n key: this.transformsManager.getNewKey(),\r\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\r\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this),\r\n },\r\n };\r\n return elementData;\r\n};\r\n\r\nCVShapeElement.prototype.createShapeElement = function (data) {\r\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\r\n\r\n this.shapes.push(elementData);\r\n this.addShapeToModifiers(elementData);\r\n return elementData;\r\n};\r\n\r\nCVShapeElement.prototype.reloadShapes = function () {\r\n this._isFirstFrame = true;\r\n var i;\r\n var len = this.itemsData.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.prevViewData[i] = this.itemsData[i];\r\n }\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\r\n len = this.dynamicProperties.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.dynamicProperties[i].getValue();\r\n }\r\n this.renderModifiers();\r\n this.transformsManager.processSequences(this._isFirstFrame);\r\n};\r\n\r\nCVShapeElement.prototype.addTransformToStyleList = function (transform) {\r\n var i;\r\n var len = this.stylesList.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (!this.stylesList[i].closed) {\r\n this.stylesList[i].transforms.push(transform);\r\n }\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.removeTransformFromStyleList = function () {\r\n var i;\r\n var len = this.stylesList.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (!this.stylesList[i].closed) {\r\n this.stylesList[i].transforms.pop();\r\n }\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.closeStyles = function (styles) {\r\n var i;\r\n var len = styles.length;\r\n for (i = 0; i < len; i += 1) {\r\n styles[i].closed = true;\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\r\n var i;\r\n var len = arr.length - 1;\r\n var j;\r\n var jLen;\r\n var ownStyles = [];\r\n var ownModifiers = [];\r\n var processedPos;\r\n var modifier;\r\n var currentTransform;\r\n var ownTransforms = [].concat(transforms);\r\n for (i = len; i >= 0; i -= 1) {\r\n processedPos = this.searchProcessedElement(arr[i]);\r\n if (!processedPos) {\r\n arr[i]._shouldRender = shouldRender;\r\n } else {\r\n itemsData[i] = prevViewData[processedPos - 1];\r\n }\r\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\r\n } else {\r\n itemsData[i].style.closed = false;\r\n }\r\n\r\n ownStyles.push(itemsData[i].style);\r\n } else if (arr[i].ty === 'gr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createGroupElement(arr[i]);\r\n } else {\r\n jLen = itemsData[i].it.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\r\n }\r\n }\r\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\r\n } else if (arr[i].ty === 'tr') {\r\n if (!processedPos) {\r\n currentTransform = this.createTransformElement(arr[i]);\r\n itemsData[i] = currentTransform;\r\n }\r\n ownTransforms.push(itemsData[i]);\r\n this.addTransformToStyleList(itemsData[i]);\r\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\r\n if (!processedPos) {\r\n itemsData[i] = this.createShapeElement(arr[i]);\r\n }\r\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\r\n if (!processedPos) {\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n modifier.init(this, arr[i]);\r\n itemsData[i] = modifier;\r\n this.shapeModifiers.push(modifier);\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = false;\r\n }\r\n ownModifiers.push(modifier);\r\n } else if (arr[i].ty === 'rp') {\r\n if (!processedPos) {\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n itemsData[i] = modifier;\r\n modifier.init(this, arr, i, itemsData);\r\n this.shapeModifiers.push(modifier);\r\n shouldRender = false;\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = true;\r\n }\r\n ownModifiers.push(modifier);\r\n }\r\n this.addProcessedElement(arr[i], i + 1);\r\n }\r\n this.removeTransformFromStyleList();\r\n this.closeStyles(ownStyles);\r\n len = ownModifiers.length;\r\n for (i = 0; i < len; i += 1) {\r\n ownModifiers[i].closed = true;\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.renderInnerContent = function () {\r\n this.transformHelper.opacity = 1;\r\n this.transformHelper._opMdf = false;\r\n this.renderModifiers();\r\n this.transformsManager.processSequences(this._isFirstFrame);\r\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\r\n};\r\n\r\nCVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\r\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\r\n groupTransform.opacity = parentTransform.opacity;\r\n groupTransform.opacity *= groupTransform.op.v;\r\n groupTransform._opMdf = true;\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.drawLayer = function () {\r\n var i;\r\n var len = this.stylesList.length;\r\n var j;\r\n var jLen;\r\n var k;\r\n var kLen;\r\n var elems;\r\n var nodes;\r\n var renderer = this.globalData.renderer;\r\n var ctx = this.globalData.canvasContext;\r\n var type;\r\n var currentStyle;\r\n for (i = 0; i < len; i += 1) {\r\n currentStyle = this.stylesList[i];\r\n type = currentStyle.type;\r\n\r\n // Skipping style when\r\n // Stroke width equals 0\r\n // style should not be rendered (extra unused repeaters)\r\n // current opacity equals 0\r\n // global opacity equals 0\r\n if (!(((type === 'st' || type === 'gs') && currentStyle.wi === 0) || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\r\n renderer.save();\r\n elems = currentStyle.elements;\r\n if (type === 'st' || type === 'gs') {\r\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\r\n ctx.lineWidth = currentStyle.wi;\r\n ctx.lineCap = currentStyle.lc;\r\n ctx.lineJoin = currentStyle.lj;\r\n ctx.miterLimit = currentStyle.ml || 0;\r\n } else {\r\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\r\n }\r\n renderer.ctxOpacity(currentStyle.coOp);\r\n if (type !== 'st' && type !== 'gs') {\r\n ctx.beginPath();\r\n }\r\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\r\n jLen = elems.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n if (type === 'st' || type === 'gs') {\r\n ctx.beginPath();\r\n if (currentStyle.da) {\r\n ctx.setLineDash(currentStyle.da);\r\n ctx.lineDashOffset = currentStyle.do;\r\n }\r\n }\r\n nodes = elems[j].trNodes;\r\n kLen = nodes.length;\r\n\r\n for (k = 0; k < kLen; k += 1) {\r\n if (nodes[k].t === 'm') {\r\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\r\n } else if (nodes[k].t === 'c') {\r\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\r\n } else {\r\n ctx.closePath();\r\n }\r\n }\r\n if (type === 'st' || type === 'gs') {\r\n ctx.stroke();\r\n if (currentStyle.da) {\r\n ctx.setLineDash(this.dashResetter);\r\n }\r\n }\r\n }\r\n if (type !== 'st' && type !== 'gs') {\r\n ctx.fill(currentStyle.r);\r\n }\r\n renderer.restore();\r\n }\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\r\n var i;\r\n var len = items.length - 1;\r\n var groupTransform;\r\n groupTransform = parentTransform;\r\n for (i = len; i >= 0; i -= 1) {\r\n if (items[i].ty === 'tr') {\r\n groupTransform = data[i].transform;\r\n this.renderShapeTransform(parentTransform, groupTransform);\r\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\r\n this.renderPath(items[i], data[i]);\r\n } else if (items[i].ty === 'fl') {\r\n this.renderFill(items[i], data[i], groupTransform);\r\n } else if (items[i].ty === 'st') {\r\n this.renderStroke(items[i], data[i], groupTransform);\r\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\r\n this.renderGradientFill(items[i], data[i], groupTransform);\r\n } else if (items[i].ty === 'gr') {\r\n this.renderShape(groupTransform, items[i].it, data[i].it);\r\n } else if (items[i].ty === 'tm') {\r\n //\r\n }\r\n }\r\n if (isMain) {\r\n this.drawLayer();\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\r\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\r\n var shapeNodes = styledShape.trNodes;\r\n var paths = shape.paths;\r\n var i;\r\n var len;\r\n var j;\r\n var jLen = paths._length;\r\n shapeNodes.length = 0;\r\n var groupTransformMat = styledShape.transforms.finalTransform;\r\n for (j = 0; j < jLen; j += 1) {\r\n var pathNodes = paths.shapes[j];\r\n if (pathNodes && pathNodes.v) {\r\n len = pathNodes._length;\r\n for (i = 1; i < len; i += 1) {\r\n if (i === 1) {\r\n shapeNodes.push({\r\n t: 'm',\r\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0),\r\n });\r\n }\r\n shapeNodes.push({\r\n t: 'c',\r\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]),\r\n });\r\n }\r\n if (len === 1) {\r\n shapeNodes.push({\r\n t: 'm',\r\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0),\r\n });\r\n }\r\n if (pathNodes.c && len) {\r\n shapeNodes.push({\r\n t: 'c',\r\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]),\r\n });\r\n shapeNodes.push({\r\n t: 'z',\r\n });\r\n }\r\n }\r\n }\r\n styledShape.trNodes = shapeNodes;\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.renderPath = function (pathData, itemData) {\r\n if (pathData.hd !== true && pathData._shouldRender) {\r\n var i;\r\n var len = itemData.styledShapes.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\r\n }\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\r\n var styleElem = itemData.style;\r\n\r\n if (itemData.c._mdf || this._isFirstFrame) {\r\n styleElem.co = 'rgb('\r\n + bmFloor(itemData.c.v[0]) + ','\r\n + bmFloor(itemData.c.v[1]) + ','\r\n + bmFloor(itemData.c.v[2]) + ')';\r\n }\r\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\r\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\r\n var styleElem = itemData.style;\r\n var grd;\r\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || (styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf))) {\r\n var ctx = this.globalData.canvasContext;\r\n var pt1 = itemData.s.v;\r\n var pt2 = itemData.e.v;\r\n if (styleData.t === 1) {\r\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\r\n } else {\r\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\r\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\r\n\r\n var percent = itemData.h.v;\r\n if (percent >= 1) {\r\n percent = 0.99;\r\n } else if (percent <= -1) {\r\n percent = -0.99;\r\n }\r\n var dist = rad * percent;\r\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\r\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\r\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\r\n }\r\n\r\n var i;\r\n var len = styleData.g.p;\r\n var cValues = itemData.g.c;\r\n var opacity = 1;\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\r\n opacity = itemData.g.o[i * 2 + 1];\r\n }\r\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\r\n }\r\n styleElem.grd = grd;\r\n }\r\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\r\n};\r\n\r\nCVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\r\n var styleElem = itemData.style;\r\n var d = itemData.d;\r\n if (d && (d._mdf || this._isFirstFrame)) {\r\n styleElem.da = d.dashArray;\r\n styleElem.do = d.dashoffset[0];\r\n }\r\n if (itemData.c._mdf || this._isFirstFrame) {\r\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\r\n }\r\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\r\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\r\n }\r\n if (itemData.w._mdf || this._isFirstFrame) {\r\n styleElem.wi = itemData.w.v;\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.destroy = function () {\r\n this.shapesData = null;\r\n this.globalData = null;\r\n this.canvasContext = null;\r\n this.stylesList.length = 0;\r\n this.itemsData.length = 0;\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement,\r\nSVGShapeElement, IImageElement */\r\n\r\nfunction CVSolidElement(data, globalData, comp) {\r\n this.initElement(data, globalData, comp);\r\n}\r\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\r\n\r\nCVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\r\nCVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\r\n\r\nCVSolidElement.prototype.renderInnerContent = function () {\r\n var ctx = this.canvasContext;\r\n ctx.fillStyle = this.data.sc;\r\n ctx.fillRect(0, 0, this.data.sw, this.data.sh);\r\n //\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement,\r\nRenderableElement, ITextElement, createTag, createSizedArray */\r\n\r\nfunction CVTextElement(data, globalData, comp) {\r\n this.textSpans = [];\r\n this.yOffset = 0;\r\n this.fillColorAnim = false;\r\n this.strokeColorAnim = false;\r\n this.strokeWidthAnim = false;\r\n this.stroke = false;\r\n this.fill = false;\r\n this.justifyOffset = 0;\r\n this.currentRender = null;\r\n this.renderType = 'canvas';\r\n this.values = {\r\n fill: 'rgba(0,0,0,0)',\r\n stroke: 'rgba(0,0,0,0)',\r\n sWidth: 0,\r\n fValue: '',\r\n };\r\n this.initElement(data, globalData, comp);\r\n}\r\nextendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\r\n\r\nCVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\r\n\r\nCVTextElement.prototype.buildNewText = function () {\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\r\n\r\n var hasFill = false;\r\n if (documentData.fc) {\r\n hasFill = true;\r\n this.values.fill = this.buildColor(documentData.fc);\r\n } else {\r\n this.values.fill = 'rgba(0,0,0,0)';\r\n }\r\n this.fill = hasFill;\r\n var hasStroke = false;\r\n if (documentData.sc) {\r\n hasStroke = true;\r\n this.values.stroke = this.buildColor(documentData.sc);\r\n this.values.sWidth = documentData.sw;\r\n }\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n var i;\r\n var len;\r\n var letters = documentData.l;\r\n var matrixHelper = this.mHelper;\r\n this.stroke = hasStroke;\r\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\r\n len = documentData.finalText.length;\r\n // this.tHelper.font = this.values.fValue;\r\n var charData;\r\n var shapeData;\r\n var k;\r\n var kLen;\r\n var shapes;\r\n var j;\r\n var jLen;\r\n var pathNodes;\r\n var commands;\r\n var pathArr;\r\n var singleShape = this.data.singleShape;\r\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\r\n var xPos = 0;\r\n var yPos = 0;\r\n var firstLine = true;\r\n var cnt = 0;\r\n for (i = 0; i < len; i += 1) {\r\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n shapeData = (charData && charData.data) || {};\r\n matrixHelper.reset();\r\n if (singleShape && letters[i].n) {\r\n xPos = -trackingOffset;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n firstLine = false;\r\n }\r\n\r\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\r\n jLen = shapes.length;\r\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\r\n if (singleShape) {\r\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\r\n }\r\n commands = createSizedArray(jLen);\r\n for (j = 0; j < jLen; j += 1) {\r\n kLen = shapes[j].ks.k.i.length;\r\n pathNodes = shapes[j].ks.k;\r\n pathArr = [];\r\n for (k = 1; k < kLen; k += 1) {\r\n if (k === 1) {\r\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\r\n }\r\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\r\n }\r\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\r\n commands[j] = pathArr;\r\n }\r\n if (singleShape) {\r\n xPos += letters[i].l;\r\n xPos += trackingOffset;\r\n }\r\n if (this.textSpans[cnt]) {\r\n this.textSpans[cnt].elem = commands;\r\n } else {\r\n this.textSpans[cnt] = { elem: commands };\r\n }\r\n cnt += 1;\r\n }\r\n};\r\n\r\nCVTextElement.prototype.renderInnerContent = function () {\r\n var ctx = this.canvasContext;\r\n ctx.font = this.values.fValue;\r\n ctx.lineCap = 'butt';\r\n ctx.lineJoin = 'miter';\r\n ctx.miterLimit = 4;\r\n\r\n if (!this.data.singleShape) {\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n }\r\n\r\n var i;\r\n var len;\r\n var j;\r\n var jLen;\r\n var k;\r\n var kLen;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n\r\n var letters = this.textProperty.currentData.l;\r\n\r\n len = letters.length;\r\n var renderedLetter;\r\n var lastFill = null;\r\n var lastStroke = null;\r\n var lastStrokeW = null;\r\n var commands;\r\n var pathArr;\r\n for (i = 0; i < len; i += 1) {\r\n if (!letters[i].n) {\r\n renderedLetter = renderedLetters[i];\r\n if (renderedLetter) {\r\n this.globalData.renderer.save();\r\n this.globalData.renderer.ctxTransform(renderedLetter.p);\r\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\r\n }\r\n if (this.fill) {\r\n if (renderedLetter && renderedLetter.fc) {\r\n if (lastFill !== renderedLetter.fc) {\r\n lastFill = renderedLetter.fc;\r\n ctx.fillStyle = renderedLetter.fc;\r\n }\r\n } else if (lastFill !== this.values.fill) {\r\n lastFill = this.values.fill;\r\n ctx.fillStyle = this.values.fill;\r\n }\r\n commands = this.textSpans[i].elem;\r\n jLen = commands.length;\r\n this.globalData.canvasContext.beginPath();\r\n for (j = 0; j < jLen; j += 1) {\r\n pathArr = commands[j];\r\n kLen = pathArr.length;\r\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\r\n for (k = 2; k < kLen; k += 6) {\r\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\r\n }\r\n }\r\n this.globalData.canvasContext.closePath();\r\n this.globalData.canvasContext.fill();\r\n /// ctx.fillText(this.textSpans[i].val,0,0);\r\n }\r\n if (this.stroke) {\r\n if (renderedLetter && renderedLetter.sw) {\r\n if (lastStrokeW !== renderedLetter.sw) {\r\n lastStrokeW = renderedLetter.sw;\r\n ctx.lineWidth = renderedLetter.sw;\r\n }\r\n } else if (lastStrokeW !== this.values.sWidth) {\r\n lastStrokeW = this.values.sWidth;\r\n ctx.lineWidth = this.values.sWidth;\r\n }\r\n if (renderedLetter && renderedLetter.sc) {\r\n if (lastStroke !== renderedLetter.sc) {\r\n lastStroke = renderedLetter.sc;\r\n ctx.strokeStyle = renderedLetter.sc;\r\n }\r\n } else if (lastStroke !== this.values.stroke) {\r\n lastStroke = this.values.stroke;\r\n ctx.strokeStyle = this.values.stroke;\r\n }\r\n commands = this.textSpans[i].elem;\r\n jLen = commands.length;\r\n this.globalData.canvasContext.beginPath();\r\n for (j = 0; j < jLen; j += 1) {\r\n pathArr = commands[j];\r\n kLen = pathArr.length;\r\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\r\n for (k = 2; k < kLen; k += 6) {\r\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\r\n }\r\n }\r\n this.globalData.canvasContext.closePath();\r\n this.globalData.canvasContext.stroke();\r\n /// ctx.strokeText(letters[i].val,0,0);\r\n }\r\n if (renderedLetter) {\r\n this.globalData.renderer.restore();\r\n }\r\n }\r\n }\r\n};\r\n\r\nfunction CVEffects() {\r\n\r\n}\r\nCVEffects.prototype.renderFrame = function () {};\r\n\r\n/* global createTag, createNS, styleDiv, CVEffects, MaskElement, SVGBaseElement, HybridRenderer */\r\n\r\nfunction HBaseElement() {}\r\nHBaseElement.prototype = {\r\n checkBlendMode: function () {},\r\n initRendererElement: function () {\r\n this.baseElement = createTag(this.data.tg || 'div');\r\n if (this.data.hasMask) {\r\n this.svgElement = createNS('svg');\r\n this.layerElement = createNS('g');\r\n this.maskedElement = this.layerElement;\r\n this.svgElement.appendChild(this.layerElement);\r\n this.baseElement.appendChild(this.svgElement);\r\n } else {\r\n this.layerElement = this.baseElement;\r\n }\r\n styleDiv(this.baseElement);\r\n },\r\n createContainerElements: function () {\r\n this.renderableEffectsManager = new CVEffects(this);\r\n this.transformedElement = this.baseElement;\r\n this.maskedElement = this.layerElement;\r\n if (this.data.ln) {\r\n this.layerElement.setAttribute('id', this.data.ln);\r\n }\r\n if (this.data.cl) {\r\n this.layerElement.setAttribute('class', this.data.cl);\r\n }\r\n if (this.data.bm !== 0) {\r\n this.setBlendMode();\r\n }\r\n },\r\n renderElement: function () {\r\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\r\n if (this.finalTransform._matMdf) {\r\n var matrixValue = this.finalTransform.mat.toCSS();\r\n transformedElementStyle.transform = matrixValue;\r\n transformedElementStyle.webkitTransform = matrixValue;\r\n }\r\n if (this.finalTransform._opMdf) {\r\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\r\n }\r\n },\r\n renderFrame: function () {\r\n // If it is exported as hidden (data.hd === true) no need to render\r\n // If it is not visible no need to render\r\n if (this.data.hd || this.hidden) {\r\n return;\r\n }\r\n this.renderTransform();\r\n this.renderRenderable();\r\n this.renderElement();\r\n this.renderInnerContent();\r\n if (this._isFirstFrame) {\r\n this._isFirstFrame = false;\r\n }\r\n },\r\n destroy: function () {\r\n this.layerElement = null;\r\n this.transformedElement = null;\r\n if (this.matteElement) {\r\n this.matteElement = null;\r\n }\r\n if (this.maskManager) {\r\n this.maskManager.destroy();\r\n this.maskManager = null;\r\n }\r\n },\r\n createRenderableComponents: function () {\r\n this.maskManager = new MaskElement(this.data, this, this.globalData);\r\n },\r\n addEffects: function () {\r\n },\r\n setMatte: function () {},\r\n};\r\nHBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\r\nHBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\r\nHBaseElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement,\r\nRenderableDOMElement, createNS, createTag */\r\n\r\nfunction HSolidElement(data, globalData, comp) {\r\n this.initElement(data, globalData, comp);\r\n}\r\nextendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\r\n\r\nHSolidElement.prototype.createContent = function () {\r\n var rect;\r\n if (this.data.hasMask) {\r\n rect = createNS('rect');\r\n rect.setAttribute('width', this.data.sw);\r\n rect.setAttribute('height', this.data.sh);\r\n rect.setAttribute('fill', this.data.sc);\r\n this.svgElement.setAttribute('width', this.data.sw);\r\n this.svgElement.setAttribute('height', this.data.sh);\r\n } else {\r\n rect = createTag('div');\r\n rect.style.width = this.data.sw + 'px';\r\n rect.style.height = this.data.sh + 'px';\r\n rect.style.backgroundColor = this.data.sc;\r\n }\r\n this.layerElement.appendChild(rect);\r\n};\r\n\r\n/* global createSizedArray, PropertyFactory, extendPrototype, HybridRenderer, ICompElement, HBaseElement */\r\n\r\nfunction HCompElement(data, globalData, comp) {\r\n this.layers = data.layers;\r\n this.supports3d = !data.hasMask;\r\n this.completeLayers = false;\r\n this.pendingElements = [];\r\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\r\n this.initElement(data, globalData, comp);\r\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\r\n}\r\n\r\nextendPrototype([HybridRenderer, ICompElement, HBaseElement], HCompElement);\r\nHCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\r\n\r\nHCompElement.prototype.createContainerElements = function () {\r\n this._createBaseContainerElements();\r\n // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\r\n if (this.data.hasMask) {\r\n this.svgElement.setAttribute('width', this.data.w);\r\n this.svgElement.setAttribute('height', this.data.h);\r\n this.transformedElement = this.baseElement;\r\n } else {\r\n this.transformedElement = this.layerElement;\r\n }\r\n};\r\n\r\nHCompElement.prototype.addTo3dContainer = function (elem, pos) {\r\n var j = 0;\r\n var nextElement;\r\n while (j < pos) {\r\n if (this.elements[j] && this.elements[j].getBaseElement) {\r\n nextElement = this.elements[j].getBaseElement();\r\n }\r\n j += 1;\r\n }\r\n if (nextElement) {\r\n this.layerElement.insertBefore(elem, nextElement);\r\n } else {\r\n this.layerElement.appendChild(elem);\r\n }\r\n};\r\n\r\n/* global createNS, extendPrototype, BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement,\r\nHierarchyElement, FrameElement, RenderableElement, createNS, bmMin, bmSqrt, bmMin, bmMax, bmPow */\r\n\r\nfunction HShapeElement(data, globalData, comp) {\r\n // List of drawable elements\r\n this.shapes = [];\r\n // Full shape data\r\n this.shapesData = data.shapes;\r\n // List of styles that will be applied to shapes\r\n this.stylesList = [];\r\n // List of modifiers that will be applied to shapes\r\n this.shapeModifiers = [];\r\n // List of items in shape tree\r\n this.itemsData = [];\r\n // List of items in previous shape tree\r\n this.processedElements = [];\r\n // List of animated components\r\n this.animatedContents = [];\r\n this.shapesContainer = createNS('g');\r\n this.initElement(data, globalData, comp);\r\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\r\n // List of elements that have been created\r\n this.prevViewData = [];\r\n this.currentBBox = {\r\n x: 999999,\r\n y: -999999,\r\n h: 0,\r\n w: 0,\r\n };\r\n}\r\nextendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\r\nHShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\r\n\r\nHShapeElement.prototype.createContent = function () {\r\n var cont;\r\n this.baseElement.style.fontSize = 0;\r\n if (this.data.hasMask) {\r\n this.layerElement.appendChild(this.shapesContainer);\r\n cont = this.svgElement;\r\n } else {\r\n cont = createNS('svg');\r\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\r\n cont.setAttribute('width', size.w);\r\n cont.setAttribute('height', size.h);\r\n cont.appendChild(this.shapesContainer);\r\n this.layerElement.appendChild(cont);\r\n }\r\n\r\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\r\n this.filterUniqueShapes();\r\n this.shapeCont = cont;\r\n};\r\n\r\nHShapeElement.prototype.getTransformedPoint = function (transformers, point) {\r\n var i;\r\n var len = transformers.length;\r\n for (i = 0; i < len; i += 1) {\r\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\r\n }\r\n return point;\r\n};\r\n\r\nHShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\r\n var shape = item.sh.v;\r\n var transformers = item.transformers;\r\n var i;\r\n var len = shape._length;\r\n var vPoint;\r\n var oPoint;\r\n var nextIPoint;\r\n var nextVPoint;\r\n if (len <= 1) {\r\n return;\r\n }\r\n for (i = 0; i < len - 1; i += 1) {\r\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\r\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\r\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\r\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\r\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\r\n }\r\n if (shape.c) {\r\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\r\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\r\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\r\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\r\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\r\n }\r\n};\r\n\r\nHShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\r\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\r\n var bounds = this.shapeBoundingBox;\r\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\r\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\r\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\r\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\r\n};\r\n\r\nHShapeElement.prototype.shapeBoundingBox = {\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0,\r\n};\r\n\r\nHShapeElement.prototype.tempBoundingBox = {\r\n x: 0,\r\n xMax: 0,\r\n y: 0,\r\n yMax: 0,\r\n width: 0,\r\n height: 0,\r\n};\r\n\r\nHShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\r\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\r\n\r\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) { // eslint-disable-line no-plusplus\r\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\r\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\r\n c = 3 * p1[i] - 3 * p0[i];\r\n\r\n b |= 0; // eslint-disable-line no-bitwise\r\n a |= 0; // eslint-disable-line no-bitwise\r\n c |= 0; // eslint-disable-line no-bitwise\r\n\r\n if (a === 0 && b === 0) {\r\n //\r\n } else if (a === 0) {\r\n t = -c / b;\r\n\r\n if (t > 0 && t < 1) {\r\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\r\n }\r\n } else {\r\n b2ac = b * b - 4 * c * a;\r\n\r\n if (b2ac >= 0) {\r\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\r\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\r\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\r\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\r\n }\r\n }\r\n }\r\n\r\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\r\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\r\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\r\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\r\n};\r\n\r\nHShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\r\n return bmPow(1 - t, 3) * p0[i]\r\n + 3 * bmPow(1 - t, 2) * t * p1[i]\r\n + 3 * (1 - t) * bmPow(t, 2) * p2[i]\r\n + bmPow(t, 3) * p3[i];\r\n};\r\n\r\nHShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\r\n var i;\r\n var len = itemsData.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (itemsData[i] && itemsData[i].sh) {\r\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\r\n } else if (itemsData[i] && itemsData[i].it) {\r\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\r\n }\r\n }\r\n};\r\n\r\nHShapeElement.prototype.currentBoxContains = function (box) {\r\n return this.currentBBox.x <= box.x\r\n && this.currentBBox.y <= box.y\r\n && this.currentBBox.width + this.currentBBox.x >= box.x + box.width\r\n && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\r\n};\r\n\r\nHShapeElement.prototype.renderInnerContent = function () {\r\n this._renderShapeFrame();\r\n\r\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\r\n var tempBoundingBox = this.tempBoundingBox;\r\n var max = 999999;\r\n tempBoundingBox.x = max;\r\n tempBoundingBox.xMax = -max;\r\n tempBoundingBox.y = max;\r\n tempBoundingBox.yMax = -max;\r\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\r\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\r\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y;\r\n // var tempBoundingBox = this.shapeCont.getBBox();\r\n if (this.currentBoxContains(tempBoundingBox)) {\r\n return;\r\n }\r\n var changed = false;\r\n if (this.currentBBox.w !== tempBoundingBox.width) {\r\n this.currentBBox.w = tempBoundingBox.width;\r\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\r\n changed = true;\r\n }\r\n if (this.currentBBox.h !== tempBoundingBox.height) {\r\n this.currentBBox.h = tempBoundingBox.height;\r\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\r\n changed = true;\r\n }\r\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\r\n this.currentBBox.w = tempBoundingBox.width;\r\n this.currentBBox.h = tempBoundingBox.height;\r\n this.currentBBox.x = tempBoundingBox.x;\r\n this.currentBBox.y = tempBoundingBox.y;\r\n\r\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\r\n var shapeStyle = this.shapeCont.style;\r\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\r\n shapeStyle.transform = shapeTransform;\r\n shapeStyle.webkitTransform = shapeTransform;\r\n }\r\n }\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement,\r\nRenderableDOMElement, ITextElement, createSizedArray, createTag, styleDiv, createNS */\r\n\r\nfunction HTextElement(data, globalData, comp) {\r\n this.textSpans = [];\r\n this.textPaths = [];\r\n this.currentBBox = {\r\n x: 999999,\r\n y: -999999,\r\n h: 0,\r\n w: 0,\r\n };\r\n this.renderType = 'svg';\r\n this.isMasked = false;\r\n this.initElement(data, globalData, comp);\r\n}\r\nextendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\r\n\r\nHTextElement.prototype.createContent = function () {\r\n this.isMasked = this.checkMasks();\r\n if (this.isMasked) {\r\n this.renderType = 'svg';\r\n this.compW = this.comp.data.w;\r\n this.compH = this.comp.data.h;\r\n this.svgElement.setAttribute('width', this.compW);\r\n this.svgElement.setAttribute('height', this.compH);\r\n var g = createNS('g');\r\n this.maskedElement.appendChild(g);\r\n this.innerElem = g;\r\n } else {\r\n this.renderType = 'html';\r\n this.innerElem = this.layerElement;\r\n }\r\n\r\n this.checkParenting();\r\n};\r\n\r\nHTextElement.prototype.buildNewText = function () {\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\r\n var innerElemStyle = this.innerElem.style;\r\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\r\n innerElemStyle.fill = textColor;\r\n innerElemStyle.color = textColor;\r\n if (documentData.sc) {\r\n innerElemStyle.stroke = this.buildColor(documentData.sc);\r\n innerElemStyle.strokeWidth = documentData.sw + 'px';\r\n }\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n if (!this.globalData.fontManager.chars) {\r\n innerElemStyle.fontSize = documentData.finalSize + 'px';\r\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\r\n if (fontData.fClass) {\r\n this.innerElem.className = fontData.fClass;\r\n } else {\r\n innerElemStyle.fontFamily = fontData.fFamily;\r\n var fWeight = documentData.fWeight;\r\n var fStyle = documentData.fStyle;\r\n innerElemStyle.fontStyle = fStyle;\r\n innerElemStyle.fontWeight = fWeight;\r\n }\r\n }\r\n var i;\r\n var len;\r\n\r\n var letters = documentData.l;\r\n len = letters.length;\r\n var tSpan;\r\n var tParent;\r\n var tCont;\r\n var matrixHelper = this.mHelper;\r\n var shapes;\r\n var shapeStr = '';\r\n var cnt = 0;\r\n for (i = 0; i < len; i += 1) {\r\n if (this.globalData.fontManager.chars) {\r\n if (!this.textPaths[cnt]) {\r\n tSpan = createNS('path');\r\n tSpan.setAttribute('stroke-linecap', 'butt');\r\n tSpan.setAttribute('stroke-linejoin', 'round');\r\n tSpan.setAttribute('stroke-miterlimit', '4');\r\n } else {\r\n tSpan = this.textPaths[cnt];\r\n }\r\n if (!this.isMasked) {\r\n if (this.textSpans[cnt]) {\r\n tParent = this.textSpans[cnt];\r\n tCont = tParent.children[0];\r\n } else {\r\n tParent = createTag('div');\r\n tParent.style.lineHeight = 0;\r\n tCont = createNS('svg');\r\n tCont.appendChild(tSpan);\r\n styleDiv(tParent);\r\n }\r\n }\r\n } else if (!this.isMasked) {\r\n if (this.textSpans[cnt]) {\r\n tParent = this.textSpans[cnt];\r\n tSpan = this.textPaths[cnt];\r\n } else {\r\n tParent = createTag('span');\r\n styleDiv(tParent);\r\n tSpan = createTag('span');\r\n styleDiv(tSpan);\r\n tParent.appendChild(tSpan);\r\n }\r\n } else {\r\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\r\n }\r\n // tSpan.setAttribute('visibility', 'hidden');\r\n if (this.globalData.fontManager.chars) {\r\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n var shapeData;\r\n if (charData) {\r\n shapeData = charData.data;\r\n } else {\r\n shapeData = null;\r\n }\r\n matrixHelper.reset();\r\n if (shapeData && shapeData.shapes) {\r\n shapes = shapeData.shapes[0].it;\r\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\r\n shapeStr = this.createPathShape(matrixHelper, shapes);\r\n tSpan.setAttribute('d', shapeStr);\r\n }\r\n if (!this.isMasked) {\r\n this.innerElem.appendChild(tParent);\r\n if (shapeData && shapeData.shapes) {\r\n // document.body.appendChild is needed to get exact measure of shape\r\n document.body.appendChild(tCont);\r\n var boundingBox = tCont.getBBox();\r\n tCont.setAttribute('width', boundingBox.width + 2);\r\n tCont.setAttribute('height', boundingBox.height + 2);\r\n tCont.setAttribute('viewBox', (boundingBox.x - 1) + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\r\n var tContStyle = tCont.style;\r\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\r\n tContStyle.transform = tContTranslation;\r\n tContStyle.webkitTransform = tContTranslation;\r\n\r\n letters[i].yOffset = boundingBox.y - 1;\r\n } else {\r\n tCont.setAttribute('width', 1);\r\n tCont.setAttribute('height', 1);\r\n }\r\n tParent.appendChild(tCont);\r\n } else {\r\n this.innerElem.appendChild(tSpan);\r\n }\r\n } else {\r\n tSpan.textContent = letters[i].val;\r\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\r\n if (!this.isMasked) {\r\n this.innerElem.appendChild(tParent);\r\n //\r\n var tStyle = tSpan.style;\r\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\r\n tStyle.transform = tSpanTranslation;\r\n tStyle.webkitTransform = tSpanTranslation;\r\n } else {\r\n this.innerElem.appendChild(tSpan);\r\n }\r\n }\r\n //\r\n if (!this.isMasked) {\r\n this.textSpans[cnt] = tParent;\r\n } else {\r\n this.textSpans[cnt] = tSpan;\r\n }\r\n this.textSpans[cnt].style.display = 'block';\r\n this.textPaths[cnt] = tSpan;\r\n cnt += 1;\r\n }\r\n while (cnt < this.textSpans.length) {\r\n this.textSpans[cnt].style.display = 'none';\r\n cnt += 1;\r\n }\r\n};\r\n\r\nHTextElement.prototype.renderInnerContent = function () {\r\n var svgStyle;\r\n if (this.data.singleShape) {\r\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\r\n return;\r\n } if (this.isMasked && this.finalTransform._matMdf) {\r\n // Todo Benchmark if using this is better than getBBox\r\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\r\n svgStyle = this.svgElement.style;\r\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\r\n svgStyle.transform = translation;\r\n svgStyle.webkitTransform = translation;\r\n }\r\n }\r\n\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\r\n return;\r\n }\r\n var i;\r\n var len;\r\n var count = 0;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n\r\n var letters = this.textProperty.currentData.l;\r\n\r\n len = letters.length;\r\n var renderedLetter;\r\n var textSpan;\r\n var textPath;\r\n for (i = 0; i < len; i += 1) {\r\n if (letters[i].n) {\r\n count += 1;\r\n } else {\r\n textSpan = this.textSpans[i];\r\n textPath = this.textPaths[i];\r\n renderedLetter = renderedLetters[count];\r\n count += 1;\r\n if (renderedLetter._mdf.m) {\r\n if (!this.isMasked) {\r\n textSpan.style.webkitTransform = renderedLetter.m;\r\n textSpan.style.transform = renderedLetter.m;\r\n } else {\r\n textSpan.setAttribute('transform', renderedLetter.m);\r\n }\r\n }\r\n /// /textSpan.setAttribute('opacity',renderedLetter.o);\r\n textSpan.style.opacity = renderedLetter.o;\r\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\r\n textPath.setAttribute('stroke-width', renderedLetter.sw);\r\n }\r\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\r\n textPath.setAttribute('stroke', renderedLetter.sc);\r\n }\r\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\r\n textPath.setAttribute('fill', renderedLetter.fc);\r\n textPath.style.color = renderedLetter.fc;\r\n }\r\n }\r\n }\r\n\r\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\r\n var boundingBox = this.innerElem.getBBox();\r\n\r\n if (this.currentBBox.w !== boundingBox.width) {\r\n this.currentBBox.w = boundingBox.width;\r\n this.svgElement.setAttribute('width', boundingBox.width);\r\n }\r\n if (this.currentBBox.h !== boundingBox.height) {\r\n this.currentBBox.h = boundingBox.height;\r\n this.svgElement.setAttribute('height', boundingBox.height);\r\n }\r\n\r\n var margin = 1;\r\n if (this.currentBBox.w !== (boundingBox.width + margin * 2) || this.currentBBox.h !== (boundingBox.height + margin * 2) || this.currentBBox.x !== (boundingBox.x - margin) || this.currentBBox.y !== (boundingBox.y - margin)) {\r\n this.currentBBox.w = boundingBox.width + margin * 2;\r\n this.currentBBox.h = boundingBox.height + margin * 2;\r\n this.currentBBox.x = boundingBox.x - margin;\r\n this.currentBBox.y = boundingBox.y - margin;\r\n\r\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\r\n svgStyle = this.svgElement.style;\r\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\r\n svgStyle.transform = svgTransform;\r\n svgStyle.webkitTransform = svgTransform;\r\n }\r\n }\r\n};\r\n\r\n/* global extendPrototype, BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement,\r\nFrameElement, RenderableElement, createNS */\r\n\r\nfunction HImageElement(data, globalData, comp) {\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this.initElement(data, globalData, comp);\r\n}\r\n\r\nextendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\r\n\r\nHImageElement.prototype.createContent = function () {\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n var img = new Image();\r\n\r\n if (this.data.hasMask) {\r\n this.imageElem = createNS('image');\r\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\r\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\r\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\r\n this.layerElement.appendChild(this.imageElem);\r\n this.baseElement.setAttribute('width', this.assetData.w);\r\n this.baseElement.setAttribute('height', this.assetData.h);\r\n } else {\r\n this.layerElement.appendChild(img);\r\n }\r\n img.crossOrigin = 'anonymous';\r\n img.src = assetPath;\r\n if (this.data.ln) {\r\n this.baseElement.setAttribute('id', this.data.ln);\r\n }\r\n};\r\n\r\n/* global PropertyFactory, degToRads, Matrix, extendPrototype, BaseElement, FrameElement, HierarchyElement */\r\n\r\nfunction HCameraElement(data, globalData, comp) {\r\n this.initFrame();\r\n this.initBaseData(data, globalData, comp);\r\n this.initHierarchy();\r\n var getProp = PropertyFactory.getProp;\r\n this.pe = getProp(this, data.pe, 0, 0, this);\r\n if (data.ks.p.s) {\r\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\r\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\r\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\r\n } else {\r\n this.p = getProp(this, data.ks.p, 1, 0, this);\r\n }\r\n if (data.ks.a) {\r\n this.a = getProp(this, data.ks.a, 1, 0, this);\r\n }\r\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\r\n var i;\r\n var len = data.ks.or.k.length;\r\n for (i = 0; i < len; i += 1) {\r\n data.ks.or.k[i].to = null;\r\n data.ks.or.k[i].ti = null;\r\n }\r\n }\r\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\r\n this.or.sh = true;\r\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\r\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\r\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\r\n this.mat = new Matrix();\r\n this._prevMat = new Matrix();\r\n this._isFirstFrame = true;\r\n\r\n // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\r\n this.finalTransform = {\r\n mProp: this,\r\n };\r\n}\r\nextendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\r\n\r\nHCameraElement.prototype.setup = function () {\r\n var i;\r\n var len = this.comp.threeDElements.length;\r\n var comp;\r\n var perspectiveStyle;\r\n var containerStyle;\r\n for (i = 0; i < len; i += 1) {\r\n // [perspectiveElem,container]\r\n comp = this.comp.threeDElements[i];\r\n if (comp.type === '3d') {\r\n perspectiveStyle = comp.perspectiveElem.style;\r\n containerStyle = comp.container.style;\r\n var perspective = this.pe.v + 'px';\r\n var origin = '0px 0px 0px';\r\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\r\n perspectiveStyle.perspective = perspective;\r\n perspectiveStyle.webkitPerspective = perspective;\r\n containerStyle.transformOrigin = origin;\r\n containerStyle.mozTransformOrigin = origin;\r\n containerStyle.webkitTransformOrigin = origin;\r\n perspectiveStyle.transform = matrix;\r\n perspectiveStyle.webkitTransform = matrix;\r\n }\r\n }\r\n};\r\n\r\nHCameraElement.prototype.createElements = function () {\r\n};\r\n\r\nHCameraElement.prototype.hide = function () {\r\n};\r\n\r\nHCameraElement.prototype.renderFrame = function () {\r\n var _mdf = this._isFirstFrame;\r\n var i;\r\n var len;\r\n if (this.hierarchy) {\r\n len = this.hierarchy.length;\r\n for (i = 0; i < len; i += 1) {\r\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\r\n }\r\n }\r\n if (_mdf || this.pe._mdf || (this.p && this.p._mdf) || (this.px && (this.px._mdf || this.py._mdf || this.pz._mdf)) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || (this.a && this.a._mdf)) {\r\n this.mat.reset();\r\n\r\n if (this.hierarchy) {\r\n len = this.hierarchy.length - 1;\r\n for (i = len; i >= 0; i -= 1) {\r\n var mTransf = this.hierarchy[i].finalTransform.mProp;\r\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\r\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\r\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\r\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\r\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\r\n }\r\n }\r\n if (this.p) {\r\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\r\n } else {\r\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\r\n }\r\n if (this.a) {\r\n var diffVector;\r\n if (this.p) {\r\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\r\n } else {\r\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\r\n }\r\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2));\r\n // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\r\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\r\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\r\n var mRotationX = (Math.atan2(lookDir[1], lookLengthOnXZ));\r\n var mRotationY = (Math.atan2(lookDir[0], -lookDir[2]));\r\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\r\n }\r\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\r\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\r\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\r\n this.mat.translate(0, 0, this.pe.v);\r\n\r\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\r\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\r\n len = this.comp.threeDElements.length;\r\n var comp;\r\n var perspectiveStyle;\r\n var containerStyle;\r\n for (i = 0; i < len; i += 1) {\r\n comp = this.comp.threeDElements[i];\r\n if (comp.type === '3d') {\r\n if (hasMatrixChanged) {\r\n var matValue = this.mat.toCSS();\r\n containerStyle = comp.container.style;\r\n containerStyle.transform = matValue;\r\n containerStyle.webkitTransform = matValue;\r\n }\r\n if (this.pe._mdf) {\r\n perspectiveStyle = comp.perspectiveElem.style;\r\n perspectiveStyle.perspective = this.pe.v + 'px';\r\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\r\n }\r\n }\r\n }\r\n this.mat.clone(this._prevMat);\r\n }\r\n }\r\n this._isFirstFrame = false;\r\n};\r\n\r\nHCameraElement.prototype.prepareFrame = function (num) {\r\n this.prepareProperties(num, true);\r\n};\r\n\r\nHCameraElement.prototype.destroy = function () {\r\n};\r\nHCameraElement.prototype.getBaseElement = function () { return null; };\r\n\r\nfunction HEffects() {\r\n}\r\nHEffects.prototype.renderFrame = function () {};\r\n\r\n/* global createTag, AnimationItem */\r\n/* exported animationManager */\r\n\r\nvar animationManager = (function () {\r\n var moduleOb = {};\r\n var registeredAnimations = [];\r\n var initTime = 0;\r\n var len = 0;\r\n var playingAnimationsNum = 0;\r\n var _stopped = true;\r\n var _isFrozen = false;\r\n\r\n function removeElement(ev) {\r\n var i = 0;\r\n var animItem = ev.target;\r\n while (i < len) {\r\n if (registeredAnimations[i].animation === animItem) {\r\n registeredAnimations.splice(i, 1);\r\n i -= 1;\r\n len -= 1;\r\n if (!animItem.isPaused) {\r\n subtractPlayingCount();\r\n }\r\n }\r\n i += 1;\r\n }\r\n }\r\n\r\n function registerAnimation(element, animationData) {\r\n if (!element) {\r\n return null;\r\n }\r\n var i = 0;\r\n while (i < len) {\r\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\r\n return registeredAnimations[i].animation;\r\n }\r\n i += 1;\r\n }\r\n var animItem = new AnimationItem();\r\n setupAnimation(animItem, element);\r\n animItem.setData(element, animationData);\r\n return animItem;\r\n }\r\n\r\n function getRegisteredAnimations() {\r\n var i;\r\n var lenAnims = registeredAnimations.length;\r\n var animations = [];\r\n for (i = 0; i < lenAnims; i += 1) {\r\n animations.push(registeredAnimations[i].animation);\r\n }\r\n return animations;\r\n }\r\n\r\n function addPlayingCount() {\r\n playingAnimationsNum += 1;\r\n activate();\r\n }\r\n\r\n function subtractPlayingCount() {\r\n playingAnimationsNum -= 1;\r\n }\r\n\r\n function setupAnimation(animItem, element) {\r\n animItem.addEventListener('destroy', removeElement);\r\n animItem.addEventListener('_active', addPlayingCount);\r\n animItem.addEventListener('_idle', subtractPlayingCount);\r\n registeredAnimations.push({ elem: element, animation: animItem });\r\n len += 1;\r\n }\r\n\r\n function loadAnimation(params) {\r\n var animItem = new AnimationItem();\r\n setupAnimation(animItem, null);\r\n animItem.setParams(params);\r\n return animItem;\r\n }\r\n\r\n function setSpeed(val, animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.setSpeed(val, animation);\r\n }\r\n }\r\n\r\n function setDirection(val, animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.setDirection(val, animation);\r\n }\r\n }\r\n\r\n function play(animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.play(animation);\r\n }\r\n }\r\n function resume(nowTime) {\r\n var elapsedTime = nowTime - initTime;\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.advanceTime(elapsedTime);\r\n }\r\n initTime = nowTime;\r\n if (playingAnimationsNum && !_isFrozen) {\r\n window.requestAnimationFrame(resume);\r\n } else {\r\n _stopped = true;\r\n }\r\n }\r\n\r\n function first(nowTime) {\r\n initTime = nowTime;\r\n window.requestAnimationFrame(resume);\r\n }\r\n\r\n function pause(animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.pause(animation);\r\n }\r\n }\r\n\r\n function goToAndStop(value, isFrame, animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\r\n }\r\n }\r\n\r\n function stop(animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.stop(animation);\r\n }\r\n }\r\n\r\n function togglePause(animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.togglePause(animation);\r\n }\r\n }\r\n\r\n function destroy(animation) {\r\n var i;\r\n for (i = (len - 1); i >= 0; i -= 1) {\r\n registeredAnimations[i].animation.destroy(animation);\r\n }\r\n }\r\n\r\n function searchAnimations(animationData, standalone, renderer) {\r\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')),\r\n [].slice.call(document.getElementsByClassName('bodymovin')));\r\n var i;\r\n var lenAnims = animElements.length;\r\n for (i = 0; i < lenAnims; i += 1) {\r\n if (renderer) {\r\n animElements[i].setAttribute('data-bm-type', renderer);\r\n }\r\n registerAnimation(animElements[i], animationData);\r\n }\r\n if (standalone && lenAnims === 0) {\r\n if (!renderer) {\r\n renderer = 'svg';\r\n }\r\n var body = document.getElementsByTagName('body')[0];\r\n body.innerText = '';\r\n var div = createTag('div');\r\n div.style.width = '100%';\r\n div.style.height = '100%';\r\n div.setAttribute('data-bm-type', renderer);\r\n body.appendChild(div);\r\n registerAnimation(div, animationData);\r\n }\r\n }\r\n\r\n function resize() {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.resize();\r\n }\r\n }\r\n\r\n function activate() {\r\n if (!_isFrozen && playingAnimationsNum) {\r\n if (_stopped) {\r\n window.requestAnimationFrame(first);\r\n _stopped = false;\r\n }\r\n }\r\n }\r\n\r\n function freeze() {\r\n _isFrozen = true;\r\n }\r\n\r\n function unfreeze() {\r\n _isFrozen = false;\r\n activate();\r\n }\r\n\r\n function setVolume(val, animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.setVolume(val, animation);\r\n }\r\n }\r\n\r\n function mute(animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.mute(animation);\r\n }\r\n }\r\n\r\n function unmute(animation) {\r\n var i;\r\n for (i = 0; i < len; i += 1) {\r\n registeredAnimations[i].animation.unmute(animation);\r\n }\r\n }\r\n\r\n moduleOb.registerAnimation = registerAnimation;\r\n moduleOb.loadAnimation = loadAnimation;\r\n moduleOb.setSpeed = setSpeed;\r\n moduleOb.setDirection = setDirection;\r\n moduleOb.play = play;\r\n moduleOb.pause = pause;\r\n moduleOb.stop = stop;\r\n moduleOb.togglePause = togglePause;\r\n moduleOb.searchAnimations = searchAnimations;\r\n moduleOb.resize = resize;\r\n // moduleOb.start = start;\r\n moduleOb.goToAndStop = goToAndStop;\r\n moduleOb.destroy = destroy;\r\n moduleOb.freeze = freeze;\r\n moduleOb.unfreeze = unfreeze;\r\n moduleOb.setVolume = setVolume;\r\n moduleOb.mute = mute;\r\n moduleOb.unmute = unmute;\r\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\r\n return moduleOb;\r\n}());\r\n\r\n/* global createElementID, subframeEnabled, ProjectInterface, ImagePreloader, audioControllerFactory, extendPrototype, BaseEvent,\r\nCanvasRenderer, SVGRenderer, HybridRenderer, assetLoader, dataManager, expressionsPlugin, BMEnterFrameEvent, BMCompleteLoopEvent,\r\nBMCompleteEvent, BMSegmentStartEvent, BMDestroyEvent, BMEnterFrameEvent, BMCompleteLoopEvent, BMCompleteEvent, BMSegmentStartEvent,\r\nBMDestroyEvent, BMRenderFrameErrorEvent, BMConfigErrorEvent, markerParser */\r\n\r\nvar AnimationItem = function () {\r\n this._cbs = [];\r\n this.name = '';\r\n this.path = '';\r\n this.isLoaded = false;\r\n this.currentFrame = 0;\r\n this.currentRawFrame = 0;\r\n this.firstFrame = 0;\r\n this.totalFrames = 0;\r\n this.frameRate = 0;\r\n this.frameMult = 0;\r\n this.playSpeed = 1;\r\n this.playDirection = 1;\r\n this.playCount = 0;\r\n this.animationData = {};\r\n this.assets = [];\r\n this.isPaused = true;\r\n this.autoplay = false;\r\n this.loop = true;\r\n this.renderer = null;\r\n this.animationID = createElementID();\r\n this.assetsPath = '';\r\n this.timeCompleted = 0;\r\n this.segmentPos = 0;\r\n this.isSubframeEnabled = subframeEnabled;\r\n this.segments = [];\r\n this._idle = true;\r\n this._completedLoop = false;\r\n this.projectInterface = ProjectInterface();\r\n this.imagePreloader = new ImagePreloader();\r\n this.audioController = audioControllerFactory();\r\n this.markers = [];\r\n};\r\n\r\nextendPrototype([BaseEvent], AnimationItem);\r\n\r\nAnimationItem.prototype.setParams = function (params) {\r\n if (params.wrapper || params.container) {\r\n this.wrapper = params.wrapper || params.container;\r\n }\r\n var animType = 'svg';\r\n if (params.animType) {\r\n animType = params.animType;\r\n } else if (params.renderer) {\r\n animType = params.renderer;\r\n }\r\n switch (animType) {\r\n case 'canvas':\r\n this.renderer = new CanvasRenderer(this, params.rendererSettings);\r\n break;\r\n case 'svg':\r\n this.renderer = new SVGRenderer(this, params.rendererSettings);\r\n break;\r\n default:\r\n this.renderer = new HybridRenderer(this, params.rendererSettings);\r\n break;\r\n }\r\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\r\n this.renderer.setProjectInterface(this.projectInterface);\r\n this.animType = animType;\r\n if (params.loop === ''\r\n || params.loop === null\r\n || params.loop === undefined\r\n || params.loop === true) {\r\n this.loop = true;\r\n } else if (params.loop === false) {\r\n this.loop = false;\r\n } else {\r\n this.loop = parseInt(params.loop, 10);\r\n }\r\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\r\n this.name = params.name ? params.name : '';\r\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\r\n this.assetsPath = params.assetsPath;\r\n this.initialSegment = params.initialSegment;\r\n if (params.audioFactory) {\r\n this.audioController.setAudioFactory(params.audioFactory);\r\n }\r\n if (params.animationData) {\r\n this.configAnimation(params.animationData);\r\n } else if (params.path) {\r\n if (params.path.lastIndexOf('\\\\') !== -1) {\r\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\r\n } else {\r\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\r\n }\r\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\r\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\r\n\r\n assetLoader.load(params.path, this.configAnimation.bind(this), function () {\r\n this.trigger('data_failed');\r\n }.bind(this));\r\n }\r\n};\r\n\r\nAnimationItem.prototype.setData = function (wrapper, animationData) {\r\n if (animationData) {\r\n if (typeof animationData !== 'object') {\r\n animationData = JSON.parse(animationData);\r\n }\r\n }\r\n var params = {\r\n wrapper: wrapper,\r\n animationData: animationData,\r\n };\r\n var wrapperAttributes = wrapper.attributes;\r\n\r\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-animation-path').value\r\n : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-path').value\r\n : wrapperAttributes.getNamedItem('bm-path')\r\n ? wrapperAttributes.getNamedItem('bm-path').value\r\n : '';\r\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-anim-type').value\r\n : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-type').value\r\n : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('bm-type').value\r\n : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value\r\n : wrapperAttributes.getNamedItem('bm-renderer')\r\n ? wrapperAttributes.getNamedItem('bm-renderer').value\r\n : 'canvas';\r\n\r\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-anim-loop').value\r\n : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-loop').value\r\n : wrapperAttributes.getNamedItem('bm-loop')\r\n ? wrapperAttributes.getNamedItem('bm-loop').value\r\n : '';\r\n if (loop === 'false') {\r\n params.loop = false;\r\n } else if (loop === 'true') {\r\n params.loop = true;\r\n } else if (loop !== '') {\r\n params.loop = parseInt(loop, 10);\r\n }\r\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value\r\n : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value\r\n : wrapperAttributes.getNamedItem('bm-autoplay')\r\n ? wrapperAttributes.getNamedItem('bm-autoplay').value\r\n : true;\r\n params.autoplay = autoplay !== 'false';\r\n\r\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-name').value\r\n : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-name').value\r\n : wrapperAttributes.getNamedItem('bm-name')\r\n ? wrapperAttributes.getNamedItem('bm-name').value\r\n : '';\r\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value\r\n : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\r\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value\r\n : wrapperAttributes.getNamedItem('bm-prerender')\r\n ? wrapperAttributes.getNamedItem('bm-prerender').value\r\n : '';\r\n\r\n if (prerender === 'false') {\r\n params.prerender = false;\r\n }\r\n this.setParams(params);\r\n};\r\n\r\nAnimationItem.prototype.includeLayers = function (data) {\r\n if (data.op > this.animationData.op) {\r\n this.animationData.op = data.op;\r\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\r\n }\r\n var layers = this.animationData.layers;\r\n var i;\r\n var len = layers.length;\r\n var newLayers = data.layers;\r\n var j;\r\n var jLen = newLayers.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n i = 0;\r\n while (i < len) {\r\n if (layers[i].id === newLayers[j].id) {\r\n layers[i] = newLayers[j];\r\n break;\r\n }\r\n i += 1;\r\n }\r\n }\r\n if (data.chars || data.fonts) {\r\n this.renderer.globalData.fontManager.addChars(data.chars);\r\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\r\n }\r\n if (data.assets) {\r\n len = data.assets.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.animationData.assets.push(data.assets[i]);\r\n }\r\n }\r\n this.animationData.__complete = false;\r\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\r\n this.renderer.includeLayers(data.layers);\r\n if (expressionsPlugin) {\r\n expressionsPlugin.initExpressions(this);\r\n }\r\n this.loadNextSegment();\r\n};\r\n\r\nAnimationItem.prototype.loadNextSegment = function () {\r\n var segments = this.animationData.segments;\r\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\r\n this.trigger('data_ready');\r\n this.timeCompleted = this.totalFrames;\r\n return;\r\n }\r\n var segment = segments.shift();\r\n this.timeCompleted = segment.time * this.frameRate;\r\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\r\n this.segmentPos += 1;\r\n assetLoader.load(segmentPath, this.includeLayers.bind(this), function () {\r\n this.trigger('data_failed');\r\n }.bind(this));\r\n};\r\n\r\nAnimationItem.prototype.loadSegments = function () {\r\n var segments = this.animationData.segments;\r\n if (!segments) {\r\n this.timeCompleted = this.totalFrames;\r\n }\r\n this.loadNextSegment();\r\n};\r\n\r\nAnimationItem.prototype.imagesLoaded = function () {\r\n this.trigger('loaded_images');\r\n this.checkLoaded();\r\n};\r\n\r\nAnimationItem.prototype.preloadImages = function () {\r\n this.imagePreloader.setAssetsPath(this.assetsPath);\r\n this.imagePreloader.setPath(this.path);\r\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\r\n};\r\n\r\nAnimationItem.prototype.configAnimation = function (animData) {\r\n if (!this.renderer) {\r\n return;\r\n }\r\n try {\r\n this.animationData = animData;\r\n\r\n if (this.initialSegment) {\r\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\r\n this.firstFrame = Math.round(this.initialSegment[0]);\r\n } else {\r\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\r\n this.firstFrame = Math.round(this.animationData.ip);\r\n }\r\n this.renderer.configAnimation(animData);\r\n if (!animData.assets) {\r\n animData.assets = [];\r\n }\r\n\r\n this.assets = this.animationData.assets;\r\n this.frameRate = this.animationData.fr;\r\n this.frameMult = this.animationData.fr / 1000;\r\n this.renderer.searchExtraCompositions(animData.assets);\r\n this.markers = markerParser(animData.markers || []);\r\n this.trigger('config_ready');\r\n this.preloadImages();\r\n this.loadSegments();\r\n this.updaFrameModifier();\r\n this.waitForFontsLoaded();\r\n if (this.isPaused) {\r\n this.audioController.pause();\r\n }\r\n } catch (error) {\r\n this.triggerConfigError(error);\r\n }\r\n};\r\n\r\nAnimationItem.prototype.waitForFontsLoaded = function () {\r\n if (!this.renderer) {\r\n return;\r\n }\r\n if (this.renderer.globalData.fontManager.isLoaded) {\r\n this.checkLoaded();\r\n } else {\r\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\r\n }\r\n};\r\n\r\nAnimationItem.prototype.checkLoaded = function () {\r\n if (!this.isLoaded\r\n && this.renderer.globalData.fontManager.isLoaded\r\n && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas')\r\n && (this.imagePreloader.loadedFootages())\r\n ) {\r\n this.isLoaded = true;\r\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\r\n if (expressionsPlugin) {\r\n expressionsPlugin.initExpressions(this);\r\n }\r\n this.renderer.initItems();\r\n setTimeout(function () {\r\n this.trigger('DOMLoaded');\r\n }.bind(this), 0);\r\n this.gotoFrame();\r\n if (this.autoplay) {\r\n this.play();\r\n }\r\n }\r\n};\r\n\r\nAnimationItem.prototype.resize = function () {\r\n this.renderer.updateContainerSize();\r\n};\r\n\r\nAnimationItem.prototype.setSubframe = function (flag) {\r\n this.isSubframeEnabled = !!flag;\r\n};\r\n\r\nAnimationItem.prototype.gotoFrame = function () {\r\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\r\n\r\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\r\n this.currentFrame = this.timeCompleted;\r\n }\r\n this.trigger('enterFrame');\r\n this.renderFrame();\r\n};\r\n\r\nAnimationItem.prototype.renderFrame = function () {\r\n if (this.isLoaded === false || !this.renderer) {\r\n return;\r\n }\r\n try {\r\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\r\n } catch (error) {\r\n this.triggerRenderFrameError(error);\r\n }\r\n};\r\n\r\nAnimationItem.prototype.play = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n if (this.isPaused === true) {\r\n this.isPaused = false;\r\n this.audioController.resume();\r\n if (this._idle) {\r\n this._idle = false;\r\n this.trigger('_active');\r\n }\r\n }\r\n};\r\n\r\nAnimationItem.prototype.pause = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n if (this.isPaused === false) {\r\n this.isPaused = true;\r\n this._idle = true;\r\n this.trigger('_idle');\r\n this.audioController.pause();\r\n }\r\n};\r\n\r\nAnimationItem.prototype.togglePause = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n if (this.isPaused === true) {\r\n this.play();\r\n } else {\r\n this.pause();\r\n }\r\n};\r\n\r\nAnimationItem.prototype.stop = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n this.pause();\r\n this.playCount = 0;\r\n this._completedLoop = false;\r\n this.setCurrentRawFrameValue(0);\r\n};\r\n\r\nAnimationItem.prototype.getMarkerData = function (markerName) {\r\n var marker;\r\n for (var i = 0; i < this.markers.length; i += 1) {\r\n marker = this.markers[i];\r\n if (marker.payload && marker.payload.name === markerName) {\r\n return marker;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nAnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n var numValue = Number(value);\r\n if (isNaN(numValue)) {\r\n var marker = this.getMarkerData(value);\r\n if (marker) {\r\n this.goToAndStop(marker.time, true);\r\n }\r\n } else if (isFrame) {\r\n this.setCurrentRawFrameValue(value);\r\n } else {\r\n this.setCurrentRawFrameValue(value * this.frameModifier);\r\n }\r\n this.pause();\r\n};\r\n\r\nAnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n var numValue = Number(value);\r\n if (isNaN(numValue)) {\r\n var marker = this.getMarkerData(value);\r\n if (marker) {\r\n if (!marker.duration) {\r\n this.goToAndStop(marker.time, true);\r\n } else {\r\n this.playSegments([marker.time, marker.time + marker.duration], true);\r\n }\r\n }\r\n } else {\r\n this.goToAndStop(numValue, isFrame, name);\r\n }\r\n this.play();\r\n};\r\n\r\nAnimationItem.prototype.advanceTime = function (value) {\r\n if (this.isPaused === true || this.isLoaded === false) {\r\n return;\r\n }\r\n var nextValue = this.currentRawFrame + value * this.frameModifier;\r\n var _isComplete = false;\r\n // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\r\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\r\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\r\n if (!this.loop || this.playCount === this.loop) {\r\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\r\n _isComplete = true;\r\n nextValue = this.totalFrames - 1;\r\n }\r\n } else if (nextValue >= this.totalFrames) {\r\n this.playCount += 1;\r\n if (!this.checkSegments(nextValue % this.totalFrames)) {\r\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\r\n this._completedLoop = true;\r\n this.trigger('loopComplete');\r\n }\r\n } else {\r\n this.setCurrentRawFrameValue(nextValue);\r\n }\r\n } else if (nextValue < 0) {\r\n if (!this.checkSegments(nextValue % this.totalFrames)) {\r\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { // eslint-disable-line no-plusplus\r\n this.setCurrentRawFrameValue(this.totalFrames + (nextValue % this.totalFrames));\r\n if (!this._completedLoop) {\r\n this._completedLoop = true;\r\n } else {\r\n this.trigger('loopComplete');\r\n }\r\n } else {\r\n _isComplete = true;\r\n nextValue = 0;\r\n }\r\n }\r\n } else {\r\n this.setCurrentRawFrameValue(nextValue);\r\n }\r\n if (_isComplete) {\r\n this.setCurrentRawFrameValue(nextValue);\r\n this.pause();\r\n this.trigger('complete');\r\n }\r\n};\r\n\r\nAnimationItem.prototype.adjustSegment = function (arr, offset) {\r\n this.playCount = 0;\r\n if (arr[1] < arr[0]) {\r\n if (this.frameModifier > 0) {\r\n if (this.playSpeed < 0) {\r\n this.setSpeed(-this.playSpeed);\r\n } else {\r\n this.setDirection(-1);\r\n }\r\n }\r\n this.totalFrames = arr[0] - arr[1];\r\n this.timeCompleted = this.totalFrames;\r\n this.firstFrame = arr[1];\r\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\r\n } else if (arr[1] > arr[0]) {\r\n if (this.frameModifier < 0) {\r\n if (this.playSpeed < 0) {\r\n this.setSpeed(-this.playSpeed);\r\n } else {\r\n this.setDirection(1);\r\n }\r\n }\r\n this.totalFrames = arr[1] - arr[0];\r\n this.timeCompleted = this.totalFrames;\r\n this.firstFrame = arr[0];\r\n this.setCurrentRawFrameValue(0.001 + offset);\r\n }\r\n this.trigger('segmentStart');\r\n};\r\nAnimationItem.prototype.setSegment = function (init, end) {\r\n var pendingFrame = -1;\r\n if (this.isPaused) {\r\n if (this.currentRawFrame + this.firstFrame < init) {\r\n pendingFrame = init;\r\n } else if (this.currentRawFrame + this.firstFrame > end) {\r\n pendingFrame = end - init;\r\n }\r\n }\r\n\r\n this.firstFrame = init;\r\n this.totalFrames = end - init;\r\n this.timeCompleted = this.totalFrames;\r\n if (pendingFrame !== -1) {\r\n this.goToAndStop(pendingFrame, true);\r\n }\r\n};\r\n\r\nAnimationItem.prototype.playSegments = function (arr, forceFlag) {\r\n if (forceFlag) {\r\n this.segments.length = 0;\r\n }\r\n if (typeof arr[0] === 'object') {\r\n var i;\r\n var len = arr.length;\r\n for (i = 0; i < len; i += 1) {\r\n this.segments.push(arr[i]);\r\n }\r\n } else {\r\n this.segments.push(arr);\r\n }\r\n if (this.segments.length && forceFlag) {\r\n this.adjustSegment(this.segments.shift(), 0);\r\n }\r\n if (this.isPaused) {\r\n this.play();\r\n }\r\n};\r\n\r\nAnimationItem.prototype.resetSegments = function (forceFlag) {\r\n this.segments.length = 0;\r\n this.segments.push([this.animationData.ip, this.animationData.op]);\r\n // this.segments.push([this.animationData.ip*this.frameRate,Math.floor(this.animationData.op - this.animationData.ip+this.animationData.ip*this.frameRate)]);\r\n if (forceFlag) {\r\n this.checkSegments(0);\r\n }\r\n};\r\nAnimationItem.prototype.checkSegments = function (offset) {\r\n if (this.segments.length) {\r\n this.adjustSegment(this.segments.shift(), offset);\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nAnimationItem.prototype.destroy = function (name) {\r\n if ((name && this.name !== name) || !this.renderer) {\r\n return;\r\n }\r\n this.renderer.destroy();\r\n this.imagePreloader.destroy();\r\n this.trigger('destroy');\r\n this._cbs = null;\r\n this.onEnterFrame = null;\r\n this.onLoopComplete = null;\r\n this.onComplete = null;\r\n this.onSegmentStart = null;\r\n this.onDestroy = null;\r\n this.renderer = null;\r\n this.renderer = null;\r\n this.imagePreloader = null;\r\n this.projectInterface = null;\r\n};\r\n\r\nAnimationItem.prototype.setCurrentRawFrameValue = function (value) {\r\n this.currentRawFrame = value;\r\n this.gotoFrame();\r\n};\r\n\r\nAnimationItem.prototype.setSpeed = function (val) {\r\n this.playSpeed = val;\r\n this.updaFrameModifier();\r\n};\r\n\r\nAnimationItem.prototype.setDirection = function (val) {\r\n this.playDirection = val < 0 ? -1 : 1;\r\n this.updaFrameModifier();\r\n};\r\n\r\nAnimationItem.prototype.setVolume = function (val, name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n this.audioController.setVolume(val);\r\n};\r\n\r\nAnimationItem.prototype.getVolume = function () {\r\n return this.audioController.getVolume();\r\n};\r\n\r\nAnimationItem.prototype.mute = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n this.audioController.mute();\r\n};\r\n\r\nAnimationItem.prototype.unmute = function (name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n this.audioController.unmute();\r\n};\r\n\r\nAnimationItem.prototype.updaFrameModifier = function () {\r\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\r\n this.audioController.setRate(this.playSpeed * this.playDirection);\r\n};\r\n\r\nAnimationItem.prototype.getPath = function () {\r\n return this.path;\r\n};\r\n\r\nAnimationItem.prototype.getAssetsPath = function (assetData) {\r\n var path = '';\r\n if (assetData.e) {\r\n path = assetData.p;\r\n } else if (this.assetsPath) {\r\n var imagePath = assetData.p;\r\n if (imagePath.indexOf('images/') !== -1) {\r\n imagePath = imagePath.split('/')[1];\r\n }\r\n path = this.assetsPath + imagePath;\r\n } else {\r\n path = this.path;\r\n path += assetData.u ? assetData.u : '';\r\n path += assetData.p;\r\n }\r\n return path;\r\n};\r\n\r\nAnimationItem.prototype.getAssetData = function (id) {\r\n var i = 0;\r\n var len = this.assets.length;\r\n while (i < len) {\r\n if (id === this.assets[i].id) {\r\n return this.assets[i];\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n};\r\n\r\nAnimationItem.prototype.hide = function () {\r\n this.renderer.hide();\r\n};\r\n\r\nAnimationItem.prototype.show = function () {\r\n this.renderer.show();\r\n};\r\n\r\nAnimationItem.prototype.getDuration = function (isFrame) {\r\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\r\n};\r\n\r\nAnimationItem.prototype.trigger = function (name) {\r\n if (this._cbs && this._cbs[name]) {\r\n switch (name) {\r\n case 'enterFrame':\r\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\r\n break;\r\n case 'loopComplete':\r\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\r\n break;\r\n case 'complete':\r\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\r\n break;\r\n case 'segmentStart':\r\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\r\n break;\r\n case 'destroy':\r\n this.triggerEvent(name, new BMDestroyEvent(name, this));\r\n break;\r\n default:\r\n this.triggerEvent(name);\r\n }\r\n }\r\n if (name === 'enterFrame' && this.onEnterFrame) {\r\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\r\n }\r\n if (name === 'loopComplete' && this.onLoopComplete) {\r\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\r\n }\r\n if (name === 'complete' && this.onComplete) {\r\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\r\n }\r\n if (name === 'segmentStart' && this.onSegmentStart) {\r\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\r\n }\r\n if (name === 'destroy' && this.onDestroy) {\r\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\r\n }\r\n};\r\n\r\nAnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\r\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\r\n this.triggerEvent('error', error);\r\n\r\n if (this.onError) {\r\n this.onError.call(this, error);\r\n }\r\n};\r\n\r\nAnimationItem.prototype.triggerConfigError = function (nativeError) {\r\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\r\n this.triggerEvent('error', error);\r\n\r\n if (this.onError) {\r\n this.onError.call(this, error);\r\n }\r\n};\r\n\r\n/* global CompExpressionInterface, expressionsPlugin: writable */\r\n/* exported expressionsPlugin */\r\n\r\nvar Expressions = (function () {\r\n var ob = {};\r\n ob.initExpressions = initExpressions;\r\n\r\n function initExpressions(animation) {\r\n var stackCount = 0;\r\n var registers = [];\r\n\r\n function pushExpression() {\r\n stackCount += 1;\r\n }\r\n\r\n function popExpression() {\r\n stackCount -= 1;\r\n if (stackCount === 0) {\r\n releaseInstances();\r\n }\r\n }\r\n\r\n function registerExpressionProperty(expression) {\r\n if (registers.indexOf(expression) === -1) {\r\n registers.push(expression);\r\n }\r\n }\r\n\r\n function releaseInstances() {\r\n var i;\r\n var len = registers.length;\r\n for (i = 0; i < len; i += 1) {\r\n registers[i].release();\r\n }\r\n registers.length = 0;\r\n }\r\n\r\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\r\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\r\n animation.renderer.globalData.pushExpression = pushExpression;\r\n animation.renderer.globalData.popExpression = popExpression;\r\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\r\n }\r\n return ob;\r\n}());\r\n\r\nexpressionsPlugin = Expressions;\r\n\r\n/* eslint-disable camelcase, no-unused-vars */\r\n/* global BMMath, BezierFactory, createTypedArray, degToRads, shapePool */\r\n\r\nvar ExpressionManager = (function () {\r\n 'use strict';\r\n\r\n var ob = {};\r\n var Math = BMMath;\r\n var window = null;\r\n var document = null;\r\n var XMLHttpRequest = null;\r\n var fetch = null;\r\n\r\n function $bm_isInstanceOfArray(arr) {\r\n return arr.constructor === Array || arr.constructor === Float32Array;\r\n }\r\n\r\n function isNumerable(tOfV, v) {\r\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\r\n }\r\n\r\n function $bm_neg(a) {\r\n var tOfA = typeof a;\r\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\r\n return -a;\r\n }\r\n if ($bm_isInstanceOfArray(a)) {\r\n var i;\r\n var lenA = a.length;\r\n var retArr = [];\r\n for (i = 0; i < lenA; i += 1) {\r\n retArr[i] = -a[i];\r\n }\r\n return retArr;\r\n }\r\n if (a.propType) {\r\n return a.v;\r\n }\r\n return -a;\r\n }\r\n\r\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\r\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\r\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\r\n\r\n function sum(a, b) {\r\n var tOfA = typeof a;\r\n var tOfB = typeof b;\r\n if (tOfA === 'string' || tOfB === 'string') {\r\n return a + b;\r\n }\r\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\r\n return a + b;\r\n }\r\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\r\n a = a.slice(0);\r\n a[0] += b;\r\n return a;\r\n }\r\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\r\n b = b.slice(0);\r\n b[0] = a + b[0];\r\n return b;\r\n }\r\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\r\n var i = 0;\r\n var lenA = a.length;\r\n var lenB = b.length;\r\n var retArr = [];\r\n while (i < lenA || i < lenB) {\r\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\r\n retArr[i] = a[i] + b[i];\r\n } else {\r\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\r\n }\r\n i += 1;\r\n }\r\n return retArr;\r\n }\r\n return 0;\r\n }\r\n var add = sum;\r\n\r\n function sub(a, b) {\r\n var tOfA = typeof a;\r\n var tOfB = typeof b;\r\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\r\n if (tOfA === 'string') {\r\n a = parseInt(a, 10);\r\n }\r\n if (tOfB === 'string') {\r\n b = parseInt(b, 10);\r\n }\r\n return a - b;\r\n }\r\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\r\n a = a.slice(0);\r\n a[0] -= b;\r\n return a;\r\n }\r\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\r\n b = b.slice(0);\r\n b[0] = a - b[0];\r\n return b;\r\n }\r\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\r\n var i = 0;\r\n var lenA = a.length;\r\n var lenB = b.length;\r\n var retArr = [];\r\n while (i < lenA || i < lenB) {\r\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\r\n retArr[i] = a[i] - b[i];\r\n } else {\r\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\r\n }\r\n i += 1;\r\n }\r\n return retArr;\r\n }\r\n return 0;\r\n }\r\n\r\n function mul(a, b) {\r\n var tOfA = typeof a;\r\n var tOfB = typeof b;\r\n var arr;\r\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\r\n return a * b;\r\n }\r\n\r\n var i;\r\n var len;\r\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\r\n len = a.length;\r\n arr = createTypedArray('float32', len);\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = a[i] * b;\r\n }\r\n return arr;\r\n }\r\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\r\n len = b.length;\r\n arr = createTypedArray('float32', len);\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = a * b[i];\r\n }\r\n return arr;\r\n }\r\n return 0;\r\n }\r\n\r\n function div(a, b) {\r\n var tOfA = typeof a;\r\n var tOfB = typeof b;\r\n var arr;\r\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\r\n return a / b;\r\n }\r\n var i;\r\n var len;\r\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\r\n len = a.length;\r\n arr = createTypedArray('float32', len);\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = a[i] / b;\r\n }\r\n return arr;\r\n }\r\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\r\n len = b.length;\r\n arr = createTypedArray('float32', len);\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = a / b[i];\r\n }\r\n return arr;\r\n }\r\n return 0;\r\n }\r\n function mod(a, b) {\r\n if (typeof a === 'string') {\r\n a = parseInt(a, 10);\r\n }\r\n if (typeof b === 'string') {\r\n b = parseInt(b, 10);\r\n }\r\n return a % b;\r\n }\r\n var $bm_sum = sum;\r\n var $bm_sub = sub;\r\n var $bm_mul = mul;\r\n var $bm_div = div;\r\n var $bm_mod = mod;\r\n\r\n function clamp(num, min, max) {\r\n if (min > max) {\r\n var mm = max;\r\n max = min;\r\n min = mm;\r\n }\r\n return Math.min(Math.max(num, min), max);\r\n }\r\n\r\n function radiansToDegrees(val) {\r\n return val / degToRads;\r\n }\r\n var radians_to_degrees = radiansToDegrees;\r\n\r\n function degreesToRadians(val) {\r\n return val * degToRads;\r\n }\r\n var degrees_to_radians = radiansToDegrees;\r\n\r\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\r\n\r\n function length(arr1, arr2) {\r\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\r\n arr2 = arr2 || 0;\r\n return Math.abs(arr1 - arr2);\r\n }\r\n if (!arr2) {\r\n arr2 = helperLengthArray;\r\n }\r\n var i;\r\n var len = Math.min(arr1.length, arr2.length);\r\n var addedLength = 0;\r\n for (i = 0; i < len; i += 1) {\r\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\r\n }\r\n return Math.sqrt(addedLength);\r\n }\r\n\r\n function normalize(vec) {\r\n return div(vec, length(vec));\r\n }\r\n\r\n function rgbToHsl(val) {\r\n var r = val[0]; var g = val[1]; var b = val[2];\r\n var max = Math.max(r, g, b);\r\n var min = Math.min(r, g, b);\r\n var h;\r\n var s;\r\n var l = (max + min) / 2;\r\n\r\n if (max === min) {\r\n h = 0; // achromatic\r\n s = 0; // achromatic\r\n } else {\r\n var d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n case g: h = (b - r) / d + 2; break;\r\n case b: h = (r - g) / d + 4; break;\r\n default: break;\r\n }\r\n h /= 6;\r\n }\r\n\r\n return [h, s, l, val[3]];\r\n }\r\n\r\n function hue2rgb(p, q, t) {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n }\r\n\r\n function hslToRgb(val) {\r\n var h = val[0];\r\n var s = val[1];\r\n var l = val[2];\r\n\r\n var r;\r\n var g;\r\n var b;\r\n\r\n if (s === 0) {\r\n r = l; // achromatic\r\n b = l; // achromatic\r\n g = l; // achromatic\r\n } else {\r\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n var p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n\r\n return [r, g, b, val[3]];\r\n }\r\n\r\n function linear(t, tMin, tMax, value1, value2) {\r\n if (value1 === undefined || value2 === undefined) {\r\n value1 = tMin;\r\n value2 = tMax;\r\n tMin = 0;\r\n tMax = 1;\r\n }\r\n if (tMax < tMin) {\r\n var _tMin = tMax;\r\n tMax = tMin;\r\n tMin = _tMin;\r\n }\r\n if (t <= tMin) {\r\n return value1;\r\n } if (t >= tMax) {\r\n return value2;\r\n }\r\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\r\n if (!value1.length) {\r\n return value1 + (value2 - value1) * perc;\r\n }\r\n var i;\r\n var len = value1.length;\r\n var arr = createTypedArray('float32', len);\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\r\n }\r\n return arr;\r\n }\r\n function random(min, max) {\r\n if (max === undefined) {\r\n if (min === undefined) {\r\n min = 0;\r\n max = 1;\r\n } else {\r\n max = min;\r\n min = undefined;\r\n }\r\n }\r\n if (max.length) {\r\n var i;\r\n var len = max.length;\r\n if (!min) {\r\n min = createTypedArray('float32', len);\r\n }\r\n var arr = createTypedArray('float32', len);\r\n var rnd = BMMath.random();\r\n for (i = 0; i < len; i += 1) {\r\n arr[i] = min[i] + rnd * (max[i] - min[i]);\r\n }\r\n return arr;\r\n }\r\n if (min === undefined) {\r\n min = 0;\r\n }\r\n var rndm = BMMath.random();\r\n return min + rndm * (max - min);\r\n }\r\n\r\n function createPath(points, inTangents, outTangents, closed) {\r\n var i;\r\n var len = points.length;\r\n var path = shapePool.newElement();\r\n path.setPathData(!!closed, len);\r\n var arrPlaceholder = [0, 0];\r\n var inVertexPoint;\r\n var outVertexPoint;\r\n for (i = 0; i < len; i += 1) {\r\n inVertexPoint = (inTangents && inTangents[i]) ? inTangents[i] : arrPlaceholder;\r\n outVertexPoint = (outTangents && outTangents[i]) ? outTangents[i] : arrPlaceholder;\r\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\r\n }\r\n return path;\r\n }\r\n\r\n function initiateExpression(elem, data, property) {\r\n var val = data.x;\r\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\r\n var _needsRandom = val.indexOf('random') !== -1;\r\n var elemType = elem.data.ty;\r\n var transform;\r\n var $bm_transform;\r\n var content;\r\n var effect;\r\n var thisProperty = property;\r\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\r\n Object.defineProperty(thisProperty, 'value', {\r\n get: function () {\r\n return thisProperty.v;\r\n },\r\n });\r\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\r\n elem.comp.displayStartTime = 0;\r\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\r\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\r\n var width = elem.data.sw ? elem.data.sw : 0;\r\n var height = elem.data.sh ? elem.data.sh : 0;\r\n var name = elem.data.nm;\r\n var loopIn;\r\n var loop_in;\r\n var loopOut;\r\n var loop_out;\r\n var smooth;\r\n var toWorld;\r\n var fromWorld;\r\n var fromComp;\r\n var toComp;\r\n var fromCompToSurface;\r\n var position;\r\n var rotation;\r\n var anchorPoint;\r\n var scale;\r\n var thisLayer;\r\n var thisComp;\r\n var mask;\r\n var valueAtTime;\r\n var velocityAtTime;\r\n\r\n var scoped_bm_rt;\r\n // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\r\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\r\n var numKeys = property.kf ? data.k.length : 0;\r\n\r\n var active = !this.data || this.data.hd !== true;\r\n\r\n var wiggle = function wiggle(freq, amp) {\r\n var iWiggle;\r\n var j;\r\n var lenWiggle = this.pv.length ? this.pv.length : 1;\r\n var addedAmps = createTypedArray('float32', lenWiggle);\r\n freq = 5;\r\n var iterations = Math.floor(time * freq);\r\n iWiggle = 0;\r\n j = 0;\r\n while (iWiggle < iterations) {\r\n // var rnd = BMMath.random();\r\n for (j = 0; j < lenWiggle; j += 1) {\r\n addedAmps[j] += -amp + amp * 2 * BMMath.random();\r\n // addedAmps[j] += -amp + amp*2*rnd;\r\n }\r\n iWiggle += 1;\r\n }\r\n // var rnd2 = BMMath.random();\r\n var periods = time * freq;\r\n var perc = periods - Math.floor(periods);\r\n var arr = createTypedArray('float32', lenWiggle);\r\n if (lenWiggle > 1) {\r\n for (j = 0; j < lenWiggle; j += 1) {\r\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc;\r\n // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\r\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\r\n }\r\n return arr;\r\n }\r\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\r\n }.bind(this);\r\n\r\n if (thisProperty.loopIn) {\r\n loopIn = thisProperty.loopIn.bind(thisProperty);\r\n loop_in = loopIn;\r\n }\r\n\r\n if (thisProperty.loopOut) {\r\n loopOut = thisProperty.loopOut.bind(thisProperty);\r\n loop_out = loopOut;\r\n }\r\n\r\n if (thisProperty.smooth) {\r\n smooth = thisProperty.smooth.bind(thisProperty);\r\n }\r\n\r\n function loopInDuration(type, duration) {\r\n return loopIn(type, duration, true);\r\n }\r\n\r\n function loopOutDuration(type, duration) {\r\n return loopOut(type, duration, true);\r\n }\r\n\r\n if (this.getValueAtTime) {\r\n valueAtTime = this.getValueAtTime.bind(this);\r\n }\r\n\r\n if (this.getVelocityAtTime) {\r\n velocityAtTime = this.getVelocityAtTime.bind(this);\r\n }\r\n\r\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\r\n\r\n function lookAt(elem1, elem2) {\r\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\r\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\r\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\r\n return [yaw, pitch, 0];\r\n }\r\n\r\n function easeOut(t, tMin, tMax, val1, val2) {\r\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\r\n }\r\n\r\n function easeIn(t, tMin, tMax, val1, val2) {\r\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\r\n }\r\n\r\n function ease(t, tMin, tMax, val1, val2) {\r\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\r\n }\r\n\r\n function applyEase(fn, t, tMin, tMax, val1, val2) {\r\n if (val1 === undefined) {\r\n val1 = tMin;\r\n val2 = tMax;\r\n } else {\r\n t = (t - tMin) / (tMax - tMin);\r\n }\r\n if (t > 1) {\r\n t = 1;\r\n } else if (t < 0) {\r\n t = 0;\r\n }\r\n var mult = fn(t);\r\n if ($bm_isInstanceOfArray(val1)) {\r\n var iKey;\r\n var lenKey = val1.length;\r\n var arr = createTypedArray('float32', lenKey);\r\n for (iKey = 0; iKey < lenKey; iKey += 1) {\r\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\r\n }\r\n return arr;\r\n }\r\n return (val2 - val1) * mult + val1;\r\n }\r\n\r\n function nearestKey(time) {\r\n var iKey;\r\n var lenKey = data.k.length;\r\n var index;\r\n var keyTime;\r\n if (!data.k.length || typeof (data.k[0]) === 'number') {\r\n index = 0;\r\n keyTime = 0;\r\n } else {\r\n index = -1;\r\n time *= elem.comp.globalData.frameRate;\r\n if (time < data.k[0].t) {\r\n index = 1;\r\n keyTime = data.k[0].t;\r\n } else {\r\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\r\n if (time === data.k[iKey].t) {\r\n index = iKey + 1;\r\n keyTime = data.k[iKey].t;\r\n break;\r\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\r\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\r\n index = iKey + 2;\r\n keyTime = data.k[iKey + 1].t;\r\n } else {\r\n index = iKey + 1;\r\n keyTime = data.k[iKey].t;\r\n }\r\n break;\r\n }\r\n }\r\n if (index === -1) {\r\n index = iKey + 1;\r\n keyTime = data.k[iKey].t;\r\n }\r\n }\r\n }\r\n var obKey = {};\r\n obKey.index = index;\r\n obKey.time = keyTime / elem.comp.globalData.frameRate;\r\n return obKey;\r\n }\r\n\r\n function key(ind) {\r\n var obKey;\r\n var iKey;\r\n var lenKey;\r\n if (!data.k.length || typeof (data.k[0]) === 'number') {\r\n throw new Error('The property has no keyframe at index ' + ind);\r\n }\r\n ind -= 1;\r\n obKey = {\r\n time: data.k[ind].t / elem.comp.globalData.frameRate,\r\n value: [],\r\n };\r\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\r\n\r\n lenKey = arr.length;\r\n for (iKey = 0; iKey < lenKey; iKey += 1) {\r\n obKey[iKey] = arr[iKey];\r\n obKey.value[iKey] = arr[iKey];\r\n }\r\n return obKey;\r\n }\r\n\r\n function framesToTime(frames, fps) {\r\n if (!fps) {\r\n fps = elem.comp.globalData.frameRate;\r\n }\r\n return frames / fps;\r\n }\r\n\r\n function timeToFrames(t, fps) {\r\n if (!t && t !== 0) {\r\n t = time;\r\n }\r\n if (!fps) {\r\n fps = elem.comp.globalData.frameRate;\r\n }\r\n return t * fps;\r\n }\r\n\r\n function seedRandom(seed) {\r\n BMMath.seedrandom(randSeed + seed);\r\n }\r\n\r\n function sourceRectAtTime() {\r\n return elem.sourceRectAtTime();\r\n }\r\n\r\n function substring(init, end) {\r\n if (typeof value === 'string') {\r\n if (end === undefined) {\r\n return value.substring(init);\r\n }\r\n return value.substring(init, end);\r\n }\r\n return '';\r\n }\r\n\r\n function substr(init, end) {\r\n if (typeof value === 'string') {\r\n if (end === undefined) {\r\n return value.substr(init);\r\n }\r\n return value.substr(init, end);\r\n }\r\n return '';\r\n }\r\n\r\n function posterizeTime(framesPerSecond) {\r\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\r\n value = valueAtTime(time);\r\n }\r\n\r\n var time;\r\n var velocity;\r\n var value;\r\n var text;\r\n var textIndex;\r\n var textTotal;\r\n var selectorValue;\r\n var index = elem.data.ind;\r\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\r\n var parent;\r\n var randSeed = Math.floor(Math.random() * 1000000);\r\n var globalData = elem.globalData;\r\n function executeExpression(_value) {\r\n // globalData.pushExpression();\r\n value = _value;\r\n if (_needsRandom) {\r\n seedRandom(randSeed);\r\n }\r\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\r\n return value;\r\n }\r\n if (this.propType === 'textSelector') {\r\n textIndex = this.textIndex;\r\n textTotal = this.textTotal;\r\n selectorValue = this.selectorValue;\r\n }\r\n if (!thisLayer) {\r\n text = elem.layerInterface.text;\r\n thisLayer = elem.layerInterface;\r\n thisComp = elem.comp.compInterface;\r\n toWorld = thisLayer.toWorld.bind(thisLayer);\r\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\r\n fromComp = thisLayer.fromComp.bind(thisLayer);\r\n toComp = thisLayer.toComp.bind(thisLayer);\r\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\r\n fromCompToSurface = fromComp;\r\n }\r\n if (!transform) {\r\n transform = elem.layerInterface('ADBE Transform Group');\r\n $bm_transform = transform;\r\n if (transform) {\r\n anchorPoint = transform.anchorPoint;\r\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\r\n }\r\n }\r\n\r\n if (elemType === 4 && !content) {\r\n content = thisLayer('ADBE Root Vectors Group');\r\n }\r\n if (!effect) {\r\n effect = thisLayer(4);\r\n }\r\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\r\n if (hasParent && !parent) {\r\n parent = elem.hierarchy[0].layerInterface;\r\n }\r\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\r\n if (needsVelocity) {\r\n velocity = velocityAtTime(time);\r\n }\r\n expression_function();\r\n this.frameExpressionId = elem.globalData.frameId;\r\n\r\n // TODO: Check if it's possible to return on ShapeInterface the .v value\r\n if (scoped_bm_rt.propType === 'shape') {\r\n scoped_bm_rt = scoped_bm_rt.v;\r\n }\r\n // globalData.popExpression();\r\n return scoped_bm_rt;\r\n }\r\n return executeExpression;\r\n }\r\n\r\n ob.initiateExpression = initiateExpression;\r\n return ob;\r\n}());\r\n\r\n/* global ExpressionManager, createTypedArray */\r\n/* exported expressionHelpers */\r\n\r\nvar expressionHelpers = (function () {\r\n function searchExpressions(elem, data, prop) {\r\n if (data.x) {\r\n prop.k = true;\r\n prop.x = true;\r\n prop.initiateExpression = ExpressionManager.initiateExpression;\r\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\r\n }\r\n }\r\n\r\n function getValueAtTime(frameNum) {\r\n frameNum *= this.elem.globalData.frameRate;\r\n frameNum -= this.offsetTime;\r\n if (frameNum !== this._cachingAtTime.lastFrame) {\r\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\r\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\r\n this._cachingAtTime.lastFrame = frameNum;\r\n }\r\n return this._cachingAtTime.value;\r\n }\r\n\r\n function getSpeedAtTime(frameNum) {\r\n var delta = -0.01;\r\n var v1 = this.getValueAtTime(frameNum);\r\n var v2 = this.getValueAtTime(frameNum + delta);\r\n var speed = 0;\r\n if (v1.length) {\r\n var i;\r\n for (i = 0; i < v1.length; i += 1) {\r\n speed += Math.pow(v2[i] - v1[i], 2);\r\n }\r\n speed = Math.sqrt(speed) * 100;\r\n } else {\r\n speed = 0;\r\n }\r\n return speed;\r\n }\r\n\r\n function getVelocityAtTime(frameNum) {\r\n if (this.vel !== undefined) {\r\n return this.vel;\r\n }\r\n var delta = -0.001;\r\n // frameNum += this.elem.data.st;\r\n var v1 = this.getValueAtTime(frameNum);\r\n var v2 = this.getValueAtTime(frameNum + delta);\r\n var velocity;\r\n if (v1.length) {\r\n velocity = createTypedArray('float32', v1.length);\r\n var i;\r\n for (i = 0; i < v1.length; i += 1) {\r\n // removing frameRate\r\n // if needed, don't add it here\r\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\r\n velocity[i] = (v2[i] - v1[i]) / delta;\r\n }\r\n } else {\r\n velocity = (v2 - v1) / delta;\r\n }\r\n return velocity;\r\n }\r\n\r\n function getStaticValueAtTime() {\r\n return this.pv;\r\n }\r\n\r\n function setGroupProperty(propertyGroup) {\r\n this.propertyGroup = propertyGroup;\r\n }\r\n\r\n return {\r\n searchExpressions: searchExpressions,\r\n getSpeedAtTime: getSpeedAtTime,\r\n getVelocityAtTime: getVelocityAtTime,\r\n getValueAtTime: getValueAtTime,\r\n getStaticValueAtTime: getStaticValueAtTime,\r\n setGroupProperty: setGroupProperty,\r\n };\r\n}());\r\n\r\n/* global createTypedArray, Matrix, TransformPropertyFactory, expressionHelpers, PropertyFactory, expressionHelpers,\r\ninitialDefaultFrame, shapePool, ShapePropertyFactory, bez, extendPrototype, ExpressionManager, createSizedArray */\r\n\r\n(function addPropertyDecorator() {\r\n function loopOut(type, duration, durationFlag) {\r\n if (!this.k || !this.keyframes) {\r\n return this.pv;\r\n }\r\n type = type ? type.toLowerCase() : '';\r\n var currentFrame = this.comp.renderedFrame;\r\n var keyframes = this.keyframes;\r\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\r\n if (currentFrame <= lastKeyFrame) {\r\n return this.pv;\r\n }\r\n var cycleDuration;\r\n var firstKeyFrame;\r\n if (!durationFlag) {\r\n if (!duration || duration > keyframes.length - 1) {\r\n duration = keyframes.length - 1;\r\n }\r\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\r\n cycleDuration = lastKeyFrame - firstKeyFrame;\r\n } else {\r\n if (!duration) {\r\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\r\n } else {\r\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\r\n }\r\n firstKeyFrame = lastKeyFrame - cycleDuration;\r\n }\r\n var i;\r\n var len;\r\n var ret;\r\n if (type === 'pingpong') {\r\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\r\n if (iterations % 2 !== 0) {\r\n return this.getValueAtTime(((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n }\r\n } else if (type === 'offset') {\r\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\r\n if (this.pv.length) {\r\n ret = new Array(initV.length);\r\n len = ret.length;\r\n for (i = 0; i < len; i += 1) {\r\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\r\n }\r\n return ret;\r\n }\r\n return (endV - initV) * repeats + current;\r\n } else if (type === 'continue') {\r\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\r\n if (this.pv.length) {\r\n ret = new Array(lastValue.length);\r\n len = ret.length;\r\n for (i = 0; i < len; i += 1) {\r\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\r\n }\r\n return ret;\r\n }\r\n return lastValue + (lastValue - nextLastValue) * (((currentFrame - lastKeyFrame)) / 0.001);\r\n }\r\n return this.getValueAtTime((((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n\r\n }\r\n\r\n function loopIn(type, duration, durationFlag) {\r\n if (!this.k) {\r\n return this.pv;\r\n }\r\n type = type ? type.toLowerCase() : '';\r\n var currentFrame = this.comp.renderedFrame;\r\n var keyframes = this.keyframes;\r\n var firstKeyFrame = keyframes[0].t;\r\n if (currentFrame >= firstKeyFrame) {\r\n return this.pv;\r\n }\r\n var cycleDuration;\r\n var lastKeyFrame;\r\n if (!durationFlag) {\r\n if (!duration || duration > keyframes.length - 1) {\r\n duration = keyframes.length - 1;\r\n }\r\n lastKeyFrame = keyframes[duration].t;\r\n cycleDuration = lastKeyFrame - firstKeyFrame;\r\n } else {\r\n if (!duration) {\r\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\r\n } else {\r\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\r\n }\r\n lastKeyFrame = firstKeyFrame + cycleDuration;\r\n }\r\n var i;\r\n var len;\r\n var ret;\r\n if (type === 'pingpong') {\r\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\r\n if (iterations % 2 === 0) {\r\n return this.getValueAtTime((((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n }\r\n } else if (type === 'offset') {\r\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var current = this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration) + firstKeyFrame) / this.comp.globalData.frameRate, 0);\r\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\r\n if (this.pv.length) {\r\n ret = new Array(initV.length);\r\n len = ret.length;\r\n for (i = 0; i < len; i += 1) {\r\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\r\n }\r\n return ret;\r\n }\r\n return current - (endV - initV) * repeats;\r\n } else if (type === 'continue') {\r\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\r\n if (this.pv.length) {\r\n ret = new Array(firstValue.length);\r\n len = ret.length;\r\n for (i = 0; i < len; i += 1) {\r\n ret[i] = firstValue[i] + ((firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame)) / 0.001;\r\n }\r\n return ret;\r\n }\r\n return firstValue + ((firstValue - nextFirstValue) * (firstKeyFrame - currentFrame)) / 0.001;\r\n }\r\n return this.getValueAtTime(((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame))) / this.comp.globalData.frameRate, 0); // eslint-disable-line\r\n\r\n }\r\n\r\n function smooth(width, samples) {\r\n if (!this.k) {\r\n return this.pv;\r\n }\r\n width = (width || 0.4) * 0.5;\r\n samples = Math.floor(samples || 5);\r\n if (samples <= 1) {\r\n return this.pv;\r\n }\r\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\r\n var initFrame = currentTime - width;\r\n var endFrame = currentTime + width;\r\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\r\n var i = 0;\r\n var j = 0;\r\n var value;\r\n if (this.pv.length) {\r\n value = createTypedArray('float32', this.pv.length);\r\n } else {\r\n value = 0;\r\n }\r\n var sampleValue;\r\n while (i < samples) {\r\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\r\n if (this.pv.length) {\r\n for (j = 0; j < this.pv.length; j += 1) {\r\n value[j] += sampleValue[j];\r\n }\r\n } else {\r\n value += sampleValue;\r\n }\r\n i += 1;\r\n }\r\n if (this.pv.length) {\r\n for (j = 0; j < this.pv.length; j += 1) {\r\n value[j] /= samples;\r\n }\r\n } else {\r\n value /= samples;\r\n }\r\n return value;\r\n }\r\n\r\n function getTransformValueAtTime(time) {\r\n if (!this._transformCachingAtTime) {\r\n this._transformCachingAtTime = {\r\n v: new Matrix(),\r\n };\r\n }\r\n /// /\r\n var matrix = this._transformCachingAtTime.v;\r\n matrix.cloneFromProps(this.pre.props);\r\n if (this.appliedTransformations < 1) {\r\n var anchor = this.a.getValueAtTime(time);\r\n matrix.translate(\r\n -anchor[0] * this.a.mult,\r\n -anchor[1] * this.a.mult,\r\n anchor[2] * this.a.mult\r\n );\r\n }\r\n if (this.appliedTransformations < 2) {\r\n var scale = this.s.getValueAtTime(time);\r\n matrix.scale(\r\n scale[0] * this.s.mult,\r\n scale[1] * this.s.mult,\r\n scale[2] * this.s.mult\r\n );\r\n }\r\n if (this.sk && this.appliedTransformations < 3) {\r\n var skew = this.sk.getValueAtTime(time);\r\n var skewAxis = this.sa.getValueAtTime(time);\r\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\r\n }\r\n if (this.r && this.appliedTransformations < 4) {\r\n var rotation = this.r.getValueAtTime(time);\r\n matrix.rotate(-rotation * this.r.mult);\r\n } else if (!this.r && this.appliedTransformations < 4) {\r\n var rotationZ = this.rz.getValueAtTime(time);\r\n var rotationY = this.ry.getValueAtTime(time);\r\n var rotationX = this.rx.getValueAtTime(time);\r\n var orientation = this.or.getValueAtTime(time);\r\n matrix.rotateZ(-rotationZ * this.rz.mult)\r\n .rotateY(rotationY * this.ry.mult)\r\n .rotateX(rotationX * this.rx.mult)\r\n .rotateZ(-orientation[2] * this.or.mult)\r\n .rotateY(orientation[1] * this.or.mult)\r\n .rotateX(orientation[0] * this.or.mult);\r\n }\r\n if (this.data.p && this.data.p.s) {\r\n var positionX = this.px.getValueAtTime(time);\r\n var positionY = this.py.getValueAtTime(time);\r\n if (this.data.p.z) {\r\n var positionZ = this.pz.getValueAtTime(time);\r\n matrix.translate(\r\n positionX * this.px.mult,\r\n positionY * this.py.mult,\r\n -positionZ * this.pz.mult\r\n );\r\n } else {\r\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\r\n }\r\n } else {\r\n var position = this.p.getValueAtTime(time);\r\n matrix.translate(\r\n position[0] * this.p.mult,\r\n position[1] * this.p.mult,\r\n -position[2] * this.p.mult\r\n );\r\n }\r\n return matrix;\r\n /// /\r\n }\r\n\r\n function getTransformStaticValueAtTime() {\r\n return this.v.clone(new Matrix());\r\n }\r\n\r\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\r\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\r\n var prop = getTransformProperty(elem, data, container);\r\n if (prop.dynamicProperties.length) {\r\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\r\n } else {\r\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\r\n }\r\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\r\n return prop;\r\n };\r\n\r\n var propertyGetProp = PropertyFactory.getProp;\r\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\r\n var prop = propertyGetProp(elem, data, type, mult, container);\r\n // prop.getVelocityAtTime = getVelocityAtTime;\r\n // prop.loopOut = loopOut;\r\n // prop.loopIn = loopIn;\r\n if (prop.kf) {\r\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\r\n } else {\r\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\r\n }\r\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\r\n prop.loopOut = loopOut;\r\n prop.loopIn = loopIn;\r\n prop.smooth = smooth;\r\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\r\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\r\n prop.numKeys = data.a === 1 ? data.k.length : 0;\r\n prop.propertyIndex = data.ix;\r\n var value = 0;\r\n if (type !== 0) {\r\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\r\n }\r\n prop._cachingAtTime = {\r\n lastFrame: initialDefaultFrame,\r\n lastIndex: 0,\r\n value: value,\r\n };\r\n expressionHelpers.searchExpressions(elem, data, prop);\r\n if (prop.k) {\r\n container.addDynamicProperty(prop);\r\n }\r\n\r\n return prop;\r\n };\r\n\r\n function getShapeValueAtTime(frameNum) {\r\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\r\n if (!this._cachingAtTime) {\r\n this._cachingAtTime = {\r\n shapeValue: shapePool.clone(this.pv),\r\n lastIndex: 0,\r\n lastTime: initialDefaultFrame,\r\n };\r\n }\r\n\r\n frameNum *= this.elem.globalData.frameRate;\r\n frameNum -= this.offsetTime;\r\n if (frameNum !== this._cachingAtTime.lastTime) {\r\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\r\n this._cachingAtTime.lastTime = frameNum;\r\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\r\n }\r\n return this._cachingAtTime.shapeValue;\r\n }\r\n\r\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\r\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\r\n\r\n function ShapeExpressions() {}\r\n ShapeExpressions.prototype = {\r\n vertices: function (prop, time) {\r\n if (this.k) {\r\n this.getValue();\r\n }\r\n var shapePath = this.v;\r\n if (time !== undefined) {\r\n shapePath = this.getValueAtTime(time, 0);\r\n }\r\n var i;\r\n var len = shapePath._length;\r\n var vertices = shapePath[prop];\r\n var points = shapePath.v;\r\n var arr = createSizedArray(len);\r\n for (i = 0; i < len; i += 1) {\r\n if (prop === 'i' || prop === 'o') {\r\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\r\n } else {\r\n arr[i] = [vertices[i][0], vertices[i][1]];\r\n }\r\n }\r\n return arr;\r\n },\r\n points: function (time) {\r\n return this.vertices('v', time);\r\n },\r\n inTangents: function (time) {\r\n return this.vertices('i', time);\r\n },\r\n outTangents: function (time) {\r\n return this.vertices('o', time);\r\n },\r\n isClosed: function () {\r\n return this.v.c;\r\n },\r\n pointOnPath: function (perc, time) {\r\n var shapePath = this.v;\r\n if (time !== undefined) {\r\n shapePath = this.getValueAtTime(time, 0);\r\n }\r\n if (!this._segmentsLength) {\r\n this._segmentsLength = bez.getSegmentsLength(shapePath);\r\n }\r\n\r\n var segmentsLength = this._segmentsLength;\r\n var lengths = segmentsLength.lengths;\r\n var lengthPos = segmentsLength.totalLength * perc;\r\n var i = 0;\r\n var len = lengths.length;\r\n var accumulatedLength = 0;\r\n var pt;\r\n while (i < len) {\r\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\r\n var initIndex = i;\r\n var endIndex = (shapePath.c && i === len - 1) ? 0 : i + 1;\r\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\r\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\r\n break;\r\n } else {\r\n accumulatedLength += lengths[i].addedLength;\r\n }\r\n i += 1;\r\n }\r\n if (!pt) {\r\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\r\n }\r\n return pt;\r\n },\r\n vectorOnPath: function (perc, time, vectorType) {\r\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\r\n if (perc == 1) { // eslint-disable-line eqeqeq\r\n perc = this.v.c;\r\n } else if (perc == 0) { // eslint-disable-line eqeqeq\r\n perc = 0.999;\r\n }\r\n var pt1 = this.pointOnPath(perc, time);\r\n var pt2 = this.pointOnPath(perc + 0.001, time);\r\n var xLength = pt2[0] - pt1[0];\r\n var yLength = pt2[1] - pt1[1];\r\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\r\n if (magnitude === 0) {\r\n return [0, 0];\r\n }\r\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\r\n return unitVector;\r\n },\r\n tangentOnPath: function (perc, time) {\r\n return this.vectorOnPath(perc, time, 'tangent');\r\n },\r\n normalOnPath: function (perc, time) {\r\n return this.vectorOnPath(perc, time, 'normal');\r\n },\r\n setGroupProperty: expressionHelpers.setGroupProperty,\r\n getValueAtTime: expressionHelpers.getStaticValueAtTime,\r\n };\r\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\r\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\r\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\r\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\r\n\r\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\r\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\r\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\r\n prop.propertyIndex = data.ix;\r\n prop.lock = false;\r\n if (type === 3) {\r\n expressionHelpers.searchExpressions(elem, data.pt, prop);\r\n } else if (type === 4) {\r\n expressionHelpers.searchExpressions(elem, data.ks, prop);\r\n }\r\n if (prop.k) {\r\n elem.addDynamicProperty(prop);\r\n }\r\n return prop;\r\n };\r\n}());\r\n\r\n/* global ExpressionManager, TextProperty */\r\n\r\n(function addDecorator() {\r\n function searchExpressions() {\r\n if (this.data.d.x) {\r\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\r\n this.addEffect(this.getExpressionValue.bind(this));\r\n return true;\r\n }\r\n return null;\r\n }\r\n\r\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\r\n var newValue = this.calculateExpression(text);\r\n if (currentValue.t !== newValue) {\r\n var newData = {};\r\n this.copyData(newData, currentValue);\r\n newData.t = newValue.toString();\r\n newData.__complete = false;\r\n return newData;\r\n }\r\n return currentValue;\r\n };\r\n\r\n TextProperty.prototype.searchProperty = function () {\r\n var isKeyframed = this.searchKeyframes();\r\n var hasExpressions = this.searchExpressions();\r\n this.kf = isKeyframed || hasExpressions;\r\n return this.kf;\r\n };\r\n\r\n TextProperty.prototype.searchExpressions = searchExpressions;\r\n}());\r\n\r\n/* global propertyGroupFactory, PropertyInterface */\r\n/* exported ShapePathInterface */\r\n\r\nvar ShapePathInterface = (\r\n\r\n function () {\r\n return function pathInterfaceFactory(shape, view, propertyGroup) {\r\n var prop = view.sh;\r\n\r\n function interfaceFunction(val) {\r\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\r\n return interfaceFunction.path;\r\n }\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n path: {\r\n get: function () {\r\n if (prop.k) {\r\n prop.getValue();\r\n }\r\n return prop;\r\n },\r\n },\r\n shape: {\r\n get: function () {\r\n if (prop.k) {\r\n prop.getValue();\r\n }\r\n return prop;\r\n },\r\n },\r\n _name: { value: shape.nm },\r\n ix: { value: shape.ix },\r\n propertyIndex: { value: shape.ix },\r\n mn: { value: shape.mn },\r\n propertyGroup: { value: propertyGroup },\r\n });\r\n return interfaceFunction;\r\n };\r\n }()\r\n);\r\n\r\n/* exported propertyGroupFactory */\r\n\r\nvar propertyGroupFactory = (function () {\r\n return function (interfaceFunction, parentPropertyGroup) {\r\n return function (val) {\r\n val = val === undefined ? 1 : val;\r\n if (val <= 0) {\r\n return interfaceFunction;\r\n }\r\n return parentPropertyGroup(val - 1);\r\n };\r\n };\r\n}());\r\n\r\n/* exported PropertyInterface */\r\n\r\nvar PropertyInterface = (function () {\r\n return function (propertyName, propertyGroup) {\r\n var interfaceFunction = {\r\n _name: propertyName,\r\n };\r\n\r\n function _propertyGroup(val) {\r\n val = val === undefined ? 1 : val;\r\n if (val <= 0) {\r\n return interfaceFunction;\r\n }\r\n return propertyGroup(val - 1);\r\n }\r\n\r\n return _propertyGroup;\r\n };\r\n}());\r\n\r\n/* global ExpressionPropertyInterface, PropertyInterface, propertyGroupFactory, ShapePathInterface */\r\n/* exported ShapeExpressionInterface */\r\n\r\nvar ShapeExpressionInterface = (function () {\r\n function iterateElements(shapes, view, propertyGroup) {\r\n var arr = [];\r\n var i;\r\n var len = shapes ? shapes.length : 0;\r\n for (i = 0; i < len; i += 1) {\r\n if (shapes[i].ty === 'gr') {\r\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'fl') {\r\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'st') {\r\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'tm') {\r\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'tr') {\r\n // arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\r\n } else if (shapes[i].ty === 'el') {\r\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'sr') {\r\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'sh') {\r\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'rc') {\r\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'rd') {\r\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'rp') {\r\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else if (shapes[i].ty === 'gf') {\r\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n } else {\r\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n function contentsInterfaceFactory(shape, view, propertyGroup) {\r\n var interfaces;\r\n var interfaceFunction = function _interfaceFunction(value) {\r\n var i = 0;\r\n var len = interfaces.length;\r\n while (i < len) {\r\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\r\n return interfaces[i];\r\n }\r\n i += 1;\r\n }\r\n if (typeof value === 'number') {\r\n return interfaces[value - 1];\r\n }\r\n return null;\r\n };\r\n\r\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\r\n interfaceFunction.numProperties = interfaces.length;\r\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\r\n interfaceFunction.transform = transformInterface;\r\n interfaceFunction.propertyIndex = shape.cix;\r\n interfaceFunction._name = shape.nm;\r\n\r\n return interfaceFunction;\r\n }\r\n\r\n function groupInterfaceFactory(shape, view, propertyGroup) {\r\n var interfaceFunction = function _interfaceFunction(value) {\r\n switch (value) {\r\n case 'ADBE Vectors Group':\r\n case 'Contents':\r\n case 2:\r\n return interfaceFunction.content;\r\n // Not necessary for now. Keeping them here in case a new case appears\r\n // case 'ADBE Vector Transform Group':\r\n // case 3:\r\n default:\r\n return interfaceFunction.transform;\r\n }\r\n };\r\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\r\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\r\n interfaceFunction.content = content;\r\n interfaceFunction.transform = transformInterface;\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function () {\r\n return shape.nm;\r\n },\r\n });\r\n // interfaceFunction.content = interfaceFunction;\r\n interfaceFunction.numProperties = shape.np;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n interfaceFunction.nm = shape.nm;\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function fillInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(val) {\r\n if (val === 'Color' || val === 'color') {\r\n return interfaceFunction.color;\r\n } if (val === 'Opacity' || val === 'opacity') {\r\n return interfaceFunction.opacity;\r\n }\r\n return null;\r\n }\r\n Object.defineProperties(interfaceFunction, {\r\n color: {\r\n get: ExpressionPropertyInterface(view.c),\r\n },\r\n opacity: {\r\n get: ExpressionPropertyInterface(view.o),\r\n },\r\n _name: { value: shape.nm },\r\n mn: { value: shape.mn },\r\n });\r\n\r\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\r\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\r\n return interfaceFunction;\r\n }\r\n\r\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(val) {\r\n if (val === 'Start Point' || val === 'start point') {\r\n return interfaceFunction.startPoint;\r\n }\r\n if (val === 'End Point' || val === 'end point') {\r\n return interfaceFunction.endPoint;\r\n }\r\n if (val === 'Opacity' || val === 'opacity') {\r\n return interfaceFunction.opacity;\r\n }\r\n return null;\r\n }\r\n Object.defineProperties(interfaceFunction, {\r\n startPoint: {\r\n get: ExpressionPropertyInterface(view.s),\r\n },\r\n endPoint: {\r\n get: ExpressionPropertyInterface(view.e),\r\n },\r\n opacity: {\r\n get: ExpressionPropertyInterface(view.o),\r\n },\r\n type: {\r\n get: function () {\r\n return 'a';\r\n },\r\n },\r\n _name: { value: shape.nm },\r\n mn: { value: shape.mn },\r\n });\r\n\r\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\r\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\r\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\r\n return interfaceFunction;\r\n }\r\n function defaultInterfaceFactory() {\r\n function interfaceFunction() {\r\n return null;\r\n }\r\n return interfaceFunction;\r\n }\r\n\r\n function strokeInterfaceFactory(shape, view, propertyGroup) {\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\r\n function addPropertyToDashOb(i) {\r\n Object.defineProperty(dashOb, shape.d[i].nm, {\r\n get: ExpressionPropertyInterface(view.d.dataProps[i].p),\r\n });\r\n }\r\n var i;\r\n var len = shape.d ? shape.d.length : 0;\r\n var dashOb = {};\r\n for (i = 0; i < len; i += 1) {\r\n addPropertyToDashOb(i);\r\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\r\n }\r\n\r\n function interfaceFunction(val) {\r\n if (val === 'Color' || val === 'color') {\r\n return interfaceFunction.color;\r\n } if (val === 'Opacity' || val === 'opacity') {\r\n return interfaceFunction.opacity;\r\n } if (val === 'Stroke Width' || val === 'stroke width') {\r\n return interfaceFunction.strokeWidth;\r\n }\r\n return null;\r\n }\r\n Object.defineProperties(interfaceFunction, {\r\n color: {\r\n get: ExpressionPropertyInterface(view.c),\r\n },\r\n opacity: {\r\n get: ExpressionPropertyInterface(view.o),\r\n },\r\n strokeWidth: {\r\n get: ExpressionPropertyInterface(view.w),\r\n },\r\n dash: {\r\n get: function () {\r\n return dashOb;\r\n },\r\n },\r\n _name: { value: shape.nm },\r\n mn: { value: shape.mn },\r\n });\r\n\r\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\r\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\r\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\r\n return interfaceFunction;\r\n }\r\n\r\n function trimInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(val) {\r\n if (val === shape.e.ix || val === 'End' || val === 'end') {\r\n return interfaceFunction.end;\r\n }\r\n if (val === shape.s.ix) {\r\n return interfaceFunction.start;\r\n }\r\n if (val === shape.o.ix) {\r\n return interfaceFunction.offset;\r\n }\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n interfaceFunction.propertyIndex = shape.ix;\r\n\r\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\r\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\r\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\r\n interfaceFunction.propertyIndex = shape.ix;\r\n interfaceFunction.propertyGroup = propertyGroup;\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n start: {\r\n get: ExpressionPropertyInterface(view.s),\r\n },\r\n end: {\r\n get: ExpressionPropertyInterface(view.e),\r\n },\r\n offset: {\r\n get: ExpressionPropertyInterface(view.o),\r\n },\r\n _name: { value: shape.nm },\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function transformInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.a.ix === value || value === 'Anchor Point') {\r\n return interfaceFunction.anchorPoint;\r\n }\r\n if (shape.o.ix === value || value === 'Opacity') {\r\n return interfaceFunction.opacity;\r\n }\r\n if (shape.p.ix === value || value === 'Position') {\r\n return interfaceFunction.position;\r\n }\r\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\r\n return interfaceFunction.rotation;\r\n }\r\n if (shape.s.ix === value || value === 'Scale') {\r\n return interfaceFunction.scale;\r\n }\r\n if ((shape.sk && shape.sk.ix === value) || value === 'Skew') {\r\n return interfaceFunction.skew;\r\n }\r\n if ((shape.sa && shape.sa.ix === value) || value === 'Skew Axis') {\r\n return interfaceFunction.skewAxis;\r\n }\r\n return null;\r\n }\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\r\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\r\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\r\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\r\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\r\n if (view.transform.mProps.sk) {\r\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\r\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\r\n }\r\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n opacity: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.o),\r\n },\r\n position: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.p),\r\n },\r\n anchorPoint: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.a),\r\n },\r\n scale: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.s),\r\n },\r\n rotation: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.r),\r\n },\r\n skew: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.sk),\r\n },\r\n skewAxis: {\r\n get: ExpressionPropertyInterface(view.transform.mProps.sa),\r\n },\r\n _name: { value: shape.nm },\r\n });\r\n interfaceFunction.ty = 'tr';\r\n interfaceFunction.mn = shape.mn;\r\n interfaceFunction.propertyGroup = propertyGroup;\r\n return interfaceFunction;\r\n }\r\n\r\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.p.ix === value) {\r\n return interfaceFunction.position;\r\n }\r\n if (shape.s.ix === value) {\r\n return interfaceFunction.size;\r\n }\r\n return null;\r\n }\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n interfaceFunction.propertyIndex = shape.ix;\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\r\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n size: {\r\n get: ExpressionPropertyInterface(prop.s),\r\n },\r\n position: {\r\n get: ExpressionPropertyInterface(prop.p),\r\n },\r\n _name: { value: shape.nm },\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function starInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.p.ix === value) {\r\n return interfaceFunction.position;\r\n }\r\n if (shape.r.ix === value) {\r\n return interfaceFunction.rotation;\r\n }\r\n if (shape.pt.ix === value) {\r\n return interfaceFunction.points;\r\n }\r\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\r\n return interfaceFunction.outerRadius;\r\n }\r\n if (shape.os.ix === value) {\r\n return interfaceFunction.outerRoundness;\r\n }\r\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\r\n return interfaceFunction.innerRadius;\r\n }\r\n if (shape.is && shape.is.ix === value) {\r\n return interfaceFunction.innerRoundness;\r\n }\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\r\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\r\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\r\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\r\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\r\n if (shape.ir) {\r\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\r\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\r\n }\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n position: {\r\n get: ExpressionPropertyInterface(prop.p),\r\n },\r\n rotation: {\r\n get: ExpressionPropertyInterface(prop.r),\r\n },\r\n points: {\r\n get: ExpressionPropertyInterface(prop.pt),\r\n },\r\n outerRadius: {\r\n get: ExpressionPropertyInterface(prop.or),\r\n },\r\n outerRoundness: {\r\n get: ExpressionPropertyInterface(prop.os),\r\n },\r\n innerRadius: {\r\n get: ExpressionPropertyInterface(prop.ir),\r\n },\r\n innerRoundness: {\r\n get: ExpressionPropertyInterface(prop.is),\r\n },\r\n _name: { value: shape.nm },\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function rectInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.p.ix === value) {\r\n return interfaceFunction.position;\r\n }\r\n if (shape.r.ix === value) {\r\n return interfaceFunction.roundness;\r\n }\r\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\r\n return interfaceFunction.size;\r\n }\r\n return null;\r\n }\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\r\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\r\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n position: {\r\n get: ExpressionPropertyInterface(prop.p),\r\n },\r\n roundness: {\r\n get: ExpressionPropertyInterface(prop.r),\r\n },\r\n size: {\r\n get: ExpressionPropertyInterface(prop.s),\r\n },\r\n _name: { value: shape.nm },\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function roundedInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.r.ix === value || value === 'Round Corners 1') {\r\n return interfaceFunction.radius;\r\n }\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n var prop = view;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\r\n\r\n Object.defineProperties(interfaceFunction, {\r\n radius: {\r\n get: ExpressionPropertyInterface(prop.rd),\r\n },\r\n _name: { value: shape.nm },\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\r\n function interfaceFunction(value) {\r\n if (shape.c.ix === value || value === 'Copies') {\r\n return interfaceFunction.copies;\r\n } if (shape.o.ix === value || value === 'Offset') {\r\n return interfaceFunction.offset;\r\n }\r\n return null;\r\n }\r\n\r\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\r\n var prop = view;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\r\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\r\n Object.defineProperties(interfaceFunction, {\r\n copies: {\r\n get: ExpressionPropertyInterface(prop.c),\r\n },\r\n offset: {\r\n get: ExpressionPropertyInterface(prop.o),\r\n },\r\n _name: { value: shape.nm },\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n\r\n return function (shapes, view, propertyGroup) {\r\n var interfaces;\r\n function _interfaceFunction(value) {\r\n if (typeof value === 'number') {\r\n value = value === undefined ? 1 : value;\r\n if (value === 0) {\r\n return propertyGroup;\r\n }\r\n return interfaces[value - 1];\r\n }\r\n var i = 0;\r\n var len = interfaces.length;\r\n while (i < len) {\r\n if (interfaces[i]._name === value) {\r\n return interfaces[i];\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n }\r\n function parentGroupWrapper() {\r\n return propertyGroup;\r\n }\r\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\r\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\r\n _interfaceFunction.numProperties = interfaces.length;\r\n _interfaceFunction._name = 'Contents';\r\n return _interfaceFunction;\r\n };\r\n}());\r\n\r\n/* exported TextExpressionInterface */\r\n\r\nvar TextExpressionInterface = (function () {\r\n return function (elem) {\r\n var _prevValue;\r\n var _sourceText;\r\n function _thisLayerFunction(name) {\r\n switch (name) {\r\n case 'ADBE Text Document':\r\n return _thisLayerFunction.sourceText;\r\n default:\r\n return null;\r\n }\r\n }\r\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\r\n get: function () {\r\n elem.textProperty.getValue();\r\n var stringValue = elem.textProperty.currentData.t;\r\n if (stringValue !== _prevValue) {\r\n elem.textProperty.currentData.t = _prevValue;\r\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\r\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\r\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\r\n }\r\n return _sourceText;\r\n },\r\n });\r\n return _thisLayerFunction;\r\n };\r\n}());\r\n\r\n/* global Matrix, MaskManagerInterface, TransformExpressionInterface, getDescriptor */\r\n/* exported LayerExpressionInterface */\r\n\r\nvar LayerExpressionInterface = (function () {\r\n function getMatrix(time) {\r\n var toWorldMat = new Matrix();\r\n if (time !== undefined) {\r\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\r\n propMatrix.clone(toWorldMat);\r\n } else {\r\n var transformMat = this._elem.finalTransform.mProp;\r\n transformMat.applyToMatrix(toWorldMat);\r\n }\r\n return toWorldMat;\r\n }\r\n\r\n function toWorldVec(arr, time) {\r\n var toWorldMat = this.getMatrix(time);\r\n toWorldMat.props[12] = 0;\r\n toWorldMat.props[13] = 0;\r\n toWorldMat.props[14] = 0;\r\n return this.applyPoint(toWorldMat, arr);\r\n }\r\n\r\n function toWorld(arr, time) {\r\n var toWorldMat = this.getMatrix(time);\r\n return this.applyPoint(toWorldMat, arr);\r\n }\r\n\r\n function fromWorldVec(arr, time) {\r\n var toWorldMat = this.getMatrix(time);\r\n toWorldMat.props[12] = 0;\r\n toWorldMat.props[13] = 0;\r\n toWorldMat.props[14] = 0;\r\n return this.invertPoint(toWorldMat, arr);\r\n }\r\n\r\n function fromWorld(arr, time) {\r\n var toWorldMat = this.getMatrix(time);\r\n return this.invertPoint(toWorldMat, arr);\r\n }\r\n\r\n function applyPoint(matrix, arr) {\r\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\r\n var i;\r\n var len = this._elem.hierarchy.length;\r\n for (i = 0; i < len; i += 1) {\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\r\n }\r\n }\r\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\r\n }\r\n\r\n function invertPoint(matrix, arr) {\r\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\r\n var i;\r\n var len = this._elem.hierarchy.length;\r\n for (i = 0; i < len; i += 1) {\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\r\n }\r\n }\r\n return matrix.inversePoint(arr);\r\n }\r\n\r\n function fromComp(arr) {\r\n var toWorldMat = new Matrix();\r\n toWorldMat.reset();\r\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\r\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\r\n var i;\r\n var len = this._elem.hierarchy.length;\r\n for (i = 0; i < len; i += 1) {\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\r\n }\r\n return toWorldMat.inversePoint(arr);\r\n }\r\n return toWorldMat.inversePoint(arr);\r\n }\r\n\r\n function sampleImage() {\r\n return [1, 1, 1, 1];\r\n }\r\n\r\n return function (elem) {\r\n var transformInterface;\r\n\r\n function _registerMaskInterface(maskManager) {\r\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\r\n }\r\n function _registerEffectsInterface(effects) {\r\n _thisLayerFunction.effect = effects;\r\n }\r\n\r\n function _thisLayerFunction(name) {\r\n switch (name) {\r\n case 'ADBE Root Vectors Group':\r\n case 'Contents':\r\n case 2:\r\n return _thisLayerFunction.shapeInterface;\r\n case 1:\r\n case 6:\r\n case 'Transform':\r\n case 'transform':\r\n case 'ADBE Transform Group':\r\n return transformInterface;\r\n case 4:\r\n case 'ADBE Effect Parade':\r\n case 'effects':\r\n case 'Effects':\r\n return _thisLayerFunction.effect;\r\n case 'ADBE Text Properties':\r\n return _thisLayerFunction.textInterface;\r\n default:\r\n return null;\r\n }\r\n }\r\n _thisLayerFunction.getMatrix = getMatrix;\r\n _thisLayerFunction.invertPoint = invertPoint;\r\n _thisLayerFunction.applyPoint = applyPoint;\r\n _thisLayerFunction.toWorld = toWorld;\r\n _thisLayerFunction.toWorldVec = toWorldVec;\r\n _thisLayerFunction.fromWorld = fromWorld;\r\n _thisLayerFunction.fromWorldVec = fromWorldVec;\r\n _thisLayerFunction.toComp = toWorld;\r\n _thisLayerFunction.fromComp = fromComp;\r\n _thisLayerFunction.sampleImage = sampleImage;\r\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\r\n _thisLayerFunction._elem = elem;\r\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\r\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\r\n Object.defineProperties(_thisLayerFunction, {\r\n hasParent: {\r\n get: function () {\r\n return elem.hierarchy.length;\r\n },\r\n },\r\n parent: {\r\n get: function () {\r\n return elem.hierarchy[0].layerInterface;\r\n },\r\n },\r\n rotation: getDescriptor(transformInterface, 'rotation'),\r\n scale: getDescriptor(transformInterface, 'scale'),\r\n position: getDescriptor(transformInterface, 'position'),\r\n opacity: getDescriptor(transformInterface, 'opacity'),\r\n anchorPoint: anchorPointDescriptor,\r\n anchor_point: anchorPointDescriptor,\r\n transform: {\r\n get: function () {\r\n return transformInterface;\r\n },\r\n },\r\n active: {\r\n get: function () {\r\n return elem.isInRange;\r\n },\r\n },\r\n });\r\n\r\n _thisLayerFunction.startTime = elem.data.st;\r\n _thisLayerFunction.index = elem.data.ind;\r\n _thisLayerFunction.source = elem.data.refId;\r\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\r\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\r\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\r\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\r\n _thisLayerFunction._name = elem.data.nm;\r\n\r\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\r\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\r\n return _thisLayerFunction;\r\n };\r\n}());\r\n\r\n/* global */\r\n/* exported FootageInterface */\r\n\r\nvar FootageInterface = (function () {\r\n var outlineInterfaceFactory = (function (elem) {\r\n var currentPropertyName = '';\r\n var currentProperty = elem.getFootageData();\r\n function init() {\r\n currentPropertyName = '';\r\n currentProperty = elem.getFootageData();\r\n return searchProperty;\r\n }\r\n function searchProperty(value) {\r\n if (currentProperty[value]) {\r\n currentPropertyName = value;\r\n currentProperty = currentProperty[value];\r\n if (typeof currentProperty === 'object') {\r\n return searchProperty;\r\n }\r\n return currentProperty;\r\n }\r\n var propertyNameIndex = value.indexOf(currentPropertyName);\r\n if (propertyNameIndex !== -1) {\r\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\r\n currentProperty = currentProperty[index];\r\n if (typeof currentProperty === 'object') {\r\n return searchProperty;\r\n }\r\n return currentProperty;\r\n }\r\n return '';\r\n }\r\n return init;\r\n });\r\n\r\n var dataInterfaceFactory = function (elem) {\r\n function interfaceFunction(value) {\r\n if (value === 'Outline') {\r\n return interfaceFunction.outlineInterface();\r\n }\r\n return null;\r\n }\r\n\r\n interfaceFunction._name = 'Outline';\r\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\r\n return interfaceFunction;\r\n };\r\n\r\n return function (elem) {\r\n function _interfaceFunction(value) {\r\n if (value === 'Data') {\r\n return _interfaceFunction.dataInterface;\r\n }\r\n return null;\r\n }\r\n\r\n _interfaceFunction._name = 'Data';\r\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\r\n return _interfaceFunction;\r\n };\r\n}());\r\n\r\n/* exported CompExpressionInterface */\r\n\r\nvar CompExpressionInterface = (function () {\r\n return function (comp) {\r\n function _thisLayerFunction(name) {\r\n var i = 0;\r\n var len = comp.layers.length;\r\n while (i < len) {\r\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\r\n return comp.elements[i].layerInterface;\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n // return {active:false};\r\n }\r\n Object.defineProperty(_thisLayerFunction, '_name', { value: comp.data.nm });\r\n _thisLayerFunction.layer = _thisLayerFunction;\r\n _thisLayerFunction.pixelAspect = 1;\r\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\r\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\r\n _thisLayerFunction.pixelAspect = 1;\r\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\r\n _thisLayerFunction.displayStartTime = 0;\r\n _thisLayerFunction.numLayers = comp.layers.length;\r\n return _thisLayerFunction;\r\n };\r\n}());\r\n\r\n/* global ExpressionPropertyInterface */\r\n/* exported TransformExpressionInterface */\r\n\r\nvar TransformExpressionInterface = (function () {\r\n return function (transform) {\r\n function _thisFunction(name) {\r\n switch (name) {\r\n case 'scale':\r\n case 'Scale':\r\n case 'ADBE Scale':\r\n case 6:\r\n return _thisFunction.scale;\r\n case 'rotation':\r\n case 'Rotation':\r\n case 'ADBE Rotation':\r\n case 'ADBE Rotate Z':\r\n case 10:\r\n return _thisFunction.rotation;\r\n case 'ADBE Rotate X':\r\n return _thisFunction.xRotation;\r\n case 'ADBE Rotate Y':\r\n return _thisFunction.yRotation;\r\n case 'position':\r\n case 'Position':\r\n case 'ADBE Position':\r\n case 2:\r\n return _thisFunction.position;\r\n case 'ADBE Position_0':\r\n return _thisFunction.xPosition;\r\n case 'ADBE Position_1':\r\n return _thisFunction.yPosition;\r\n case 'ADBE Position_2':\r\n return _thisFunction.zPosition;\r\n case 'anchorPoint':\r\n case 'AnchorPoint':\r\n case 'Anchor Point':\r\n case 'ADBE AnchorPoint':\r\n case 1:\r\n return _thisFunction.anchorPoint;\r\n case 'opacity':\r\n case 'Opacity':\r\n case 11:\r\n return _thisFunction.opacity;\r\n default:\r\n return null;\r\n }\r\n }\r\n Object.defineProperty(_thisFunction, 'rotation', {\r\n get: ExpressionPropertyInterface(transform.r || transform.rz),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'zRotation', {\r\n get: ExpressionPropertyInterface(transform.rz || transform.r),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'xRotation', {\r\n get: ExpressionPropertyInterface(transform.rx),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'yRotation', {\r\n get: ExpressionPropertyInterface(transform.ry),\r\n });\r\n Object.defineProperty(_thisFunction, 'scale', {\r\n get: ExpressionPropertyInterface(transform.s),\r\n });\r\n var _px;\r\n var _py;\r\n var _pz;\r\n var _transformFactory;\r\n if (transform.p) {\r\n _transformFactory = ExpressionPropertyInterface(transform.p);\r\n } else {\r\n _px = ExpressionPropertyInterface(transform.px);\r\n _py = ExpressionPropertyInterface(transform.py);\r\n if (transform.pz) {\r\n _pz = ExpressionPropertyInterface(transform.pz);\r\n }\r\n }\r\n Object.defineProperty(_thisFunction, 'position', {\r\n get: function () {\r\n if (transform.p) {\r\n return _transformFactory();\r\n }\r\n return [\r\n _px(),\r\n _py(),\r\n _pz ? _pz() : 0];\r\n },\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'xPosition', {\r\n get: ExpressionPropertyInterface(transform.px),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'yPosition', {\r\n get: ExpressionPropertyInterface(transform.py),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'zPosition', {\r\n get: ExpressionPropertyInterface(transform.pz),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'anchorPoint', {\r\n get: ExpressionPropertyInterface(transform.a),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'opacity', {\r\n get: ExpressionPropertyInterface(transform.o),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'skew', {\r\n get: ExpressionPropertyInterface(transform.sk),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'skewAxis', {\r\n get: ExpressionPropertyInterface(transform.sa),\r\n });\r\n\r\n Object.defineProperty(_thisFunction, 'orientation', {\r\n get: ExpressionPropertyInterface(transform.or),\r\n });\r\n\r\n return _thisFunction;\r\n };\r\n}());\r\n\r\n/* exported ProjectInterface */\r\n\r\nvar ProjectInterface = (function () {\r\n function registerComposition(comp) {\r\n this.compositions.push(comp);\r\n }\r\n\r\n return function () {\r\n function _thisProjectFunction(name) {\r\n var i = 0;\r\n var len = this.compositions.length;\r\n while (i < len) {\r\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\r\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\r\n this.compositions[i].prepareFrame(this.currentFrame);\r\n }\r\n return this.compositions[i].compInterface;\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n }\r\n\r\n _thisProjectFunction.compositions = [];\r\n _thisProjectFunction.currentFrame = 0;\r\n\r\n _thisProjectFunction.registerComposition = registerComposition;\r\n\r\n return _thisProjectFunction;\r\n };\r\n}());\r\n\r\n/* global propertyGroupFactory, ExpressionPropertyInterface, PropertyInterface */\r\n/* exported EffectsExpressionInterface */\r\n\r\nvar EffectsExpressionInterface = (function () {\r\n var ob = {\r\n createEffectsInterface: createEffectsInterface,\r\n };\r\n\r\n function createEffectsInterface(elem, propertyGroup) {\r\n if (elem.effectsManager) {\r\n var effectElements = [];\r\n var effectsData = elem.data.ef;\r\n var i;\r\n var len = elem.effectsManager.effectElements.length;\r\n for (i = 0; i < len; i += 1) {\r\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\r\n }\r\n\r\n var effects = elem.data.ef || [];\r\n var groupInterface = function (name) {\r\n i = 0;\r\n len = effects.length;\r\n while (i < len) {\r\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\r\n return effectElements[i];\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n };\r\n Object.defineProperty(groupInterface, 'numProperties', {\r\n get: function () {\r\n return effects.length;\r\n },\r\n });\r\n return groupInterface;\r\n }\r\n return null;\r\n }\r\n\r\n function createGroupInterface(data, elements, propertyGroup, elem) {\r\n function groupInterface(name) {\r\n var effects = data.ef;\r\n var i = 0;\r\n var len = effects.length;\r\n while (i < len) {\r\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\r\n if (effects[i].ty === 5) {\r\n return effectElements[i];\r\n }\r\n return effectElements[i]();\r\n }\r\n i += 1;\r\n }\r\n throw new Error();\r\n }\r\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\r\n\r\n var effectElements = [];\r\n var i;\r\n var len = data.ef.length;\r\n for (i = 0; i < len; i += 1) {\r\n if (data.ef[i].ty === 5) {\r\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\r\n } else {\r\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\r\n }\r\n }\r\n\r\n if (data.mn === 'ADBE Color Control') {\r\n Object.defineProperty(groupInterface, 'color', {\r\n get: function () {\r\n return effectElements[0]();\r\n },\r\n });\r\n }\r\n Object.defineProperties(groupInterface, {\r\n numProperties: {\r\n get: function () {\r\n return data.np;\r\n },\r\n },\r\n _name: { value: data.nm },\r\n propertyGroup: { value: _propertyGroup },\r\n });\r\n groupInterface.enabled = data.en !== 0;\r\n groupInterface.active = groupInterface.enabled;\r\n return groupInterface;\r\n }\r\n\r\n function createValueInterface(element, type, elem, propertyGroup) {\r\n var expressionProperty = ExpressionPropertyInterface(element.p);\r\n function interfaceFunction() {\r\n if (type === 10) {\r\n return elem.comp.compInterface(element.p.v);\r\n }\r\n return expressionProperty();\r\n }\r\n\r\n if (element.p.setGroupProperty) {\r\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\r\n }\r\n\r\n return interfaceFunction;\r\n }\r\n\r\n return ob;\r\n}());\r\n\r\n/* global createSizedArray */\r\n/* exported MaskManagerInterface */\r\n\r\nvar MaskManagerInterface = (function () {\r\n function MaskInterface(mask, data) {\r\n this._mask = mask;\r\n this._data = data;\r\n }\r\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\r\n get: function () {\r\n if (this._mask.prop.k) {\r\n this._mask.prop.getValue();\r\n }\r\n return this._mask.prop;\r\n },\r\n });\r\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\r\n get: function () {\r\n if (this._mask.op.k) {\r\n this._mask.op.getValue();\r\n }\r\n return this._mask.op.v * 100;\r\n },\r\n });\r\n\r\n var MaskManager = function (maskManager) {\r\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\r\n var i;\r\n var len = maskManager.viewData.length;\r\n for (i = 0; i < len; i += 1) {\r\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\r\n }\r\n\r\n var maskFunction = function (name) {\r\n i = 0;\r\n while (i < len) {\r\n if (maskManager.masksProperties[i].nm === name) {\r\n return _masksInterfaces[i];\r\n }\r\n i += 1;\r\n }\r\n return null;\r\n };\r\n return maskFunction;\r\n };\r\n return MaskManager;\r\n}());\r\n\r\n/* global createTypedArray */\r\n/* exported ExpressionPropertyInterface */\r\n\r\nvar ExpressionPropertyInterface = (function () {\r\n var defaultUnidimensionalValue = { pv: 0, v: 0, mult: 1 };\r\n var defaultMultidimensionalValue = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 };\r\n\r\n function completeProperty(expressionValue, property, type) {\r\n Object.defineProperty(expressionValue, 'velocity', {\r\n get: function () {\r\n return property.getVelocityAtTime(property.comp.currentFrame);\r\n },\r\n });\r\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\r\n expressionValue.key = function (pos) {\r\n if (!expressionValue.numKeys) {\r\n return 0;\r\n }\r\n var value = '';\r\n if ('s' in property.keyframes[pos - 1]) {\r\n value = property.keyframes[pos - 1].s;\r\n } else if ('e' in property.keyframes[pos - 2]) {\r\n value = property.keyframes[pos - 2].e;\r\n } else {\r\n value = property.keyframes[pos - 2].s;\r\n }\r\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\r\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\r\n valueProp.value = type === 'unidimensional' ? value[0] : value;\r\n return valueProp;\r\n };\r\n expressionValue.valueAtTime = property.getValueAtTime;\r\n expressionValue.speedAtTime = property.getSpeedAtTime;\r\n expressionValue.velocityAtTime = property.getVelocityAtTime;\r\n expressionValue.propertyGroup = property.propertyGroup;\r\n }\r\n\r\n function UnidimensionalPropertyInterface(property) {\r\n if (!property || !('pv' in property)) {\r\n property = defaultUnidimensionalValue;\r\n }\r\n var mult = 1 / property.mult;\r\n var val = property.pv * mult;\r\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\r\n expressionValue.value = val;\r\n completeProperty(expressionValue, property, 'unidimensional');\r\n\r\n return function () {\r\n if (property.k) {\r\n property.getValue();\r\n }\r\n val = property.v * mult;\r\n if (expressionValue.value !== val) {\r\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\r\n expressionValue.value = val;\r\n completeProperty(expressionValue, property, 'unidimensional');\r\n }\r\n return expressionValue;\r\n };\r\n }\r\n\r\n function MultidimensionalPropertyInterface(property) {\r\n if (!property || !('pv' in property)) {\r\n property = defaultMultidimensionalValue;\r\n }\r\n var mult = 1 / property.mult;\r\n var len = (property.data && property.data.l) || property.pv.length;\r\n var expressionValue = createTypedArray('float32', len);\r\n var arrValue = createTypedArray('float32', len);\r\n expressionValue.value = arrValue;\r\n completeProperty(expressionValue, property, 'multidimensional');\r\n\r\n return function () {\r\n if (property.k) {\r\n property.getValue();\r\n }\r\n for (var i = 0; i < len; i += 1) {\r\n arrValue[i] = property.v[i] * mult;\r\n expressionValue[i] = arrValue[i];\r\n }\r\n return expressionValue;\r\n };\r\n }\r\n\r\n // TODO: try to avoid using this getter\r\n function defaultGetter() {\r\n return defaultUnidimensionalValue;\r\n }\r\n\r\n return function (property) {\r\n if (!property) {\r\n return defaultGetter;\r\n } if (property.propType === 'unidimensional') {\r\n return UnidimensionalPropertyInterface(property);\r\n }\r\n return MultidimensionalPropertyInterface(property);\r\n };\r\n}());\r\n\r\n/* global expressionHelpers, TextSelectorProp, ExpressionManager */\r\n/* exported TextExpressionSelectorProp */\r\n\r\n(function () {\r\n var TextExpressionSelectorProp = (function () { // eslint-disable-line no-unused-vars\r\n function getValueProxy(index, total) {\r\n this.textIndex = index + 1;\r\n this.textTotal = total;\r\n this.v = this.getValue() * this.mult;\r\n return this.v;\r\n }\r\n\r\n return function TextExpressionSelectorPropFactory(elem, data) {\r\n this.pv = 1;\r\n this.comp = elem.comp;\r\n this.elem = elem;\r\n this.mult = 0.01;\r\n this.propType = 'textSelector';\r\n this.textTotal = data.totalChars;\r\n this.selectorValue = 100;\r\n this.lastValue = [1, 1, 1];\r\n this.k = true;\r\n this.x = true;\r\n this.getValue = ExpressionManager.initiateExpression.bind(this)(elem, data, this);\r\n this.getMult = getValueProxy;\r\n this.getVelocityAtTime = expressionHelpers.getVelocityAtTime;\r\n if (this.kf) {\r\n this.getValueAtTime = expressionHelpers.getValueAtTime.bind(this);\r\n } else {\r\n this.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(this);\r\n }\r\n this.setGroupProperty = expressionHelpers.setGroupProperty;\r\n };\r\n }());\r\n\r\n var propertyGetTextProp = TextSelectorProp.getTextSelectorProp;\r\n TextSelectorProp.getTextSelectorProp = function (elem, data, arr) {\r\n if (data.t === 1) {\r\n return new TextExpressionSelectorPropFactory(elem, data, arr); // eslint-disable-line no-undef\r\n }\r\n return propertyGetTextProp(elem, data, arr);\r\n };\r\n}());\r\n\r\n/* global PropertyFactory */\r\n/* exported SliderEffect, AngleEffect, ColorEffect, PointEffect, LayerIndexEffect, MaskIndexEffect, CheckboxEffect, NoValueEffect */\r\n\r\nfunction SliderEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n}\r\nfunction AngleEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n}\r\nfunction ColorEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\r\n}\r\nfunction PointEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\r\n}\r\nfunction LayerIndexEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n}\r\nfunction MaskIndexEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n}\r\nfunction CheckboxEffect(data, elem, container) {\r\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\r\n}\r\nfunction NoValueEffect() {\r\n this.p = {};\r\n}\r\n\r\n/* global extendPrototype, SliderEffect, AngleEffect, ColorEffect, PointEffect, CheckboxEffect, LayerIndexEffect,\r\nMaskIndexEffect, NoValueEffect, DynamicPropertyContainer */\r\n\r\nfunction EffectsManager(data, element) {\r\n var effects = data.ef || [];\r\n this.effectElements = [];\r\n var i;\r\n var len = effects.length;\r\n var effectItem;\r\n for (i = 0; i < len; i += 1) {\r\n effectItem = new GroupEffect(effects[i], element);\r\n this.effectElements.push(effectItem);\r\n }\r\n}\r\n\r\nfunction GroupEffect(data, element) {\r\n this.init(data, element);\r\n}\r\n\r\nextendPrototype([DynamicPropertyContainer], GroupEffect);\r\n\r\nGroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\r\n\r\nGroupEffect.prototype.init = function (data, element) {\r\n this.data = data;\r\n this.effectElements = [];\r\n this.initDynamicPropertyContainer(element);\r\n var i;\r\n var len = this.data.ef.length;\r\n var eff;\r\n var effects = this.data.ef;\r\n for (i = 0; i < len; i += 1) {\r\n eff = null;\r\n switch (effects[i].ty) {\r\n case 0:\r\n eff = new SliderEffect(effects[i], element, this);\r\n break;\r\n case 1:\r\n eff = new AngleEffect(effects[i], element, this);\r\n break;\r\n case 2:\r\n eff = new ColorEffect(effects[i], element, this);\r\n break;\r\n case 3:\r\n eff = new PointEffect(effects[i], element, this);\r\n break;\r\n case 4:\r\n case 7:\r\n eff = new CheckboxEffect(effects[i], element, this);\r\n break;\r\n case 10:\r\n eff = new LayerIndexEffect(effects[i], element, this);\r\n break;\r\n case 11:\r\n eff = new MaskIndexEffect(effects[i], element, this);\r\n break;\r\n case 5:\r\n eff = new EffectsManager(effects[i], element, this);\r\n break;\r\n // case 6:\r\n default:\r\n eff = new NoValueEffect(effects[i], element, this);\r\n break;\r\n }\r\n if (eff) {\r\n this.effectElements.push(eff);\r\n }\r\n }\r\n};\r\n\r\n\r\nvar lottie = {};\r\n\r\nfunction setLocationHref(href) {\r\n locationHref = href;\r\n}\r\n\r\nfunction searchAnimations() {\r\n if (standalone === true) {\r\n animationManager.searchAnimations(animationData, standalone, renderer);\r\n } else {\r\n animationManager.searchAnimations();\r\n }\r\n}\r\n\r\nfunction setSubframeRendering(flag) {\r\n subframeEnabled = flag;\r\n}\r\n\r\nfunction setIDPrefix(prefix) {\r\n idPrefix = prefix;\r\n}\r\n\r\nfunction loadAnimation(params) {\r\n if (standalone === true) {\r\n params.animationData = JSON.parse(animationData);\r\n }\r\n return animationManager.loadAnimation(params);\r\n}\r\n\r\nfunction setQuality(value) {\r\n if (typeof value === 'string') {\r\n switch (value) {\r\n case 'high':\r\n defaultCurveSegments = 200;\r\n break;\r\n default:\r\n case 'medium':\r\n defaultCurveSegments = 50;\r\n break;\r\n case 'low':\r\n defaultCurveSegments = 10;\r\n break;\r\n }\r\n } else if (!isNaN(value) && value > 1) {\r\n defaultCurveSegments = value;\r\n }\r\n if (defaultCurveSegments >= 50) {\r\n roundValues(false);\r\n } else {\r\n roundValues(true);\r\n }\r\n}\r\n\r\nfunction inBrowser() {\r\n return typeof navigator !== 'undefined';\r\n}\r\n\r\nfunction installPlugin(type, plugin) {\r\n if (type === 'expressions') {\r\n expressionsPlugin = plugin;\r\n }\r\n}\r\n\r\nfunction getFactory(name) {\r\n switch (name) {\r\n case 'propertyFactory':\r\n return PropertyFactory;\r\n case 'shapePropertyFactory':\r\n return ShapePropertyFactory;\r\n case 'matrix':\r\n return Matrix;\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nlottie.play = animationManager.play;\r\nlottie.pause = animationManager.pause;\r\nlottie.setLocationHref = setLocationHref;\r\nlottie.togglePause = animationManager.togglePause;\r\nlottie.setSpeed = animationManager.setSpeed;\r\nlottie.setDirection = animationManager.setDirection;\r\nlottie.stop = animationManager.stop;\r\nlottie.searchAnimations = searchAnimations;\r\nlottie.registerAnimation = animationManager.registerAnimation;\r\nlottie.loadAnimation = loadAnimation;\r\nlottie.setSubframeRendering = setSubframeRendering;\r\nlottie.resize = animationManager.resize;\r\n// lottie.start = start;\r\nlottie.goToAndStop = animationManager.goToAndStop;\r\nlottie.destroy = animationManager.destroy;\r\nlottie.setQuality = setQuality;\r\nlottie.inBrowser = inBrowser;\r\nlottie.installPlugin = installPlugin;\r\nlottie.freeze = animationManager.freeze;\r\nlottie.unfreeze = animationManager.unfreeze;\r\nlottie.setVolume = animationManager.setVolume;\r\nlottie.mute = animationManager.mute;\r\nlottie.unmute = animationManager.unmute;\r\nlottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\r\nlottie.setIDPrefix = setIDPrefix;\r\nlottie.__getFactory = getFactory;\r\nlottie.version = '5.7.11';\r\n\r\nfunction checkReady() {\r\n if (document.readyState === 'complete') {\r\n clearInterval(readyStateCheckInterval);\r\n searchAnimations();\r\n }\r\n}\r\n\r\nfunction getQueryVariable(variable) {\r\n var vars = queryString.split('&');\r\n for (var i = 0; i < vars.length; i += 1) {\r\n var pair = vars[i].split('=');\r\n if (decodeURIComponent(pair[0]) == variable) { // eslint-disable-line eqeqeq\r\n return decodeURIComponent(pair[1]);\r\n }\r\n }\r\n return null;\r\n}\r\nvar standalone = '__[STANDALONE]__';\r\nvar animationData = '__[ANIMATIONDATA]__';\r\nvar renderer = '';\r\nvar queryString;\r\nif (standalone) {\r\n var scripts = document.getElementsByTagName('script');\r\n var index = scripts.length - 1;\r\n var myScript = scripts[index] || {\r\n src: '',\r\n };\r\n queryString = myScript.src.replace(/^[^\\?]+\\??/, ''); // eslint-disable-line no-useless-escape\r\n renderer = getQueryVariable('renderer');\r\n}\r\nvar readyStateCheckInterval = setInterval(checkReady, 100);\r\n\nreturn lottie;\n}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// startup\n// Load entry module and return exports\n// This entry module doesn't tell about it's top-level declarations so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(7713);\n"],"sourceRoot":""}