{"version":3,"sources":["webpack:///./src/views/test/Test.vue?af1f","webpack:///./src/views/test/Test.vue?b5ce","webpack:///src/views/test/Test.vue","webpack:///./src/views/test/Test.vue?2487","webpack:///./src/views/test/Test.vue","webpack:///./node_modules/vue-lottie/src/lottie.vue?d163","webpack:///node_modules/vue-lottie/src/lottie.vue","webpack:///./node_modules/vue-lottie/src/lottie.vue?4aae","webpack:///./node_modules/vue-lottie/src/lottie.vue","webpack:///./node_modules/lottie-web/build/player/lottie.js"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","defaultOptions","on","handleAnimation","staticStyle","_v","staticClass","staticRenderFns","components","lottie","methods","anim","data","animationSpeed","component","ref","style","factory","root","window","svgNS","locationHref","initialDefaultFrame","subframeEnabled","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","tOfVal","absArr","createSizedArray","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","round","styleDiv","element","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","type","currentTime","totalTime","frameMultiplier","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","createTypedArrayFactory","Float32Array","Int16Array","Uint8ClampedArray","Array","apply","createNS","document","createElementNS","createTag","createElement","DynamicPropertyContainer","addDynamicProperty","prop","dynamicProperties","indexOf","container","_isAnimated","iterateDynamicProperties","_mdf","getValue","initDynamicPropertyContainer","getBlendMode","blendModeEnums","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","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","_a","_b","_d","_e","_f","pool","math","nodecrypto","global","width","chunks","digits","rngname","startdenom","significance","overflow","mask","seedrandom","seed","options","key","entropy","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","prng","int32","quick","double","S","pass","is_math_call","state","copy","keylen","me","count","slice","obj","depth","result","typ","smear","stringseed","charCodeAt","randomBytes","out","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","Date","screen","String","fromCharCode","BezierFactory","ob","getBezierEasing","beziers","nm","str","replace","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","_mSampleValues","_precomputed","get","mY1","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","extendPrototype","sources","destination","sourcePrototype","attr","Object","hasOwnProperty","call","getDescriptor","object","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","getBezierLength","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","bezierLengthPool","newElement","percents","lengths","getSegmentsLength","shapeData","segmentsLength","segmentsLengthPool","closed","pathV","pathO","pathI","_length","totalLength","BezierData","segmentLength","PointData","partial","partialLength","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","u1","ptX","ptY","bezierSegmentPoints","getNewSegment","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataFunctionManager","completeLayers","layers","comps","fontManager","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","shapes","completeText","__used","JSON","parse","stringify","ks","it","path","checkVersion","minimum","animVersionString","animVersion","split","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","animationData","assets","checkChars","chars","pathData","paths","__converted","checkColors","iterateShapes","checkShapes","completeClosingShapes","cl","completeData","__complete","singleShape","moduleOb","dataManager","getFontProperties","fontData","styleName","styles","fStyle","fWeight","toLowerCase","weight","FontManager","maxWaitingTime","emptyChar","w","size","combinedCharacters","trimFontOptions","font","familyArray","enabledFamilies","join","setUpNode","family","parentNode","fontFamily","node","innerText","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","parent","checkLoadedFonts","fonts","loadedCount","loaded","fOrigin","origin","monoCase","sansCase","removeChild","now","initTime","checkLoadedFontsBinded","setIsLoadedBinded","createHelper","def","tHelper","fontProps","setAttribute","fFamily","textContent","fClass","tCanvasHelper","getContext","addFonts","defs","isLoaded","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","fPath","querySelectorAll","href","rel","src","sc","helper","cache","addChars","found","ch","getCharData","char","console","warn","_warned","measureText","fontName","getFontByName","index","doubleSize","getComputedTextLength","singleSize","name","fName","getCombinedCharacterCodes","setIsLoaded","concat","Font","typekitLoaded","fontPrototype","PropertyFactory","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","fnc","iterationIndex","lastIndex","keyframes","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quatStart","createQuaternion","quatEnd","time","quaternionToEuler","slerp","constructor","omega","cosom","sinom","scale0","scale1","az","aw","bx","by","bz","bw","acos","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","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","applyToMatrix","mat","sk","sa","rz","ry","rx","or","px","py","pz","processKeys","forceRender","_isDirty","precalculateMatrix","frameRate","pre","appliedTransformations","autoOriented","v1","v2","getValueAtTime","autoOrient","_addDynamicProperty","TransformProperty","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","shapesEqual","shape1","shape2","shapePool","releaseShapes","addShape","ShapeProperty","shapeCollectionPool","newShapeCollection","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","s0","_cw","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","getShapeProp","dataProp","keys","getConstructorFunction","getKeyframedConstructorFunction","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","PuckerAndBloatModifier","RepeaterModifier","ShapeCollection","DashProperty","renderer","dataProps","dashStr","dashArray","dashoffset","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","initModifierProperties","addShapeToModifier","shape","setAsAnimated","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segments","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","release","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShapeInCollection","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","copies","ceil","group","ix","reloadShapes","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","op","comparePoints","diff","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","imagesLoadedCb","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","box","getBBox","_imageLoaded","clearInterval","createImageData","setAttributeNS","_elementHelper","append","createImgData","crossOrigin","loadAssets","cb","images","_createImageData","setPath","setAssetsPath","getImage","destroy","setCacheType","elementHelper","ImagePreloaderFactory","featureSupport","maskType","filtersFactory","createFilter","filId","fil","createAlphaToLuminanceFilter","feColorMatrix","assetLoader","formatResponse","xhr","response","responseText","loadAsset","errorCallback","XMLHttpRequest","open","responseType","err","send","onreadystatechange","readyState","status","load","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","animatorSelector","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","create","cloned","shapeCollection","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","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","Error","AudioElement","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","tmpDOMElement","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","removeRenderableComponent","prepareRenderableFrame","checkLayerLimits","checkTransparency","renderRenderable","sourceRectAtTime","getLayerSize","_prototype","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","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","styleData","itemData","pathStringTransformed","redraw","iterations","lLen","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","BaseElement","SVGBaseElement","IShapeElement","ITextElement","ICompElement","sourceRect","_isPlaying","_canPlay","_currentTime","tm","_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","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","elems","getElements","destroyElements","pr","volumeValue","textContainer","buildTextContents","textArray","textContents","currentTextContent","tSpan","usesGlyphs","cachedSpansLength","tElement","justify","textBox","bbox","renderedLetter","textSpan","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","GradientConstructor","lc","lj","ml","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","shapeProperty","fn","setElementStyles","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","colorBlack","colorWhite","opacity","kBlurrinessToSigma","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","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","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","loadAnimation","params","setParams","setSpeed","setDirection","nowTime","elapsedTime","advanceTime","first","goToAndStop","isFrame","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","getElementsByTagName","div","resize","freeze","unfreeze","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","loadNextSegment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","updaFrameModifier","waitForFontsLoaded","error","triggerConfigError","gotoFrame","setSubframe","triggerRenderFrameError","setCurrentRawFrameValue","frameModifier","goToAndPlay","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","end","pendingFrame","playSegments","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onComplete","onSegmentStart","onDestroy","getPath","getDuration","onError","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","ExpressionManager","$bm_isInstanceOfArray","isNumerable","tOfV","Number","$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","rndm","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","duration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","yaw","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","frames","fps","timeToFrames","seedRandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","_value","frameExpressionId","expressionHelpers","searchExpressions","_cachingAtTime","getSpeedAtTime","delta","speed","getStaticValueAtTime","setGroupProperty","propertyGroup","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","endFrame","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","skewAxis","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","getShapeValueAtTime","shapeValue","propertyIndex","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","unitVector","tangentOnPath","normalOnPath","propertyGetShapeProp","trims","calculateExpression","getExpressionValue","isKeyframed","hasExpressions","ShapePathInterface","view","interfaceFunction","_propertyGroup","propertyGroupFactory","PropertyInterface","defineProperties","_name","mn","parentPropertyGroup","propertyName","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","contentsInterfaceFactory","interfaces","numProperties","transformInterface","transformInterfaceFactory","cix","np","ExpressionPropertyInterface","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","start","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","parentGroupWrapper","_prevValue","_sourceText","_thisLayerFunction","sourceText","stringValue","getMatrix","toWorldMat","propMatrix","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","_registerMaskInterface","MaskManagerInterface","_registerEffectsInterface","effects","TransformExpressionInterface","anchorPointDescriptor","anchor_point","startTime","source","pixelAspect","numLayers","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","compositions","_thisProjectFunction","effectsData","createGroupInterface","groupInterface","createValueInterface","enabled","en","expressionProperty","MaskInterface","_mask","_data","MaskManager","_masksInterfaces","maskFunction","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","assign","speedAtTime","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","effectItem","GroupEffect","getValueProxy","total","propertyGetTextProp","TextExpressionSelectorPropFactory","eff","setLocationHref","setSubframeRendering","setQuality","isNaN","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","__getFactory","version","scripts","myScript"],"mappings":"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","file":"js/chunk-6c8b2cdd.5a01c694.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Test.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('lottie',{attrs:{\"options\":_vm.defaultOptions,\"height\":400,\"width\":400},on:{\"animCreated\":_vm.handleAnimation}}),_c('a',{staticStyle:{\"font-size\":\"20px\"},attrs:{\"href\":\"ycstock://stock?codes=600600\"}},[_vm._v(\"600600\")]),_c('div',{staticClass:\"sepBottom\",staticStyle:{\"margin-top\":\"30px\",\"position\":\"relative\"}},[_vm._v(\"sepBottom\")]),_c('div',{staticClass:\"sepTop\",staticStyle:{\"margin-top\":\"30px\",\"position\":\"relative\"}},[_vm._v(\"sepTop\")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Test.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Test.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Test.vue?vue&type=template&id=44ba0a2a&\"\nimport script from \"./Test.vue?vue&type=script&lang=js&\"\nexport * from \"./Test.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Test.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"lavContainer\",style:(_vm.style)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./lottie.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./lottie.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./lottie.vue?vue&type=template&id=3c796cc7&\"\nimport script from \"./lottie.vue?vue&type=script&lang=js&\"\nexport * from \"./lottie.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","(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 */\r\n/* exported locationHref, subframeEnabled, expressionsPlugin */\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 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 '__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 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 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 }\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 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.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\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};\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 */\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) {\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 this._elementHelper.append(img);\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 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 this.totalImages += 1;\r\n this.images.push(this._createImageData(assets[i]));\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 getImage(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 loaded() {\r\n return this.totalImages === this.loadedAssets;\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.testImageLoaded = testImageLoaded.bind(this);\r\n this.assetsPath = '';\r\n this.path = '';\r\n this.totalImages = 0;\r\n this.loadedAssets = 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 loaded: loaded,\r\n destroy: destroy,\r\n getImage: getImage,\r\n createImgData: createImgData,\r\n createImageData: createImageData,\r\n imageLoaded: imageLoaded,\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) {\r\n var fil = createNS('filter');\r\n fil.setAttribute('id', filId);\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 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 xhr.open('GET', path, true);\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.send();\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 }\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/* global AudioElement, 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 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.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 for (i = len - 1; i >= 0; i -= 1) {\r\n this.shapeModifiers[i].processShapes(this._isFirstFrame);\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 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);\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.getImage(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 */\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};\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.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.loaded() || this.renderer.rendererType !== 'canvas')\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) {\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.goToAndStop = function (value, isFrame, name) {\r\n if (name && this.name !== name) {\r\n return;\r\n }\r\n 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 this.goToAndStop(value, isFrame, name);\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\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 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 }\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 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\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/* 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 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.__getFactory = getFactory;\r\nlottie.version = '5.7.6';\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}));"],"sourceRoot":""}