← All changes
|
assets/js/packages/editor-modal-shell/editor-modal-shell.js
+15039
-2
4.1.3
→
4.3.2
View file →
| @@ -1,3 +1,15040 @@ | ||
| 1 | -/*! For license information please see editor-modal-shell.js.LICENSE.txt */ | |
| 2 | -(function(){var __webpack_modules__={"./node_modules/lottie-react/build/index.umd.js":function(t,e,r){!function(t,e,r){"use strict";function _interopDefaultLegacy(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=_interopDefaultLegacy(e),a=_interopDefaultLegacy(r);function _arrayLikeToArray(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,i=Array(e);r<e;r++)i[r]=t[r];return i}function _arrayWithHoles(t){if(Array.isArray(t))return t}function _defineProperty(t,e,r){return(e=_toPropertyKey(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _iterableToArrayLimit(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var i,a,s,n,o=[],h=!0,l=!1;try{if(s=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;h=!1}else for(;!(h=(i=s.call(r)).done)&&(o.push(i.value),o.length!==e);h=!0);}catch(t){l=!0,a=t}finally{try{if(!h&&null!=r.return&&(n=r.return(),Object(n)!==n))return}finally{if(l)throw a}}return o}}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function ownKeys(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,i)}return r}function _objectSpread2(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(Object(r),!0).forEach(function(e){_defineProperty(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function _objectWithoutProperties(t,e){if(null==t)return{};var r,i,a=_objectWithoutPropertiesLoose(t,e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(i=0;i<s.length;i++)r=s[i],e.includes(r)||{}.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}function _objectWithoutPropertiesLoose(t,e){if(null==t)return{};var r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){if(e.includes(i))continue;r[i]=t[i]}return r}function _slicedToArray(t,e){return _arrayWithHoles(t)||_iterableToArrayLimit(t,e)||_unsupportedIterableToArray(t,e)||_nonIterableRest()}function _toPrimitive(t,e){if("object"!=typeof t||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var i=r.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}function _toPropertyKey(t){var e=_toPrimitive(t,"string");return"symbol"==typeof e?e:e+""}function _unsupportedIterableToArray(t,e){if(t){if("string"==typeof t)return _arrayLikeToArray(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(t,e):void 0}}var s=["animationData","loop","autoplay","initialSegment","onComplete","onLoopComplete","onEnterFrame","onSegmentStart","onConfigReady","onDataReady","onDataFailed","onLoadedImages","onDOMLoaded","onDestroy","lottieRef","renderer","name","assetsPath","rendererSettings"],n=function useLottie(t,e){var n=t.animationData,o=t.loop,h=t.autoplay,l=t.initialSegment,p=t.onComplete,c=t.onLoopComplete,f=t.onEnterFrame,m=t.onSegmentStart,u=t.onConfigReady,d=t.onDataReady,y=t.onDataFailed,g=t.onLoadedImages,v=t.onDOMLoaded,b=t.onDestroy;t.lottieRef,t.renderer,t.name,t.assetsPath,t.rendererSettings;var P=_objectWithoutProperties(t,s),x=_slicedToArray(r.useState(!1),2),S=x[0],E=x[1],_=r.useRef(),F=r.useRef(null),T=function play(){var t;null===(t=_.current)||void 0===t||t.play()},k=function stop(){var t;null===(t=_.current)||void 0===t||t.stop()},M=function pause(){var t;null===(t=_.current)||void 0===t||t.pause()},D=function setSpeed(t){var e;null===(e=_.current)||void 0===e||e.setSpeed(t)},w=function goToAndPlay(t,e){var r;null===(r=_.current)||void 0===r||r.goToAndPlay(t,e)},I=function goToAndStop(t,e){var r;null===(r=_.current)||void 0===r||r.goToAndStop(t,e)},L=function setDirection(t){var e;null===(e=_.current)||void 0===e||e.setDirection(t)},V=function playSegments(t,e){var r;null===(r=_.current)||void 0===r||r.playSegments(t,e)},R=function setSubframe(t){var e;null===(e=_.current)||void 0===e||e.setSubframe(t)},z=function getDuration(t){var e;return null===(e=_.current)||void 0===e?void 0:e.getDuration(t)},O=function destroy(){var t;null===(t=_.current)||void 0===t||t.destroy(),_.current=void 0},G=function loadAnimation(){var e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(F.current){null===(e=_.current)||void 0===e||e.destroy();var a=_objectSpread2(_objectSpread2(_objectSpread2({},t),r),{},{container:F.current});return _.current=i.default.loadAnimation(a),E(!!_.current),function(){var t;null===(t=_.current)||void 0===t||t.destroy(),_.current=void 0}}};return r.useEffect(function(){var t=G();return function(){return null==t?void 0:t()}},[n,o]),r.useEffect(function(){_.current&&(_.current.autoplay=!!h)},[h]),r.useEffect(function(){_.current&&(l?Array.isArray(l)&&l.length&&((_.current.currentRawFrame<l[0]||_.current.currentRawFrame>l[1])&&(_.current.currentRawFrame=l[0]),_.current.setSegment(l[0],l[1])):_.current.resetSegments(!0))},[l]),r.useEffect(function(){var t=[{name:"complete",handler:p},{name:"loopComplete",handler:c},{name:"enterFrame",handler:f},{name:"segmentStart",handler:m},{name:"config_ready",handler:u},{name:"data_ready",handler:d},{name:"data_failed",handler:y},{name:"loaded_images",handler:g},{name:"DOMLoaded",handler:v},{name:"destroy",handler:b}].filter(function(t){return null!=t.handler});if(t.length){var e=t.map(function(t){var e;return null===(e=_.current)||void 0===e||e.addEventListener(t.name,t.handler),function(){var e;null===(e=_.current)||void 0===e||e.removeEventListener(t.name,t.handler)}});return function(){e.forEach(function(t){return t()})}}},[p,c,f,m,u,d,y,g,v,b]),{View:a.default.createElement("div",_objectSpread2({style:e,ref:F},P)),play:T,stop:k,pause:M,setSpeed:D,goToAndStop:I,goToAndPlay:w,setDirection:L,playSegments:V,setSubframe:R,getDuration:z,destroy:O,animationContainerRef:F,animationLoaded:S,animationItem:_.current}};function getContainerVisibility(t){var e=t.getBoundingClientRect(),r=e.top,i=e.height;return(window.innerHeight-r)/(window.innerHeight+i)}function getContainerCursorPosition(t,e,r){var i=t.getBoundingClientRect(),a=i.top;return{x:(e-i.left)/i.width,y:(r-a)/i.height}}var o=function useInitInteractivity(t){var e=t.wrapperRef,i=t.animationItem,a=t.mode,s=t.actions;r.useEffect(function(){var t=e.current;if(t&&i&&s.length){i.stop();var r=function scrollModeHandler(){var e=null,r=function scrollHandler(){var r=getContainerVisibility(t),a=s.find(function(t){var e=t.visibility;return e&&r>=e[0]&&r<=e[1]});if(a){if("seek"===a.type&&a.visibility&&2===a.frames.length){var n=a.frames[0]+Math.ceil((r-a.visibility[0])/(a.visibility[1]-a.visibility[0])*a.frames[1]);i.goToAndStop(n-i.firstFrame-1,!0)}"loop"===a.type&&(null===e||e!==a.frames||i.isPaused)&&(i.playSegments(a.frames,!0),e=a.frames),"play"===a.type&&i.isPaused&&(i.resetSegments(!0),i.play()),"stop"===a.type&&i.goToAndStop(a.frames[0]-i.firstFrame-1,!0)}};return document.addEventListener("scroll",r),function(){document.removeEventListener("scroll",r)}},n=function cursorModeHandler(){var e=function handleCursor(e,r){var a=e,n=r;if(-1!==a&&-1!==n){var o=getContainerCursorPosition(t,a,n);a=o.x,n=o.y}var h=s.find(function(t){var e=t.position;return e&&Array.isArray(e.x)&&Array.isArray(e.y)?a>=e.x[0]&&a<=e.x[1]&&n>=e.y[0]&&n<=e.y[1]:!(!e||Number.isNaN(e.x)||Number.isNaN(e.y))&&a===e.x&&n===e.y});if(h){if("seek"===h.type&&h.position&&Array.isArray(h.position.x)&&Array.isArray(h.position.y)&&2===h.frames.length){var l=(a-h.position.x[0])/(h.position.x[1]-h.position.x[0]),p=(n-h.position.y[0])/(h.position.y[1]-h.position.y[0]);i.playSegments(h.frames,!0),i.goToAndStop(Math.ceil((l+p)/2*(h.frames[1]-h.frames[0])),!0)}"loop"===h.type&&i.playSegments(h.frames,!0),"play"===h.type&&(i.isPaused&&i.resetSegments(!1),i.playSegments(h.frames)),"stop"===h.type&&i.goToAndStop(h.frames[0],!0)}},r=function mouseMoveHandler(t){e(t.clientX,t.clientY)},a=function mouseOutHandler(){e(-1,-1)};return t.addEventListener("mousemove",r),t.addEventListener("mouseout",a),function(){t.removeEventListener("mousemove",r),t.removeEventListener("mouseout",a)}};switch(a){case"scroll":return r();case"cursor":return n()}}},[a,i])},h=function useLottieInteractivity(t){var e=t.actions,r=t.mode,i=t.lottieObj,a=i.animationItem,s=i.View,n=i.animationContainerRef;return o({actions:e,animationItem:a,mode:r,wrapperRef:n}),s},l=["style","interactivity"],p=function Lottie(t){var e,i,a,s=t.style,o=t.interactivity,p=_objectWithoutProperties(t,l),c=n(p,s),f=c.View,m=c.play,u=c.stop,d=c.pause,y=c.setSpeed,g=c.goToAndStop,v=c.goToAndPlay,b=c.setDirection,P=c.playSegments,x=c.setSubframe,S=c.getDuration,E=c.destroy,_=c.animationContainerRef,F=c.animationLoaded,T=c.animationItem;return r.useEffect(function(){t.lottieRef&&(t.lottieRef.current={play:m,stop:u,pause:d,setSpeed:y,goToAndPlay:v,goToAndStop:g,setDirection:b,playSegments:P,setSubframe:x,getDuration:S,destroy:E,animationContainerRef:_,animationLoaded:F,animationItem:T})},[null===(e=t.lottieRef)||void 0===e?void 0:e.current]),h({lottieObj:{View:f,play:m,stop:u,pause:d,setSpeed:y,goToAndStop:g,goToAndPlay:v,setDirection:b,playSegments:P,setSubframe:x,getDuration:S,destroy:E,animationContainerRef:_,animationLoaded:F,animationItem:T},actions:null!==(i=null==o?void 0:o.actions)&&void 0!==i?i:[],mode:null!==(a=null==o?void 0:o.mode)&&void 0!==a?a:"scroll"})};Object.defineProperty(t,"LottiePlayer",{enumerable:!0,get:function(){return i.default}}),t.default=p,t.useLottie=n,t.useLottieInteractivity=h,Object.defineProperty(t,"__esModule",{value:!0})}(e,r("./node_modules/lottie-web/build/player/lottie.js"),r("react"))},"./node_modules/lottie-web/build/player/lottie.js":function(module,exports,__webpack_require__){var factory;"undefined"!=typeof document&&"undefined"!=typeof navigator&&(factory=function(){"use strict";var svgNS="http://www.w3.org/2000/svg",locationHref="",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function setWebWorker(t){_useWebWorker=!!t},getWebWorker=function getWebWorker(){return _useWebWorker},setLocationHref=function setLocationHref(t){locationHref=t},getLocationHref=function getLocationHref(){return locationHref};function createTag(t){return document.createElement(t)}function extendPrototype(t,e){var r,i,a=t.length;for(r=0;r<a;r+=1)for(var s in i=t[r].prototype)Object.prototype.hasOwnProperty.call(i,s)&&(e.prototype[s]=i[s])}function getDescriptor(t,e){return Object.getOwnPropertyDescriptor(t,e)}function createProxyFunction(t){function ProxyFunction(){}return ProxyFunction.prototype=t,ProxyFunction}var audioControllerFactory=function(){function AudioController(t){this.audios=[],this.audioFactory=t,this._volume=1,this._isMuted=!1}return AudioController.prototype={addAudio:function addAudio(t){this.audios.push(t)},pause:function pause(){var t,e=this.audios.length;for(t=0;t<e;t+=1)this.audios[t].pause()},resume:function resume(){var t,e=this.audios.length;for(t=0;t<e;t+=1)this.audios[t].resume()},setRate:function setRate(t){var e,r=this.audios.length;for(e=0;e<r;e+=1)this.audios[e].setRate(t)},createAudio:function createAudio(t){return this.audioFactory?this.audioFactory(t):window.Howl?new window.Howl({src:[t]}):{isPlaying:!1,play:function play(){this.isPlaying=!0},seek:function seek(){this.isPlaying=!1},playing:function playing(){},rate:function rate(){},setVolume:function setVolume(){}}},setAudioFactory:function setAudioFactory(t){this.audioFactory=t},setVolume:function setVolume(t){this._volume=t,this._updateVolume()},mute:function mute(){this._isMuted=!0,this._updateVolume()},unmute:function unmute(){this._isMuted=!1,this._updateVolume()},getVolume:function getVolume(){return this._volume},_updateVolume:function _updateVolume(){var t,e=this.audios.length;for(t=0;t<e;t+=1)this.audios[t].volume(this._volume*(this._isMuted?0:1))}},function(){return new AudioController}}(),createTypedArray=function(){function createRegularArray(t,e){var r,i=0,a=[];switch(t){case"int16":case"uint8c":r=1;break;default:r=1.1}for(i=0;i<e;i+=1)a.push(r);return a}return"function"==typeof Uint8ClampedArray&&"function"==typeof Float32Array?function createTypedArrayFactory(t,e){return"float32"===t?new Float32Array(e):"int16"===t?new Int16Array(e):"uint8c"===t?new Uint8ClampedArray(e):createRegularArray(t,e)}:createRegularArray}();function createSizedArray(t){return Array.apply(null,{length:t})}function _typeof$6(t){return _typeof$6="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof$6(t)}var subframeEnabled=!0,expressionsPlugin=null,expressionsInterfaces=null,idPrefix$1="",isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),_shouldRoundValues=!1,bmPow=Math.pow,bmSqrt=Math.sqrt,bmFloor=Math.floor,bmMax=Math.max,bmMin=Math.min,BMMath={};function ProjectInterface$1(){return{}}!function(){var t,e=["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=e.length;for(t=0;t<r;t+=1)BMMath[e[t]]=Math[e[t]]}(),BMMath.random=Math.random,BMMath.abs=function(t){if("object"===_typeof$6(t)&&t.length){var e,r=createSizedArray(t.length),i=t.length;for(e=0;e<i;e+=1)r[e]=Math.abs(t[e]);return r}return Math.abs(t)};var defaultCurveSegments=150,degToRads=Math.PI/180,roundCorner=.5519;function roundValues(t){_shouldRoundValues=!!t}function bmRnd(t){return _shouldRoundValues?Math.round(t):t}function styleDiv(t){t.style.position="absolute",t.style.top=0,t.style.left=0,t.style.display="block",t.style.transformOrigin="0 0",t.style.webkitTransformOrigin="0 0",t.style.backfaceVisibility="visible",t.style.webkitBackfaceVisibility="visible",t.style.transformStyle="preserve-3d",t.style.webkitTransformStyle="preserve-3d",t.style.mozTransformStyle="preserve-3d"}function BMEnterFrameEvent(t,e,r,i){this.type=t,this.currentTime=e,this.totalTime=r,this.direction=i<0?-1:1}function BMCompleteEvent(t,e){this.type=t,this.direction=e<0?-1:1}function BMCompleteLoopEvent(t,e,r,i){this.type=t,this.currentLoop=r,this.totalLoops=e,this.direction=i<0?-1:1}function BMSegmentStartEvent(t,e,r){this.type=t,this.firstFrame=e,this.totalFrames=r}function BMDestroyEvent(t,e){this.type=t,this.target=e}function BMRenderFrameErrorEvent(t,e){this.type="renderFrameError",this.nativeError=t,this.currentTime=e}function BMConfigErrorEvent(t){this.type="configError",this.nativeError=t}function BMAnimationConfigErrorEvent(t,e){this.type=t,this.nativeError=e}var createElementID=(_count=0,function createID(){return idPrefix$1+"__lottie_element_"+(_count+=1)}),_count;function HSVtoRGB(t,e,r){var i,a,s,n,o,h,l,p;switch(h=r*(1-e),l=r*(1-(o=6*t-(n=Math.floor(6*t)))*e),p=r*(1-(1-o)*e),n%6){case 0:i=r,a=p,s=h;break;case 1:i=l,a=r,s=h;break;case 2:i=h,a=r,s=p;break;case 3:i=h,a=l,s=r;break;case 4:i=p,a=h,s=r;break;case 5:i=r,a=h,s=l}return[i,a,s]}function RGBtoHSV(t,e,r){var i,a=Math.max(t,e,r),s=Math.min(t,e,r),n=a-s,o=0===a?0:n/a,h=a/255;switch(a){case s:i=0;break;case t:i=e-r+n*(e<r?6:0),i/=6*n;break;case e:i=r-t+2*n,i/=6*n;break;case r:i=t-e+4*n,i/=6*n}return[i,o,h]}function addSaturationToRGB(t,e){var r=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return r[1]+=e,r[1]>1?r[1]=1:r[1]<=0&&(r[1]=0),HSVtoRGB(r[0],r[1],r[2])}function addBrightnessToRGB(t,e){var r=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return r[2]+=e,r[2]>1?r[2]=1:r[2]<0&&(r[2]=0),HSVtoRGB(r[0],r[1],r[2])}function addHueToRGB(t,e){var r=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return r[0]+=e/360,r[0]>1?r[0]-=1:r[0]<0&&(r[0]+=1),HSVtoRGB(r[0],r[1],r[2])}var rgbToHex=function(){var t,e,r=[];for(t=0;t<256;t+=1)e=t.toString(16),r[t]=1===e.length?"0"+e:e;return function(t,e,i){return t<0&&(t=0),e<0&&(e=0),i<0&&(i=0),"#"+r[t]+r[e]+r[i]}}(),setSubframeEnabled=function setSubframeEnabled(t){subframeEnabled=!!t},getSubframeEnabled=function getSubframeEnabled(){return subframeEnabled},setExpressionsPlugin=function setExpressionsPlugin(t){expressionsPlugin=t},getExpressionsPlugin=function getExpressionsPlugin(){return expressionsPlugin},setExpressionInterfaces=function setExpressionInterfaces(t){expressionsInterfaces=t},getExpressionInterfaces=function getExpressionInterfaces(){return expressionsInterfaces},setDefaultCurveSegments=function setDefaultCurveSegments(t){defaultCurveSegments=t},getDefaultCurveSegments=function getDefaultCurveSegments(){return defaultCurveSegments},setIdPrefix=function setIdPrefix(t){idPrefix$1=t},getIdPrefix=function getIdPrefix(){return idPrefix$1};function createNS(t){return document.createElementNS(svgNS,t)}function _typeof$5(t){return _typeof$5="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof$5(t)}var dataManager=function(){var t,e,r=1,i=[],a={onmessage:function onmessage(){},postMessage:function postMessage(e){t({data:e})}},s={postMessage:function postMessage(t){a.onmessage({data:t})}};function setupWorker(){e||(e=function createWorker(e){if(window.Worker&&window.Blob&&getWebWorker()){var r=new Blob(["var _workerSelf = self; self.onmessage = ",e.toString()],{type:"text/javascript"}),i=URL.createObjectURL(r);return new Worker(i)}return t=e,a}(function workerStart(t){if(s.dataManager||(s.dataManager=function dataFunctionManager(){function completeLayers(t,e){var r,i,a,s,n,o,h=t.length;for(i=0;i<h;i+=1)if("ks"in(r=t[i])&&!r.completed){if(r.completed=!0,r.hasMask){var l=r.masksProperties;for(s=l.length,a=0;a<s;a+=1)if(l[a].pt.k.i)convertPathsToAbsoluteValues(l[a].pt.k);else for(o=l[a].pt.k.length,n=0;n<o;n+=1)l[a].pt.k[n].s&&convertPathsToAbsoluteValues(l[a].pt.k[n].s[0]),l[a].pt.k[n].e&&convertPathsToAbsoluteValues(l[a].pt.k[n].e[0])}0===r.ty?(r.layers=findCompLayers(r.refId,e),completeLayers(r.layers,e)):4===r.ty?completeShapes(r.shapes):5===r.ty&&completeText(r)}}function findCompLayers(t,e){var r=function findComp(t,e){for(var r=0,i=e.length;r<i;){if(e[r].id===t)return e[r];r+=1}return null}(t,e);return r?r.layers.__used?JSON.parse(JSON.stringify(r.layers)):(r.layers.__used=!0,r.layers):null}function completeShapes(t){var e,r,i;for(e=t.length-1;e>=0;e-=1)if("sh"===t[e].ty)if(t[e].ks.k.i)convertPathsToAbsoluteValues(t[e].ks.k);else for(i=t[e].ks.k.length,r=0;r<i;r+=1)t[e].ks.k[r].s&&convertPathsToAbsoluteValues(t[e].ks.k[r].s[0]),t[e].ks.k[r].e&&convertPathsToAbsoluteValues(t[e].ks.k[r].e[0]);else"gr"===t[e].ty&&completeShapes(t[e].it)}function convertPathsToAbsoluteValues(t){var e,r=t.i.length;for(e=0;e<r;e+=1)t.i[e][0]+=t.v[e][0],t.i[e][1]+=t.v[e][1],t.o[e][0]+=t.v[e][0],t.o[e][1]+=t.v[e][1]}function checkVersion(t,e){var r=e?e.split("."):[100,100,100];return t[0]>r[0]||!(r[0]>t[0])&&(t[1]>r[1]||!(r[1]>t[1])&&(t[2]>r[2]||!(r[2]>t[2])&&null))}var t,e=function(){var t=[4,4,14];function updateTextLayer(t){var e=t.t.d;t.t.d={k:[{s:e,t:0}]}}function iterateLayers(t){var e,r=t.length;for(e=0;e<r;e+=1)5===t[e].ty&&updateTextLayer(t[e])}return function(e){if(checkVersion(t,e.v)&&(iterateLayers(e.layers),e.assets)){var r,i=e.assets.length;for(r=0;r<i;r+=1)e.assets[r].layers&&iterateLayers(e.assets[r].layers)}}}(),r=(t=[4,7,99],function(e){if(e.chars&&!checkVersion(t,e.v)){var r,i=e.chars.length;for(r=0;r<i;r+=1){var a=e.chars[r];a.data&&a.data.shapes&&(completeShapes(a.data.shapes),a.data.ip=0,a.data.op=99999,a.data.st=0,a.data.sr=1,a.data.ks={p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0}},e.chars[r].t||(a.data.shapes.push({ty:"no"}),a.data.shapes[0].it.push({p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0},sk:{k:0,a:0},sa:{k:0,a:0},ty:"tr"})))}}}),i=function(){var t=[5,7,15];function updateTextLayer(t){var e=t.t.p;"number"==typeof e.a&&(e.a={a:0,k:e.a}),"number"==typeof e.p&&(e.p={a:0,k:e.p}),"number"==typeof e.r&&(e.r={a:0,k:e.r})}function iterateLayers(t){var e,r=t.length;for(e=0;e<r;e+=1)5===t[e].ty&&updateTextLayer(t[e])}return function(e){if(checkVersion(t,e.v)&&(iterateLayers(e.layers),e.assets)){var r,i=e.assets.length;for(r=0;r<i;r+=1)e.assets[r].layers&&iterateLayers(e.assets[r].layers)}}}(),a=function(){var t=[4,1,9];function iterateShapes(t){var e,r,i,a=t.length;for(e=0;e<a;e+=1)if("gr"===t[e].ty)iterateShapes(t[e].it);else if("fl"===t[e].ty||"st"===t[e].ty)if(t[e].c.k&&t[e].c.k[0].i)for(i=t[e].c.k.length,r=0;r<i;r+=1)t[e].c.k[r].s&&(t[e].c.k[r].s[0]/=255,t[e].c.k[r].s[1]/=255,t[e].c.k[r].s[2]/=255,t[e].c.k[r].s[3]/=255),t[e].c.k[r].e&&(t[e].c.k[r].e[0]/=255,t[e].c.k[r].e[1]/=255,t[e].c.k[r].e[2]/=255,t[e].c.k[r].e[3]/=255);else t[e].c.k[0]/=255,t[e].c.k[1]/=255,t[e].c.k[2]/=255,t[e].c.k[3]/=255}function iterateLayers(t){var e,r=t.length;for(e=0;e<r;e+=1)4===t[e].ty&&iterateShapes(t[e].shapes)}return function(e){if(checkVersion(t,e.v)&&(iterateLayers(e.layers),e.assets)){var r,i=e.assets.length;for(r=0;r<i;r+=1)e.assets[r].layers&&iterateLayers(e.assets[r].layers)}}}(),s=function(){var t=[4,4,18];function completeClosingShapes(t){var e,r,i;for(e=t.length-1;e>=0;e-=1)if("sh"===t[e].ty)if(t[e].ks.k.i)t[e].ks.k.c=t[e].closed;else for(i=t[e].ks.k.length,r=0;r<i;r+=1)t[e].ks.k[r].s&&(t[e].ks.k[r].s[0].c=t[e].closed),t[e].ks.k[r].e&&(t[e].ks.k[r].e[0].c=t[e].closed);else"gr"===t[e].ty&&completeClosingShapes(t[e].it)}function iterateLayers(t){var e,r,i,a,s,n,o=t.length;for(r=0;r<o;r+=1){if((e=t[r]).hasMask){var h=e.masksProperties;for(a=h.length,i=0;i<a;i+=1)if(h[i].pt.k.i)h[i].pt.k.c=h[i].cl;else for(n=h[i].pt.k.length,s=0;s<n;s+=1)h[i].pt.k[s].s&&(h[i].pt.k[s].s[0].c=h[i].cl),h[i].pt.k[s].e&&(h[i].pt.k[s].e[0].c=h[i].cl)}4===e.ty&&completeClosingShapes(e.shapes)}}return function(e){if(checkVersion(t,e.v)&&(iterateLayers(e.layers),e.assets)){var r,i=e.assets.length;for(r=0;r<i;r+=1)e.assets[r].layers&&iterateLayers(e.assets[r].layers)}}}();function completeText(t){0===t.t.a.length&&t.t.p}var n={completeData:function completeData(t){t.__complete||(a(t),e(t),r(t),i(t),s(t),completeLayers(t.layers,t.assets),function completeChars(t,e){if(t){var r=0,i=t.length;for(r=0;r<i;r+=1)1===t[r].t&&(t[r].data.layers=findCompLayers(t[r].data.refId,e),completeLayers(t[r].data.layers,e))}}(t.chars,t.assets),t.__complete=!0)}};return n.checkColors=a,n.checkChars=r,n.checkPathProperties=i,n.checkShapes=s,n.completeLayers=completeLayers,n}()),s.assetLoader||(s.assetLoader=function(){function formatResponse(t){var e=t.getResponseHeader("content-type");return e&&"json"===t.responseType&&-1!==e.indexOf("json")||t.response&&"object"===_typeof$5(t.response)?t.response:t.response&&"string"==typeof t.response?JSON.parse(t.response):t.responseText?JSON.parse(t.responseText):null}return{load:function loadAsset(t,e,r,i){var a,s=new XMLHttpRequest;try{s.responseType="json"}catch(t){}s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status)a=formatResponse(s),r(a);else try{a=formatResponse(s),r(a)}catch(t){i&&i(t)}};try{s.open(["G","E","T"].join(""),t,!0)}catch(r){s.open(["G","E","T"].join(""),e+"/"+t,!0)}s.send()}}}()),"loadAnimation"===t.data.type)s.assetLoader.load(t.data.path,t.data.fullPath,function(e){s.dataManager.completeData(e),s.postMessage({id:t.data.id,payload:e,status:"success"})},function(){s.postMessage({id:t.data.id,status:"error"})});else if("complete"===t.data.type){var e=t.data.animation;s.dataManager.completeData(e),s.postMessage({id:t.data.id,payload:e,status:"success"})}else"loadData"===t.data.type&&s.assetLoader.load(t.data.path,t.data.fullPath,function(e){s.postMessage({id:t.data.id,payload:e,status:"success"})},function(){s.postMessage({id:t.data.id,status:"error"})})}),e.onmessage=function(t){var e=t.data,r=e.id,a=i[r];i[r]=null,"success"===e.status?a.onComplete(e.payload):a.onError&&a.onError()})}function createProcess(t,e){var a="processId_"+(r+=1);return i[a]={onComplete:t,onError:e},a}return{loadAnimation:function loadAnimation(t,r,i){setupWorker();var a=createProcess(r,i);e.postMessage({type:"loadAnimation",path:t,fullPath:window.location.origin+window.location.pathname,id:a})},loadData:function loadData(t,r,i){setupWorker();var a=createProcess(r,i);e.postMessage({type:"loadData",path:t,fullPath:window.location.origin+window.location.pathname,id:a})},completeAnimation:function completeAnimation(t,r,i){setupWorker();var a=createProcess(r,i);e.postMessage({type:"complete",animation:t,id:a})}}}(),ImagePreloader=function(){var t=function(){var t=createTag("canvas");t.width=1,t.height=1;var e=t.getContext("2d");return e.fillStyle="rgba(0,0,0,0)",e.fillRect(0,0,1,1),t}();function imageLoaded(){this.loadedAssets+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function footageLoaded(){this.loadedFootagesCount+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function getAssetsPath(t,e,r){var i="";if(t.e)i=t.p;else if(e){var a=t.p;-1!==a.indexOf("images/")&&(a=a.split("/")[1]),i=e+a}else i=r,i+=t.u?t.u:"",i+=t.p;return i}function testImageLoaded(t){var e=0,r=setInterval(function(){(t.getBBox().width||e>500)&&(this._imageLoaded(),clearInterval(r)),e+=1}.bind(this),50)}function createFootageData(t){var e={assetData:t},r=getAssetsPath(t,this.assetsPath,this.path);return dataManager.loadData(r,function(t){e.img=t,this._footageLoaded()}.bind(this),function(){e.img={},this._footageLoaded()}.bind(this)),e}function ImagePreloaderFactory(){this._imageLoaded=imageLoaded.bind(this),this._footageLoaded=footageLoaded.bind(this),this.testImageLoaded=testImageLoaded.bind(this),this.createFootageData=createFootageData.bind(this),this.assetsPath="",this.path="",this.totalImages=0,this.totalFootages=0,this.loadedAssets=0,this.loadedFootagesCount=0,this.imagesLoadedCb=null,this.images=[]}return ImagePreloaderFactory.prototype={loadAssets:function loadAssets(t,e){var r;this.imagesLoadedCb=e;var i=t.length;for(r=0;r<i;r+=1)t[r].layers||(t[r].t&&"seq"!==t[r].t?3===t[r].t&&(this.totalFootages+=1,this.images.push(this.createFootageData(t[r]))):(this.totalImages+=1,this.images.push(this._createImageData(t[r]))))},setAssetsPath:function setAssetsPath(t){this.assetsPath=t||""},setPath:function setPath(t){this.path=t||""},loadedImages:function loadedImages(){return this.totalImages===this.loadedAssets},loadedFootages:function loadedFootages(){return this.totalFootages===this.loadedFootagesCount},destroy:function destroy(){this.imagesLoadedCb=null,this.images.length=0},getAsset:function getAsset(t){for(var e=0,r=this.images.length;e<r;){if(this.images[e].assetData===t)return this.images[e].img;e+=1}return null},createImgData:function createImgData(e){var r=getAssetsPath(e,this.assetsPath,this.path),i=createTag("img");i.crossOrigin="anonymous",i.addEventListener("load",this._imageLoaded,!1),i.addEventListener("error",function(){a.img=t,this._imageLoaded()}.bind(this),!1),i.src=r;var a={img:i,assetData:e};return a},createImageData:function createImageData(e){var r=getAssetsPath(e,this.assetsPath,this.path),i=createNS("image");isSafari?this.testImageLoaded(i):i.addEventListener("load",this._imageLoaded,!1),i.addEventListener("error",function(){a.img=t,this._imageLoaded()}.bind(this),!1),i.setAttributeNS("http://www.w3.org/1999/xlink","href",r),this._elementHelper.append?this._elementHelper.append(i):this._elementHelper.appendChild(i);var a={img:i,assetData:e};return a},imageLoaded:imageLoaded,footageLoaded:footageLoaded,setCacheType:function setCacheType(t,e){"svg"===t?(this._elementHelper=e,this._createImageData=this.createImageData.bind(this)):this._createImageData=this.createImgData.bind(this)}},ImagePreloaderFactory}();function BaseEvent(){}BaseEvent.prototype={triggerEvent:function triggerEvent(t,e){if(this._cbs[t])for(var r=this._cbs[t],i=0;i<r.length;i+=1)r[i](e)},addEventListener:function addEventListener(t,e){return this._cbs[t]||(this._cbs[t]=[]),this._cbs[t].push(e),function(){this.removeEventListener(t,e)}.bind(this)},removeEventListener:function removeEventListener(t,e){if(e){if(this._cbs[t]){for(var r=0,i=this._cbs[t].length;r<i;)this._cbs[t][r]===e&&(this._cbs[t].splice(r,1),r-=1,i-=1),r+=1;this._cbs[t].length||(this._cbs[t]=null)}}else this._cbs[t]=null}};var markerParser=function(){function parsePayloadLines(t){for(var e,r=t.split("\r\n"),i={},a=0,s=0;s<r.length;s+=1)2===(e=r[s].split(":")).length&&(i[e[0]]=e[1].trim(),a+=1);if(0===a)throw new Error;return i}return function(t){for(var e=[],r=0;r<t.length;r+=1){var i=t[r],a={time:i.tm,duration:i.dr};try{a.payload=JSON.parse(t[r].cm)}catch(e){try{a.payload=parsePayloadLines(t[r].cm)}catch(e){a.payload={name:t[r].cm}}}e.push(a)}return e}}(),ProjectInterface=function(){function registerComposition(t){this.compositions.push(t)}return function(){function _thisProjectFunction(t){for(var e=0,r=this.compositions.length;e<r;){if(this.compositions[e].data&&this.compositions[e].data.nm===t)return this.compositions[e].prepareFrame&&this.compositions[e].data.xt&&this.compositions[e].prepareFrame(this.currentFrame),this.compositions[e].compInterface;e+=1}return null}return _thisProjectFunction.compositions=[],_thisProjectFunction.currentFrame=0,_thisProjectFunction.registerComposition=registerComposition,_thisProjectFunction}}(),renderers={},registerRenderer=function registerRenderer(t,e){renderers[t]=e};function getRenderer(t){return renderers[t]}function getRegisteredRenderer(){if(renderers.canvas)return"canvas";for(var t in renderers)if(renderers[t])return t;return""}function _typeof$4(t){return _typeof$4="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof$4(t)}var AnimationItem=function AnimationItem(){this._cbs=[],this.name="",this.path="",this.isLoaded=!1,this.currentFrame=0,this.currentRawFrame=0,this.firstFrame=0,this.totalFrames=0,this.frameRate=0,this.frameMult=0,this.playSpeed=1,this.playDirection=1,this.playCount=0,this.animationData={},this.assets=[],this.isPaused=!0,this.autoplay=!1,this.loop=!0,this.renderer=null,this.animationID=createElementID(),this.assetsPath="",this.timeCompleted=0,this.segmentPos=0,this.isSubframeEnabled=getSubframeEnabled(),this.segments=[],this._idle=!0,this._completedLoop=!1,this.projectInterface=ProjectInterface(),this.imagePreloader=new ImagePreloader,this.audioController=audioControllerFactory(),this.markers=[],this.configAnimation=this.configAnimation.bind(this),this.onSetupError=this.onSetupError.bind(this),this.onSegmentComplete=this.onSegmentComplete.bind(this),this.drawnFrameEvent=new BMEnterFrameEvent("drawnFrame",0,0,0),this.expressionsPlugin=getExpressionsPlugin()};extendPrototype([BaseEvent],AnimationItem),AnimationItem.prototype.setParams=function(t){(t.wrapper||t.container)&&(this.wrapper=t.wrapper||t.container);var e="svg";t.animType?e=t.animType:t.renderer&&(e=t.renderer);var r=getRenderer(e);this.renderer=new r(this,t.rendererSettings),this.imagePreloader.setCacheType(e,this.renderer.globalData.defs),this.renderer.setProjectInterface(this.projectInterface),this.animType=e,""===t.loop||null===t.loop||void 0===t.loop||!0===t.loop?this.loop=!0:!1===t.loop?this.loop=!1:this.loop=parseInt(t.loop,10),this.autoplay=!("autoplay"in t)||t.autoplay,this.name=t.name?t.name:"",this.autoloadSegments=!Object.prototype.hasOwnProperty.call(t,"autoloadSegments")||t.autoloadSegments,this.assetsPath=t.assetsPath,this.initialSegment=t.initialSegment,t.audioFactory&&this.audioController.setAudioFactory(t.audioFactory),t.animationData?this.setupAnimation(t.animationData):t.path&&(-1!==t.path.lastIndexOf("\\")?this.path=t.path.substr(0,t.path.lastIndexOf("\\")+1):this.path=t.path.substr(0,t.path.lastIndexOf("/")+1),this.fileName=t.path.substr(t.path.lastIndexOf("/")+1),this.fileName=this.fileName.substr(0,this.fileName.lastIndexOf(".json")),dataManager.loadAnimation(t.path,this.configAnimation,this.onSetupError))},AnimationItem.prototype.onSetupError=function(){this.trigger("data_failed")},AnimationItem.prototype.setupAnimation=function(t){dataManager.completeAnimation(t,this.configAnimation)},AnimationItem.prototype.setData=function(t,e){e&&"object"!==_typeof$4(e)&&(e=JSON.parse(e));var r={wrapper:t,animationData:e},i=t.attributes;r.path=i.getNamedItem("data-animation-path")?i.getNamedItem("data-animation-path").value:i.getNamedItem("data-bm-path")?i.getNamedItem("data-bm-path").value:i.getNamedItem("bm-path")?i.getNamedItem("bm-path").value:"",r.animType=i.getNamedItem("data-anim-type")?i.getNamedItem("data-anim-type").value:i.getNamedItem("data-bm-type")?i.getNamedItem("data-bm-type").value:i.getNamedItem("bm-type")?i.getNamedItem("bm-type").value:i.getNamedItem("data-bm-renderer")?i.getNamedItem("data-bm-renderer").value:i.getNamedItem("bm-renderer")?i.getNamedItem("bm-renderer").value:getRegisteredRenderer()||"canvas";var a=i.getNamedItem("data-anim-loop")?i.getNamedItem("data-anim-loop").value:i.getNamedItem("data-bm-loop")?i.getNamedItem("data-bm-loop").value:i.getNamedItem("bm-loop")?i.getNamedItem("bm-loop").value:"";"false"===a?r.loop=!1:"true"===a?r.loop=!0:""!==a&&(r.loop=parseInt(a,10));var s=i.getNamedItem("data-anim-autoplay")?i.getNamedItem("data-anim-autoplay").value:i.getNamedItem("data-bm-autoplay")?i.getNamedItem("data-bm-autoplay").value:!i.getNamedItem("bm-autoplay")||i.getNamedItem("bm-autoplay").value;r.autoplay="false"!==s,r.name=i.getNamedItem("data-name")?i.getNamedItem("data-name").value:i.getNamedItem("data-bm-name")?i.getNamedItem("data-bm-name").value:i.getNamedItem("bm-name")?i.getNamedItem("bm-name").value:"","false"===(i.getNamedItem("data-anim-prerender")?i.getNamedItem("data-anim-prerender").value:i.getNamedItem("data-bm-prerender")?i.getNamedItem("data-bm-prerender").value:i.getNamedItem("bm-prerender")?i.getNamedItem("bm-prerender").value:"")&&(r.prerender=!1),r.path?this.setParams(r):this.trigger("destroy")},AnimationItem.prototype.includeLayers=function(t){t.op>this.animationData.op&&(this.animationData.op=t.op,this.totalFrames=Math.floor(t.op-this.animationData.ip));var e,r,i=this.animationData.layers,a=i.length,s=t.layers,n=s.length;for(r=0;r<n;r+=1)for(e=0;e<a;){if(i[e].id===s[r].id){i[e]=s[r];break}e+=1}if((t.chars||t.fonts)&&(this.renderer.globalData.fontManager.addChars(t.chars),this.renderer.globalData.fontManager.addFonts(t.fonts,this.renderer.globalData.defs)),t.assets)for(a=t.assets.length,e=0;e<a;e+=1)this.animationData.assets.push(t.assets[e]);this.animationData.__complete=!1,dataManager.completeAnimation(this.animationData,this.onSegmentComplete)},AnimationItem.prototype.onSegmentComplete=function(t){this.animationData=t;var e=getExpressionsPlugin();e&&e.initExpressions(this),this.loadNextSegment()},AnimationItem.prototype.loadNextSegment=function(){var t=this.animationData.segments;if(!t||0===t.length||!this.autoloadSegments)return this.trigger("data_ready"),void(this.timeCompleted=this.totalFrames);var e=t.shift();this.timeCompleted=e.time*this.frameRate;var r=this.path+this.fileName+"_"+this.segmentPos+".json";this.segmentPos+=1,dataManager.loadData(r,this.includeLayers.bind(this),function(){this.trigger("data_failed")}.bind(this))},AnimationItem.prototype.loadSegments=function(){this.animationData.segments||(this.timeCompleted=this.totalFrames),this.loadNextSegment()},AnimationItem.prototype.imagesLoaded=function(){this.trigger("loaded_images"),this.checkLoaded()},AnimationItem.prototype.preloadImages=function(){this.imagePreloader.setAssetsPath(this.assetsPath),this.imagePreloader.setPath(this.path),this.imagePreloader.loadAssets(this.animationData.assets,this.imagesLoaded.bind(this))},AnimationItem.prototype.configAnimation=function(t){if(this.renderer)try{this.animationData=t,this.initialSegment?(this.totalFrames=Math.floor(this.initialSegment[1]-this.initialSegment[0]),this.firstFrame=Math.round(this.initialSegment[0])):(this.totalFrames=Math.floor(this.animationData.op-this.animationData.ip),this.firstFrame=Math.round(this.animationData.ip)),this.renderer.configAnimation(t),t.assets||(t.assets=[]),this.assets=this.animationData.assets,this.frameRate=this.animationData.fr,this.frameMult=this.animationData.fr/1e3,this.renderer.searchExtraCompositions(t.assets),this.markers=markerParser(t.markers||[]),this.trigger("config_ready"),this.preloadImages(),this.loadSegments(),this.updaFrameModifier(),this.waitForFontsLoaded(),this.isPaused&&this.audioController.pause()}catch(t){this.triggerConfigError(t)}},AnimationItem.prototype.waitForFontsLoaded=function(){this.renderer&&(this.renderer.globalData.fontManager.isLoaded?this.checkLoaded():setTimeout(this.waitForFontsLoaded.bind(this),20))},AnimationItem.prototype.checkLoaded=function(){if(!this.isLoaded&&this.renderer.globalData.fontManager.isLoaded&&(this.imagePreloader.loadedImages()||"canvas"!==this.renderer.rendererType)&&this.imagePreloader.loadedFootages()){this.isLoaded=!0;var t=getExpressionsPlugin();t&&t.initExpressions(this),this.renderer.initItems(),setTimeout(function(){this.trigger("DOMLoaded")}.bind(this),0),this.gotoFrame(),this.autoplay&&this.play()}},AnimationItem.prototype.resize=function(t,e){var r="number"==typeof t?t:void 0,i="number"==typeof e?e:void 0;this.renderer.updateContainerSize(r,i)},AnimationItem.prototype.setSubframe=function(t){this.isSubframeEnabled=!!t},AnimationItem.prototype.gotoFrame=function(){this.currentFrame=this.isSubframeEnabled?this.currentRawFrame:~~this.currentRawFrame,this.timeCompleted!==this.totalFrames&&this.currentFrame>this.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame")},AnimationItem.prototype.renderFrame=function(){if(!1!==this.isLoaded&&this.renderer)try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame)}catch(t){this.triggerRenderFrameError(t)}},AnimationItem.prototype.play=function(t){t&&this.name!==t||!0===this.isPaused&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")))},AnimationItem.prototype.pause=function(t){t&&this.name!==t||!1===this.isPaused&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause())},AnimationItem.prototype.togglePause=function(t){t&&this.name!==t||(!0===this.isPaused?this.play():this.pause())},AnimationItem.prototype.stop=function(t){t&&this.name!==t||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0))},AnimationItem.prototype.getMarkerData=function(t){for(var e,r=0;r<this.markers.length;r+=1)if((e=this.markers[r]).payload&&e.payload.name===t)return e;return null},AnimationItem.prototype.goToAndStop=function(t,e,r){if(!r||this.name===r){var i=Number(t);if(isNaN(i)){var a=this.getMarkerData(t);a&&this.goToAndStop(a.time,!0)}else e?this.setCurrentRawFrameValue(t):this.setCurrentRawFrameValue(t*this.frameModifier);this.pause()}},AnimationItem.prototype.goToAndPlay=function(t,e,r){if(!r||this.name===r){var i=Number(t);if(isNaN(i)){var a=this.getMarkerData(t);a&&(a.duration?this.playSegments([a.time,a.time+a.duration],!0):this.goToAndStop(a.time,!0))}else this.goToAndStop(i,e,r);this.play()}},AnimationItem.prototype.advanceTime=function(t){if(!0!==this.isPaused&&!1!==this.isLoaded){var e=this.currentRawFrame+t*this.frameModifier,r=!1;e>=this.totalFrames-1&&this.frameModifier>0?this.loop&&this.playCount!==this.loop?e>=this.totalFrames?(this.playCount+=1,this.checkSegments(e%this.totalFrames)||(this.setCurrentRawFrameValue(e%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(e):this.checkSegments(e>this.totalFrames?e%this.totalFrames:0)||(r=!0,e=this.totalFrames-1):e<0?this.checkSegments(e%this.totalFrames)||(!this.loop||this.playCount--<=0&&!0!==this.loop?(r=!0,e=0):(this.setCurrentRawFrameValue(this.totalFrames+e%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0)):this.setCurrentRawFrameValue(e),r&&(this.setCurrentRawFrameValue(e),this.pause(),this.trigger("complete"))}},AnimationItem.prototype.adjustSegment=function(t,e){this.playCount=0,t[1]<t[0]?(this.frameModifier>0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=t[0]-t[1],this.timeCompleted=this.totalFrames,this.firstFrame=t[1],this.setCurrentRawFrameValue(this.totalFrames-.001-e)):t[1]>t[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=t[1]-t[0],this.timeCompleted=this.totalFrames,this.firstFrame=t[0],this.setCurrentRawFrameValue(.001+e)),this.trigger("segmentStart")},AnimationItem.prototype.setSegment=function(t,e){var r=-1;this.isPaused&&(this.currentRawFrame+this.firstFrame<t?r=t:this.currentRawFrame+this.firstFrame>e&&(r=e-t)),this.firstFrame=t,this.totalFrames=e-t,this.timeCompleted=this.totalFrames,-1!==r&&this.goToAndStop(r,!0)},AnimationItem.prototype.playSegments=function(t,e){if(e&&(this.segments.length=0),"object"===_typeof$4(t[0])){var r,i=t.length;for(r=0;r<i;r+=1)this.segments.push(t[r])}else this.segments.push(t);this.segments.length&&e&&this.adjustSegment(this.segments.shift(),0),this.isPaused&&this.play()},AnimationItem.prototype.resetSegments=function(t){this.segments.length=0,this.segments.push([this.animationData.ip,this.animationData.op]),t&&this.checkSegments(0)},AnimationItem.prototype.checkSegments=function(t){return!!this.segments.length&&(this.adjustSegment(this.segments.shift(),t),!0)},AnimationItem.prototype.destroy=function(t){t&&this.name!==t||!this.renderer||(this.renderer.destroy(),this.imagePreloader.destroy(),this.trigger("destroy"),this._cbs=null,this.onEnterFrame=null,this.onLoopComplete=null,this.onComplete=null,this.onSegmentStart=null,this.onDestroy=null,this.renderer=null,this.expressionsPlugin=null,this.imagePreloader=null,this.projectInterface=null)},AnimationItem.prototype.setCurrentRawFrameValue=function(t){this.currentRawFrame=t,this.gotoFrame()},AnimationItem.prototype.setSpeed=function(t){this.playSpeed=t,this.updaFrameModifier()},AnimationItem.prototype.setDirection=function(t){this.playDirection=t<0?-1:1,this.updaFrameModifier()},AnimationItem.prototype.setLoop=function(t){this.loop=t},AnimationItem.prototype.setVolume=function(t,e){e&&this.name!==e||this.audioController.setVolume(t)},AnimationItem.prototype.getVolume=function(){return this.audioController.getVolume()},AnimationItem.prototype.mute=function(t){t&&this.name!==t||this.audioController.mute()},AnimationItem.prototype.unmute=function(t){t&&this.name!==t||this.audioController.unmute()},AnimationItem.prototype.updaFrameModifier=function(){this.frameModifier=this.frameMult*this.playSpeed*this.playDirection,this.audioController.setRate(this.playSpeed*this.playDirection)},AnimationItem.prototype.getPath=function(){return this.path},AnimationItem.prototype.getAssetsPath=function(t){var e="";if(t.e)e=t.p;else if(this.assetsPath){var r=t.p;-1!==r.indexOf("images/")&&(r=r.split("/")[1]),e=this.assetsPath+r}else e=this.path,e+=t.u?t.u:"",e+=t.p;return e},AnimationItem.prototype.getAssetData=function(t){for(var e=0,r=this.assets.length;e<r;){if(t===this.assets[e].id)return this.assets[e];e+=1}return null},AnimationItem.prototype.hide=function(){this.renderer.hide()},AnimationItem.prototype.show=function(){this.renderer.show()},AnimationItem.prototype.getDuration=function(t){return t?this.totalFrames:this.totalFrames/this.frameRate},AnimationItem.prototype.updateDocumentData=function(t,e,r){try{this.renderer.getElementByPath(t).updateDocumentData(e,r)}catch(t){}},AnimationItem.prototype.trigger=function(t){if(this._cbs&&this._cbs[t])switch(t){case"enterFrame":this.triggerEvent(t,new BMEnterFrameEvent(t,this.currentFrame,this.totalFrames,this.frameModifier));break;case"drawnFrame":this.drawnFrameEvent.currentTime=this.currentFrame,this.drawnFrameEvent.totalTime=this.totalFrames,this.drawnFrameEvent.direction=this.frameModifier,this.triggerEvent(t,this.drawnFrameEvent);break;case"loopComplete":this.triggerEvent(t,new BMCompleteLoopEvent(t,this.loop,this.playCount,this.frameMult));break;case"complete":this.triggerEvent(t,new BMCompleteEvent(t,this.frameMult));break;case"segmentStart":this.triggerEvent(t,new BMSegmentStartEvent(t,this.firstFrame,this.totalFrames));break;case"destroy":this.triggerEvent(t,new BMDestroyEvent(t,this));break;default:this.triggerEvent(t)}"enterFrame"===t&&this.onEnterFrame&&this.onEnterFrame.call(this,new BMEnterFrameEvent(t,this.currentFrame,this.totalFrames,this.frameMult)),"loopComplete"===t&&this.onLoopComplete&&this.onLoopComplete.call(this,new BMCompleteLoopEvent(t,this.loop,this.playCount,this.frameMult)),"complete"===t&&this.onComplete&&this.onComplete.call(this,new BMCompleteEvent(t,this.frameMult)),"segmentStart"===t&&this.onSegmentStart&&this.onSegmentStart.call(this,new BMSegmentStartEvent(t,this.firstFrame,this.totalFrames)),"destroy"===t&&this.onDestroy&&this.onDestroy.call(this,new BMDestroyEvent(t,this))},AnimationItem.prototype.triggerRenderFrameError=function(t){var e=new BMRenderFrameErrorEvent(t,this.currentFrame);this.triggerEvent("error",e),this.onError&&this.onError.call(this,e)},AnimationItem.prototype.triggerConfigError=function(t){var e=new BMConfigErrorEvent(t,this.currentFrame);this.triggerEvent("error",e),this.onError&&this.onError.call(this,e)};var animationManager=function(){var t={},e=[],r=0,i=0,a=0,s=!0,n=!1;function removeElement(t){for(var r=0,a=t.target;r<i;)e[r].animation===a&&(e.splice(r,1),r-=1,i-=1,a.isPaused||subtractPlayingCount()),r+=1}function registerAnimation(t,r){if(!t)return null;for(var a=0;a<i;){if(e[a].elem===t&&null!==e[a].elem)return e[a].animation;a+=1}var s=new AnimationItem;return setupAnimation(s,t),s.setData(t,r),s}function addPlayingCount(){a+=1,activate()}function subtractPlayingCount(){a-=1}function setupAnimation(t,r){t.addEventListener("destroy",removeElement),t.addEventListener("_active",addPlayingCount),t.addEventListener("_idle",subtractPlayingCount),e.push({elem:r,animation:t}),i+=1}function resume(t){var o,h=t-r;for(o=0;o<i;o+=1)e[o].animation.advanceTime(h);r=t,a&&!n?window.requestAnimationFrame(resume):s=!0}function first(t){r=t,window.requestAnimationFrame(resume)}function activate(){!n&&a&&s&&(window.requestAnimationFrame(first),s=!1)}return t.registerAnimation=registerAnimation,t.loadAnimation=function loadAnimation(t){var e=new AnimationItem;return setupAnimation(e,null),e.setParams(t),e},t.setSpeed=function setSpeed(t,r){var a;for(a=0;a<i;a+=1)e[a].animation.setSpeed(t,r)},t.setDirection=function setDirection(t,r){var a;for(a=0;a<i;a+=1)e[a].animation.setDirection(t,r)},t.play=function play(t){var r;for(r=0;r<i;r+=1)e[r].animation.play(t)},t.pause=function pause(t){var r;for(r=0;r<i;r+=1)e[r].animation.pause(t)},t.stop=function stop(t){var r;for(r=0;r<i;r+=1)e[r].animation.stop(t)},t.togglePause=function togglePause(t){var r;for(r=0;r<i;r+=1)e[r].animation.togglePause(t)},t.searchAnimations=function searchAnimations(t,e,r){var i,a=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),s=a.length;for(i=0;i<s;i+=1)r&&a[i].setAttribute("data-bm-type",r),registerAnimation(a[i],t);if(e&&0===s){r||(r="svg");var n=document.getElementsByTagName("body")[0];n.innerText="";var o=createTag("div");o.style.width="100%",o.style.height="100%",o.setAttribute("data-bm-type",r),n.appendChild(o),registerAnimation(o,t)}},t.resize=function resize(){var t;for(t=0;t<i;t+=1)e[t].animation.resize()},t.goToAndStop=function goToAndStop(t,r,a){var s;for(s=0;s<i;s+=1)e[s].animation.goToAndStop(t,r,a)},t.destroy=function destroy(t){var r;for(r=i-1;r>=0;r-=1)e[r].animation.destroy(t)},t.freeze=function freeze(){n=!0},t.unfreeze=function unfreeze(){n=!1,activate()},t.setVolume=function setVolume(t,r){var a;for(a=0;a<i;a+=1)e[a].animation.setVolume(t,r)},t.mute=function mute(t){var r;for(r=0;r<i;r+=1)e[r].animation.mute(t)},t.unmute=function unmute(t){var r;for(r=0;r<i;r+=1)e[r].animation.unmute(t)},t.getRegisteredAnimations=function getRegisteredAnimations(){var t,r=e.length,i=[];for(t=0;t<r;t+=1)i.push(e[t].animation);return i},t}(),BezierFactory=function(){var t={getBezierEasing:function getBezierEasing(t,r,i,a,s){var n=s||("bez_"+t+"_"+r+"_"+i+"_"+a).replace(/\./g,"p");if(e[n])return e[n];var o=new BezierEasing([t,r,i,a]);return e[n]=o,o}},e={},r=11,i=1/(r-1),a="function"==typeof Float32Array;function A(t,e){return 1-3*e+3*t}function B(t,e){return 3*e-6*t}function C(t){return 3*t}function calcBezier(t,e,r){return((A(e,r)*t+B(e,r))*t+C(e))*t}function getSlope(t,e,r){return 3*A(e,r)*t*t+2*B(e,r)*t+C(e)}function BezierEasing(t){this._p=t,this._mSampleValues=a?new Float32Array(r):new Array(r),this._precomputed=!1,this.get=this.get.bind(this)}return BezierEasing.prototype={get:function get(t){var e=this._p[0],r=this._p[1],i=this._p[2],a=this._p[3];return this._precomputed||this._precompute(),e===r&&i===a?t:0===t?0:1===t?1:calcBezier(this._getTForX(t),r,a)},_precompute:function _precompute(){var t=this._p[0],e=this._p[1],r=this._p[2],i=this._p[3];this._precomputed=!0,t===e&&r===i||this._calcSampleValues()},_calcSampleValues:function _calcSampleValues(){for(var t=this._p[0],e=this._p[2],a=0;a<r;++a)this._mSampleValues[a]=calcBezier(a*i,t,e)},_getTForX:function _getTForX(t){for(var e=this._p[0],a=this._p[2],s=this._mSampleValues,n=0,o=1,h=r-1;o!==h&&s[o]<=t;++o)n+=i;var l=n+(t-s[--o])/(s[o+1]-s[o])*i,p=getSlope(l,e,a);return p>=.001?function newtonRaphsonIterate(t,e,r,i){for(var a=0;a<4;++a){var s=getSlope(e,r,i);if(0===s)return e;e-=(calcBezier(e,r,i)-t)/s}return e}(t,l,e,a):0===p?l:function binarySubdivide(t,e,r,i,a){var s,n,o=0;do{(s=calcBezier(n=e+(r-e)/2,i,a)-t)>0?r=n:e=n}while(Math.abs(s)>1e-7&&++o<10);return n}(t,n,n+i,e,a)}},t}(),pooling={double:function _double(t){return t.concat(createSizedArray(t.length))}},poolFactory=function(t,e,r){var i=0,a=t,s=createSizedArray(a);return{newElement:function newElement(){return i?s[i-=1]:e()},release:function release(t){i===a&&(s=pooling.double(s),a*=2),r&&r(t),s[i]=t,i+=1}}},bezierLengthPool=poolFactory(8,function create(){return{addedLength:0,percents:createTypedArray("float32",getDefaultCurveSegments()),lengths:createTypedArray("float32",getDefaultCurveSegments())}}),segmentsLengthPool=poolFactory(8,function create(){return{lengths:[],totalLength:0}},function release(t){var e,r=t.lengths.length;for(e=0;e<r;e+=1)bezierLengthPool.release(t.lengths[e]);t.lengths.length=0});function bezFunction(){var t=Math;function pointOnLine2D(t,e,r,i,a,s){var n=t*i+e*a+r*s-a*i-s*t-r*e;return n>-.001&&n<.001}var getBezierLength=function(t,e,r,i){var a,s,n,o,h,l,p=getDefaultCurveSegments(),c=0,f=[],m=[],u=bezierLengthPool.newElement();for(n=r.length,a=0;a<p;a+=1){for(h=a/(p-1),l=0,s=0;s<n;s+=1)o=bmPow(1-h,3)*t[s]+3*bmPow(1-h,2)*h*r[s]+3*(1-h)*bmPow(h,2)*i[s]+bmPow(h,3)*e[s],f[s]=o,null!==m[s]&&(l+=bmPow(f[s]-m[s],2)),m[s]=f[s];l&&(c+=l=bmSqrt(l)),u.percents[a]=h,u.lengths[a]=c}return u.addedLength=c,u};function BezierData(t){this.segmentLength=0,this.points=new Array(t)}function PointData(t,e){this.partialLength=t,this.point=e}var e,r=(e={},function(t,r,i,a){var s=(t[0]+"_"+t[1]+"_"+r[0]+"_"+r[1]+"_"+i[0]+"_"+i[1]+"_"+a[0]+"_"+a[1]).replace(/\./g,"p");if(!e[s]){var n,o,h,l,p,c,f,m=getDefaultCurveSegments(),u=0,d=null;2===t.length&&(t[0]!==r[0]||t[1]!==r[1])&&pointOnLine2D(t[0],t[1],r[0],r[1],t[0]+i[0],t[1]+i[1])&&pointOnLine2D(t[0],t[1],r[0],r[1],r[0]+a[0],r[1]+a[1])&&(m=2);var y=new BezierData(m);for(h=i.length,n=0;n<m;n+=1){for(f=createSizedArray(h),p=n/(m-1),c=0,o=0;o<h;o+=1)l=bmPow(1-p,3)*t[o]+3*bmPow(1-p,2)*p*(t[o]+i[o])+3*(1-p)*bmPow(p,2)*(r[o]+a[o])+bmPow(p,3)*r[o],f[o]=l,null!==d&&(c+=bmPow(f[o]-d[o],2));u+=c=bmSqrt(c),y.points[n]=new PointData(c,f),d=f}y.segmentLength=u,e[s]=y}return e[s]});function getDistancePerc(t,e){var r=e.percents,i=e.lengths,a=r.length,s=bmFloor((a-1)*t),n=t*e.addedLength,o=0;if(s===a-1||0===s||n===i[s])return r[s];for(var h=i[s]>n?-1:1,l=!0;l;)if(i[s]<=n&&i[s+1]>n?(o=(n-i[s])/(i[s+1]-i[s]),l=!1):s+=h,s<0||s>=a-1){if(s===a-1)return r[s];l=!1}return r[s]+(r[s+1]-r[s])*o}var i=createTypedArray("float32",8);return{getSegmentsLength:function getSegmentsLength(t){var e,r=segmentsLengthPool.newElement(),i=t.c,a=t.v,s=t.o,n=t.i,o=t._length,h=r.lengths,l=0;for(e=0;e<o-1;e+=1)h[e]=getBezierLength(a[e],a[e+1],s[e],n[e+1]),l+=h[e].addedLength;return i&&o&&(h[e]=getBezierLength(a[e],a[0],s[e],n[0]),l+=h[e].addedLength),r.totalLength=l,r},getNewSegment:function getNewSegment(e,r,a,s,n,o,h){n<0?n=0:n>1&&(n=1);var l,p=getDistancePerc(n,h),c=getDistancePerc(o=o>1?1:o,h),f=e.length,m=1-p,u=1-c,d=m*m*m,y=p*m*m*3,g=p*p*m*3,v=p*p*p,b=m*m*u,P=p*m*u+m*p*u+m*m*c,x=p*p*u+m*p*c+p*m*c,S=p*p*c,E=m*u*u,_=p*u*u+m*c*u+m*u*c,F=p*c*u+m*c*c+p*u*c,T=p*c*c,k=u*u*u,M=c*u*u+u*c*u+u*u*c,D=c*c*u+u*c*c+c*u*c,w=c*c*c;for(l=0;l<f;l+=1)i[4*l]=t.round(1e3*(d*e[l]+y*a[l]+g*s[l]+v*r[l]))/1e3,i[4*l+1]=t.round(1e3*(b*e[l]+P*a[l]+x*s[l]+S*r[l]))/1e3,i[4*l+2]=t.round(1e3*(E*e[l]+_*a[l]+F*s[l]+T*r[l]))/1e3,i[4*l+3]=t.round(1e3*(k*e[l]+M*a[l]+D*s[l]+w*r[l]))/1e3;return i},getPointInSegment:function getPointInSegment(e,r,i,a,s,n){var o=getDistancePerc(s,n),h=1-o;return[t.round(1e3*(h*h*h*e[0]+(o*h*h+h*o*h+h*h*o)*i[0]+(o*o*h+h*o*o+o*h*o)*a[0]+o*o*o*r[0]))/1e3,t.round(1e3*(h*h*h*e[1]+(o*h*h+h*o*h+h*h*o)*i[1]+(o*o*h+h*o*o+o*h*o)*a[1]+o*o*o*r[1]))/1e3]},buildBezierData:r,pointOnLine2D:pointOnLine2D,pointOnLine3D:function pointOnLine3D(e,r,i,a,s,n,o,h,l){if(0===i&&0===n&&0===l)return pointOnLine2D(e,r,a,s,o,h);var p,c=t.sqrt(t.pow(a-e,2)+t.pow(s-r,2)+t.pow(n-i,2)),f=t.sqrt(t.pow(o-e,2)+t.pow(h-r,2)+t.pow(l-i,2)),m=t.sqrt(t.pow(o-a,2)+t.pow(h-s,2)+t.pow(l-n,2));return(p=c>f?c>m?c-f-m:m-f-c:m>f?m-f-c:f-c-m)>-1e-4&&p<1e-4}}}var bez=bezFunction(),initFrame=initialDefaultFrame,mathAbs=Math.abs;function interpolateValue(t,e){var r,i=this.offsetTime;"multidimensional"===this.propType&&(r=createTypedArray("float32",this.pv.length));for(var a,s,n,o,h,l,p,c,f,m=e.lastIndex,u=m,d=this.keyframes.length-1,y=!0;y;){if(a=this.keyframes[u],s=this.keyframes[u+1],u===d-1&&t>=s.t-i){a.h&&(a=s),m=0;break}if(s.t-i>t){m=u;break}u<d-1?u+=1:(m=0,y=!1)}n=this.keyframesMetadata[u]||{};var g,v=s.t-i,b=a.t-i;if(a.to){n.bezierData||(n.bezierData=bez.buildBezierData(a.s,s.s||a.e,a.to,a.ti));var P=n.bezierData;if(t>=v||t<b){var x=t>=v?P.points.length-1:0;for(h=P.points[x].point.length,o=0;o<h;o+=1)r[o]=P.points[x].point[o]}else{n.__fnct?f=n.__fnct:(f=BezierFactory.getBezierEasing(a.o.x,a.o.y,a.i.x,a.i.y,a.n).get,n.__fnct=f),l=f((t-b)/(v-b));var S,E=P.segmentLength*l,_=e.lastFrame<t&&e._lastKeyframeIndex===u?e._lastAddedLength:0;for(c=e.lastFrame<t&&e._lastKeyframeIndex===u?e._lastPoint:0,y=!0,p=P.points.length;y;){if(_+=P.points[c].partialLength,0===E||0===l||c===P.points.length-1){for(h=P.points[c].point.length,o=0;o<h;o+=1)r[o]=P.points[c].point[o];break}if(E>=_&&E<_+P.points[c+1].partialLength){for(S=(E-_)/P.points[c+1].partialLength,h=P.points[c].point.length,o=0;o<h;o+=1)r[o]=P.points[c].point[o]+(P.points[c+1].point[o]-P.points[c].point[o])*S;break}c<p-1?c+=1:y=!1}e._lastPoint=c,e._lastAddedLength=_-P.points[c].partialLength,e._lastKeyframeIndex=u}}else{var F,T,k,M,D;if(d=a.s.length,g=s.s||a.e,this.sh&&1!==a.h)t>=v?(r[0]=g[0],r[1]=g[1],r[2]=g[2]):t<=b?(r[0]=a.s[0],r[1]=a.s[1],r[2]=a.s[2]):quaternionToEuler(r,slerp(createQuaternion(a.s),createQuaternion(g),(t-b)/(v-b)));else for(u=0;u<d;u+=1)1!==a.h&&(t>=v?l=1:t<b?l=0:(a.o.x.constructor===Array?(n.__fnct||(n.__fnct=[]),n.__fnct[u]?f=n.__fnct[u]:(F=void 0===a.o.x[u]?a.o.x[0]:a.o.x[u],T=void 0===a.o.y[u]?a.o.y[0]:a.o.y[u],k=void 0===a.i.x[u]?a.i.x[0]:a.i.x[u],M=void 0===a.i.y[u]?a.i.y[0]:a.i.y[u],f=BezierFactory.getBezierEasing(F,T,k,M).get,n.__fnct[u]=f)):n.__fnct?f=n.__fnct:(F=a.o.x,T=a.o.y,k=a.i.x,M=a.i.y,f=BezierFactory.getBezierEasing(F,T,k,M).get,a.keyframeMetadata=f),l=f((t-b)/(v-b)))),g=s.s||a.e,D=1===a.h?a.s[u]:a.s[u]+(g[u]-a.s[u])*l,"multidimensional"===this.propType?r[u]=D:r=D}return e.lastIndex=m,r}function slerp(t,e,r){var i,a,s,n,o,h=[],l=t[0],p=t[1],c=t[2],f=t[3],m=e[0],u=e[1],d=e[2],y=e[3];return(a=l*m+p*u+c*d+f*y)<0&&(a=-a,m=-m,u=-u,d=-d,y=-y),1-a>1e-6?(i=Math.acos(a),s=Math.sin(i),n=Math.sin((1-r)*i)/s,o=Math.sin(r*i)/s):(n=1-r,o=r),h[0]=n*l+o*m,h[1]=n*p+o*u,h[2]=n*c+o*d,h[3]=n*f+o*y,h}function quaternionToEuler(t,e){var r=e[0],i=e[1],a=e[2],s=e[3],n=Math.atan2(2*i*s-2*r*a,1-2*i*i-2*a*a),o=Math.asin(2*r*i+2*a*s),h=Math.atan2(2*r*s-2*i*a,1-2*r*r-2*a*a);t[0]=n/degToRads,t[1]=o/degToRads,t[2]=h/degToRads}function createQuaternion(t){var e=t[0]*degToRads,r=t[1]*degToRads,i=t[2]*degToRads,a=Math.cos(e/2),s=Math.cos(r/2),n=Math.cos(i/2),o=Math.sin(e/2),h=Math.sin(r/2),l=Math.sin(i/2);return[o*h*n+a*s*l,o*s*n+a*h*l,a*h*n-o*s*l,a*s*n-o*h*l]}function getValueAtCurrentTime(){var t=this.comp.renderedFrame-this.offsetTime,e=this.keyframes[0].t-this.offsetTime,r=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(t===this._caching.lastFrame||this._caching.lastFrame!==initFrame&&(this._caching.lastFrame>=r&&t>=r||this._caching.lastFrame<e&&t<e))){this._caching.lastFrame>=t&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var i=this.interpolateValue(t,this._caching);this.pv=i}return this._caching.lastFrame=t,this.pv}function setVValue(t){var e;if("unidimensional"===this.propType)e=t*this.mult,mathAbs(this.v-e)>1e-5&&(this.v=e,this._mdf=!0);else for(var r=0,i=this.v.length;r<i;)e=t[r]*this.mult,mathAbs(this.v[r]-e)>1e-5&&(this.v[r]=e,this._mdf=!0),r+=1}function processEffectsSequence(){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length)if(this.lock)this.setVValue(this.pv);else{var t;this.lock=!0,this._mdf=this._isFirstFrame;var e=this.effectsSequence.length,r=this.kf?this.pv:this.data.k;for(t=0;t<e;t+=1)r=this.effectsSequence[t](r);this.setVValue(r),this._isFirstFrame=!1,this.lock=!1,this.frameId=this.elem.globalData.frameId}}function addEffect(t){this.effectsSequence.push(t),this.container.addDynamicProperty(this)}function ValueProperty(t,e,r,i){this.propType="unidimensional",this.mult=r||1,this.data=e,this.v=r?e.k*r:e.k,this.pv=e.k,this._mdf=!1,this.elem=t,this.container=i,this.comp=t.comp,this.k=!1,this.kf=!1,this.vel=0,this.effectsSequence=[],this._isFirstFrame=!0,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.addEffect=addEffect}function MultiDimensionalProperty(t,e,r,i){var a;this.propType="multidimensional",this.mult=r||1,this.data=e,this._mdf=!1,this.elem=t,this.container=i,this.comp=t.comp,this.k=!1,this.kf=!1,this.frameId=-1;var s=e.k.length;for(this.v=createTypedArray("float32",s),this.pv=createTypedArray("float32",s),this.vel=createTypedArray("float32",s),a=0;a<s;a+=1)this.v[a]=e.k[a]*this.mult,this.pv[a]=e.k[a];this._isFirstFrame=!0,this.effectsSequence=[],this.getValue=processEffectsSequence,this.setVValue=setVValue,this.addEffect=addEffect}function KeyframedValueProperty(t,e,r,i){this.propType="unidimensional",this.keyframes=e.k,this.keyframesMetadata=[],this.offsetTime=t.data.st,this.frameId=-1,this._caching={lastFrame:initFrame,lastIndex:0,value:0,_lastKeyframeIndex:-1},this.k=!0,this.kf=!0,this.data=e,this.mult=r||1,this.elem=t,this.container=i,this.comp=t.comp,this.v=initFrame,this.pv=initFrame,this._isFirstFrame=!0,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.interpolateValue=interpolateValue,this.effectsSequence=[getValueAtCurrentTime.bind(this)],this.addEffect=addEffect}function KeyframedMultidimensionalProperty(t,e,r,i){var a;this.propType="multidimensional";var s,n,o,h,l=e.k.length;for(a=0;a<l-1;a+=1)e.k[a].to&&e.k[a].s&&e.k[a+1]&&e.k[a+1].s&&(s=e.k[a].s,n=e.k[a+1].s,o=e.k[a].to,h=e.k[a].ti,(2===s.length&&(s[0]!==n[0]||s[1]!==n[1])&&bez.pointOnLine2D(s[0],s[1],n[0],n[1],s[0]+o[0],s[1]+o[1])&&bez.pointOnLine2D(s[0],s[1],n[0],n[1],n[0]+h[0],n[1]+h[1])||3===s.length&&(s[0]!==n[0]||s[1]!==n[1]||s[2]!==n[2])&&bez.pointOnLine3D(s[0],s[1],s[2],n[0],n[1],n[2],s[0]+o[0],s[1]+o[1],s[2]+o[2])&&bez.pointOnLine3D(s[0],s[1],s[2],n[0],n[1],n[2],n[0]+h[0],n[1]+h[1],n[2]+h[2]))&&(e.k[a].to=null,e.k[a].ti=null),s[0]===n[0]&&s[1]===n[1]&&0===o[0]&&0===o[1]&&0===h[0]&&0===h[1]&&(2===s.length||s[2]===n[2]&&0===o[2]&&0===h[2])&&(e.k[a].to=null,e.k[a].ti=null));this.effectsSequence=[getValueAtCurrentTime.bind(this)],this.data=e,this.keyframes=e.k,this.keyframesMetadata=[],this.offsetTime=t.data.st,this.k=!0,this.kf=!0,this._isFirstFrame=!0,this.mult=r||1,this.elem=t,this.container=i,this.comp=t.comp,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.interpolateValue=interpolateValue,this.frameId=-1;var p=e.k[0].s.length;for(this.v=createTypedArray("float32",p),this.pv=createTypedArray("float32",p),a=0;a<p;a+=1)this.v[a]=initFrame,this.pv[a]=initFrame;this._caching={lastFrame:initFrame,lastIndex:0,value:createTypedArray("float32",p)},this.addEffect=addEffect}var PropertyFactory={getProp:function getProp(t,e,r,i,a){var s;if(e.sid&&(e=t.globalData.slotManager.getProp(e)),e.k.length)if("number"==typeof e.k[0])s=new MultiDimensionalProperty(t,e,i,a);else switch(r){case 0:s=new KeyframedValueProperty(t,e,i,a);break;case 1:s=new KeyframedMultidimensionalProperty(t,e,i,a)}else s=new ValueProperty(t,e,i,a);return s.effectsSequence.length&&a.addDynamicProperty(s),s}};function DynamicPropertyContainer(){}DynamicPropertyContainer.prototype={addDynamicProperty:function addDynamicProperty(t){-1===this.dynamicProperties.indexOf(t)&&(this.dynamicProperties.push(t),this.container.addDynamicProperty(this),this._isAnimated=!0)},iterateDynamicProperties:function iterateDynamicProperties(){var t;this._mdf=!1;var e=this.dynamicProperties.length;for(t=0;t<e;t+=1)this.dynamicProperties[t].getValue(),this.dynamicProperties[t]._mdf&&(this._mdf=!0)},initDynamicPropertyContainer:function initDynamicPropertyContainer(t){this.container=t,this.dynamicProperties=[],this._mdf=!1,this._isAnimated=!1}};var pointPool=poolFactory(8,function create(){return createTypedArray("float32",2)});function ShapePath(){this.c=!1,this._length=0,this._maxLength=8,this.v=createSizedArray(this._maxLength),this.o=createSizedArray(this._maxLength),this.i=createSizedArray(this._maxLength)}ShapePath.prototype.setPathData=function(t,e){this.c=t,this.setLength(e);for(var r=0;r<e;)this.v[r]=pointPool.newElement(),this.o[r]=pointPool.newElement(),this.i[r]=pointPool.newElement(),r+=1},ShapePath.prototype.setLength=function(t){for(;this._maxLength<t;)this.doubleArrayLength();this._length=t},ShapePath.prototype.doubleArrayLength=function(){this.v=this.v.concat(createSizedArray(this._maxLength)),this.i=this.i.concat(createSizedArray(this._maxLength)),this.o=this.o.concat(createSizedArray(this._maxLength)),this._maxLength*=2},ShapePath.prototype.setXYAt=function(t,e,r,i,a){var s;switch(this._length=Math.max(this._length,i+1),this._length>=this._maxLength&&this.doubleArrayLength(),r){case"v":s=this.v;break;case"i":s=this.i;break;case"o":s=this.o;break;default:s=[]}(!s[i]||s[i]&&!a)&&(s[i]=pointPool.newElement()),s[i][0]=t,s[i][1]=e},ShapePath.prototype.setTripleAt=function(t,e,r,i,a,s,n,o){this.setXYAt(t,e,"v",n,o),this.setXYAt(r,i,"o",n,o),this.setXYAt(a,s,"i",n,o)},ShapePath.prototype.reverse=function(){var t=new ShapePath;t.setPathData(this.c,this._length);var e=this.v,r=this.o,i=this.i,a=0;this.c&&(t.setTripleAt(e[0][0],e[0][1],i[0][0],i[0][1],r[0][0],r[0][1],0,!1),a=1);var s,n=this._length-1,o=this._length;for(s=a;s<o;s+=1)t.setTripleAt(e[n][0],e[n][1],i[n][0],i[n][1],r[n][0],r[n][1],s,!1),n-=1;return t},ShapePath.prototype.length=function(){return this._length};var shapePool=(factory=poolFactory(4,function create(){return new ShapePath},function release(t){var e,r=t._length;for(e=0;e<r;e+=1)pointPool.release(t.v[e]),pointPool.release(t.i[e]),pointPool.release(t.o[e]),t.v[e]=null,t.i[e]=null,t.o[e]=null;t._length=0,t.c=!1}),factory.clone=function clone(t){var e,r=factory.newElement(),i=void 0===t._length?t.v.length:t._length;for(r.setLength(i),r.c=t.c,e=0;e<i;e+=1)r.setTripleAt(t.v[e][0],t.v[e][1],t.o[e][0],t.o[e][1],t.i[e][0],t.i[e][1],e);return r},factory),factory;function ShapeCollection(){this._length=0,this._maxLength=4,this.shapes=createSizedArray(this._maxLength)}ShapeCollection.prototype.addShape=function(t){this._length===this._maxLength&&(this.shapes=this.shapes.concat(createSizedArray(this._maxLength)),this._maxLength*=2),this.shapes[this._length]=t,this._length+=1},ShapeCollection.prototype.releaseShapes=function(){var t;for(t=0;t<this._length;t+=1)shapePool.release(this.shapes[t]);this._length=0};var shapeCollectionPool=(ob={newShapeCollection:function newShapeCollection(){return _length?pool[_length-=1]:new ShapeCollection},release:function release(t){var e,r=t._length;for(e=0;e<r;e+=1)shapePool.release(t.shapes[e]);t._length=0,_length===_maxLength&&(pool=pooling.double(pool),_maxLength*=2),pool[_length]=t,_length+=1}},_length=0,_maxLength=4,pool=createSizedArray(_maxLength),ob),ob,_length,_maxLength,pool,ShapePropertyFactory=function(){var t=-999999;function interpolateShape(t,e,r){var i,a,s,n,o,h,l,p,c,f=r.lastIndex,m=this.keyframes;if(t<m[0].t-this.offsetTime)i=m[0].s[0],s=!0,f=0;else if(t>=m[m.length-1].t-this.offsetTime)i=m[m.length-1].s?m[m.length-1].s[0]:m[m.length-2].e[0],s=!0;else{for(var u,d,y,g=f,v=m.length-1,b=!0;b&&(u=m[g],!((d=m[g+1]).t-this.offsetTime>t));)g<v-1?g+=1:b=!1;if(y=this.keyframesMetadata[g]||{},f=g,!(s=1===u.h)){if(t>=d.t-this.offsetTime)p=1;else if(t<u.t-this.offsetTime)p=0;else{var P;y.__fnct?P=y.__fnct:(P=BezierFactory.getBezierEasing(u.o.x,u.o.y,u.i.x,u.i.y).get,y.__fnct=P),p=P((t-(u.t-this.offsetTime))/(d.t-this.offsetTime-(u.t-this.offsetTime)))}a=d.s?d.s[0]:u.e[0]}i=u.s[0]}for(h=e._length,l=i.i[0].length,r.lastIndex=f,n=0;n<h;n+=1)for(o=0;o<l;o+=1)c=s?i.i[n][o]:i.i[n][o]+(a.i[n][o]-i.i[n][o])*p,e.i[n][o]=c,c=s?i.o[n][o]:i.o[n][o]+(a.o[n][o]-i.o[n][o])*p,e.o[n][o]=c,c=s?i.v[n][o]:i.v[n][o]+(a.v[n][o]-i.v[n][o])*p,e.v[n][o]=c}function interpolateShapeCurrentTime(){var e=this.comp.renderedFrame-this.offsetTime,r=this.keyframes[0].t-this.offsetTime,i=this.keyframes[this.keyframes.length-1].t-this.offsetTime,a=this._caching.lastFrame;return a!==t&&(a<r&&e<r||a>i&&e>i)||(this._caching.lastIndex=a<e?this._caching.lastIndex:0,this.interpolateShape(e,this.pv,this._caching)),this._caching.lastFrame=e,this.pv}function resetShape(){this.paths=this.localShapeCollection}function setVValue(t){(function shapesEqual(t,e){if(t._length!==e._length||t.c!==e.c)return!1;var r,i=t._length;for(r=0;r<i;r+=1)if(t.v[r][0]!==e.v[r][0]||t.v[r][1]!==e.v[r][1]||t.o[r][0]!==e.o[r][0]||t.o[r][1]!==e.o[r][1]||t.i[r][0]!==e.i[r][0]||t.i[r][1]!==e.i[r][1])return!1;return!0})(this.v,t)||(this.v=shapePool.clone(t),this.localShapeCollection.releaseShapes(),this.localShapeCollection.addShape(this.v),this._mdf=!0,this.paths=this.localShapeCollection)}function processEffectsSequence(){if(this.elem.globalData.frameId!==this.frameId)if(this.effectsSequence.length)if(this.lock)this.setVValue(this.pv);else{var t,e;this.lock=!0,this._mdf=!1,t=this.kf?this.pv:this.data.ks?this.data.ks.k:this.data.pt.k;var r=this.effectsSequence.length;for(e=0;e<r;e+=1)t=this.effectsSequence[e](t);this.setVValue(t),this.lock=!1,this.frameId=this.elem.globalData.frameId}else this._mdf=!1}function ShapeProperty(t,e,r){this.propType="shape",this.comp=t.comp,this.container=t,this.elem=t,this.data=e,this.k=!1,this.kf=!1,this._mdf=!1;var i=3===r?e.pt.k:e.ks.k;this.v=shapePool.clone(i),this.pv=shapePool.clone(this.v),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.paths.addShape(this.v),this.reset=resetShape,this.effectsSequence=[]}function addEffect(t){this.effectsSequence.push(t),this.container.addDynamicProperty(this)}function KeyframedShapeProperty(e,r,i){this.propType="shape",this.comp=e.comp,this.elem=e,this.container=e,this.offsetTime=e.data.st,this.keyframes=3===i?r.pt.k:r.ks.k,this.keyframesMetadata=[],this.k=!0,this.kf=!0;var a=this.keyframes[0].s[0].i.length;this.v=shapePool.newElement(),this.v.setPathData(this.keyframes[0].s[0].c,a),this.pv=shapePool.clone(this.v),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.paths.addShape(this.v),this.lastFrame=t,this.reset=resetShape,this._caching={lastFrame:t,lastIndex:0},this.effectsSequence=[interpolateShapeCurrentTime.bind(this)]}ShapeProperty.prototype.interpolateShape=interpolateShape,ShapeProperty.prototype.getValue=processEffectsSequence,ShapeProperty.prototype.setVValue=setVValue,ShapeProperty.prototype.addEffect=addEffect,KeyframedShapeProperty.prototype.getValue=processEffectsSequence,KeyframedShapeProperty.prototype.interpolateShape=interpolateShape,KeyframedShapeProperty.prototype.setVValue=setVValue,KeyframedShapeProperty.prototype.addEffect=addEffect;var e=function(){var t=roundCorner;function EllShapePropertyFactory(t,e){this.v=shapePool.newElement(),this.v.setPathData(!0,4),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.localShapeCollection.addShape(this.v),this.d=e.d,this.elem=t,this.comp=t.comp,this.frameId=-1,this.initDynamicPropertyContainer(t),this.p=PropertyFactory.getProp(t,e.p,1,0,this),this.s=PropertyFactory.getProp(t,e.s,1,0,this),this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertEllToPath())}return EllShapePropertyFactory.prototype={reset:resetShape,getValue:function getValue(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertEllToPath())},convertEllToPath:function convertEllToPath(){var e=this.p.v[0],r=this.p.v[1],i=this.s.v[0]/2,a=this.s.v[1]/2,s=3!==this.d,n=this.v;n.v[0][0]=e,n.v[0][1]=r-a,n.v[1][0]=s?e+i:e-i,n.v[1][1]=r,n.v[2][0]=e,n.v[2][1]=r+a,n.v[3][0]=s?e-i:e+i,n.v[3][1]=r,n.i[0][0]=s?e-i*t:e+i*t,n.i[0][1]=r-a,n.i[1][0]=s?e+i:e-i,n.i[1][1]=r-a*t,n.i[2][0]=s?e+i*t:e-i*t,n.i[2][1]=r+a,n.i[3][0]=s?e-i:e+i,n.i[3][1]=r+a*t,n.o[0][0]=s?e+i*t:e-i*t,n.o[0][1]=r-a,n.o[1][0]=s?e+i:e-i,n.o[1][1]=r+a*t,n.o[2][0]=s?e-i*t:e+i*t,n.o[2][1]=r+a,n.o[3][0]=s?e-i:e+i,n.o[3][1]=r-a*t}},extendPrototype([DynamicPropertyContainer],EllShapePropertyFactory),EllShapePropertyFactory}(),r=function(){function StarShapePropertyFactory(t,e){this.v=shapePool.newElement(),this.v.setPathData(!0,0),this.elem=t,this.comp=t.comp,this.data=e,this.frameId=-1,this.d=e.d,this.initDynamicPropertyContainer(t),1===e.sy?(this.ir=PropertyFactory.getProp(t,e.ir,0,0,this),this.is=PropertyFactory.getProp(t,e.is,0,.01,this),this.convertToPath=this.convertStarToPath):this.convertToPath=this.convertPolygonToPath,this.pt=PropertyFactory.getProp(t,e.pt,0,0,this),this.p=PropertyFactory.getProp(t,e.p,1,0,this),this.r=PropertyFactory.getProp(t,e.r,0,degToRads,this),this.or=PropertyFactory.getProp(t,e.or,0,0,this),this.os=PropertyFactory.getProp(t,e.os,0,.01,this),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.localShapeCollection.addShape(this.v),this.paths=this.localShapeCollection,this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertToPath())}return StarShapePropertyFactory.prototype={reset:resetShape,getValue:function getValue(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertToPath())},convertStarToPath:function convertStarToPath(){var t,e,r,i,a=2*Math.floor(this.pt.v),s=2*Math.PI/a,n=!0,o=this.or.v,h=this.ir.v,l=this.os.v,p=this.is.v,c=2*Math.PI*o/(2*a),f=2*Math.PI*h/(2*a),m=-Math.PI/2;m+=this.r.v;var u=3===this.data.d?-1:1;for(this.v._length=0,t=0;t<a;t+=1){r=n?l:p,i=n?c:f;var d=(e=n?o:h)*Math.cos(m),y=e*Math.sin(m),g=0===d&&0===y?0:y/Math.sqrt(d*d+y*y),v=0===d&&0===y?0:-d/Math.sqrt(d*d+y*y);d+=+this.p.v[0],y+=+this.p.v[1],this.v.setTripleAt(d,y,d-g*i*r*u,y-v*i*r*u,d+g*i*r*u,y+v*i*r*u,t,!0),n=!n,m+=s*u}},convertPolygonToPath:function convertPolygonToPath(){var t,e=Math.floor(this.pt.v),r=2*Math.PI/e,i=this.or.v,a=this.os.v,s=2*Math.PI*i/(4*e),n=.5*-Math.PI,o=3===this.data.d?-1:1;for(n+=this.r.v,this.v._length=0,t=0;t<e;t+=1){var h=i*Math.cos(n),l=i*Math.sin(n),p=0===h&&0===l?0:l/Math.sqrt(h*h+l*l),c=0===h&&0===l?0:-h/Math.sqrt(h*h+l*l);h+=+this.p.v[0],l+=+this.p.v[1],this.v.setTripleAt(h,l,h-p*s*a*o,l-c*s*a*o,h+p*s*a*o,l+c*s*a*o,t,!0),n+=r*o}this.paths.length=0,this.paths[0]=this.v}},extendPrototype([DynamicPropertyContainer],StarShapePropertyFactory),StarShapePropertyFactory}(),i=function(){function RectShapePropertyFactory(t,e){this.v=shapePool.newElement(),this.v.c=!0,this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.localShapeCollection.addShape(this.v),this.paths=this.localShapeCollection,this.elem=t,this.comp=t.comp,this.frameId=-1,this.d=e.d,this.initDynamicPropertyContainer(t),this.p=PropertyFactory.getProp(t,e.p,1,0,this),this.s=PropertyFactory.getProp(t,e.s,1,0,this),this.r=PropertyFactory.getProp(t,e.r,0,0,this),this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertRectToPath())}return RectShapePropertyFactory.prototype={convertRectToPath:function convertRectToPath(){var t=this.p.v[0],e=this.p.v[1],r=this.s.v[0]/2,i=this.s.v[1]/2,a=bmMin(r,i,this.r.v),s=a*(1-roundCorner);this.v._length=0,2===this.d||1===this.d?(this.v.setTripleAt(t+r,e-i+a,t+r,e-i+a,t+r,e-i+s,0,!0),this.v.setTripleAt(t+r,e+i-a,t+r,e+i-s,t+r,e+i-a,1,!0),0!==a?(this.v.setTripleAt(t+r-a,e+i,t+r-a,e+i,t+r-s,e+i,2,!0),this.v.setTripleAt(t-r+a,e+i,t-r+s,e+i,t-r+a,e+i,3,!0),this.v.setTripleAt(t-r,e+i-a,t-r,e+i-a,t-r,e+i-s,4,!0),this.v.setTripleAt(t-r,e-i+a,t-r,e-i+s,t-r,e-i+a,5,!0),this.v.setTripleAt(t-r+a,e-i,t-r+a,e-i,t-r+s,e-i,6,!0),this.v.setTripleAt(t+r-a,e-i,t+r-s,e-i,t+r-a,e-i,7,!0)):(this.v.setTripleAt(t-r,e+i,t-r+s,e+i,t-r,e+i,2),this.v.setTripleAt(t-r,e-i,t-r,e-i+s,t-r,e-i,3))):(this.v.setTripleAt(t+r,e-i+a,t+r,e-i+s,t+r,e-i+a,0,!0),0!==a?(this.v.setTripleAt(t+r-a,e-i,t+r-a,e-i,t+r-s,e-i,1,!0),this.v.setTripleAt(t-r+a,e-i,t-r+s,e-i,t-r+a,e-i,2,!0),this.v.setTripleAt(t-r,e-i+a,t-r,e-i+a,t-r,e-i+s,3,!0),this.v.setTripleAt(t-r,e+i-a,t-r,e+i-s,t-r,e+i-a,4,!0),this.v.setTripleAt(t-r+a,e+i,t-r+a,e+i,t-r+s,e+i,5,!0),this.v.setTripleAt(t+r-a,e+i,t+r-s,e+i,t+r-a,e+i,6,!0),this.v.setTripleAt(t+r,e+i-a,t+r,e+i-a,t+r,e+i-s,7,!0)):(this.v.setTripleAt(t-r,e-i,t-r+s,e-i,t-r,e-i,1,!0),this.v.setTripleAt(t-r,e+i,t-r,e+i-s,t-r,e+i,2,!0),this.v.setTripleAt(t+r,e+i,t+r-s,e+i,t+r,e+i,3,!0)))},getValue:function getValue(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertRectToPath())},reset:resetShape},extendPrototype([DynamicPropertyContainer],RectShapePropertyFactory),RectShapePropertyFactory}(),a={getShapeProp:function getShapeProp(t,a,s){var n;return 3===s||4===s?n=(3===s?a.pt:a.ks).k.length?new KeyframedShapeProperty(t,a,s):new ShapeProperty(t,a,s):5===s?n=new i(t,a):6===s?n=new e(t,a):7===s&&(n=new r(t,a)),n.k&&t.addDynamicProperty(n),n},getConstructorFunction:function getConstructorFunction(){return ShapeProperty},getKeyframedConstructorFunction:function getKeyframedConstructorFunction(){return KeyframedShapeProperty}};return a}(),Matrix=function(){var t=Math.cos,e=Math.sin,r=Math.tan,i=Math.round;function reset(){return 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,this}function rotate(r){if(0===r)return this;var i=t(r),a=e(r);return this._t(i,-a,0,0,a,i,0,0,0,0,1,0,0,0,0,1)}function rotateX(r){if(0===r)return this;var i=t(r),a=e(r);return this._t(1,0,0,0,0,i,-a,0,0,a,i,0,0,0,0,1)}function rotateY(r){if(0===r)return this;var i=t(r),a=e(r);return this._t(i,0,a,0,0,1,0,0,-a,0,i,0,0,0,0,1)}function rotateZ(r){if(0===r)return this;var i=t(r),a=e(r);return this._t(i,-a,0,0,a,i,0,0,0,0,1,0,0,0,0,1)}function shear(t,e){return this._t(1,e,t,1,0,0)}function skew(t,e){return this.shear(r(t),r(e))}function skewFromAxis(i,a){var s=t(a),n=e(a);return this._t(s,n,0,0,-n,s,0,0,0,0,1,0,0,0,0,1)._t(1,0,0,0,r(i),1,0,0,0,0,1,0,0,0,0,1)._t(s,-n,0,0,n,s,0,0,0,0,1,0,0,0,0,1)}function scale(t,e,r){return r||0===r||(r=1),1===t&&1===e&&1===r?this:this._t(t,0,0,0,0,e,0,0,0,0,r,0,0,0,0,1)}function setTransform(t,e,r,i,a,s,n,o,h,l,p,c,f,m,u,d){return this.props[0]=t,this.props[1]=e,this.props[2]=r,this.props[3]=i,this.props[4]=a,this.props[5]=s,this.props[6]=n,this.props[7]=o,this.props[8]=h,this.props[9]=l,this.props[10]=p,this.props[11]=c,this.props[12]=f,this.props[13]=m,this.props[14]=u,this.props[15]=d,this}function translate(t,e,r){return r=r||0,0!==t||0!==e||0!==r?this._t(1,0,0,0,0,1,0,0,0,0,1,0,t,e,r,1):this}function transform(t,e,r,i,a,s,n,o,h,l,p,c,f,m,u,d){var y=this.props;if(1===t&&0===e&&0===r&&0===i&&0===a&&1===s&&0===n&&0===o&&0===h&&0===l&&1===p&&0===c)return y[12]=y[12]*t+y[15]*f,y[13]=y[13]*s+y[15]*m,y[14]=y[14]*p+y[15]*u,y[15]*=d,this._identityCalculated=!1,this;var g=y[0],v=y[1],b=y[2],P=y[3],x=y[4],S=y[5],E=y[6],_=y[7],F=y[8],T=y[9],k=y[10],M=y[11],D=y[12],w=y[13],I=y[14],L=y[15];return y[0]=g*t+v*a+b*h+P*f,y[1]=g*e+v*s+b*l+P*m,y[2]=g*r+v*n+b*p+P*u,y[3]=g*i+v*o+b*c+P*d,y[4]=x*t+S*a+E*h+_*f,y[5]=x*e+S*s+E*l+_*m,y[6]=x*r+S*n+E*p+_*u,y[7]=x*i+S*o+E*c+_*d,y[8]=F*t+T*a+k*h+M*f,y[9]=F*e+T*s+k*l+M*m,y[10]=F*r+T*n+k*p+M*u,y[11]=F*i+T*o+k*c+M*d,y[12]=D*t+w*a+I*h+L*f,y[13]=D*e+w*s+I*l+L*m,y[14]=D*r+w*n+I*p+L*u,y[15]=D*i+w*o+I*c+L*d,this._identityCalculated=!1,this}function multiply(t){var e=t.props;return this.transform(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}function isIdentity(){return this._identityCalculated||(this._identity=!(1!==this.props[0]||0!==this.props[1]||0!==this.props[2]||0!==this.props[3]||0!==this.props[4]||1!==this.props[5]||0!==this.props[6]||0!==this.props[7]||0!==this.props[8]||0!==this.props[9]||1!==this.props[10]||0!==this.props[11]||0!==this.props[12]||0!==this.props[13]||0!==this.props[14]||1!==this.props[15]),this._identityCalculated=!0),this._identity}function equals(t){for(var e=0;e<16;){if(t.props[e]!==this.props[e])return!1;e+=1}return!0}function clone(t){var e;for(e=0;e<16;e+=1)t.props[e]=this.props[e];return t}function cloneFromProps(t){var e;for(e=0;e<16;e+=1)this.props[e]=t[e]}function applyToPoint(t,e,r){return{x:t*this.props[0]+e*this.props[4]+r*this.props[8]+this.props[12],y:t*this.props[1]+e*this.props[5]+r*this.props[9]+this.props[13],z:t*this.props[2]+e*this.props[6]+r*this.props[10]+this.props[14]}}function applyToX(t,e,r){return t*this.props[0]+e*this.props[4]+r*this.props[8]+this.props[12]}function applyToY(t,e,r){return t*this.props[1]+e*this.props[5]+r*this.props[9]+this.props[13]}function applyToZ(t,e,r){return t*this.props[2]+e*this.props[6]+r*this.props[10]+this.props[14]}function getInverseMatrix(){var t=this.props[0]*this.props[5]-this.props[1]*this.props[4],e=this.props[5]/t,r=-this.props[1]/t,i=-this.props[4]/t,a=this.props[0]/t,s=(this.props[4]*this.props[13]-this.props[5]*this.props[12])/t,n=-(this.props[0]*this.props[13]-this.props[1]*this.props[12])/t,o=new Matrix;return o.props[0]=e,o.props[1]=r,o.props[4]=i,o.props[5]=a,o.props[12]=s,o.props[13]=n,o}function inversePoint(t){return this.getInverseMatrix().applyToPointArray(t[0],t[1],t[2]||0)}function inversePoints(t){var e,r=t.length,i=[];for(e=0;e<r;e+=1)i[e]=inversePoint(t[e]);return i}function applyToTriplePoints(t,e,r){var i=createTypedArray("float32",6);if(this.isIdentity())i[0]=t[0],i[1]=t[1],i[2]=e[0],i[3]=e[1],i[4]=r[0],i[5]=r[1];else{var a=this.props[0],s=this.props[1],n=this.props[4],o=this.props[5],h=this.props[12],l=this.props[13];i[0]=t[0]*a+t[1]*n+h,i[1]=t[0]*s+t[1]*o+l,i[2]=e[0]*a+e[1]*n+h,i[3]=e[0]*s+e[1]*o+l,i[4]=r[0]*a+r[1]*n+h,i[5]=r[0]*s+r[1]*o+l}return i}function applyToPointArray(t,e,r){return this.isIdentity()?[t,e,r]:[t*this.props[0]+e*this.props[4]+r*this.props[8]+this.props[12],t*this.props[1]+e*this.props[5]+r*this.props[9]+this.props[13],t*this.props[2]+e*this.props[6]+r*this.props[10]+this.props[14]]}function applyToPointStringified(t,e){if(this.isIdentity())return t+","+e;var r=this.props;return Math.round(100*(t*r[0]+e*r[4]+r[12]))/100+","+Math.round(100*(t*r[1]+e*r[5]+r[13]))/100}function toCSS(){for(var t=0,e=this.props,r="matrix3d(";t<16;)r+=i(1e4*e[t])/1e4,r+=15===t?")":",",t+=1;return r}function roundMatrixProperty(t){return t<1e-6&&t>0||t>-1e-6&&t<0?i(1e4*t)/1e4:t}function to2dCSS(){var t=this.props;return"matrix("+roundMatrixProperty(t[0])+","+roundMatrixProperty(t[1])+","+roundMatrixProperty(t[4])+","+roundMatrixProperty(t[5])+","+roundMatrixProperty(t[12])+","+roundMatrixProperty(t[13])+")"}return function(){this.reset=reset,this.rotate=rotate,this.rotateX=rotateX,this.rotateY=rotateY,this.rotateZ=rotateZ,this.skew=skew,this.skewFromAxis=skewFromAxis,this.shear=shear,this.scale=scale,this.setTransform=setTransform,this.translate=translate,this.transform=transform,this.multiply=multiply,this.applyToPoint=applyToPoint,this.applyToX=applyToX,this.applyToY=applyToY,this.applyToZ=applyToZ,this.applyToPointArray=applyToPointArray,this.applyToTriplePoints=applyToTriplePoints,this.applyToPointStringified=applyToPointStringified,this.toCSS=toCSS,this.to2dCSS=to2dCSS,this.clone=clone,this.cloneFromProps=cloneFromProps,this.equals=equals,this.inversePoints=inversePoints,this.inversePoint=inversePoint,this.getInverseMatrix=getInverseMatrix,this._t=this.transform,this.isIdentity=isIdentity,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray("float32",16),this.reset()}}();function _typeof$3(t){return _typeof$3="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof$3(t)}var lottie={},standalone="__[STANDALONE]__",animationData="__[ANIMATIONDATA]__",renderer="";function setLocation(t){setLocationHref(t)}function searchAnimations(){!0===standalone?animationManager.searchAnimations(animationData,standalone,renderer):animationManager.searchAnimations()}function setSubframeRendering(t){setSubframeEnabled(t)}function setPrefix(t){setIdPrefix(t)}function loadAnimation(t){return!0===standalone&&(t.animationData=JSON.parse(animationData)),animationManager.loadAnimation(t)}function setQuality(t){if("string"==typeof t)switch(t){case"high":setDefaultCurveSegments(200);break;default:case"medium":setDefaultCurveSegments(50);break;case"low":setDefaultCurveSegments(10)}else!isNaN(t)&&t>1&&setDefaultCurveSegments(t);getDefaultCurveSegments()>=50?roundValues(!1):roundValues(!0)}function inBrowser(){return"undefined"!=typeof navigator}function installPlugin(t,e){"expressions"===t&&setExpressionsPlugin(e)}function getFactory(t){switch(t){case"propertyFactory":return PropertyFactory;case"shapePropertyFactory":return ShapePropertyFactory;case"matrix":return Matrix;default:return null}}function checkReady(){"complete"===document.readyState&&(clearInterval(readyStateCheckInterval),searchAnimations())}function getQueryVariable(t){for(var e=queryString.split("&"),r=0;r<e.length;r+=1){var i=e[r].split("=");if(decodeURIComponent(i[0])==t)return decodeURIComponent(i[1])}return null}lottie.play=animationManager.play,lottie.pause=animationManager.pause,lottie.setLocationHref=setLocation,lottie.togglePause=animationManager.togglePause,lottie.setSpeed=animationManager.setSpeed,lottie.setDirection=animationManager.setDirection,lottie.stop=animationManager.stop,lottie.searchAnimations=searchAnimations,lottie.registerAnimation=animationManager.registerAnimation,lottie.loadAnimation=loadAnimation,lottie.setSubframeRendering=setSubframeRendering,lottie.resize=animationManager.resize,lottie.goToAndStop=animationManager.goToAndStop,lottie.destroy=animationManager.destroy,lottie.setQuality=setQuality,lottie.inBrowser=inBrowser,lottie.installPlugin=installPlugin,lottie.freeze=animationManager.freeze,lottie.unfreeze=animationManager.unfreeze,lottie.setVolume=animationManager.setVolume,lottie.mute=animationManager.mute,lottie.unmute=animationManager.unmute,lottie.getRegisteredAnimations=animationManager.getRegisteredAnimations,lottie.useWebWorker=setWebWorker,lottie.setIDPrefix=setPrefix,lottie.__getFactory=getFactory,lottie.version="5.13.0";var queryString="";if(standalone){var scripts=document.getElementsByTagName("script"),index=scripts.length-1,myScript=scripts[index]||{src:""};queryString=myScript.src?myScript.src.replace(/^[^\?]+\??/,""):"",renderer=getQueryVariable("renderer")}var readyStateCheckInterval=setInterval(checkReady,100);try{"object"!==_typeof$3(exports)&&__webpack_require__.amdO}catch(t){}var ShapeModifiers=function(){var t={},e={};return t.registerModifier=function registerModifier(t,r){e[t]||(e[t]=r)},t.getModifier=function getModifier(t,r,i){return new e[t](r,i)},t}();function ShapeModifier(){}function TrimModifier(){}function PuckerAndBloatModifier(){}ShapeModifier.prototype.initModifierProperties=function(){},ShapeModifier.prototype.addShapeToModifier=function(){},ShapeModifier.prototype.addShape=function(t){if(!this.closed){t.sh.container.addDynamicProperty(t.sh);var e={shape:t.sh,data:t,localShapeCollection:shapeCollectionPool.newShapeCollection()};this.shapes.push(e),this.addShapeToModifier(e),this._isAnimated&&t.setAsAnimated()}},ShapeModifier.prototype.init=function(t,e){this.shapes=[],this.elem=t,this.initDynamicPropertyContainer(t),this.initModifierProperties(t,e),this.frameId=initialDefaultFrame,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0)},ShapeModifier.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties())},extendPrototype([DynamicPropertyContainer],ShapeModifier),extendPrototype([ShapeModifier],TrimModifier),TrimModifier.prototype.initModifierProperties=function(t,e){this.s=PropertyFactory.getProp(t,e.s,0,.01,this),this.e=PropertyFactory.getProp(t,e.e,0,.01,this),this.o=PropertyFactory.getProp(t,e.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=e.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length},TrimModifier.prototype.addShapeToModifier=function(t){t.pathsData=[]},TrimModifier.prototype.calculateShapeEdges=function(t,e,r,i,a){var s=[];e<=1?s.push({s:t,e:e}):t>=1?s.push({s:t-1,e:e-1}):(s.push({s:t,e:1}),s.push({s:0,e:e-1}));var n,o,h=[],l=s.length;for(n=0;n<l;n+=1){var p,c;(o=s[n]).e*a<i||o.s*a>i+r||(p=o.s*a<=i?0:(o.s*a-i)/r,c=o.e*a>=i+r?1:(o.e*a-i)/r,h.push([p,c]))}return h.length||h.push([0,0]),h},TrimModifier.prototype.releasePathsData=function(t){var e,r=t.length;for(e=0;e<r;e+=1)segmentsLengthPool.release(t[e]);return t.length=0,t},TrimModifier.prototype.processShapes=function(t){var e,r,i,a;if(this._mdf||t){var s=this.o.v%360/360;if(s<0&&(s+=1),(e=this.s.v>1?1+s:this.s.v<0?0+s:this.s.v+s)>(r=this.e.v>1?1+s:this.e.v<0?0+s:this.e.v+s)){var n=e;e=r,r=n}e=1e-4*Math.round(1e4*e),r=1e-4*Math.round(1e4*r),this.sValue=e,this.eValue=r}else e=this.sValue,r=this.eValue;var o,h,l,p,c,f=this.shapes.length,m=0;if(r===e)for(a=0;a<f;a+=1)this.shapes[a].localShapeCollection.releaseShapes(),this.shapes[a].shape._mdf=!0,this.shapes[a].shape.paths=this.shapes[a].localShapeCollection,this._mdf&&(this.shapes[a].pathsData.length=0);else if(1===r&&0===e||0===r&&1===e){if(this._mdf)for(a=0;a<f;a+=1)this.shapes[a].pathsData.length=0,this.shapes[a].shape._mdf=!0}else{var u,d,y=[];for(a=0;a<f;a+=1)if((u=this.shapes[a]).shape._mdf||this._mdf||t||2===this.m){if(h=(i=u.shape.paths)._length,c=0,!u.shape._mdf&&u.pathsData.length)c=u.totalShapeLength;else{for(l=this.releasePathsData(u.pathsData),o=0;o<h;o+=1)p=bez.getSegmentsLength(i.shapes[o]),l.push(p),c+=p.totalLength;u.totalShapeLength=c,u.pathsData=l}m+=c,u.shape._mdf=!0}else u.shape.paths=u.localShapeCollection;var g,v=e,b=r,P=0;for(a=f-1;a>=0;a-=1)if((u=this.shapes[a]).shape._mdf){for((d=u.localShapeCollection).releaseShapes(),2===this.m&&f>1?(g=this.calculateShapeEdges(e,r,u.totalShapeLength,P,m),P+=u.totalShapeLength):g=[[v,b]],h=g.length,o=0;o<h;o+=1){v=g[o][0],b=g[o][1],y.length=0,b<=1?y.push({s:u.totalShapeLength*v,e:u.totalShapeLength*b}):v>=1?y.push({s:u.totalShapeLength*(v-1),e:u.totalShapeLength*(b-1)}):(y.push({s:u.totalShapeLength*v,e:u.totalShapeLength}),y.push({s:0,e:u.totalShapeLength*(b-1)}));var x=this.addShapes(u,y[0]);if(y[0].s!==y[0].e){if(y.length>1)if(u.shape.paths.shapes[u.shape.paths._length-1].c){var S=x.pop();this.addPaths(x,d),x=this.addShapes(u,y[1],S)}else this.addPaths(x,d),x=this.addShapes(u,y[1]);this.addPaths(x,d)}}u.shape.paths=d}}},TrimModifier.prototype.addPaths=function(t,e){var r,i=t.length;for(r=0;r<i;r+=1)e.addShape(t[r])},TrimModifier.prototype.addSegment=function(t,e,r,i,a,s,n){a.setXYAt(e[0],e[1],"o",s),a.setXYAt(r[0],r[1],"i",s+1),n&&a.setXYAt(t[0],t[1],"v",s),a.setXYAt(i[0],i[1],"v",s+1)},TrimModifier.prototype.addSegmentFromArray=function(t,e,r,i){e.setXYAt(t[1],t[5],"o",r),e.setXYAt(t[2],t[6],"i",r+1),i&&e.setXYAt(t[0],t[4],"v",r),e.setXYAt(t[3],t[7],"v",r+1)},TrimModifier.prototype.addShapes=function(t,e,r){var i,a,s,n,o,h,l,p,c=t.pathsData,f=t.shape.paths.shapes,m=t.shape.paths._length,u=0,d=[],y=!0;for(r?(o=r._length,p=r._length):(r=shapePool.newElement(),o=0,p=0),d.push(r),i=0;i<m;i+=1){for(h=c[i].lengths,r.c=f[i].c,s=f[i].c?h.length:h.length+1,a=1;a<s;a+=1)if(u+(n=h[a-1]).addedLength<e.s)u+=n.addedLength,r.c=!1;else{if(u>e.e){r.c=!1;break}e.s<=u&&e.e>=u+n.addedLength?(this.addSegment(f[i].v[a-1],f[i].o[a-1],f[i].i[a],f[i].v[a],r,o,y),y=!1):(l=bez.getNewSegment(f[i].v[a-1],f[i].v[a],f[i].o[a-1],f[i].i[a],(e.s-u)/n.addedLength,(e.e-u)/n.addedLength,h[a-1]),this.addSegmentFromArray(l,r,o,y),y=!1,r.c=!1),u+=n.addedLength,o+=1}if(f[i].c&&h.length){if(n=h[a-1],u<=e.e){var g=h[a-1].addedLength;e.s<=u&&e.e>=u+g?(this.addSegment(f[i].v[a-1],f[i].o[a-1],f[i].i[0],f[i].v[0],r,o,y),y=!1):(l=bez.getNewSegment(f[i].v[a-1],f[i].v[0],f[i].o[a-1],f[i].i[0],(e.s-u)/g,(e.e-u)/g,h[a-1]),this.addSegmentFromArray(l,r,o,y),y=!1,r.c=!1)}else r.c=!1;u+=n.addedLength,o+=1}if(r._length&&(r.setXYAt(r.v[p][0],r.v[p][1],"i",p),r.setXYAt(r.v[r._length-1][0],r.v[r._length-1][1],"o",r._length-1)),u>e.e)break;i<m-1&&(r=shapePool.newElement(),y=!0,d.push(r),o=0)}return d},extendPrototype([ShapeModifier],PuckerAndBloatModifier),PuckerAndBloatModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(t,e.a,0,null,this),this._isAnimated=!!this.amount.effectsSequence.length},PuckerAndBloatModifier.prototype.processPath=function(t,e){var r=e/100,i=[0,0],a=t._length,s=0;for(s=0;s<a;s+=1)i[0]+=t.v[s][0],i[1]+=t.v[s][1];i[0]/=a,i[1]/=a;var n,o,h,l,p,c,f=shapePool.newElement();for(f.c=t.c,s=0;s<a;s+=1)n=t.v[s][0]+(i[0]-t.v[s][0])*r,o=t.v[s][1]+(i[1]-t.v[s][1])*r,h=t.o[s][0]+(i[0]-t.o[s][0])*-r,l=t.o[s][1]+(i[1]-t.o[s][1])*-r,p=t.i[s][0]+(i[0]-t.i[s][0])*-r,c=t.i[s][1]+(i[1]-t.i[s][1])*-r,f.setTripleAt(n,o,h,l,p,c,s);return f},PuckerAndBloatModifier.prototype.processShapes=function(t){var e,r,i,a,s,n,o=this.shapes.length,h=this.amount.v;if(0!==h)for(r=0;r<o;r+=1){if(n=(s=this.shapes[r]).localShapeCollection,s.shape._mdf||this._mdf||t)for(n.releaseShapes(),s.shape._mdf=!0,e=s.shape.paths.shapes,a=s.shape.paths._length,i=0;i<a;i+=1)n.addShape(this.processPath(e[i],h));s.shape.paths=s.localShapeCollection}this.dynamicProperties.length||(this._mdf=!1)};var TransformPropertyFactory=function(){var t=[0,0];function TransformProperty(t,e,r){if(this.elem=t,this.frameId=-1,this.propType="transform",this.data=e,this.v=new Matrix,this.pre=new Matrix,this.appliedTransformations=0,this.initDynamicPropertyContainer(r||t),e.p&&e.p.s?(this.px=PropertyFactory.getProp(t,e.p.x,0,0,this),this.py=PropertyFactory.getProp(t,e.p.y,0,0,this),e.p.z&&(this.pz=PropertyFactory.getProp(t,e.p.z,0,0,this))):this.p=PropertyFactory.getProp(t,e.p||{k:[0,0,0]},1,0,this),e.rx){if(this.rx=PropertyFactory.getProp(t,e.rx,0,degToRads,this),this.ry=PropertyFactory.getProp(t,e.ry,0,degToRads,this),this.rz=PropertyFactory.getProp(t,e.rz,0,degToRads,this),e.or.k[0].ti){var i,a=e.or.k.length;for(i=0;i<a;i+=1)e.or.k[i].to=null,e.or.k[i].ti=null}this.or=PropertyFactory.getProp(t,e.or,1,degToRads,this),this.or.sh=!0}else this.r=PropertyFactory.getProp(t,e.r||{k:0},0,degToRads,this);e.sk&&(this.sk=PropertyFactory.getProp(t,e.sk,0,degToRads,this),this.sa=PropertyFactory.getProp(t,e.sa,0,degToRads,this)),this.a=PropertyFactory.getProp(t,e.a||{k:[0,0,0]},1,0,this),this.s=PropertyFactory.getProp(t,e.s||{k:[100,100,100]},1,.01,this),e.o?this.o=PropertyFactory.getProp(t,e.o,0,.01,t):this.o={_mdf:!1,v:1},this._isDirty=!0,this.dynamicProperties.length||this.getValue(!0)}return TransformProperty.prototype={applyToMatrix:function applyToMatrix(t){var e=this._mdf;this.iterateDynamicProperties(),this._mdf=this._mdf||e,this.a&&t.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.s&&t.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.sk&&t.skewFromAxis(-this.sk.v,this.sa.v),this.r?t.rotate(-this.r.v):t.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.data.p.s?this.data.p.z?t.translate(this.px.v,this.py.v,-this.pz.v):t.translate(this.px.v,this.py.v,0):t.translate(this.p.v[0],this.p.v[1],-this.p.v[2])},getValue:function processKeys(e){if(this.elem.globalData.frameId!==this.frameId){if(this._isDirty&&(this.precalculateMatrix(),this._isDirty=!1),this.iterateDynamicProperties(),this._mdf||e){var r;if(this.v.cloneFromProps(this.pre.props),this.appliedTransformations<1&&this.v.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations<2&&this.v.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.sk&&this.appliedTransformations<3&&this.v.skewFromAxis(-this.sk.v,this.sa.v),this.r&&this.appliedTransformations<4?this.v.rotate(-this.r.v):!this.r&&this.appliedTransformations<4&&this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.autoOriented){var i,a;if(r=this.elem.globalData.frameRate,this.p&&this.p.keyframes&&this.p.getValueAtTime)this.p._caching.lastFrame+this.p.offsetTime<=this.p.keyframes[0].t?(i=this.p.getValueAtTime((this.p.keyframes[0].t+.01)/r,0),a=this.p.getValueAtTime(this.p.keyframes[0].t/r,0)):this.p._caching.lastFrame+this.p.offsetTime>=this.p.keyframes[this.p.keyframes.length-1].t?(i=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/r,0),a=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/r,0)):(i=this.p.pv,a=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/r,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){i=[],a=[];var s=this.px,n=this.py;s._caching.lastFrame+s.offsetTime<=s.keyframes[0].t?(i[0]=s.getValueAtTime((s.keyframes[0].t+.01)/r,0),i[1]=n.getValueAtTime((n.keyframes[0].t+.01)/r,0),a[0]=s.getValueAtTime(s.keyframes[0].t/r,0),a[1]=n.getValueAtTime(n.keyframes[0].t/r,0)):s._caching.lastFrame+s.offsetTime>=s.keyframes[s.keyframes.length-1].t?(i[0]=s.getValueAtTime(s.keyframes[s.keyframes.length-1].t/r,0),i[1]=n.getValueAtTime(n.keyframes[n.keyframes.length-1].t/r,0),a[0]=s.getValueAtTime((s.keyframes[s.keyframes.length-1].t-.01)/r,0),a[1]=n.getValueAtTime((n.keyframes[n.keyframes.length-1].t-.01)/r,0)):(i=[s.pv,n.pv],a[0]=s.getValueAtTime((s._caching.lastFrame+s.offsetTime-.01)/r,s.offsetTime),a[1]=n.getValueAtTime((n._caching.lastFrame+n.offsetTime-.01)/r,n.offsetTime))}else i=a=t;this.v.rotate(-Math.atan2(i[1]-a[1],i[0]-a[0]))}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2])}this.frameId=this.elem.globalData.frameId}},precalculateMatrix:function precalculateMatrix(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length&&(this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1,!this.s.effectsSequence.length)){if(this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2,this.sk){if(this.sk.effectsSequence.length||this.sa.effectsSequence.length)return;this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3}this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):this.rz.effectsSequence.length||this.ry.effectsSequence.length||this.rx.effectsSequence.length||this.or.effectsSequence.length||(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4)}},autoOrient:function autoOrient(){}},extendPrototype([DynamicPropertyContainer],TransformProperty),TransformProperty.prototype.addDynamicProperty=function addDynamicProperty(t){this._addDynamicProperty(t),this.elem.addDynamicProperty(t),this._isDirty=!0},TransformProperty.prototype._addDynamicProperty=DynamicPropertyContainer.prototype.addDynamicProperty,{getTransformProperty:function getTransformProperty(t,e,r){return new TransformProperty(t,e,r)}}}();function RepeaterModifier(){}function RoundCornersModifier(){}function floatEqual(t,e){return 1e5*Math.abs(t-e)<=Math.min(Math.abs(t),Math.abs(e))}function floatZero(t){return Math.abs(t)<=1e-5}function lerp(t,e,r){return t*(1-r)+e*r}function lerpPoint(t,e,r){return[lerp(t[0],e[0],r),lerp(t[1],e[1],r)]}function quadRoots(t,e,r){if(0===t)return[];var i=e*e-4*t*r;if(i<0)return[];var a=-e/(2*t);if(0===i)return[a];var s=Math.sqrt(i)/(2*t);return[a-s,a+s]}function polynomialCoefficients(t,e,r,i){return[3*e-t-3*r+i,3*t-6*e+3*r,-3*t+3*e,t]}function singlePoint(t){return new PolynomialBezier(t,t,t,t,!1)}function PolynomialBezier(t,e,r,i,a){a&&pointEqual(t,e)&&(e=lerpPoint(t,i,1/3)),a&&pointEqual(r,i)&&(r=lerpPoint(t,i,2/3));var s=polynomialCoefficients(t[0],e[0],r[0],i[0]),n=polynomialCoefficients(t[1],e[1],r[1],i[1]);this.a=[s[0],n[0]],this.b=[s[1],n[1]],this.c=[s[2],n[2]],this.d=[s[3],n[3]],this.points=[t,e,r,i]}function extrema(t,e){var r=t.points[0][e],i=t.points[t.points.length-1][e];if(r>i){var a=i;i=r,r=a}for(var s=quadRoots(3*t.a[e],2*t.b[e],t.c[e]),n=0;n<s.length;n+=1)if(s[n]>0&&s[n]<1){var o=t.point(s[n])[e];o<r?r=o:o>i&&(i=o)}return{min:r,max:i}}function intersectData(t,e,r){var i=t.boundingBox();return{cx:i.cx,cy:i.cy,width:i.width,height:i.height,bez:t,t:(e+r)/2,t1:e,t2:r}}function splitData(t){var e=t.bez.split(.5);return[intersectData(e[0],t.t1,t.t),intersectData(e[1],t.t,t.t2)]}function boxIntersect(t,e){return 2*Math.abs(t.cx-e.cx)<t.width+e.width&&2*Math.abs(t.cy-e.cy)<t.height+e.height}function intersectsImpl(t,e,r,i,a,s){if(boxIntersect(t,e))if(r>=s||t.width<=i&&t.height<=i&&e.width<=i&&e.height<=i)a.push([t.t,e.t]);else{var n=splitData(t),o=splitData(e);intersectsImpl(n[0],o[0],r+1,i,a,s),intersectsImpl(n[0],o[1],r+1,i,a,s),intersectsImpl(n[1],o[0],r+1,i,a,s),intersectsImpl(n[1],o[1],r+1,i,a,s)}}function crossProduct(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function lineIntersection(t,e,r,i){var a=[t[0],t[1],1],s=[e[0],e[1],1],n=[r[0],r[1],1],o=[i[0],i[1],1],h=crossProduct(crossProduct(a,s),crossProduct(n,o));return floatZero(h[2])?null:[h[0]/h[2],h[1]/h[2]]}function polarOffset(t,e,r){return[t[0]+Math.cos(e)*r,t[1]-Math.sin(e)*r]}function pointDistance(t,e){return Math.hypot(t[0]-e[0],t[1]-e[1])}function pointEqual(t,e){return floatEqual(t[0],e[0])&&floatEqual(t[1],e[1])}function ZigZagModifier(){}function setPoint(t,e,r,i,a,s,n){var o=r-Math.PI/2,h=r+Math.PI/2,l=e[0]+Math.cos(r)*i*a,p=e[1]-Math.sin(r)*i*a;t.setTripleAt(l,p,l+Math.cos(o)*s,p-Math.sin(o)*s,l+Math.cos(h)*n,p-Math.sin(h)*n,t.length())}function getPerpendicularVector(t,e){var r=[e[0]-t[0],e[1]-t[1]],i=.5*-Math.PI;return[Math.cos(i)*r[0]-Math.sin(i)*r[1],Math.sin(i)*r[0]+Math.cos(i)*r[1]]}function getProjectingAngle(t,e){var r=0===e?t.length()-1:e-1,i=(e+1)%t.length(),a=getPerpendicularVector(t.v[r],t.v[i]);return Math.atan2(0,1)-Math.atan2(a[1],a[0])}function zigZagCorner(t,e,r,i,a,s,n){var o=getProjectingAngle(e,r),h=e.v[r%e._length],l=e.v[0===r?e._length-1:r-1],p=e.v[(r+1)%e._length],c=2===s?Math.sqrt(Math.pow(h[0]-l[0],2)+Math.pow(h[1]-l[1],2)):0,f=2===s?Math.sqrt(Math.pow(h[0]-p[0],2)+Math.pow(h[1]-p[1],2)):0;setPoint(t,e.v[r%e._length],o,n,i,f/(2*(a+1)),c/(2*(a+1)),s)}function zigZagSegment(t,e,r,i,a,s){for(var n=0;n<i;n+=1){var o=(n+1)/(i+1),h=2===a?Math.sqrt(Math.pow(e.points[3][0]-e.points[0][0],2)+Math.pow(e.points[3][1]-e.points[0][1],2)):0,l=e.normalAngle(o);setPoint(t,e.point(o),l,s,r,h/(2*(i+1)),h/(2*(i+1)),a),s=-s}return s}function linearOffset(t,e,r){var i=Math.atan2(e[0]-t[0],e[1]-t[1]);return[polarOffset(t,i,r),polarOffset(e,i,r)]}function offsetSegment(t,e){var r,i,a,s,n,o,h;r=(h=linearOffset(t.points[0],t.points[1],e))[0],i=h[1],a=(h=linearOffset(t.points[1],t.points[2],e))[0],s=h[1],n=(h=linearOffset(t.points[2],t.points[3],e))[0],o=h[1];var l=lineIntersection(r,i,a,s);null===l&&(l=i);var p=lineIntersection(n,o,a,s);return null===p&&(p=n),new PolynomialBezier(r,l,p,o)}function joinLines(t,e,r,i,a){var s=e.points[3],n=r.points[0];if(3===i)return s;if(pointEqual(s,n))return s;if(2===i){var o=-e.tangentAngle(1),h=-r.tangentAngle(0)+Math.PI,l=lineIntersection(s,polarOffset(s,o+Math.PI/2,100),n,polarOffset(n,o+Math.PI/2,100)),p=l?pointDistance(l,s):pointDistance(s,n)/2,c=polarOffset(s,o,2*p*roundCorner);return t.setXYAt(c[0],c[1],"o",t.length()-1),c=polarOffset(n,h,2*p*roundCorner),t.setTripleAt(n[0],n[1],n[0],n[1],c[0],c[1],t.length()),n}var f=lineIntersection(pointEqual(s,e.points[2])?e.points[0]:e.points[2],s,n,pointEqual(n,r.points[1])?r.points[3]:r.points[1]);return f&&pointDistance(f,s)<a?(t.setTripleAt(f[0],f[1],f[0],f[1],f[0],f[1],t.length()),f):s}function getIntersection(t,e){var r=t.intersections(e);return r.length&&floatEqual(r[0][0],1)&&r.shift(),r.length?r[0]:null}function pruneSegmentIntersection(t,e){var r=t.slice(),i=e.slice(),a=getIntersection(t[t.length-1],e[0]);return a&&(r[t.length-1]=t[t.length-1].split(a[0])[0],i[0]=e[0].split(a[1])[1]),t.length>1&&e.length>1&&(a=getIntersection(t[0],e[e.length-1]))?[[t[0].split(a[0])[0]],[e[e.length-1].split(a[1])[1]]]:[r,i]}function pruneIntersections(t){for(var e,r=1;r<t.length;r+=1)e=pruneSegmentIntersection(t[r-1],t[r]),t[r-1]=e[0],t[r]=e[1];return t.length>1&&(e=pruneSegmentIntersection(t[t.length-1],t[0]),t[t.length-1]=e[0],t[0]=e[1]),t}function offsetSegmentSplit(t,e){var r,i,a,s,n=t.inflectionPoints();if(0===n.length)return[offsetSegment(t,e)];if(1===n.length||floatEqual(n[1],1))return r=(a=t.split(n[0]))[0],i=a[1],[offsetSegment(r,e),offsetSegment(i,e)];r=(a=t.split(n[0]))[0];var o=(n[1]-n[0])/(1-n[0]);return s=(a=a[1].split(o))[0],i=a[1],[offsetSegment(r,e),offsetSegment(s,e),offsetSegment(i,e)]}function OffsetPathModifier(){}function getFontProperties(t){for(var e=t.fStyle?t.fStyle.split(" "):[],r="normal",i="normal",a=e.length,s=0;s<a;s+=1)switch(e[s].toLowerCase()){case"italic":i="italic";break;case"bold":r="700";break;case"black":r="900";break;case"medium":r="500";break;case"regular":case"normal":r="400";break;case"light":case"thin":r="200"}return{style:i,weight:t.fWeight||r}}extendPrototype([ShapeModifier],RepeaterModifier),RepeaterModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.c=PropertyFactory.getProp(t,e.c,0,null,this),this.o=PropertyFactory.getProp(t,e.o,0,null,this),this.tr=TransformPropertyFactory.getTransformProperty(t,e.tr,this),this.so=PropertyFactory.getProp(t,e.tr.so,0,.01,this),this.eo=PropertyFactory.getProp(t,e.tr.eo,0,.01,this),this.data=e,this.dynamicProperties.length||this.getValue(!0),this._isAnimated=!!this.dynamicProperties.length,this.pMatrix=new Matrix,this.rMatrix=new Matrix,this.sMatrix=new Matrix,this.tMatrix=new Matrix,this.matrix=new Matrix},RepeaterModifier.prototype.applyTransforms=function(t,e,r,i,a,s){var n=s?-1:1,o=i.s.v[0]+(1-i.s.v[0])*(1-a),h=i.s.v[1]+(1-i.s.v[1])*(1-a);t.translate(i.p.v[0]*n*a,i.p.v[1]*n*a,i.p.v[2]),e.translate(-i.a.v[0],-i.a.v[1],i.a.v[2]),e.rotate(-i.r.v*n*a),e.translate(i.a.v[0],i.a.v[1],i.a.v[2]),r.translate(-i.a.v[0],-i.a.v[1],i.a.v[2]),r.scale(s?1/o:o,s?1/h:h),r.translate(i.a.v[0],i.a.v[1],i.a.v[2])},RepeaterModifier.prototype.init=function(t,e,r,i){for(this.elem=t,this.arr=e,this.pos=r,this.elemsData=i,this._currentCopies=0,this._elements=[],this._groups=[],this.frameId=-1,this.initDynamicPropertyContainer(t),this.initModifierProperties(t,e[r]);r>0;)r-=1,this._elements.unshift(e[r]);this.dynamicProperties.length?this.k=!0:this.getValue(!0)},RepeaterModifier.prototype.resetElements=function(t){var e,r=t.length;for(e=0;e<r;e+=1)t[e]._processed=!1,"gr"===t[e].ty&&this.resetElements(t[e].it)},RepeaterModifier.prototype.cloneElements=function(t){var e=JSON.parse(JSON.stringify(t));return this.resetElements(e),e},RepeaterModifier.prototype.changeGroupRender=function(t,e){var r,i=t.length;for(r=0;r<i;r+=1)t[r]._render=e,"gr"===t[r].ty&&this.changeGroupRender(t[r].it,e)},RepeaterModifier.prototype.processShapes=function(t){var e,r,i,a,s,n=!1;if(this._mdf||t){var o,h=Math.ceil(this.c.v);if(this._groups.length<h){for(;this._groups.length<h;){var l={it:this.cloneElements(this._elements),ty:"gr"};l.it.push({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"}),this.arr.splice(0,0,l),this._groups.splice(0,0,l),this._currentCopies+=1}this.elem.reloadShapes(),n=!0}for(s=0,i=0;i<=this._groups.length-1;i+=1){if(o=s<h,this._groups[i]._render=o,this.changeGroupRender(this._groups[i].it,o),!o){var p=this.elemsData[i].it,c=p[p.length-1];0!==c.transform.op.v?(c.transform.op._mdf=!0,c.transform.op.v=0):c.transform.op._mdf=!1}s+=1}this._currentCopies=h;var f=this.o.v,m=f%1,u=f>0?Math.floor(f):Math.ceil(f),d=this.pMatrix.props,y=this.rMatrix.props,g=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var v,b,P=0;if(f>0){for(;P<u;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),P+=1;m&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,m,!1),P+=m)}else if(f<0){for(;P>u;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),P-=1;m&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-m,!0),P-=m)}for(i=1===this.data.m?0:this._currentCopies-1,a=1===this.data.m?1:-1,s=this._currentCopies;s;){if(b=(r=(e=this.elemsData[i].it)[e.length-1].transform.mProps.v.props).length,e[e.length-1].transform.mProps._mdf=!0,e[e.length-1].transform.op._mdf=!0,e[e.length-1].transform.op.v=1===this._currentCopies?this.so.v:this.so.v+(this.eo.v-this.so.v)*(i/(this._currentCopies-1)),0!==P){for((0!==i&&1===a||i!==this._currentCopies-1&&-1===a)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(y[0],y[1],y[2],y[3],y[4],y[5],y[6],y[7],y[8],y[9],y[10],y[11],y[12],y[13],y[14],y[15]),this.matrix.transform(g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],g[8],g[9],g[10],g[11],g[12],g[13],g[14],g[15]),this.matrix.transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],d[8],d[9],d[10],d[11],d[12],d[13],d[14],d[15]),v=0;v<b;v+=1)r[v]=this.matrix.props[v];this.matrix.reset()}else for(this.matrix.reset(),v=0;v<b;v+=1)r[v]=this.matrix.props[v];P+=1,s-=1,i+=a}}else for(s=this._currentCopies,i=0,a=1;s;)r=(e=this.elemsData[i].it)[e.length-1].transform.mProps.v.props,e[e.length-1].transform.mProps._mdf=!1,e[e.length-1].transform.op._mdf=!1,s-=1,i+=a;return n},RepeaterModifier.prototype.addShape=function(){},extendPrototype([ShapeModifier],RoundCornersModifier),RoundCornersModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.rd=PropertyFactory.getProp(t,e.r,0,null,this),this._isAnimated=!!this.rd.effectsSequence.length},RoundCornersModifier.prototype.processPath=function(t,e){var r,i=shapePool.newElement();i.c=t.c;var a,s,n,o,h,l,p,c,f,m,u,d,y=t._length,g=0;for(r=0;r<y;r+=1)a=t.v[r],n=t.o[r],s=t.i[r],a[0]===n[0]&&a[1]===n[1]&&a[0]===s[0]&&a[1]===s[1]?0!==r&&r!==y-1||t.c?(o=0===r?t.v[y-1]:t.v[r-1],l=(h=Math.sqrt(Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)))?Math.min(h/2,e)/h:0,p=u=a[0]+(o[0]-a[0])*l,c=d=a[1]-(a[1]-o[1])*l,f=p-(p-a[0])*roundCorner,m=c-(c-a[1])*roundCorner,i.setTripleAt(p,c,f,m,u,d,g),g+=1,o=r===y-1?t.v[0]:t.v[r+1],l=(h=Math.sqrt(Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)))?Math.min(h/2,e)/h:0,p=f=a[0]+(o[0]-a[0])*l,c=m=a[1]+(o[1]-a[1])*l,u=p-(p-a[0])*roundCorner,d=c-(c-a[1])*roundCorner,i.setTripleAt(p,c,f,m,u,d,g),g+=1):(i.setTripleAt(a[0],a[1],n[0],n[1],s[0],s[1],g),g+=1):(i.setTripleAt(t.v[r][0],t.v[r][1],t.o[r][0],t.o[r][1],t.i[r][0],t.i[r][1],g),g+=1);return i},RoundCornersModifier.prototype.processShapes=function(t){var e,r,i,a,s,n,o=this.shapes.length,h=this.rd.v;if(0!==h)for(r=0;r<o;r+=1){if(n=(s=this.shapes[r]).localShapeCollection,s.shape._mdf||this._mdf||t)for(n.releaseShapes(),s.shape._mdf=!0,e=s.shape.paths.shapes,a=s.shape.paths._length,i=0;i<a;i+=1)n.addShape(this.processPath(e[i],h));s.shape.paths=s.localShapeCollection}this.dynamicProperties.length||(this._mdf=!1)},PolynomialBezier.prototype.point=function(t){return[((this.a[0]*t+this.b[0])*t+this.c[0])*t+this.d[0],((this.a[1]*t+this.b[1])*t+this.c[1])*t+this.d[1]]},PolynomialBezier.prototype.derivative=function(t){return[(3*t*this.a[0]+2*this.b[0])*t+this.c[0],(3*t*this.a[1]+2*this.b[1])*t+this.c[1]]},PolynomialBezier.prototype.tangentAngle=function(t){var e=this.derivative(t);return Math.atan2(e[1],e[0])},PolynomialBezier.prototype.normalAngle=function(t){var e=this.derivative(t);return Math.atan2(e[0],e[1])},PolynomialBezier.prototype.inflectionPoints=function(){var t=this.a[1]*this.b[0]-this.a[0]*this.b[1];if(floatZero(t))return[];var e=-.5*(this.a[1]*this.c[0]-this.a[0]*this.c[1])/t,r=e*e-1/3*(this.b[1]*this.c[0]-this.b[0]*this.c[1])/t;if(r<0)return[];var i=Math.sqrt(r);return floatZero(i)?i>0&&i<1?[e]:[]:[e-i,e+i].filter(function(t){return t>0&&t<1})},PolynomialBezier.prototype.split=function(t){if(t<=0)return[singlePoint(this.points[0]),this];if(t>=1)return[this,singlePoint(this.points[this.points.length-1])];var e=lerpPoint(this.points[0],this.points[1],t),r=lerpPoint(this.points[1],this.points[2],t),i=lerpPoint(this.points[2],this.points[3],t),a=lerpPoint(e,r,t),s=lerpPoint(r,i,t),n=lerpPoint(a,s,t);return[new PolynomialBezier(this.points[0],e,a,n,!0),new PolynomialBezier(n,s,i,this.points[3],!0)]},PolynomialBezier.prototype.bounds=function(){return{x:extrema(this,0),y:extrema(this,1)}},PolynomialBezier.prototype.boundingBox=function(){var t=this.bounds();return{left:t.x.min,right:t.x.max,top:t.y.min,bottom:t.y.max,width:t.x.max-t.x.min,height:t.y.max-t.y.min,cx:(t.x.max+t.x.min)/2,cy:(t.y.max+t.y.min)/2}},PolynomialBezier.prototype.intersections=function(t,e,r){void 0===e&&(e=2),void 0===r&&(r=7);var i=[];return intersectsImpl(intersectData(this,0,1),intersectData(t,0,1),0,e,i,r),i},PolynomialBezier.shapeSegment=function(t,e){var r=(e+1)%t.length();return new PolynomialBezier(t.v[e],t.o[e],t.i[r],t.v[r],!0)},PolynomialBezier.shapeSegmentInverted=function(t,e){var r=(e+1)%t.length();return new PolynomialBezier(t.v[r],t.i[r],t.o[e],t.v[e],!0)},extendPrototype([ShapeModifier],ZigZagModifier),ZigZagModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amplitude=PropertyFactory.getProp(t,e.s,0,null,this),this.frequency=PropertyFactory.getProp(t,e.r,0,null,this),this.pointsType=PropertyFactory.getProp(t,e.pt,0,null,this),this._isAnimated=0!==this.amplitude.effectsSequence.length||0!==this.frequency.effectsSequence.length||0!==this.pointsType.effectsSequence.length},ZigZagModifier.prototype.processPath=function(t,e,r,i){var a=t._length,s=shapePool.newElement();if(s.c=t.c,t.c||(a-=1),0===a)return s;var n=-1,o=PolynomialBezier.shapeSegment(t,0);zigZagCorner(s,t,0,e,r,i,n);for(var h=0;h<a;h+=1)n=zigZagSegment(s,o,e,r,i,-n),o=h!==a-1||t.c?PolynomialBezier.shapeSegment(t,(h+1)%a):null,zigZagCorner(s,t,h+1,e,r,i,n);return s},ZigZagModifier.prototype.processShapes=function(t){var e,r,i,a,s,n,o=this.shapes.length,h=this.amplitude.v,l=Math.max(0,Math.round(this.frequency.v)),p=this.pointsType.v;if(0!==h)for(r=0;r<o;r+=1){if(n=(s=this.shapes[r]).localShapeCollection,s.shape._mdf||this._mdf||t)for(n.releaseShapes(),s.shape._mdf=!0,e=s.shape.paths.shapes,a=s.shape.paths._length,i=0;i<a;i+=1)n.addShape(this.processPath(e[i],h,l,p));s.shape.paths=s.localShapeCollection}this.dynamicProperties.length||(this._mdf=!1)},extendPrototype([ShapeModifier],OffsetPathModifier),OffsetPathModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(t,e.a,0,null,this),this.miterLimit=PropertyFactory.getProp(t,e.ml,0,null,this),this.lineJoin=e.lj,this._isAnimated=0!==this.amount.effectsSequence.length},OffsetPathModifier.prototype.processPath=function(t,e,r,i){var a=shapePool.newElement();a.c=t.c;var s,n,o,h=t.length();t.c||(h-=1);var l=[];for(s=0;s<h;s+=1)o=PolynomialBezier.shapeSegment(t,s),l.push(offsetSegmentSplit(o,e));if(!t.c)for(s=h-1;s>=0;s-=1)o=PolynomialBezier.shapeSegmentInverted(t,s),l.push(offsetSegmentSplit(o,e));l=pruneIntersections(l);var p=null,c=null;for(s=0;s<l.length;s+=1){var f=l[s];for(c&&(p=joinLines(a,c,f[0],r,i)),c=f[f.length-1],n=0;n<f.length;n+=1)o=f[n],p&&pointEqual(o.points[0],p)?a.setXYAt(o.points[1][0],o.points[1][1],"o",a.length()-1):a.setTripleAt(o.points[0][0],o.points[0][1],o.points[1][0],o.points[1][1],o.points[0][0],o.points[0][1],a.length()),a.setTripleAt(o.points[3][0],o.points[3][1],o.points[3][0],o.points[3][1],o.points[2][0],o.points[2][1],a.length()),p=o.points[3]}return l.length&&joinLines(a,c,l[0][0],r,i),a},OffsetPathModifier.prototype.processShapes=function(t){var e,r,i,a,s,n,o=this.shapes.length,h=this.amount.v,l=this.miterLimit.v,p=this.lineJoin;if(0!==h)for(r=0;r<o;r+=1){if(n=(s=this.shapes[r]).localShapeCollection,s.shape._mdf||this._mdf||t)for(n.releaseShapes(),s.shape._mdf=!0,e=s.shape.paths.shapes,a=s.shape.paths._length,i=0;i<a;i+=1)n.addShape(this.processPath(e[i],h,p,l));s.shape.paths=s.localShapeCollection}this.dynamicProperties.length||(this._mdf=!1)};var FontManager=function(){var t={w:0,size:0,shapes:[],data:{shapes:[]}},e=[];e=e.concat([2304,2305,2306,2307,2362,2363,2364,2364,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2387,2388,2389,2390,2391,2402,2403]);var r=127988,i=["d83cdffb","d83cdffc","d83cdffd","d83cdffe","d83cdfff"];function setUpNode(t,e){var r=createTag("span");r.setAttribute("aria-hidden",!0),r.style.fontFamily=e;var i=createTag("span");i.innerText="giItT1WQy@!-/#",r.style.position="absolute",r.style.left="-10000px",r.style.top="-10000px",r.style.fontSize="300px",r.style.fontVariant="normal",r.style.fontStyle="normal",r.style.fontWeight="normal",r.style.letterSpacing="0",r.appendChild(i),document.body.appendChild(r);var a=i.offsetWidth;return i.style.fontFamily=function trimFontOptions(t){var e,r=t.split(","),i=r.length,a=[];for(e=0;e<i;e+=1)"sans-serif"!==r[e]&&"monospace"!==r[e]&&a.push(r[e]);return a.join(",")}(t)+", "+e,{node:i,w:a,parent:r}}function createHelper(t,e){var r,i=document.body&&e?"svg":"canvas",a=getFontProperties(t);if("svg"===i){var s=createNS("text");s.style.fontSize="100px",s.setAttribute("font-family",t.fFamily),s.setAttribute("font-style",a.style),s.setAttribute("font-weight",a.weight),s.textContent="1",t.fClass?(s.style.fontFamily="inherit",s.setAttribute("class",t.fClass)):s.style.fontFamily=t.fFamily,e.appendChild(s),r=s}else{var n=new OffscreenCanvas(500,500).getContext("2d");n.font=a.style+" "+a.weight+" 100px "+t.fFamily,r=n}return{measureText:function measure(t){return"svg"===i?(r.textContent=t,r.getComputedTextLength()):r.measureText(t).width}}}function getCodePoint(t){var e=0,r=t.charCodeAt(0);if(r>=55296&&r<=56319){var i=t.charCodeAt(1);i>=56320&&i<=57343&&(e=1024*(r-55296)+i-56320+65536)}return e}function isRegionalCode(t){var e=getCodePoint(t);return e>=127462&&e<=127487}var a=function Font(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this)};a.isModifier=function isModifier(t,e){var r=t.toString(16)+e.toString(16);return-1!==i.indexOf(r)},a.isZeroWidthJoiner=function isZeroWidthJoiner(t){return 8205===t},a.isFlagEmoji=function isFlagEmoji(t){return isRegionalCode(t.substr(0,2))&&isRegionalCode(t.substr(2,2))},a.isRegionalCode=isRegionalCode,a.isCombinedCharacter=function isCombinedCharacter(t){return-1!==e.indexOf(t)},a.isRegionalFlag=function isRegionalFlag(t,e){var i=getCodePoint(t.substr(e,2));if(i!==r)return!1;var a=0;for(e+=2;a<5;){if((i=getCodePoint(t.substr(e,2)))<917601||i>917626)return!1;a+=1,e+=2}return 917631===getCodePoint(t.substr(e,2))},a.isVariationSelector=function isVariationSelector(t){return 65039===t},a.BLACK_FLAG_CODE_POINT=r;var s={addChars:function addChars(t){if(t){var e;this.chars||(this.chars=[]);var r,i,a=t.length,s=this.chars.length;for(e=0;e<a;e+=1){for(r=0,i=!1;r<s;)this.chars[r].style===t[e].style&&this.chars[r].fFamily===t[e].fFamily&&this.chars[r].ch===t[e].ch&&(i=!0),r+=1;i||(this.chars.push(t[e]),s+=1)}}},addFonts:function addFonts(t,e){if(t){if(this.chars)return this.isLoaded=!0,void(this.fonts=t.list);if(!document.body)return this.isLoaded=!0,t.list.forEach(function(t){t.helper=createHelper(t),t.cache={}}),void(this.fonts=t.list);var r,i=t.list,a=i.length,s=a;for(r=0;r<a;r+=1){var n,o,h=!0;if(i[r].loaded=!1,i[r].monoCase=setUpNode(i[r].fFamily,"monospace"),i[r].sansCase=setUpNode(i[r].fFamily,"sans-serif"),i[r].fPath){if("p"===i[r].fOrigin||3===i[r].origin){if((n=document.querySelectorAll('style[f-forigin="p"][f-family="'+i[r].fFamily+'"], style[f-origin="3"][f-family="'+i[r].fFamily+'"]')).length>0&&(h=!1),h){var l=createTag("style");l.setAttribute("f-forigin",i[r].fOrigin),l.setAttribute("f-origin",i[r].origin),l.setAttribute("f-family",i[r].fFamily),l.type="text/css",l.innerText="@font-face {font-family: "+i[r].fFamily+"; font-style: normal; src: url('"+i[r].fPath+"');}",e.appendChild(l)}}else if("g"===i[r].fOrigin||1===i[r].origin){for(n=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),o=0;o<n.length;o+=1)-1!==n[o].href.indexOf(i[r].fPath)&&(h=!1);if(h){var p=createTag("link");p.setAttribute("f-forigin",i[r].fOrigin),p.setAttribute("f-origin",i[r].origin),p.type="text/css",p.rel="stylesheet",p.href=i[r].fPath,document.body.appendChild(p)}}else if("t"===i[r].fOrigin||2===i[r].origin){for(n=document.querySelectorAll('script[f-forigin="t"], script[f-origin="2"]'),o=0;o<n.length;o+=1)i[r].fPath===n[o].src&&(h=!1);if(h){var c=createTag("link");c.setAttribute("f-forigin",i[r].fOrigin),c.setAttribute("f-origin",i[r].origin),c.setAttribute("rel","stylesheet"),c.setAttribute("href",i[r].fPath),e.appendChild(c)}}}else i[r].loaded=!0,s-=1;i[r].helper=createHelper(i[r],e),i[r].cache={},this.fonts.push(i[r])}0===s?this.isLoaded=!0:setTimeout(this.checkLoadedFonts.bind(this),100)}else this.isLoaded=!0},getCharData:function getCharData(e,r,i){for(var a=0,s=this.chars.length;a<s;){if(this.chars[a].ch===e&&this.chars[a].style===r&&this.chars[a].fFamily===i)return this.chars[a];a+=1}return("string"==typeof e&&13!==e.charCodeAt(0)||!e)&&console&&console.warn&&!this._warned&&(this._warned=!0,console.warn("Missing character from exported characters list: ",e,r,i)),t},getFontByName:function getFontByName(t){for(var e=0,r=this.fonts.length;e<r;){if(this.fonts[e].fName===t)return this.fonts[e];e+=1}return this.fonts[0]},measureText:function measureText(t,e,r){var i=this.getFontByName(e),a=t;if(!i.cache[a]){var s=i.helper;if(" "===t){var n=s.measureText("|"+t+"|"),o=s.measureText("||");i.cache[a]=(n-o)/100}else i.cache[a]=s.measureText(t)/100}return i.cache[a]*r},checkLoadedFonts:function checkLoadedFonts(){var t,e,r,i=this.fonts.length,a=i;for(t=0;t<i;t+=1)this.fonts[t].loaded?a-=1:"n"===this.fonts[t].fOrigin||0===this.fonts[t].origin?this.fonts[t].loaded=!0:(e=this.fonts[t].monoCase.node,r=this.fonts[t].monoCase.w,e.offsetWidth!==r?(a-=1,this.fonts[t].loaded=!0):(e=this.fonts[t].sansCase.node,r=this.fonts[t].sansCase.w,e.offsetWidth!==r&&(a-=1,this.fonts[t].loaded=!0)),this.fonts[t].loaded&&(this.fonts[t].sansCase.parent.parentNode.removeChild(this.fonts[t].sansCase.parent),this.fonts[t].monoCase.parent.parentNode.removeChild(this.fonts[t].monoCase.parent)));0!==a&&Date.now()-this.initTime<5e3?setTimeout(this.checkLoadedFontsBinded,20):setTimeout(this.setIsLoadedBinded,10)},setIsLoaded:function setIsLoaded(){this.isLoaded=!0}};return a.prototype=s,a}();function SlotManager(t){this.animationData=t}function slotFactory(t){return new SlotManager(t)}function RenderableElement(){}SlotManager.prototype.getProp=function(t){return this.animationData.slots&&this.animationData.slots[t.sid]?Object.assign(t,this.animationData.slots[t.sid].p):t},RenderableElement.prototype={initRenderable:function initRenderable(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[]},addRenderableComponent:function addRenderableComponent(t){-1===this.renderableComponents.indexOf(t)&&this.renderableComponents.push(t)},removeRenderableComponent:function removeRenderableComponent(t){-1!==this.renderableComponents.indexOf(t)&&this.renderableComponents.splice(this.renderableComponents.indexOf(t),1)},prepareRenderableFrame:function prepareRenderableFrame(t){this.checkLayerLimits(t)},checkTransparency:function checkTransparency(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show())},checkLayerLimits:function checkLayerLimits(t){this.data.ip-this.data.st<=t&&this.data.op-this.data.st>t?!0!==this.isInRange&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):!1!==this.isInRange&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide())},renderRenderable:function renderRenderable(){var t,e=this.renderableComponents.length;for(t=0;t<e;t+=1)this.renderableComponents[t].renderFrame(this._isFirstFrame)},sourceRectAtTime:function sourceRectAtTime(){return{top:0,left:0,width:100,height:100}},getLayerSize:function getLayerSize(){return 5===this.data.ty?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}}};var getBlendMode=(blendModeEnums={0:"source-over",1:"multiply",2:"screen",3:"overlay",4:"darken",5:"lighten",6:"color-dodge",7:"color-burn",8:"hard-light",9:"soft-light",10:"difference",11:"exclusion",12:"hue",13:"saturation",14:"color",15:"luminosity"},function(t){return blendModeEnums[t]||""}),blendModeEnums;function SliderEffect(t,e,r){this.p=PropertyFactory.getProp(e,t.v,0,0,r)}function AngleEffect(t,e,r){this.p=PropertyFactory.getProp(e,t.v,0,0,r)}function ColorEffect(t,e,r){this.p=PropertyFactory.getProp(e,t.v,1,0,r)}function PointEffect(t,e,r){this.p=PropertyFactory.getProp(e,t.v,1,0,r)}function LayerIndexEffect(t,e,r){this.p=PropertyFactory.getProp(e,t.v,0,0,r)}function MaskIndexEffect(t,e,r){this.p=PropertyFactory.getProp(e,t.v,0,0,r)}function CheckboxEffect(t,e,r){this.p=PropertyFactory.getProp(e,t.v,0,0,r)}function NoValueEffect(){this.p={}}function EffectsManager(t,e){var r,i=t.ef||[];this.effectElements=[];var a,s=i.length;for(r=0;r<s;r+=1)a=new GroupEffect(i[r],e),this.effectElements.push(a)}function GroupEffect(t,e){this.init(t,e)}function BaseElement(){}function FrameElement(){}function FootageElement(t,e,r){this.initFrame(),this.initRenderable(),this.assetData=e.getAssetData(t.refId),this.footageData=e.imageLoader.getAsset(this.assetData),this.initBaseData(t,e,r)}function AudioElement(t,e,r){this.initFrame(),this.initRenderable(),this.assetData=e.getAssetData(t.refId),this.initBaseData(t,e,r),this._isPlaying=!1,this._canPlay=!1;var i=this.globalData.getAssetsPath(this.assetData);this.audio=this.globalData.audioController.createAudio(i),this._currentTime=0,this.globalData.audioController.addAudio(this),this._volumeMultiplier=1,this._volume=1,this._previousVolume=null,this.tm=t.tm?PropertyFactory.getProp(this,t.tm,0,e.frameRate,this):{_placeholder:!0},this.lv=PropertyFactory.getProp(this,t.au&&t.au.lv?t.au.lv:{k:[100]},1,.01,this)}function BaseRenderer(){}extendPrototype([DynamicPropertyContainer],GroupEffect),GroupEffect.prototype.getValue=GroupEffect.prototype.iterateDynamicProperties,GroupEffect.prototype.init=function(t,e){var r;this.data=t,this.effectElements=[],this.initDynamicPropertyContainer(e);var i,a=this.data.ef.length,s=this.data.ef;for(r=0;r<a;r+=1){switch(i=null,s[r].ty){case 0:i=new SliderEffect(s[r],e,this);break;case 1:i=new AngleEffect(s[r],e,this);break;case 2:i=new ColorEffect(s[r],e,this);break;case 3:i=new PointEffect(s[r],e,this);break;case 4:case 7:i=new CheckboxEffect(s[r],e,this);break;case 10:i=new LayerIndexEffect(s[r],e,this);break;case 11:i=new MaskIndexEffect(s[r],e,this);break;case 5:i=new EffectsManager(s[r],e,this);break;default:i=new NoValueEffect(s[r],e,this)}i&&this.effectElements.push(i)}},BaseElement.prototype={checkMasks:function checkMasks(){if(!this.data.hasMask)return!1;for(var t=0,e=this.data.masksProperties.length;t<e;){if("n"!==this.data.masksProperties[t].mode&&!1!==this.data.masksProperties[t].cl)return!0;t+=1}return!1},initExpressions:function initExpressions(){var t=getExpressionInterfaces();if(t){var e=t("layer"),r=t("effects"),i=t("shape"),a=t("text"),s=t("comp");this.layerInterface=e(this),this.data.hasMask&&this.maskManager&&this.layerInterface.registerMaskInterface(this.maskManager);var n=r.createEffectsInterface(this,this.layerInterface);this.layerInterface.registerEffectsInterface(n),0===this.data.ty||this.data.xt?this.compInterface=s(this):4===this.data.ty?(this.layerInterface.shapeInterface=i(this.shapesData,this.itemsData,this.layerInterface),this.layerInterface.content=this.layerInterface.shapeInterface):5===this.data.ty&&(this.layerInterface.textInterface=a(this),this.layerInterface.text=this.layerInterface.textInterface)}},setBlendMode:function setBlendMode(){var t=getBlendMode(this.data.bm);(this.baseElement||this.layerElement).style["mix-blend-mode"]=t},initBaseData:function initBaseData(t,e,r){this.globalData=e,this.comp=r,this.data=t,this.layerId=createElementID(),this.data.sr||(this.data.sr=1),this.effectsManager=new EffectsManager(this.data,this,this.dynamicProperties)},getType:function getType(){return this.type},sourceRectAtTime:function sourceRectAtTime(){}},FrameElement.prototype={initFrame:function initFrame(){this._isFirstFrame=!1,this.dynamicProperties=[],this._mdf=!1},prepareProperties:function prepareProperties(t,e){var r,i=this.dynamicProperties.length;for(r=0;r<i;r+=1)(e||this._isParent&&"transform"===this.dynamicProperties[r].propType)&&(this.dynamicProperties[r].getValue(),this.dynamicProperties[r]._mdf&&(this.globalData._mdf=!0,this._mdf=!0))},addDynamicProperty:function addDynamicProperty(t){-1===this.dynamicProperties.indexOf(t)&&this.dynamicProperties.push(t)}},FootageElement.prototype.prepareFrame=function(){},extendPrototype([RenderableElement,BaseElement,FrameElement],FootageElement),FootageElement.prototype.getBaseElement=function(){return null},FootageElement.prototype.renderFrame=function(){},FootageElement.prototype.destroy=function(){},FootageElement.prototype.initExpressions=function(){var t=getExpressionInterfaces();if(t){var e=t("footage");this.layerInterface=e(this)}},FootageElement.prototype.getFootageData=function(){return this.footageData},AudioElement.prototype.prepareFrame=function(t){if(this.prepareRenderableFrame(t,!0),this.prepareProperties(t,!0),this.tm._placeholder)this._currentTime=t/this.data.sr;else{var e=this.tm.v;this._currentTime=e}this._volume=this.lv.v[0];var r=this._volume*this._volumeMultiplier;this._previousVolume!==r&&(this._previousVolume=r,this.audio.volume(r))},extendPrototype([RenderableElement,BaseElement,FrameElement],AudioElement),AudioElement.prototype.renderFrame=function(){this.isInRange&&this._canPlay&&(this._isPlaying?(!this.audio.playing()||Math.abs(this._currentTime/this.globalData.frameRate-this.audio.seek())>.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0))},AudioElement.prototype.show=function(){},AudioElement.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1},AudioElement.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1},AudioElement.prototype.resume=function(){this._canPlay=!0},AudioElement.prototype.setRate=function(t){this.audio.rate(t)},AudioElement.prototype.volume=function(t){this._volumeMultiplier=t,this._previousVolume=t*this._volume,this.audio.volume(this._previousVolume)},AudioElement.prototype.getBaseElement=function(){return null},AudioElement.prototype.destroy=function(){},AudioElement.prototype.sourceRectAtTime=function(){},AudioElement.prototype.initExpressions=function(){},BaseRenderer.prototype.checkLayers=function(t){var e,r,i=this.layers.length;for(this.completeLayers=!0,e=i-1;e>=0;e-=1)this.elements[e]||(r=this.layers[e]).ip-r.st<=t-this.layers[e].st&&r.op-r.st>t-this.layers[e].st&&this.buildItem(e),this.completeLayers=!!this.elements[e]&&this.completeLayers;this.checkPendingElements()},BaseRenderer.prototype.createItem=function(t){switch(t.ty){case 2:return this.createImage(t);case 0:return this.createComp(t);case 1:return this.createSolid(t);case 3:default:return this.createNull(t);case 4:return this.createShape(t);case 5:return this.createText(t);case 6:return this.createAudio(t);case 13:return this.createCamera(t);case 15:return this.createFootage(t)}},BaseRenderer.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},BaseRenderer.prototype.createAudio=function(t){return new AudioElement(t,this.globalData,this)},BaseRenderer.prototype.createFootage=function(t){return new FootageElement(t,this.globalData,this)},BaseRenderer.prototype.buildAllItems=function(){var t,e=this.layers.length;for(t=0;t<e;t+=1)this.buildItem(t);this.checkPendingElements()},BaseRenderer.prototype.includeLayers=function(t){var e;this.completeLayers=!1;var r,i=t.length,a=this.layers.length;for(e=0;e<i;e+=1)for(r=0;r<a;){if(this.layers[r].id===t[e].id){this.layers[r]=t[e];break}r+=1}},BaseRenderer.prototype.setProjectInterface=function(t){this.globalData.projectInterface=t},BaseRenderer.prototype.initItems=function(){this.globalData.progressiveLoad||this.buildAllItems()},BaseRenderer.prototype.buildElementParenting=function(t,e,r){for(var i=this.elements,a=this.layers,s=0,n=a.length;s<n;)a[s].ind==e&&(i[s]&&!0!==i[s]?(r.push(i[s]),i[s].setAsParent(),void 0!==a[s].parent?this.buildElementParenting(t,a[s].parent,r):t.setHierarchy(r)):(this.buildItem(s),this.addPendingElement(t))),s+=1},BaseRenderer.prototype.addPendingElement=function(t){this.pendingElements.push(t)},BaseRenderer.prototype.searchExtraCompositions=function(t){var e,r=t.length;for(e=0;e<r;e+=1)if(t[e].xt){var i=this.createComp(t[e]);i.initExpressions(),this.globalData.projectInterface.registerComposition(i)}},BaseRenderer.prototype.getElementById=function(t){var e,r=this.elements.length;for(e=0;e<r;e+=1)if(this.elements[e].data.ind===t)return this.elements[e];return null},BaseRenderer.prototype.getElementByPath=function(t){var e,r=t.shift();if("number"==typeof r)e=this.elements[r];else{var i,a=this.elements.length;for(i=0;i<a;i+=1)if(this.elements[i].data.nm===r){e=this.elements[i];break}}return 0===t.length?e:e.getElementByPath(t)},BaseRenderer.prototype.setupGlobalData=function(t,e){this.globalData.fontManager=new FontManager,this.globalData.slotManager=slotFactory(t),this.globalData.fontManager.addChars(t.chars),this.globalData.fontManager.addFonts(t.fonts,e),this.globalData.getAssetData=this.animationItem.getAssetData.bind(this.animationItem),this.globalData.getAssetsPath=this.animationItem.getAssetsPath.bind(this.animationItem),this.globalData.imageLoader=this.animationItem.imagePreloader,this.globalData.audioController=this.animationItem.audioController,this.globalData.frameId=0,this.globalData.frameRate=t.fr,this.globalData.nm=t.nm,this.globalData.compSize={w:t.w,h:t.h}};var effectTypes={TRANSFORM_EFFECT:"transformEFfect"};function TransformElement(){}function MaskElement(t,e,r){this.data=t,this.element=e,this.globalData=r,this.storedData=[],this.masksProperties=this.data.masksProperties||[],this.maskElement=null;var i,a,s=this.globalData.defs,n=this.masksProperties?this.masksProperties.length:0;this.viewData=createSizedArray(n),this.solidPath="";var o,h,l,p,c,f,m=this.masksProperties,u=0,d=[],y=createElementID(),g="clipPath",v="clip-path";for(i=0;i<n;i+=1)if(("a"!==m[i].mode&&"n"!==m[i].mode||m[i].inv||100!==m[i].o.k||m[i].o.x)&&(g="mask",v="mask"),"s"!==m[i].mode&&"i"!==m[i].mode||0!==u?l=null:((l=createNS("rect")).setAttribute("fill","#ffffff"),l.setAttribute("width",this.element.comp.data.w||0),l.setAttribute("height",this.element.comp.data.h||0),d.push(l)),a=createNS("path"),"n"===m[i].mode)this.viewData[i]={op:PropertyFactory.getProp(this.element,m[i].o,0,.01,this.element),prop:ShapePropertyFactory.getShapeProp(this.element,m[i],3),elem:a,lastPath:""},s.appendChild(a);else{var b;if(u+=1,a.setAttribute("fill","s"===m[i].mode?"#000000":"#ffffff"),a.setAttribute("clip-rule","nonzero"),0!==m[i].x.k?(g="mask",v="mask",f=PropertyFactory.getProp(this.element,m[i].x,0,null,this.element),b=createElementID(),(p=createNS("filter")).setAttribute("id",b),(c=createNS("feMorphology")).setAttribute("operator","erode"),c.setAttribute("in","SourceGraphic"),c.setAttribute("radius","0"),p.appendChild(c),s.appendChild(p),a.setAttribute("stroke","s"===m[i].mode?"#000000":"#ffffff")):(c=null,f=null),this.storedData[i]={elem:a,x:f,expan:c,lastPath:"",lastOperator:"",filterId:b,lastRadius:0},"i"===m[i].mode){h=d.length;var P=createNS("g");for(o=0;o<h;o+=1)P.appendChild(d[o]);var x=createNS("mask");x.setAttribute("mask-type","alpha"),x.setAttribute("id",y+"_"+u),x.appendChild(a),s.appendChild(x),P.setAttribute("mask","url("+getLocationHref()+"#"+y+"_"+u+")"),d.length=0,d.push(P)}else d.push(a);m[i].inv&&!this.solidPath&&(this.solidPath=this.createLayerSolidPath()),this.viewData[i]={elem:a,lastPath:"",op:PropertyFactory.getProp(this.element,m[i].o,0,.01,this.element),prop:ShapePropertyFactory.getShapeProp(this.element,m[i],3),invRect:l},this.viewData[i].prop.k||this.drawPath(m[i],this.viewData[i].prop.v,this.viewData[i])}for(this.maskElement=createNS(g),n=d.length,i=0;i<n;i+=1)this.maskElement.appendChild(d[i]);u>0&&(this.maskElement.setAttribute("id",y),this.element.maskedElement.setAttribute(v,"url("+getLocationHref()+"#"+y+")"),s.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this)}TransformElement.prototype={initTransform:function initTransform(){var t=new Matrix;this.finalTransform={mProp:this.data.ks?TransformPropertyFactory.getTransformProperty(this,this.data.ks,this):{o:0},_matMdf:!1,_localMatMdf:!1,_opMdf:!1,mat:t,localMat:t,localOpacity:1},this.data.ao&&(this.finalTransform.mProp.autoOriented=!0),this.data.ty},renderTransform:function renderTransform(){if(this.finalTransform._opMdf=this.finalTransform.mProp.o._mdf||this._isFirstFrame,this.finalTransform._matMdf=this.finalTransform.mProp._mdf||this._isFirstFrame,this.hierarchy){var t,e=this.finalTransform.mat,r=0,i=this.hierarchy.length;if(!this.finalTransform._matMdf)for(;r<i;){if(this.hierarchy[r].finalTransform.mProp._mdf){this.finalTransform._matMdf=!0;break}r+=1}if(this.finalTransform._matMdf)for(t=this.finalTransform.mProp.v.props,e.cloneFromProps(t),r=0;r<i;r+=1)e.multiply(this.hierarchy[r].finalTransform.mProp.v)}this.localTransforms&&!this.finalTransform._matMdf||(this.finalTransform._localMatMdf=this.finalTransform._matMdf),this.finalTransform._opMdf&&(this.finalTransform.localOpacity=this.finalTransform.mProp.o.v)},renderLocalTransform:function renderLocalTransform(){if(this.localTransforms){var t=0,e=this.localTransforms.length;if(this.finalTransform._localMatMdf=this.finalTransform._matMdf,!this.finalTransform._localMatMdf||!this.finalTransform._opMdf)for(;t<e;)this.localTransforms[t]._mdf&&(this.finalTransform._localMatMdf=!0),this.localTransforms[t]._opMdf&&!this.finalTransform._opMdf&&(this.finalTransform.localOpacity=this.finalTransform.mProp.o.v,this.finalTransform._opMdf=!0),t+=1;if(this.finalTransform._localMatMdf){var r=this.finalTransform.localMat;for(this.localTransforms[0].matrix.clone(r),t=1;t<e;t+=1){var i=this.localTransforms[t].matrix;r.multiply(i)}r.multiply(this.finalTransform.mat)}if(this.finalTransform._opMdf){var a=this.finalTransform.localOpacity;for(t=0;t<e;t+=1)a*=.01*this.localTransforms[t].opacity;this.finalTransform.localOpacity=a}}},searchEffectTransforms:function searchEffectTransforms(){if(this.renderableEffectsManager){var t=this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);if(t.length){this.localTransforms=[],this.finalTransform.localMat=new Matrix;var e=0,r=t.length;for(e=0;e<r;e+=1)this.localTransforms.push(t[e])}}},globalToLocal:function globalToLocal(t){var e=[];e.push(this.finalTransform);for(var r,i=!0,a=this.comp;i;)a.finalTransform?(a.data.hasMask&&e.splice(0,0,a.finalTransform),a=a.comp):i=!1;var s,n=e.length;for(r=0;r<n;r+=1)s=e[r].mat.applyToPointArray(0,0,0),t=[t[0]-s[0],t[1]-s[1],0];return t},mHelper:new Matrix},MaskElement.prototype.getMaskProperty=function(t){return this.viewData[t].prop},MaskElement.prototype.renderFrame=function(t){var e,r=this.element.finalTransform.mat,i=this.masksProperties.length;for(e=0;e<i;e+=1)if((this.viewData[e].prop._mdf||t)&&this.drawPath(this.masksProperties[e],this.viewData[e].prop.v,this.viewData[e]),(this.viewData[e].op._mdf||t)&&this.viewData[e].elem.setAttribute("fill-opacity",this.viewData[e].op.v),"n"!==this.masksProperties[e].mode&&(this.viewData[e].invRect&&(this.element.finalTransform.mProp._mdf||t)&&this.viewData[e].invRect.setAttribute("transform",r.getInverseMatrix().to2dCSS()),this.storedData[e].x&&(this.storedData[e].x._mdf||t))){var a=this.storedData[e].expan;this.storedData[e].x.v<0?("erode"!==this.storedData[e].lastOperator&&(this.storedData[e].lastOperator="erode",this.storedData[e].elem.setAttribute("filter","url("+getLocationHref()+"#"+this.storedData[e].filterId+")")),a.setAttribute("radius",-this.storedData[e].x.v)):("dilate"!==this.storedData[e].lastOperator&&(this.storedData[e].lastOperator="dilate",this.storedData[e].elem.setAttribute("filter",null)),this.storedData[e].elem.setAttribute("stroke-width",2*this.storedData[e].x.v))}},MaskElement.prototype.getMaskelement=function(){return this.maskElement},MaskElement.prototype.createLayerSolidPath=function(){var t="M0,0 ";return t+=" h"+this.globalData.compSize.w,t+=" v"+this.globalData.compSize.h,t+=" h-"+this.globalData.compSize.w,t+=" v-"+this.globalData.compSize.h+" "},MaskElement.prototype.drawPath=function(t,e,r){var i,a,s=" M"+e.v[0][0]+","+e.v[0][1];for(a=e._length,i=1;i<a;i+=1)s+=" C"+e.o[i-1][0]+","+e.o[i-1][1]+" "+e.i[i][0]+","+e.i[i][1]+" "+e.v[i][0]+","+e.v[i][1];if(e.c&&a>1&&(s+=" C"+e.o[i-1][0]+","+e.o[i-1][1]+" "+e.i[0][0]+","+e.i[0][1]+" "+e.v[0][0]+","+e.v[0][1]),r.lastPath!==s){var n="";r.elem&&(e.c&&(n=t.inv?this.solidPath+s:s),r.elem.setAttribute("d",n)),r.lastPath=s}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null};var filtersFactory=function(){var t={createFilter:function createFilter(t,e){var r=createNS("filter");return r.setAttribute("id",t),!0!==e&&(r.setAttribute("filterUnits","objectBoundingBox"),r.setAttribute("x","0%"),r.setAttribute("y","0%"),r.setAttribute("width","100%"),r.setAttribute("height","100%")),r},createAlphaToLuminanceFilter:function createAlphaToLuminanceFilter(){var t=createNS("feColorMatrix");return t.setAttribute("type","matrix"),t.setAttribute("color-interpolation-filters","sRGB"),t.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),t}};return t}(),featureSupport=function(){var t={maskType:!0,svgLumaHidden:!0,offscreenCanvas:"undefined"!=typeof OffscreenCanvas};return(/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))&&(t.maskType=!1),/firefox/i.test(navigator.userAgent)&&(t.svgLumaHidden=!1),t}(),registeredEffects$1={},idPrefix="filter_result_";function SVGEffects(t){var e,r,i="SourceGraphic",a=t.data.ef?t.data.ef.length:0,s=createElementID(),n=filtersFactory.createFilter(s,!0),o=0;for(this.filters=[],e=0;e<a;e+=1){r=null;var h=t.data.ef[e].ty;registeredEffects$1[h]&&(r=new(0,registeredEffects$1[h].effect)(n,t.effectsManager.effectElements[e],t,idPrefix+o,i),i=idPrefix+o,registeredEffects$1[h].countsAsEffect&&(o+=1)),r&&this.filters.push(r)}o&&(t.globalData.defs.appendChild(n),t.layerElement.setAttribute("filter","url("+getLocationHref()+"#"+s+")")),this.filters.length&&t.addRenderableComponent(this)}function registerEffect$1(t,e,r){registeredEffects$1[t]={effect:e,countsAsEffect:r}}function SVGBaseElement(){}function HierarchyElement(){}function RenderableDOMElement(){}function IImageElement(t,e,r){this.assetData=e.getAssetData(t.refId),this.assetData&&this.assetData.sid&&(this.assetData=e.slotManager.getProp(this.assetData)),this.initElement(t,e,r),this.sourceRect={top:0,left:0,width:this.assetData.w,height:this.assetData.h}}function ProcessedElement(t,e){this.elem=t,this.pos=e}function IShapeElement(){}SVGEffects.prototype.renderFrame=function(t){var e,r=this.filters.length;for(e=0;e<r;e+=1)this.filters[e].renderFrame(t)},SVGEffects.prototype.getEffects=function(t){var e,r=this.filters.length,i=[];for(e=0;e<r;e+=1)this.filters[e].type===t&&i.push(this.filters[e]);return i},SVGBaseElement.prototype={initRendererElement:function initRendererElement(){this.layerElement=createNS("g")},createContainerElements:function createContainerElements(){this.matteElement=createNS("g"),this.transformedElement=this.layerElement,this.maskedElement=this.layerElement,this._sizeChanged=!1;var t=null;if(this.data.td){this.matteMasks={};var e=createNS("g");e.setAttribute("id",this.layerId),e.appendChild(this.layerElement),t=e,this.globalData.defs.appendChild(e)}else this.data.tt?(this.matteElement.appendChild(this.layerElement),t=this.matteElement,this.baseElement=this.matteElement):this.baseElement=this.layerElement;if(this.data.ln&&this.layerElement.setAttribute("id",this.data.ln),this.data.cl&&this.layerElement.setAttribute("class",this.data.cl),0===this.data.ty&&!this.data.hd){var r=createNS("clipPath"),i=createNS("path");i.setAttribute("d","M0,0 L"+this.data.w+",0 L"+this.data.w+","+this.data.h+" L0,"+this.data.h+"z");var a=createElementID();if(r.setAttribute("id",a),r.appendChild(i),this.globalData.defs.appendChild(r),this.checkMasks()){var s=createNS("g");s.setAttribute("clip-path","url("+getLocationHref()+"#"+a+")"),s.appendChild(this.layerElement),this.transformedElement=s,t?t.appendChild(this.transformedElement):this.baseElement=this.transformedElement}else this.layerElement.setAttribute("clip-path","url("+getLocationHref()+"#"+a+")")}0!==this.data.bm&&this.setBlendMode()},renderElement:function renderElement(){this.finalTransform._localMatMdf&&this.transformedElement.setAttribute("transform",this.finalTransform.localMat.to2dCSS()),this.finalTransform._opMdf&&this.transformedElement.setAttribute("opacity",this.finalTransform.localOpacity)},destroyBaseElement:function destroyBaseElement(){this.layerElement=null,this.matteElement=null,this.maskManager.destroy()},getBaseElement:function getBaseElement(){return this.data.hd?null:this.baseElement},createRenderableComponents:function createRenderableComponents(){this.maskManager=new MaskElement(this.data,this,this.globalData),this.renderableEffectsManager=new SVGEffects(this),this.searchEffectTransforms()},getMatte:function getMatte(t){if(this.matteMasks||(this.matteMasks={}),!this.matteMasks[t]){var e,r,i,a,s=this.layerId+"_"+t;if(1===t||3===t){var n=createNS("mask");n.setAttribute("id",s),n.setAttribute("mask-type",3===t?"luminance":"alpha"),(i=createNS("use")).setAttributeNS("http://www.w3.org/1999/xlink","href","#"+this.layerId),n.appendChild(i),this.globalData.defs.appendChild(n),featureSupport.maskType||1!==t||(n.setAttribute("mask-type","luminance"),e=createElementID(),r=filtersFactory.createFilter(e),this.globalData.defs.appendChild(r),r.appendChild(filtersFactory.createAlphaToLuminanceFilter()),(a=createNS("g")).appendChild(i),n.appendChild(a),a.setAttribute("filter","url("+getLocationHref()+"#"+e+")"))}else if(2===t){var o=createNS("mask");o.setAttribute("id",s),o.setAttribute("mask-type","alpha");var h=createNS("g");o.appendChild(h),e=createElementID(),r=filtersFactory.createFilter(e);var l=createNS("feComponentTransfer");l.setAttribute("in","SourceGraphic"),r.appendChild(l);var p=createNS("feFuncA");p.setAttribute("type","table"),p.setAttribute("tableValues","1.0 0.0"),l.appendChild(p),this.globalData.defs.appendChild(r);var c=createNS("rect");c.setAttribute("width",this.comp.data.w),c.setAttribute("height",this.comp.data.h),c.setAttribute("x","0"),c.setAttribute("y","0"),c.setAttribute("fill","#ffffff"),c.setAttribute("opacity","0"),h.setAttribute("filter","url("+getLocationHref()+"#"+e+")"),h.appendChild(c),(i=createNS("use")).setAttributeNS("http://www.w3.org/1999/xlink","href","#"+this.layerId),h.appendChild(i),featureSupport.maskType||(o.setAttribute("mask-type","luminance"),r.appendChild(filtersFactory.createAlphaToLuminanceFilter()),a=createNS("g"),h.appendChild(c),a.appendChild(this.layerElement),h.appendChild(a)),this.globalData.defs.appendChild(o)}this.matteMasks[t]=s}return this.matteMasks[t]},setMatte:function setMatte(t){this.matteElement&&this.matteElement.setAttribute("mask","url("+getLocationHref()+"#"+t+")")}},HierarchyElement.prototype={initHierarchy:function initHierarchy(){this.hierarchy=[],this._isParent=!1,this.checkParenting()},setHierarchy:function setHierarchy(t){this.hierarchy=t},setAsParent:function setAsParent(){this._isParent=!0},checkParenting:function checkParenting(){void 0!==this.data.parent&&this.comp.buildElementParenting(this,this.data.parent,[])}},extendPrototype([RenderableElement,createProxyFunction({initElement:function initElement(t,e,r){this.initFrame(),this.initBaseData(t,e,r),this.initTransform(t,e,r),this.initHierarchy(),this.initRenderable(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),this.createContent(),this.hide()},hide:function hide(){this.hidden||this.isInRange&&!this.isTransparent||((this.baseElement||this.layerElement).style.display="none",this.hidden=!0)},show:function show(){this.isInRange&&!this.isTransparent&&(this.data.hd||((this.baseElement||this.layerElement).style.display="block"),this.hidden=!1,this._isFirstFrame=!0)},renderFrame:function renderFrame(){this.data.hd||this.hidden||(this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.renderElement(),this.renderInnerContent(),this._isFirstFrame&&(this._isFirstFrame=!1))},renderInnerContent:function renderInnerContent(){},prepareFrame:function prepareFrame(t){this._mdf=!1,this.prepareRenderableFrame(t),this.prepareProperties(t,this.isInRange),this.checkTransparency()},destroy:function destroy(){this.innerElem=null,this.destroyBaseElement()}})],RenderableDOMElement),extendPrototype([BaseElement,TransformElement,SVGBaseElement,HierarchyElement,FrameElement,RenderableDOMElement],IImageElement),IImageElement.prototype.createContent=function(){var t=this.globalData.getAssetsPath(this.assetData);this.innerElem=createNS("image"),this.innerElem.setAttribute("width",this.assetData.w+"px"),this.innerElem.setAttribute("height",this.assetData.h+"px"),this.innerElem.setAttribute("preserveAspectRatio",this.assetData.pr||this.globalData.renderConfig.imagePreserveAspectRatio),this.innerElem.setAttributeNS("http://www.w3.org/1999/xlink","href",t),this.layerElement.appendChild(this.innerElem)},IImageElement.prototype.sourceRectAtTime=function(){return this.sourceRect},IShapeElement.prototype={addShapeToModifiers:function addShapeToModifiers(t){var e,r=this.shapeModifiers.length;for(e=0;e<r;e+=1)this.shapeModifiers[e].addShape(t)},isShapeInAnimatedModifiers:function isShapeInAnimatedModifiers(t){for(var e=this.shapeModifiers.length;0<e;)if(this.shapeModifiers[0].isAnimatedWithShape(t))return!0;return!1},renderModifiers:function renderModifiers(){if(this.shapeModifiers.length){var t,e=this.shapes.length;for(t=0;t<e;t+=1)this.shapes[t].sh.reset();for(t=(e=this.shapeModifiers.length)-1;t>=0&&!this.shapeModifiers[t].processShapes(this._isFirstFrame);t-=1);}},searchProcessedElement:function searchProcessedElement(t){for(var e=this.processedElements,r=0,i=e.length;r<i;){if(e[r].elem===t)return e[r].pos;r+=1}return 0},addProcessedElement:function addProcessedElement(t,e){for(var r=this.processedElements,i=r.length;i;)if(r[i-=1].elem===t)return void(r[i].pos=e);r.push(new ProcessedElement(t,e))},prepareFrame:function prepareFrame(t){this.prepareRenderableFrame(t),this.prepareProperties(t,this.isInRange)}};var lineCapEnum={1:"butt",2:"round",3:"square"},lineJoinEnum={1:"miter",2:"round",3:"bevel"};function SVGShapeData(t,e,r){this.caches=[],this.styles=[],this.transformers=t,this.lStr="",this.sh=r,this.lvl=e,this._isAnimated=!!r.k;for(var i=0,a=t.length;i<a;){if(t[i].mProps.dynamicProperties.length){this._isAnimated=!0;break}i+=1}}function SVGStyleData(t,e){this.data=t,this.type=t.ty,this.d="",this.lvl=e,this._mdf=!1,this.closed=!0===t.hd,this.pElem=createNS("path"),this.msElem=null}function DashProperty(t,e,r,i){var a;this.elem=t,this.frameId=-1,this.dataProps=createSizedArray(e.length),this.renderer=r,this.k=!1,this.dashStr="",this.dashArray=createTypedArray("float32",e.length?e.length-1:0),this.dashoffset=createTypedArray("float32",1),this.initDynamicPropertyContainer(i);var s,n=e.length||0;for(a=0;a<n;a+=1)s=PropertyFactory.getProp(t,e[a].v,0,0,this),this.k=s.k||this.k,this.dataProps[a]={n:e[a].n,p:s};this.k||this.getValue(!0),this._isAnimated=this.k}function SVGStrokeStyleData(t,e,r){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.o=PropertyFactory.getProp(t,e.o,0,.01,this),this.w=PropertyFactory.getProp(t,e.w,0,null,this),this.d=new DashProperty(t,e.d||{},"svg",this),this.c=PropertyFactory.getProp(t,e.c,1,255,this),this.style=r,this._isAnimated=!!this._isAnimated}function SVGFillStyleData(t,e,r){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.o=PropertyFactory.getProp(t,e.o,0,.01,this),this.c=PropertyFactory.getProp(t,e.c,1,255,this),this.style=r}function SVGNoStyleData(t,e,r){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.style=r}function GradientProperty(t,e,r){this.data=e,this.c=createTypedArray("uint8c",4*e.p);var i=e.k.k[0].s?e.k.k[0].s.length-4*e.p:e.k.k.length-4*e.p;this.o=createTypedArray("float32",i),this._cmdf=!1,this._omdf=!1,this._collapsable=this.checkCollapsable(),this._hasOpacity=i,this.initDynamicPropertyContainer(r),this.prop=PropertyFactory.getProp(t,e.k,1,null,this),this.k=this.prop.k,this.getValue(!0)}function SVGGradientFillStyleData(t,e,r){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.initGradientData(t,e,r)}function SVGGradientStrokeStyleData(t,e,r){this.initDynamicPropertyContainer(t),this.getValue=this.iterateDynamicProperties,this.w=PropertyFactory.getProp(t,e.w,0,null,this),this.d=new DashProperty(t,e.d||{},"svg",this),this.initGradientData(t,e,r),this._isAnimated=!!this._isAnimated}function ShapeGroupData(){this.it=[],this.prevViewData=[],this.gr=createNS("g")}function SVGTransformData(t,e,r){this.transform={mProps:t,op:e,container:r},this.elements=[],this._isAnimated=this.transform.mProps.dynamicProperties.length||this.transform.op.effectsSequence.length}SVGShapeData.prototype.setAsAnimated=function(){this._isAnimated=!0},SVGStyleData.prototype.reset=function(){this.d="",this._mdf=!1},DashProperty.prototype.getValue=function(t){if((this.elem.globalData.frameId!==this.frameId||t)&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf=this._mdf||t,this._mdf)){var e=0,r=this.dataProps.length;for("svg"===this.renderer&&(this.dashStr=""),e=0;e<r;e+=1)"o"!==this.dataProps[e].n?"svg"===this.renderer?this.dashStr+=" "+this.dataProps[e].p.v:this.dashArray[e]=this.dataProps[e].p.v:this.dashoffset[0]=this.dataProps[e].p.v}},extendPrototype([DynamicPropertyContainer],DashProperty),extendPrototype([DynamicPropertyContainer],SVGStrokeStyleData),extendPrototype([DynamicPropertyContainer],SVGFillStyleData),extendPrototype([DynamicPropertyContainer],SVGNoStyleData),GradientProperty.prototype.comparePoints=function(t,e){for(var r=0,i=this.o.length/2;r<i;){if(Math.abs(t[4*r]-t[4*e+2*r])>.01)return!1;r+=1}return!0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!=this.c.length/4)return!1;if(this.data.k.k[0].s)for(var t=0,e=this.data.k.k.length;t<e;){if(!this.comparePoints(this.data.k.k[t].s,this.data.p))return!1;t+=1}else if(!this.comparePoints(this.data.k.k,this.data.p))return!1;return!0},GradientProperty.prototype.getValue=function(t){if(this.prop.getValue(),this._mdf=!1,this._cmdf=!1,this._omdf=!1,this.prop._mdf||t){var e,r,i,a=4*this.data.p;for(e=0;e<a;e+=1)r=e%4==0?100:255,i=Math.round(this.prop.v[e]*r),this.c[e]!==i&&(this.c[e]=i,this._cmdf=!t);if(this.o.length)for(a=this.prop.v.length,e=4*this.data.p;e<a;e+=1)r=e%2==0?100:1,i=e%2==0?Math.round(100*this.prop.v[e]):this.prop.v[e],this.o[e-4*this.data.p]!==i&&(this.o[e-4*this.data.p]=i,this._omdf=!t);this._mdf=!t}},extendPrototype([DynamicPropertyContainer],GradientProperty),SVGGradientFillStyleData.prototype.initGradientData=function(t,e,r){this.o=PropertyFactory.getProp(t,e.o,0,.01,this),this.s=PropertyFactory.getProp(t,e.s,1,null,this),this.e=PropertyFactory.getProp(t,e.e,1,null,this),this.h=PropertyFactory.getProp(t,e.h||{k:0},0,.01,this),this.a=PropertyFactory.getProp(t,e.a||{k:0},0,degToRads,this),this.g=new GradientProperty(t,e.g,this),this.style=r,this.stops=[],this.setGradientData(r.pElem,e),this.setGradientOpacity(e,r),this._isAnimated=!!this._isAnimated},SVGGradientFillStyleData.prototype.setGradientData=function(t,e){var r=createElementID(),i=createNS(1===e.t?"linearGradient":"radialGradient");i.setAttribute("id",r),i.setAttribute("spreadMethod","pad"),i.setAttribute("gradientUnits","userSpaceOnUse");var a,s,n,o=[];for(n=4*e.g.p,s=0;s<n;s+=4)a=createNS("stop"),i.appendChild(a),o.push(a);t.setAttribute("gf"===e.ty?"fill":"stroke","url("+getLocationHref()+"#"+r+")"),this.gf=i,this.cst=o},SVGGradientFillStyleData.prototype.setGradientOpacity=function(t,e){if(this.g._hasOpacity&&!this.g._collapsable){var r,i,a,s=createNS("mask"),n=createNS("path");s.appendChild(n);var o=createElementID(),h=createElementID();s.setAttribute("id",h);var l=createNS(1===t.t?"linearGradient":"radialGradient");l.setAttribute("id",o),l.setAttribute("spreadMethod","pad"),l.setAttribute("gradientUnits","userSpaceOnUse"),a=t.g.k.k[0].s?t.g.k.k[0].s.length:t.g.k.k.length;var p=this.stops;for(i=4*t.g.p;i<a;i+=2)(r=createNS("stop")).setAttribute("stop-color","rgb(255,255,255)"),l.appendChild(r),p.push(r);n.setAttribute("gf"===t.ty?"fill":"stroke","url("+getLocationHref()+"#"+o+")"),"gs"===t.ty&&(n.setAttribute("stroke-linecap",lineCapEnum[t.lc||2]),n.setAttribute("stroke-linejoin",lineJoinEnum[t.lj||2]),1===t.lj&&n.setAttribute("stroke-miterlimit",t.ml)),this.of=l,this.ms=s,this.ost=p,this.maskId=h,e.msElem=n}},extendPrototype([DynamicPropertyContainer],SVGGradientFillStyleData),extendPrototype([SVGGradientFillStyleData,DynamicPropertyContainer],SVGGradientStrokeStyleData);var buildShapeString=function buildShapeString(t,e,r,i){if(0===e)return"";var a,s=t.o,n=t.i,o=t.v,h=" M"+i.applyToPointStringified(o[0][0],o[0][1]);for(a=1;a<e;a+=1)h+=" C"+i.applyToPointStringified(s[a-1][0],s[a-1][1])+" "+i.applyToPointStringified(n[a][0],n[a][1])+" "+i.applyToPointStringified(o[a][0],o[a][1]);return r&&e&&(h+=" C"+i.applyToPointStringified(s[a-1][0],s[a-1][1])+" "+i.applyToPointStringified(n[0][0],n[0][1])+" "+i.applyToPointStringified(o[0][0],o[0][1]),h+="z"),h},SVGElementsRenderer=function(){var t=new Matrix,e=new Matrix;function renderContentTransform(t,e,r){(r||e.transform.op._mdf)&&e.transform.container.setAttribute("opacity",e.transform.op.v),(r||e.transform.mProps._mdf)&&e.transform.container.setAttribute("transform",e.transform.mProps.v.to2dCSS())}function renderNoop(){}function renderPath(r,i,a){var s,n,o,h,l,p,c,f,m,u,d=i.styles.length,y=i.lvl;for(p=0;p<d;p+=1){if(h=i.sh._mdf||a,i.styles[p].lvl<y){for(f=e.reset(),m=y-i.styles[p].lvl,u=i.transformers.length-1;!h&&m>0;)h=i.transformers[u].mProps._mdf||h,m-=1,u-=1;if(h)for(m=y-i.styles[p].lvl,u=i.transformers.length-1;m>0;)f.multiply(i.transformers[u].mProps.v),m-=1,u-=1}else f=t;if(n=(c=i.sh.paths)._length,h){for(o="",s=0;s<n;s+=1)(l=c.shapes[s])&&l._length&&(o+=buildShapeString(l,l._length,l.c,f));i.caches[p]=o}else o=i.caches[p];i.styles[p].d+=!0===r.hd?"":o,i.styles[p]._mdf=h||i.styles[p]._mdf}}function renderFill(t,e,r){var i=e.style;(e.c._mdf||r)&&i.pElem.setAttribute("fill","rgb("+bmFloor(e.c.v[0])+","+bmFloor(e.c.v[1])+","+bmFloor(e.c.v[2])+")"),(e.o._mdf||r)&&i.pElem.setAttribute("fill-opacity",e.o.v)}function renderGradientStroke(t,e,r){renderGradient(t,e,r),renderStroke(0,e,r)}function renderGradient(t,e,r){var i,a,s,n,o,h=e.gf,l=e.g._hasOpacity,p=e.s.v,c=e.e.v;if(e.o._mdf||r){var f="gf"===t.ty?"fill-opacity":"stroke-opacity";e.style.pElem.setAttribute(f,e.o.v)}if(e.s._mdf||r){var m=1===t.t?"x1":"cx",u="x1"===m?"y1":"cy";h.setAttribute(m,p[0]),h.setAttribute(u,p[1]),l&&!e.g._collapsable&&(e.of.setAttribute(m,p[0]),e.of.setAttribute(u,p[1]))}if(e.g._cmdf||r){i=e.cst;var d=e.g.c;for(s=i.length,a=0;a<s;a+=1)(n=i[a]).setAttribute("offset",d[4*a]+"%"),n.setAttribute("stop-color","rgb("+d[4*a+1]+","+d[4*a+2]+","+d[4*a+3]+")")}if(l&&(e.g._omdf||r)){var y=e.g.o;for(s=(i=e.g._collapsable?e.cst:e.ost).length,a=0;a<s;a+=1)n=i[a],e.g._collapsable||n.setAttribute("offset",y[2*a]+"%"),n.setAttribute("stop-opacity",y[2*a+1])}if(1===t.t)(e.e._mdf||r)&&(h.setAttribute("x2",c[0]),h.setAttribute("y2",c[1]),l&&!e.g._collapsable&&(e.of.setAttribute("x2",c[0]),e.of.setAttribute("y2",c[1])));else if((e.s._mdf||e.e._mdf||r)&&(o=Math.sqrt(Math.pow(p[0]-c[0],2)+Math.pow(p[1]-c[1],2)),h.setAttribute("r",o),l&&!e.g._collapsable&&e.of.setAttribute("r",o)),e.s._mdf||e.e._mdf||e.h._mdf||e.a._mdf||r){o||(o=Math.sqrt(Math.pow(p[0]-c[0],2)+Math.pow(p[1]-c[1],2)));var g=Math.atan2(c[1]-p[1],c[0]-p[0]),v=e.h.v;v>=1?v=.99:v<=-1&&(v=-.99);var b=o*v,P=Math.cos(g+e.a.v)*b+p[0],x=Math.sin(g+e.a.v)*b+p[1];h.setAttribute("fx",P),h.setAttribute("fy",x),l&&!e.g._collapsable&&(e.of.setAttribute("fx",P),e.of.setAttribute("fy",x))}}function renderStroke(t,e,r){var i=e.style,a=e.d;a&&(a._mdf||r)&&a.dashStr&&(i.pElem.setAttribute("stroke-dasharray",a.dashStr),i.pElem.setAttribute("stroke-dashoffset",a.dashoffset[0])),e.c&&(e.c._mdf||r)&&i.pElem.setAttribute("stroke","rgb("+bmFloor(e.c.v[0])+","+bmFloor(e.c.v[1])+","+bmFloor(e.c.v[2])+")"),(e.o._mdf||r)&&i.pElem.setAttribute("stroke-opacity",e.o.v),(e.w._mdf||r)&&(i.pElem.setAttribute("stroke-width",e.w.v),i.msElem&&i.msElem.setAttribute("stroke-width",e.w.v))}return{createRenderFunction:function createRenderFunction(t){switch(t.ty){case"fl":return renderFill;case"gf":return renderGradient;case"gs":return renderGradientStroke;case"st":return renderStroke;case"sh":case"el":case"rc":case"sr":return renderPath;case"tr":return renderContentTransform;case"no":return renderNoop;default:return null}}}}();function SVGShapeElement(t,e,r){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(t,e,r),this.prevViewData=[]}function LetterProps(t,e,r,i,a,s){this.o=t,this.sw=e,this.sc=r,this.fc=i,this.m=a,this.p=s,this._mdf={o:!0,sw:!!e,sc:!!r,fc:!!i,m:!0,p:!0}}function TextProperty(t,e){this._frameId=initialDefaultFrame,this.pv="",this.v="",this.kf=!1,this._isFirstFrame=!0,this._mdf=!1,e.d&&e.d.sid&&(e.d=t.globalData.slotManager.getProp(e.d)),this.data=e,this.elem=t,this.comp=this.elem.comp,this.keysIndex=0,this.canResize=!1,this.minimumFontSize=1,this.effectsSequence=[],this.currentData={ascent:0,boxWidth:this.defaultBoxWidth,f:"",fStyle:"",fWeight:"",fc:"",j:"",justifyOffset:"",l:[],lh:0,lineWidths:[],ls:"",of:"",s:"",sc:"",sw:0,t:0,tr:0,sz:0,ps:null,fillColorAnim:!1,strokeColorAnim:!1,strokeWidthAnim:!1,yOffset:0,finalSize:0,finalText:[],finalLineHeight:0,__complete:!1},this.copyData(this.currentData,this.data.d.k[0].s),this.searchProperty()||this.completeTextData(this.currentData)}extendPrototype([BaseElement,TransformElement,SVGBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableDOMElement],SVGShapeElement),SVGShapeElement.prototype.initSecondaryElement=function(){},SVGShapeElement.prototype.identityMatrix=new Matrix,SVGShapeElement.prototype.buildExpressionInterface=function(){},SVGShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes()},SVGShapeElement.prototype.filterUniqueShapes=function(){var t,e,r,i,a=this.shapes.length,s=this.stylesList.length,n=[],o=!1;for(r=0;r<s;r+=1){for(i=this.stylesList[r],o=!1,n.length=0,t=0;t<a;t+=1)-1!==(e=this.shapes[t]).styles.indexOf(i)&&(n.push(e),o=e._isAnimated||o);n.length>1&&o&&this.setShapesAsAnimated(n)}},SVGShapeElement.prototype.setShapesAsAnimated=function(t){var e,r=t.length;for(e=0;e<r;e+=1)t[e].setAsAnimated()},SVGShapeElement.prototype.createStyleElement=function(t,e){var r,i=new SVGStyleData(t,e),a=i.pElem;return"st"===t.ty?r=new SVGStrokeStyleData(this,t,i):"fl"===t.ty?r=new SVGFillStyleData(this,t,i):"gf"===t.ty||"gs"===t.ty?(r=new("gf"===t.ty?SVGGradientFillStyleData:SVGGradientStrokeStyleData)(this,t,i),this.globalData.defs.appendChild(r.gf),r.maskId&&(this.globalData.defs.appendChild(r.ms),this.globalData.defs.appendChild(r.of),a.setAttribute("mask","url("+getLocationHref()+"#"+r.maskId+")"))):"no"===t.ty&&(r=new SVGNoStyleData(this,t,i)),"st"!==t.ty&&"gs"!==t.ty||(a.setAttribute("stroke-linecap",lineCapEnum[t.lc||2]),a.setAttribute("stroke-linejoin",lineJoinEnum[t.lj||2]),a.setAttribute("fill-opacity","0"),1===t.lj&&a.setAttribute("stroke-miterlimit",t.ml)),2===t.r&&a.setAttribute("fill-rule","evenodd"),t.ln&&a.setAttribute("id",t.ln),t.cl&&a.setAttribute("class",t.cl),t.bm&&(a.style["mix-blend-mode"]=getBlendMode(t.bm)),this.stylesList.push(i),this.addToAnimatedContents(t,r),r},SVGShapeElement.prototype.createGroupElement=function(t){var e=new ShapeGroupData;return t.ln&&e.gr.setAttribute("id",t.ln),t.cl&&e.gr.setAttribute("class",t.cl),t.bm&&(e.gr.style["mix-blend-mode"]=getBlendMode(t.bm)),e},SVGShapeElement.prototype.createTransformElement=function(t,e){var r=TransformPropertyFactory.getTransformProperty(this,t,this),i=new SVGTransformData(r,r.o,e);return this.addToAnimatedContents(t,i),i},SVGShapeElement.prototype.createShapeElement=function(t,e,r){var i=4;"rc"===t.ty?i=5:"el"===t.ty?i=6:"sr"===t.ty&&(i=7);var a=new SVGShapeData(e,r,ShapePropertyFactory.getShapeProp(this,t,i,this));return this.shapes.push(a),this.addShapeToModifiers(a),this.addToAnimatedContents(t,a),a},SVGShapeElement.prototype.addToAnimatedContents=function(t,e){for(var r=0,i=this.animatedContents.length;r<i;){if(this.animatedContents[r].element===e)return;r+=1}this.animatedContents.push({fn:SVGElementsRenderer.createRenderFunction(t),element:e,data:t})},SVGShapeElement.prototype.setElementStyles=function(t){var e,r=t.styles,i=this.stylesList.length;for(e=0;e<i;e+=1)-1!==r.indexOf(this.stylesList[e])||this.stylesList[e].closed||r.push(this.stylesList[e])},SVGShapeElement.prototype.reloadShapes=function(){var t;this._isFirstFrame=!0;var e=this.itemsData.length;for(t=0;t<e;t+=1)this.prevViewData[t]=this.itemsData[t];for(this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes(),e=this.dynamicProperties.length,t=0;t<e;t+=1)this.dynamicProperties[t].getValue();this.renderModifiers()},SVGShapeElement.prototype.searchShapes=function(t,e,r,i,a,s,n){var o,h,l,p,c,f,m=[].concat(s),u=t.length-1,d=[],y=[];for(o=u;o>=0;o-=1){if((f=this.searchProcessedElement(t[o]))?e[o]=r[f-1]:t[o]._render=n,"fl"===t[o].ty||"st"===t[o].ty||"gf"===t[o].ty||"gs"===t[o].ty||"no"===t[o].ty)f?e[o].style.closed=t[o].hd:e[o]=this.createStyleElement(t[o],a),t[o]._render&&e[o].style.pElem.parentNode!==i&&i.appendChild(e[o].style.pElem),d.push(e[o].style);else if("gr"===t[o].ty){if(f)for(l=e[o].it.length,h=0;h<l;h+=1)e[o].prevViewData[h]=e[o].it[h];else e[o]=this.createGroupElement(t[o]);this.searchShapes(t[o].it,e[o].it,e[o].prevViewData,e[o].gr,a+1,m,n),t[o]._render&&e[o].gr.parentNode!==i&&i.appendChild(e[o].gr)}else"tr"===t[o].ty?(f||(e[o]=this.createTransformElement(t[o],i)),p=e[o].transform,m.push(p)):"sh"===t[o].ty||"rc"===t[o].ty||"el"===t[o].ty||"sr"===t[o].ty?(f||(e[o]=this.createShapeElement(t[o],m,a)),this.setElementStyles(e[o])):"tm"===t[o].ty||"rd"===t[o].ty||"ms"===t[o].ty||"pb"===t[o].ty||"zz"===t[o].ty||"op"===t[o].ty?(f?(c=e[o]).closed=!1:((c=ShapeModifiers.getModifier(t[o].ty)).init(this,t[o]),e[o]=c,this.shapeModifiers.push(c)),y.push(c)):"rp"===t[o].ty&&(f?(c=e[o]).closed=!0:(c=ShapeModifiers.getModifier(t[o].ty),e[o]=c,c.init(this,t,o,e),this.shapeModifiers.push(c),n=!1),y.push(c));this.addProcessedElement(t[o],o+1)}for(u=d.length,o=0;o<u;o+=1)d[o].closed=!0;for(u=y.length,o=0;o<u;o+=1)y[o].closed=!0},SVGShapeElement.prototype.renderInnerContent=function(){var t;this.renderModifiers();var e=this.stylesList.length;for(t=0;t<e;t+=1)this.stylesList[t].reset();for(this.renderShape(),t=0;t<e;t+=1)(this.stylesList[t]._mdf||this._isFirstFrame)&&(this.stylesList[t].msElem&&(this.stylesList[t].msElem.setAttribute("d",this.stylesList[t].d),this.stylesList[t].d="M0 0"+this.stylesList[t].d),this.stylesList[t].pElem.setAttribute("d",this.stylesList[t].d||"M0 0"))},SVGShapeElement.prototype.renderShape=function(){var t,e,r=this.animatedContents.length;for(t=0;t<r;t+=1)e=this.animatedContents[t],(this._isFirstFrame||e.element._isAnimated)&&!0!==e.data&&e.fn(e.data,e.element,this._isFirstFrame)},SVGShapeElement.prototype.destroy=function(){this.destroyBaseElement(),this.shapesData=null,this.itemsData=null},LetterProps.prototype.update=function(t,e,r,i,a,s){this._mdf.o=!1,this._mdf.sw=!1,this._mdf.sc=!1,this._mdf.fc=!1,this._mdf.m=!1,this._mdf.p=!1;var n=!1;return this.o!==t&&(this.o=t,this._mdf.o=!0,n=!0),this.sw!==e&&(this.sw=e,this._mdf.sw=!0,n=!0),this.sc!==r&&(this.sc=r,this._mdf.sc=!0,n=!0),this.fc!==i&&(this.fc=i,this._mdf.fc=!0,n=!0),this.m!==a&&(this.m=a,this._mdf.m=!0,n=!0),!s.length||this.p[0]===s[0]&&this.p[1]===s[1]&&this.p[4]===s[4]&&this.p[5]===s[5]&&this.p[12]===s[12]&&this.p[13]===s[13]||(this.p=s,this._mdf.p=!0,n=!0),n},TextProperty.prototype.defaultBoxWidth=[0,0],TextProperty.prototype.copyData=function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t},TextProperty.prototype.setCurrentData=function(t){t.__complete||this.completeTextData(t),this.currentData=t,this.currentData.boxWidth=this.currentData.boxWidth||this.defaultBoxWidth,this._mdf=!0},TextProperty.prototype.searchProperty=function(){return this.searchKeyframes()},TextProperty.prototype.searchKeyframes=function(){return this.kf=this.data.d.k.length>1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(t){this.effectsSequence.push(t),this.elem.addDynamicProperty(this)},TextProperty.prototype.getValue=function(t){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length||t){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var e=this.currentData,r=this.keysIndex;if(this.lock)this.setCurrentData(this.currentData);else{var i;this.lock=!0,this._mdf=!1;var a=this.effectsSequence.length,s=t||this.data.d.k[this.keysIndex].s;for(i=0;i<a;i+=1)s=r!==this.keysIndex?this.effectsSequence[i](s,s.t):this.effectsSequence[i](this.currentData,s.t);e!==s&&this.setCurrentData(s),this.v=this.currentData,this.pv=this.v,this.lock=!1,this.frameId=this.elem.globalData.frameId}}},TextProperty.prototype.getKeyframeValue=function(){for(var t=this.data.d.k,e=this.elem.comp.renderedFrame,r=0,i=t.length;r<=i-1&&!(r===i-1||t[r+1].t>e);)r+=1;return this.keysIndex!==r&&(this.keysIndex=r),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(t){for(var e,r,i=[],a=0,s=t.length,n=!1,o=!1,h="";a<s;)n=o,o=!1,e=t.charCodeAt(a),h=t.charAt(a),FontManager.isCombinedCharacter(e)?n=!0:e>=55296&&e<=56319?FontManager.isRegionalFlag(t,a)?h=t.substr(a,14):(r=t.charCodeAt(a+1))>=56320&&r<=57343&&(FontManager.isModifier(e,r)?(h=t.substr(a,2),n=!0):h=FontManager.isFlagEmoji(t.substr(a,4))?t.substr(a,4):t.substr(a,2)):e>56319?(r=t.charCodeAt(a+1),FontManager.isVariationSelector(e)&&(n=!0)):FontManager.isZeroWidthJoiner(e)&&(n=!0,o=!0),n?(i[i.length-1]+=h,n=!1):i.push(h),a+=h.length;return i},TextProperty.prototype.completeTextData=function(t){t.__complete=!0;var e,r,i,a,s,n,o,h=this.elem.globalData.fontManager,l=this.data,p=[],c=0,f=l.m.g,m=0,u=0,d=0,y=[],g=0,v=0,b=h.getFontByName(t.f),P=0,x=getFontProperties(b);t.fWeight=x.weight,t.fStyle=x.style,t.finalSize=t.s,t.finalText=this.buildFinalText(t.t),r=t.finalText.length,t.finalLineHeight=t.lh;var S,E=t.tr/1e3*t.finalSize;if(t.sz)for(var _,F,T=!0,k=t.sz[0],M=t.sz[1];T;){_=0,g=0,r=(F=this.buildFinalText(t.t)).length,E=t.tr/1e3*t.finalSize;var D=-1;for(e=0;e<r;e+=1)S=F[e].charCodeAt(0),i=!1," "===F[e]?D=e:13!==S&&3!==S||(g=0,i=!0,_+=t.finalLineHeight||1.2*t.finalSize),h.chars?(o=h.getCharData(F[e],b.fStyle,b.fFamily),P=i?0:o.w*t.finalSize/100):P=h.measureText(F[e],t.f,t.finalSize),g+P>k&&" "!==F[e]?(-1===D?r+=1:e=D,_+=t.finalLineHeight||1.2*t.finalSize,F.splice(e,D===e?1:0,"\r"),D=-1,g=0):(g+=P,g+=E);_+=b.ascent*t.finalSize/100,this.canResize&&t.finalSize>this.minimumFontSize&&M<_?(t.finalSize-=1,t.finalLineHeight=t.finalSize*t.lh/t.s):(t.finalText=F,r=t.finalText.length,T=!1)}g=-E,P=0;var w,I=0;for(e=0;e<r;e+=1)if(i=!1,13===(S=(w=t.finalText[e]).charCodeAt(0))||3===S?(I=0,y.push(g),v=g>v?g:v,g=-2*E,a="",i=!0,d+=1):a=w,h.chars?(o=h.getCharData(w,b.fStyle,h.getFontByName(t.f).fFamily),P=i?0:o.w*t.finalSize/100):P=h.measureText(a,t.f,t.finalSize)," "===w?I+=P+E:(g+=P+E+I,I=0),p.push({l:P,an:P,add:m,n:i,anIndexes:[],val:a,line:d,animatorJustifyOffset:0}),2==f){if(m+=P,""===a||" "===a||e===r-1){for(""!==a&&" "!==a||(m-=P);u<=e;)p[u].an=m,p[u].ind=c,p[u].extra=P,u+=1;c+=1,m=0}}else if(3==f){if(m+=P,""===a||e===r-1){for(""===a&&(m-=P);u<=e;)p[u].an=m,p[u].ind=c,p[u].extra=P,u+=1;m=0,c+=1}}else p[c].ind=c,p[c].extra=0,c+=1;if(t.l=p,v=g>v?g:v,y.push(g),t.sz)t.boxWidth=t.sz[0],t.justifyOffset=0;else switch(t.boxWidth=v,t.j){case 1:t.justifyOffset=-t.boxWidth;break;case 2:t.justifyOffset=-t.boxWidth/2;break;default:t.justifyOffset=0}t.lineWidths=y;var L,V,R,z,O=l.a;n=O.length;var G=[];for(s=0;s<n;s+=1){for((L=O[s]).a.sc&&(t.strokeColorAnim=!0),L.a.sw&&(t.strokeWidthAnim=!0),(L.a.fc||L.a.fh||L.a.fs||L.a.fb)&&(t.fillColorAnim=!0),z=0,R=L.s.b,e=0;e<r;e+=1)(V=p[e]).anIndexes[s]=z,(1==R&&""!==V.val||2==R&&""!==V.val&&" "!==V.val||3==R&&(V.n||" "==V.val||e==r-1)||4==R&&(V.n||e==r-1))&&(1===L.s.rn&&G.push(z),z+=1);l.a[s].s.totalChars=z;var N,H=-1;if(1===L.s.rn)for(e=0;e<r;e+=1)H!=(V=p[e]).anIndexes[s]&&(H=V.anIndexes[s],N=G.splice(Math.floor(Math.random()*G.length),1)[0]),V.anIndexes[s]=N}t.yOffset=t.finalLineHeight||1.2*t.finalSize,t.ls=t.ls||0,t.ascent=b.ascent*t.finalSize/100},TextProperty.prototype.updateDocumentData=function(t,e){e=void 0===e?this.keysIndex:e;var r=this.copyData({},this.data.d.k[e].s);r=this.copyData(r,t),this.data.d.k[e].s=r,this.recalculate(e),this.setCurrentData(r),this.elem.addDynamicProperty(this)},TextProperty.prototype.recalculate=function(t){var e=this.data.d.k[t].s;e.__complete=!1,this.keysIndex=0,this._isFirstFrame=!0,this.getValue(e)},TextProperty.prototype.canResizeFont=function(t){this.canResize=t,this.recalculate(this.keysIndex),this.elem.addDynamicProperty(this)},TextProperty.prototype.setMinimumFontSize=function(t){this.minimumFontSize=Math.floor(t)||1,this.recalculate(this.keysIndex),this.elem.addDynamicProperty(this)};var TextSelectorProp=function(){var t=Math.max,e=Math.min,r=Math.floor;function TextSelectorPropFactory(t,e){this._currentTextLength=-1,this.k=!1,this.data=e,this.elem=t,this.comp=t.comp,this.finalS=0,this.finalE=0,this.initDynamicPropertyContainer(t),this.s=PropertyFactory.getProp(t,e.s||{k:0},0,0,this),this.e="e"in e?PropertyFactory.getProp(t,e.e,0,0,this):{v:100},this.o=PropertyFactory.getProp(t,e.o||{k:0},0,0,this),this.xe=PropertyFactory.getProp(t,e.xe||{k:0},0,0,this),this.ne=PropertyFactory.getProp(t,e.ne||{k:0},0,0,this),this.sm=PropertyFactory.getProp(t,e.sm||{k:100},0,0,this),this.a=PropertyFactory.getProp(t,e.a,0,.01,this),this.dynamicProperties.length||this.getValue()}return TextSelectorPropFactory.prototype={getMult:function getMult(i){this._currentTextLength!==this.elem.textProperty.currentData.l.length&&this.getValue();var a=0,s=0,n=1,o=1;this.ne.v>0?a=this.ne.v/100:s=-this.ne.v/100,this.xe.v>0?n=1-this.xe.v/100:o=1+this.xe.v/100;var h=BezierFactory.getBezierEasing(a,s,n,o).get,l=0,p=this.finalS,c=this.finalE,f=this.data.sh;if(2===f)l=h(l=c===p?i>=c?1:0:t(0,e(.5/(c-p)+(i-p)/(c-p),1)));else if(3===f)l=h(l=c===p?i>=c?0:1:1-t(0,e(.5/(c-p)+(i-p)/(c-p),1)));else if(4===f)c===p?l=0:(l=t(0,e(.5/(c-p)+(i-p)/(c-p),1)))<.5?l*=2:l=1-2*(l-.5),l=h(l);else if(5===f){if(c===p)l=0;else{var m=c-p,u=-m/2+(i=e(t(0,i+.5-p),c-p)),d=m/2;l=Math.sqrt(1-u*u/(d*d))}l=h(l)}else 6===f?(c===p?l=0:(i=e(t(0,i+.5-p),c-p),l=(1+Math.cos(Math.PI+2*Math.PI*i/(c-p)))/2),l=h(l)):(i>=r(p)&&(l=t(0,e(i-p<0?e(c,1)-(p-i):c-i,1))),l=h(l));if(100!==this.sm.v){var y=.01*this.sm.v;0===y&&(y=1e-8);var g=.5-.5*y;l<g?l=0:(l=(l-g)/y)>1&&(l=1)}return l*this.a.v},getValue:function getValue(t){this.iterateDynamicProperties(),this._mdf=t||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,t&&2===this.data.r&&(this.e.v=this._currentTextLength);var e=2===this.data.r?1:100/this.data.totalChars,r=this.o.v/e,i=this.s.v/e+r,a=this.e.v/e+r;if(i>a){var s=i;i=a,a=s}this.finalS=i,this.finalE=a}},extendPrototype([DynamicPropertyContainer],TextSelectorPropFactory),{getTextSelectorProp:function getTextSelectorProp(t,e,r){return new TextSelectorPropFactory(t,e,r)}}}();function TextAnimatorDataProperty(t,e,r){var i={propType:!1},a=PropertyFactory.getProp,s=e.a;this.a={r:s.r?a(t,s.r,0,degToRads,r):i,rx:s.rx?a(t,s.rx,0,degToRads,r):i,ry:s.ry?a(t,s.ry,0,degToRads,r):i,sk:s.sk?a(t,s.sk,0,degToRads,r):i,sa:s.sa?a(t,s.sa,0,degToRads,r):i,s:s.s?a(t,s.s,1,.01,r):i,a:s.a?a(t,s.a,1,0,r):i,o:s.o?a(t,s.o,0,.01,r):i,p:s.p?a(t,s.p,1,0,r):i,sw:s.sw?a(t,s.sw,0,0,r):i,sc:s.sc?a(t,s.sc,1,0,r):i,fc:s.fc?a(t,s.fc,1,0,r):i,fh:s.fh?a(t,s.fh,0,0,r):i,fs:s.fs?a(t,s.fs,0,.01,r):i,fb:s.fb?a(t,s.fb,0,.01,r):i,t:s.t?a(t,s.t,0,0,r):i},this.s=TextSelectorProp.getTextSelectorProp(t,e.s,r),this.s.t=e.s.t}function TextAnimatorProperty(t,e,r){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=t,this._renderType=e,this._elem=r,this._animatorsData=createSizedArray(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(r)}function ITextElement(){}TextAnimatorProperty.prototype.searchProperties=function(){var t,e,r=this._textData.a.length,i=PropertyFactory.getProp;for(t=0;t<r;t+=1)e=this._textData.a[t],this._animatorsData[t]=new TextAnimatorDataProperty(this._elem,e,this);this._textData.p&&"m"in this._textData.p?(this._pathData={a:i(this._elem,this._textData.p.a,0,0,this),f:i(this._elem,this._textData.p.f,0,0,this),l:i(this._elem,this._textData.p.l,0,0,this),r:i(this._elem,this._textData.p.r,0,0,this),p:i(this._elem,this._textData.p.p,0,0,this),m:this._elem.maskManager.getMaskProperty(this._textData.p.m)},this._hasMaskedPath=!0):this._hasMaskedPath=!1,this._moreOptions.alignment=i(this._elem,this._textData.m.a,1,0,this)},TextAnimatorProperty.prototype.getMeasures=function(t,e){if(this.lettersChangedFlag=e,this._mdf||this._isFirstFrame||e||this._hasMaskedPath&&this._pathData.m._mdf){this._isFirstFrame=!1;var r,i,a,s,n,o,h,l,p,c,f,m,u,d,y,g,v,b,P,x=this._moreOptions.alignment.v,S=this._animatorsData,E=this._textData,_=this.mHelper,F=this._renderType,T=this.renderedLetters.length,k=t.l;if(this._hasMaskedPath){if(P=this._pathData.m,!this._pathData.n||this._pathData._mdf){var M,D=P.v;for(this._pathData.r.v&&(D=D.reverse()),n={tLength:0,segments:[]},s=D._length-1,g=0,a=0;a<s;a+=1)M=bez.buildBezierData(D.v[a],D.v[a+1],[D.o[a][0]-D.v[a][0],D.o[a][1]-D.v[a][1]],[D.i[a+1][0]-D.v[a+1][0],D.i[a+1][1]-D.v[a+1][1]]),n.tLength+=M.segmentLength,n.segments.push(M),g+=M.segmentLength;a=s,P.v.c&&(M=bez.buildBezierData(D.v[a],D.v[0],[D.o[a][0]-D.v[a][0],D.o[a][1]-D.v[a][1]],[D.i[0][0]-D.v[0][0],D.i[0][1]-D.v[0][1]]),n.tLength+=M.segmentLength,n.segments.push(M),g+=M.segmentLength),this._pathData.pi=n}if(n=this._pathData.pi,o=this._pathData.f.v,f=0,c=1,l=0,p=!0,d=n.segments,o<0&&P.v.c)for(n.tLength<Math.abs(o)&&(o=-Math.abs(o)%n.tLength),c=(u=d[f=d.length-1].points).length-1;o<0;)o+=u[c].partialLength,(c-=1)<0&&(c=(u=d[f-=1].points).length-1);m=(u=d[f].points)[c-1],y=(h=u[c]).partialLength}s=k.length,r=0,i=0;var w,I,L,V,R,z=1.2*t.finalSize*.714,O=!0;L=S.length;var G,N,H,j,q,W,$,Y,X,K,J,Z,U=-1,Q=o,tt=f,et=c,rt=-1,it="",at=this.defaultPropsArray;if(2===t.j||1===t.j){var st=0,nt=0,ot=2===t.j?-.5:-1,ht=0,lt=!0;for(a=0;a<s;a+=1)if(k[a].n){for(st&&(st+=nt);ht<a;)k[ht].animatorJustifyOffset=st,ht+=1;st=0,lt=!0}else{for(I=0;I<L;I+=1)(w=S[I].a).t.propType&&(lt&&2===t.j&&(nt+=w.t.v*ot),(R=S[I].s.getMult(k[a].anIndexes[I],E.a[I].s.totalChars)).length?st+=w.t.v*R[0]*ot:st+=w.t.v*R*ot);lt=!1}for(st&&(st+=nt);ht<a;)k[ht].animatorJustifyOffset=st,ht+=1}for(a=0;a<s;a+=1){if(_.reset(),j=1,k[a].n)r=0,i+=t.yOffset,i+=O?1:0,o=Q,O=!1,this._hasMaskedPath&&(c=et,m=(u=d[f=tt].points)[c-1],y=(h=u[c]).partialLength,l=0),it="",J="",X="",Z="",at=this.defaultPropsArray;else{if(this._hasMaskedPath){if(rt!==k[a].line){switch(t.j){case 1:o+=g-t.lineWidths[k[a].line];break;case 2:o+=(g-t.lineWidths[k[a].line])/2}rt=k[a].line}U!==k[a].ind&&(k[U]&&(o+=k[U].extra),o+=k[a].an/2,U=k[a].ind),o+=x[0]*k[a].an*.005;var pt=0;for(I=0;I<L;I+=1)(w=S[I].a).p.propType&&((R=S[I].s.getMult(k[a].anIndexes[I],E.a[I].s.totalChars)).length?pt+=w.p.v[0]*R[0]:pt+=w.p.v[0]*R),w.a.propType&&((R=S[I].s.getMult(k[a].anIndexes[I],E.a[I].s.totalChars)).length?pt+=w.a.v[0]*R[0]:pt+=w.a.v[0]*R);for(p=!0,this._pathData.a.v&&(o=.5*k[0].an+(g-this._pathData.f.v-.5*k[0].an-.5*k[k.length-1].an)*U/(s-1),o+=this._pathData.f.v);p;)l+y>=o+pt||!u?(v=(o+pt-l)/h.partialLength,N=m.point[0]+(h.point[0]-m.point[0])*v,H=m.point[1]+(h.point[1]-m.point[1])*v,_.translate(-x[0]*k[a].an*.005,-x[1]*z*.01),p=!1):u&&(l+=h.partialLength,(c+=1)>=u.length&&(c=0,d[f+=1]?u=d[f].points:P.v.c?(c=0,u=d[f=0].points):(l-=h.partialLength,u=null)),u&&(m=h,y=(h=u[c]).partialLength));G=k[a].an/2-k[a].add,_.translate(-G,0,0)}else G=k[a].an/2-k[a].add,_.translate(-G,0,0),_.translate(-x[0]*k[a].an*.005,-x[1]*z*.01,0);for(I=0;I<L;I+=1)(w=S[I].a).t.propType&&(R=S[I].s.getMult(k[a].anIndexes[I],E.a[I].s.totalChars),0===r&&0===t.j||(this._hasMaskedPath?R.length?o+=w.t.v*R[0]:o+=w.t.v*R:R.length?r+=w.t.v*R[0]:r+=w.t.v*R));for(t.strokeWidthAnim&&(W=t.sw||0),t.strokeColorAnim&&(q=t.sc?[t.sc[0],t.sc[1],t.sc[2]]:[0,0,0]),t.fillColorAnim&&t.fc&&($=[t.fc[0],t.fc[1],t.fc[2]]),I=0;I<L;I+=1)(w=S[I].a).a.propType&&((R=S[I].s.getMult(k[a].anIndexes[I],E.a[I].s.totalChars)).length?_.translate(-w.a.v[0]*R[0],-w.a.v[1]*R[1],w.a.v[2]*R[2]):_.translate(-w.a.v[0]*R,-w.a.v[1]*R,w.a.v[2]*R));for(I=0;I<L;I+=1)(w=S[I].a).s.propType&&((R=S[I].s.getMult(k[a].anIndexes[I],E.a[I].s.totalChars)).length?_.scale(1+(w.s.v[0]-1)*R[0],1+(w.s.v[1]-1)*R[1],1):_.scale(1+(w.s.v[0]-1)*R,1+(w.s.v[1]-1)*R,1));for(I=0;I<L;I+=1){if(w=S[I].a,R=S[I].s.getMult(k[a].anIndexes[I],E.a[I].s.totalChars),w.sk.propType&&(R.length?_.skewFromAxis(-w.sk.v*R[0],w.sa.v*R[1]):_.skewFromAxis(-w.sk.v*R,w.sa.v*R)),w.r.propType&&(R.length?_.rotateZ(-w.r.v*R[2]):_.rotateZ(-w.r.v*R)),w.ry.propType&&(R.length?_.rotateY(w.ry.v*R[1]):_.rotateY(w.ry.v*R)),w.rx.propType&&(R.length?_.rotateX(w.rx.v*R[0]):_.rotateX(w.rx.v*R)),w.o.propType&&(R.length?j+=(w.o.v*R[0]-j)*R[0]:j+=(w.o.v*R-j)*R),t.strokeWidthAnim&&w.sw.propType&&(R.length?W+=w.sw.v*R[0]:W+=w.sw.v*R),t.strokeColorAnim&&w.sc.propType)for(Y=0;Y<3;Y+=1)R.length?q[Y]+=(w.sc.v[Y]-q[Y])*R[0]:q[Y]+=(w.sc.v[Y]-q[Y])*R;if(t.fillColorAnim&&t.fc){if(w.fc.propType)for(Y=0;Y<3;Y+=1)R.length?$[Y]+=(w.fc.v[Y]-$[Y])*R[0]:$[Y]+=(w.fc.v[Y]-$[Y])*R;w.fh.propType&&($=R.length?addHueToRGB($,w.fh.v*R[0]):addHueToRGB($,w.fh.v*R)),w.fs.propType&&($=R.length?addSaturationToRGB($,w.fs.v*R[0]):addSaturationToRGB($,w.fs.v*R)),w.fb.propType&&($=R.length?addBrightnessToRGB($,w.fb.v*R[0]):addBrightnessToRGB($,w.fb.v*R))}}for(I=0;I<L;I+=1)(w=S[I].a).p.propType&&(R=S[I].s.getMult(k[a].anIndexes[I],E.a[I].s.totalChars),this._hasMaskedPath?R.length?_.translate(0,w.p.v[1]*R[0],-w.p.v[2]*R[1]):_.translate(0,w.p.v[1]*R,-w.p.v[2]*R):R.length?_.translate(w.p.v[0]*R[0],w.p.v[1]*R[1],-w.p.v[2]*R[2]):_.translate(w.p.v[0]*R,w.p.v[1]*R,-w.p.v[2]*R));if(t.strokeWidthAnim&&(X=W<0?0:W),t.strokeColorAnim&&(K="rgb("+Math.round(255*q[0])+","+Math.round(255*q[1])+","+Math.round(255*q[2])+")"),t.fillColorAnim&&t.fc&&(J="rgb("+Math.round(255*$[0])+","+Math.round(255*$[1])+","+Math.round(255*$[2])+")"),this._hasMaskedPath){if(_.translate(0,-t.ls),_.translate(0,x[1]*z*.01+i,0),this._pathData.p.v){b=(h.point[1]-m.point[1])/(h.point[0]-m.point[0]);var ct=180*Math.atan(b)/Math.PI;h.point[0]<m.point[0]&&(ct+=180),_.rotate(-ct*Math.PI/180)}_.translate(N,H,0),o-=x[0]*k[a].an*.005,k[a+1]&&U!==k[a+1].ind&&(o+=k[a].an/2,o+=.001*t.tr*t.finalSize)}else{switch(_.translate(r,i,0),t.ps&&_.translate(t.ps[0],t.ps[1]+t.ascent,0),t.j){case 1:_.translate(k[a].animatorJustifyOffset+t.justifyOffset+(t.boxWidth-t.lineWidths[k[a].line]),0,0);break;case 2:_.translate(k[a].animatorJustifyOffset+t.justifyOffset+(t.boxWidth-t.lineWidths[k[a].line])/2,0,0)}_.translate(0,-t.ls),_.translate(G,0,0),_.translate(x[0]*k[a].an*.005,x[1]*z*.01,0),r+=k[a].l+.001*t.tr*t.finalSize}"html"===F?it=_.toCSS():"svg"===F?it=_.to2dCSS():at=[_.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]],Z=j}T<=a?(V=new LetterProps(Z,X,K,J,it,at),this.renderedLetters.push(V),T+=1,this.lettersChangedFlag=!0):(V=this.renderedLetters[a],this.lettersChangedFlag=V.update(Z,X,K,J,it,at)||this.lettersChangedFlag)}}},TextAnimatorProperty.prototype.getValue=function(){this._elem.globalData.frameId!==this._frameId&&(this._frameId=this._elem.globalData.frameId,this.iterateDynamicProperties())},TextAnimatorProperty.prototype.mHelper=new Matrix,TextAnimatorProperty.prototype.defaultPropsArray=[],extendPrototype([DynamicPropertyContainer],TextAnimatorProperty),ITextElement.prototype.initElement=function(t,e,r){this.lettersChangedFlag=!0,this.initFrame(),this.initBaseData(t,e,r),this.textProperty=new TextProperty(this,t.t,this.dynamicProperties),this.textAnimator=new TextAnimatorProperty(t.t,this.renderType,this),this.initTransform(t,e,r),this.initHierarchy(),this.initRenderable(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),this.createContent(),this.hide(),this.textAnimator.searchProperties(this.dynamicProperties)},ITextElement.prototype.prepareFrame=function(t){this._mdf=!1,this.prepareRenderableFrame(t),this.prepareProperties(t,this.isInRange)},ITextElement.prototype.createPathShape=function(t,e){var r,i,a=e.length,s="";for(r=0;r<a;r+=1)"sh"===e[r].ty&&(i=e[r].ks.k,s+=buildShapeString(i,i.i.length,!0,t));return s},ITextElement.prototype.updateDocumentData=function(t,e){this.textProperty.updateDocumentData(t,e)},ITextElement.prototype.canResizeFont=function(t){this.textProperty.canResizeFont(t)},ITextElement.prototype.setMinimumFontSize=function(t){this.textProperty.setMinimumFontSize(t)},ITextElement.prototype.applyTextPropertiesToMatrix=function(t,e,r,i,a){switch(t.ps&&e.translate(t.ps[0],t.ps[1]+t.ascent,0),e.translate(0,-t.ls,0),t.j){case 1:e.translate(t.justifyOffset+(t.boxWidth-t.lineWidths[r]),0,0);break;case 2:e.translate(t.justifyOffset+(t.boxWidth-t.lineWidths[r])/2,0,0)}e.translate(i,a,0)},ITextElement.prototype.buildColor=function(t){return"rgb("+Math.round(255*t[0])+","+Math.round(255*t[1])+","+Math.round(255*t[2])+")"},ITextElement.prototype.emptyProp=new LetterProps,ITextElement.prototype.destroy=function(){},ITextElement.prototype.validateText=function(){(this.textProperty._mdf||this.textProperty._isFirstFrame)&&(this.buildNewText(),this.textProperty._isFirstFrame=!1,this.textProperty._mdf=!1)};var emptyShapeData={shapes:[]};function SVGTextLottieElement(t,e,r){this.textSpans=[],this.renderType="svg",this.initElement(t,e,r)}function ISolidElement(t,e,r){this.initElement(t,e,r)}function NullElement(t,e,r){this.initFrame(),this.initBaseData(t,e,r),this.initFrame(),this.initTransform(t,e,r),this.initHierarchy()}function SVGRendererBase(){}function ICompElement(){}function SVGCompElement(t,e,r){this.layers=t.layers,this.supports3d=!0,this.completeLayers=!1,this.pendingElements=[],this.elements=this.layers?createSizedArray(this.layers.length):[],this.initElement(t,e,r),this.tm=t.tm?PropertyFactory.getProp(this,t.tm,0,e.frameRate,this):{_placeholder:!0}}function SVGRenderer(t,e){this.animationItem=t,this.layers=null,this.renderedFrame=-1,this.svgElement=createNS("svg");var r="";if(e&&e.title){var i=createNS("title"),a=createElementID();i.setAttribute("id",a),i.textContent=e.title,this.svgElement.appendChild(i),r+=a}if(e&&e.description){var s=createNS("desc"),n=createElementID();s.setAttribute("id",n),s.textContent=e.description,this.svgElement.appendChild(s),r+=" "+n}r&&this.svgElement.setAttribute("aria-labelledby",r);var o=createNS("defs");this.svgElement.appendChild(o);var h=createNS("g");this.svgElement.appendChild(h),this.layerElement=h,this.renderConfig={preserveAspectRatio:e&&e.preserveAspectRatio||"xMidYMid meet",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||"xMidYMid slice",contentVisibility:e&&e.contentVisibility||"visible",progressiveLoad:e&&e.progressiveLoad||!1,hideOnTransparent:!(e&&!1===e.hideOnTransparent),viewBoxOnly:e&&e.viewBoxOnly||!1,viewBoxSize:e&&e.viewBoxSize||!1,className:e&&e.className||"",id:e&&e.id||"",focusable:e&&e.focusable,filterSize:{width:e&&e.filterSize&&e.filterSize.width||"100%",height:e&&e.filterSize&&e.filterSize.height||"100%",x:e&&e.filterSize&&e.filterSize.x||"0%",y:e&&e.filterSize&&e.filterSize.y||"0%"},width:e&&e.width,height:e&&e.height,runExpressions:!e||void 0===e.runExpressions||e.runExpressions},this.globalData={_mdf:!1,frameNum:-1,defs:o,renderConfig:this.renderConfig},this.elements=[],this.pendingElements=[],this.destroyed=!1,this.rendererType="svg"}function ShapeTransformManager(){this.sequences={},this.sequenceList=[],this.transform_key_count=0}extendPrototype([BaseElement,TransformElement,SVGBaseElement,HierarchyElement,FrameElement,RenderableDOMElement,ITextElement],SVGTextLottieElement),SVGTextLottieElement.prototype.createContent=function(){this.data.singleShape&&!this.globalData.fontManager.chars&&(this.textContainer=createNS("text"))},SVGTextLottieElement.prototype.buildTextContents=function(t){for(var e=0,r=t.length,i=[],a="";e<r;)t[e]===String.fromCharCode(13)||t[e]===String.fromCharCode(3)?(i.push(a),a=""):a+=t[e],e+=1;return i.push(a),i},SVGTextLottieElement.prototype.buildShapeData=function(t,e){if(t.shapes&&t.shapes.length){var r=t.shapes[0];if(r.it){var i=r.it[r.it.length-1];i.s&&(i.s.k[0]=e,i.s.k[1]=e)}}return t},SVGTextLottieElement.prototype.buildNewText=function(){var t,e;this.addDynamicProperty(this);var r=this.textProperty.currentData;this.renderedLetters=createSizedArray(r?r.l.length:0),r.fc?this.layerElement.setAttribute("fill",this.buildColor(r.fc)):this.layerElement.setAttribute("fill","rgba(0,0,0,0)"),r.sc&&(this.layerElement.setAttribute("stroke",this.buildColor(r.sc)),this.layerElement.setAttribute("stroke-width",r.sw)),this.layerElement.setAttribute("font-size",r.finalSize);var i=this.globalData.fontManager.getFontByName(r.f);if(i.fClass)this.layerElement.setAttribute("class",i.fClass);else{this.layerElement.setAttribute("font-family",i.fFamily);var a=r.fWeight,s=r.fStyle;this.layerElement.setAttribute("font-style",s),this.layerElement.setAttribute("font-weight",a)}this.layerElement.setAttribute("aria-label",r.t);var n,o=r.l||[],h=!!this.globalData.fontManager.chars;e=o.length;var l=this.mHelper,p=this.data.singleShape,c=0,f=0,m=!0,u=.001*r.tr*r.finalSize;if(!p||h||r.sz){var d,y=this.textSpans.length;for(t=0;t<e;t+=1){if(this.textSpans[t]||(this.textSpans[t]={span:null,childSpan:null,glyph:null}),!h||!p||0===t){if(n=y>t?this.textSpans[t].span:createNS(h?"g":"text"),y<=t){if(n.setAttribute("stroke-linecap","butt"),n.setAttribute("stroke-linejoin","round"),n.setAttribute("stroke-miterlimit","4"),this.textSpans[t].span=n,h){var g=createNS("g");n.appendChild(g),this.textSpans[t].childSpan=g}this.textSpans[t].span=n,this.layerElement.appendChild(n)}n.style.display="inherit"}if(l.reset(),p&&(o[t].n&&(c=-u,f+=r.yOffset,f+=m?1:0,m=!1),this.applyTextPropertiesToMatrix(r,l,o[t].line,c,f),c+=o[t].l||0,c+=u),h){var v;if(1===(d=this.globalData.fontManager.getCharData(r.finalText[t],i.fStyle,this.globalData.fontManager.getFontByName(r.f).fFamily)).t)v=new SVGCompElement(d.data,this.globalData,this);else{var b=emptyShapeData;d.data&&d.data.shapes&&(b=this.buildShapeData(d.data,r.finalSize)),v=new SVGShapeElement(b,this.globalData,this)}if(this.textSpans[t].glyph){var P=this.textSpans[t].glyph;this.textSpans[t].childSpan.removeChild(P.layerElement),P.destroy()}this.textSpans[t].glyph=v,v._debug=!0,v.prepareFrame(0),v.renderFrame(),this.textSpans[t].childSpan.appendChild(v.layerElement),1===d.t&&this.textSpans[t].childSpan.setAttribute("transform","scale("+r.finalSize/100+","+r.finalSize/100+")")}else p&&n.setAttribute("transform","translate("+l.props[12]+","+l.props[13]+")"),n.textContent=o[t].val,n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve")}p&&n&&n.setAttribute("d","")}else{var x=this.textContainer,S="start";switch(r.j){case 1:S="end";break;case 2:S="middle";break;default:S="start"}x.setAttribute("text-anchor",S),x.setAttribute("letter-spacing",u);var E=this.buildTextContents(r.finalText);for(e=E.length,f=r.ps?r.ps[1]+r.ascent:0,t=0;t<e;t+=1)(n=this.textSpans[t].span||createNS("tspan")).textContent=E[t],n.setAttribute("x",0),n.setAttribute("y",f),n.style.display="inherit",x.appendChild(n),this.textSpans[t]||(this.textSpans[t]={span:null,glyph:null}),this.textSpans[t].span=n,f+=r.finalLineHeight;this.layerElement.appendChild(x)}for(;t<this.textSpans.length;)this.textSpans[t].span.style.display="none",t+=1;this._sizeChanged=!0},SVGTextLottieElement.prototype.sourceRectAtTime=function(){if(this.prepareFrame(this.comp.renderedFrame-this.data.st),this.renderInnerContent(),this._sizeChanged){this._sizeChanged=!1;var t=this.layerElement.getBBox();this.bbox={top:t.y,left:t.x,width:t.width,height:t.height}}return this.bbox},SVGTextLottieElement.prototype.getValue=function(){var t,e,r=this.textSpans.length;for(this.renderedFrame=this.comp.renderedFrame,t=0;t<r;t+=1)(e=this.textSpans[t].glyph)&&(e.prepareFrame(this.comp.renderedFrame-this.data.st),e._mdf&&(this._mdf=!0))},SVGTextLottieElement.prototype.renderInnerContent=function(){if(this.validateText(),(!this.data.singleShape||this._mdf)&&(this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag),this.lettersChangedFlag||this.textAnimator.lettersChangedFlag)){var t,e;this._sizeChanged=!0;var r,i,a,s=this.textAnimator.renderedLetters,n=this.textProperty.currentData.l;for(e=n.length,t=0;t<e;t+=1)n[t].n||(r=s[t],i=this.textSpans[t].span,(a=this.textSpans[t].glyph)&&a.renderFrame(),r._mdf.m&&i.setAttribute("transform",r.m),r._mdf.o&&i.setAttribute("opacity",r.o),r._mdf.sw&&i.setAttribute("stroke-width",r.sw),r._mdf.sc&&i.setAttribute("stroke",r.sc),r._mdf.fc&&i.setAttribute("fill",r.fc))}},extendPrototype([IImageElement],ISolidElement),ISolidElement.prototype.createContent=function(){var t=createNS("rect");t.setAttribute("width",this.data.sw),t.setAttribute("height",this.data.sh),t.setAttribute("fill",this.data.sc),this.layerElement.appendChild(t)},NullElement.prototype.prepareFrame=function(t){this.prepareProperties(t,!0)},NullElement.prototype.renderFrame=function(){},NullElement.prototype.getBaseElement=function(){return null},NullElement.prototype.destroy=function(){},NullElement.prototype.sourceRectAtTime=function(){},NullElement.prototype.hide=function(){},extendPrototype([BaseElement,TransformElement,HierarchyElement,FrameElement],NullElement),extendPrototype([BaseRenderer],SVGRendererBase),SVGRendererBase.prototype.createNull=function(t){return new NullElement(t,this.globalData,this)},SVGRendererBase.prototype.createShape=function(t){return new SVGShapeElement(t,this.globalData,this)},SVGRendererBase.prototype.createText=function(t){return new SVGTextLottieElement(t,this.globalData,this)},SVGRendererBase.prototype.createImage=function(t){return new IImageElement(t,this.globalData,this)},SVGRendererBase.prototype.createSolid=function(t){return new ISolidElement(t,this.globalData,this)},SVGRendererBase.prototype.configAnimation=function(t){this.svgElement.setAttribute("xmlns","http://www.w3.org/2000/svg"),this.svgElement.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),this.renderConfig.viewBoxSize?this.svgElement.setAttribute("viewBox",this.renderConfig.viewBoxSize):this.svgElement.setAttribute("viewBox","0 0 "+t.w+" "+t.h),this.renderConfig.viewBoxOnly||(this.svgElement.setAttribute("width",t.w),this.svgElement.setAttribute("height",t.h),this.svgElement.style.width="100%",this.svgElement.style.height="100%",this.svgElement.style.transform="translate3d(0,0,0)",this.svgElement.style.contentVisibility=this.renderConfig.contentVisibility),this.renderConfig.width&&this.svgElement.setAttribute("width",this.renderConfig.width),this.renderConfig.height&&this.svgElement.setAttribute("height",this.renderConfig.height),this.renderConfig.className&&this.svgElement.setAttribute("class",this.renderConfig.className),this.renderConfig.id&&this.svgElement.setAttribute("id",this.renderConfig.id),void 0!==this.renderConfig.focusable&&this.svgElement.setAttribute("focusable",this.renderConfig.focusable),this.svgElement.setAttribute("preserveAspectRatio",this.renderConfig.preserveAspectRatio),this.animationItem.wrapper.appendChild(this.svgElement);var e=this.globalData.defs;this.setupGlobalData(t,e),this.globalData.progressiveLoad=this.renderConfig.progressiveLoad,this.data=t;var r=createNS("clipPath"),i=createNS("rect");i.setAttribute("width",t.w),i.setAttribute("height",t.h),i.setAttribute("x",0),i.setAttribute("y",0);var a=createElementID();r.setAttribute("id",a),r.appendChild(i),this.layerElement.setAttribute("clip-path","url("+getLocationHref()+"#"+a+")"),e.appendChild(r),this.layers=t.layers,this.elements=createSizedArray(t.layers.length)},SVGRendererBase.prototype.destroy=function(){var t;this.animationItem.wrapper&&(this.animationItem.wrapper.innerText=""),this.layerElement=null,this.globalData.defs=null;var e=this.layers?this.layers.length:0;for(t=0;t<e;t+=1)this.elements[t]&&this.elements[t].destroy&&this.elements[t].destroy();this.elements.length=0,this.destroyed=!0,this.animationItem=null},SVGRendererBase.prototype.updateContainerSize=function(){},SVGRendererBase.prototype.findIndexByInd=function(t){var e=0,r=this.layers.length;for(e=0;e<r;e+=1)if(this.layers[e].ind===t)return e;return-1},SVGRendererBase.prototype.buildItem=function(t){var e=this.elements;if(!e[t]&&99!==this.layers[t].ty){e[t]=!0;var r=this.createItem(this.layers[t]);if(e[t]=r,getExpressionsPlugin()&&(0===this.layers[t].ty&&this.globalData.projectInterface.registerComposition(r),r.initExpressions()),this.appendElementInPos(r,t),this.layers[t].tt){var i="tp"in this.layers[t]?this.findIndexByInd(this.layers[t].tp):t-1;if(-1===i)return;if(this.elements[i]&&!0!==this.elements[i]){var a=e[i].getMatte(this.layers[t].tt);r.setMatte(a)}else this.buildItem(i),this.addPendingElement(r)}}},SVGRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var t=this.pendingElements.pop();if(t.checkParenting(),t.data.tt)for(var e=0,r=this.elements.length;e<r;){if(this.elements[e]===t){var i="tp"in t.data?this.findIndexByInd(t.data.tp):e-1,a=this.elements[i].getMatte(this.layers[e].tt);t.setMatte(a);break}e+=1}}},SVGRendererBase.prototype.renderFrame=function(t){if(this.renderedFrame!==t&&!this.destroyed){var e;null===t?t=this.renderedFrame:this.renderedFrame=t,this.globalData.frameNum=t,this.globalData.frameId+=1,this.globalData.projectInterface.currentFrame=t,this.globalData._mdf=!1;var r=this.layers.length;for(this.completeLayers||this.checkLayers(t),e=r-1;e>=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].prepareFrame(t-this.layers[e].st);if(this.globalData._mdf)for(e=0;e<r;e+=1)(this.completeLayers||this.elements[e])&&this.elements[e].renderFrame()}},SVGRendererBase.prototype.appendElementInPos=function(t,e){var r=t.getBaseElement();if(r){for(var i,a=0;a<e;)this.elements[a]&&!0!==this.elements[a]&&this.elements[a].getBaseElement()&&(i=this.elements[a].getBaseElement()),a+=1;i?this.layerElement.insertBefore(r,i):this.layerElement.appendChild(r)}},SVGRendererBase.prototype.hide=function(){this.layerElement.style.display="none"},SVGRendererBase.prototype.show=function(){this.layerElement.style.display="block"},extendPrototype([BaseElement,TransformElement,HierarchyElement,FrameElement,RenderableDOMElement],ICompElement),ICompElement.prototype.initElement=function(t,e,r){this.initFrame(),this.initBaseData(t,e,r),this.initTransform(t,e,r),this.initRenderable(),this.initHierarchy(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),!this.data.xt&&e.progressiveLoad||this.buildAllItems(),this.hide()},ICompElement.prototype.prepareFrame=function(t){if(this._mdf=!1,this.prepareRenderableFrame(t),this.prepareProperties(t,this.isInRange),this.isInRange||this.data.xt){if(this.tm._placeholder)this.renderedFrame=t/this.data.sr;else{var e=this.tm.v;e===this.data.op&&(e=this.data.op-1),this.renderedFrame=e}var r,i=this.elements.length;for(this.completeLayers||this.checkLayers(this.renderedFrame),r=i-1;r>=0;r-=1)(this.completeLayers||this.elements[r])&&(this.elements[r].prepareFrame(this.renderedFrame-this.layers[r].st),this.elements[r]._mdf&&(this._mdf=!0))}},ICompElement.prototype.renderInnerContent=function(){var t,e=this.layers.length;for(t=0;t<e;t+=1)(this.completeLayers||this.elements[t])&&this.elements[t].renderFrame()},ICompElement.prototype.setElements=function(t){this.elements=t},ICompElement.prototype.getElements=function(){return this.elements},ICompElement.prototype.destroyElements=function(){var t,e=this.layers.length;for(t=0;t<e;t+=1)this.elements[t]&&this.elements[t].destroy()},ICompElement.prototype.destroy=function(){this.destroyElements(),this.destroyBaseElement()},extendPrototype([SVGRendererBase,ICompElement,SVGBaseElement],SVGCompElement),SVGCompElement.prototype.createComp=function(t){return new SVGCompElement(t,this.globalData,this)},extendPrototype([SVGRendererBase],SVGRenderer),SVGRenderer.prototype.createComp=function(t){return new SVGCompElement(t,this.globalData,this)},ShapeTransformManager.prototype={addTransformSequence:function addTransformSequence(t){var e,r=t.length,i="_";for(e=0;e<r;e+=1)i+=t[e].transform.key+"_";var a=this.sequences[i];return a||(a={transforms:[].concat(t),finalTransform:new Matrix,_mdf:!1},this.sequences[i]=a,this.sequenceList.push(a)),a},processSequence:function processSequence(t,e){for(var r=0,i=t.transforms.length,a=e;r<i&&!e;){if(t.transforms[r].transform.mProps._mdf){a=!0;break}r+=1}if(a)for(t.finalTransform.reset(),r=i-1;r>=0;r-=1)t.finalTransform.multiply(t.transforms[r].transform.mProps.v);t._mdf=a},processSequences:function processSequences(t){var e,r=this.sequenceList.length;for(e=0;e<r;e+=1)this.processSequence(this.sequenceList[e],t)},getNewKey:function getNewKey(){return this.transform_key_count+=1,"_"+this.transform_key_count}};var lumaLoader=function lumaLoader(){var t="__lottie_element_luma_buffer",e=null,r=null,i=null;function loadLuma(){e||(i=function createLumaSvgFilter(){var e=createNS("svg"),r=createNS("filter"),i=createNS("feColorMatrix");return r.setAttribute("id",t),i.setAttribute("type","matrix"),i.setAttribute("color-interpolation-filters","sRGB"),i.setAttribute("values","0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0"),r.appendChild(i),e.appendChild(r),e.setAttribute("id",t+"_svg"),featureSupport.svgLumaHidden&&(e.style.display="none"),e}(),document.body.appendChild(i),e=createTag("canvas"),(r=e.getContext("2d")).filter="url(#"+t+")",r.fillStyle="rgba(0,0,0,0)",r.fillRect(0,0,1,1))}return{load:loadLuma,get:function getLuma(i){return e||loadLuma(),e.width=i.width,e.height=i.height,r.filter="url(#"+t+")",e}}};function createCanvas(t,e){if(featureSupport.offscreenCanvas)return new OffscreenCanvas(t,e);var r=createTag("canvas");return r.width=t,r.height=e,r}var assetLoader={loadLumaCanvas:lumaLoader.load,getLumaCanvas:lumaLoader.get,createCanvas:createCanvas},registeredEffects={};function CVEffects(t){var e,r,i=t.data.ef?t.data.ef.length:0;for(this.filters=[],e=0;e<i;e+=1){r=null;var a=t.data.ef[e].ty;registeredEffects[a]&&(r=new(0,registeredEffects[a].effect)(t.effectsManager.effectElements[e],t)),r&&this.filters.push(r)}this.filters.length&&t.addRenderableComponent(this)}function registerEffect(t,e){registeredEffects[t]={effect:e}}function CVMaskElement(t,e){var r;this.data=t,this.element=e,this.masksProperties=this.data.masksProperties||[],this.viewData=createSizedArray(this.masksProperties.length);var i=this.masksProperties.length,a=!1;for(r=0;r<i;r+=1)"n"!==this.masksProperties[r].mode&&(a=!0),this.viewData[r]=ShapePropertyFactory.getShapeProp(this.element,this.masksProperties[r],3);this.hasMasks=a,a&&this.element.addRenderableComponent(this)}function CVBaseElement(){}CVEffects.prototype.renderFrame=function(t){var e,r=this.filters.length;for(e=0;e<r;e+=1)this.filters[e].renderFrame(t)},CVEffects.prototype.getEffects=function(t){var e,r=this.filters.length,i=[];for(e=0;e<r;e+=1)this.filters[e].type===t&&i.push(this.filters[e]);return i},CVMaskElement.prototype.renderFrame=function(){if(this.hasMasks){var t,e,r,i,a=this.element.finalTransform.mat,s=this.element.canvasContext,n=this.masksProperties.length;for(s.beginPath(),t=0;t<n;t+=1)if("n"!==this.masksProperties[t].mode){var o;this.masksProperties[t].inv&&(s.moveTo(0,0),s.lineTo(this.element.globalData.compSize.w,0),s.lineTo(this.element.globalData.compSize.w,this.element.globalData.compSize.h),s.lineTo(0,this.element.globalData.compSize.h),s.lineTo(0,0)),i=this.viewData[t].v,e=a.applyToPointArray(i.v[0][0],i.v[0][1],0),s.moveTo(e[0],e[1]);var h=i._length;for(o=1;o<h;o+=1)r=a.applyToTriplePoints(i.o[o-1],i.i[o],i.v[o]),s.bezierCurveTo(r[0],r[1],r[2],r[3],r[4],r[5]);r=a.applyToTriplePoints(i.o[o-1],i.i[0],i.v[0]),s.bezierCurveTo(r[0],r[1],r[2],r[3],r[4],r[5])}this.element.globalData.renderer.save(!0),s.clip()}},CVMaskElement.prototype.getMaskProperty=MaskElement.prototype.getMaskProperty,CVMaskElement.prototype.destroy=function(){this.element=null};var operationsMap={1:"source-in",2:"source-out",3:"source-in",4:"source-out"};function CVShapeData(t,e,r,i){this.styledShapes=[],this.tr=[0,0,0,0,0,0];var a,s=4;"rc"===e.ty?s=5:"el"===e.ty?s=6:"sr"===e.ty&&(s=7),this.sh=ShapePropertyFactory.getShapeProp(t,e,s,t);var n,o=r.length;for(a=0;a<o;a+=1)r[a].closed||(n={transforms:i.addTransformSequence(r[a].transforms),trNodes:[]},this.styledShapes.push(n),r[a].elements.push(n))}function CVShapeElement(t,e,r){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.itemsData=[],this.prevViewData=[],this.shapeModifiers=[],this.processedElements=[],this.transformsManager=new ShapeTransformManager,this.initElement(t,e,r)}function CVTextElement(t,e,r){this.textSpans=[],this.yOffset=0,this.fillColorAnim=!1,this.strokeColorAnim=!1,this.strokeWidthAnim=!1,this.stroke=!1,this.fill=!1,this.justifyOffset=0,this.currentRender=null,this.renderType="canvas",this.values={fill:"rgba(0,0,0,0)",stroke:"rgba(0,0,0,0)",sWidth:0,fValue:""},this.initElement(t,e,r)}function CVImageElement(t,e,r){this.assetData=e.getAssetData(t.refId),this.img=e.imageLoader.getAsset(this.assetData),this.initElement(t,e,r)}function CVSolidElement(t,e,r){this.initElement(t,e,r)}function CanvasRendererBase(){}function CanvasContext(){this.opacity=-1,this.transform=createTypedArray("float32",16),this.fillStyle="",this.strokeStyle="",this.lineWidth="",this.lineCap="",this.lineJoin="",this.miterLimit="",this.id=Math.random()}function CVContextData(){var t;for(this.stack=[],this.cArrPos=0,this.cTr=new Matrix,t=0;t<15;t+=1){var e=new CanvasContext;this.stack[t]=e}this._length=15,this.nativeContext=null,this.transformMat=new Matrix,this.currentOpacity=1,this.currentFillStyle="",this.appliedFillStyle="",this.currentStrokeStyle="",this.appliedStrokeStyle="",this.currentLineWidth="",this.appliedLineWidth="",this.currentLineCap="",this.appliedLineCap="",this.currentLineJoin="",this.appliedLineJoin="",this.appliedMiterLimit="",this.currentMiterLimit=""}function CVCompElement(t,e,r){this.completeLayers=!1,this.layers=t.layers,this.pendingElements=[],this.elements=createSizedArray(this.layers.length),this.initElement(t,e,r),this.tm=t.tm?PropertyFactory.getProp(this,t.tm,0,e.frameRate,this):{_placeholder:!0}}function CanvasRenderer(t,e){this.animationItem=t,this.renderConfig={clearCanvas:!e||void 0===e.clearCanvas||e.clearCanvas,context:e&&e.context||null,progressiveLoad:e&&e.progressiveLoad||!1,preserveAspectRatio:e&&e.preserveAspectRatio||"xMidYMid meet",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||"xMidYMid slice",contentVisibility:e&&e.contentVisibility||"visible",className:e&&e.className||"",id:e&&e.id||"",runExpressions:!e||void 0===e.runExpressions||e.runExpressions},this.renderConfig.dpr=e&&e.dpr||1,this.animationItem.wrapper&&(this.renderConfig.dpr=e&&e.dpr||window.devicePixelRatio||1),this.renderedFrame=-1,this.globalData={frameNum:-1,_mdf:!1,renderConfig:this.renderConfig,currentGlobalAlpha:-1},this.contextData=new CVContextData,this.elements=[],this.pendingElements=[],this.transformMat=new Matrix,this.completeLayers=!1,this.rendererType="canvas",this.renderConfig.clearCanvas&&(this.ctxTransform=this.contextData.transform.bind(this.contextData),this.ctxOpacity=this.contextData.opacity.bind(this.contextData),this.ctxFillStyle=this.contextData.fillStyle.bind(this.contextData),this.ctxStrokeStyle=this.contextData.strokeStyle.bind(this.contextData),this.ctxLineWidth=this.contextData.lineWidth.bind(this.contextData),this.ctxLineCap=this.contextData.lineCap.bind(this.contextData),this.ctxLineJoin=this.contextData.lineJoin.bind(this.contextData),this.ctxMiterLimit=this.contextData.miterLimit.bind(this.contextData),this.ctxFill=this.contextData.fill.bind(this.contextData),this.ctxFillRect=this.contextData.fillRect.bind(this.contextData),this.ctxStroke=this.contextData.stroke.bind(this.contextData),this.save=this.contextData.save.bind(this.contextData))}function HBaseElement(){}function HSolidElement(t,e,r){this.initElement(t,e,r)}function HShapeElement(t,e,r){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.shapesContainer=createNS("g"),this.initElement(t,e,r),this.prevViewData=[],this.currentBBox={x:999999,y:-999999,h:0,w:0}}function HTextElement(t,e,r){this.textSpans=[],this.textPaths=[],this.currentBBox={x:999999,y:-999999,h:0,w:0},this.renderType="svg",this.isMasked=!1,this.initElement(t,e,r)}function HCameraElement(t,e,r){this.initFrame(),this.initBaseData(t,e,r),this.initHierarchy();var i=PropertyFactory.getProp;if(this.pe=i(this,t.pe,0,0,this),t.ks.p.s?(this.px=i(this,t.ks.p.x,1,0,this),this.py=i(this,t.ks.p.y,1,0,this),this.pz=i(this,t.ks.p.z,1,0,this)):this.p=i(this,t.ks.p,1,0,this),t.ks.a&&(this.a=i(this,t.ks.a,1,0,this)),t.ks.or.k.length&&t.ks.or.k[0].to){var a,s=t.ks.or.k.length;for(a=0;a<s;a+=1)t.ks.or.k[a].to=null,t.ks.or.k[a].ti=null}this.or=i(this,t.ks.or,1,degToRads,this),this.or.sh=!0,this.rx=i(this,t.ks.rx,0,degToRads,this),this.ry=i(this,t.ks.ry,0,degToRads,this),this.rz=i(this,t.ks.rz,0,degToRads,this),this.mat=new Matrix,this._prevMat=new Matrix,this._isFirstFrame=!0,this.finalTransform={mProp:this}}function HImageElement(t,e,r){this.assetData=e.getAssetData(t.refId),this.initElement(t,e,r)}function HybridRendererBase(t,e){this.animationItem=t,this.layers=null,this.renderedFrame=-1,this.renderConfig={className:e&&e.className||"",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||"xMidYMid slice",hideOnTransparent:!(e&&!1===e.hideOnTransparent),filterSize:{width:e&&e.filterSize&&e.filterSize.width||"400%",height:e&&e.filterSize&&e.filterSize.height||"400%",x:e&&e.filterSize&&e.filterSize.x||"-100%",y:e&&e.filterSize&&e.filterSize.y||"-100%"}},this.globalData={_mdf:!1,frameNum:-1,renderConfig:this.renderConfig},this.pendingElements=[],this.elements=[],this.threeDElements=[],this.destroyed=!1,this.camera=null,this.supports3d=!0,this.rendererType="html"}function HCompElement(t,e,r){this.layers=t.layers,this.supports3d=!t.hasMask,this.completeLayers=!1,this.pendingElements=[],this.elements=this.layers?createSizedArray(this.layers.length):[],this.initElement(t,e,r),this.tm=t.tm?PropertyFactory.getProp(this,t.tm,0,e.frameRate,this):{_placeholder:!0}}function HybridRenderer(t,e){this.animationItem=t,this.layers=null,this.renderedFrame=-1,this.renderConfig={className:e&&e.className||"",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||"xMidYMid slice",hideOnTransparent:!(e&&!1===e.hideOnTransparent),filterSize:{width:e&&e.filterSize&&e.filterSize.width||"400%",height:e&&e.filterSize&&e.filterSize.height||"400%",x:e&&e.filterSize&&e.filterSize.x||"-100%",y:e&&e.filterSize&&e.filterSize.y||"-100%"},runExpressions:!e||void 0===e.runExpressions||e.runExpressions},this.globalData={_mdf:!1,frameNum:-1,renderConfig:this.renderConfig},this.pendingElements=[],this.elements=[],this.threeDElements=[],this.destroyed=!1,this.camera=null,this.supports3d=!0,this.rendererType="html"}CVBaseElement.prototype={createElements:function createElements(){},initRendererElement:function initRendererElement(){},createContainerElements:function createContainerElements(){if(this.data.tt>=1){this.buffers=[];var t=this.globalData.canvasContext,e=assetLoader.createCanvas(t.canvas.width,t.canvas.height);this.buffers.push(e);var r=assetLoader.createCanvas(t.canvas.width,t.canvas.height);this.buffers.push(r),this.data.tt>=3&&!document._isProxy&&assetLoader.loadLumaCanvas()}this.canvasContext=this.globalData.canvasContext,this.transformCanvas=this.globalData.transformCanvas,this.renderableEffectsManager=new CVEffects(this),this.searchEffectTransforms()},createContent:function createContent(){},setBlendMode:function setBlendMode(){var t=this.globalData;if(t.blendMode!==this.data.bm){t.blendMode=this.data.bm;var e=getBlendMode(this.data.bm);t.canvasContext.globalCompositeOperation=e}},createRenderableComponents:function createRenderableComponents(){this.maskManager=new CVMaskElement(this.data,this),this.transformEffects=this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT)},hideElement:function hideElement(){this.hidden||this.isInRange&&!this.isTransparent||(this.hidden=!0)},showElement:function showElement(){this.isInRange&&!this.isTransparent&&(this.hidden=!1,this._isFirstFrame=!0,this.maskManager._isFirstFrame=!0)},clearCanvas:function clearCanvas(t){t.clearRect(this.transformCanvas.tx,this.transformCanvas.ty,this.transformCanvas.w*this.transformCanvas.sx,this.transformCanvas.h*this.transformCanvas.sy)},prepareLayer:function prepareLayer(){if(this.data.tt>=1){var t=this.buffers[0].getContext("2d");this.clearCanvas(t),t.drawImage(this.canvasContext.canvas,0,0),this.currentTransform=this.canvasContext.getTransform(),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform)}},exitLayer:function exitLayer(){if(this.data.tt>=1){var t=this.buffers[1],e=t.getContext("2d");if(this.clearCanvas(e),e.drawImage(this.canvasContext.canvas,0,0),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform),this.comp.getElementById("tp"in this.data?this.data.tp:this.data.ind-1).renderFrame(!0),this.canvasContext.setTransform(1,0,0,1,0,0),this.data.tt>=3&&!document._isProxy){var r=assetLoader.getLumaCanvas(this.canvasContext.canvas);r.getContext("2d").drawImage(this.canvasContext.canvas,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.drawImage(r,0,0)}this.canvasContext.globalCompositeOperation=operationsMap[this.data.tt],this.canvasContext.drawImage(t,0,0),this.canvasContext.globalCompositeOperation="destination-over",this.canvasContext.drawImage(this.buffers[0],0,0),this.canvasContext.setTransform(this.currentTransform),this.canvasContext.globalCompositeOperation="source-over"}},renderFrame:function renderFrame(t){if(!this.hidden&&!this.data.hd&&(1!==this.data.td||t)){this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.setBlendMode();var e=0===this.data.ty;this.prepareLayer(),this.globalData.renderer.save(e),this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props),this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity),this.renderInnerContent(),this.globalData.renderer.restore(e),this.exitLayer(),this.maskManager.hasMasks&&this.globalData.renderer.restore(!0),this._isFirstFrame&&(this._isFirstFrame=!1)}},destroy:function destroy(){this.canvasContext=null,this.data=null,this.globalData=null,this.maskManager.destroy()},mHelper:new Matrix},CVBaseElement.prototype.hide=CVBaseElement.prototype.hideElement,CVBaseElement.prototype.show=CVBaseElement.prototype.showElement,CVShapeData.prototype.setAsAnimated=SVGShapeData.prototype.setAsAnimated,extendPrototype([BaseElement,TransformElement,CVBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableElement],CVShapeElement),CVShapeElement.prototype.initElement=RenderableDOMElement.prototype.initElement,CVShapeElement.prototype.transformHelper={opacity:1,_opMdf:!1},CVShapeElement.prototype.dashResetter=[],CVShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,!0,[])},CVShapeElement.prototype.createStyleElement=function(t,e){var r={data:t,type:t.ty,preTransforms:this.transformsManager.addTransformSequence(e),transforms:[],elements:[],closed:!0===t.hd},i={};if("fl"===t.ty||"st"===t.ty?(i.c=PropertyFactory.getProp(this,t.c,1,255,this),i.c.k||(r.co="rgb("+bmFloor(i.c.v[0])+","+bmFloor(i.c.v[1])+","+bmFloor(i.c.v[2])+")")):"gf"!==t.ty&&"gs"!==t.ty||(i.s=PropertyFactory.getProp(this,t.s,1,null,this),i.e=PropertyFactory.getProp(this,t.e,1,null,this),i.h=PropertyFactory.getProp(this,t.h||{k:0},0,.01,this),i.a=PropertyFactory.getProp(this,t.a||{k:0},0,degToRads,this),i.g=new GradientProperty(this,t.g,this)),i.o=PropertyFactory.getProp(this,t.o,0,.01,this),"st"===t.ty||"gs"===t.ty){if(r.lc=lineCapEnum[t.lc||2],r.lj=lineJoinEnum[t.lj||2],1==t.lj&&(r.ml=t.ml),i.w=PropertyFactory.getProp(this,t.w,0,null,this),i.w.k||(r.wi=i.w.v),t.d){var a=new DashProperty(this,t.d,"canvas",this);i.d=a,i.d.k||(r.da=i.d.dashArray,r.do=i.d.dashoffset[0])}}else r.r=2===t.r?"evenodd":"nonzero";return this.stylesList.push(r),i.style=r,i},CVShapeElement.prototype.createGroupElement=function(){return{it:[],prevViewData:[]}},CVShapeElement.prototype.createTransformElement=function(t){return{transform:{opacity:1,_opMdf:!1,key:this.transformsManager.getNewKey(),op:PropertyFactory.getProp(this,t.o,0,.01,this),mProps:TransformPropertyFactory.getTransformProperty(this,t,this)}}},CVShapeElement.prototype.createShapeElement=function(t){var e=new CVShapeData(this,t,this.stylesList,this.transformsManager);return this.shapes.push(e),this.addShapeToModifiers(e),e},CVShapeElement.prototype.reloadShapes=function(){var t;this._isFirstFrame=!0;var e=this.itemsData.length;for(t=0;t<e;t+=1)this.prevViewData[t]=this.itemsData[t];for(this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,!0,[]),e=this.dynamicProperties.length,t=0;t<e;t+=1)this.dynamicProperties[t].getValue();this.renderModifiers(),this.transformsManager.processSequences(this._isFirstFrame)},CVShapeElement.prototype.addTransformToStyleList=function(t){var e,r=this.stylesList.length;for(e=0;e<r;e+=1)this.stylesList[e].closed||this.stylesList[e].transforms.push(t)},CVShapeElement.prototype.removeTransformFromStyleList=function(){var t,e=this.stylesList.length;for(t=0;t<e;t+=1)this.stylesList[t].closed||this.stylesList[t].transforms.pop()},CVShapeElement.prototype.closeStyles=function(t){var e,r=t.length;for(e=0;e<r;e+=1)t[e].closed=!0},CVShapeElement.prototype.searchShapes=function(t,e,r,i,a){var s,n,o,h,l,p,c=t.length-1,f=[],m=[],u=[].concat(a);for(s=c;s>=0;s-=1){if((h=this.searchProcessedElement(t[s]))?e[s]=r[h-1]:t[s]._shouldRender=i,"fl"===t[s].ty||"st"===t[s].ty||"gf"===t[s].ty||"gs"===t[s].ty)h?e[s].style.closed=!1:e[s]=this.createStyleElement(t[s],u),f.push(e[s].style);else if("gr"===t[s].ty){if(h)for(o=e[s].it.length,n=0;n<o;n+=1)e[s].prevViewData[n]=e[s].it[n];else e[s]=this.createGroupElement(t[s]);this.searchShapes(t[s].it,e[s].it,e[s].prevViewData,i,u)}else"tr"===t[s].ty?(h||(p=this.createTransformElement(t[s]),e[s]=p),u.push(e[s]),this.addTransformToStyleList(e[s])):"sh"===t[s].ty||"rc"===t[s].ty||"el"===t[s].ty||"sr"===t[s].ty?h||(e[s]=this.createShapeElement(t[s])):"tm"===t[s].ty||"rd"===t[s].ty||"pb"===t[s].ty||"zz"===t[s].ty||"op"===t[s].ty?(h?(l=e[s]).closed=!1:((l=ShapeModifiers.getModifier(t[s].ty)).init(this,t[s]),e[s]=l,this.shapeModifiers.push(l)),m.push(l)):"rp"===t[s].ty&&(h?(l=e[s]).closed=!0:(l=ShapeModifiers.getModifier(t[s].ty),e[s]=l,l.init(this,t,s,e),this.shapeModifiers.push(l),i=!1),m.push(l));this.addProcessedElement(t[s],s+1)}for(this.removeTransformFromStyleList(),this.closeStyles(f),c=m.length,s=0;s<c;s+=1)m[s].closed=!0},CVShapeElement.prototype.renderInnerContent=function(){this.transformHelper.opacity=1,this.transformHelper._opMdf=!1,this.renderModifiers(),this.transformsManager.processSequences(this._isFirstFrame),this.renderShape(this.transformHelper,this.shapesData,this.itemsData,!0)},CVShapeElement.prototype.renderShapeTransform=function(t,e){(t._opMdf||e.op._mdf||this._isFirstFrame)&&(e.opacity=t.opacity,e.opacity*=e.op.v,e._opMdf=!0)},CVShapeElement.prototype.drawLayer=function(){var t,e,r,i,a,s,n,o,h,l=this.stylesList.length,p=this.globalData.renderer,c=this.globalData.canvasContext;for(t=0;t<l;t+=1)if(("st"!==(o=(h=this.stylesList[t]).type)&&"gs"!==o||0!==h.wi)&&h.data._shouldRender&&0!==h.coOp&&0!==this.globalData.currentGlobalAlpha){for(p.save(),s=h.elements,"st"===o||"gs"===o?(p.ctxStrokeStyle("st"===o?h.co:h.grd),p.ctxLineWidth(h.wi),p.ctxLineCap(h.lc),p.ctxLineJoin(h.lj),p.ctxMiterLimit(h.ml||0)):p.ctxFillStyle("fl"===o?h.co:h.grd),p.ctxOpacity(h.coOp),"st"!==o&&"gs"!==o&&c.beginPath(),p.ctxTransform(h.preTransforms.finalTransform.props),r=s.length,e=0;e<r;e+=1){for("st"!==o&&"gs"!==o||(c.beginPath(),h.da&&(c.setLineDash(h.da),c.lineDashOffset=h.do)),a=(n=s[e].trNodes).length,i=0;i<a;i+=1)"m"===n[i].t?c.moveTo(n[i].p[0],n[i].p[1]):"c"===n[i].t?c.bezierCurveTo(n[i].pts[0],n[i].pts[1],n[i].pts[2],n[i].pts[3],n[i].pts[4],n[i].pts[5]):c.closePath();"st"!==o&&"gs"!==o||(p.ctxStroke(),h.da&&c.setLineDash(this.dashResetter))}"st"!==o&&"gs"!==o&&this.globalData.renderer.ctxFill(h.r),p.restore()}},CVShapeElement.prototype.renderShape=function(t,e,r,i){var a,s;for(s=t,a=e.length-1;a>=0;a-=1)"tr"===e[a].ty?(s=r[a].transform,this.renderShapeTransform(t,s)):"sh"===e[a].ty||"el"===e[a].ty||"rc"===e[a].ty||"sr"===e[a].ty?this.renderPath(e[a],r[a]):"fl"===e[a].ty?this.renderFill(e[a],r[a],s):"st"===e[a].ty?this.renderStroke(e[a],r[a],s):"gf"===e[a].ty||"gs"===e[a].ty?this.renderGradientFill(e[a],r[a],s):"gr"===e[a].ty?this.renderShape(s,e[a].it,r[a].it):e[a].ty;i&&this.drawLayer()},CVShapeElement.prototype.renderStyledShape=function(t,e){if(this._isFirstFrame||e._mdf||t.transforms._mdf){var r,i,a,s=t.trNodes,n=e.paths,o=n._length;s.length=0;var h=t.transforms.finalTransform;for(a=0;a<o;a+=1){var l=n.shapes[a];if(l&&l.v){for(i=l._length,r=1;r<i;r+=1)1===r&&s.push({t:"m",p:h.applyToPointArray(l.v[0][0],l.v[0][1],0)}),s.push({t:"c",pts:h.applyToTriplePoints(l.o[r-1],l.i[r],l.v[r])});1===i&&s.push({t:"m",p:h.applyToPointArray(l.v[0][0],l.v[0][1],0)}),l.c&&i&&(s.push({t:"c",pts:h.applyToTriplePoints(l.o[r-1],l.i[0],l.v[0])}),s.push({t:"z"}))}}t.trNodes=s}},CVShapeElement.prototype.renderPath=function(t,e){if(!0!==t.hd&&t._shouldRender){var r,i=e.styledShapes.length;for(r=0;r<i;r+=1)this.renderStyledShape(e.styledShapes[r],e.sh)}},CVShapeElement.prototype.renderFill=function(t,e,r){var i=e.style;(e.c._mdf||this._isFirstFrame)&&(i.co="rgb("+bmFloor(e.c.v[0])+","+bmFloor(e.c.v[1])+","+bmFloor(e.c.v[2])+")"),(e.o._mdf||r._opMdf||this._isFirstFrame)&&(i.coOp=e.o.v*r.opacity)},CVShapeElement.prototype.renderGradientFill=function(t,e,r){var i,a=e.style;if(!a.grd||e.g._mdf||e.s._mdf||e.e._mdf||1!==t.t&&(e.h._mdf||e.a._mdf)){var s,n=this.globalData.canvasContext,o=e.s.v,h=e.e.v;if(1===t.t)i=n.createLinearGradient(o[0],o[1],h[0],h[1]);else{var l=Math.sqrt(Math.pow(o[0]-h[0],2)+Math.pow(o[1]-h[1],2)),p=Math.atan2(h[1]-o[1],h[0]-o[0]),c=e.h.v;c>=1?c=.99:c<=-1&&(c=-.99);var f=l*c,m=Math.cos(p+e.a.v)*f+o[0],u=Math.sin(p+e.a.v)*f+o[1];i=n.createRadialGradient(m,u,0,o[0],o[1],l)}var d=t.g.p,y=e.g.c,g=1;for(s=0;s<d;s+=1)e.g._hasOpacity&&e.g._collapsable&&(g=e.g.o[2*s+1]),i.addColorStop(y[4*s]/100,"rgba("+y[4*s+1]+","+y[4*s+2]+","+y[4*s+3]+","+g+")");a.grd=i}a.coOp=e.o.v*r.opacity},CVShapeElement.prototype.renderStroke=function(t,e,r){var i=e.style,a=e.d;a&&(a._mdf||this._isFirstFrame)&&(i.da=a.dashArray,i.do=a.dashoffset[0]),(e.c._mdf||this._isFirstFrame)&&(i.co="rgb("+bmFloor(e.c.v[0])+","+bmFloor(e.c.v[1])+","+bmFloor(e.c.v[2])+")"),(e.o._mdf||r._opMdf||this._isFirstFrame)&&(i.coOp=e.o.v*r.opacity),(e.w._mdf||this._isFirstFrame)&&(i.wi=e.w.v)},CVShapeElement.prototype.destroy=function(){this.shapesData=null,this.globalData=null,this.canvasContext=null,this.stylesList.length=0,this.itemsData.length=0},extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement,ITextElement],CVTextElement),CVTextElement.prototype.tHelper=createTag("canvas").getContext("2d"),CVTextElement.prototype.buildNewText=function(){var t=this.textProperty.currentData;this.renderedLetters=createSizedArray(t.l?t.l.length:0);var e=!1;t.fc?(e=!0,this.values.fill=this.buildColor(t.fc)):this.values.fill="rgba(0,0,0,0)",this.fill=e;var r=!1;t.sc&&(r=!0,this.values.stroke=this.buildColor(t.sc),this.values.sWidth=t.sw);var i,a,s,n,o,h,l,p,c,f,m,u,d=this.globalData.fontManager.getFontByName(t.f),y=t.l,g=this.mHelper;this.stroke=r,this.values.fValue=t.finalSize+"px "+this.globalData.fontManager.getFontByName(t.f).fFamily,a=t.finalText.length;var v=this.data.singleShape,b=.001*t.tr*t.finalSize,P=0,x=0,S=!0,E=0;for(i=0;i<a;i+=1){n=(s=this.globalData.fontManager.getCharData(t.finalText[i],d.fStyle,this.globalData.fontManager.getFontByName(t.f).fFamily))&&s.data||{},g.reset(),v&&y[i].n&&(P=-b,x+=t.yOffset,x+=S?1:0,S=!1),c=(l=n.shapes?n.shapes[0].it:[]).length,g.scale(t.finalSize/100,t.finalSize/100),v&&this.applyTextPropertiesToMatrix(t,g,y[i].line,P,x),m=createSizedArray(c-1);var _=0;for(p=0;p<c;p+=1)if("sh"===l[p].ty){for(h=l[p].ks.k.i.length,f=l[p].ks.k,u=[],o=1;o<h;o+=1)1===o&&u.push(g.applyToX(f.v[0][0],f.v[0][1],0),g.applyToY(f.v[0][0],f.v[0][1],0)),u.push(g.applyToX(f.o[o-1][0],f.o[o-1][1],0),g.applyToY(f.o[o-1][0],f.o[o-1][1],0),g.applyToX(f.i[o][0],f.i[o][1],0),g.applyToY(f.i[o][0],f.i[o][1],0),g.applyToX(f.v[o][0],f.v[o][1],0),g.applyToY(f.v[o][0],f.v[o][1],0));u.push(g.applyToX(f.o[o-1][0],f.o[o-1][1],0),g.applyToY(f.o[o-1][0],f.o[o-1][1],0),g.applyToX(f.i[0][0],f.i[0][1],0),g.applyToY(f.i[0][0],f.i[0][1],0),g.applyToX(f.v[0][0],f.v[0][1],0),g.applyToY(f.v[0][0],f.v[0][1],0)),m[_]=u,_+=1}v&&(P+=y[i].l,P+=b),this.textSpans[E]?this.textSpans[E].elem=m:this.textSpans[E]={elem:m},E+=1}},CVTextElement.prototype.renderInnerContent=function(){var t,e,r,i,a,s;this.validateText(),this.canvasContext.font=this.values.fValue,this.globalData.renderer.ctxLineCap("butt"),this.globalData.renderer.ctxLineJoin("miter"),this.globalData.renderer.ctxMiterLimit(4),this.data.singleShape||this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag);var n,o=this.textAnimator.renderedLetters,h=this.textProperty.currentData.l;e=h.length;var l,p,c=null,f=null,m=null,u=this.globalData.renderer;for(t=0;t<e;t+=1)if(!h[t].n){if((n=o[t])&&(u.save(),u.ctxTransform(n.p),u.ctxOpacity(n.o)),this.fill){for(n&&n.fc?c!==n.fc&&(u.ctxFillStyle(n.fc),c=n.fc):c!==this.values.fill&&(c=this.values.fill,u.ctxFillStyle(this.values.fill)),i=(l=this.textSpans[t].elem).length,this.globalData.canvasContext.beginPath(),r=0;r<i;r+=1)for(s=(p=l[r]).length,this.globalData.canvasContext.moveTo(p[0],p[1]),a=2;a<s;a+=6)this.globalData.canvasContext.bezierCurveTo(p[a],p[a+1],p[a+2],p[a+3],p[a+4],p[a+5]);this.globalData.canvasContext.closePath(),u.ctxFill()}if(this.stroke){for(n&&n.sw?m!==n.sw&&(m=n.sw,u.ctxLineWidth(n.sw)):m!==this.values.sWidth&&(m=this.values.sWidth,u.ctxLineWidth(this.values.sWidth)),n&&n.sc?f!==n.sc&&(f=n.sc,u.ctxStrokeStyle(n.sc)):f!==this.values.stroke&&(f=this.values.stroke,u.ctxStrokeStyle(this.values.stroke)),i=(l=this.textSpans[t].elem).length,this.globalData.canvasContext.beginPath(),r=0;r<i;r+=1)for(s=(p=l[r]).length,this.globalData.canvasContext.moveTo(p[0],p[1]),a=2;a<s;a+=6)this.globalData.canvasContext.bezierCurveTo(p[a],p[a+1],p[a+2],p[a+3],p[a+4],p[a+5]);this.globalData.canvasContext.closePath(),u.ctxStroke()}n&&this.globalData.renderer.restore()}},extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement],CVImageElement),CVImageElement.prototype.initElement=SVGShapeElement.prototype.initElement,CVImageElement.prototype.prepareFrame=IImageElement.prototype.prepareFrame,CVImageElement.prototype.createContent=function(){if(this.img.width&&(this.assetData.w!==this.img.width||this.assetData.h!==this.img.height)){var t=createTag("canvas");t.width=this.assetData.w,t.height=this.assetData.h;var e,r,i=t.getContext("2d"),a=this.img.width,s=this.img.height,n=a/s,o=this.assetData.w/this.assetData.h,h=this.assetData.pr||this.globalData.renderConfig.imagePreserveAspectRatio;n>o&&"xMidYMid slice"===h||n<o&&"xMidYMid slice"!==h?e=(r=s)*o:r=(e=a)/o,i.drawImage(this.img,(a-e)/2,(s-r)/2,e,r,0,0,this.assetData.w,this.assetData.h),this.img=t}},CVImageElement.prototype.renderInnerContent=function(){this.canvasContext.drawImage(this.img,0,0)},CVImageElement.prototype.destroy=function(){this.img=null},extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement],CVSolidElement),CVSolidElement.prototype.initElement=SVGShapeElement.prototype.initElement,CVSolidElement.prototype.prepareFrame=IImageElement.prototype.prepareFrame,CVSolidElement.prototype.renderInnerContent=function(){this.globalData.renderer.ctxFillStyle(this.data.sc),this.globalData.renderer.ctxFillRect(0,0,this.data.sw,this.data.sh)},extendPrototype([BaseRenderer],CanvasRendererBase),CanvasRendererBase.prototype.createShape=function(t){return new CVShapeElement(t,this.globalData,this)},CanvasRendererBase.prototype.createText=function(t){return new CVTextElement(t,this.globalData,this)},CanvasRendererBase.prototype.createImage=function(t){return new CVImageElement(t,this.globalData,this)},CanvasRendererBase.prototype.createSolid=function(t){return new CVSolidElement(t,this.globalData,this)},CanvasRendererBase.prototype.createNull=SVGRenderer.prototype.createNull,CanvasRendererBase.prototype.ctxTransform=function(t){1===t[0]&&0===t[1]&&0===t[4]&&1===t[5]&&0===t[12]&&0===t[13]||this.canvasContext.transform(t[0],t[1],t[4],t[5],t[12],t[13])},CanvasRendererBase.prototype.ctxOpacity=function(t){this.canvasContext.globalAlpha*=t<0?0:t},CanvasRendererBase.prototype.ctxFillStyle=function(t){this.canvasContext.fillStyle=t},CanvasRendererBase.prototype.ctxStrokeStyle=function(t){this.canvasContext.strokeStyle=t},CanvasRendererBase.prototype.ctxLineWidth=function(t){this.canvasContext.lineWidth=t},CanvasRendererBase.prototype.ctxLineCap=function(t){this.canvasContext.lineCap=t},CanvasRendererBase.prototype.ctxLineJoin=function(t){this.canvasContext.lineJoin=t},CanvasRendererBase.prototype.ctxMiterLimit=function(t){this.canvasContext.miterLimit=t},CanvasRendererBase.prototype.ctxFill=function(t){this.canvasContext.fill(t)},CanvasRendererBase.prototype.ctxFillRect=function(t,e,r,i){this.canvasContext.fillRect(t,e,r,i)},CanvasRendererBase.prototype.ctxStroke=function(){this.canvasContext.stroke()},CanvasRendererBase.prototype.reset=function(){this.renderConfig.clearCanvas?this.contextData.reset():this.canvasContext.restore()},CanvasRendererBase.prototype.save=function(){this.canvasContext.save()},CanvasRendererBase.prototype.restore=function(t){this.renderConfig.clearCanvas?(t&&(this.globalData.blendMode="source-over"),this.contextData.restore(t)):this.canvasContext.restore()},CanvasRendererBase.prototype.configAnimation=function(t){if(this.animationItem.wrapper){this.animationItem.container=createTag("canvas");var e=this.animationItem.container.style;e.width="100%",e.height="100%";var r="0px 0px 0px";e.transformOrigin=r,e.mozTransformOrigin=r,e.webkitTransformOrigin=r,e["-webkit-transform"]=r,e.contentVisibility=this.renderConfig.contentVisibility,this.animationItem.wrapper.appendChild(this.animationItem.container),this.canvasContext=this.animationItem.container.getContext("2d"),this.renderConfig.className&&this.animationItem.container.setAttribute("class",this.renderConfig.className),this.renderConfig.id&&this.animationItem.container.setAttribute("id",this.renderConfig.id)}else this.canvasContext=this.renderConfig.context;this.contextData.setContext(this.canvasContext),this.data=t,this.layers=t.layers,this.transformCanvas={w:t.w,h:t.h,sx:0,sy:0,tx:0,ty:0},this.setupGlobalData(t,document.body),this.globalData.canvasContext=this.canvasContext,this.globalData.renderer=this,this.globalData.isDashed=!1,this.globalData.progressiveLoad=this.renderConfig.progressiveLoad,this.globalData.transformCanvas=this.transformCanvas,this.elements=createSizedArray(t.layers.length),this.updateContainerSize()},CanvasRendererBase.prototype.updateContainerSize=function(t,e){var r,i,a,s;if(this.reset(),t?(r=t,i=e,this.canvasContext.canvas.width=r,this.canvasContext.canvas.height=i):(this.animationItem.wrapper&&this.animationItem.container?(r=this.animationItem.wrapper.offsetWidth,i=this.animationItem.wrapper.offsetHeight):(r=this.canvasContext.canvas.width,i=this.canvasContext.canvas.height),this.canvasContext.canvas.width=r*this.renderConfig.dpr,this.canvasContext.canvas.height=i*this.renderConfig.dpr),-1!==this.renderConfig.preserveAspectRatio.indexOf("meet")||-1!==this.renderConfig.preserveAspectRatio.indexOf("slice")){var n=this.renderConfig.preserveAspectRatio.split(" "),o=n[1]||"meet",h=n[0]||"xMidYMid",l=h.substr(0,4),p=h.substr(4);a=r/i,(s=this.transformCanvas.w/this.transformCanvas.h)>a&&"meet"===o||s<a&&"slice"===o?(this.transformCanvas.sx=r/(this.transformCanvas.w/this.renderConfig.dpr),this.transformCanvas.sy=r/(this.transformCanvas.w/this.renderConfig.dpr)):(this.transformCanvas.sx=i/(this.transformCanvas.h/this.renderConfig.dpr),this.transformCanvas.sy=i/(this.transformCanvas.h/this.renderConfig.dpr)),this.transformCanvas.tx="xMid"===l&&(s<a&&"meet"===o||s>a&&"slice"===o)?(r-this.transformCanvas.w*(i/this.transformCanvas.h))/2*this.renderConfig.dpr:"xMax"===l&&(s<a&&"meet"===o||s>a&&"slice"===o)?(r-this.transformCanvas.w*(i/this.transformCanvas.h))*this.renderConfig.dpr:0,this.transformCanvas.ty="YMid"===p&&(s>a&&"meet"===o||s<a&&"slice"===o)?(i-this.transformCanvas.h*(r/this.transformCanvas.w))/2*this.renderConfig.dpr:"YMax"===p&&(s>a&&"meet"===o||s<a&&"slice"===o)?(i-this.transformCanvas.h*(r/this.transformCanvas.w))*this.renderConfig.dpr:0}else"none"===this.renderConfig.preserveAspectRatio?(this.transformCanvas.sx=r/(this.transformCanvas.w/this.renderConfig.dpr),this.transformCanvas.sy=i/(this.transformCanvas.h/this.renderConfig.dpr),this.transformCanvas.tx=0,this.transformCanvas.ty=0):(this.transformCanvas.sx=this.renderConfig.dpr,this.transformCanvas.sy=this.renderConfig.dpr,this.transformCanvas.tx=0,this.transformCanvas.ty=0);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],this.ctxTransform(this.transformCanvas.props),this.canvasContext.beginPath(),this.canvasContext.rect(0,0,this.transformCanvas.w,this.transformCanvas.h),this.canvasContext.closePath(),this.canvasContext.clip(),this.renderFrame(this.renderedFrame,!0)},CanvasRendererBase.prototype.destroy=function(){var t;for(this.renderConfig.clearCanvas&&this.animationItem.wrapper&&(this.animationItem.wrapper.innerText=""),t=(this.layers?this.layers.length:0)-1;t>=0;t-=1)this.elements[t]&&this.elements[t].destroy&&this.elements[t].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0},CanvasRendererBase.prototype.renderFrame=function(t,e){if((this.renderedFrame!==t||!0!==this.renderConfig.clearCanvas||e)&&!this.destroyed&&-1!==t){var r;this.renderedFrame=t,this.globalData.frameNum=t-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas||e,this.globalData.projectInterface.currentFrame=t;var i=this.layers.length;for(this.completeLayers||this.checkLayers(t),r=i-1;r>=0;r-=1)(this.completeLayers||this.elements[r])&&this.elements[r].prepareFrame(t-this.layers[r].st);if(this.globalData._mdf){for(!0===this.renderConfig.clearCanvas?this.canvasContext.clearRect(0,0,this.transformCanvas.w,this.transformCanvas.h):this.save(),r=i-1;r>=0;r-=1)(this.completeLayers||this.elements[r])&&this.elements[r].renderFrame();!0!==this.renderConfig.clearCanvas&&this.restore()}}},CanvasRendererBase.prototype.buildItem=function(t){var e=this.elements;if(!e[t]&&99!==this.layers[t].ty){var r=this.createItem(this.layers[t],this,this.globalData);e[t]=r,r.initExpressions()}},CanvasRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;)this.pendingElements.pop().checkParenting()},CanvasRendererBase.prototype.hide=function(){this.animationItem.container.style.display="none"},CanvasRendererBase.prototype.show=function(){this.animationItem.container.style.display="block"},CVContextData.prototype.duplicate=function(){var t=2*this._length,e=0;for(e=this._length;e<t;e+=1)this.stack[e]=new CanvasContext;this._length=t},CVContextData.prototype.reset=function(){this.cArrPos=0,this.cTr.reset(),this.stack[this.cArrPos].opacity=1},CVContextData.prototype.restore=function(t){this.cArrPos-=1;var e,r=this.stack[this.cArrPos],i=r.transform,a=this.cTr.props;for(e=0;e<16;e+=1)a[e]=i[e];if(t){this.nativeContext.restore();var s=this.stack[this.cArrPos+1];this.appliedFillStyle=s.fillStyle,this.appliedStrokeStyle=s.strokeStyle,this.appliedLineWidth=s.lineWidth,this.appliedLineCap=s.lineCap,this.appliedLineJoin=s.lineJoin,this.appliedMiterLimit=s.miterLimit}this.nativeContext.setTransform(i[0],i[1],i[4],i[5],i[12],i[13]),(t||-1!==r.opacity&&this.currentOpacity!==r.opacity)&&(this.nativeContext.globalAlpha=r.opacity,this.currentOpacity=r.opacity),this.currentFillStyle=r.fillStyle,this.currentStrokeStyle=r.strokeStyle,this.currentLineWidth=r.lineWidth,this.currentLineCap=r.lineCap,this.currentLineJoin=r.lineJoin,this.currentMiterLimit=r.miterLimit},CVContextData.prototype.save=function(t){t&&this.nativeContext.save();var e=this.cTr.props;this._length<=this.cArrPos&&this.duplicate();var r,i=this.stack[this.cArrPos];for(r=0;r<16;r+=1)i.transform[r]=e[r];this.cArrPos+=1;var a=this.stack[this.cArrPos];a.opacity=i.opacity,a.fillStyle=i.fillStyle,a.strokeStyle=i.strokeStyle,a.lineWidth=i.lineWidth,a.lineCap=i.lineCap,a.lineJoin=i.lineJoin,a.miterLimit=i.miterLimit},CVContextData.prototype.setOpacity=function(t){this.stack[this.cArrPos].opacity=t},CVContextData.prototype.setContext=function(t){this.nativeContext=t},CVContextData.prototype.fillStyle=function(t){this.stack[this.cArrPos].fillStyle!==t&&(this.currentFillStyle=t,this.stack[this.cArrPos].fillStyle=t)},CVContextData.prototype.strokeStyle=function(t){this.stack[this.cArrPos].strokeStyle!==t&&(this.currentStrokeStyle=t,this.stack[this.cArrPos].strokeStyle=t)},CVContextData.prototype.lineWidth=function(t){this.stack[this.cArrPos].lineWidth!==t&&(this.currentLineWidth=t,this.stack[this.cArrPos].lineWidth=t)},CVContextData.prototype.lineCap=function(t){this.stack[this.cArrPos].lineCap!==t&&(this.currentLineCap=t,this.stack[this.cArrPos].lineCap=t)},CVContextData.prototype.lineJoin=function(t){this.stack[this.cArrPos].lineJoin!==t&&(this.currentLineJoin=t,this.stack[this.cArrPos].lineJoin=t)},CVContextData.prototype.miterLimit=function(t){this.stack[this.cArrPos].miterLimit!==t&&(this.currentMiterLimit=t,this.stack[this.cArrPos].miterLimit=t)},CVContextData.prototype.transform=function(t){this.transformMat.cloneFromProps(t);var e=this.cTr;this.transformMat.multiply(e),e.cloneFromProps(this.transformMat.props);var r=e.props;this.nativeContext.setTransform(r[0],r[1],r[4],r[5],r[12],r[13])},CVContextData.prototype.opacity=function(t){var e=this.stack[this.cArrPos].opacity;e*=t<0?0:t,this.stack[this.cArrPos].opacity!==e&&(this.currentOpacity!==t&&(this.nativeContext.globalAlpha=t,this.currentOpacity=t),this.stack[this.cArrPos].opacity=e)},CVContextData.prototype.fill=function(t){this.appliedFillStyle!==this.currentFillStyle&&(this.appliedFillStyle=this.currentFillStyle,this.nativeContext.fillStyle=this.appliedFillStyle),this.nativeContext.fill(t)},CVContextData.prototype.fillRect=function(t,e,r,i){this.appliedFillStyle!==this.currentFillStyle&&(this.appliedFillStyle=this.currentFillStyle,this.nativeContext.fillStyle=this.appliedFillStyle),this.nativeContext.fillRect(t,e,r,i)},CVContextData.prototype.stroke=function(){this.appliedStrokeStyle!==this.currentStrokeStyle&&(this.appliedStrokeStyle=this.currentStrokeStyle,this.nativeContext.strokeStyle=this.appliedStrokeStyle),this.appliedLineWidth!==this.currentLineWidth&&(this.appliedLineWidth=this.currentLineWidth,this.nativeContext.lineWidth=this.appliedLineWidth),this.appliedLineCap!==this.currentLineCap&&(this.appliedLineCap=this.currentLineCap,this.nativeContext.lineCap=this.appliedLineCap),this.appliedLineJoin!==this.currentLineJoin&&(this.appliedLineJoin=this.currentLineJoin,this.nativeContext.lineJoin=this.appliedLineJoin),this.appliedMiterLimit!==this.currentMiterLimit&&(this.appliedMiterLimit=this.currentMiterLimit,this.nativeContext.miterLimit=this.appliedMiterLimit),this.nativeContext.stroke()},extendPrototype([CanvasRendererBase,ICompElement,CVBaseElement],CVCompElement),CVCompElement.prototype.renderInnerContent=function(){var t,e=this.canvasContext;for(e.beginPath(),e.moveTo(0,0),e.lineTo(this.data.w,0),e.lineTo(this.data.w,this.data.h),e.lineTo(0,this.data.h),e.lineTo(0,0),e.clip(),t=this.layers.length-1;t>=0;t-=1)(this.completeLayers||this.elements[t])&&this.elements[t].renderFrame()},CVCompElement.prototype.destroy=function(){var t;for(t=this.layers.length-1;t>=0;t-=1)this.elements[t]&&this.elements[t].destroy();this.layers=null,this.elements=null},CVCompElement.prototype.createComp=function(t){return new CVCompElement(t,this.globalData,this)},extendPrototype([CanvasRendererBase],CanvasRenderer),CanvasRenderer.prototype.createComp=function(t){return new CVCompElement(t,this.globalData,this)},HBaseElement.prototype={checkBlendMode:function checkBlendMode(){},initRendererElement:function initRendererElement(){this.baseElement=createTag(this.data.tg||"div"),this.data.hasMask?(this.svgElement=createNS("svg"),this.layerElement=createNS("g"),this.maskedElement=this.layerElement,this.svgElement.appendChild(this.layerElement),this.baseElement.appendChild(this.svgElement)):this.layerElement=this.baseElement,styleDiv(this.baseElement)},createContainerElements:function createContainerElements(){this.renderableEffectsManager=new CVEffects(this),this.transformedElement=this.baseElement,this.maskedElement=this.layerElement,this.data.ln&&this.layerElement.setAttribute("id",this.data.ln),this.data.cl&&this.layerElement.setAttribute("class",this.data.cl),0!==this.data.bm&&this.setBlendMode()},renderElement:function renderElement(){var t=this.transformedElement?this.transformedElement.style:{};if(this.finalTransform._matMdf){var e=this.finalTransform.mat.toCSS();t.transform=e,t.webkitTransform=e}this.finalTransform._opMdf&&(t.opacity=this.finalTransform.mProp.o.v)},renderFrame:function renderFrame(){this.data.hd||this.hidden||(this.renderTransform(),this.renderRenderable(),this.renderElement(),this.renderInnerContent(),this._isFirstFrame&&(this._isFirstFrame=!1))},destroy:function destroy(){this.layerElement=null,this.transformedElement=null,this.matteElement&&(this.matteElement=null),this.maskManager&&(this.maskManager.destroy(),this.maskManager=null)},createRenderableComponents:function createRenderableComponents(){this.maskManager=new MaskElement(this.data,this,this.globalData)},addEffects:function addEffects(){},setMatte:function setMatte(){}},HBaseElement.prototype.getBaseElement=SVGBaseElement.prototype.getBaseElement,HBaseElement.prototype.destroyBaseElement=HBaseElement.prototype.destroy,HBaseElement.prototype.buildElementParenting=BaseRenderer.prototype.buildElementParenting,extendPrototype([BaseElement,TransformElement,HBaseElement,HierarchyElement,FrameElement,RenderableDOMElement],HSolidElement),HSolidElement.prototype.createContent=function(){var t;this.data.hasMask?((t=createNS("rect")).setAttribute("width",this.data.sw),t.setAttribute("height",this.data.sh),t.setAttribute("fill",this.data.sc),this.svgElement.setAttribute("width",this.data.sw),this.svgElement.setAttribute("height",this.data.sh)):((t=createTag("div")).style.width=this.data.sw+"px",t.style.height=this.data.sh+"px",t.style.backgroundColor=this.data.sc),this.layerElement.appendChild(t)},extendPrototype([BaseElement,TransformElement,HSolidElement,SVGShapeElement,HBaseElement,HierarchyElement,FrameElement,RenderableElement],HShapeElement),HShapeElement.prototype._renderShapeFrame=HShapeElement.prototype.renderInnerContent,HShapeElement.prototype.createContent=function(){var t;if(this.baseElement.style.fontSize=0,this.data.hasMask)this.layerElement.appendChild(this.shapesContainer),t=this.svgElement;else{t=createNS("svg");var e=this.comp.data?this.comp.data:this.globalData.compSize;t.setAttribute("width",e.w),t.setAttribute("height",e.h),t.appendChild(this.shapesContainer),this.layerElement.appendChild(t)}this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.shapesContainer,0,[],!0),this.filterUniqueShapes(),this.shapeCont=t},HShapeElement.prototype.getTransformedPoint=function(t,e){var r,i=t.length;for(r=0;r<i;r+=1)e=t[r].mProps.v.applyToPointArray(e[0],e[1],0);return e},HShapeElement.prototype.calculateShapeBoundingBox=function(t,e){var r,i,a,s,n,o=t.sh.v,h=t.transformers,l=o._length;if(!(l<=1)){for(r=0;r<l-1;r+=1)i=this.getTransformedPoint(h,o.v[r]),a=this.getTransformedPoint(h,o.o[r]),s=this.getTransformedPoint(h,o.i[r+1]),n=this.getTransformedPoint(h,o.v[r+1]),this.checkBounds(i,a,s,n,e);o.c&&(i=this.getTransformedPoint(h,o.v[r]),a=this.getTransformedPoint(h,o.o[r]),s=this.getTransformedPoint(h,o.i[0]),n=this.getTransformedPoint(h,o.v[0]),this.checkBounds(i,a,s,n,e))}},HShapeElement.prototype.checkBounds=function(t,e,r,i,a){this.getBoundsOfCurve(t,e,r,i);var s=this.shapeBoundingBox;a.x=bmMin(s.left,a.x),a.xMax=bmMax(s.right,a.xMax),a.y=bmMin(s.top,a.y),a.yMax=bmMax(s.bottom,a.yMax)},HShapeElement.prototype.shapeBoundingBox={left:0,right:0,top:0,bottom:0},HShapeElement.prototype.tempBoundingBox={x:0,xMax:0,y:0,yMax:0,width:0,height:0},HShapeElement.prototype.getBoundsOfCurve=function(t,e,r,i){for(var a,s,n,o,h,l,p,c=[[t[0],i[0]],[t[1],i[1]]],f=0;f<2;++f)s=6*t[f]-12*e[f]+6*r[f],a=-3*t[f]+9*e[f]-9*r[f]+3*i[f],n=3*e[f]-3*t[f],s|=0,n|=0,0==(a|=0)&&0===s||(0===a?(o=-n/s)>0&&o<1&&c[f].push(this.calculateF(o,t,e,r,i,f)):(h=s*s-4*n*a)>=0&&((l=(-s+bmSqrt(h))/(2*a))>0&&l<1&&c[f].push(this.calculateF(l,t,e,r,i,f)),(p=(-s-bmSqrt(h))/(2*a))>0&&p<1&&c[f].push(this.calculateF(p,t,e,r,i,f))));this.shapeBoundingBox.left=bmMin.apply(null,c[0]),this.shapeBoundingBox.top=bmMin.apply(null,c[1]),this.shapeBoundingBox.right=bmMax.apply(null,c[0]),this.shapeBoundingBox.bottom=bmMax.apply(null,c[1])},HShapeElement.prototype.calculateF=function(t,e,r,i,a,s){return bmPow(1-t,3)*e[s]+3*bmPow(1-t,2)*t*r[s]+3*(1-t)*bmPow(t,2)*i[s]+bmPow(t,3)*a[s]},HShapeElement.prototype.calculateBoundingBox=function(t,e){var r,i=t.length;for(r=0;r<i;r+=1)t[r]&&t[r].sh?this.calculateShapeBoundingBox(t[r],e):t[r]&&t[r].it?this.calculateBoundingBox(t[r].it,e):t[r]&&t[r].style&&t[r].w&&this.expandStrokeBoundingBox(t[r].w,e)},HShapeElement.prototype.expandStrokeBoundingBox=function(t,e){var r=0;if(t.keyframes){for(var i=0;i<t.keyframes.length;i+=1){var a=t.keyframes[i].s;a>r&&(r=a)}r*=t.mult}else r=t.v*t.mult;e.x-=r,e.xMax+=r,e.y-=r,e.yMax+=r},HShapeElement.prototype.currentBoxContains=function(t){return this.currentBBox.x<=t.x&&this.currentBBox.y<=t.y&&this.currentBBox.width+this.currentBBox.x>=t.x+t.width&&this.currentBBox.height+this.currentBBox.y>=t.y+t.height},HShapeElement.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var t=this.tempBoundingBox,e=999999;if(t.x=e,t.xMax=-e,t.y=e,t.yMax=-e,this.calculateBoundingBox(this.itemsData,t),t.width=t.xMax<t.x?0:t.xMax-t.x,t.height=t.yMax<t.y?0:t.yMax-t.y,this.currentBoxContains(t))return;var r=!1;if(this.currentBBox.w!==t.width&&(this.currentBBox.w=t.width,this.shapeCont.setAttribute("width",t.width),r=!0),this.currentBBox.h!==t.height&&(this.currentBBox.h=t.height,this.shapeCont.setAttribute("height",t.height),r=!0),r||this.currentBBox.x!==t.x||this.currentBBox.y!==t.y){this.currentBBox.w=t.width,this.currentBBox.h=t.height,this.currentBBox.x=t.x,this.currentBBox.y=t.y,this.shapeCont.setAttribute("viewBox",this.currentBBox.x+" "+this.currentBBox.y+" "+this.currentBBox.w+" "+this.currentBBox.h);var i=this.shapeCont.style,a="translate("+this.currentBBox.x+"px,"+this.currentBBox.y+"px)";i.transform=a,i.webkitTransform=a}}},extendPrototype([BaseElement,TransformElement,HBaseElement,HierarchyElement,FrameElement,RenderableDOMElement,ITextElement],HTextElement),HTextElement.prototype.createContent=function(){if(this.isMasked=this.checkMasks(),this.isMasked){this.renderType="svg",this.compW=this.comp.data.w,this.compH=this.comp.data.h,this.svgElement.setAttribute("width",this.compW),this.svgElement.setAttribute("height",this.compH);var t=createNS("g");this.maskedElement.appendChild(t),this.innerElem=t}else this.renderType="html",this.innerElem=this.layerElement;this.checkParenting()},HTextElement.prototype.buildNewText=function(){var t=this.textProperty.currentData;this.renderedLetters=createSizedArray(t.l?t.l.length:0);var e=this.innerElem.style,r=t.fc?this.buildColor(t.fc):"rgba(0,0,0,0)";e.fill=r,e.color=r,t.sc&&(e.stroke=this.buildColor(t.sc),e.strokeWidth=t.sw+"px");var i,a,s=this.globalData.fontManager.getFontByName(t.f);if(!this.globalData.fontManager.chars)if(e.fontSize=t.finalSize+"px",e.lineHeight=t.finalSize+"px",s.fClass)this.innerElem.className=s.fClass;else{e.fontFamily=s.fFamily;var n=t.fWeight,o=t.fStyle;e.fontStyle=o,e.fontWeight=n}var h,l,p,c=t.l;a=c.length;var f,m=this.mHelper,u="",d=0;for(i=0;i<a;i+=1){if(this.globalData.fontManager.chars?(this.textPaths[d]?h=this.textPaths[d]:((h=createNS("path")).setAttribute("stroke-linecap",lineCapEnum[1]),h.setAttribute("stroke-linejoin",lineJoinEnum[2]),h.setAttribute("stroke-miterlimit","4")),this.isMasked||(this.textSpans[d]?p=(l=this.textSpans[d]).children[0]:((l=createTag("div")).style.lineHeight=0,(p=createNS("svg")).appendChild(h),styleDiv(l)))):this.isMasked?h=this.textPaths[d]?this.textPaths[d]:createNS("text"):this.textSpans[d]?(l=this.textSpans[d],h=this.textPaths[d]):(styleDiv(l=createTag("span")),styleDiv(h=createTag("span")),l.appendChild(h)),this.globalData.fontManager.chars){var y,g=this.globalData.fontManager.getCharData(t.finalText[i],s.fStyle,this.globalData.fontManager.getFontByName(t.f).fFamily);if(y=g?g.data:null,m.reset(),y&&y.shapes&&y.shapes.length&&(f=y.shapes[0].it,m.scale(t.finalSize/100,t.finalSize/100),u=this.createPathShape(m,f),h.setAttribute("d",u)),this.isMasked)this.innerElem.appendChild(h);else{if(this.innerElem.appendChild(l),y&&y.shapes){document.body.appendChild(p);var v=p.getBBox();p.setAttribute("width",v.width+2),p.setAttribute("height",v.height+2),p.setAttribute("viewBox",v.x-1+" "+(v.y-1)+" "+(v.width+2)+" "+(v.height+2));var b=p.style,P="translate("+(v.x-1)+"px,"+(v.y-1)+"px)";b.transform=P,b.webkitTransform=P,c[i].yOffset=v.y-1}else p.setAttribute("width",1),p.setAttribute("height",1);l.appendChild(p)}}else if(h.textContent=c[i].val,h.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),this.isMasked)this.innerElem.appendChild(h);else{this.innerElem.appendChild(l);var x=h.style,S="translate3d(0,"+-t.finalSize/1.2+"px,0)";x.transform=S,x.webkitTransform=S}this.isMasked?this.textSpans[d]=h:this.textSpans[d]=l,this.textSpans[d].style.display="block",this.textPaths[d]=h,d+=1}for(;d<this.textSpans.length;)this.textSpans[d].style.display="none",d+=1},HTextElement.prototype.renderInnerContent=function(){var t;if(this.validateText(),this.data.singleShape){if(!this._isFirstFrame&&!this.lettersChangedFlag)return;if(this.isMasked&&this.finalTransform._matMdf){this.svgElement.setAttribute("viewBox",-this.finalTransform.mProp.p.v[0]+" "+-this.finalTransform.mProp.p.v[1]+" "+this.compW+" "+this.compH),t=this.svgElement.style;var e="translate("+-this.finalTransform.mProp.p.v[0]+"px,"+-this.finalTransform.mProp.p.v[1]+"px)";t.transform=e,t.webkitTransform=e}}if(this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag),this.lettersChangedFlag||this.textAnimator.lettersChangedFlag){var r,i,a,s,n,o=0,h=this.textAnimator.renderedLetters,l=this.textProperty.currentData.l;for(i=l.length,r=0;r<i;r+=1)l[r].n?o+=1:(s=this.textSpans[r],n=this.textPaths[r],a=h[o],o+=1,a._mdf.m&&(this.isMasked?s.setAttribute("transform",a.m):(s.style.webkitTransform=a.m,s.style.transform=a.m)),s.style.opacity=a.o,a.sw&&a._mdf.sw&&n.setAttribute("stroke-width",a.sw),a.sc&&a._mdf.sc&&n.setAttribute("stroke",a.sc),a.fc&&a._mdf.fc&&(n.setAttribute("fill",a.fc),n.style.color=a.fc));if(this.innerElem.getBBox&&!this.hidden&&(this._isFirstFrame||this._mdf)){var p=this.innerElem.getBBox();if(this.currentBBox.w!==p.width&&(this.currentBBox.w=p.width,this.svgElement.setAttribute("width",p.width)),this.currentBBox.h!==p.height&&(this.currentBBox.h=p.height,this.svgElement.setAttribute("height",p.height)),this.currentBBox.w!==p.width+2||this.currentBBox.h!==p.height+2||this.currentBBox.x!==p.x-1||this.currentBBox.y!==p.y-1){this.currentBBox.w=p.width+2,this.currentBBox.h=p.height+2,this.currentBBox.x=p.x-1,this.currentBBox.y=p.y-1,this.svgElement.setAttribute("viewBox",this.currentBBox.x+" "+this.currentBBox.y+" "+this.currentBBox.w+" "+this.currentBBox.h),t=this.svgElement.style;var c="translate("+this.currentBBox.x+"px,"+this.currentBBox.y+"px)";t.transform=c,t.webkitTransform=c}}}},extendPrototype([BaseElement,FrameElement,HierarchyElement],HCameraElement),HCameraElement.prototype.setup=function(){var t,e,r,i,a=this.comp.threeDElements.length;for(t=0;t<a;t+=1)if("3d"===(e=this.comp.threeDElements[t]).type){r=e.perspectiveElem.style,i=e.container.style;var s=this.pe.v+"px",n="0px 0px 0px",o="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";r.perspective=s,r.webkitPerspective=s,i.transformOrigin=n,i.mozTransformOrigin=n,i.webkitTransformOrigin=n,r.transform=o,r.webkitTransform=o}},HCameraElement.prototype.createElements=function(){},HCameraElement.prototype.hide=function(){},HCameraElement.prototype.renderFrame=function(){var t,e,r=this._isFirstFrame;if(this.hierarchy)for(e=this.hierarchy.length,t=0;t<e;t+=1)r=this.hierarchy[t].finalTransform.mProp._mdf||r;if(r||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){if(this.mat.reset(),this.hierarchy)for(t=e=this.hierarchy.length-1;t>=0;t-=1){var i=this.hierarchy[t].finalTransform.mProp;this.mat.translate(-i.p.v[0],-i.p.v[1],i.p.v[2]),this.mat.rotateX(-i.or.v[0]).rotateY(-i.or.v[1]).rotateZ(i.or.v[2]),this.mat.rotateX(-i.rx.v).rotateY(-i.ry.v).rotateZ(i.rz.v),this.mat.scale(1/i.s.v[0],1/i.s.v[1],1/i.s.v[2]),this.mat.translate(i.a.v[0],i.a.v[1],i.a.v[2])}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var a;a=this.p?[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]]:[this.px.v-this.a.v[0],this.py.v-this.a.v[1],this.pz.v-this.a.v[2]];var s=Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)+Math.pow(a[2],2)),n=[a[0]/s,a[1]/s,a[2]/s],o=Math.sqrt(n[2]*n[2]+n[0]*n[0]),h=Math.atan2(n[1],o),l=Math.atan2(n[0],-n[2]);this.mat.rotateY(l).rotateX(-h)}this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v);var p=!this._prevMat.equals(this.mat);if((p||this.pe._mdf)&&this.comp.threeDElements){var c,f,m;for(e=this.comp.threeDElements.length,t=0;t<e;t+=1)if("3d"===(c=this.comp.threeDElements[t]).type){if(p){var u=this.mat.toCSS();(m=c.container.style).transform=u,m.webkitTransform=u}this.pe._mdf&&((f=c.perspectiveElem.style).perspective=this.pe.v+"px",f.webkitPerspective=this.pe.v+"px")}this.mat.clone(this._prevMat)}}this._isFirstFrame=!1},HCameraElement.prototype.prepareFrame=function(t){this.prepareProperties(t,!0)},HCameraElement.prototype.destroy=function(){},HCameraElement.prototype.getBaseElement=function(){return null},extendPrototype([BaseElement,TransformElement,HBaseElement,HSolidElement,HierarchyElement,FrameElement,RenderableElement],HImageElement),HImageElement.prototype.createContent=function(){var t=this.globalData.getAssetsPath(this.assetData),e=new Image;this.data.hasMask?(this.imageElem=createNS("image"),this.imageElem.setAttribute("width",this.assetData.w+"px"),this.imageElem.setAttribute("height",this.assetData.h+"px"),this.imageElem.setAttributeNS("http://www.w3.org/1999/xlink","href",t),this.layerElement.appendChild(this.imageElem),this.baseElement.setAttribute("width",this.assetData.w),this.baseElement.setAttribute("height",this.assetData.h)):this.layerElement.appendChild(e),e.crossOrigin="anonymous",e.src=t,this.data.ln&&this.baseElement.setAttribute("id",this.data.ln)},extendPrototype([BaseRenderer],HybridRendererBase),HybridRendererBase.prototype.buildItem=SVGRenderer.prototype.buildItem,HybridRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;)this.pendingElements.pop().checkParenting()},HybridRendererBase.prototype.appendElementInPos=function(t,e){var r=t.getBaseElement();if(r){var i=this.layers[e];if(i.ddd&&this.supports3d)this.addTo3dContainer(r,e);else if(this.threeDElements)this.addTo3dContainer(r,e);else{for(var a,s,n=0;n<e;)this.elements[n]&&!0!==this.elements[n]&&this.elements[n].getBaseElement&&(s=this.elements[n],a=(this.layers[n].ddd?this.getThreeDContainerByPos(n):s.getBaseElement())||a),n+=1;a?i.ddd&&this.supports3d||this.layerElement.insertBefore(r,a):i.ddd&&this.supports3d||this.layerElement.appendChild(r)}}},HybridRendererBase.prototype.createShape=function(t){return this.supports3d?new HShapeElement(t,this.globalData,this):new SVGShapeElement(t,this.globalData,this)},HybridRendererBase.prototype.createText=function(t){return this.supports3d?new HTextElement(t,this.globalData,this):new SVGTextLottieElement(t,this.globalData,this)},HybridRendererBase.prototype.createCamera=function(t){return this.camera=new HCameraElement(t,this.globalData,this),this.camera},HybridRendererBase.prototype.createImage=function(t){return this.supports3d?new HImageElement(t,this.globalData,this):new IImageElement(t,this.globalData,this)},HybridRendererBase.prototype.createSolid=function(t){return this.supports3d?new HSolidElement(t,this.globalData,this):new ISolidElement(t,this.globalData,this)},HybridRendererBase.prototype.createNull=SVGRenderer.prototype.createNull,HybridRendererBase.prototype.getThreeDContainerByPos=function(t){for(var e=0,r=this.threeDElements.length;e<r;){if(this.threeDElements[e].startPos<=t&&this.threeDElements[e].endPos>=t)return this.threeDElements[e].perspectiveElem;e+=1}return null},HybridRendererBase.prototype.createThreeDContainer=function(t,e){var r,i,a=createTag("div");styleDiv(a);var s=createTag("div");if(styleDiv(s),"3d"===e){(r=a.style).width=this.globalData.compSize.w+"px",r.height=this.globalData.compSize.h+"px";var n="50% 50%";r.webkitTransformOrigin=n,r.mozTransformOrigin=n,r.transformOrigin=n;var o="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";(i=s.style).transform=o,i.webkitTransform=o}a.appendChild(s);var h={container:s,perspectiveElem:a,startPos:t,endPos:t,type:e};return this.threeDElements.push(h),h},HybridRendererBase.prototype.build3dContainers=function(){var t,e,r=this.layers.length,i="";for(t=0;t<r;t+=1)this.layers[t].ddd&&3!==this.layers[t].ty?("3d"!==i&&(i="3d",e=this.createThreeDContainer(t,"3d")),e.endPos=Math.max(e.endPos,t)):("2d"!==i&&(i="2d",e=this.createThreeDContainer(t,"2d")),e.endPos=Math.max(e.endPos,t));for(t=(r=this.threeDElements.length)-1;t>=0;t-=1)this.resizerElem.appendChild(this.threeDElements[t].perspectiveElem)},HybridRendererBase.prototype.addTo3dContainer=function(t,e){for(var r=0,i=this.threeDElements.length;r<i;){if(e<=this.threeDElements[r].endPos){for(var a,s=this.threeDElements[r].startPos;s<e;)this.elements[s]&&this.elements[s].getBaseElement&&(a=this.elements[s].getBaseElement()),s+=1;a?this.threeDElements[r].container.insertBefore(t,a):this.threeDElements[r].container.appendChild(t);break}r+=1}},HybridRendererBase.prototype.configAnimation=function(t){var e=createTag("div"),r=this.animationItem.wrapper,i=e.style;i.width=t.w+"px",i.height=t.h+"px",this.resizerElem=e,styleDiv(e),i.transformStyle="flat",i.mozTransformStyle="flat",i.webkitTransformStyle="flat",this.renderConfig.className&&e.setAttribute("class",this.renderConfig.className),r.appendChild(e),i.overflow="hidden";var a=createNS("svg");a.setAttribute("width","1"),a.setAttribute("height","1"),styleDiv(a),this.resizerElem.appendChild(a);var s=createNS("defs");a.appendChild(s),this.data=t,this.setupGlobalData(t,a),this.globalData.defs=s,this.layers=t.layers,this.layerElement=this.resizerElem,this.build3dContainers(),this.updateContainerSize()},HybridRendererBase.prototype.destroy=function(){var t;this.animationItem.wrapper&&(this.animationItem.wrapper.innerText=""),this.animationItem.container=null,this.globalData.defs=null;var e=this.layers?this.layers.length:0;for(t=0;t<e;t+=1)this.elements[t]&&this.elements[t].destroy&&this.elements[t].destroy();this.elements.length=0,this.destroyed=!0,this.animationItem=null},HybridRendererBase.prototype.updateContainerSize=function(){var t,e,r,i,a=this.animationItem.wrapper.offsetWidth,s=this.animationItem.wrapper.offsetHeight,n=a/s;this.globalData.compSize.w/this.globalData.compSize.h>n?(t=a/this.globalData.compSize.w,e=a/this.globalData.compSize.w,r=0,i=(s-this.globalData.compSize.h*(a/this.globalData.compSize.w))/2):(t=s/this.globalData.compSize.h,e=s/this.globalData.compSize.h,r=(a-this.globalData.compSize.w*(s/this.globalData.compSize.h))/2,i=0);var o=this.resizerElem.style;o.webkitTransform="matrix3d("+t+",0,0,0,0,"+e+",0,0,0,0,1,0,"+r+","+i+",0,1)",o.transform=o.webkitTransform},HybridRendererBase.prototype.renderFrame=SVGRenderer.prototype.renderFrame,HybridRendererBase.prototype.hide=function(){this.resizerElem.style.display="none"},HybridRendererBase.prototype.show=function(){this.resizerElem.style.display="block"},HybridRendererBase.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else{var t,e=this.globalData.compSize.w,r=this.globalData.compSize.h,i=this.threeDElements.length;for(t=0;t<i;t+=1){var a=this.threeDElements[t].perspectiveElem.style;a.webkitPerspective=Math.sqrt(Math.pow(e,2)+Math.pow(r,2))+"px",a.perspective=a.webkitPerspective}}},HybridRendererBase.prototype.searchExtraCompositions=function(t){var e,r=t.length,i=createTag("div");for(e=0;e<r;e+=1)if(t[e].xt){var a=this.createComp(t[e],i,this.globalData.comp,null);a.initExpressions(),this.globalData.projectInterface.registerComposition(a)}},extendPrototype([HybridRendererBase,ICompElement,HBaseElement],HCompElement),HCompElement.prototype._createBaseContainerElements=HCompElement.prototype.createContainerElements,HCompElement.prototype.createContainerElements=function(){this._createBaseContainerElements(),this.data.hasMask?(this.svgElement.setAttribute("width",this.data.w),this.svgElement.setAttribute("height",this.data.h),this.transformedElement=this.baseElement):this.transformedElement=this.layerElement},HCompElement.prototype.addTo3dContainer=function(t,e){for(var r,i=0;i<e;)this.elements[i]&&this.elements[i].getBaseElement&&(r=this.elements[i].getBaseElement()),i+=1;r?this.layerElement.insertBefore(t,r):this.layerElement.appendChild(t)},HCompElement.prototype.createComp=function(t){return this.supports3d?new HCompElement(t,this.globalData,this):new SVGCompElement(t,this.globalData,this)},extendPrototype([HybridRendererBase],HybridRenderer),HybridRenderer.prototype.createComp=function(t){return this.supports3d?new HCompElement(t,this.globalData,this):new SVGCompElement(t,this.globalData,this)};var CompExpressionInterface=function(t){function _thisLayerFunction(e){for(var r=0,i=t.layers.length;r<i;){if(t.layers[r].nm===e||t.layers[r].ind===e)return t.elements[r].layerInterface;r+=1}return null}return Object.defineProperty(_thisLayerFunction,"_name",{value:t.data.nm}),_thisLayerFunction.layer=_thisLayerFunction,_thisLayerFunction.pixelAspect=1,_thisLayerFunction.height=t.data.h||t.globalData.compSize.h,_thisLayerFunction.width=t.data.w||t.globalData.compSize.w,_thisLayerFunction.pixelAspect=1,_thisLayerFunction.frameDuration=1/t.globalData.frameRate,_thisLayerFunction.displayStartTime=0,_thisLayerFunction.numLayers=t.layers.length,_thisLayerFunction};function _typeof$2(t){return _typeof$2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof$2(t)}function seedRandom(t,e){var r=this,i=256,a="random",s=e.pow(i,6),n=e.pow(2,52),o=2*n,h=255;function ARC4(t){var e,r=t.length,a=this,s=0,n=a.i=a.j=0,o=a.S=[];for(r||(t=[r++]);s<i;)o[s]=s++;for(s=0;s<i;s++)o[s]=o[n=h&n+t[s%r]+(e=o[s])],o[n]=e;a.g=function(t){for(var e,r=0,s=a.i,n=a.j,o=a.S;t--;)e=o[s=h&s+1],r=r*i+o[h&(o[s]=o[n=h&n+e])+(o[n]=e)];return a.i=s,a.j=n,r}}function copy(t,e){return e.i=t.i,e.j=t.j,e.S=t.S.slice(),e}function flatten(t,e){var r,i=[],a=_typeof$2(t);if(e&&"object"==a)for(r in t)try{i.push(flatten(t[r],e-1))}catch(t){}return i.length?i:"string"==a?t:t+"\0"}function mixkey(t,e){for(var r,i=t+"",a=0;a<i.length;)e[h&a]=h&(r^=19*e[h&a])+i.charCodeAt(a++);return tostring(e)}function tostring(t){return String.fromCharCode.apply(0,t)}e["seed"+a]=function seedrandom(h,l,p){var c=[],f=mixkey(flatten((l=!0===l?{entropy:!0}:l||{}).entropy?[h,tostring(t)]:null===h?function autoseed(){try{var e=new Uint8Array(i);return(r.crypto||r.msCrypto).getRandomValues(e),tostring(e)}catch(e){var a=r.navigator,s=a&&a.plugins;return[+new Date,r,s,r.screen,tostring(t)]}}():h,3),c),m=new ARC4(c),u=function prng(){for(var t=m.g(6),e=s,r=0;t<n;)t=(t+r)*i,e*=i,r=m.g(1);for(;t>=o;)t/=2,e/=2,r>>>=1;return(t+r)/e};return u.int32=function(){return 0|m.g(4)},u.quick=function(){return m.g(4)/4294967296},u.double=u,mixkey(tostring(m.S),t),(l.pass||p||function(t,r,i,s){return s&&(s.S&©(s,m),t.state=function(){return copy(m,{})}),i?(e[a]=t,r):t})(u,f,"global"in l?l.global:this==e,l.state)},mixkey(e.random(),t)}function initialize$2(t){seedRandom([],t)}var propTypes={SHAPE:"shape"};function _typeof$1(t){return _typeof$1="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof$1(t)}var ExpressionManager=function(){var ob={},Math=BMMath,window=null,document=null,XMLHttpRequest=null,fetch=null,frames=null,_lottieGlobal={};function resetFrame(){_lottieGlobal={}}function $bm_isInstanceOfArray(t){return t.constructor===Array||t.constructor===Float32Array}function isNumerable(t,e){return"number"===t||e instanceof Number||"boolean"===t||"string"===t}function $bm_neg(t){var e=_typeof$1(t);if("number"===e||t instanceof Number||"boolean"===e)return-t;if($bm_isInstanceOfArray(t)){var r,i=t.length,a=[];for(r=0;r<i;r+=1)a[r]=-t[r];return a}return t.propType?t.v:-t}initialize$2(BMMath);var easeInBez=BezierFactory.getBezierEasing(.333,0,.833,.833,"easeIn").get,easeOutBez=BezierFactory.getBezierEasing(.167,.167,.667,1,"easeOut").get,easeInOutBez=BezierFactory.getBezierEasing(.33,0,.667,1,"easeInOut").get;function sum(t,e){var r=_typeof$1(t),i=_typeof$1(e);if(isNumerable(r,t)&&isNumerable(i,e)||"string"===r||"string"===i)return t+e;if($bm_isInstanceOfArray(t)&&isNumerable(i,e))return(t=t.slice(0))[0]+=e,t;if(isNumerable(r,t)&&$bm_isInstanceOfArray(e))return(e=e.slice(0))[0]=t+e[0],e;if($bm_isInstanceOfArray(t)&&$bm_isInstanceOfArray(e)){for(var a=0,s=t.length,n=e.length,o=[];a<s||a<n;)("number"==typeof t[a]||t[a]instanceof Number)&&("number"==typeof e[a]||e[a]instanceof Number)?o[a]=t[a]+e[a]:o[a]=void 0===e[a]?t[a]:t[a]||e[a],a+=1;return o}return 0}var add=sum;function sub(t,e){var r=_typeof$1(t),i=_typeof$1(e);if(isNumerable(r,t)&&isNumerable(i,e))return"string"===r&&(t=parseInt(t,10)),"string"===i&&(e=parseInt(e,10)),t-e;if($bm_isInstanceOfArray(t)&&isNumerable(i,e))return(t=t.slice(0))[0]-=e,t;if(isNumerable(r,t)&&$bm_isInstanceOfArray(e))return(e=e.slice(0))[0]=t-e[0],e;if($bm_isInstanceOfArray(t)&&$bm_isInstanceOfArray(e)){for(var a=0,s=t.length,n=e.length,o=[];a<s||a<n;)("number"==typeof t[a]||t[a]instanceof Number)&&("number"==typeof e[a]||e[a]instanceof Number)?o[a]=t[a]-e[a]:o[a]=void 0===e[a]?t[a]:t[a]||e[a],a+=1;return o}return 0}function mul(t,e){var r,i,a,s=_typeof$1(t),n=_typeof$1(e);if(isNumerable(s,t)&&isNumerable(n,e))return t*e;if($bm_isInstanceOfArray(t)&&isNumerable(n,e)){for(a=t.length,r=createTypedArray("float32",a),i=0;i<a;i+=1)r[i]=t[i]*e;return r}if(isNumerable(s,t)&&$bm_isInstanceOfArray(e)){for(a=e.length,r=createTypedArray("float32",a),i=0;i<a;i+=1)r[i]=t*e[i];return r}return 0}function div(t,e){var r,i,a,s=_typeof$1(t),n=_typeof$1(e);if(isNumerable(s,t)&&isNumerable(n,e))return t/e;if($bm_isInstanceOfArray(t)&&isNumerable(n,e)){for(a=t.length,r=createTypedArray("float32",a),i=0;i<a;i+=1)r[i]=t[i]/e;return r}if(isNumerable(s,t)&&$bm_isInstanceOfArray(e)){for(a=e.length,r=createTypedArray("float32",a),i=0;i<a;i+=1)r[i]=t/e[i];return r}return 0}function mod(t,e){return"string"==typeof t&&(t=parseInt(t,10)),"string"==typeof e&&(e=parseInt(e,10)),t%e}var $bm_sum=sum,$bm_sub=sub,$bm_mul=mul,$bm_div=div,$bm_mod=mod;function clamp(t,e,r){if(e>r){var i=r;r=e,e=i}return Math.min(Math.max(t,e),r)}function radiansToDegrees(t){return t/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(t){return t*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(t,e){if("number"==typeof t||t instanceof Number)return e=e||0,Math.abs(t-e);var r;e||(e=helperLengthArray);var i=Math.min(t.length,e.length),a=0;for(r=0;r<i;r+=1)a+=Math.pow(e[r]-t[r],2);return Math.sqrt(a)}function normalize(t){return div(t,length(t))}function rgbToHsl(t){var e,r,i=t[0],a=t[1],s=t[2],n=Math.max(i,a,s),o=Math.min(i,a,s),h=(n+o)/2;if(n===o)e=0,r=0;else{var l=n-o;switch(r=h>.5?l/(2-n-o):l/(n+o),n){case i:e=(a-s)/l+(a<s?6:0);break;case a:e=(s-i)/l+2;break;case s:e=(i-a)/l+4}e/=6}return[e,r,h,t[3]]}function hue2rgb(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}function hslToRgb(t){var e,r,i,a=t[0],s=t[1],n=t[2];if(0===s)e=n,i=n,r=n;else{var o=n<.5?n*(1+s):n+s-n*s,h=2*n-o;e=hue2rgb(h,o,a+1/3),r=hue2rgb(h,o,a),i=hue2rgb(h,o,a-1/3)}return[e,r,i,t[3]]}function linear(t,e,r,i,a){if(void 0!==i&&void 0!==a||(i=e,a=r,e=0,r=1),r<e){var s=r;r=e,e=s}if(t<=e)return i;if(t>=r)return a;var n,o=r===e?0:(t-e)/(r-e);if(!i.length)return i+(a-i)*o;var h=i.length,l=createTypedArray("float32",h);for(n=0;n<h;n+=1)l[n]=i[n]+(a[n]-i[n])*o;return l}function random(t,e){if(void 0===e&&(void 0===t?(t=0,e=1):(e=t,t=void 0)),e.length){var r,i=e.length;t||(t=createTypedArray("float32",i));var a=createTypedArray("float32",i),s=BMMath.random();for(r=0;r<i;r+=1)a[r]=t[r]+s*(e[r]-t[r]);return a}return void 0===t&&(t=0),t+BMMath.random()*(e-t)}function createPath(t,e,r,i){var a,s=t.length,n=shapePool.newElement();n.setPathData(!!i,s);var o,h,l=[0,0];for(a=0;a<s;a+=1)o=e&&e[a]?e[a]:l,h=r&&r[a]?r[a]:l,n.setTripleAt(t[a][0],t[a][1],h[0]+t[a][0],h[1]+t[a][1],o[0]+t[a][0],o[1]+t[a][1],a,!0);return n}function initiateExpression(elem,data,property){function noOp(t){return t}if(!elem.globalData.renderConfig.runExpressions)return noOp;var val=data.x,needsVelocity=/velocity(?![\w\d])/.test(val),_needsRandom=-1!==val.indexOf("random"),elemType=elem.data.ty,transform,$bm_transform,content,effect,thisProperty=property;thisProperty._name=elem.data.nm,thisProperty.valueAtTime=thisProperty.getValueAtTime,Object.defineProperty(thisProperty,"value",{get:function get(){return thisProperty.v}}),elem.comp.frameDuration=1/elem.comp.globalData.frameRate,elem.comp.displayStartTime=0;var inPoint=elem.data.ip/elem.comp.globalData.frameRate,outPoint=elem.data.op/elem.comp.globalData.frameRate,width=elem.data.sw?elem.data.sw:0,height=elem.data.sh?elem.data.sh:0,name=elem.data.nm,loopIn,loop_in,loopOut,loop_out,smooth,toWorld,fromWorld,fromComp,toComp,fromCompToSurface,position,rotation,anchorPoint,scale,thisLayer,thisComp,mask,valueAtTime,velocityAtTime,scoped_bm_rt,expression_function=eval("[function _expression_function(){"+val+";scoped_bm_rt=$bm_rt}]")[0],numKeys=property.kf?data.k.length:0,active=!this.data||!0!==this.data.hd,wiggle=function wiggle(t,e){var r,i,a=this.pv.length?this.pv.length:1,s=createTypedArray("float32",a),n=Math.floor(5*time);for(r=0,i=0;r<n;){for(i=0;i<a;i+=1)s[i]+=-e+2*e*BMMath.random();r+=1}var o=5*time,h=o-Math.floor(o),l=createTypedArray("float32",a);if(a>1){for(i=0;i<a;i+=1)l[i]=this.pv[i]+s[i]+(-e+2*e*BMMath.random())*h;return l}return this.pv+s[0]+(-e+2*e*BMMath.random())*h}.bind(this);function loopInDuration(t,e){return loopIn(t,e,!0)}function loopOutDuration(t,e){return loopOut(t,e,!0)}thisProperty.loopIn&&(loopIn=thisProperty.loopIn.bind(thisProperty),loop_in=loopIn),thisProperty.loopOut&&(loopOut=thisProperty.loopOut.bind(thisProperty),loop_out=loopOut),thisProperty.smooth&&(smooth=thisProperty.smooth.bind(thisProperty)),this.getValueAtTime&&(valueAtTime=this.getValueAtTime.bind(this)),this.getVelocityAtTime&&(velocityAtTime=this.getVelocityAtTime.bind(this));var comp=elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface),time,velocity,value,text,textIndex,textTotal,selectorValue;function lookAt(t,e){var r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],i=Math.atan2(r[0],Math.sqrt(r[1]*r[1]+r[2]*r[2]))/degToRads;return[-Math.atan2(r[1],r[2])/degToRads,i,0]}function easeOut(t,e,r,i,a){return applyEase(easeOutBez,t,e,r,i,a)}function easeIn(t,e,r,i,a){return applyEase(easeInBez,t,e,r,i,a)}function ease(t,e,r,i,a){return applyEase(easeInOutBez,t,e,r,i,a)}function applyEase(t,e,r,i,a,s){void 0===a?(a=r,s=i):e=(e-r)/(i-r),e>1?e=1:e<0&&(e=0);var n=t(e);if($bm_isInstanceOfArray(a)){var o,h=a.length,l=createTypedArray("float32",h);for(o=0;o<h;o+=1)l[o]=(s[o]-a[o])*n+a[o];return l}return(s-a)*n+a}function nearestKey(t){var e,r,i,a=data.k.length;if(data.k.length&&"number"!=typeof data.k[0])if(r=-1,(t*=elem.comp.globalData.frameRate)<data.k[0].t)r=1,i=data.k[0].t;else{for(e=0;e<a-1;e+=1){if(t===data.k[e].t){r=e+1,i=data.k[e].t;break}if(t>data.k[e].t&&t<data.k[e+1].t){t-data.k[e].t>data.k[e+1].t-t?(r=e+2,i=data.k[e+1].t):(r=e+1,i=data.k[e].t);break}}-1===r&&(r=e+1,i=data.k[e].t)}else r=0,i=0;var s={};return s.index=r,s.time=i/elem.comp.globalData.frameRate,s}function key(t){var e,r,i;if(!data.k.length||"number"==typeof data.k[0])throw new Error("The property has no keyframe at index "+t);t-=1,e={time:data.k[t].t/elem.comp.globalData.frameRate,value:[]};var a=Object.prototype.hasOwnProperty.call(data.k[t],"s")?data.k[t].s:data.k[t-1].e;for(i=a.length,r=0;r<i;r+=1)e[r]=a[r],e.value[r]=a[r];return e}function framesToTime(t,e){return e||(e=elem.comp.globalData.frameRate),t/e}function timeToFrames(t,e){return t||0===t||(t=time),e||(e=elem.comp.globalData.frameRate),t*e}function seedRandom(t){BMMath.seedrandom(randSeed+t)}function sourceRectAtTime(){return elem.sourceRectAtTime()}function substring(t,e){return"string"==typeof value?void 0===e?value.substring(t):value.substring(t,e):""}function substr(t,e){return"string"==typeof value?void 0===e?value.substr(t):value.substr(t,e):""}function posterizeTime(t){time=0===t?0:Math.floor(time*t)/t,value=valueAtTime(time)}var index=elem.data.ind,hasParent=!(!elem.hierarchy||!elem.hierarchy.length),parent,randSeed=Math.floor(1e6*Math.random()),globalData=elem.globalData;function executeExpression(t){return value=t,this.frameExpressionId===elem.globalData.frameId&&"textSelector"!==this.propType?value:("textSelector"===this.propType&&(textIndex=this.textIndex,textTotal=this.textTotal,selectorValue=this.selectorValue),thisLayer||(text=elem.layerInterface.text,thisLayer=elem.layerInterface,thisComp=elem.comp.compInterface,toWorld=thisLayer.toWorld.bind(thisLayer),fromWorld=thisLayer.fromWorld.bind(thisLayer),fromComp=thisLayer.fromComp.bind(thisLayer),toComp=thisLayer.toComp.bind(thisLayer),mask=thisLayer.mask?thisLayer.mask.bind(thisLayer):null,fromCompToSurface=fromComp),transform||(transform=elem.layerInterface("ADBE Transform Group"),$bm_transform=transform,transform&&(anchorPoint=transform.anchorPoint)),4!==elemType||content||(content=thisLayer("ADBE Root Vectors Group")),effect||(effect=thisLayer(4)),(hasParent=!(!elem.hierarchy||!elem.hierarchy.length))&&!parent&&(parent=elem.hierarchy[0].layerInterface),time=this.comp.renderedFrame/this.comp.globalData.frameRate,_needsRandom&&seedRandom(randSeed+time),needsVelocity&&(velocity=velocityAtTime(time)),expression_function(),this.frameExpressionId=elem.globalData.frameId,scoped_bm_rt=scoped_bm_rt.propType===propTypes.SHAPE?scoped_bm_rt.v:scoped_bm_rt)}return executeExpression.__preventDeadCodeRemoval=[$bm_transform,anchorPoint,time,velocity,inPoint,outPoint,width,height,name,loop_in,loop_out,smooth,toComp,fromCompToSurface,toWorld,fromWorld,mask,position,rotation,scale,thisComp,numKeys,active,wiggle,loopInDuration,loopOutDuration,comp,lookAt,easeOut,easeIn,ease,nearestKey,key,text,textIndex,textTotal,selectorValue,framesToTime,timeToFrames,sourceRectAtTime,substring,substr,posterizeTime,index,globalData],executeExpression}return ob.initiateExpression=initiateExpression,ob.__preventDeadCodeRemoval=[window,document,XMLHttpRequest,fetch,frames,$bm_neg,add,$bm_sum,$bm_sub,$bm_mul,$bm_div,$bm_mod,clamp,radians_to_degrees,degreesToRadians,degrees_to_radians,normalize,rgbToHsl,hslToRgb,linear,random,createPath,_lottieGlobal],ob.resetFrame=resetFrame,ob}(),Expressions=function(){var t={initExpressions:function initExpressions(t){var e=0,r=[];t.renderer.compInterface=CompExpressionInterface(t.renderer),t.renderer.globalData.projectInterface.registerComposition(t.renderer),t.renderer.globalData.pushExpression=function pushExpression(){e+=1},t.renderer.globalData.popExpression=function popExpression(){0==(e-=1)&&function releaseInstances(){var t,e=r.length;for(t=0;t<e;t+=1)r[t].release();r.length=0}()},t.renderer.globalData.registerExpressionProperty=function registerExpressionProperty(t){-1===r.indexOf(t)&&r.push(t)}}};return t.resetFrame=ExpressionManager.resetFrame,t}(),MaskManagerInterface=function(){function MaskInterface(t,e){this._mask=t,this._data=e}return Object.defineProperty(MaskInterface.prototype,"maskPath",{get:function get(){return this._mask.prop.k&&this._mask.prop.getValue(),this._mask.prop}}),Object.defineProperty(MaskInterface.prototype,"maskOpacity",{get:function get(){return this._mask.op.k&&this._mask.op.getValue(),100*this._mask.op.v}}),function MaskManager(t){var e,r=createSizedArray(t.viewData.length),i=t.viewData.length;for(e=0;e<i;e+=1)r[e]=new MaskInterface(t.viewData[e],t.masksProperties[e]);return function maskFunction(a){for(e=0;e<i;){if(t.masksProperties[e].nm===a)return r[e];e+=1}return null}}}(),ExpressionPropertyInterface=function(){var t={pv:0,v:0,mult:1},e={pv:[0,0,0],v:[0,0,0],mult:1};function completeProperty(t,e,r){Object.defineProperty(t,"velocity",{get:function get(){return e.getVelocityAtTime(e.comp.currentFrame)}}),t.numKeys=e.keyframes?e.keyframes.length:0,t.key=function(i){if(!t.numKeys)return 0;var a="";a="s"in e.keyframes[i-1]?e.keyframes[i-1].s:"e"in e.keyframes[i-2]?e.keyframes[i-2].e:e.keyframes[i-2].s;var s="unidimensional"===r?new Number(a):Object.assign({},a);return s.time=e.keyframes[i-1].t/e.elem.comp.globalData.frameRate,s.value="unidimensional"===r?a[0]:a,s},t.valueAtTime=e.getValueAtTime,t.speedAtTime=e.getSpeedAtTime,t.velocityAtTime=e.getVelocityAtTime,t.propertyGroup=e.propertyGroup}function defaultGetter(){return t}return function(r){return r?"unidimensional"===r.propType?function UnidimensionalPropertyInterface(e){e&&"pv"in e||(e=t);var r=1/e.mult,i=e.pv*r,a=new Number(i);return a.value=i,completeProperty(a,e,"unidimensional"),function(){return e.k&&e.getValue(),i=e.v*r,a.value!==i&&((a=new Number(i)).value=i,a[0]=i,completeProperty(a,e,"unidimensional")),a}}(r):function MultidimensionalPropertyInterface(t){t&&"pv"in t||(t=e);var r=1/t.mult,i=t.data&&t.data.l||t.pv.length,a=createTypedArray("float32",i),s=createTypedArray("float32",i);return a.value=s,completeProperty(a,t,"multidimensional"),function(){t.k&&t.getValue();for(var e=0;e<i;e+=1)s[e]=t.v[e]*r,a[e]=s[e];return a}}(r):defaultGetter}}(),TransformExpressionInterface=function(t){function _thisFunction(t){switch(t){case"scale":case"Scale":case"ADBE Scale":case 6:return _thisFunction.scale;case"rotation":case"Rotation":case"ADBE Rotation":case"ADBE Rotate Z":case 10:return _thisFunction.rotation;case"ADBE Rotate X":return _thisFunction.xRotation;case"ADBE Rotate Y":return _thisFunction.yRotation;case"position":case"Position":case"ADBE Position":case 2:return _thisFunction.position;case"ADBE Position_0":return _thisFunction.xPosition;case"ADBE Position_1":return _thisFunction.yPosition;case"ADBE Position_2":return _thisFunction.zPosition;case"anchorPoint":case"AnchorPoint":case"Anchor Point":case"ADBE AnchorPoint":case 1:return _thisFunction.anchorPoint;case"opacity":case"Opacity":case 11:return _thisFunction.opacity;default:return null}}var e,r,i,a;return Object.defineProperty(_thisFunction,"rotation",{get:ExpressionPropertyInterface(t.r||t.rz)}),Object.defineProperty(_thisFunction,"zRotation",{get:ExpressionPropertyInterface(t.rz||t.r)}),Object.defineProperty(_thisFunction,"xRotation",{get:ExpressionPropertyInterface(t.rx)}),Object.defineProperty(_thisFunction,"yRotation",{get:ExpressionPropertyInterface(t.ry)}),Object.defineProperty(_thisFunction,"scale",{get:ExpressionPropertyInterface(t.s)}),t.p?a=ExpressionPropertyInterface(t.p):(e=ExpressionPropertyInterface(t.px),r=ExpressionPropertyInterface(t.py),t.pz&&(i=ExpressionPropertyInterface(t.pz))),Object.defineProperty(_thisFunction,"position",{get:function get(){return t.p?a():[e(),r(),i?i():0]}}),Object.defineProperty(_thisFunction,"xPosition",{get:ExpressionPropertyInterface(t.px)}),Object.defineProperty(_thisFunction,"yPosition",{get:ExpressionPropertyInterface(t.py)}),Object.defineProperty(_thisFunction,"zPosition",{get:ExpressionPropertyInterface(t.pz)}),Object.defineProperty(_thisFunction,"anchorPoint",{get:ExpressionPropertyInterface(t.a)}),Object.defineProperty(_thisFunction,"opacity",{get:ExpressionPropertyInterface(t.o)}),Object.defineProperty(_thisFunction,"skew",{get:ExpressionPropertyInterface(t.sk)}),Object.defineProperty(_thisFunction,"skewAxis",{get:ExpressionPropertyInterface(t.sa)}),Object.defineProperty(_thisFunction,"orientation",{get:ExpressionPropertyInterface(t.or)}),_thisFunction},LayerExpressionInterface=function(){function getMatrix(t){var e=new Matrix;return void 0!==t?this._elem.finalTransform.mProp.getValueAtTime(t).clone(e):this._elem.finalTransform.mProp.applyToMatrix(e),e}function toWorldVec(t,e){var r=this.getMatrix(e);return r.props[12]=0,r.props[13]=0,r.props[14]=0,this.applyPoint(r,t)}function toWorld(t,e){var r=this.getMatrix(e);return this.applyPoint(r,t)}function fromWorldVec(t,e){var r=this.getMatrix(e);return r.props[12]=0,r.props[13]=0,r.props[14]=0,this.invertPoint(r,t)}function fromWorld(t,e){var r=this.getMatrix(e);return this.invertPoint(r,t)}function applyPoint(t,e){if(this._elem.hierarchy&&this._elem.hierarchy.length){var r,i=this._elem.hierarchy.length;for(r=0;r<i;r+=1)this._elem.hierarchy[r].finalTransform.mProp.applyToMatrix(t)}return t.applyToPointArray(e[0],e[1],e[2]||0)}function invertPoint(t,e){if(this._elem.hierarchy&&this._elem.hierarchy.length){var r,i=this._elem.hierarchy.length;for(r=0;r<i;r+=1)this._elem.hierarchy[r].finalTransform.mProp.applyToMatrix(t)}return t.inversePoint(e)}function fromComp(t){var e=new Matrix;if(e.reset(),this._elem.finalTransform.mProp.applyToMatrix(e),this._elem.hierarchy&&this._elem.hierarchy.length){var r,i=this._elem.hierarchy.length;for(r=0;r<i;r+=1)this._elem.hierarchy[r].finalTransform.mProp.applyToMatrix(e);return e.inversePoint(t)}return e.inversePoint(t)}function sampleImage(){return[1,1,1,1]}return function(t){var e;function _thisLayerFunction(t){switch(t){case"ADBE Root Vectors Group":case"Contents":case 2:return _thisLayerFunction.shapeInterface;case 1:case 6:case"Transform":case"transform":case"ADBE Transform Group":return e;case 4:case"ADBE Effect Parade":case"effects":case"Effects":return _thisLayerFunction.effect;case"ADBE Text Properties":return _thisLayerFunction.textInterface;default:return null}}_thisLayerFunction.getMatrix=getMatrix,_thisLayerFunction.invertPoint=invertPoint,_thisLayerFunction.applyPoint=applyPoint,_thisLayerFunction.toWorld=toWorld,_thisLayerFunction.toWorldVec=toWorldVec,_thisLayerFunction.fromWorld=fromWorld,_thisLayerFunction.fromWorldVec=fromWorldVec,_thisLayerFunction.toComp=toWorld,_thisLayerFunction.fromComp=fromComp,_thisLayerFunction.sampleImage=sampleImage,_thisLayerFunction.sourceRectAtTime=t.sourceRectAtTime.bind(t),_thisLayerFunction._elem=t;var r=getDescriptor(e=TransformExpressionInterface(t.finalTransform.mProp),"anchorPoint");return Object.defineProperties(_thisLayerFunction,{hasParent:{get:function get(){return t.hierarchy.length}},parent:{get:function get(){return t.hierarchy[0].layerInterface}},rotation:getDescriptor(e,"rotation"),scale:getDescriptor(e,"scale"),position:getDescriptor(e,"position"),opacity:getDescriptor(e,"opacity"),anchorPoint:r,anchor_point:r,transform:{get:function get(){return e}},active:{get:function get(){return t.isInRange}}}),_thisLayerFunction.startTime=t.data.st,_thisLayerFunction.index=t.data.ind,_thisLayerFunction.source=t.data.refId,_thisLayerFunction.height=0===t.data.ty?t.data.h:100,_thisLayerFunction.width=0===t.data.ty?t.data.w:100,_thisLayerFunction.inPoint=t.data.ip/t.comp.globalData.frameRate,_thisLayerFunction.outPoint=t.data.op/t.comp.globalData.frameRate,_thisLayerFunction._name=t.data.nm,_thisLayerFunction.registerMaskInterface=function _registerMaskInterface(e){_thisLayerFunction.mask=new MaskManagerInterface(e,t)},_thisLayerFunction.registerEffectsInterface=function _registerEffectsInterface(t){_thisLayerFunction.effect=t},_thisLayerFunction}}(),propertyGroupFactory=function(t,e){return function(r){return(r=void 0===r?1:r)<=0?t:e(r-1)}},PropertyInterface=function(t,e){var r={_name:t};return function _propertyGroup(t){return(t=void 0===t?1:t)<=0?r:e(t-1)}},EffectsExpressionInterface=function(){function createGroupInterface(t,e,r,i){function groupInterface(e){for(var r=t.ef,i=0,a=r.length;i<a;){if(e===r[i].nm||e===r[i].mn||e===r[i].ix)return 5===r[i].ty?n[i]:n[i]();i+=1}throw new Error}var a,s=propertyGroupFactory(groupInterface,r),n=[],o=t.ef.length;for(a=0;a<o;a+=1)5===t.ef[a].ty?n.push(createGroupInterface(t.ef[a],e.effectElements[a],e.effectElements[a].propertyGroup,i)):n.push(createValueInterface(e.effectElements[a],t.ef[a].ty,i,s));return"ADBE Color Control"===t.mn&&Object.defineProperty(groupInterface,"color",{get:function get(){return n[0]()}}),Object.defineProperties(groupInterface,{numProperties:{get:function get(){return t.np}},_name:{value:t.nm},propertyGroup:{value:s}}),groupInterface.enabled=0!==t.en,groupInterface.active=groupInterface.enabled,groupInterface}function createValueInterface(t,e,r,i){var a=ExpressionPropertyInterface(t.p);return t.p.setGroupProperty&&t.p.setGroupProperty(PropertyInterface("",i)),function interfaceFunction(){return 10===e?r.comp.compInterface(t.p.v):a()}}return{createEffectsInterface:function createEffectsInterface(t,e){if(t.effectsManager){var r,i=[],a=t.data.ef,s=t.effectsManager.effectElements.length;for(r=0;r<s;r+=1)i.push(createGroupInterface(a[r],t.effectsManager.effectElements[r],e,t));var n=t.data.ef||[],o=function groupInterface(t){for(r=0,s=n.length;r<s;){if(t===n[r].nm||t===n[r].mn||t===n[r].ix)return i[r];r+=1}return null};return Object.defineProperty(o,"numProperties",{get:function get(){return n.length}}),o}return null}}}(),ShapePathInterface=function pathInterfaceFactory(t,e,r){var i=e.sh;function interfaceFunction(t){return"Shape"===t||"shape"===t||"Path"===t||"path"===t||"ADBE Vector Shape"===t||2===t?interfaceFunction.path:null}var a=propertyGroupFactory(interfaceFunction,r);return i.setGroupProperty(PropertyInterface("Path",a)),Object.defineProperties(interfaceFunction,{path:{get:function get(){return i.k&&i.getValue(),i}},shape:{get:function get(){return i.k&&i.getValue(),i}},_name:{value:t.nm},ix:{value:t.ix},propertyIndex:{value:t.ix},mn:{value:t.mn},propertyGroup:{value:r}}),interfaceFunction},ShapeExpressionInterface=function(){function iterateElements(t,e,r){var i,a=[],s=t?t.length:0;for(i=0;i<s;i+=1)"gr"===t[i].ty?a.push(groupInterfaceFactory(t[i],e[i],r)):"fl"===t[i].ty?a.push(fillInterfaceFactory(t[i],e[i],r)):"st"===t[i].ty?a.push(strokeInterfaceFactory(t[i],e[i],r)):"tm"===t[i].ty?a.push(trimInterfaceFactory(t[i],e[i],r)):"tr"===t[i].ty||("el"===t[i].ty?a.push(ellipseInterfaceFactory(t[i],e[i],r)):"sr"===t[i].ty?a.push(starInterfaceFactory(t[i],e[i],r)):"sh"===t[i].ty?a.push(ShapePathInterface(t[i],e[i],r)):"rc"===t[i].ty?a.push(rectInterfaceFactory(t[i],e[i],r)):"rd"===t[i].ty?a.push(roundedInterfaceFactory(t[i],e[i],r)):"rp"===t[i].ty?a.push(repeaterInterfaceFactory(t[i],e[i],r)):"gf"===t[i].ty?a.push(gradientFillInterfaceFactory(t[i],e[i],r)):a.push(defaultInterfaceFactory(t[i],e[i])));return a}function groupInterfaceFactory(t,e,r){var i=function _interfaceFunction(t){switch(t){case"ADBE Vectors Group":case"Contents":case 2:return i.content;default:return i.transform}};i.propertyGroup=propertyGroupFactory(i,r);var a=function contentsInterfaceFactory(t,e,r){var i,a=function _interfaceFunction(t){for(var e=0,r=i.length;e<r;){if(i[e]._name===t||i[e].mn===t||i[e].propertyIndex===t||i[e].ix===t||i[e].ind===t)return i[e];e+=1}return"number"==typeof t?i[t-1]:null};a.propertyGroup=propertyGroupFactory(a,r),i=iterateElements(t.it,e.it,a.propertyGroup),a.numProperties=i.length;var s=transformInterfaceFactory(t.it[t.it.length-1],e.it[e.it.length-1],a.propertyGroup);return a.transform=s,a.propertyIndex=t.cix,a._name=t.nm,a}(t,e,i.propertyGroup),s=transformInterfaceFactory(t.it[t.it.length-1],e.it[e.it.length-1],i.propertyGroup);return i.content=a,i.transform=s,Object.defineProperty(i,"_name",{get:function get(){return t.nm}}),i.numProperties=t.np,i.propertyIndex=t.ix,i.nm=t.nm,i.mn=t.mn,i}function fillInterfaceFactory(t,e,r){function interfaceFunction(t){return"Color"===t||"color"===t?interfaceFunction.color:"Opacity"===t||"opacity"===t?interfaceFunction.opacity:null}return Object.defineProperties(interfaceFunction,{color:{get:ExpressionPropertyInterface(e.c)},opacity:{get:ExpressionPropertyInterface(e.o)},_name:{value:t.nm},mn:{value:t.mn}}),e.c.setGroupProperty(PropertyInterface("Color",r)),e.o.setGroupProperty(PropertyInterface("Opacity",r)),interfaceFunction}function gradientFillInterfaceFactory(t,e,r){function interfaceFunction(t){return"Start Point"===t||"start point"===t?interfaceFunction.startPoint:"End Point"===t||"end point"===t?interfaceFunction.endPoint:"Opacity"===t||"opacity"===t?interfaceFunction.opacity:null}return Object.defineProperties(interfaceFunction,{startPoint:{get:ExpressionPropertyInterface(e.s)},endPoint:{get:ExpressionPropertyInterface(e.e)},opacity:{get:ExpressionPropertyInterface(e.o)},type:{get:function get(){return"a"}},_name:{value:t.nm},mn:{value:t.mn}}),e.s.setGroupProperty(PropertyInterface("Start Point",r)),e.e.setGroupProperty(PropertyInterface("End Point",r)),e.o.setGroupProperty(PropertyInterface("Opacity",r)),interfaceFunction}function defaultInterfaceFactory(){return function interfaceFunction(){return null}}function strokeInterfaceFactory(t,e,r){var i,a=propertyGroupFactory(interfaceFunction,r),s=propertyGroupFactory(o,a);function addPropertyToDashOb(r){Object.defineProperty(o,t.d[r].nm,{get:ExpressionPropertyInterface(e.d.dataProps[r].p)})}var n=t.d?t.d.length:0,o={};for(i=0;i<n;i+=1)addPropertyToDashOb(i),e.d.dataProps[i].p.setGroupProperty(s);function interfaceFunction(t){return"Color"===t||"color"===t?interfaceFunction.color:"Opacity"===t||"opacity"===t?interfaceFunction.opacity:"Stroke Width"===t||"stroke width"===t?interfaceFunction.strokeWidth:null}return Object.defineProperties(interfaceFunction,{color:{get:ExpressionPropertyInterface(e.c)},opacity:{get:ExpressionPropertyInterface(e.o)},strokeWidth:{get:ExpressionPropertyInterface(e.w)},dash:{get:function get(){return o}},_name:{value:t.nm},mn:{value:t.mn}}),e.c.setGroupProperty(PropertyInterface("Color",a)),e.o.setGroupProperty(PropertyInterface("Opacity",a)),e.w.setGroupProperty(PropertyInterface("Stroke Width",a)),interfaceFunction}function trimInterfaceFactory(t,e,r){function interfaceFunction(e){return e===t.e.ix||"End"===e||"end"===e?interfaceFunction.end:e===t.s.ix?interfaceFunction.start:e===t.o.ix?interfaceFunction.offset:null}var i=propertyGroupFactory(interfaceFunction,r);return interfaceFunction.propertyIndex=t.ix,e.s.setGroupProperty(PropertyInterface("Start",i)),e.e.setGroupProperty(PropertyInterface("End",i)),e.o.setGroupProperty(PropertyInterface("Offset",i)),interfaceFunction.propertyIndex=t.ix,interfaceFunction.propertyGroup=r,Object.defineProperties(interfaceFunction,{start:{get:ExpressionPropertyInterface(e.s)},end:{get:ExpressionPropertyInterface(e.e)},offset:{get:ExpressionPropertyInterface(e.o)},_name:{value:t.nm}}),interfaceFunction.mn=t.mn,interfaceFunction}function transformInterfaceFactory(t,e,r){function interfaceFunction(e){return t.a.ix===e||"Anchor Point"===e?interfaceFunction.anchorPoint:t.o.ix===e||"Opacity"===e?interfaceFunction.opacity:t.p.ix===e||"Position"===e?interfaceFunction.position:t.r.ix===e||"Rotation"===e||"ADBE Vector Rotation"===e?interfaceFunction.rotation:t.s.ix===e||"Scale"===e?interfaceFunction.scale:t.sk&&t.sk.ix===e||"Skew"===e?interfaceFunction.skew:t.sa&&t.sa.ix===e||"Skew Axis"===e?interfaceFunction.skewAxis:null}var i=propertyGroupFactory(interfaceFunction,r);return e.transform.mProps.o.setGroupProperty(PropertyInterface("Opacity",i)),e.transform.mProps.p.setGroupProperty(PropertyInterface("Position",i)),e.transform.mProps.a.setGroupProperty(PropertyInterface("Anchor Point",i)),e.transform.mProps.s.setGroupProperty(PropertyInterface("Scale",i)),e.transform.mProps.r.setGroupProperty(PropertyInterface("Rotation",i)),e.transform.mProps.sk&&(e.transform.mProps.sk.setGroupProperty(PropertyInterface("Skew",i)),e.transform.mProps.sa.setGroupProperty(PropertyInterface("Skew Angle",i))),e.transform.op.setGroupProperty(PropertyInterface("Opacity",i)),Object.defineProperties(interfaceFunction,{opacity:{get:ExpressionPropertyInterface(e.transform.mProps.o)},position:{get:ExpressionPropertyInterface(e.transform.mProps.p)},anchorPoint:{get:ExpressionPropertyInterface(e.transform.mProps.a)},scale:{get:ExpressionPropertyInterface(e.transform.mProps.s)},rotation:{get:ExpressionPropertyInterface(e.transform.mProps.r)},skew:{get:ExpressionPropertyInterface(e.transform.mProps.sk)},skewAxis:{get:ExpressionPropertyInterface(e.transform.mProps.sa)},_name:{value:t.nm}}),interfaceFunction.ty="tr",interfaceFunction.mn=t.mn,interfaceFunction.propertyGroup=r,interfaceFunction}function ellipseInterfaceFactory(t,e,r){function interfaceFunction(e){return t.p.ix===e?interfaceFunction.position:t.s.ix===e?interfaceFunction.size:null}var i=propertyGroupFactory(interfaceFunction,r);interfaceFunction.propertyIndex=t.ix;var a="tm"===e.sh.ty?e.sh.prop:e.sh;return a.s.setGroupProperty(PropertyInterface("Size",i)),a.p.setGroupProperty(PropertyInterface("Position",i)),Object.defineProperties(interfaceFunction,{size:{get:ExpressionPropertyInterface(a.s)},position:{get:ExpressionPropertyInterface(a.p)},_name:{value:t.nm}}),interfaceFunction.mn=t.mn,interfaceFunction}function starInterfaceFactory(t,e,r){function interfaceFunction(e){return t.p.ix===e?interfaceFunction.position:t.r.ix===e?interfaceFunction.rotation:t.pt.ix===e?interfaceFunction.points:t.or.ix===e||"ADBE Vector Star Outer Radius"===e?interfaceFunction.outerRadius:t.os.ix===e?interfaceFunction.outerRoundness:!t.ir||t.ir.ix!==e&&"ADBE Vector Star Inner Radius"!==e?t.is&&t.is.ix===e?interfaceFunction.innerRoundness:null:interfaceFunction.innerRadius}var i=propertyGroupFactory(interfaceFunction,r),a="tm"===e.sh.ty?e.sh.prop:e.sh;return interfaceFunction.propertyIndex=t.ix,a.or.setGroupProperty(PropertyInterface("Outer Radius",i)),a.os.setGroupProperty(PropertyInterface("Outer Roundness",i)),a.pt.setGroupProperty(PropertyInterface("Points",i)),a.p.setGroupProperty(PropertyInterface("Position",i)),a.r.setGroupProperty(PropertyInterface("Rotation",i)),t.ir&&(a.ir.setGroupProperty(PropertyInterface("Inner Radius",i)),a.is.setGroupProperty(PropertyInterface("Inner Roundness",i))),Object.defineProperties(interfaceFunction,{position:{get:ExpressionPropertyInterface(a.p)},rotation:{get:ExpressionPropertyInterface(a.r)},points:{get:ExpressionPropertyInterface(a.pt)},outerRadius:{get:ExpressionPropertyInterface(a.or)},outerRoundness:{get:ExpressionPropertyInterface(a.os)},innerRadius:{get:ExpressionPropertyInterface(a.ir)},innerRoundness:{get:ExpressionPropertyInterface(a.is)},_name:{value:t.nm}}),interfaceFunction.mn=t.mn,interfaceFunction}function rectInterfaceFactory(t,e,r){function interfaceFunction(e){return t.p.ix===e?interfaceFunction.position:t.r.ix===e?interfaceFunction.roundness:t.s.ix===e||"Size"===e||"ADBE Vector Rect Size"===e?interfaceFunction.size:null}var i=propertyGroupFactory(interfaceFunction,r),a="tm"===e.sh.ty?e.sh.prop:e.sh;return interfaceFunction.propertyIndex=t.ix,a.p.setGroupProperty(PropertyInterface("Position",i)),a.s.setGroupProperty(PropertyInterface("Size",i)),a.r.setGroupProperty(PropertyInterface("Rotation",i)),Object.defineProperties(interfaceFunction,{position:{get:ExpressionPropertyInterface(a.p)},roundness:{get:ExpressionPropertyInterface(a.r)},size:{get:ExpressionPropertyInterface(a.s)},_name:{value:t.nm}}),interfaceFunction.mn=t.mn,interfaceFunction}function roundedInterfaceFactory(t,e,r){function interfaceFunction(e){return t.r.ix===e||"Round Corners 1"===e?interfaceFunction.radius:null}var i=propertyGroupFactory(interfaceFunction,r),a=e;return interfaceFunction.propertyIndex=t.ix,a.rd.setGroupProperty(PropertyInterface("Radius",i)),Object.defineProperties(interfaceFunction,{radius:{get:ExpressionPropertyInterface(a.rd)},_name:{value:t.nm}}),interfaceFunction.mn=t.mn,interfaceFunction}function repeaterInterfaceFactory(t,e,r){function interfaceFunction(e){return t.c.ix===e||"Copies"===e?interfaceFunction.copies:t.o.ix===e||"Offset"===e?interfaceFunction.offset:null}var i=propertyGroupFactory(interfaceFunction,r),a=e;return interfaceFunction.propertyIndex=t.ix,a.c.setGroupProperty(PropertyInterface("Copies",i)),a.o.setGroupProperty(PropertyInterface("Offset",i)),Object.defineProperties(interfaceFunction,{copies:{get:ExpressionPropertyInterface(a.c)},offset:{get:ExpressionPropertyInterface(a.o)},_name:{value:t.nm}}),interfaceFunction.mn=t.mn,interfaceFunction}return function(t,e,r){var i;function _interfaceFunction(t){if("number"==typeof t)return 0===(t=void 0===t?1:t)?r:i[t-1];for(var e=0,a=i.length;e<a;){if(i[e]._name===t)return i[e];e+=1}return null}return _interfaceFunction.propertyGroup=propertyGroupFactory(_interfaceFunction,function parentGroupWrapper(){return r}),i=iterateElements(t,e,_interfaceFunction.propertyGroup),_interfaceFunction.numProperties=i.length,_interfaceFunction._name="Contents",_interfaceFunction}}(),TextExpressionInterface=function(t){var e;function _thisLayerFunction(t){return"ADBE Text Document"===t?_thisLayerFunction.sourceText:null}return Object.defineProperty(_thisLayerFunction,"sourceText",{get:function get(){t.textProperty.getValue();var r=t.textProperty.currentData.t;return e&&r===e.value||((e=new String(r)).value=r||new String(r),Object.defineProperty(e,"style",{get:function get(){return{fillColor:t.textProperty.currentData.fc}}})),e}}),_thisLayerFunction};function _typeof(t){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof(t)}var FootageInterface=(dataInterfaceFactory=function dataInterfaceFactory(t){function interfaceFunction(t){return"Outline"===t?interfaceFunction.outlineInterface():null}return interfaceFunction._name="Outline",interfaceFunction.outlineInterface=function outlineInterfaceFactory(t){var e="",r=t.getFootageData();function searchProperty(t){if(r[t])return e=t,"object"===_typeof(r=r[t])?searchProperty:r;var i=t.indexOf(e);if(-1!==i){var a=parseInt(t.substr(i+e.length),10);return"object"===_typeof(r=r[a])?searchProperty:r}return""}return function init(){return e="",r=t.getFootageData(),searchProperty}}(t),interfaceFunction},function(t){function _interfaceFunction(t){return"Data"===t?_interfaceFunction.dataInterface:null}return _interfaceFunction._name="Data",_interfaceFunction.dataInterface=dataInterfaceFactory(t),_interfaceFunction}),dataInterfaceFactory,interfaces={layer:LayerExpressionInterface,effects:EffectsExpressionInterface,comp:CompExpressionInterface,shape:ShapeExpressionInterface,text:TextExpressionInterface,footage:FootageInterface};function getInterface(t){return interfaces[t]||null}var expressionHelpers={searchExpressions:function searchExpressions(t,e,r){e.x&&(r.k=!0,r.x=!0,r.initiateExpression=ExpressionManager.initiateExpression,r.effectsSequence.push(r.initiateExpression(t,e,r).bind(r)))},getSpeedAtTime:function getSpeedAtTime(t){var e=this.getValueAtTime(t),r=this.getValueAtTime(t+-.01),i=0;if(e.length){var a;for(a=0;a<e.length;a+=1)i+=Math.pow(r[a]-e[a],2);i=100*Math.sqrt(i)}else i=0;return i},getVelocityAtTime:function getVelocityAtTime(t){if(void 0!==this.vel)return this.vel;var e,r,i=-.001,a=this.getValueAtTime(t),s=this.getValueAtTime(t+i);if(a.length)for(e=createTypedArray("float32",a.length),r=0;r<a.length;r+=1)e[r]=(s[r]-a[r])/i;else e=(s-a)/i;return e},getValueAtTime:function getValueAtTime(t){return t*=this.elem.globalData.frameRate,(t-=this.offsetTime)!==this._cachingAtTime.lastFrame&&(this._cachingAtTime.lastIndex=this._cachingAtTime.lastFrame<t?this._cachingAtTime.lastIndex:0,this._cachingAtTime.value=this.interpolateValue(t,this._cachingAtTime),this._cachingAtTime.lastFrame=t),this._cachingAtTime.value},getStaticValueAtTime:function getStaticValueAtTime(){return this.pv},setGroupProperty:function setGroupProperty(t){this.propertyGroup=t}};function addPropertyDecorator(){function loopOut(t,e,r){if(!this.k||!this.keyframes)return this.pv;t=t?t.toLowerCase():"";var i,a,s,n,o,h=this.comp.renderedFrame,l=this.keyframes,p=l[l.length-1].t;if(h<=p)return this.pv;if(r?a=p-(i=e?Math.abs(p-this.elem.comp.globalData.frameRate*e):Math.max(0,p-this.elem.data.ip)):((!e||e>l.length-1)&&(e=l.length-1),i=p-(a=l[l.length-1-e].t)),"pingpong"===t){if(Math.floor((h-a)/i)%2!=0)return this.getValueAtTime((i-(h-a)%i+a)/this.comp.globalData.frameRate,0)}else{if("offset"===t){var c=this.getValueAtTime(a/this.comp.globalData.frameRate,0),f=this.getValueAtTime(p/this.comp.globalData.frameRate,0),m=this.getValueAtTime(((h-a)%i+a)/this.comp.globalData.frameRate,0),u=Math.floor((h-a)/i);if(this.pv.length){for(n=(o=new Array(c.length)).length,s=0;s<n;s+=1)o[s]=(f[s]-c[s])*u+m[s];return o}return(f-c)*u+m}if("continue"===t){var d=this.getValueAtTime(p/this.comp.globalData.frameRate,0),y=this.getValueAtTime((p-.001)/this.comp.globalData.frameRate,0);if(this.pv.length){for(n=(o=new Array(d.length)).length,s=0;s<n;s+=1)o[s]=d[s]+(d[s]-y[s])*((h-p)/this.comp.globalData.frameRate)/5e-4;return o}return d+(h-p)/.001*(d-y)}}return this.getValueAtTime(((h-a)%i+a)/this.comp.globalData.frameRate,0)}function loopIn(t,e,r){if(!this.k)return this.pv;t=t?t.toLowerCase():"";var i,a,s,n,o,h=this.comp.renderedFrame,l=this.keyframes,p=l[0].t;if(h>=p)return this.pv;if(r?a=p+(i=e?Math.abs(this.elem.comp.globalData.frameRate*e):Math.max(0,this.elem.data.op-p)):((!e||e>l.length-1)&&(e=l.length-1),i=(a=l[e].t)-p),"pingpong"===t){if(Math.floor((p-h)/i)%2==0)return this.getValueAtTime(((p-h)%i+p)/this.comp.globalData.frameRate,0)}else{if("offset"===t){var c=this.getValueAtTime(p/this.comp.globalData.frameRate,0),f=this.getValueAtTime(a/this.comp.globalData.frameRate,0),m=this.getValueAtTime((i-(p-h)%i+p)/this.comp.globalData.frameRate,0),u=Math.floor((p-h)/i)+1;if(this.pv.length){for(n=(o=new Array(c.length)).length,s=0;s<n;s+=1)o[s]=m[s]-(f[s]-c[s])*u;return o}return m-(f-c)*u}if("continue"===t){var d=this.getValueAtTime(p/this.comp.globalData.frameRate,0),y=this.getValueAtTime((p+.001)/this.comp.globalData.frameRate,0);if(this.pv.length){for(n=(o=new Array(d.length)).length,s=0;s<n;s+=1)o[s]=d[s]+(d[s]-y[s])*(p-h)/.001;return o}return d+(d-y)*(p-h)/.001}}return this.getValueAtTime((i-((p-h)%i+p))/this.comp.globalData.frameRate,0)}function smooth(t,e){if(!this.k)return this.pv;if(t=.5*(t||.4),(e=Math.floor(e||5))<=1)return this.pv;var r,i,a=this.comp.renderedFrame/this.comp.globalData.frameRate,s=a-t,n=e>1?(a+t-s)/(e-1):1,o=0,h=0;for(r=this.pv.length?createTypedArray("float32",this.pv.length):0;o<e;){if(i=this.getValueAtTime(s+o*n),this.pv.length)for(h=0;h<this.pv.length;h+=1)r[h]+=i[h];else r+=i;o+=1}if(this.pv.length)for(h=0;h<this.pv.length;h+=1)r[h]/=e;else r/=e;return r}function getTransformValueAtTime(t){this._transformCachingAtTime||(this._transformCachingAtTime={v:new Matrix});var e=this._transformCachingAtTime.v;if(e.cloneFromProps(this.pre.props),this.appliedTransformations<1){var r=this.a.getValueAtTime(t);e.translate(-r[0]*this.a.mult,-r[1]*this.a.mult,r[2]*this.a.mult)}if(this.appliedTransformations<2){var i=this.s.getValueAtTime(t);e.scale(i[0]*this.s.mult,i[1]*this.s.mult,i[2]*this.s.mult)}if(this.sk&&this.appliedTransformations<3){var a=this.sk.getValueAtTime(t),s=this.sa.getValueAtTime(t);e.skewFromAxis(-a*this.sk.mult,s*this.sa.mult)}if(this.r&&this.appliedTransformations<4){var n=this.r.getValueAtTime(t);e.rotate(-n*this.r.mult)}else if(!this.r&&this.appliedTransformations<4){var o=this.rz.getValueAtTime(t),h=this.ry.getValueAtTime(t),l=this.rx.getValueAtTime(t),p=this.or.getValueAtTime(t);e.rotateZ(-o*this.rz.mult).rotateY(h*this.ry.mult).rotateX(l*this.rx.mult).rotateZ(-p[2]*this.or.mult).rotateY(p[1]*this.or.mult).rotateX(p[0]*this.or.mult)}if(this.data.p&&this.data.p.s){var c=this.px.getValueAtTime(t),f=this.py.getValueAtTime(t);if(this.data.p.z){var m=this.pz.getValueAtTime(t);e.translate(c*this.px.mult,f*this.py.mult,-m*this.pz.mult)}else e.translate(c*this.px.mult,f*this.py.mult,0)}else{var u=this.p.getValueAtTime(t);e.translate(u[0]*this.p.mult,u[1]*this.p.mult,-u[2]*this.p.mult)}return e}function getTransformStaticValueAtTime(){return this.v.clone(new Matrix)}var t=TransformPropertyFactory.getTransformProperty;TransformPropertyFactory.getTransformProperty=function(e,r,i){var a=t(e,r,i);return a.dynamicProperties.length?a.getValueAtTime=getTransformValueAtTime.bind(a):a.getValueAtTime=getTransformStaticValueAtTime.bind(a),a.setGroupProperty=expressionHelpers.setGroupProperty,a};var e=PropertyFactory.getProp;PropertyFactory.getProp=function(t,r,i,a,s){var n=e(t,r,i,a,s);n.kf?n.getValueAtTime=expressionHelpers.getValueAtTime.bind(n):n.getValueAtTime=expressionHelpers.getStaticValueAtTime.bind(n),n.setGroupProperty=expressionHelpers.setGroupProperty,n.loopOut=loopOut,n.loopIn=loopIn,n.smooth=smooth,n.getVelocityAtTime=expressionHelpers.getVelocityAtTime.bind(n),n.getSpeedAtTime=expressionHelpers.getSpeedAtTime.bind(n),n.numKeys=1===r.a?r.k.length:0,n.propertyIndex=r.ix;var o=0;return 0!==i&&(o=createTypedArray("float32",1===r.a?r.k[0].s.length:r.k.length)),n._cachingAtTime={lastFrame:initialDefaultFrame,lastIndex:0,value:o},expressionHelpers.searchExpressions(t,r,n),n.k&&s.addDynamicProperty(n),n};var r=ShapePropertyFactory.getConstructorFunction(),i=ShapePropertyFactory.getKeyframedConstructorFunction();function ShapeExpressions(){}ShapeExpressions.prototype={vertices:function vertices(t,e){this.k&&this.getValue();var r,i=this.v;void 0!==e&&(i=this.getValueAtTime(e,0));var a=i._length,vertices=i[t],s=i.v,n=createSizedArray(a);for(r=0;r<a;r+=1)n[r]="i"===t||"o"===t?[vertices[r][0]-s[r][0],vertices[r][1]-s[r][1]]:[vertices[r][0],vertices[r][1]];return n},points:function points(t){return this.vertices("v",t)},inTangents:function inTangents(t){return this.vertices("i",t)},outTangents:function outTangents(t){return this.vertices("o",t)},isClosed:function isClosed(){return this.v.c},pointOnPath:function pointOnPath(t,e){var r=this.v;void 0!==e&&(r=this.getValueAtTime(e,0)),this._segmentsLength||(this._segmentsLength=bez.getSegmentsLength(r));for(var i,a=this._segmentsLength,s=a.lengths,n=a.totalLength*t,o=0,h=s.length,l=0;o<h;){if(l+s[o].addedLength>n){var p=o,c=r.c&&o===h-1?0:o+1,f=(n-l)/s[o].addedLength;i=bez.getPointInSegment(r.v[p],r.v[c],r.o[p],r.i[c],f,s[o]);break}l+=s[o].addedLength,o+=1}return i||(i=r.c?[r.v[0][0],r.v[0][1]]:[r.v[r._length-1][0],r.v[r._length-1][1]]),i},vectorOnPath:function vectorOnPath(t,e,r){1==t?t=this.v.c:0==t&&(t=.999);var i=this.pointOnPath(t,e),a=this.pointOnPath(t+.001,e),s=a[0]-i[0],n=a[1]-i[1],o=Math.sqrt(Math.pow(s,2)+Math.pow(n,2));return 0===o?[0,0]:"tangent"===r?[s/o,n/o]:[-n/o,s/o]},tangentOnPath:function tangentOnPath(t,e){return this.vectorOnPath(t,e,"tangent")},normalOnPath:function normalOnPath(t,e){return this.vectorOnPath(t,e,"normal")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([ShapeExpressions],r),extendPrototype([ShapeExpressions],i),i.prototype.getValueAtTime=function getShapeValueAtTime(t){return this._cachingAtTime||(this._cachingAtTime={shapeValue:shapePool.clone(this.pv),lastIndex:0,lastTime:initialDefaultFrame}),t*=this.elem.globalData.frameRate,(t-=this.offsetTime)!==this._cachingAtTime.lastTime&&(this._cachingAtTime.lastIndex=this._cachingAtTime.lastTime<t?this._caching.lastIndex:0,this._cachingAtTime.lastTime=t,this.interpolateShape(t,this._cachingAtTime.shapeValue,this._cachingAtTime)),this._cachingAtTime.shapeValue},i.prototype.initiateExpression=ExpressionManager.initiateExpression;var a=ShapePropertyFactory.getShapeProp;ShapePropertyFactory.getShapeProp=function(t,e,r,i,s){var n=a(t,e,r,i,s);return n.propertyIndex=e.ix,n.lock=!1,3===r?expressionHelpers.searchExpressions(t,e.pt,n):4===r&&expressionHelpers.searchExpressions(t,e.ks,n),n.k&&t.addDynamicProperty(n),n}}function initialize$1(){addPropertyDecorator()}function addDecorator(){TextProperty.prototype.getExpressionValue=function(t,e){var r=this.calculateExpression(e);if(t.t!==r){var i={};return this.copyData(i,t),i.t=r.toString(),i.__complete=!1,i}return t},TextProperty.prototype.searchProperty=function(){var t=this.searchKeyframes(),e=this.searchExpressions();return this.kf=t||e,this.kf},TextProperty.prototype.searchExpressions=function searchExpressions(){return this.data.d.x?(this.calculateExpression=ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this),this.addEffect(this.getExpressionValue.bind(this)),!0):null}}function initialize(){addDecorator()}function SVGComposableEffect(){}SVGComposableEffect.prototype={createMergeNode:function createMergeNode(t,e){var r,i,a=createNS("feMerge");for(a.setAttribute("result",t),i=0;i<e.length;i+=1)(r=createNS("feMergeNode")).setAttribute("in",e[i]),a.appendChild(r),a.appendChild(r);return a}};var linearFilterValue="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";function SVGTintFilter(t,e,r,i,a){this.filterManager=e;var s=createNS("feColorMatrix");s.setAttribute("type","matrix"),s.setAttribute("color-interpolation-filters","linearRGB"),s.setAttribute("values",linearFilterValue+" 1 0"),this.linearFilter=s,s.setAttribute("result",i+"_tint_1"),t.appendChild(s),(s=createNS("feColorMatrix")).setAttribute("type","matrix"),s.setAttribute("color-interpolation-filters","sRGB"),s.setAttribute("values","1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"),s.setAttribute("result",i+"_tint_2"),t.appendChild(s),this.matrixFilter=s;var n=this.createMergeNode(i,[a,i+"_tint_1",i+"_tint_2"]);t.appendChild(n)}function SVGFillFilter(t,e,r,i){this.filterManager=e;var a=createNS("feColorMatrix");a.setAttribute("type","matrix"),a.setAttribute("color-interpolation-filters","sRGB"),a.setAttribute("values","1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"),a.setAttribute("result",i),t.appendChild(a),this.matrixFilter=a}function SVGStrokeEffect(t,e,r){this.initialized=!1,this.filterManager=e,this.elem=r,this.paths=[]}function SVGTritoneFilter(t,e,r,i){this.filterManager=e;var a=createNS("feColorMatrix");a.setAttribute("type","matrix"),a.setAttribute("color-interpolation-filters","linearRGB"),a.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"),t.appendChild(a);var s=createNS("feComponentTransfer");s.setAttribute("color-interpolation-filters","sRGB"),s.setAttribute("result",i),this.matrixFilter=s;var n=createNS("feFuncR");n.setAttribute("type","table"),s.appendChild(n),this.feFuncR=n;var o=createNS("feFuncG");o.setAttribute("type","table"),s.appendChild(o),this.feFuncG=o;var h=createNS("feFuncB");h.setAttribute("type","table"),s.appendChild(h),this.feFuncB=h,t.appendChild(s)}function SVGProLevelsFilter(t,e,r,i){this.filterManager=e;var a=this.filterManager.effectElements,s=createNS("feComponentTransfer");(a[10].p.k||0!==a[10].p.v||a[11].p.k||1!==a[11].p.v||a[12].p.k||1!==a[12].p.v||a[13].p.k||0!==a[13].p.v||a[14].p.k||1!==a[14].p.v)&&(this.feFuncR=this.createFeFunc("feFuncR",s)),(a[17].p.k||0!==a[17].p.v||a[18].p.k||1!==a[18].p.v||a[19].p.k||1!==a[19].p.v||a[20].p.k||0!==a[20].p.v||a[21].p.k||1!==a[21].p.v)&&(this.feFuncG=this.createFeFunc("feFuncG",s)),(a[24].p.k||0!==a[24].p.v||a[25].p.k||1!==a[25].p.v||a[26].p.k||1!==a[26].p.v||a[27].p.k||0!==a[27].p.v||a[28].p.k||1!==a[28].p.v)&&(this.feFuncB=this.createFeFunc("feFuncB",s)),(a[31].p.k||0!==a[31].p.v||a[32].p.k||1!==a[32].p.v||a[33].p.k||1!==a[33].p.v||a[34].p.k||0!==a[34].p.v||a[35].p.k||1!==a[35].p.v)&&(this.feFuncA=this.createFeFunc("feFuncA",s)),(this.feFuncR||this.feFuncG||this.feFuncB||this.feFuncA)&&(s.setAttribute("color-interpolation-filters","sRGB"),t.appendChild(s)),(a[3].p.k||0!==a[3].p.v||a[4].p.k||1!==a[4].p.v||a[5].p.k||1!==a[5].p.v||a[6].p.k||0!==a[6].p.v||a[7].p.k||1!==a[7].p.v)&&((s=createNS("feComponentTransfer")).setAttribute("color-interpolation-filters","sRGB"),s.setAttribute("result",i),t.appendChild(s),this.feFuncRComposed=this.createFeFunc("feFuncR",s),this.feFuncGComposed=this.createFeFunc("feFuncG",s),this.feFuncBComposed=this.createFeFunc("feFuncB",s))}function SVGDropShadowEffect(t,e,r,i,a){var s=e.container.globalData.renderConfig.filterSize,n=e.data.fs||s;t.setAttribute("x",n.x||s.x),t.setAttribute("y",n.y||s.y),t.setAttribute("width",n.width||s.width),t.setAttribute("height",n.height||s.height),this.filterManager=e;var o=createNS("feGaussianBlur");o.setAttribute("in","SourceAlpha"),o.setAttribute("result",i+"_drop_shadow_1"),o.setAttribute("stdDeviation","0"),this.feGaussianBlur=o,t.appendChild(o);var h=createNS("feOffset");h.setAttribute("dx","25"),h.setAttribute("dy","0"),h.setAttribute("in",i+"_drop_shadow_1"),h.setAttribute("result",i+"_drop_shadow_2"),this.feOffset=h,t.appendChild(h);var l=createNS("feFlood");l.setAttribute("flood-color","#00ff00"),l.setAttribute("flood-opacity","1"),l.setAttribute("result",i+"_drop_shadow_3"),this.feFlood=l,t.appendChild(l);var p=createNS("feComposite");p.setAttribute("in",i+"_drop_shadow_3"),p.setAttribute("in2",i+"_drop_shadow_2"),p.setAttribute("operator","in"),p.setAttribute("result",i+"_drop_shadow_4"),t.appendChild(p);var c=this.createMergeNode(i,[i+"_drop_shadow_4",a]);t.appendChild(c)}extendPrototype([SVGComposableEffect],SVGTintFilter),SVGTintFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e=this.filterManager.effectElements[0].p.v,r=this.filterManager.effectElements[1].p.v,i=this.filterManager.effectElements[2].p.v/100;this.linearFilter.setAttribute("values",linearFilterValue+" "+i+" 0"),this.matrixFilter.setAttribute("values",r[0]-e[0]+" 0 0 0 "+e[0]+" "+(r[1]-e[1])+" 0 0 0 "+e[1]+" "+(r[2]-e[2])+" 0 0 0 "+e[2]+" 0 0 0 1 0")}},SVGFillFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e=this.filterManager.effectElements[2].p.v,r=this.filterManager.effectElements[6].p.v;this.matrixFilter.setAttribute("values","0 0 0 0 "+e[0]+" 0 0 0 0 "+e[1]+" 0 0 0 0 "+e[2]+" 0 0 0 "+r+" 0")}},SVGStrokeEffect.prototype.initialize=function(){var t,e,r,i,a=this.elem.layerElement.children||this.elem.layerElement.childNodes;for(1===this.filterManager.effectElements[1].p.v?(i=this.elem.maskManager.masksProperties.length,r=0):i=1+(r=this.filterManager.effectElements[0].p.v-1),(e=createNS("g")).setAttribute("fill","none"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-dashoffset",1);r<i;r+=1)t=createNS("path"),e.appendChild(t),this.paths.push({p:t,m:r});if(3===this.filterManager.effectElements[10].p.v){var s=createNS("mask"),n=createElementID();s.setAttribute("id",n),s.setAttribute("mask-type","alpha"),s.appendChild(e),this.elem.globalData.defs.appendChild(s);var o=createNS("g");for(o.setAttribute("mask","url("+getLocationHref()+"#"+n+")");a[0];)o.appendChild(a[0]);this.elem.layerElement.appendChild(o),this.masker=s,e.setAttribute("stroke","#fff")}else if(1===this.filterManager.effectElements[10].p.v||2===this.filterManager.effectElements[10].p.v){if(2===this.filterManager.effectElements[10].p.v)for(a=this.elem.layerElement.children||this.elem.layerElement.childNodes;a.length;)this.elem.layerElement.removeChild(a[0]);this.elem.layerElement.appendChild(e),this.elem.layerElement.removeAttribute("mask"),e.setAttribute("stroke","#fff")}this.initialized=!0,this.pathMasker=e},SVGStrokeEffect.prototype.renderFrame=function(t){var e;this.initialized||this.initialize();var r,i,a=this.paths.length;for(e=0;e<a;e+=1)if(-1!==this.paths[e].m&&(r=this.elem.maskManager.viewData[this.paths[e].m],i=this.paths[e].p,(t||this.filterManager._mdf||r.prop._mdf)&&i.setAttribute("d",r.lastPath),t||this.filterManager.effectElements[9].p._mdf||this.filterManager.effectElements[4].p._mdf||this.filterManager.effectElements[7].p._mdf||this.filterManager.effectElements[8].p._mdf||r.prop._mdf)){var s;if(0!==this.filterManager.effectElements[7].p.v||100!==this.filterManager.effectElements[8].p.v){var n=.01*Math.min(this.filterManager.effectElements[7].p.v,this.filterManager.effectElements[8].p.v),o=.01*Math.max(this.filterManager.effectElements[7].p.v,this.filterManager.effectElements[8].p.v),h=i.getTotalLength();s="0 0 0 "+h*n+" ";var l,p=h*(o-n),c=1+2*this.filterManager.effectElements[4].p.v*this.filterManager.effectElements[9].p.v*.01,f=Math.floor(p/c);for(l=0;l<f;l+=1)s+="1 "+2*this.filterManager.effectElements[4].p.v*this.filterManager.effectElements[9].p.v*.01+" ";s+="0 "+10*h+" 0 0"}else s="1 "+2*this.filterManager.effectElements[4].p.v*this.filterManager.effectElements[9].p.v*.01;i.setAttribute("stroke-dasharray",s)}if((t||this.filterManager.effectElements[4].p._mdf)&&this.pathMasker.setAttribute("stroke-width",2*this.filterManager.effectElements[4].p.v),(t||this.filterManager.effectElements[6].p._mdf)&&this.pathMasker.setAttribute("opacity",this.filterManager.effectElements[6].p.v),(1===this.filterManager.effectElements[10].p.v||2===this.filterManager.effectElements[10].p.v)&&(t||this.filterManager.effectElements[3].p._mdf)){var m=this.filterManager.effectElements[3].p.v;this.pathMasker.setAttribute("stroke","rgb("+bmFloor(255*m[0])+","+bmFloor(255*m[1])+","+bmFloor(255*m[2])+")")}},SVGTritoneFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e=this.filterManager.effectElements[0].p.v,r=this.filterManager.effectElements[1].p.v,i=this.filterManager.effectElements[2].p.v,a=i[0]+" "+r[0]+" "+e[0],s=i[1]+" "+r[1]+" "+e[1],n=i[2]+" "+r[2]+" "+e[2];this.feFuncR.setAttribute("tableValues",a),this.feFuncG.setAttribute("tableValues",s),this.feFuncB.setAttribute("tableValues",n)}},SVGProLevelsFilter.prototype.createFeFunc=function(t,e){var r=createNS(t);return r.setAttribute("type","table"),e.appendChild(r),r},SVGProLevelsFilter.prototype.getTableValue=function(t,e,r,i,a){for(var s,n,o=0,h=Math.min(t,e),l=Math.max(t,e),p=Array.call(null,{length:256}),c=0,f=a-i,m=e-t;o<=256;)n=(s=o/256)<=h?m<0?a:i:s>=l?m<0?i:a:i+f*Math.pow((s-t)/m,1/r),p[c]=n,c+=1,o+=256/255;return p.join(" ")},SVGProLevelsFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e,r=this.filterManager.effectElements;this.feFuncRComposed&&(t||r[3].p._mdf||r[4].p._mdf||r[5].p._mdf||r[6].p._mdf||r[7].p._mdf)&&(e=this.getTableValue(r[3].p.v,r[4].p.v,r[5].p.v,r[6].p.v,r[7].p.v),this.feFuncRComposed.setAttribute("tableValues",e),this.feFuncGComposed.setAttribute("tableValues",e),this.feFuncBComposed.setAttribute("tableValues",e)),this.feFuncR&&(t||r[10].p._mdf||r[11].p._mdf||r[12].p._mdf||r[13].p._mdf||r[14].p._mdf)&&(e=this.getTableValue(r[10].p.v,r[11].p.v,r[12].p.v,r[13].p.v,r[14].p.v),this.feFuncR.setAttribute("tableValues",e)),this.feFuncG&&(t||r[17].p._mdf||r[18].p._mdf||r[19].p._mdf||r[20].p._mdf||r[21].p._mdf)&&(e=this.getTableValue(r[17].p.v,r[18].p.v,r[19].p.v,r[20].p.v,r[21].p.v),this.feFuncG.setAttribute("tableValues",e)),this.feFuncB&&(t||r[24].p._mdf||r[25].p._mdf||r[26].p._mdf||r[27].p._mdf||r[28].p._mdf)&&(e=this.getTableValue(r[24].p.v,r[25].p.v,r[26].p.v,r[27].p.v,r[28].p.v),this.feFuncB.setAttribute("tableValues",e)),this.feFuncA&&(t||r[31].p._mdf||r[32].p._mdf||r[33].p._mdf||r[34].p._mdf||r[35].p._mdf)&&(e=this.getTableValue(r[31].p.v,r[32].p.v,r[33].p.v,r[34].p.v,r[35].p.v),this.feFuncA.setAttribute("tableValues",e))}},extendPrototype([SVGComposableEffect],SVGDropShadowEffect),SVGDropShadowEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){if((t||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute("stdDeviation",this.filterManager.effectElements[4].p.v/4),t||this.filterManager.effectElements[0].p._mdf){var e=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute("flood-color",rgbToHex(Math.round(255*e[0]),Math.round(255*e[1]),Math.round(255*e[2])))}if((t||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute("flood-opacity",this.filterManager.effectElements[1].p.v/255),t||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var r=this.filterManager.effectElements[3].p.v,i=(this.filterManager.effectElements[2].p.v-90)*degToRads,a=r*Math.cos(i),s=r*Math.sin(i);this.feOffset.setAttribute("dx",a),this.feOffset.setAttribute("dy",s)}}};var _svgMatteSymbols=[];function SVGMatte3Effect(t,e,r){this.initialized=!1,this.filterManager=e,this.filterElem=t,this.elem=r,r.matteElement=createNS("g"),r.matteElement.appendChild(r.layerElement),r.matteElement.appendChild(r.transformedElement),r.baseElement=r.matteElement}function SVGGaussianBlurEffect(t,e,r,i){t.setAttribute("x","-100%"),t.setAttribute("y","-100%"),t.setAttribute("width","300%"),t.setAttribute("height","300%"),this.filterManager=e;var a=createNS("feGaussianBlur");a.setAttribute("result",i),t.appendChild(a),this.feGaussianBlur=a}function TransformEffect(){}function SVGTransformEffect(t,e){this.init(e)}function CVTransformEffect(t){this.init(t)}return SVGMatte3Effect.prototype.findSymbol=function(t){for(var e=0,r=_svgMatteSymbols.length;e<r;){if(_svgMatteSymbols[e]===t)return _svgMatteSymbols[e];e+=1}return null},SVGMatte3Effect.prototype.replaceInParent=function(t,e){var r=t.layerElement.parentNode;if(r){for(var i,a=r.children,s=0,n=a.length;s<n&&a[s]!==t.layerElement;)s+=1;s<=n-2&&(i=a[s+1]);var o=createNS("use");o.setAttribute("href","#"+e),i?r.insertBefore(o,i):r.appendChild(o)}},SVGMatte3Effect.prototype.setElementAsMask=function(t,e){if(!this.findSymbol(e)){var r=createElementID(),i=createNS("mask");i.setAttribute("id",e.layerId),i.setAttribute("mask-type","alpha"),_svgMatteSymbols.push(e);var a=t.globalData.defs;a.appendChild(i);var s=createNS("symbol");s.setAttribute("id",r),this.replaceInParent(e,r),s.appendChild(e.layerElement),a.appendChild(s);var n=createNS("use");n.setAttribute("href","#"+r),i.appendChild(n),e.data.hd=!1,e.show()}t.setMatte(e.layerId)},SVGMatte3Effect.prototype.initialize=function(){for(var t=this.filterManager.effectElements[0].p.v,e=this.elem.comp.elements,r=0,i=e.length;r<i;)e[r]&&e[r].data.ind===t&&this.setElementAsMask(this.elem,e[r]),r+=1;this.initialized=!0},SVGMatte3Effect.prototype.renderFrame=function(){this.initialized||this.initialize()},SVGGaussianBlurEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e=.3*this.filterManager.effectElements[0].p.v,r=this.filterManager.effectElements[1].p.v,i=3==r?0:e,a=2==r?0:e;this.feGaussianBlur.setAttribute("stdDeviation",i+" "+a);var s=1==this.filterManager.effectElements[2].p.v?"wrap":"duplicate";this.feGaussianBlur.setAttribute("edgeMode",s)}},TransformEffect.prototype.init=function(t){this.effectsManager=t,this.type=effectTypes.TRANSFORM_EFFECT,this.matrix=new Matrix,this.opacity=-1,this._mdf=!1,this._opMdf=!1},TransformEffect.prototype.renderFrame=function(t){if(this._opMdf=!1,this._mdf=!1,t||this.effectsManager._mdf){var e=this.effectsManager.effectElements,r=e[0].p.v,i=e[1].p.v,a=1===e[2].p.v,s=e[3].p.v,n=a?s:e[4].p.v,o=e[5].p.v,h=e[6].p.v,l=e[7].p.v;this.matrix.reset(),this.matrix.translate(-r[0],-r[1],r[2]),this.matrix.scale(.01*n,.01*s,1),this.matrix.rotate(-l*degToRads),this.matrix.skewFromAxis(-o*degToRads,(h+90)*degToRads),this.matrix.translate(i[0],i[1],0),this._mdf=!0,this.opacity!==e[8].p.v&&(this.opacity=e[8].p.v,this._opMdf=!0)}},extendPrototype([TransformEffect],SVGTransformEffect),extendPrototype([TransformEffect],CVTransformEffect),registerRenderer("canvas",CanvasRenderer),registerRenderer("html",HybridRenderer),registerRenderer("svg",SVGRenderer),ShapeModifiers.registerModifier("tm",TrimModifier),ShapeModifiers.registerModifier("pb",PuckerAndBloatModifier),ShapeModifiers.registerModifier("rp",RepeaterModifier),ShapeModifiers.registerModifier("rd",RoundCornersModifier),ShapeModifiers.registerModifier("zz",ZigZagModifier),ShapeModifiers.registerModifier("op",OffsetPathModifier),setExpressionsPlugin(Expressions),setExpressionInterfaces(getInterface),initialize$1(),initialize(),registerEffect$1(20,SVGTintFilter,!0),registerEffect$1(21,SVGFillFilter,!0),registerEffect$1(22,SVGStrokeEffect,!1),registerEffect$1(23,SVGTritoneFilter,!0),registerEffect$1(24,SVGProLevelsFilter,!0),registerEffect$1(25,SVGDropShadowEffect,!0),registerEffect$1(28,SVGMatte3Effect,!1),registerEffect$1(29,SVGGaussianBlurEffect,!0),registerEffect$1(35,SVGTransformEffect,!1),registerEffect(35,CVTransformEffect),lottie},module.exports=factory())},"./packages/packages/libs/editor-modal-shell/src/components/background-lottie.tsx":function(t,e,r){"use strict";r.r(e),r.d(e,{BackgroundLottie:function(){return BackgroundLottie}});var i=r("react"),a=r("./node_modules/lottie-react/build/index.umd.js"),s=r.n(a),n=r("./packages/packages/libs/editor-modal-shell/src/components/modal-shell.tsx");function BackgroundLottie({animationData:t,loop:e=!1,autoplay:r=!0,zIndex:a=n.MODAL_Z_INDEX-1,backgroundColor:o="transparent",onComplete:h=()=>{}}){const l="undefined"!=typeof window&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;return(0,i.useEffect)(()=>{l&&h?.()},[l,h]),l?null:i.createElement(s(),{animationData:t,loop:e,autoplay:r,onComplete:e?void 0:h,onDataFailed:h,rendererSettings:{preserveAspectRatio:"xMidYMid slice"},style:{position:"fixed",inset:0,width:"100vw",height:"100vh",zIndex:a,backgroundColor:o,pointerEvents:"none"}})}},"./packages/packages/libs/editor-modal-shell/src/components/modal-footer.tsx":function(t,e,r){"use strict";r.r(e),r.d(e,{ModalFooter:function(){return ModalFooter}});var i=r("react"),a=r("@elementor/ui");const ModalFooter=({helpText:t,link:e})=>i.createElement(a.Stack,{direction:"row",alignItems:"center",gap:1},i.createElement(a.Typography,{variant:"caption",color:"text.tertiary",sx:{fontSize:"11px",lineHeight:"normal"}},t),i.createElement(a.Button,{href:e.url,target:"_blank",variant:"text",size:"small",color:"info",sx:{fontSize:"11px"}},e.text))},"./packages/packages/libs/editor-modal-shell/src/components/modal-header.tsx":function(t,e,r){"use strict";r.r(e),r.d(e,{ModalHeader:function(){return ModalHeader}});var i=r("react"),a=r("@elementor/ui");const ModalHeader=({title:t,content:e})=>i.createElement(a.Stack,{gap:.75},i.createElement(a.Typography,{variant:"h4",color:"text.primary"},t),i.createElement(a.Typography,{variant:"subtitle2",color:"text.primary"},e))},"./packages/packages/libs/editor-modal-shell/src/components/modal-shell.tsx":function(t,e,r){"use strict";r.r(e),r.d(e,{MODAL_Z_INDEX:function(){return s},ModalShell:function(){return ModalShell},useModalShell:function(){return useModalShell}});var i=r("react"),a=r("@elementor/ui");const s=99999,n=(0,i.createContext)(null),useModalShell=()=>{const t=(0,i.useContext)(n);if(!t)throw new Error("useModalShell must be used inside a <ModalShell />");return t},ModalShell=({children:t,onClose:e,revealDuration:r=500,revealDelay:o=0,container:h,sx:l={},closeOnEsc:p=!0,closeOnOutsideClick:c=!0,backdrop:f=!0,backdropSx:m={},hideCloseButton:u=!1})=>{const d=h??("undefined"!=typeof document?document.body:void 0),y="undefined"!=typeof window&&Boolean(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches),g=0===r||y,[v,b]=(0,i.useState)(!0),P=(0,i.useCallback)(()=>b(!1),[]),x=(0,i.useMemo)(()=>({close:P}),[P]),S=(0,i.useMemo)(()=>({enter:0,exit:y?0:225}),[y]),E=(0,i.useMemo)(()=>g?{}:{animation:`e-modal-shell-reveal ${r}ms ease ${o}ms backwards`,"@keyframes e-modal-shell-reveal":{from:{opacity:0,transform:"scale(0.95)"},to:{opacity:1,transform:"scale(1)"}}},[g,r,o]);return i.createElement(a.Dialog,{open:v,maxWidth:!1,onClose:(t,e)=>{("escapeKeyDown"!==e||p)&&("backdropClick"!==e||c)&&P()},container:d,disableEscapeKeyDown:!p,hideBackdrop:!f,TransitionProps:{onExited:e,timeout:S},slotProps:{backdrop:{transitionDuration:S,sx:m}},PaperProps:{sx:{width:800,height:400,maxWidth:"100%",overflow:"hidden",...E,...l}},sx:{zIndex:s}},i.createElement(n.Provider,{value:x},i.createElement(a.Box,{sx:{display:"contents"}},t,!u&&i.createElement(a.CloseButton,{onClick:P,sx:{position:"absolute",right:16,top:16,zIndex:3}}))))}},"./packages/packages/libs/editor-modal-shell/src/hooks/use-autoplay-carousel.ts":function(t,e,r){"use strict";r.r(e),r.d(e,{useAutoplayCarousel:function(){return useAutoplayCarousel}});var i=r("react");const a=4e3;function useAutoplayCarousel(t,e=a){const[r,s]=(0,i.useState)(t[0]),[n,o]=(0,i.useState)(!0),h=(0,i.useCallback)(()=>{s(e=>{const r=(t.indexOf(e)+1)%t.length;return t[r]})},[t]);(0,i.useEffect)(()=>{if(!n)return;const t=setInterval(h,e);return()=>clearInterval(t)},[n,h,e]);return{selectedItem:r,selectItem:(0,i.useCallback)(t=>{s(t),o(!1)},[])}}},"@elementor/ui":function(t){"use strict";t.exports=window.elementorV2.ui},react:function(t){"use strict";t.exports=window.React}},__webpack_module_cache__={};function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var r=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t].call(r.exports,r,r.exports,__webpack_require__),r.exports}__webpack_require__.amdO={},__webpack_require__.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return __webpack_require__.d(e,{a:e}),e},__webpack_require__.d=function(t,e){for(var r in e)__webpack_require__.o(e,r)&&!__webpack_require__.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},__webpack_require__.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},__webpack_require__.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var __webpack_exports__={};!function(){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{BackgroundLottie:function(){return i.BackgroundLottie},MODAL_Z_INDEX:function(){return t.MODAL_Z_INDEX},ModalFooter:function(){return r.ModalFooter},ModalHeader:function(){return e.ModalHeader},ModalShell:function(){return t.ModalShell},useAutoplayCarousel:function(){return a.useAutoplayCarousel},useModalShell:function(){return t.useModalShell}});var t=__webpack_require__("./packages/packages/libs/editor-modal-shell/src/components/modal-shell.tsx"),e=__webpack_require__("./packages/packages/libs/editor-modal-shell/src/components/modal-header.tsx"),r=__webpack_require__("./packages/packages/libs/editor-modal-shell/src/components/modal-footer.tsx"),i=__webpack_require__("./packages/packages/libs/editor-modal-shell/src/components/background-lottie.tsx"),a=__webpack_require__("./packages/packages/libs/editor-modal-shell/src/hooks/use-autoplay-carousel.ts")}(),(window.elementorV2=window.elementorV2||{}).editorModalShell=__webpack_exports__})(),window.elementorV2.editorModalShell?.init?.(); | |
| 1 | +(function(react, _elementor_ui) { | |
| 2 | + | |
| 3 | +//#region \0rolldown/runtime.js | |
| 4 | + var __create = Object.create; | |
| 5 | + var __defProp = Object.defineProperty; | |
| 6 | + var __name = (target, value) => __defProp(target, "name", { | |
| 7 | + value, | |
| 8 | + configurable: true | |
| 9 | + }); | |
| 10 | + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | |
| 11 | + var __getOwnPropNames = Object.getOwnPropertyNames; | |
| 12 | + var __getProtoOf = Object.getPrototypeOf; | |
| 13 | + var __hasOwnProp = Object.prototype.hasOwnProperty; | |
| 14 | + var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports); | |
| 15 | + var __exportAll = (all, no_symbols) => { | |
| 16 | + let target = {}; | |
| 17 | + for (var name in all) { | |
| 18 | + __defProp(target, name, { | |
| 19 | + get: all[name], | |
| 20 | + enumerable: true | |
| 21 | + }); | |
| 22 | + } | |
| 23 | + if (!no_symbols) { | |
| 24 | + __defProp(target, Symbol.toStringTag, { value: "Module" }); | |
| 25 | + } | |
| 26 | + return target; | |
| 27 | + }; | |
| 28 | + var __copyProps = (to, from, except, desc) => { | |
| 29 | + if (from && typeof from === "object" || typeof from === "function") { | |
| 30 | + for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { | |
| 31 | + key = keys[i]; | |
| 32 | + if (!__hasOwnProp.call(to, key) && key !== except) { | |
| 33 | + __defProp(to, key, { | |
| 34 | + get: ((k) => from[k]).bind(null, key), | |
| 35 | + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable | |
| 36 | + }); | |
| 37 | + } | |
| 38 | + } | |
| 39 | + } | |
| 40 | + return to; | |
| 41 | + }; | |
| 42 | + var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { | |
| 43 | + value: mod, | |
| 44 | + enumerable: true | |
| 45 | + }) : target, mod)); | |
| 46 | + | |
| 47 | +//#endregion | |
| 48 | +react = __toESM(react); | |
| 49 | + | |
| 50 | +//#region packages/packages/libs/editor-modal-shell/src/components/modal-shell.tsx | |
| 51 | + var MODAL_Z_INDEX = 99999; | |
| 52 | + var DEFAULT_WIDTH = 800; | |
| 53 | + var DEFAULT_HEIGHT = 400; | |
| 54 | + var DEFAULT_REVEAL_DURATION_MS = 500; | |
| 55 | + var DEFAULT_REVEAL_DELAY_MS = 0; | |
| 56 | + var ModalShellContext = (0, react.createContext)(null); | |
| 57 | + var useModalShell = () => { | |
| 58 | + const ctx = (0, react.useContext)(ModalShellContext); | |
| 59 | + if (!ctx) throw new Error("useModalShell must be used inside a <ModalShell />"); | |
| 60 | + return ctx; | |
| 61 | + }; | |
| 62 | + var EXIT_TRANSITION_MS = 225; | |
| 63 | + var prefersReducedMotion = () => typeof window !== "undefined" && Boolean(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches); | |
| 64 | + var ModalShell = ({ children, onClose, revealDuration = DEFAULT_REVEAL_DURATION_MS, revealDelay = DEFAULT_REVEAL_DELAY_MS, container, sx = {}, closeOnEsc = true, closeOnOutsideClick = true, backdrop = true, backdropSx = {}, hideCloseButton = false }) => { | |
| 65 | + const portalTarget = container ?? (typeof document !== "undefined" ? document.body : void 0); | |
| 66 | + const reducedMotion = prefersReducedMotion(); | |
| 67 | + const consumerOwnsEnter = revealDuration === 0 || reducedMotion; | |
| 68 | + const [open, setOpen] = (0, react.useState)(true); | |
| 69 | + const startClose = (0, react.useCallback)(() => setOpen(false), []); | |
| 70 | + const contextValue = (0, react.useMemo)(() => ({ close: startClose }), [startClose]); | |
| 71 | + const handleDialogClose = (_event, reason) => { | |
| 72 | + if (reason === "escapeKeyDown" && !closeOnEsc) return; | |
| 73 | + if (reason === "backdropClick" && !closeOnOutsideClick) return; | |
| 74 | + startClose(); | |
| 75 | + }; | |
| 76 | + const transitionTimeouts = (0, react.useMemo)(() => ({ | |
| 77 | + enter: 0, | |
| 78 | + exit: reducedMotion ? 0 : EXIT_TRANSITION_MS | |
| 79 | + }), [reducedMotion]); | |
| 80 | + const animationProps = (0, react.useMemo)(() => consumerOwnsEnter ? {} : { | |
| 81 | + animation: `e-modal-shell-reveal ${revealDuration}ms ease ${revealDelay}ms backwards`, | |
| 82 | + "@keyframes e-modal-shell-reveal": { | |
| 83 | + from: { | |
| 84 | + opacity: 0, | |
| 85 | + transform: "scale(0.95)" | |
| 86 | + }, | |
| 87 | + to: { | |
| 88 | + opacity: 1, | |
| 89 | + transform: "scale(1)" | |
| 90 | + } | |
| 91 | + } | |
| 92 | + }, [ | |
| 93 | + consumerOwnsEnter, | |
| 94 | + revealDuration, | |
| 95 | + revealDelay | |
| 96 | + ]); | |
| 97 | + return /* @__PURE__ */ react.createElement(_elementor_ui.Dialog, { | |
| 98 | + open, | |
| 99 | + maxWidth: false, | |
| 100 | + onClose: handleDialogClose, | |
| 101 | + container: portalTarget, | |
| 102 | + disableEscapeKeyDown: !closeOnEsc, | |
| 103 | + hideBackdrop: !backdrop, | |
| 104 | + TransitionProps: { | |
| 105 | + onExited: onClose, | |
| 106 | + timeout: transitionTimeouts | |
| 107 | + }, | |
| 108 | + slotProps: { backdrop: { | |
| 109 | + transitionDuration: transitionTimeouts, | |
| 110 | + sx: backdropSx | |
| 111 | + } }, | |
| 112 | + PaperProps: { sx: { | |
| 113 | + width: DEFAULT_WIDTH, | |
| 114 | + height: DEFAULT_HEIGHT, | |
| 115 | + maxWidth: "100%", | |
| 116 | + overflow: "hidden", | |
| 117 | + ...animationProps, | |
| 118 | + ...sx | |
| 119 | + } }, | |
| 120 | + sx: { zIndex: MODAL_Z_INDEX } | |
| 121 | + }, /* @__PURE__ */ react.createElement(ModalShellContext.Provider, { value: contextValue }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { display: "contents" } }, children, !hideCloseButton && /* @__PURE__ */ react.createElement(_elementor_ui.CloseButton, { | |
| 122 | + onClick: startClose, | |
| 123 | + sx: { | |
| 124 | + position: "absolute", | |
| 125 | + right: 16, | |
| 126 | + top: 16, | |
| 127 | + zIndex: 3 | |
| 128 | + } | |
| 129 | + })))); | |
| 130 | + }; | |
| 131 | + | |
| 132 | +//#endregion | |
| 133 | +//#region packages/packages/libs/editor-modal-shell/src/components/modal-header.tsx | |
| 134 | + var ModalHeader = ({ title, content }) => { | |
| 135 | + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { gap: .75 }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 136 | + variant: "h4", | |
| 137 | + color: "text.primary" | |
| 138 | + }, title), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 139 | + variant: "subtitle2", | |
| 140 | + color: "text.primary" | |
| 141 | + }, content)); | |
| 142 | + }; | |
| 143 | + | |
| 144 | +//#endregion | |
| 145 | +//#region packages/packages/libs/editor-modal-shell/src/components/modal-footer.tsx | |
| 146 | + var ModalFooter = ({ helpText, link }) => { | |
| 147 | + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 148 | + direction: "row", | |
| 149 | + alignItems: "center", | |
| 150 | + gap: 1 | |
| 151 | + }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 152 | + variant: "caption", | |
| 153 | + color: "text.tertiary", | |
| 154 | + sx: { | |
| 155 | + fontSize: "11px", | |
| 156 | + lineHeight: "normal" | |
| 157 | + } | |
| 158 | + }, helpText), /* @__PURE__ */ react.createElement(_elementor_ui.Button, { | |
| 159 | + href: link.url, | |
| 160 | + target: "_blank", | |
| 161 | + variant: "text", | |
| 162 | + size: "small", | |
| 163 | + color: "info", | |
| 164 | + sx: { fontSize: "11px" } | |
| 165 | + }, link.text)); | |
| 166 | + }; | |
| 167 | + | |
| 168 | +//#endregion | |
| 169 | +//#region node_modules/lottie-web/build/player/lottie.js | |
| 170 | + var require_lottie = /* @__PURE__ */ __commonJSMin(((exports, module) => { | |
| 171 | + typeof document !== "undefined" && typeof navigator !== "undefined" && (function(global, factory) { | |
| 172 | + typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, global.lottie = factory()); | |
| 173 | + })(exports, (function() { | |
| 174 | + "use strict"; | |
| 175 | + var svgNS = "http://www.w3.org/2000/svg"; | |
| 176 | + var locationHref = ""; | |
| 177 | + var _useWebWorker = false; | |
| 178 | + var initialDefaultFrame = -999999; | |
| 179 | + var setWebWorker = function setWebWorker(flag) { | |
| 180 | + _useWebWorker = !!flag; | |
| 181 | + }; | |
| 182 | + var getWebWorker = function getWebWorker() { | |
| 183 | + return _useWebWorker; | |
| 184 | + }; | |
| 185 | + var setLocationHref = function setLocationHref(value) { | |
| 186 | + locationHref = value; | |
| 187 | + }; | |
| 188 | + var getLocationHref = function getLocationHref() { | |
| 189 | + return locationHref; | |
| 190 | + }; | |
| 191 | + function createTag(type) { | |
| 192 | + return document.createElement(type); | |
| 193 | + } | |
| 194 | + function extendPrototype(sources, destination) { | |
| 195 | + var i; | |
| 196 | + var len = sources.length; | |
| 197 | + var sourcePrototype; | |
| 198 | + for (i = 0; i < len; i += 1) { | |
| 199 | + sourcePrototype = sources[i].prototype; | |
| 200 | + for (var attr in sourcePrototype) if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr]; | |
| 201 | + } | |
| 202 | + } | |
| 203 | + function getDescriptor(object, prop) { | |
| 204 | + return Object.getOwnPropertyDescriptor(object, prop); | |
| 205 | + } | |
| 206 | + function createProxyFunction(prototype) { | |
| 207 | + function ProxyFunction() {} | |
| 208 | + ProxyFunction.prototype = prototype; | |
| 209 | + return ProxyFunction; | |
| 210 | + } | |
| 211 | + var audioControllerFactory = function() { | |
| 212 | + function AudioController(audioFactory) { | |
| 213 | + this.audios = []; | |
| 214 | + this.audioFactory = audioFactory; | |
| 215 | + this._volume = 1; | |
| 216 | + this._isMuted = false; | |
| 217 | + } | |
| 218 | + AudioController.prototype = { | |
| 219 | + addAudio: function addAudio(audio) { | |
| 220 | + this.audios.push(audio); | |
| 221 | + }, | |
| 222 | + pause: function pause() { | |
| 223 | + var i; | |
| 224 | + var len = this.audios.length; | |
| 225 | + for (i = 0; i < len; i += 1) this.audios[i].pause(); | |
| 226 | + }, | |
| 227 | + resume: function resume() { | |
| 228 | + var i; | |
| 229 | + var len = this.audios.length; | |
| 230 | + for (i = 0; i < len; i += 1) this.audios[i].resume(); | |
| 231 | + }, | |
| 232 | + setRate: function setRate(rateValue) { | |
| 233 | + var i; | |
| 234 | + var len = this.audios.length; | |
| 235 | + for (i = 0; i < len; i += 1) this.audios[i].setRate(rateValue); | |
| 236 | + }, | |
| 237 | + createAudio: function createAudio(assetPath) { | |
| 238 | + if (this.audioFactory) return this.audioFactory(assetPath); | |
| 239 | + if (window.Howl) return new window.Howl({ src: [assetPath] }); | |
| 240 | + return { | |
| 241 | + isPlaying: false, | |
| 242 | + play: function play() { | |
| 243 | + this.isPlaying = true; | |
| 244 | + }, | |
| 245 | + seek: function seek() { | |
| 246 | + this.isPlaying = false; | |
| 247 | + }, | |
| 248 | + playing: function playing() {}, | |
| 249 | + rate: function rate() {}, | |
| 250 | + setVolume: function setVolume() {} | |
| 251 | + }; | |
| 252 | + }, | |
| 253 | + setAudioFactory: function setAudioFactory(audioFactory) { | |
| 254 | + this.audioFactory = audioFactory; | |
| 255 | + }, | |
| 256 | + setVolume: function setVolume(value) { | |
| 257 | + this._volume = value; | |
| 258 | + this._updateVolume(); | |
| 259 | + }, | |
| 260 | + mute: function mute() { | |
| 261 | + this._isMuted = true; | |
| 262 | + this._updateVolume(); | |
| 263 | + }, | |
| 264 | + unmute: function unmute() { | |
| 265 | + this._isMuted = false; | |
| 266 | + this._updateVolume(); | |
| 267 | + }, | |
| 268 | + getVolume: function getVolume() { | |
| 269 | + return this._volume; | |
| 270 | + }, | |
| 271 | + _updateVolume: function _updateVolume() { | |
| 272 | + var i; | |
| 273 | + var len = this.audios.length; | |
| 274 | + for (i = 0; i < len; i += 1) this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1)); | |
| 275 | + } | |
| 276 | + }; | |
| 277 | + return function() { | |
| 278 | + return new AudioController(); | |
| 279 | + }; | |
| 280 | + }(); | |
| 281 | + var createTypedArray = function() { | |
| 282 | + function createRegularArray(type, len) { | |
| 283 | + var i = 0; | |
| 284 | + var arr = []; | |
| 285 | + var value; | |
| 286 | + switch (type) { | |
| 287 | + case "int16": | |
| 288 | + case "uint8c": | |
| 289 | + value = 1; | |
| 290 | + break; | |
| 291 | + default: | |
| 292 | + value = 1.1; | |
| 293 | + break; | |
| 294 | + } | |
| 295 | + for (i = 0; i < len; i += 1) arr.push(value); | |
| 296 | + return arr; | |
| 297 | + } | |
| 298 | + function createTypedArrayFactory(type, len) { | |
| 299 | + if (type === "float32") return new Float32Array(len); | |
| 300 | + if (type === "int16") return new Int16Array(len); | |
| 301 | + if (type === "uint8c") return new Uint8ClampedArray(len); | |
| 302 | + return createRegularArray(type, len); | |
| 303 | + } | |
| 304 | + if (typeof Uint8ClampedArray === "function" && typeof Float32Array === "function") return createTypedArrayFactory; | |
| 305 | + return createRegularArray; | |
| 306 | + }(); | |
| 307 | + function createSizedArray(len) { | |
| 308 | + return Array.apply(null, { length: len }); | |
| 309 | + } | |
| 310 | + function _typeof$6(o) { | |
| 311 | + "@babel/helpers - typeof"; | |
| 312 | + return _typeof$6 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) { | |
| 313 | + return typeof o; | |
| 314 | + } : function(o) { | |
| 315 | + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; | |
| 316 | + }, _typeof$6(o); | |
| 317 | + } | |
| 318 | + var subframeEnabled = true; | |
| 319 | + var expressionsPlugin = null; | |
| 320 | + var expressionsInterfaces = null; | |
| 321 | + var idPrefix$1 = ""; | |
| 322 | + var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); | |
| 323 | + var _shouldRoundValues = false; | |
| 324 | + var bmPow = Math.pow; | |
| 325 | + var bmSqrt = Math.sqrt; | |
| 326 | + var bmFloor = Math.floor; | |
| 327 | + var bmMax = Math.max; | |
| 328 | + var bmMin = Math.min; | |
| 329 | + var BMMath = {}; | |
| 330 | + (function() { | |
| 331 | + var propertyNames = [ | |
| 332 | + "abs", | |
| 333 | + "acos", | |
| 334 | + "acosh", | |
| 335 | + "asin", | |
| 336 | + "asinh", | |
| 337 | + "atan", | |
| 338 | + "atanh", | |
| 339 | + "atan2", | |
| 340 | + "ceil", | |
| 341 | + "cbrt", | |
| 342 | + "expm1", | |
| 343 | + "clz32", | |
| 344 | + "cos", | |
| 345 | + "cosh", | |
| 346 | + "exp", | |
| 347 | + "floor", | |
| 348 | + "fround", | |
| 349 | + "hypot", | |
| 350 | + "imul", | |
| 351 | + "log", | |
| 352 | + "log1p", | |
| 353 | + "log2", | |
| 354 | + "log10", | |
| 355 | + "max", | |
| 356 | + "min", | |
| 357 | + "pow", | |
| 358 | + "random", | |
| 359 | + "round", | |
| 360 | + "sign", | |
| 361 | + "sin", | |
| 362 | + "sinh", | |
| 363 | + "sqrt", | |
| 364 | + "tan", | |
| 365 | + "tanh", | |
| 366 | + "trunc", | |
| 367 | + "E", | |
| 368 | + "LN10", | |
| 369 | + "LN2", | |
| 370 | + "LOG10E", | |
| 371 | + "LOG2E", | |
| 372 | + "PI", | |
| 373 | + "SQRT1_2", | |
| 374 | + "SQRT2" | |
| 375 | + ]; | |
| 376 | + var i; | |
| 377 | + var len = propertyNames.length; | |
| 378 | + for (i = 0; i < len; i += 1) BMMath[propertyNames[i]] = Math[propertyNames[i]]; | |
| 379 | + })(); | |
| 380 | + function ProjectInterface$1() { | |
| 381 | + return {}; | |
| 382 | + } | |
| 383 | + BMMath.random = Math.random; | |
| 384 | + BMMath.abs = function(val) { | |
| 385 | + if (_typeof$6(val) === "object" && val.length) { | |
| 386 | + var absArr = createSizedArray(val.length); | |
| 387 | + var i; | |
| 388 | + var len = val.length; | |
| 389 | + for (i = 0; i < len; i += 1) absArr[i] = Math.abs(val[i]); | |
| 390 | + return absArr; | |
| 391 | + } | |
| 392 | + return Math.abs(val); | |
| 393 | + }; | |
| 394 | + var defaultCurveSegments = 150; | |
| 395 | + var degToRads = Math.PI / 180; | |
| 396 | + var roundCorner = .5519; | |
| 397 | + function roundValues(flag) { | |
| 398 | + _shouldRoundValues = !!flag; | |
| 399 | + } | |
| 400 | + function bmRnd(value) { | |
| 401 | + if (_shouldRoundValues) return Math.round(value); | |
| 402 | + return value; | |
| 403 | + } | |
| 404 | + function styleDiv(element) { | |
| 405 | + element.style.position = "absolute"; | |
| 406 | + element.style.top = 0; | |
| 407 | + element.style.left = 0; | |
| 408 | + element.style.display = "block"; | |
| 409 | + element.style.transformOrigin = "0 0"; | |
| 410 | + element.style.webkitTransformOrigin = "0 0"; | |
| 411 | + element.style.backfaceVisibility = "visible"; | |
| 412 | + element.style.webkitBackfaceVisibility = "visible"; | |
| 413 | + element.style.transformStyle = "preserve-3d"; | |
| 414 | + element.style.webkitTransformStyle = "preserve-3d"; | |
| 415 | + element.style.mozTransformStyle = "preserve-3d"; | |
| 416 | + } | |
| 417 | + function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) { | |
| 418 | + this.type = type; | |
| 419 | + this.currentTime = currentTime; | |
| 420 | + this.totalTime = totalTime; | |
| 421 | + this.direction = frameMultiplier < 0 ? -1 : 1; | |
| 422 | + } | |
| 423 | + function BMCompleteEvent(type, frameMultiplier) { | |
| 424 | + this.type = type; | |
| 425 | + this.direction = frameMultiplier < 0 ? -1 : 1; | |
| 426 | + } | |
| 427 | + function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) { | |
| 428 | + this.type = type; | |
| 429 | + this.currentLoop = currentLoop; | |
| 430 | + this.totalLoops = totalLoops; | |
| 431 | + this.direction = frameMultiplier < 0 ? -1 : 1; | |
| 432 | + } | |
| 433 | + function BMSegmentStartEvent(type, firstFrame, totalFrames) { | |
| 434 | + this.type = type; | |
| 435 | + this.firstFrame = firstFrame; | |
| 436 | + this.totalFrames = totalFrames; | |
| 437 | + } | |
| 438 | + function BMDestroyEvent(type, target) { | |
| 439 | + this.type = type; | |
| 440 | + this.target = target; | |
| 441 | + } | |
| 442 | + function BMRenderFrameErrorEvent(nativeError, currentTime) { | |
| 443 | + this.type = "renderFrameError"; | |
| 444 | + this.nativeError = nativeError; | |
| 445 | + this.currentTime = currentTime; | |
| 446 | + } | |
| 447 | + function BMConfigErrorEvent(nativeError) { | |
| 448 | + this.type = "configError"; | |
| 449 | + this.nativeError = nativeError; | |
| 450 | + } | |
| 451 | + function BMAnimationConfigErrorEvent(type, nativeError) { | |
| 452 | + this.type = type; | |
| 453 | + this.nativeError = nativeError; | |
| 454 | + } | |
| 455 | + var createElementID = function() { | |
| 456 | + var _count = 0; | |
| 457 | + return function createID() { | |
| 458 | + _count += 1; | |
| 459 | + return idPrefix$1 + "__lottie_element_" + _count; | |
| 460 | + }; | |
| 461 | + }(); | |
| 462 | + function HSVtoRGB(h, s, v) { | |
| 463 | + var r; | |
| 464 | + var g; | |
| 465 | + var b; | |
| 466 | + var i; | |
| 467 | + var f; | |
| 468 | + var p; | |
| 469 | + var q; | |
| 470 | + var t; | |
| 471 | + i = Math.floor(h * 6); | |
| 472 | + f = h * 6 - i; | |
| 473 | + p = v * (1 - s); | |
| 474 | + q = v * (1 - f * s); | |
| 475 | + t = v * (1 - (1 - f) * s); | |
| 476 | + switch (i % 6) { | |
| 477 | + case 0: | |
| 478 | + r = v; | |
| 479 | + g = t; | |
| 480 | + b = p; | |
| 481 | + break; | |
| 482 | + case 1: | |
| 483 | + r = q; | |
| 484 | + g = v; | |
| 485 | + b = p; | |
| 486 | + break; | |
| 487 | + case 2: | |
| 488 | + r = p; | |
| 489 | + g = v; | |
| 490 | + b = t; | |
| 491 | + break; | |
| 492 | + case 3: | |
| 493 | + r = p; | |
| 494 | + g = q; | |
| 495 | + b = v; | |
| 496 | + break; | |
| 497 | + case 4: | |
| 498 | + r = t; | |
| 499 | + g = p; | |
| 500 | + b = v; | |
| 501 | + break; | |
| 502 | + case 5: | |
| 503 | + r = v; | |
| 504 | + g = p; | |
| 505 | + b = q; | |
| 506 | + break; | |
| 507 | + default: break; | |
| 508 | + } | |
| 509 | + return [ | |
| 510 | + r, | |
| 511 | + g, | |
| 512 | + b | |
| 513 | + ]; | |
| 514 | + } | |
| 515 | + function RGBtoHSV(r, g, b) { | |
| 516 | + var max = Math.max(r, g, b); | |
| 517 | + var min = Math.min(r, g, b); | |
| 518 | + var d = max - min; | |
| 519 | + var h; | |
| 520 | + var s = max === 0 ? 0 : d / max; | |
| 521 | + var v = max / 255; | |
| 522 | + switch (max) { | |
| 523 | + case min: | |
| 524 | + h = 0; | |
| 525 | + break; | |
| 526 | + case r: | |
| 527 | + h = g - b + d * (g < b ? 6 : 0); | |
| 528 | + h /= 6 * d; | |
| 529 | + break; | |
| 530 | + case g: | |
| 531 | + h = b - r + d * 2; | |
| 532 | + h /= 6 * d; | |
| 533 | + break; | |
| 534 | + case b: | |
| 535 | + h = r - g + d * 4; | |
| 536 | + h /= 6 * d; | |
| 537 | + break; | |
| 538 | + default: break; | |
| 539 | + } | |
| 540 | + return [ | |
| 541 | + h, | |
| 542 | + s, | |
| 543 | + v | |
| 544 | + ]; | |
| 545 | + } | |
| 546 | + function addSaturationToRGB(color, offset) { | |
| 547 | + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); | |
| 548 | + hsv[1] += offset; | |
| 549 | + if (hsv[1] > 1) hsv[1] = 1; | |
| 550 | + else if (hsv[1] <= 0) hsv[1] = 0; | |
| 551 | + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); | |
| 552 | + } | |
| 553 | + function addBrightnessToRGB(color, offset) { | |
| 554 | + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); | |
| 555 | + hsv[2] += offset; | |
| 556 | + if (hsv[2] > 1) hsv[2] = 1; | |
| 557 | + else if (hsv[2] < 0) hsv[2] = 0; | |
| 558 | + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); | |
| 559 | + } | |
| 560 | + function addHueToRGB(color, offset) { | |
| 561 | + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); | |
| 562 | + hsv[0] += offset / 360; | |
| 563 | + if (hsv[0] > 1) hsv[0] -= 1; | |
| 564 | + else if (hsv[0] < 0) hsv[0] += 1; | |
| 565 | + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); | |
| 566 | + } | |
| 567 | + var rgbToHex = function() { | |
| 568 | + var colorMap = []; | |
| 569 | + var i; | |
| 570 | + var hex; | |
| 571 | + for (i = 0; i < 256; i += 1) { | |
| 572 | + hex = i.toString(16); | |
| 573 | + colorMap[i] = hex.length === 1 ? "0" + hex : hex; | |
| 574 | + } | |
| 575 | + return function(r, g, b) { | |
| 576 | + if (r < 0) r = 0; | |
| 577 | + if (g < 0) g = 0; | |
| 578 | + if (b < 0) b = 0; | |
| 579 | + return "#" + colorMap[r] + colorMap[g] + colorMap[b]; | |
| 580 | + }; | |
| 581 | + }(); | |
| 582 | + var setSubframeEnabled = function setSubframeEnabled(flag) { | |
| 583 | + subframeEnabled = !!flag; | |
| 584 | + }; | |
| 585 | + var getSubframeEnabled = function getSubframeEnabled() { | |
| 586 | + return subframeEnabled; | |
| 587 | + }; | |
| 588 | + var setExpressionsPlugin = function setExpressionsPlugin(value) { | |
| 589 | + expressionsPlugin = value; | |
| 590 | + }; | |
| 591 | + var getExpressionsPlugin = function getExpressionsPlugin() { | |
| 592 | + return expressionsPlugin; | |
| 593 | + }; | |
| 594 | + var setExpressionInterfaces = function setExpressionInterfaces(value) { | |
| 595 | + expressionsInterfaces = value; | |
| 596 | + }; | |
| 597 | + var getExpressionInterfaces = function getExpressionInterfaces() { | |
| 598 | + return expressionsInterfaces; | |
| 599 | + }; | |
| 600 | + var setDefaultCurveSegments = function setDefaultCurveSegments(value) { | |
| 601 | + defaultCurveSegments = value; | |
| 602 | + }; | |
| 603 | + var getDefaultCurveSegments = function getDefaultCurveSegments() { | |
| 604 | + return defaultCurveSegments; | |
| 605 | + }; | |
| 606 | + var setIdPrefix = function setIdPrefix(value) { | |
| 607 | + idPrefix$1 = value; | |
| 608 | + }; | |
| 609 | + var getIdPrefix = function getIdPrefix() { | |
| 610 | + return idPrefix$1; | |
| 611 | + }; | |
| 612 | + function createNS(type) { | |
| 613 | + return document.createElementNS(svgNS, type); | |
| 614 | + } | |
| 615 | + function _typeof$5(o) { | |
| 616 | + "@babel/helpers - typeof"; | |
| 617 | + return _typeof$5 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) { | |
| 618 | + return typeof o; | |
| 619 | + } : function(o) { | |
| 620 | + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; | |
| 621 | + }, _typeof$5(o); | |
| 622 | + } | |
| 623 | + var dataManager = function() { | |
| 624 | + var _counterId = 1; | |
| 625 | + var processes = []; | |
| 626 | + var workerFn; | |
| 627 | + var workerInstance; | |
| 628 | + var workerProxy = { | |
| 629 | + onmessage: function onmessage() {}, | |
| 630 | + postMessage: function postMessage(path) { | |
| 631 | + workerFn({ data: path }); | |
| 632 | + } | |
| 633 | + }; | |
| 634 | + var _workerSelf = { postMessage: function postMessage(data) { | |
| 635 | + workerProxy.onmessage({ data }); | |
| 636 | + } }; | |
| 637 | + function createWorker(fn) { | |
| 638 | + if (window.Worker && window.Blob && getWebWorker()) { | |
| 639 | + var blob = new Blob(["var _workerSelf = self; self.onmessage = ", fn.toString()], { type: "text/javascript" }); | |
| 640 | + var url = URL.createObjectURL(blob); | |
| 641 | + return new Worker(url); | |
| 642 | + } | |
| 643 | + workerFn = fn; | |
| 644 | + return workerProxy; | |
| 645 | + } | |
| 646 | + function setupWorker() { | |
| 647 | + if (!workerInstance) { | |
| 648 | + workerInstance = createWorker(function workerStart(e) { | |
| 649 | + function dataFunctionManager() { | |
| 650 | + function completeLayers(layers, comps) { | |
| 651 | + var layerData; | |
| 652 | + var i; | |
| 653 | + var len = layers.length; | |
| 654 | + var j; | |
| 655 | + var jLen; | |
| 656 | + var k; | |
| 657 | + var kLen; | |
| 658 | + for (i = 0; i < len; i += 1) { | |
| 659 | + layerData = layers[i]; | |
| 660 | + if ("ks" in layerData && !layerData.completed) { | |
| 661 | + layerData.completed = true; | |
| 662 | + if (layerData.hasMask) { | |
| 663 | + var maskProps = layerData.masksProperties; | |
| 664 | + jLen = maskProps.length; | |
| 665 | + for (j = 0; j < jLen; j += 1) if (maskProps[j].pt.k.i) convertPathsToAbsoluteValues(maskProps[j].pt.k); | |
| 666 | + else { | |
| 667 | + kLen = maskProps[j].pt.k.length; | |
| 668 | + for (k = 0; k < kLen; k += 1) { | |
| 669 | + if (maskProps[j].pt.k[k].s) convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]); | |
| 670 | + if (maskProps[j].pt.k[k].e) convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]); | |
| 671 | + } | |
| 672 | + } | |
| 673 | + } | |
| 674 | + if (layerData.ty === 0) { | |
| 675 | + layerData.layers = findCompLayers(layerData.refId, comps); | |
| 676 | + completeLayers(layerData.layers, comps); | |
| 677 | + } else if (layerData.ty === 4) completeShapes(layerData.shapes); | |
| 678 | + else if (layerData.ty === 5) completeText(layerData); | |
| 679 | + } | |
| 680 | + } | |
| 681 | + } | |
| 682 | + function completeChars(chars, assets) { | |
| 683 | + if (chars) { | |
| 684 | + var i = 0; | |
| 685 | + var len = chars.length; | |
| 686 | + for (i = 0; i < len; i += 1) if (chars[i].t === 1) { | |
| 687 | + chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); | |
| 688 | + completeLayers(chars[i].data.layers, assets); | |
| 689 | + } | |
| 690 | + } | |
| 691 | + } | |
| 692 | + function findComp(id, comps) { | |
| 693 | + var i = 0; | |
| 694 | + var len = comps.length; | |
| 695 | + while (i < len) { | |
| 696 | + if (comps[i].id === id) return comps[i]; | |
| 697 | + i += 1; | |
| 698 | + } | |
| 699 | + return null; | |
| 700 | + } | |
| 701 | + function findCompLayers(id, comps) { | |
| 702 | + var comp = findComp(id, comps); | |
| 703 | + if (comp) { | |
| 704 | + if (!comp.layers.__used) { | |
| 705 | + comp.layers.__used = true; | |
| 706 | + return comp.layers; | |
| 707 | + } | |
| 708 | + return JSON.parse(JSON.stringify(comp.layers)); | |
| 709 | + } | |
| 710 | + return null; | |
| 711 | + } | |
| 712 | + function completeShapes(arr) { | |
| 713 | + var i; | |
| 714 | + var len = arr.length; | |
| 715 | + var j; | |
| 716 | + var jLen; | |
| 717 | + for (i = len - 1; i >= 0; i -= 1) if (arr[i].ty === "sh") if (arr[i].ks.k.i) convertPathsToAbsoluteValues(arr[i].ks.k); | |
| 718 | + else { | |
| 719 | + jLen = arr[i].ks.k.length; | |
| 720 | + for (j = 0; j < jLen; j += 1) { | |
| 721 | + if (arr[i].ks.k[j].s) convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]); | |
| 722 | + if (arr[i].ks.k[j].e) convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]); | |
| 723 | + } | |
| 724 | + } | |
| 725 | + else if (arr[i].ty === "gr") completeShapes(arr[i].it); | |
| 726 | + } | |
| 727 | + function convertPathsToAbsoluteValues(path) { | |
| 728 | + var i; | |
| 729 | + var len = path.i.length; | |
| 730 | + for (i = 0; i < len; i += 1) { | |
| 731 | + path.i[i][0] += path.v[i][0]; | |
| 732 | + path.i[i][1] += path.v[i][1]; | |
| 733 | + path.o[i][0] += path.v[i][0]; | |
| 734 | + path.o[i][1] += path.v[i][1]; | |
| 735 | + } | |
| 736 | + } | |
| 737 | + function checkVersion(minimum, animVersionString) { | |
| 738 | + var animVersion = animVersionString ? animVersionString.split(".") : [ | |
| 739 | + 100, | |
| 740 | + 100, | |
| 741 | + 100 | |
| 742 | + ]; | |
| 743 | + if (minimum[0] > animVersion[0]) return true; | |
| 744 | + if (animVersion[0] > minimum[0]) return false; | |
| 745 | + if (minimum[1] > animVersion[1]) return true; | |
| 746 | + if (animVersion[1] > minimum[1]) return false; | |
| 747 | + if (minimum[2] > animVersion[2]) return true; | |
| 748 | + if (animVersion[2] > minimum[2]) return false; | |
| 749 | + return null; | |
| 750 | + } | |
| 751 | + var checkText = function() { | |
| 752 | + var minimumVersion = [ | |
| 753 | + 4, | |
| 754 | + 4, | |
| 755 | + 14 | |
| 756 | + ]; | |
| 757 | + function updateTextLayer(textLayer) { | |
| 758 | + var documentData = textLayer.t.d; | |
| 759 | + textLayer.t.d = { k: [{ | |
| 760 | + s: documentData, | |
| 761 | + t: 0 | |
| 762 | + }] }; | |
| 763 | + } | |
| 764 | + function iterateLayers(layers) { | |
| 765 | + var i; | |
| 766 | + var len = layers.length; | |
| 767 | + for (i = 0; i < len; i += 1) if (layers[i].ty === 5) updateTextLayer(layers[i]); | |
| 768 | + } | |
| 769 | + return function(animationData) { | |
| 770 | + if (checkVersion(minimumVersion, animationData.v)) { | |
| 771 | + iterateLayers(animationData.layers); | |
| 772 | + if (animationData.assets) { | |
| 773 | + var i; | |
| 774 | + var len = animationData.assets.length; | |
| 775 | + for (i = 0; i < len; i += 1) if (animationData.assets[i].layers) iterateLayers(animationData.assets[i].layers); | |
| 776 | + } | |
| 777 | + } | |
| 778 | + }; | |
| 779 | + }(); | |
| 780 | + var checkChars = function() { | |
| 781 | + var minimumVersion = [ | |
| 782 | + 4, | |
| 783 | + 7, | |
| 784 | + 99 | |
| 785 | + ]; | |
| 786 | + return function(animationData) { | |
| 787 | + if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) { | |
| 788 | + var i; | |
| 789 | + var len = animationData.chars.length; | |
| 790 | + for (i = 0; i < len; i += 1) { | |
| 791 | + var charData = animationData.chars[i]; | |
| 792 | + if (charData.data && charData.data.shapes) { | |
| 793 | + completeShapes(charData.data.shapes); | |
| 794 | + charData.data.ip = 0; | |
| 795 | + charData.data.op = 99999; | |
| 796 | + charData.data.st = 0; | |
| 797 | + charData.data.sr = 1; | |
| 798 | + charData.data.ks = { | |
| 799 | + p: { | |
| 800 | + k: [0, 0], | |
| 801 | + a: 0 | |
| 802 | + }, | |
| 803 | + s: { | |
| 804 | + k: [100, 100], | |
| 805 | + a: 0 | |
| 806 | + }, | |
| 807 | + a: { | |
| 808 | + k: [0, 0], | |
| 809 | + a: 0 | |
| 810 | + }, | |
| 811 | + r: { | |
| 812 | + k: 0, | |
| 813 | + a: 0 | |
| 814 | + }, | |
| 815 | + o: { | |
| 816 | + k: 100, | |
| 817 | + a: 0 | |
| 818 | + } | |
| 819 | + }; | |
| 820 | + if (!animationData.chars[i].t) { | |
| 821 | + charData.data.shapes.push({ ty: "no" }); | |
| 822 | + charData.data.shapes[0].it.push({ | |
| 823 | + p: { | |
| 824 | + k: [0, 0], | |
| 825 | + a: 0 | |
| 826 | + }, | |
| 827 | + s: { | |
| 828 | + k: [100, 100], | |
| 829 | + a: 0 | |
| 830 | + }, | |
| 831 | + a: { | |
| 832 | + k: [0, 0], | |
| 833 | + a: 0 | |
| 834 | + }, | |
| 835 | + r: { | |
| 836 | + k: 0, | |
| 837 | + a: 0 | |
| 838 | + }, | |
| 839 | + o: { | |
| 840 | + k: 100, | |
| 841 | + a: 0 | |
| 842 | + }, | |
| 843 | + sk: { | |
| 844 | + k: 0, | |
| 845 | + a: 0 | |
| 846 | + }, | |
| 847 | + sa: { | |
| 848 | + k: 0, | |
| 849 | + a: 0 | |
| 850 | + }, | |
| 851 | + ty: "tr" | |
| 852 | + }); | |
| 853 | + } | |
| 854 | + } | |
| 855 | + } | |
| 856 | + } | |
| 857 | + }; | |
| 858 | + }(); | |
| 859 | + var checkPathProperties = function() { | |
| 860 | + var minimumVersion = [ | |
| 861 | + 5, | |
| 862 | + 7, | |
| 863 | + 15 | |
| 864 | + ]; | |
| 865 | + function updateTextLayer(textLayer) { | |
| 866 | + var pathData = textLayer.t.p; | |
| 867 | + if (typeof pathData.a === "number") pathData.a = { | |
| 868 | + a: 0, | |
| 869 | + k: pathData.a | |
| 870 | + }; | |
| 871 | + if (typeof pathData.p === "number") pathData.p = { | |
| 872 | + a: 0, | |
| 873 | + k: pathData.p | |
| 874 | + }; | |
| 875 | + if (typeof pathData.r === "number") pathData.r = { | |
| 876 | + a: 0, | |
| 877 | + k: pathData.r | |
| 878 | + }; | |
| 879 | + } | |
| 880 | + function iterateLayers(layers) { | |
| 881 | + var i; | |
| 882 | + var len = layers.length; | |
| 883 | + for (i = 0; i < len; i += 1) if (layers[i].ty === 5) updateTextLayer(layers[i]); | |
| 884 | + } | |
| 885 | + return function(animationData) { | |
| 886 | + if (checkVersion(minimumVersion, animationData.v)) { | |
| 887 | + iterateLayers(animationData.layers); | |
| 888 | + if (animationData.assets) { | |
| 889 | + var i; | |
| 890 | + var len = animationData.assets.length; | |
| 891 | + for (i = 0; i < len; i += 1) if (animationData.assets[i].layers) iterateLayers(animationData.assets[i].layers); | |
| 892 | + } | |
| 893 | + } | |
| 894 | + }; | |
| 895 | + }(); | |
| 896 | + var checkColors = function() { | |
| 897 | + var minimumVersion = [ | |
| 898 | + 4, | |
| 899 | + 1, | |
| 900 | + 9 | |
| 901 | + ]; | |
| 902 | + function iterateShapes(shapes) { | |
| 903 | + var i; | |
| 904 | + var len = shapes.length; | |
| 905 | + var j; | |
| 906 | + var jLen; | |
| 907 | + for (i = 0; i < len; i += 1) if (shapes[i].ty === "gr") iterateShapes(shapes[i].it); | |
| 908 | + else if (shapes[i].ty === "fl" || shapes[i].ty === "st") if (shapes[i].c.k && shapes[i].c.k[0].i) { | |
| 909 | + jLen = shapes[i].c.k.length; | |
| 910 | + for (j = 0; j < jLen; j += 1) { | |
| 911 | + if (shapes[i].c.k[j].s) { | |
| 912 | + shapes[i].c.k[j].s[0] /= 255; | |
| 913 | + shapes[i].c.k[j].s[1] /= 255; | |
| 914 | + shapes[i].c.k[j].s[2] /= 255; | |
| 915 | + shapes[i].c.k[j].s[3] /= 255; | |
| 916 | + } | |
| 917 | + if (shapes[i].c.k[j].e) { | |
| 918 | + shapes[i].c.k[j].e[0] /= 255; | |
| 919 | + shapes[i].c.k[j].e[1] /= 255; | |
| 920 | + shapes[i].c.k[j].e[2] /= 255; | |
| 921 | + shapes[i].c.k[j].e[3] /= 255; | |
| 922 | + } | |
| 923 | + } | |
| 924 | + } else { | |
| 925 | + shapes[i].c.k[0] /= 255; | |
| 926 | + shapes[i].c.k[1] /= 255; | |
| 927 | + shapes[i].c.k[2] /= 255; | |
| 928 | + shapes[i].c.k[3] /= 255; | |
| 929 | + } | |
| 930 | + } | |
| 931 | + function iterateLayers(layers) { | |
| 932 | + var i; | |
| 933 | + var len = layers.length; | |
| 934 | + for (i = 0; i < len; i += 1) if (layers[i].ty === 4) iterateShapes(layers[i].shapes); | |
| 935 | + } | |
| 936 | + return function(animationData) { | |
| 937 | + if (checkVersion(minimumVersion, animationData.v)) { | |
| 938 | + iterateLayers(animationData.layers); | |
| 939 | + if (animationData.assets) { | |
| 940 | + var i; | |
| 941 | + var len = animationData.assets.length; | |
| 942 | + for (i = 0; i < len; i += 1) if (animationData.assets[i].layers) iterateLayers(animationData.assets[i].layers); | |
| 943 | + } | |
| 944 | + } | |
| 945 | + }; | |
| 946 | + }(); | |
| 947 | + var checkShapes = function() { | |
| 948 | + var minimumVersion = [ | |
| 949 | + 4, | |
| 950 | + 4, | |
| 951 | + 18 | |
| 952 | + ]; | |
| 953 | + function completeClosingShapes(arr) { | |
| 954 | + var i; | |
| 955 | + var len = arr.length; | |
| 956 | + var j; | |
| 957 | + var jLen; | |
| 958 | + for (i = len - 1; i >= 0; i -= 1) if (arr[i].ty === "sh") if (arr[i].ks.k.i) arr[i].ks.k.c = arr[i].closed; | |
| 959 | + else { | |
| 960 | + jLen = arr[i].ks.k.length; | |
| 961 | + for (j = 0; j < jLen; j += 1) { | |
| 962 | + if (arr[i].ks.k[j].s) arr[i].ks.k[j].s[0].c = arr[i].closed; | |
| 963 | + if (arr[i].ks.k[j].e) arr[i].ks.k[j].e[0].c = arr[i].closed; | |
| 964 | + } | |
| 965 | + } | |
| 966 | + else if (arr[i].ty === "gr") completeClosingShapes(arr[i].it); | |
| 967 | + } | |
| 968 | + function iterateLayers(layers) { | |
| 969 | + var layerData; | |
| 970 | + var i; | |
| 971 | + var len = layers.length; | |
| 972 | + var j; | |
| 973 | + var jLen; | |
| 974 | + var k; | |
| 975 | + var kLen; | |
| 976 | + for (i = 0; i < len; i += 1) { | |
| 977 | + layerData = layers[i]; | |
| 978 | + if (layerData.hasMask) { | |
| 979 | + var maskProps = layerData.masksProperties; | |
| 980 | + jLen = maskProps.length; | |
| 981 | + for (j = 0; j < jLen; j += 1) if (maskProps[j].pt.k.i) maskProps[j].pt.k.c = maskProps[j].cl; | |
| 982 | + else { | |
| 983 | + kLen = maskProps[j].pt.k.length; | |
| 984 | + for (k = 0; k < kLen; k += 1) { | |
| 985 | + if (maskProps[j].pt.k[k].s) maskProps[j].pt.k[k].s[0].c = maskProps[j].cl; | |
| 986 | + if (maskProps[j].pt.k[k].e) maskProps[j].pt.k[k].e[0].c = maskProps[j].cl; | |
| 987 | + } | |
| 988 | + } | |
| 989 | + } | |
| 990 | + if (layerData.ty === 4) completeClosingShapes(layerData.shapes); | |
| 991 | + } | |
| 992 | + } | |
| 993 | + return function(animationData) { | |
| 994 | + if (checkVersion(minimumVersion, animationData.v)) { | |
| 995 | + iterateLayers(animationData.layers); | |
| 996 | + if (animationData.assets) { | |
| 997 | + var i; | |
| 998 | + var len = animationData.assets.length; | |
| 999 | + for (i = 0; i < len; i += 1) if (animationData.assets[i].layers) iterateLayers(animationData.assets[i].layers); | |
| 1000 | + } | |
| 1001 | + } | |
| 1002 | + }; | |
| 1003 | + }(); | |
| 1004 | + function completeData(animationData) { | |
| 1005 | + if (animationData.__complete) return; | |
| 1006 | + checkColors(animationData); | |
| 1007 | + checkText(animationData); | |
| 1008 | + checkChars(animationData); | |
| 1009 | + checkPathProperties(animationData); | |
| 1010 | + checkShapes(animationData); | |
| 1011 | + completeLayers(animationData.layers, animationData.assets); | |
| 1012 | + completeChars(animationData.chars, animationData.assets); | |
| 1013 | + animationData.__complete = true; | |
| 1014 | + } | |
| 1015 | + function completeText(data) { | |
| 1016 | + if (data.t.a.length === 0 && !("m" in data.t.p)) {} | |
| 1017 | + } | |
| 1018 | + var moduleOb = {}; | |
| 1019 | + moduleOb.completeData = completeData; | |
| 1020 | + moduleOb.checkColors = checkColors; | |
| 1021 | + moduleOb.checkChars = checkChars; | |
| 1022 | + moduleOb.checkPathProperties = checkPathProperties; | |
| 1023 | + moduleOb.checkShapes = checkShapes; | |
| 1024 | + moduleOb.completeLayers = completeLayers; | |
| 1025 | + return moduleOb; | |
| 1026 | + } | |
| 1027 | + if (!_workerSelf.dataManager) _workerSelf.dataManager = dataFunctionManager(); | |
| 1028 | + if (!_workerSelf.assetLoader) _workerSelf.assetLoader = function() { | |
| 1029 | + function formatResponse(xhr) { | |
| 1030 | + var contentTypeHeader = xhr.getResponseHeader("content-type"); | |
| 1031 | + if (contentTypeHeader && xhr.responseType === "json" && contentTypeHeader.indexOf("json") !== -1) return xhr.response; | |
| 1032 | + if (xhr.response && _typeof$5(xhr.response) === "object") return xhr.response; | |
| 1033 | + if (xhr.response && typeof xhr.response === "string") return JSON.parse(xhr.response); | |
| 1034 | + if (xhr.responseText) return JSON.parse(xhr.responseText); | |
| 1035 | + return null; | |
| 1036 | + } | |
| 1037 | + function loadAsset(path, fullPath, callback, errorCallback) { | |
| 1038 | + var response; | |
| 1039 | + var xhr = new XMLHttpRequest(); | |
| 1040 | + try { | |
| 1041 | + xhr.responseType = "json"; | |
| 1042 | + } catch (err) {} | |
| 1043 | + xhr.onreadystatechange = function() { | |
| 1044 | + if (xhr.readyState === 4) if (xhr.status === 200) { | |
| 1045 | + response = formatResponse(xhr); | |
| 1046 | + callback(response); | |
| 1047 | + } else try { | |
| 1048 | + response = formatResponse(xhr); | |
| 1049 | + callback(response); | |
| 1050 | + } catch (err) { | |
| 1051 | + if (errorCallback) errorCallback(err); | |
| 1052 | + } | |
| 1053 | + }; | |
| 1054 | + try { | |
| 1055 | + xhr.open([ | |
| 1056 | + "G", | |
| 1057 | + "E", | |
| 1058 | + "T" | |
| 1059 | + ].join(""), path, true); | |
| 1060 | + } catch (error) { | |
| 1061 | + xhr.open([ | |
| 1062 | + "G", | |
| 1063 | + "E", | |
| 1064 | + "T" | |
| 1065 | + ].join(""), fullPath + "/" + path, true); | |
| 1066 | + } | |
| 1067 | + xhr.send(); | |
| 1068 | + } | |
| 1069 | + return { load: loadAsset }; | |
| 1070 | + }(); | |
| 1071 | + if (e.data.type === "loadAnimation") _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function(data) { | |
| 1072 | + _workerSelf.dataManager.completeData(data); | |
| 1073 | + _workerSelf.postMessage({ | |
| 1074 | + id: e.data.id, | |
| 1075 | + payload: data, | |
| 1076 | + status: "success" | |
| 1077 | + }); | |
| 1078 | + }, function() { | |
| 1079 | + _workerSelf.postMessage({ | |
| 1080 | + id: e.data.id, | |
| 1081 | + status: "error" | |
| 1082 | + }); | |
| 1083 | + }); | |
| 1084 | + else if (e.data.type === "complete") { | |
| 1085 | + var animation = e.data.animation; | |
| 1086 | + _workerSelf.dataManager.completeData(animation); | |
| 1087 | + _workerSelf.postMessage({ | |
| 1088 | + id: e.data.id, | |
| 1089 | + payload: animation, | |
| 1090 | + status: "success" | |
| 1091 | + }); | |
| 1092 | + } else if (e.data.type === "loadData") _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function(data) { | |
| 1093 | + _workerSelf.postMessage({ | |
| 1094 | + id: e.data.id, | |
| 1095 | + payload: data, | |
| 1096 | + status: "success" | |
| 1097 | + }); | |
| 1098 | + }, function() { | |
| 1099 | + _workerSelf.postMessage({ | |
| 1100 | + id: e.data.id, | |
| 1101 | + status: "error" | |
| 1102 | + }); | |
| 1103 | + }); | |
| 1104 | + }); | |
| 1105 | + workerInstance.onmessage = function(event) { | |
| 1106 | + var data = event.data; | |
| 1107 | + var id = data.id; | |
| 1108 | + var process = processes[id]; | |
| 1109 | + processes[id] = null; | |
| 1110 | + if (data.status === "success") process.onComplete(data.payload); | |
| 1111 | + else if (process.onError) process.onError(); | |
| 1112 | + }; | |
| 1113 | + } | |
| 1114 | + } | |
| 1115 | + function createProcess(onComplete, onError) { | |
| 1116 | + _counterId += 1; | |
| 1117 | + var id = "processId_" + _counterId; | |
| 1118 | + processes[id] = { | |
| 1119 | + onComplete, | |
| 1120 | + onError | |
| 1121 | + }; | |
| 1122 | + return id; | |
| 1123 | + } | |
| 1124 | + function loadAnimation(path, onComplete, onError) { | |
| 1125 | + setupWorker(); | |
| 1126 | + var processId = createProcess(onComplete, onError); | |
| 1127 | + workerInstance.postMessage({ | |
| 1128 | + type: "loadAnimation", | |
| 1129 | + path, | |
| 1130 | + fullPath: window.location.origin + window.location.pathname, | |
| 1131 | + id: processId | |
| 1132 | + }); | |
| 1133 | + } | |
| 1134 | + function loadData(path, onComplete, onError) { | |
| 1135 | + setupWorker(); | |
| 1136 | + var processId = createProcess(onComplete, onError); | |
| 1137 | + workerInstance.postMessage({ | |
| 1138 | + type: "loadData", | |
| 1139 | + path, | |
| 1140 | + fullPath: window.location.origin + window.location.pathname, | |
| 1141 | + id: processId | |
| 1142 | + }); | |
| 1143 | + } | |
| 1144 | + function completeAnimation(anim, onComplete, onError) { | |
| 1145 | + setupWorker(); | |
| 1146 | + var processId = createProcess(onComplete, onError); | |
| 1147 | + workerInstance.postMessage({ | |
| 1148 | + type: "complete", | |
| 1149 | + animation: anim, | |
| 1150 | + id: processId | |
| 1151 | + }); | |
| 1152 | + } | |
| 1153 | + return { | |
| 1154 | + loadAnimation, | |
| 1155 | + loadData, | |
| 1156 | + completeAnimation | |
| 1157 | + }; | |
| 1158 | + }(); | |
| 1159 | + var ImagePreloader = function() { | |
| 1160 | + var proxyImage = function() { | |
| 1161 | + var canvas = createTag("canvas"); | |
| 1162 | + canvas.width = 1; | |
| 1163 | + canvas.height = 1; | |
| 1164 | + var ctx = canvas.getContext("2d"); | |
| 1165 | + ctx.fillStyle = "rgba(0,0,0,0)"; | |
| 1166 | + ctx.fillRect(0, 0, 1, 1); | |
| 1167 | + return canvas; | |
| 1168 | + }(); | |
| 1169 | + function imageLoaded() { | |
| 1170 | + this.loadedAssets += 1; | |
| 1171 | + if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { | |
| 1172 | + if (this.imagesLoadedCb) this.imagesLoadedCb(null); | |
| 1173 | + } | |
| 1174 | + } | |
| 1175 | + function footageLoaded() { | |
| 1176 | + this.loadedFootagesCount += 1; | |
| 1177 | + if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { | |
| 1178 | + if (this.imagesLoadedCb) this.imagesLoadedCb(null); | |
| 1179 | + } | |
| 1180 | + } | |
| 1181 | + function getAssetsPath(assetData, assetsPath, originalPath) { | |
| 1182 | + var path = ""; | |
| 1183 | + if (assetData.e) path = assetData.p; | |
| 1184 | + else if (assetsPath) { | |
| 1185 | + var imagePath = assetData.p; | |
| 1186 | + if (imagePath.indexOf("images/") !== -1) imagePath = imagePath.split("/")[1]; | |
| 1187 | + path = assetsPath + imagePath; | |
| 1188 | + } else { | |
| 1189 | + path = originalPath; | |
| 1190 | + path += assetData.u ? assetData.u : ""; | |
| 1191 | + path += assetData.p; | |
| 1192 | + } | |
| 1193 | + return path; | |
| 1194 | + } | |
| 1195 | + function testImageLoaded(img) { | |
| 1196 | + var _count = 0; | |
| 1197 | + var intervalId = setInterval(function() { | |
| 1198 | + if (img.getBBox().width || _count > 500) { | |
| 1199 | + this._imageLoaded(); | |
| 1200 | + clearInterval(intervalId); | |
| 1201 | + } | |
| 1202 | + _count += 1; | |
| 1203 | + }.bind(this), 50); | |
| 1204 | + } | |
| 1205 | + function createImageData(assetData) { | |
| 1206 | + var path = getAssetsPath(assetData, this.assetsPath, this.path); | |
| 1207 | + var img = createNS("image"); | |
| 1208 | + if (isSafari) this.testImageLoaded(img); | |
| 1209 | + else img.addEventListener("load", this._imageLoaded, false); | |
| 1210 | + img.addEventListener("error", function() { | |
| 1211 | + ob.img = proxyImage; | |
| 1212 | + this._imageLoaded(); | |
| 1213 | + }.bind(this), false); | |
| 1214 | + img.setAttributeNS("http://www.w3.org/1999/xlink", "href", path); | |
| 1215 | + if (this._elementHelper.append) this._elementHelper.append(img); | |
| 1216 | + else this._elementHelper.appendChild(img); | |
| 1217 | + var ob = { | |
| 1218 | + img, | |
| 1219 | + assetData | |
| 1220 | + }; | |
| 1221 | + return ob; | |
| 1222 | + } | |
| 1223 | + function createImgData(assetData) { | |
| 1224 | + var path = getAssetsPath(assetData, this.assetsPath, this.path); | |
| 1225 | + var img = createTag("img"); | |
| 1226 | + img.crossOrigin = "anonymous"; | |
| 1227 | + img.addEventListener("load", this._imageLoaded, false); | |
| 1228 | + img.addEventListener("error", function() { | |
| 1229 | + ob.img = proxyImage; | |
| 1230 | + this._imageLoaded(); | |
| 1231 | + }.bind(this), false); | |
| 1232 | + img.src = path; | |
| 1233 | + var ob = { | |
| 1234 | + img, | |
| 1235 | + assetData | |
| 1236 | + }; | |
| 1237 | + return ob; | |
| 1238 | + } | |
| 1239 | + function createFootageData(data) { | |
| 1240 | + var ob = { assetData: data }; | |
| 1241 | + var path = getAssetsPath(data, this.assetsPath, this.path); | |
| 1242 | + dataManager.loadData(path, function(footageData) { | |
| 1243 | + ob.img = footageData; | |
| 1244 | + this._footageLoaded(); | |
| 1245 | + }.bind(this), function() { | |
| 1246 | + ob.img = {}; | |
| 1247 | + this._footageLoaded(); | |
| 1248 | + }.bind(this)); | |
| 1249 | + return ob; | |
| 1250 | + } | |
| 1251 | + function loadAssets(assets, cb) { | |
| 1252 | + this.imagesLoadedCb = cb; | |
| 1253 | + var i; | |
| 1254 | + var len = assets.length; | |
| 1255 | + for (i = 0; i < len; i += 1) if (!assets[i].layers) { | |
| 1256 | + if (!assets[i].t || assets[i].t === "seq") { | |
| 1257 | + this.totalImages += 1; | |
| 1258 | + this.images.push(this._createImageData(assets[i])); | |
| 1259 | + } else if (assets[i].t === 3) { | |
| 1260 | + this.totalFootages += 1; | |
| 1261 | + this.images.push(this.createFootageData(assets[i])); | |
| 1262 | + } | |
| 1263 | + } | |
| 1264 | + } | |
| 1265 | + function setPath(path) { | |
| 1266 | + this.path = path || ""; | |
| 1267 | + } | |
| 1268 | + function setAssetsPath(path) { | |
| 1269 | + this.assetsPath = path || ""; | |
| 1270 | + } | |
| 1271 | + function getAsset(assetData) { | |
| 1272 | + var i = 0; | |
| 1273 | + var len = this.images.length; | |
| 1274 | + while (i < len) { | |
| 1275 | + if (this.images[i].assetData === assetData) return this.images[i].img; | |
| 1276 | + i += 1; | |
| 1277 | + } | |
| 1278 | + return null; | |
| 1279 | + } | |
| 1280 | + function destroy() { | |
| 1281 | + this.imagesLoadedCb = null; | |
| 1282 | + this.images.length = 0; | |
| 1283 | + } | |
| 1284 | + function loadedImages() { | |
| 1285 | + return this.totalImages === this.loadedAssets; | |
| 1286 | + } | |
| 1287 | + function loadedFootages() { | |
| 1288 | + return this.totalFootages === this.loadedFootagesCount; | |
| 1289 | + } | |
| 1290 | + function setCacheType(type, elementHelper) { | |
| 1291 | + if (type === "svg") { | |
| 1292 | + this._elementHelper = elementHelper; | |
| 1293 | + this._createImageData = this.createImageData.bind(this); | |
| 1294 | + } else this._createImageData = this.createImgData.bind(this); | |
| 1295 | + } | |
| 1296 | + function ImagePreloaderFactory() { | |
| 1297 | + this._imageLoaded = imageLoaded.bind(this); | |
| 1298 | + this._footageLoaded = footageLoaded.bind(this); | |
| 1299 | + this.testImageLoaded = testImageLoaded.bind(this); | |
| 1300 | + this.createFootageData = createFootageData.bind(this); | |
| 1301 | + this.assetsPath = ""; | |
| 1302 | + this.path = ""; | |
| 1303 | + this.totalImages = 0; | |
| 1304 | + this.totalFootages = 0; | |
| 1305 | + this.loadedAssets = 0; | |
| 1306 | + this.loadedFootagesCount = 0; | |
| 1307 | + this.imagesLoadedCb = null; | |
| 1308 | + this.images = []; | |
| 1309 | + } | |
| 1310 | + ImagePreloaderFactory.prototype = { | |
| 1311 | + loadAssets, | |
| 1312 | + setAssetsPath, | |
| 1313 | + setPath, | |
| 1314 | + loadedImages, | |
| 1315 | + loadedFootages, | |
| 1316 | + destroy, | |
| 1317 | + getAsset, | |
| 1318 | + createImgData, | |
| 1319 | + createImageData, | |
| 1320 | + imageLoaded, | |
| 1321 | + footageLoaded, | |
| 1322 | + setCacheType | |
| 1323 | + }; | |
| 1324 | + return ImagePreloaderFactory; | |
| 1325 | + }(); | |
| 1326 | + function BaseEvent() {} | |
| 1327 | + BaseEvent.prototype = { | |
| 1328 | + triggerEvent: function triggerEvent(eventName, args) { | |
| 1329 | + if (this._cbs[eventName]) { | |
| 1330 | + var callbacks = this._cbs[eventName]; | |
| 1331 | + for (var i = 0; i < callbacks.length; i += 1) callbacks[i](args); | |
| 1332 | + } | |
| 1333 | + }, | |
| 1334 | + addEventListener: function addEventListener(eventName, callback) { | |
| 1335 | + if (!this._cbs[eventName]) this._cbs[eventName] = []; | |
| 1336 | + this._cbs[eventName].push(callback); | |
| 1337 | + return function() { | |
| 1338 | + this.removeEventListener(eventName, callback); | |
| 1339 | + }.bind(this); | |
| 1340 | + }, | |
| 1341 | + removeEventListener: function removeEventListener(eventName, callback) { | |
| 1342 | + if (!callback) this._cbs[eventName] = null; | |
| 1343 | + else if (this._cbs[eventName]) { | |
| 1344 | + var i = 0; | |
| 1345 | + var len = this._cbs[eventName].length; | |
| 1346 | + while (i < len) { | |
| 1347 | + if (this._cbs[eventName][i] === callback) { | |
| 1348 | + this._cbs[eventName].splice(i, 1); | |
| 1349 | + i -= 1; | |
| 1350 | + len -= 1; | |
| 1351 | + } | |
| 1352 | + i += 1; | |
| 1353 | + } | |
| 1354 | + if (!this._cbs[eventName].length) this._cbs[eventName] = null; | |
| 1355 | + } | |
| 1356 | + } | |
| 1357 | + }; | |
| 1358 | + var markerParser = function() { | |
| 1359 | + function parsePayloadLines(payload) { | |
| 1360 | + var lines = payload.split("\r\n"); | |
| 1361 | + var keys = {}; | |
| 1362 | + var line; | |
| 1363 | + var keysCount = 0; | |
| 1364 | + for (var i = 0; i < lines.length; i += 1) { | |
| 1365 | + line = lines[i].split(":"); | |
| 1366 | + if (line.length === 2) { | |
| 1367 | + keys[line[0]] = line[1].trim(); | |
| 1368 | + keysCount += 1; | |
| 1369 | + } | |
| 1370 | + } | |
| 1371 | + if (keysCount === 0) throw new Error(); | |
| 1372 | + return keys; | |
| 1373 | + } | |
| 1374 | + return function(_markers) { | |
| 1375 | + var markers = []; | |
| 1376 | + for (var i = 0; i < _markers.length; i += 1) { | |
| 1377 | + var _marker = _markers[i]; | |
| 1378 | + var markerData = { | |
| 1379 | + time: _marker.tm, | |
| 1380 | + duration: _marker.dr | |
| 1381 | + }; | |
| 1382 | + try { | |
| 1383 | + markerData.payload = JSON.parse(_markers[i].cm); | |
| 1384 | + } catch (_) { | |
| 1385 | + try { | |
| 1386 | + markerData.payload = parsePayloadLines(_markers[i].cm); | |
| 1387 | + } catch (__) { | |
| 1388 | + markerData.payload = { name: _markers[i].cm }; | |
| 1389 | + } | |
| 1390 | + } | |
| 1391 | + markers.push(markerData); | |
| 1392 | + } | |
| 1393 | + return markers; | |
| 1394 | + }; | |
| 1395 | + }(); | |
| 1396 | + var ProjectInterface = function() { | |
| 1397 | + function registerComposition(comp) { | |
| 1398 | + this.compositions.push(comp); | |
| 1399 | + } | |
| 1400 | + return function() { | |
| 1401 | + function _thisProjectFunction(name) { | |
| 1402 | + var i = 0; | |
| 1403 | + var len = this.compositions.length; | |
| 1404 | + while (i < len) { | |
| 1405 | + if (this.compositions[i].data && this.compositions[i].data.nm === name) { | |
| 1406 | + if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) this.compositions[i].prepareFrame(this.currentFrame); | |
| 1407 | + return this.compositions[i].compInterface; | |
| 1408 | + } | |
| 1409 | + i += 1; | |
| 1410 | + } | |
| 1411 | + return null; | |
| 1412 | + } | |
| 1413 | + _thisProjectFunction.compositions = []; | |
| 1414 | + _thisProjectFunction.currentFrame = 0; | |
| 1415 | + _thisProjectFunction.registerComposition = registerComposition; | |
| 1416 | + return _thisProjectFunction; | |
| 1417 | + }; | |
| 1418 | + }(); | |
| 1419 | + var renderers = {}; | |
| 1420 | + var registerRenderer = function registerRenderer(key, value) { | |
| 1421 | + renderers[key] = value; | |
| 1422 | + }; | |
| 1423 | + function getRenderer(key) { | |
| 1424 | + return renderers[key]; | |
| 1425 | + } | |
| 1426 | + function getRegisteredRenderer() { | |
| 1427 | + if (renderers.canvas) return "canvas"; | |
| 1428 | + for (var key in renderers) if (renderers[key]) return key; | |
| 1429 | + return ""; | |
| 1430 | + } | |
| 1431 | + function _typeof$4(o) { | |
| 1432 | + "@babel/helpers - typeof"; | |
| 1433 | + return _typeof$4 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) { | |
| 1434 | + return typeof o; | |
| 1435 | + } : function(o) { | |
| 1436 | + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; | |
| 1437 | + }, _typeof$4(o); | |
| 1438 | + } | |
| 1439 | + var AnimationItem = function AnimationItem() { | |
| 1440 | + this._cbs = []; | |
| 1441 | + this.name = ""; | |
| 1442 | + this.path = ""; | |
| 1443 | + this.isLoaded = false; | |
| 1444 | + this.currentFrame = 0; | |
| 1445 | + this.currentRawFrame = 0; | |
| 1446 | + this.firstFrame = 0; | |
| 1447 | + this.totalFrames = 0; | |
| 1448 | + this.frameRate = 0; | |
| 1449 | + this.frameMult = 0; | |
| 1450 | + this.playSpeed = 1; | |
| 1451 | + this.playDirection = 1; | |
| 1452 | + this.playCount = 0; | |
| 1453 | + this.animationData = {}; | |
| 1454 | + this.assets = []; | |
| 1455 | + this.isPaused = true; | |
| 1456 | + this.autoplay = false; | |
| 1457 | + this.loop = true; | |
| 1458 | + this.renderer = null; | |
| 1459 | + this.animationID = createElementID(); | |
| 1460 | + this.assetsPath = ""; | |
| 1461 | + this.timeCompleted = 0; | |
| 1462 | + this.segmentPos = 0; | |
| 1463 | + this.isSubframeEnabled = getSubframeEnabled(); | |
| 1464 | + this.segments = []; | |
| 1465 | + this._idle = true; | |
| 1466 | + this._completedLoop = false; | |
| 1467 | + this.projectInterface = ProjectInterface(); | |
| 1468 | + this.imagePreloader = new ImagePreloader(); | |
| 1469 | + this.audioController = audioControllerFactory(); | |
| 1470 | + this.markers = []; | |
| 1471 | + this.configAnimation = this.configAnimation.bind(this); | |
| 1472 | + this.onSetupError = this.onSetupError.bind(this); | |
| 1473 | + this.onSegmentComplete = this.onSegmentComplete.bind(this); | |
| 1474 | + this.drawnFrameEvent = new BMEnterFrameEvent("drawnFrame", 0, 0, 0); | |
| 1475 | + this.expressionsPlugin = getExpressionsPlugin(); | |
| 1476 | + }; | |
| 1477 | + extendPrototype([BaseEvent], AnimationItem); | |
| 1478 | + AnimationItem.prototype.setParams = function(params) { | |
| 1479 | + if (params.wrapper || params.container) this.wrapper = params.wrapper || params.container; | |
| 1480 | + var animType = "svg"; | |
| 1481 | + if (params.animType) animType = params.animType; | |
| 1482 | + else if (params.renderer) animType = params.renderer; | |
| 1483 | + var RendererClass = getRenderer(animType); | |
| 1484 | + this.renderer = new RendererClass(this, params.rendererSettings); | |
| 1485 | + this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs); | |
| 1486 | + this.renderer.setProjectInterface(this.projectInterface); | |
| 1487 | + this.animType = animType; | |
| 1488 | + if (params.loop === "" || params.loop === null || params.loop === void 0 || params.loop === true) this.loop = true; | |
| 1489 | + else if (params.loop === false) this.loop = false; | |
| 1490 | + else this.loop = parseInt(params.loop, 10); | |
| 1491 | + this.autoplay = "autoplay" in params ? params.autoplay : true; | |
| 1492 | + this.name = params.name ? params.name : ""; | |
| 1493 | + this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, "autoloadSegments") ? params.autoloadSegments : true; | |
| 1494 | + this.assetsPath = params.assetsPath; | |
| 1495 | + this.initialSegment = params.initialSegment; | |
| 1496 | + if (params.audioFactory) this.audioController.setAudioFactory(params.audioFactory); | |
| 1497 | + if (params.animationData) this.setupAnimation(params.animationData); | |
| 1498 | + else if (params.path) { | |
| 1499 | + if (params.path.lastIndexOf("\\") !== -1) this.path = params.path.substr(0, params.path.lastIndexOf("\\") + 1); | |
| 1500 | + else this.path = params.path.substr(0, params.path.lastIndexOf("/") + 1); | |
| 1501 | + this.fileName = params.path.substr(params.path.lastIndexOf("/") + 1); | |
| 1502 | + this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf(".json")); | |
| 1503 | + dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError); | |
| 1504 | + } | |
| 1505 | + }; | |
| 1506 | + AnimationItem.prototype.onSetupError = function() { | |
| 1507 | + this.trigger("data_failed"); | |
| 1508 | + }; | |
| 1509 | + AnimationItem.prototype.setupAnimation = function(data) { | |
| 1510 | + dataManager.completeAnimation(data, this.configAnimation); | |
| 1511 | + }; | |
| 1512 | + AnimationItem.prototype.setData = function(wrapper, animationData) { | |
| 1513 | + if (animationData) { | |
| 1514 | + if (_typeof$4(animationData) !== "object") animationData = JSON.parse(animationData); | |
| 1515 | + } | |
| 1516 | + var params = { | |
| 1517 | + wrapper, | |
| 1518 | + animationData | |
| 1519 | + }; | |
| 1520 | + var wrapperAttributes = wrapper.attributes; | |
| 1521 | + params.path = wrapperAttributes.getNamedItem("data-animation-path") ? wrapperAttributes.getNamedItem("data-animation-path").value : wrapperAttributes.getNamedItem("data-bm-path") ? wrapperAttributes.getNamedItem("data-bm-path").value : wrapperAttributes.getNamedItem("bm-path") ? wrapperAttributes.getNamedItem("bm-path").value : ""; | |
| 1522 | + params.animType = wrapperAttributes.getNamedItem("data-anim-type") ? wrapperAttributes.getNamedItem("data-anim-type").value : wrapperAttributes.getNamedItem("data-bm-type") ? wrapperAttributes.getNamedItem("data-bm-type").value : wrapperAttributes.getNamedItem("bm-type") ? wrapperAttributes.getNamedItem("bm-type").value : wrapperAttributes.getNamedItem("data-bm-renderer") ? wrapperAttributes.getNamedItem("data-bm-renderer").value : wrapperAttributes.getNamedItem("bm-renderer") ? wrapperAttributes.getNamedItem("bm-renderer").value : getRegisteredRenderer() || "canvas"; | |
| 1523 | + var loop = wrapperAttributes.getNamedItem("data-anim-loop") ? wrapperAttributes.getNamedItem("data-anim-loop").value : wrapperAttributes.getNamedItem("data-bm-loop") ? wrapperAttributes.getNamedItem("data-bm-loop").value : wrapperAttributes.getNamedItem("bm-loop") ? wrapperAttributes.getNamedItem("bm-loop").value : ""; | |
| 1524 | + if (loop === "false") params.loop = false; | |
| 1525 | + else if (loop === "true") params.loop = true; | |
| 1526 | + else if (loop !== "") params.loop = parseInt(loop, 10); | |
| 1527 | + params.autoplay = (wrapperAttributes.getNamedItem("data-anim-autoplay") ? wrapperAttributes.getNamedItem("data-anim-autoplay").value : wrapperAttributes.getNamedItem("data-bm-autoplay") ? wrapperAttributes.getNamedItem("data-bm-autoplay").value : wrapperAttributes.getNamedItem("bm-autoplay") ? wrapperAttributes.getNamedItem("bm-autoplay").value : true) !== "false"; | |
| 1528 | + params.name = wrapperAttributes.getNamedItem("data-name") ? wrapperAttributes.getNamedItem("data-name").value : wrapperAttributes.getNamedItem("data-bm-name") ? wrapperAttributes.getNamedItem("data-bm-name").value : wrapperAttributes.getNamedItem("bm-name") ? wrapperAttributes.getNamedItem("bm-name").value : ""; | |
| 1529 | + if ((wrapperAttributes.getNamedItem("data-anim-prerender") ? wrapperAttributes.getNamedItem("data-anim-prerender").value : wrapperAttributes.getNamedItem("data-bm-prerender") ? wrapperAttributes.getNamedItem("data-bm-prerender").value : wrapperAttributes.getNamedItem("bm-prerender") ? wrapperAttributes.getNamedItem("bm-prerender").value : "") === "false") params.prerender = false; | |
| 1530 | + if (!params.path) this.trigger("destroy"); | |
| 1531 | + else this.setParams(params); | |
| 1532 | + }; | |
| 1533 | + AnimationItem.prototype.includeLayers = function(data) { | |
| 1534 | + if (data.op > this.animationData.op) { | |
| 1535 | + this.animationData.op = data.op; | |
| 1536 | + this.totalFrames = Math.floor(data.op - this.animationData.ip); | |
| 1537 | + } | |
| 1538 | + var layers = this.animationData.layers; | |
| 1539 | + var i; | |
| 1540 | + var len = layers.length; | |
| 1541 | + var newLayers = data.layers; | |
| 1542 | + var j; | |
| 1543 | + var jLen = newLayers.length; | |
| 1544 | + for (j = 0; j < jLen; j += 1) { | |
| 1545 | + i = 0; | |
| 1546 | + while (i < len) { | |
| 1547 | + if (layers[i].id === newLayers[j].id) { | |
| 1548 | + layers[i] = newLayers[j]; | |
| 1549 | + break; | |
| 1550 | + } | |
| 1551 | + i += 1; | |
| 1552 | + } | |
| 1553 | + } | |
| 1554 | + if (data.chars || data.fonts) { | |
| 1555 | + this.renderer.globalData.fontManager.addChars(data.chars); | |
| 1556 | + this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs); | |
| 1557 | + } | |
| 1558 | + if (data.assets) { | |
| 1559 | + len = data.assets.length; | |
| 1560 | + for (i = 0; i < len; i += 1) this.animationData.assets.push(data.assets[i]); | |
| 1561 | + } | |
| 1562 | + this.animationData.__complete = false; | |
| 1563 | + dataManager.completeAnimation(this.animationData, this.onSegmentComplete); | |
| 1564 | + }; | |
| 1565 | + AnimationItem.prototype.onSegmentComplete = function(data) { | |
| 1566 | + this.animationData = data; | |
| 1567 | + var expressionsPlugin = getExpressionsPlugin(); | |
| 1568 | + if (expressionsPlugin) expressionsPlugin.initExpressions(this); | |
| 1569 | + this.loadNextSegment(); | |
| 1570 | + }; | |
| 1571 | + AnimationItem.prototype.loadNextSegment = function() { | |
| 1572 | + var segments = this.animationData.segments; | |
| 1573 | + if (!segments || segments.length === 0 || !this.autoloadSegments) { | |
| 1574 | + this.trigger("data_ready"); | |
| 1575 | + this.timeCompleted = this.totalFrames; | |
| 1576 | + return; | |
| 1577 | + } | |
| 1578 | + var segment = segments.shift(); | |
| 1579 | + this.timeCompleted = segment.time * this.frameRate; | |
| 1580 | + var segmentPath = this.path + this.fileName + "_" + this.segmentPos + ".json"; | |
| 1581 | + this.segmentPos += 1; | |
| 1582 | + dataManager.loadData(segmentPath, this.includeLayers.bind(this), function() { | |
| 1583 | + this.trigger("data_failed"); | |
| 1584 | + }.bind(this)); | |
| 1585 | + }; | |
| 1586 | + AnimationItem.prototype.loadSegments = function() { | |
| 1587 | + if (!this.animationData.segments) this.timeCompleted = this.totalFrames; | |
| 1588 | + this.loadNextSegment(); | |
| 1589 | + }; | |
| 1590 | + AnimationItem.prototype.imagesLoaded = function() { | |
| 1591 | + this.trigger("loaded_images"); | |
| 1592 | + this.checkLoaded(); | |
| 1593 | + }; | |
| 1594 | + AnimationItem.prototype.preloadImages = function() { | |
| 1595 | + this.imagePreloader.setAssetsPath(this.assetsPath); | |
| 1596 | + this.imagePreloader.setPath(this.path); | |
| 1597 | + this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this)); | |
| 1598 | + }; | |
| 1599 | + AnimationItem.prototype.configAnimation = function(animData) { | |
| 1600 | + if (!this.renderer) return; | |
| 1601 | + try { | |
| 1602 | + this.animationData = animData; | |
| 1603 | + if (this.initialSegment) { | |
| 1604 | + this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]); | |
| 1605 | + this.firstFrame = Math.round(this.initialSegment[0]); | |
| 1606 | + } else { | |
| 1607 | + this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip); | |
| 1608 | + this.firstFrame = Math.round(this.animationData.ip); | |
| 1609 | + } | |
| 1610 | + this.renderer.configAnimation(animData); | |
| 1611 | + if (!animData.assets) animData.assets = []; | |
| 1612 | + this.assets = this.animationData.assets; | |
| 1613 | + this.frameRate = this.animationData.fr; | |
| 1614 | + this.frameMult = this.animationData.fr / 1e3; | |
| 1615 | + this.renderer.searchExtraCompositions(animData.assets); | |
| 1616 | + this.markers = markerParser(animData.markers || []); | |
| 1617 | + this.trigger("config_ready"); | |
| 1618 | + this.preloadImages(); | |
| 1619 | + this.loadSegments(); | |
| 1620 | + this.updaFrameModifier(); | |
| 1621 | + this.waitForFontsLoaded(); | |
| 1622 | + if (this.isPaused) this.audioController.pause(); | |
| 1623 | + } catch (error) { | |
| 1624 | + this.triggerConfigError(error); | |
| 1625 | + } | |
| 1626 | + }; | |
| 1627 | + AnimationItem.prototype.waitForFontsLoaded = function() { | |
| 1628 | + if (!this.renderer) return; | |
| 1629 | + if (this.renderer.globalData.fontManager.isLoaded) this.checkLoaded(); | |
| 1630 | + else setTimeout(this.waitForFontsLoaded.bind(this), 20); | |
| 1631 | + }; | |
| 1632 | + AnimationItem.prototype.checkLoaded = function() { | |
| 1633 | + if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== "canvas") && this.imagePreloader.loadedFootages()) { | |
| 1634 | + this.isLoaded = true; | |
| 1635 | + var expressionsPlugin = getExpressionsPlugin(); | |
| 1636 | + if (expressionsPlugin) expressionsPlugin.initExpressions(this); | |
| 1637 | + this.renderer.initItems(); | |
| 1638 | + setTimeout(function() { | |
| 1639 | + this.trigger("DOMLoaded"); | |
| 1640 | + }.bind(this), 0); | |
| 1641 | + this.gotoFrame(); | |
| 1642 | + if (this.autoplay) this.play(); | |
| 1643 | + } | |
| 1644 | + }; | |
| 1645 | + AnimationItem.prototype.resize = function(width, height) { | |
| 1646 | + var _width = typeof width === "number" ? width : void 0; | |
| 1647 | + var _height = typeof height === "number" ? height : void 0; | |
| 1648 | + this.renderer.updateContainerSize(_width, _height); | |
| 1649 | + }; | |
| 1650 | + AnimationItem.prototype.setSubframe = function(flag) { | |
| 1651 | + this.isSubframeEnabled = !!flag; | |
| 1652 | + }; | |
| 1653 | + AnimationItem.prototype.gotoFrame = function() { | |
| 1654 | + this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; | |
| 1655 | + if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) this.currentFrame = this.timeCompleted; | |
| 1656 | + this.trigger("enterFrame"); | |
| 1657 | + this.renderFrame(); | |
| 1658 | + this.trigger("drawnFrame"); | |
| 1659 | + }; | |
| 1660 | + AnimationItem.prototype.renderFrame = function() { | |
| 1661 | + if (this.isLoaded === false || !this.renderer) return; | |
| 1662 | + try { | |
| 1663 | + if (this.expressionsPlugin) this.expressionsPlugin.resetFrame(); | |
| 1664 | + this.renderer.renderFrame(this.currentFrame + this.firstFrame); | |
| 1665 | + } catch (error) { | |
| 1666 | + this.triggerRenderFrameError(error); | |
| 1667 | + } | |
| 1668 | + }; | |
| 1669 | + AnimationItem.prototype.play = function(name) { | |
| 1670 | + if (name && this.name !== name) return; | |
| 1671 | + if (this.isPaused === true) { | |
| 1672 | + this.isPaused = false; | |
| 1673 | + this.trigger("_play"); | |
| 1674 | + this.audioController.resume(); | |
| 1675 | + if (this._idle) { | |
| 1676 | + this._idle = false; | |
| 1677 | + this.trigger("_active"); | |
| 1678 | + } | |
| 1679 | + } | |
| 1680 | + }; | |
| 1681 | + AnimationItem.prototype.pause = function(name) { | |
| 1682 | + if (name && this.name !== name) return; | |
| 1683 | + if (this.isPaused === false) { | |
| 1684 | + this.isPaused = true; | |
| 1685 | + this.trigger("_pause"); | |
| 1686 | + this._idle = true; | |
| 1687 | + this.trigger("_idle"); | |
| 1688 | + this.audioController.pause(); | |
| 1689 | + } | |
| 1690 | + }; | |
| 1691 | + AnimationItem.prototype.togglePause = function(name) { | |
| 1692 | + if (name && this.name !== name) return; | |
| 1693 | + if (this.isPaused === true) this.play(); | |
| 1694 | + else this.pause(); | |
| 1695 | + }; | |
| 1696 | + AnimationItem.prototype.stop = function(name) { | |
| 1697 | + if (name && this.name !== name) return; | |
| 1698 | + this.pause(); | |
| 1699 | + this.playCount = 0; | |
| 1700 | + this._completedLoop = false; | |
| 1701 | + this.setCurrentRawFrameValue(0); | |
| 1702 | + }; | |
| 1703 | + AnimationItem.prototype.getMarkerData = function(markerName) { | |
| 1704 | + var marker; | |
| 1705 | + for (var i = 0; i < this.markers.length; i += 1) { | |
| 1706 | + marker = this.markers[i]; | |
| 1707 | + if (marker.payload && marker.payload.name === markerName) return marker; | |
| 1708 | + } | |
| 1709 | + return null; | |
| 1710 | + }; | |
| 1711 | + AnimationItem.prototype.goToAndStop = function(value, isFrame, name) { | |
| 1712 | + if (name && this.name !== name) return; | |
| 1713 | + var numValue = Number(value); | |
| 1714 | + if (isNaN(numValue)) { | |
| 1715 | + var marker = this.getMarkerData(value); | |
| 1716 | + if (marker) this.goToAndStop(marker.time, true); | |
| 1717 | + } else if (isFrame) this.setCurrentRawFrameValue(value); | |
| 1718 | + else this.setCurrentRawFrameValue(value * this.frameModifier); | |
| 1719 | + this.pause(); | |
| 1720 | + }; | |
| 1721 | + AnimationItem.prototype.goToAndPlay = function(value, isFrame, name) { | |
| 1722 | + if (name && this.name !== name) return; | |
| 1723 | + var numValue = Number(value); | |
| 1724 | + if (isNaN(numValue)) { | |
| 1725 | + var marker = this.getMarkerData(value); | |
| 1726 | + if (marker) if (!marker.duration) this.goToAndStop(marker.time, true); | |
| 1727 | + else this.playSegments([marker.time, marker.time + marker.duration], true); | |
| 1728 | + } else this.goToAndStop(numValue, isFrame, name); | |
| 1729 | + this.play(); | |
| 1730 | + }; | |
| 1731 | + AnimationItem.prototype.advanceTime = function(value) { | |
| 1732 | + if (this.isPaused === true || this.isLoaded === false) return; | |
| 1733 | + var nextValue = this.currentRawFrame + value * this.frameModifier; | |
| 1734 | + var _isComplete = false; | |
| 1735 | + if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) if (!this.loop || this.playCount === this.loop) { | |
| 1736 | + if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) { | |
| 1737 | + _isComplete = true; | |
| 1738 | + nextValue = this.totalFrames - 1; | |
| 1739 | + } | |
| 1740 | + } else if (nextValue >= this.totalFrames) { | |
| 1741 | + this.playCount += 1; | |
| 1742 | + if (!this.checkSegments(nextValue % this.totalFrames)) { | |
| 1743 | + this.setCurrentRawFrameValue(nextValue % this.totalFrames); | |
| 1744 | + this._completedLoop = true; | |
| 1745 | + this.trigger("loopComplete"); | |
| 1746 | + } | |
| 1747 | + } else this.setCurrentRawFrameValue(nextValue); | |
| 1748 | + else if (nextValue < 0) { | |
| 1749 | + if (!this.checkSegments(nextValue % this.totalFrames)) if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { | |
| 1750 | + this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames); | |
| 1751 | + if (!this._completedLoop) this._completedLoop = true; | |
| 1752 | + else this.trigger("loopComplete"); | |
| 1753 | + } else { | |
| 1754 | + _isComplete = true; | |
| 1755 | + nextValue = 0; | |
| 1756 | + } | |
| 1757 | + } else this.setCurrentRawFrameValue(nextValue); | |
| 1758 | + if (_isComplete) { | |
| 1759 | + this.setCurrentRawFrameValue(nextValue); | |
| 1760 | + this.pause(); | |
| 1761 | + this.trigger("complete"); | |
| 1762 | + } | |
| 1763 | + }; | |
| 1764 | + AnimationItem.prototype.adjustSegment = function(arr, offset) { | |
| 1765 | + this.playCount = 0; | |
| 1766 | + if (arr[1] < arr[0]) { | |
| 1767 | + if (this.frameModifier > 0) if (this.playSpeed < 0) this.setSpeed(-this.playSpeed); | |
| 1768 | + else this.setDirection(-1); | |
| 1769 | + this.totalFrames = arr[0] - arr[1]; | |
| 1770 | + this.timeCompleted = this.totalFrames; | |
| 1771 | + this.firstFrame = arr[1]; | |
| 1772 | + this.setCurrentRawFrameValue(this.totalFrames - .001 - offset); | |
| 1773 | + } else if (arr[1] > arr[0]) { | |
| 1774 | + if (this.frameModifier < 0) if (this.playSpeed < 0) this.setSpeed(-this.playSpeed); | |
| 1775 | + else this.setDirection(1); | |
| 1776 | + this.totalFrames = arr[1] - arr[0]; | |
| 1777 | + this.timeCompleted = this.totalFrames; | |
| 1778 | + this.firstFrame = arr[0]; | |
| 1779 | + this.setCurrentRawFrameValue(.001 + offset); | |
| 1780 | + } | |
| 1781 | + this.trigger("segmentStart"); | |
| 1782 | + }; | |
| 1783 | + AnimationItem.prototype.setSegment = function(init, end) { | |
| 1784 | + var pendingFrame = -1; | |
| 1785 | + if (this.isPaused) { | |
| 1786 | + if (this.currentRawFrame + this.firstFrame < init) pendingFrame = init; | |
| 1787 | + else if (this.currentRawFrame + this.firstFrame > end) pendingFrame = end - init; | |
| 1788 | + } | |
| 1789 | + this.firstFrame = init; | |
| 1790 | + this.totalFrames = end - init; | |
| 1791 | + this.timeCompleted = this.totalFrames; | |
| 1792 | + if (pendingFrame !== -1) this.goToAndStop(pendingFrame, true); | |
| 1793 | + }; | |
| 1794 | + AnimationItem.prototype.playSegments = function(arr, forceFlag) { | |
| 1795 | + if (forceFlag) this.segments.length = 0; | |
| 1796 | + if (_typeof$4(arr[0]) === "object") { | |
| 1797 | + var i; | |
| 1798 | + var len = arr.length; | |
| 1799 | + for (i = 0; i < len; i += 1) this.segments.push(arr[i]); | |
| 1800 | + } else this.segments.push(arr); | |
| 1801 | + if (this.segments.length && forceFlag) this.adjustSegment(this.segments.shift(), 0); | |
| 1802 | + if (this.isPaused) this.play(); | |
| 1803 | + }; | |
| 1804 | + AnimationItem.prototype.resetSegments = function(forceFlag) { | |
| 1805 | + this.segments.length = 0; | |
| 1806 | + this.segments.push([this.animationData.ip, this.animationData.op]); | |
| 1807 | + if (forceFlag) this.checkSegments(0); | |
| 1808 | + }; | |
| 1809 | + AnimationItem.prototype.checkSegments = function(offset) { | |
| 1810 | + if (this.segments.length) { | |
| 1811 | + this.adjustSegment(this.segments.shift(), offset); | |
| 1812 | + return true; | |
| 1813 | + } | |
| 1814 | + return false; | |
| 1815 | + }; | |
| 1816 | + AnimationItem.prototype.destroy = function(name) { | |
| 1817 | + if (name && this.name !== name || !this.renderer) return; | |
| 1818 | + this.renderer.destroy(); | |
| 1819 | + this.imagePreloader.destroy(); | |
| 1820 | + this.trigger("destroy"); | |
| 1821 | + this._cbs = null; | |
| 1822 | + this.onEnterFrame = null; | |
| 1823 | + this.onLoopComplete = null; | |
| 1824 | + this.onComplete = null; | |
| 1825 | + this.onSegmentStart = null; | |
| 1826 | + this.onDestroy = null; | |
| 1827 | + this.renderer = null; | |
| 1828 | + this.expressionsPlugin = null; | |
| 1829 | + this.imagePreloader = null; | |
| 1830 | + this.projectInterface = null; | |
| 1831 | + }; | |
| 1832 | + AnimationItem.prototype.setCurrentRawFrameValue = function(value) { | |
| 1833 | + this.currentRawFrame = value; | |
| 1834 | + this.gotoFrame(); | |
| 1835 | + }; | |
| 1836 | + AnimationItem.prototype.setSpeed = function(val) { | |
| 1837 | + this.playSpeed = val; | |
| 1838 | + this.updaFrameModifier(); | |
| 1839 | + }; | |
| 1840 | + AnimationItem.prototype.setDirection = function(val) { | |
| 1841 | + this.playDirection = val < 0 ? -1 : 1; | |
| 1842 | + this.updaFrameModifier(); | |
| 1843 | + }; | |
| 1844 | + AnimationItem.prototype.setLoop = function(isLooping) { | |
| 1845 | + this.loop = isLooping; | |
| 1846 | + }; | |
| 1847 | + AnimationItem.prototype.setVolume = function(val, name) { | |
| 1848 | + if (name && this.name !== name) return; | |
| 1849 | + this.audioController.setVolume(val); | |
| 1850 | + }; | |
| 1851 | + AnimationItem.prototype.getVolume = function() { | |
| 1852 | + return this.audioController.getVolume(); | |
| 1853 | + }; | |
| 1854 | + AnimationItem.prototype.mute = function(name) { | |
| 1855 | + if (name && this.name !== name) return; | |
| 1856 | + this.audioController.mute(); | |
| 1857 | + }; | |
| 1858 | + AnimationItem.prototype.unmute = function(name) { | |
| 1859 | + if (name && this.name !== name) return; | |
| 1860 | + this.audioController.unmute(); | |
| 1861 | + }; | |
| 1862 | + AnimationItem.prototype.updaFrameModifier = function() { | |
| 1863 | + this.frameModifier = this.frameMult * this.playSpeed * this.playDirection; | |
| 1864 | + this.audioController.setRate(this.playSpeed * this.playDirection); | |
| 1865 | + }; | |
| 1866 | + AnimationItem.prototype.getPath = function() { | |
| 1867 | + return this.path; | |
| 1868 | + }; | |
| 1869 | + AnimationItem.prototype.getAssetsPath = function(assetData) { | |
| 1870 | + var path = ""; | |
| 1871 | + if (assetData.e) path = assetData.p; | |
| 1872 | + else if (this.assetsPath) { | |
| 1873 | + var imagePath = assetData.p; | |
| 1874 | + if (imagePath.indexOf("images/") !== -1) imagePath = imagePath.split("/")[1]; | |
| 1875 | + path = this.assetsPath + imagePath; | |
| 1876 | + } else { | |
| 1877 | + path = this.path; | |
| 1878 | + path += assetData.u ? assetData.u : ""; | |
| 1879 | + path += assetData.p; | |
| 1880 | + } | |
| 1881 | + return path; | |
| 1882 | + }; | |
| 1883 | + AnimationItem.prototype.getAssetData = function(id) { | |
| 1884 | + var i = 0; | |
| 1885 | + var len = this.assets.length; | |
| 1886 | + while (i < len) { | |
| 1887 | + if (id === this.assets[i].id) return this.assets[i]; | |
| 1888 | + i += 1; | |
| 1889 | + } | |
| 1890 | + return null; | |
| 1891 | + }; | |
| 1892 | + AnimationItem.prototype.hide = function() { | |
| 1893 | + this.renderer.hide(); | |
| 1894 | + }; | |
| 1895 | + AnimationItem.prototype.show = function() { | |
| 1896 | + this.renderer.show(); | |
| 1897 | + }; | |
| 1898 | + AnimationItem.prototype.getDuration = function(isFrame) { | |
| 1899 | + return isFrame ? this.totalFrames : this.totalFrames / this.frameRate; | |
| 1900 | + }; | |
| 1901 | + AnimationItem.prototype.updateDocumentData = function(path, documentData, index) { | |
| 1902 | + try { | |
| 1903 | + this.renderer.getElementByPath(path).updateDocumentData(documentData, index); | |
| 1904 | + } catch (error) {} | |
| 1905 | + }; | |
| 1906 | + AnimationItem.prototype.trigger = function(name) { | |
| 1907 | + if (this._cbs && this._cbs[name]) switch (name) { | |
| 1908 | + case "enterFrame": | |
| 1909 | + this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier)); | |
| 1910 | + break; | |
| 1911 | + case "drawnFrame": | |
| 1912 | + this.drawnFrameEvent.currentTime = this.currentFrame; | |
| 1913 | + this.drawnFrameEvent.totalTime = this.totalFrames; | |
| 1914 | + this.drawnFrameEvent.direction = this.frameModifier; | |
| 1915 | + this.triggerEvent(name, this.drawnFrameEvent); | |
| 1916 | + break; | |
| 1917 | + case "loopComplete": | |
| 1918 | + this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult)); | |
| 1919 | + break; | |
| 1920 | + case "complete": | |
| 1921 | + this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult)); | |
| 1922 | + break; | |
| 1923 | + case "segmentStart": | |
| 1924 | + this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames)); | |
| 1925 | + break; | |
| 1926 | + case "destroy": | |
| 1927 | + this.triggerEvent(name, new BMDestroyEvent(name, this)); | |
| 1928 | + break; | |
| 1929 | + default: this.triggerEvent(name); | |
| 1930 | + } | |
| 1931 | + if (name === "enterFrame" && this.onEnterFrame) this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult)); | |
| 1932 | + if (name === "loopComplete" && this.onLoopComplete) this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult)); | |
| 1933 | + if (name === "complete" && this.onComplete) this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult)); | |
| 1934 | + if (name === "segmentStart" && this.onSegmentStart) this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames)); | |
| 1935 | + if (name === "destroy" && this.onDestroy) this.onDestroy.call(this, new BMDestroyEvent(name, this)); | |
| 1936 | + }; | |
| 1937 | + AnimationItem.prototype.triggerRenderFrameError = function(nativeError) { | |
| 1938 | + var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame); | |
| 1939 | + this.triggerEvent("error", error); | |
| 1940 | + if (this.onError) this.onError.call(this, error); | |
| 1941 | + }; | |
| 1942 | + AnimationItem.prototype.triggerConfigError = function(nativeError) { | |
| 1943 | + var error = new BMConfigErrorEvent(nativeError, this.currentFrame); | |
| 1944 | + this.triggerEvent("error", error); | |
| 1945 | + if (this.onError) this.onError.call(this, error); | |
| 1946 | + }; | |
| 1947 | + var animationManager = function() { | |
| 1948 | + var moduleOb = {}; | |
| 1949 | + var registeredAnimations = []; | |
| 1950 | + var initTime = 0; | |
| 1951 | + var len = 0; | |
| 1952 | + var playingAnimationsNum = 0; | |
| 1953 | + var _stopped = true; | |
| 1954 | + var _isFrozen = false; | |
| 1955 | + function removeElement(ev) { | |
| 1956 | + var i = 0; | |
| 1957 | + var animItem = ev.target; | |
| 1958 | + while (i < len) { | |
| 1959 | + if (registeredAnimations[i].animation === animItem) { | |
| 1960 | + registeredAnimations.splice(i, 1); | |
| 1961 | + i -= 1; | |
| 1962 | + len -= 1; | |
| 1963 | + if (!animItem.isPaused) subtractPlayingCount(); | |
| 1964 | + } | |
| 1965 | + i += 1; | |
| 1966 | + } | |
| 1967 | + } | |
| 1968 | + function registerAnimation(element, animationData) { | |
| 1969 | + if (!element) return null; | |
| 1970 | + var i = 0; | |
| 1971 | + while (i < len) { | |
| 1972 | + if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) return registeredAnimations[i].animation; | |
| 1973 | + i += 1; | |
| 1974 | + } | |
| 1975 | + var animItem = new AnimationItem(); | |
| 1976 | + setupAnimation(animItem, element); | |
| 1977 | + animItem.setData(element, animationData); | |
| 1978 | + return animItem; | |
| 1979 | + } | |
| 1980 | + function getRegisteredAnimations() { | |
| 1981 | + var i; | |
| 1982 | + var lenAnims = registeredAnimations.length; | |
| 1983 | + var animations = []; | |
| 1984 | + for (i = 0; i < lenAnims; i += 1) animations.push(registeredAnimations[i].animation); | |
| 1985 | + return animations; | |
| 1986 | + } | |
| 1987 | + function addPlayingCount() { | |
| 1988 | + playingAnimationsNum += 1; | |
| 1989 | + activate(); | |
| 1990 | + } | |
| 1991 | + function subtractPlayingCount() { | |
| 1992 | + playingAnimationsNum -= 1; | |
| 1993 | + } | |
| 1994 | + function setupAnimation(animItem, element) { | |
| 1995 | + animItem.addEventListener("destroy", removeElement); | |
| 1996 | + animItem.addEventListener("_active", addPlayingCount); | |
| 1997 | + animItem.addEventListener("_idle", subtractPlayingCount); | |
| 1998 | + registeredAnimations.push({ | |
| 1999 | + elem: element, | |
| 2000 | + animation: animItem | |
| 2001 | + }); | |
| 2002 | + len += 1; | |
| 2003 | + } | |
| 2004 | + function loadAnimation(params) { | |
| 2005 | + var animItem = new AnimationItem(); | |
| 2006 | + setupAnimation(animItem, null); | |
| 2007 | + animItem.setParams(params); | |
| 2008 | + return animItem; | |
| 2009 | + } | |
| 2010 | + function setSpeed(val, animation) { | |
| 2011 | + var i; | |
| 2012 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.setSpeed(val, animation); | |
| 2013 | + } | |
| 2014 | + function setDirection(val, animation) { | |
| 2015 | + var i; | |
| 2016 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.setDirection(val, animation); | |
| 2017 | + } | |
| 2018 | + function play(animation) { | |
| 2019 | + var i; | |
| 2020 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.play(animation); | |
| 2021 | + } | |
| 2022 | + function resume(nowTime) { | |
| 2023 | + var elapsedTime = nowTime - initTime; | |
| 2024 | + var i; | |
| 2025 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.advanceTime(elapsedTime); | |
| 2026 | + initTime = nowTime; | |
| 2027 | + if (playingAnimationsNum && !_isFrozen) window.requestAnimationFrame(resume); | |
| 2028 | + else _stopped = true; | |
| 2029 | + } | |
| 2030 | + function first(nowTime) { | |
| 2031 | + initTime = nowTime; | |
| 2032 | + window.requestAnimationFrame(resume); | |
| 2033 | + } | |
| 2034 | + function pause(animation) { | |
| 2035 | + var i; | |
| 2036 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.pause(animation); | |
| 2037 | + } | |
| 2038 | + function goToAndStop(value, isFrame, animation) { | |
| 2039 | + var i; | |
| 2040 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.goToAndStop(value, isFrame, animation); | |
| 2041 | + } | |
| 2042 | + function stop(animation) { | |
| 2043 | + var i; | |
| 2044 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.stop(animation); | |
| 2045 | + } | |
| 2046 | + function togglePause(animation) { | |
| 2047 | + var i; | |
| 2048 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.togglePause(animation); | |
| 2049 | + } | |
| 2050 | + function destroy(animation) { | |
| 2051 | + var i; | |
| 2052 | + for (i = len - 1; i >= 0; i -= 1) registeredAnimations[i].animation.destroy(animation); | |
| 2053 | + } | |
| 2054 | + function searchAnimations(animationData, standalone, renderer) { | |
| 2055 | + var animElements = [].concat([].slice.call(document.getElementsByClassName("lottie")), [].slice.call(document.getElementsByClassName("bodymovin"))); | |
| 2056 | + var i; | |
| 2057 | + var lenAnims = animElements.length; | |
| 2058 | + for (i = 0; i < lenAnims; i += 1) { | |
| 2059 | + if (renderer) animElements[i].setAttribute("data-bm-type", renderer); | |
| 2060 | + registerAnimation(animElements[i], animationData); | |
| 2061 | + } | |
| 2062 | + if (standalone && lenAnims === 0) { | |
| 2063 | + if (!renderer) renderer = "svg"; | |
| 2064 | + var body = document.getElementsByTagName("body")[0]; | |
| 2065 | + body.innerText = ""; | |
| 2066 | + var div = createTag("div"); | |
| 2067 | + div.style.width = "100%"; | |
| 2068 | + div.style.height = "100%"; | |
| 2069 | + div.setAttribute("data-bm-type", renderer); | |
| 2070 | + body.appendChild(div); | |
| 2071 | + registerAnimation(div, animationData); | |
| 2072 | + } | |
| 2073 | + } | |
| 2074 | + function resize() { | |
| 2075 | + var i; | |
| 2076 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.resize(); | |
| 2077 | + } | |
| 2078 | + function activate() { | |
| 2079 | + if (!_isFrozen && playingAnimationsNum) { | |
| 2080 | + if (_stopped) { | |
| 2081 | + window.requestAnimationFrame(first); | |
| 2082 | + _stopped = false; | |
| 2083 | + } | |
| 2084 | + } | |
| 2085 | + } | |
| 2086 | + function freeze() { | |
| 2087 | + _isFrozen = true; | |
| 2088 | + } | |
| 2089 | + function unfreeze() { | |
| 2090 | + _isFrozen = false; | |
| 2091 | + activate(); | |
| 2092 | + } | |
| 2093 | + function setVolume(val, animation) { | |
| 2094 | + var i; | |
| 2095 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.setVolume(val, animation); | |
| 2096 | + } | |
| 2097 | + function mute(animation) { | |
| 2098 | + var i; | |
| 2099 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.mute(animation); | |
| 2100 | + } | |
| 2101 | + function unmute(animation) { | |
| 2102 | + var i; | |
| 2103 | + for (i = 0; i < len; i += 1) registeredAnimations[i].animation.unmute(animation); | |
| 2104 | + } | |
| 2105 | + moduleOb.registerAnimation = registerAnimation; | |
| 2106 | + moduleOb.loadAnimation = loadAnimation; | |
| 2107 | + moduleOb.setSpeed = setSpeed; | |
| 2108 | + moduleOb.setDirection = setDirection; | |
| 2109 | + moduleOb.play = play; | |
| 2110 | + moduleOb.pause = pause; | |
| 2111 | + moduleOb.stop = stop; | |
| 2112 | + moduleOb.togglePause = togglePause; | |
| 2113 | + moduleOb.searchAnimations = searchAnimations; | |
| 2114 | + moduleOb.resize = resize; | |
| 2115 | + moduleOb.goToAndStop = goToAndStop; | |
| 2116 | + moduleOb.destroy = destroy; | |
| 2117 | + moduleOb.freeze = freeze; | |
| 2118 | + moduleOb.unfreeze = unfreeze; | |
| 2119 | + moduleOb.setVolume = setVolume; | |
| 2120 | + moduleOb.mute = mute; | |
| 2121 | + moduleOb.unmute = unmute; | |
| 2122 | + moduleOb.getRegisteredAnimations = getRegisteredAnimations; | |
| 2123 | + return moduleOb; | |
| 2124 | + }(); | |
| 2125 | + var BezierFactory = function() { | |
| 2126 | + /** | |
| 2127 | + * BezierEasing - use bezier curve for transition easing function | |
| 2128 | + * by Gaëtan Renaudeau 2014 - 2015 – MIT License | |
| 2129 | + * | |
| 2130 | + * Credits: is based on Firefox's nsSMILKeySpline.cpp | |
| 2131 | + * Usage: | |
| 2132 | + * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ]) | |
| 2133 | + * spline.get(x) => returns the easing value | x must be in [0, 1] range | |
| 2134 | + * | |
| 2135 | + */ | |
| 2136 | + var ob = {}; | |
| 2137 | + ob.getBezierEasing = getBezierEasing; | |
| 2138 | + var beziers = {}; | |
| 2139 | + function getBezierEasing(a, b, c, d, nm) { | |
| 2140 | + var str = nm || ("bez_" + a + "_" + b + "_" + c + "_" + d).replace(/\./g, "p"); | |
| 2141 | + if (beziers[str]) return beziers[str]; | |
| 2142 | + var bezEasing = new BezierEasing([ | |
| 2143 | + a, | |
| 2144 | + b, | |
| 2145 | + c, | |
| 2146 | + d | |
| 2147 | + ]); | |
| 2148 | + beziers[str] = bezEasing; | |
| 2149 | + return bezEasing; | |
| 2150 | + } | |
| 2151 | + var NEWTON_ITERATIONS = 4; | |
| 2152 | + var NEWTON_MIN_SLOPE = .001; | |
| 2153 | + var SUBDIVISION_PRECISION = 1e-7; | |
| 2154 | + var SUBDIVISION_MAX_ITERATIONS = 10; | |
| 2155 | + var kSplineTableSize = 11; | |
| 2156 | + var kSampleStepSize = 1 / (kSplineTableSize - 1); | |
| 2157 | + var float32ArraySupported = typeof Float32Array === "function"; | |
| 2158 | + function A(aA1, aA2) { | |
| 2159 | + return 1 - 3 * aA2 + 3 * aA1; | |
| 2160 | + } | |
| 2161 | + function B(aA1, aA2) { | |
| 2162 | + return 3 * aA2 - 6 * aA1; | |
| 2163 | + } | |
| 2164 | + function C(aA1) { | |
| 2165 | + return 3 * aA1; | |
| 2166 | + } | |
| 2167 | + function calcBezier(aT, aA1, aA2) { | |
| 2168 | + return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; | |
| 2169 | + } | |
| 2170 | + function getSlope(aT, aA1, aA2) { | |
| 2171 | + return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1); | |
| 2172 | + } | |
| 2173 | + function binarySubdivide(aX, aA, aB, mX1, mX2) { | |
| 2174 | + var currentX; | |
| 2175 | + var currentT; | |
| 2176 | + var i = 0; | |
| 2177 | + do { | |
| 2178 | + currentT = aA + (aB - aA) / 2; | |
| 2179 | + currentX = calcBezier(currentT, mX1, mX2) - aX; | |
| 2180 | + if (currentX > 0) aB = currentT; | |
| 2181 | + else aA = currentT; | |
| 2182 | + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); | |
| 2183 | + return currentT; | |
| 2184 | + } | |
| 2185 | + function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) { | |
| 2186 | + for (var i = 0; i < NEWTON_ITERATIONS; ++i) { | |
| 2187 | + var currentSlope = getSlope(aGuessT, mX1, mX2); | |
| 2188 | + if (currentSlope === 0) return aGuessT; | |
| 2189 | + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; | |
| 2190 | + aGuessT -= currentX / currentSlope; | |
| 2191 | + } | |
| 2192 | + return aGuessT; | |
| 2193 | + } | |
| 2194 | + /** | |
| 2195 | + * points is an array of [ mX1, mY1, mX2, mY2 ] | |
| 2196 | + */ | |
| 2197 | + function BezierEasing(points) { | |
| 2198 | + this._p = points; | |
| 2199 | + this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); | |
| 2200 | + this._precomputed = false; | |
| 2201 | + this.get = this.get.bind(this); | |
| 2202 | + } | |
| 2203 | + BezierEasing.prototype = { | |
| 2204 | + get: function get(x) { | |
| 2205 | + var mX1 = this._p[0]; | |
| 2206 | + var mY1 = this._p[1]; | |
| 2207 | + var mX2 = this._p[2]; | |
| 2208 | + var mY2 = this._p[3]; | |
| 2209 | + if (!this._precomputed) this._precompute(); | |
| 2210 | + if (mX1 === mY1 && mX2 === mY2) return x; | |
| 2211 | + if (x === 0) return 0; | |
| 2212 | + if (x === 1) return 1; | |
| 2213 | + return calcBezier(this._getTForX(x), mY1, mY2); | |
| 2214 | + }, | |
| 2215 | + _precompute: function _precompute() { | |
| 2216 | + var mX1 = this._p[0]; | |
| 2217 | + var mY1 = this._p[1]; | |
| 2218 | + var mX2 = this._p[2]; | |
| 2219 | + var mY2 = this._p[3]; | |
| 2220 | + this._precomputed = true; | |
| 2221 | + if (mX1 !== mY1 || mX2 !== mY2) this._calcSampleValues(); | |
| 2222 | + }, | |
| 2223 | + _calcSampleValues: function _calcSampleValues() { | |
| 2224 | + var mX1 = this._p[0]; | |
| 2225 | + var mX2 = this._p[2]; | |
| 2226 | + for (var i = 0; i < kSplineTableSize; ++i) this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); | |
| 2227 | + }, | |
| 2228 | + /** | |
| 2229 | + * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection. | |
| 2230 | + */ | |
| 2231 | + _getTForX: function _getTForX(aX) { | |
| 2232 | + var mX1 = this._p[0]; | |
| 2233 | + var mX2 = this._p[2]; | |
| 2234 | + var mSampleValues = this._mSampleValues; | |
| 2235 | + var intervalStart = 0; | |
| 2236 | + var currentSample = 1; | |
| 2237 | + var lastSample = kSplineTableSize - 1; | |
| 2238 | + for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) intervalStart += kSampleStepSize; | |
| 2239 | + --currentSample; | |
| 2240 | + var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]); | |
| 2241 | + var guessForT = intervalStart + dist * kSampleStepSize; | |
| 2242 | + var initialSlope = getSlope(guessForT, mX1, mX2); | |
| 2243 | + if (initialSlope >= NEWTON_MIN_SLOPE) return newtonRaphsonIterate(aX, guessForT, mX1, mX2); | |
| 2244 | + if (initialSlope === 0) return guessForT; | |
| 2245 | + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); | |
| 2246 | + } | |
| 2247 | + }; | |
| 2248 | + return ob; | |
| 2249 | + }(); | |
| 2250 | + var pooling = function() { | |
| 2251 | + function _double(arr) { | |
| 2252 | + return arr.concat(createSizedArray(arr.length)); | |
| 2253 | + } | |
| 2254 | + return { "double": _double }; | |
| 2255 | + }(); | |
| 2256 | + var poolFactory = function() { | |
| 2257 | + return function(initialLength, _create, _release) { | |
| 2258 | + var _length = 0; | |
| 2259 | + var _maxLength = initialLength; | |
| 2260 | + var pool = createSizedArray(_maxLength); | |
| 2261 | + var ob = { | |
| 2262 | + newElement, | |
| 2263 | + release | |
| 2264 | + }; | |
| 2265 | + function newElement() { | |
| 2266 | + var element; | |
| 2267 | + if (_length) { | |
| 2268 | + _length -= 1; | |
| 2269 | + element = pool[_length]; | |
| 2270 | + } else element = _create(); | |
| 2271 | + return element; | |
| 2272 | + } | |
| 2273 | + function release(element) { | |
| 2274 | + if (_length === _maxLength) { | |
| 2275 | + pool = pooling["double"](pool); | |
| 2276 | + _maxLength *= 2; | |
| 2277 | + } | |
| 2278 | + if (_release) _release(element); | |
| 2279 | + pool[_length] = element; | |
| 2280 | + _length += 1; | |
| 2281 | + } | |
| 2282 | + return ob; | |
| 2283 | + }; | |
| 2284 | + }(); | |
| 2285 | + var bezierLengthPool = function() { | |
| 2286 | + function create() { | |
| 2287 | + return { | |
| 2288 | + addedLength: 0, | |
| 2289 | + percents: createTypedArray("float32", getDefaultCurveSegments()), | |
| 2290 | + lengths: createTypedArray("float32", getDefaultCurveSegments()) | |
| 2291 | + }; | |
| 2292 | + } | |
| 2293 | + return poolFactory(8, create); | |
| 2294 | + }(); | |
| 2295 | + var segmentsLengthPool = function() { | |
| 2296 | + function create() { | |
| 2297 | + return { | |
| 2298 | + lengths: [], | |
| 2299 | + totalLength: 0 | |
| 2300 | + }; | |
| 2301 | + } | |
| 2302 | + function release(element) { | |
| 2303 | + var i; | |
| 2304 | + var len = element.lengths.length; | |
| 2305 | + for (i = 0; i < len; i += 1) bezierLengthPool.release(element.lengths[i]); | |
| 2306 | + element.lengths.length = 0; | |
| 2307 | + } | |
| 2308 | + return poolFactory(8, create, release); | |
| 2309 | + }(); | |
| 2310 | + function bezFunction() { | |
| 2311 | + var math = Math; | |
| 2312 | + function pointOnLine2D(x1, y1, x2, y2, x3, y3) { | |
| 2313 | + var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1; | |
| 2314 | + return det1 > -.001 && det1 < .001; | |
| 2315 | + } | |
| 2316 | + function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) { | |
| 2317 | + if (z1 === 0 && z2 === 0 && z3 === 0) return pointOnLine2D(x1, y1, x2, y2, x3, y3); | |
| 2318 | + var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2)); | |
| 2319 | + var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2)); | |
| 2320 | + var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2)); | |
| 2321 | + var diffDist; | |
| 2322 | + if (dist1 > dist2) if (dist1 > dist3) diffDist = dist1 - dist2 - dist3; | |
| 2323 | + else diffDist = dist3 - dist2 - dist1; | |
| 2324 | + else if (dist3 > dist2) diffDist = dist3 - dist2 - dist1; | |
| 2325 | + else diffDist = dist2 - dist1 - dist3; | |
| 2326 | + return diffDist > -1e-4 && diffDist < 1e-4; | |
| 2327 | + } | |
| 2328 | + var getBezierLength = function() { | |
| 2329 | + return function(pt1, pt2, pt3, pt4) { | |
| 2330 | + var curveSegments = getDefaultCurveSegments(); | |
| 2331 | + var k; | |
| 2332 | + var i; | |
| 2333 | + var len; | |
| 2334 | + var ptCoord; | |
| 2335 | + var perc; | |
| 2336 | + var addedLength = 0; | |
| 2337 | + var ptDistance; | |
| 2338 | + var point = []; | |
| 2339 | + var lastPoint = []; | |
| 2340 | + var lengthData = bezierLengthPool.newElement(); | |
| 2341 | + len = pt3.length; | |
| 2342 | + for (k = 0; k < curveSegments; k += 1) { | |
| 2343 | + perc = k / (curveSegments - 1); | |
| 2344 | + ptDistance = 0; | |
| 2345 | + for (i = 0; i < len; i += 1) { | |
| 2346 | + 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]; | |
| 2347 | + point[i] = ptCoord; | |
| 2348 | + if (lastPoint[i] !== null) ptDistance += bmPow(point[i] - lastPoint[i], 2); | |
| 2349 | + lastPoint[i] = point[i]; | |
| 2350 | + } | |
| 2351 | + if (ptDistance) { | |
| 2352 | + ptDistance = bmSqrt(ptDistance); | |
| 2353 | + addedLength += ptDistance; | |
| 2354 | + } | |
| 2355 | + lengthData.percents[k] = perc; | |
| 2356 | + lengthData.lengths[k] = addedLength; | |
| 2357 | + } | |
| 2358 | + lengthData.addedLength = addedLength; | |
| 2359 | + return lengthData; | |
| 2360 | + }; | |
| 2361 | + }(); | |
| 2362 | + function getSegmentsLength(shapeData) { | |
| 2363 | + var segmentsLength = segmentsLengthPool.newElement(); | |
| 2364 | + var closed = shapeData.c; | |
| 2365 | + var pathV = shapeData.v; | |
| 2366 | + var pathO = shapeData.o; | |
| 2367 | + var pathI = shapeData.i; | |
| 2368 | + var i; | |
| 2369 | + var len = shapeData._length; | |
| 2370 | + var lengths = segmentsLength.lengths; | |
| 2371 | + var totalLength = 0; | |
| 2372 | + for (i = 0; i < len - 1; i += 1) { | |
| 2373 | + lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]); | |
| 2374 | + totalLength += lengths[i].addedLength; | |
| 2375 | + } | |
| 2376 | + if (closed && len) { | |
| 2377 | + lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]); | |
| 2378 | + totalLength += lengths[i].addedLength; | |
| 2379 | + } | |
| 2380 | + segmentsLength.totalLength = totalLength; | |
| 2381 | + return segmentsLength; | |
| 2382 | + } | |
| 2383 | + function BezierData(length) { | |
| 2384 | + this.segmentLength = 0; | |
| 2385 | + this.points = new Array(length); | |
| 2386 | + } | |
| 2387 | + function PointData(partial, point) { | |
| 2388 | + this.partialLength = partial; | |
| 2389 | + this.point = point; | |
| 2390 | + } | |
| 2391 | + var buildBezierData = function() { | |
| 2392 | + var storedData = {}; | |
| 2393 | + return function(pt1, pt2, pt3, pt4) { | |
| 2394 | + var bezierName = (pt1[0] + "_" + pt1[1] + "_" + pt2[0] + "_" + pt2[1] + "_" + pt3[0] + "_" + pt3[1] + "_" + pt4[0] + "_" + pt4[1]).replace(/\./g, "p"); | |
| 2395 | + if (!storedData[bezierName]) { | |
| 2396 | + var curveSegments = getDefaultCurveSegments(); | |
| 2397 | + var k; | |
| 2398 | + var i; | |
| 2399 | + var len; | |
| 2400 | + var ptCoord; | |
| 2401 | + var perc; | |
| 2402 | + var addedLength = 0; | |
| 2403 | + var ptDistance; | |
| 2404 | + var point; | |
| 2405 | + var lastPoint = null; | |
| 2406 | + 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])) curveSegments = 2; | |
| 2407 | + var bezierData = new BezierData(curveSegments); | |
| 2408 | + len = pt3.length; | |
| 2409 | + for (k = 0; k < curveSegments; k += 1) { | |
| 2410 | + point = createSizedArray(len); | |
| 2411 | + perc = k / (curveSegments - 1); | |
| 2412 | + ptDistance = 0; | |
| 2413 | + for (i = 0; i < len; i += 1) { | |
| 2414 | + 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]; | |
| 2415 | + point[i] = ptCoord; | |
| 2416 | + if (lastPoint !== null) ptDistance += bmPow(point[i] - lastPoint[i], 2); | |
| 2417 | + } | |
| 2418 | + ptDistance = bmSqrt(ptDistance); | |
| 2419 | + addedLength += ptDistance; | |
| 2420 | + bezierData.points[k] = new PointData(ptDistance, point); | |
| 2421 | + lastPoint = point; | |
| 2422 | + } | |
| 2423 | + bezierData.segmentLength = addedLength; | |
| 2424 | + storedData[bezierName] = bezierData; | |
| 2425 | + } | |
| 2426 | + return storedData[bezierName]; | |
| 2427 | + }; | |
| 2428 | + }(); | |
| 2429 | + function getDistancePerc(perc, bezierData) { | |
| 2430 | + var percents = bezierData.percents; | |
| 2431 | + var lengths = bezierData.lengths; | |
| 2432 | + var len = percents.length; | |
| 2433 | + var initPos = bmFloor((len - 1) * perc); | |
| 2434 | + var lengthPos = perc * bezierData.addedLength; | |
| 2435 | + var lPerc = 0; | |
| 2436 | + if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) return percents[initPos]; | |
| 2437 | + var dir = lengths[initPos] > lengthPos ? -1 : 1; | |
| 2438 | + var flag = true; | |
| 2439 | + while (flag) { | |
| 2440 | + if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) { | |
| 2441 | + lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]); | |
| 2442 | + flag = false; | |
| 2443 | + } else initPos += dir; | |
| 2444 | + if (initPos < 0 || initPos >= len - 1) { | |
| 2445 | + if (initPos === len - 1) return percents[initPos]; | |
| 2446 | + flag = false; | |
| 2447 | + } | |
| 2448 | + } | |
| 2449 | + return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc; | |
| 2450 | + } | |
| 2451 | + function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) { | |
| 2452 | + var t1 = getDistancePerc(percent, bezierData); | |
| 2453 | + var u1 = 1 - t1; | |
| 2454 | + return [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]) * 1e3) / 1e3, 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]) * 1e3) / 1e3]; | |
| 2455 | + } | |
| 2456 | + var bezierSegmentPoints = createTypedArray("float32", 8); | |
| 2457 | + function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) { | |
| 2458 | + if (startPerc < 0) startPerc = 0; | |
| 2459 | + else if (startPerc > 1) startPerc = 1; | |
| 2460 | + var t0 = getDistancePerc(startPerc, bezierData); | |
| 2461 | + endPerc = endPerc > 1 ? 1 : endPerc; | |
| 2462 | + var t1 = getDistancePerc(endPerc, bezierData); | |
| 2463 | + var i; | |
| 2464 | + var len = pt1.length; | |
| 2465 | + var u0 = 1 - t0; | |
| 2466 | + var u1 = 1 - t1; | |
| 2467 | + var u0u0u0 = u0 * u0 * u0; | |
| 2468 | + var t0u0u0_3 = t0 * u0 * u0 * 3; | |
| 2469 | + var t0t0u0_3 = t0 * t0 * u0 * 3; | |
| 2470 | + var t0t0t0 = t0 * t0 * t0; | |
| 2471 | + var u0u0u1 = u0 * u0 * u1; | |
| 2472 | + var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; | |
| 2473 | + var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; | |
| 2474 | + var t0t0t1 = t0 * t0 * t1; | |
| 2475 | + var u0u1u1 = u0 * u1 * u1; | |
| 2476 | + var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; | |
| 2477 | + var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; | |
| 2478 | + var t0t1t1 = t0 * t1 * t1; | |
| 2479 | + var u1u1u1 = u1 * u1 * u1; | |
| 2480 | + var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; | |
| 2481 | + var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; | |
| 2482 | + var t1t1t1 = t1 * t1 * t1; | |
| 2483 | + for (i = 0; i < len; i += 1) { | |
| 2484 | + bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1e3) / 1e3; | |
| 2485 | + bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1e3) / 1e3; | |
| 2486 | + bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1e3) / 1e3; | |
| 2487 | + bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1e3) / 1e3; | |
| 2488 | + } | |
| 2489 | + return bezierSegmentPoints; | |
| 2490 | + } | |
| 2491 | + return { | |
| 2492 | + getSegmentsLength, | |
| 2493 | + getNewSegment, | |
| 2494 | + getPointInSegment, | |
| 2495 | + buildBezierData, | |
| 2496 | + pointOnLine2D, | |
| 2497 | + pointOnLine3D | |
| 2498 | + }; | |
| 2499 | + } | |
| 2500 | + var bez = bezFunction(); | |
| 2501 | + var initFrame = initialDefaultFrame; | |
| 2502 | + var mathAbs = Math.abs; | |
| 2503 | + function interpolateValue(frameNum, caching) { | |
| 2504 | + var offsetTime = this.offsetTime; | |
| 2505 | + var newValue; | |
| 2506 | + if (this.propType === "multidimensional") newValue = createTypedArray("float32", this.pv.length); | |
| 2507 | + var iterationIndex = caching.lastIndex; | |
| 2508 | + var i = iterationIndex; | |
| 2509 | + var len = this.keyframes.length - 1; | |
| 2510 | + var flag = true; | |
| 2511 | + var keyData; | |
| 2512 | + var nextKeyData; | |
| 2513 | + var keyframeMetadata; | |
| 2514 | + while (flag) { | |
| 2515 | + keyData = this.keyframes[i]; | |
| 2516 | + nextKeyData = this.keyframes[i + 1]; | |
| 2517 | + if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) { | |
| 2518 | + if (keyData.h) keyData = nextKeyData; | |
| 2519 | + iterationIndex = 0; | |
| 2520 | + break; | |
| 2521 | + } | |
| 2522 | + if (nextKeyData.t - offsetTime > frameNum) { | |
| 2523 | + iterationIndex = i; | |
| 2524 | + break; | |
| 2525 | + } | |
| 2526 | + if (i < len - 1) i += 1; | |
| 2527 | + else { | |
| 2528 | + iterationIndex = 0; | |
| 2529 | + flag = false; | |
| 2530 | + } | |
| 2531 | + } | |
| 2532 | + keyframeMetadata = this.keyframesMetadata[i] || {}; | |
| 2533 | + var k; | |
| 2534 | + var kLen; | |
| 2535 | + var perc; | |
| 2536 | + var jLen; | |
| 2537 | + var j; | |
| 2538 | + var fnc; | |
| 2539 | + var nextKeyTime = nextKeyData.t - offsetTime; | |
| 2540 | + var keyTime = keyData.t - offsetTime; | |
| 2541 | + var endValue; | |
| 2542 | + if (keyData.to) { | |
| 2543 | + if (!keyframeMetadata.bezierData) keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti); | |
| 2544 | + var bezierData = keyframeMetadata.bezierData; | |
| 2545 | + if (frameNum >= nextKeyTime || frameNum < keyTime) { | |
| 2546 | + var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0; | |
| 2547 | + kLen = bezierData.points[ind].point.length; | |
| 2548 | + for (k = 0; k < kLen; k += 1) newValue[k] = bezierData.points[ind].point[k]; | |
| 2549 | + } else { | |
| 2550 | + if (keyframeMetadata.__fnct) fnc = keyframeMetadata.__fnct; | |
| 2551 | + else { | |
| 2552 | + fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get; | |
| 2553 | + keyframeMetadata.__fnct = fnc; | |
| 2554 | + } | |
| 2555 | + perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); | |
| 2556 | + var distanceInLine = bezierData.segmentLength * perc; | |
| 2557 | + var segmentPerc; | |
| 2558 | + var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0; | |
| 2559 | + j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0; | |
| 2560 | + flag = true; | |
| 2561 | + jLen = bezierData.points.length; | |
| 2562 | + while (flag) { | |
| 2563 | + addedLength += bezierData.points[j].partialLength; | |
| 2564 | + if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) { | |
| 2565 | + kLen = bezierData.points[j].point.length; | |
| 2566 | + for (k = 0; k < kLen; k += 1) newValue[k] = bezierData.points[j].point[k]; | |
| 2567 | + break; | |
| 2568 | + } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) { | |
| 2569 | + segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength; | |
| 2570 | + kLen = bezierData.points[j].point.length; | |
| 2571 | + for (k = 0; k < kLen; k += 1) newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc; | |
| 2572 | + break; | |
| 2573 | + } | |
| 2574 | + if (j < jLen - 1) j += 1; | |
| 2575 | + else flag = false; | |
| 2576 | + } | |
| 2577 | + caching._lastPoint = j; | |
| 2578 | + caching._lastAddedLength = addedLength - bezierData.points[j].partialLength; | |
| 2579 | + caching._lastKeyframeIndex = i; | |
| 2580 | + } | |
| 2581 | + } else { | |
| 2582 | + var outX; | |
| 2583 | + var outY; | |
| 2584 | + var inX; | |
| 2585 | + var inY; | |
| 2586 | + var keyValue; | |
| 2587 | + len = keyData.s.length; | |
| 2588 | + endValue = nextKeyData.s || keyData.e; | |
| 2589 | + if (this.sh && keyData.h !== 1) if (frameNum >= nextKeyTime) { | |
| 2590 | + newValue[0] = endValue[0]; | |
| 2591 | + newValue[1] = endValue[1]; | |
| 2592 | + newValue[2] = endValue[2]; | |
| 2593 | + } else if (frameNum <= keyTime) { | |
| 2594 | + newValue[0] = keyData.s[0]; | |
| 2595 | + newValue[1] = keyData.s[1]; | |
| 2596 | + newValue[2] = keyData.s[2]; | |
| 2597 | + } else { | |
| 2598 | + var quatStart = createQuaternion(keyData.s); | |
| 2599 | + var quatEnd = createQuaternion(endValue); | |
| 2600 | + var time = (frameNum - keyTime) / (nextKeyTime - keyTime); | |
| 2601 | + quaternionToEuler(newValue, slerp(quatStart, quatEnd, time)); | |
| 2602 | + } | |
| 2603 | + else for (i = 0; i < len; i += 1) { | |
| 2604 | + if (keyData.h !== 1) if (frameNum >= nextKeyTime) perc = 1; | |
| 2605 | + else if (frameNum < keyTime) perc = 0; | |
| 2606 | + else { | |
| 2607 | + if (keyData.o.x.constructor === Array) { | |
| 2608 | + if (!keyframeMetadata.__fnct) keyframeMetadata.__fnct = []; | |
| 2609 | + if (!keyframeMetadata.__fnct[i]) { | |
| 2610 | + outX = keyData.o.x[i] === void 0 ? keyData.o.x[0] : keyData.o.x[i]; | |
| 2611 | + outY = keyData.o.y[i] === void 0 ? keyData.o.y[0] : keyData.o.y[i]; | |
| 2612 | + inX = keyData.i.x[i] === void 0 ? keyData.i.x[0] : keyData.i.x[i]; | |
| 2613 | + inY = keyData.i.y[i] === void 0 ? keyData.i.y[0] : keyData.i.y[i]; | |
| 2614 | + fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; | |
| 2615 | + keyframeMetadata.__fnct[i] = fnc; | |
| 2616 | + } else fnc = keyframeMetadata.__fnct[i]; | |
| 2617 | + } else if (!keyframeMetadata.__fnct) { | |
| 2618 | + outX = keyData.o.x; | |
| 2619 | + outY = keyData.o.y; | |
| 2620 | + inX = keyData.i.x; | |
| 2621 | + inY = keyData.i.y; | |
| 2622 | + fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; | |
| 2623 | + keyData.keyframeMetadata = fnc; | |
| 2624 | + } else fnc = keyframeMetadata.__fnct; | |
| 2625 | + perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); | |
| 2626 | + } | |
| 2627 | + endValue = nextKeyData.s || keyData.e; | |
| 2628 | + keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc; | |
| 2629 | + if (this.propType === "multidimensional") newValue[i] = keyValue; | |
| 2630 | + else newValue = keyValue; | |
| 2631 | + } | |
| 2632 | + } | |
| 2633 | + caching.lastIndex = iterationIndex; | |
| 2634 | + return newValue; | |
| 2635 | + } | |
| 2636 | + function slerp(a, b, t) { | |
| 2637 | + var out = []; | |
| 2638 | + var ax = a[0]; | |
| 2639 | + var ay = a[1]; | |
| 2640 | + var az = a[2]; | |
| 2641 | + var aw = a[3]; | |
| 2642 | + var bx = b[0]; | |
| 2643 | + var by = b[1]; | |
| 2644 | + var bz = b[2]; | |
| 2645 | + var bw = b[3]; | |
| 2646 | + var omega; | |
| 2647 | + var cosom; | |
| 2648 | + var sinom; | |
| 2649 | + var scale0; | |
| 2650 | + var scale1; | |
| 2651 | + cosom = ax * bx + ay * by + az * bz + aw * bw; | |
| 2652 | + if (cosom < 0) { | |
| 2653 | + cosom = -cosom; | |
| 2654 | + bx = -bx; | |
| 2655 | + by = -by; | |
| 2656 | + bz = -bz; | |
| 2657 | + bw = -bw; | |
| 2658 | + } | |
| 2659 | + if (1 - cosom > 1e-6) { | |
| 2660 | + omega = Math.acos(cosom); | |
| 2661 | + sinom = Math.sin(omega); | |
| 2662 | + scale0 = Math.sin((1 - t) * omega) / sinom; | |
| 2663 | + scale1 = Math.sin(t * omega) / sinom; | |
| 2664 | + } else { | |
| 2665 | + scale0 = 1 - t; | |
| 2666 | + scale1 = t; | |
| 2667 | + } | |
| 2668 | + out[0] = scale0 * ax + scale1 * bx; | |
| 2669 | + out[1] = scale0 * ay + scale1 * by; | |
| 2670 | + out[2] = scale0 * az + scale1 * bz; | |
| 2671 | + out[3] = scale0 * aw + scale1 * bw; | |
| 2672 | + return out; | |
| 2673 | + } | |
| 2674 | + function quaternionToEuler(out, quat) { | |
| 2675 | + var qx = quat[0]; | |
| 2676 | + var qy = quat[1]; | |
| 2677 | + var qz = quat[2]; | |
| 2678 | + var qw = quat[3]; | |
| 2679 | + var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz); | |
| 2680 | + var attitude = Math.asin(2 * qx * qy + 2 * qz * qw); | |
| 2681 | + var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz); | |
| 2682 | + out[0] = heading / degToRads; | |
| 2683 | + out[1] = attitude / degToRads; | |
| 2684 | + out[2] = bank / degToRads; | |
| 2685 | + } | |
| 2686 | + function createQuaternion(values) { | |
| 2687 | + var heading = values[0] * degToRads; | |
| 2688 | + var attitude = values[1] * degToRads; | |
| 2689 | + var bank = values[2] * degToRads; | |
| 2690 | + var c1 = Math.cos(heading / 2); | |
| 2691 | + var c2 = Math.cos(attitude / 2); | |
| 2692 | + var c3 = Math.cos(bank / 2); | |
| 2693 | + var s1 = Math.sin(heading / 2); | |
| 2694 | + var s2 = Math.sin(attitude / 2); | |
| 2695 | + var s3 = Math.sin(bank / 2); | |
| 2696 | + var w = c1 * c2 * c3 - s1 * s2 * s3; | |
| 2697 | + return [ | |
| 2698 | + s1 * s2 * c3 + c1 * c2 * s3, | |
| 2699 | + s1 * c2 * c3 + c1 * s2 * s3, | |
| 2700 | + c1 * s2 * c3 - s1 * c2 * s3, | |
| 2701 | + w | |
| 2702 | + ]; | |
| 2703 | + } | |
| 2704 | + function getValueAtCurrentTime() { | |
| 2705 | + var frameNum = this.comp.renderedFrame - this.offsetTime; | |
| 2706 | + var initTime = this.keyframes[0].t - this.offsetTime; | |
| 2707 | + var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; | |
| 2708 | + if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) { | |
| 2709 | + if (this._caching.lastFrame >= frameNum) { | |
| 2710 | + this._caching._lastKeyframeIndex = -1; | |
| 2711 | + this._caching.lastIndex = 0; | |
| 2712 | + } | |
| 2713 | + var renderResult = this.interpolateValue(frameNum, this._caching); | |
| 2714 | + this.pv = renderResult; | |
| 2715 | + } | |
| 2716 | + this._caching.lastFrame = frameNum; | |
| 2717 | + return this.pv; | |
| 2718 | + } | |
| 2719 | + function setVValue(val) { | |
| 2720 | + var multipliedValue; | |
| 2721 | + if (this.propType === "unidimensional") { | |
| 2722 | + multipliedValue = val * this.mult; | |
| 2723 | + if (mathAbs(this.v - multipliedValue) > 1e-5) { | |
| 2724 | + this.v = multipliedValue; | |
| 2725 | + this._mdf = true; | |
| 2726 | + } | |
| 2727 | + } else { | |
| 2728 | + var i = 0; | |
| 2729 | + var len = this.v.length; | |
| 2730 | + while (i < len) { | |
| 2731 | + multipliedValue = val[i] * this.mult; | |
| 2732 | + if (mathAbs(this.v[i] - multipliedValue) > 1e-5) { | |
| 2733 | + this.v[i] = multipliedValue; | |
| 2734 | + this._mdf = true; | |
| 2735 | + } | |
| 2736 | + i += 1; | |
| 2737 | + } | |
| 2738 | + } | |
| 2739 | + } | |
| 2740 | + function processEffectsSequence() { | |
| 2741 | + if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) return; | |
| 2742 | + if (this.lock) { | |
| 2743 | + this.setVValue(this.pv); | |
| 2744 | + return; | |
| 2745 | + } | |
| 2746 | + this.lock = true; | |
| 2747 | + this._mdf = this._isFirstFrame; | |
| 2748 | + var i; | |
| 2749 | + var len = this.effectsSequence.length; | |
| 2750 | + var finalValue = this.kf ? this.pv : this.data.k; | |
| 2751 | + for (i = 0; i < len; i += 1) finalValue = this.effectsSequence[i](finalValue); | |
| 2752 | + this.setVValue(finalValue); | |
| 2753 | + this._isFirstFrame = false; | |
| 2754 | + this.lock = false; | |
| 2755 | + this.frameId = this.elem.globalData.frameId; | |
| 2756 | + } | |
| 2757 | + function addEffect(effectFunction) { | |
| 2758 | + this.effectsSequence.push(effectFunction); | |
| 2759 | + this.container.addDynamicProperty(this); | |
| 2760 | + } | |
| 2761 | + function ValueProperty(elem, data, mult, container) { | |
| 2762 | + this.propType = "unidimensional"; | |
| 2763 | + this.mult = mult || 1; | |
| 2764 | + this.data = data; | |
| 2765 | + this.v = mult ? data.k * mult : data.k; | |
| 2766 | + this.pv = data.k; | |
| 2767 | + this._mdf = false; | |
| 2768 | + this.elem = elem; | |
| 2769 | + this.container = container; | |
| 2770 | + this.comp = elem.comp; | |
| 2771 | + this.k = false; | |
| 2772 | + this.kf = false; | |
| 2773 | + this.vel = 0; | |
| 2774 | + this.effectsSequence = []; | |
| 2775 | + this._isFirstFrame = true; | |
| 2776 | + this.getValue = processEffectsSequence; | |
| 2777 | + this.setVValue = setVValue; | |
| 2778 | + this.addEffect = addEffect; | |
| 2779 | + } | |
| 2780 | + function MultiDimensionalProperty(elem, data, mult, container) { | |
| 2781 | + this.propType = "multidimensional"; | |
| 2782 | + this.mult = mult || 1; | |
| 2783 | + this.data = data; | |
| 2784 | + this._mdf = false; | |
| 2785 | + this.elem = elem; | |
| 2786 | + this.container = container; | |
| 2787 | + this.comp = elem.comp; | |
| 2788 | + this.k = false; | |
| 2789 | + this.kf = false; | |
| 2790 | + this.frameId = -1; | |
| 2791 | + var i; | |
| 2792 | + var len = data.k.length; | |
| 2793 | + this.v = createTypedArray("float32", len); | |
| 2794 | + this.pv = createTypedArray("float32", len); | |
| 2795 | + this.vel = createTypedArray("float32", len); | |
| 2796 | + for (i = 0; i < len; i += 1) { | |
| 2797 | + this.v[i] = data.k[i] * this.mult; | |
| 2798 | + this.pv[i] = data.k[i]; | |
| 2799 | + } | |
| 2800 | + this._isFirstFrame = true; | |
| 2801 | + this.effectsSequence = []; | |
| 2802 | + this.getValue = processEffectsSequence; | |
| 2803 | + this.setVValue = setVValue; | |
| 2804 | + this.addEffect = addEffect; | |
| 2805 | + } | |
| 2806 | + function KeyframedValueProperty(elem, data, mult, container) { | |
| 2807 | + this.propType = "unidimensional"; | |
| 2808 | + this.keyframes = data.k; | |
| 2809 | + this.keyframesMetadata = []; | |
| 2810 | + this.offsetTime = elem.data.st; | |
| 2811 | + this.frameId = -1; | |
| 2812 | + this._caching = { | |
| 2813 | + lastFrame: initFrame, | |
| 2814 | + lastIndex: 0, | |
| 2815 | + value: 0, | |
| 2816 | + _lastKeyframeIndex: -1 | |
| 2817 | + }; | |
| 2818 | + this.k = true; | |
| 2819 | + this.kf = true; | |
| 2820 | + this.data = data; | |
| 2821 | + this.mult = mult || 1; | |
| 2822 | + this.elem = elem; | |
| 2823 | + this.container = container; | |
| 2824 | + this.comp = elem.comp; | |
| 2825 | + this.v = initFrame; | |
| 2826 | + this.pv = initFrame; | |
| 2827 | + this._isFirstFrame = true; | |
| 2828 | + this.getValue = processEffectsSequence; | |
| 2829 | + this.setVValue = setVValue; | |
| 2830 | + this.interpolateValue = interpolateValue; | |
| 2831 | + this.effectsSequence = [getValueAtCurrentTime.bind(this)]; | |
| 2832 | + this.addEffect = addEffect; | |
| 2833 | + } | |
| 2834 | + function KeyframedMultidimensionalProperty(elem, data, mult, container) { | |
| 2835 | + this.propType = "multidimensional"; | |
| 2836 | + var i; | |
| 2837 | + var len = data.k.length; | |
| 2838 | + var s; | |
| 2839 | + var e; | |
| 2840 | + var to; | |
| 2841 | + var ti; | |
| 2842 | + for (i = 0; i < len - 1; i += 1) if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) { | |
| 2843 | + s = data.k[i].s; | |
| 2844 | + e = data.k[i + 1].s; | |
| 2845 | + to = data.k[i].to; | |
| 2846 | + ti = data.k[i].ti; | |
| 2847 | + 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])) { | |
| 2848 | + data.k[i].to = null; | |
| 2849 | + data.k[i].ti = null; | |
| 2850 | + } | |
| 2851 | + if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) { | |
| 2852 | + if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) { | |
| 2853 | + data.k[i].to = null; | |
| 2854 | + data.k[i].ti = null; | |
| 2855 | + } | |
| 2856 | + } | |
| 2857 | + } | |
| 2858 | + this.effectsSequence = [getValueAtCurrentTime.bind(this)]; | |
| 2859 | + this.data = data; | |
| 2860 | + this.keyframes = data.k; | |
| 2861 | + this.keyframesMetadata = []; | |
| 2862 | + this.offsetTime = elem.data.st; | |
| 2863 | + this.k = true; | |
| 2864 | + this.kf = true; | |
| 2865 | + this._isFirstFrame = true; | |
| 2866 | + this.mult = mult || 1; | |
| 2867 | + this.elem = elem; | |
| 2868 | + this.container = container; | |
| 2869 | + this.comp = elem.comp; | |
| 2870 | + this.getValue = processEffectsSequence; | |
| 2871 | + this.setVValue = setVValue; | |
| 2872 | + this.interpolateValue = interpolateValue; | |
| 2873 | + this.frameId = -1; | |
| 2874 | + var arrLen = data.k[0].s.length; | |
| 2875 | + this.v = createTypedArray("float32", arrLen); | |
| 2876 | + this.pv = createTypedArray("float32", arrLen); | |
| 2877 | + for (i = 0; i < arrLen; i += 1) { | |
| 2878 | + this.v[i] = initFrame; | |
| 2879 | + this.pv[i] = initFrame; | |
| 2880 | + } | |
| 2881 | + this._caching = { | |
| 2882 | + lastFrame: initFrame, | |
| 2883 | + lastIndex: 0, | |
| 2884 | + value: createTypedArray("float32", arrLen) | |
| 2885 | + }; | |
| 2886 | + this.addEffect = addEffect; | |
| 2887 | + } | |
| 2888 | + var PropertyFactory = function() { | |
| 2889 | + function getProp(elem, data, type, mult, container) { | |
| 2890 | + if (data.sid) data = elem.globalData.slotManager.getProp(data); | |
| 2891 | + var p; | |
| 2892 | + if (!data.k.length) p = new ValueProperty(elem, data, mult, container); | |
| 2893 | + else if (typeof data.k[0] === "number") p = new MultiDimensionalProperty(elem, data, mult, container); | |
| 2894 | + else switch (type) { | |
| 2895 | + case 0: | |
| 2896 | + p = new KeyframedValueProperty(elem, data, mult, container); | |
| 2897 | + break; | |
| 2898 | + case 1: | |
| 2899 | + p = new KeyframedMultidimensionalProperty(elem, data, mult, container); | |
| 2900 | + break; | |
| 2901 | + default: break; | |
| 2902 | + } | |
| 2903 | + if (p.effectsSequence.length) container.addDynamicProperty(p); | |
| 2904 | + return p; | |
| 2905 | + } | |
| 2906 | + return { getProp }; | |
| 2907 | + }(); | |
| 2908 | + function DynamicPropertyContainer() {} | |
| 2909 | + DynamicPropertyContainer.prototype = { | |
| 2910 | + addDynamicProperty: function addDynamicProperty(prop) { | |
| 2911 | + if (this.dynamicProperties.indexOf(prop) === -1) { | |
| 2912 | + this.dynamicProperties.push(prop); | |
| 2913 | + this.container.addDynamicProperty(this); | |
| 2914 | + this._isAnimated = true; | |
| 2915 | + } | |
| 2916 | + }, | |
| 2917 | + iterateDynamicProperties: function iterateDynamicProperties() { | |
| 2918 | + this._mdf = false; | |
| 2919 | + var i; | |
| 2920 | + var len = this.dynamicProperties.length; | |
| 2921 | + for (i = 0; i < len; i += 1) { | |
| 2922 | + this.dynamicProperties[i].getValue(); | |
| 2923 | + if (this.dynamicProperties[i]._mdf) this._mdf = true; | |
| 2924 | + } | |
| 2925 | + }, | |
| 2926 | + initDynamicPropertyContainer: function initDynamicPropertyContainer(container) { | |
| 2927 | + this.container = container; | |
| 2928 | + this.dynamicProperties = []; | |
| 2929 | + this._mdf = false; | |
| 2930 | + this._isAnimated = false; | |
| 2931 | + } | |
| 2932 | + }; | |
| 2933 | + var pointPool = function() { | |
| 2934 | + function create() { | |
| 2935 | + return createTypedArray("float32", 2); | |
| 2936 | + } | |
| 2937 | + return poolFactory(8, create); | |
| 2938 | + }(); | |
| 2939 | + function ShapePath() { | |
| 2940 | + this.c = false; | |
| 2941 | + this._length = 0; | |
| 2942 | + this._maxLength = 8; | |
| 2943 | + this.v = createSizedArray(this._maxLength); | |
| 2944 | + this.o = createSizedArray(this._maxLength); | |
| 2945 | + this.i = createSizedArray(this._maxLength); | |
| 2946 | + } | |
| 2947 | + ShapePath.prototype.setPathData = function(closed, len) { | |
| 2948 | + this.c = closed; | |
| 2949 | + this.setLength(len); | |
| 2950 | + var i = 0; | |
| 2951 | + while (i < len) { | |
| 2952 | + this.v[i] = pointPool.newElement(); | |
| 2953 | + this.o[i] = pointPool.newElement(); | |
| 2954 | + this.i[i] = pointPool.newElement(); | |
| 2955 | + i += 1; | |
| 2956 | + } | |
| 2957 | + }; | |
| 2958 | + ShapePath.prototype.setLength = function(len) { | |
| 2959 | + while (this._maxLength < len) this.doubleArrayLength(); | |
| 2960 | + this._length = len; | |
| 2961 | + }; | |
| 2962 | + ShapePath.prototype.doubleArrayLength = function() { | |
| 2963 | + this.v = this.v.concat(createSizedArray(this._maxLength)); | |
| 2964 | + this.i = this.i.concat(createSizedArray(this._maxLength)); | |
| 2965 | + this.o = this.o.concat(createSizedArray(this._maxLength)); | |
| 2966 | + this._maxLength *= 2; | |
| 2967 | + }; | |
| 2968 | + ShapePath.prototype.setXYAt = function(x, y, type, pos, replace) { | |
| 2969 | + var arr; | |
| 2970 | + this._length = Math.max(this._length, pos + 1); | |
| 2971 | + if (this._length >= this._maxLength) this.doubleArrayLength(); | |
| 2972 | + switch (type) { | |
| 2973 | + case "v": | |
| 2974 | + arr = this.v; | |
| 2975 | + break; | |
| 2976 | + case "i": | |
| 2977 | + arr = this.i; | |
| 2978 | + break; | |
| 2979 | + case "o": | |
| 2980 | + arr = this.o; | |
| 2981 | + break; | |
| 2982 | + default: | |
| 2983 | + arr = []; | |
| 2984 | + break; | |
| 2985 | + } | |
| 2986 | + if (!arr[pos] || arr[pos] && !replace) arr[pos] = pointPool.newElement(); | |
| 2987 | + arr[pos][0] = x; | |
| 2988 | + arr[pos][1] = y; | |
| 2989 | + }; | |
| 2990 | + ShapePath.prototype.setTripleAt = function(vX, vY, oX, oY, iX, iY, pos, replace) { | |
| 2991 | + this.setXYAt(vX, vY, "v", pos, replace); | |
| 2992 | + this.setXYAt(oX, oY, "o", pos, replace); | |
| 2993 | + this.setXYAt(iX, iY, "i", pos, replace); | |
| 2994 | + }; | |
| 2995 | + ShapePath.prototype.reverse = function() { | |
| 2996 | + var newPath = new ShapePath(); | |
| 2997 | + newPath.setPathData(this.c, this._length); | |
| 2998 | + var vertices = this.v; | |
| 2999 | + var outPoints = this.o; | |
| 3000 | + var inPoints = this.i; | |
| 3001 | + var init = 0; | |
| 3002 | + if (this.c) { | |
| 3003 | + newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false); | |
| 3004 | + init = 1; | |
| 3005 | + } | |
| 3006 | + var cnt = this._length - 1; | |
| 3007 | + var len = this._length; | |
| 3008 | + var i; | |
| 3009 | + for (i = init; i < len; i += 1) { | |
| 3010 | + newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false); | |
| 3011 | + cnt -= 1; | |
| 3012 | + } | |
| 3013 | + return newPath; | |
| 3014 | + }; | |
| 3015 | + ShapePath.prototype.length = function() { | |
| 3016 | + return this._length; | |
| 3017 | + }; | |
| 3018 | + var shapePool = function() { | |
| 3019 | + function create() { | |
| 3020 | + return new ShapePath(); | |
| 3021 | + } | |
| 3022 | + function release(shapePath) { | |
| 3023 | + var len = shapePath._length; | |
| 3024 | + var i; | |
| 3025 | + for (i = 0; i < len; i += 1) { | |
| 3026 | + pointPool.release(shapePath.v[i]); | |
| 3027 | + pointPool.release(shapePath.i[i]); | |
| 3028 | + pointPool.release(shapePath.o[i]); | |
| 3029 | + shapePath.v[i] = null; | |
| 3030 | + shapePath.i[i] = null; | |
| 3031 | + shapePath.o[i] = null; | |
| 3032 | + } | |
| 3033 | + shapePath._length = 0; | |
| 3034 | + shapePath.c = false; | |
| 3035 | + } | |
| 3036 | + function clone(shape) { | |
| 3037 | + var cloned = factory.newElement(); | |
| 3038 | + var i; | |
| 3039 | + var len = shape._length === void 0 ? shape.v.length : shape._length; | |
| 3040 | + cloned.setLength(len); | |
| 3041 | + cloned.c = shape.c; | |
| 3042 | + for (i = 0; i < len; i += 1) 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); | |
| 3043 | + return cloned; | |
| 3044 | + } | |
| 3045 | + var factory = poolFactory(4, create, release); | |
| 3046 | + factory.clone = clone; | |
| 3047 | + return factory; | |
| 3048 | + }(); | |
| 3049 | + function ShapeCollection() { | |
| 3050 | + this._length = 0; | |
| 3051 | + this._maxLength = 4; | |
| 3052 | + this.shapes = createSizedArray(this._maxLength); | |
| 3053 | + } | |
| 3054 | + ShapeCollection.prototype.addShape = function(shapeData) { | |
| 3055 | + if (this._length === this._maxLength) { | |
| 3056 | + this.shapes = this.shapes.concat(createSizedArray(this._maxLength)); | |
| 3057 | + this._maxLength *= 2; | |
| 3058 | + } | |
| 3059 | + this.shapes[this._length] = shapeData; | |
| 3060 | + this._length += 1; | |
| 3061 | + }; | |
| 3062 | + ShapeCollection.prototype.releaseShapes = function() { | |
| 3063 | + var i; | |
| 3064 | + for (i = 0; i < this._length; i += 1) shapePool.release(this.shapes[i]); | |
| 3065 | + this._length = 0; | |
| 3066 | + }; | |
| 3067 | + var shapeCollectionPool = function() { | |
| 3068 | + var ob = { | |
| 3069 | + newShapeCollection, | |
| 3070 | + release | |
| 3071 | + }; | |
| 3072 | + var _length = 0; | |
| 3073 | + var _maxLength = 4; | |
| 3074 | + var pool = createSizedArray(_maxLength); | |
| 3075 | + function newShapeCollection() { | |
| 3076 | + var shapeCollection; | |
| 3077 | + if (_length) { | |
| 3078 | + _length -= 1; | |
| 3079 | + shapeCollection = pool[_length]; | |
| 3080 | + } else shapeCollection = new ShapeCollection(); | |
| 3081 | + return shapeCollection; | |
| 3082 | + } | |
| 3083 | + function release(shapeCollection) { | |
| 3084 | + var i; | |
| 3085 | + var len = shapeCollection._length; | |
| 3086 | + for (i = 0; i < len; i += 1) shapePool.release(shapeCollection.shapes[i]); | |
| 3087 | + shapeCollection._length = 0; | |
| 3088 | + if (_length === _maxLength) { | |
| 3089 | + pool = pooling["double"](pool); | |
| 3090 | + _maxLength *= 2; | |
| 3091 | + } | |
| 3092 | + pool[_length] = shapeCollection; | |
| 3093 | + _length += 1; | |
| 3094 | + } | |
| 3095 | + return ob; | |
| 3096 | + }(); | |
| 3097 | + var ShapePropertyFactory = function() { | |
| 3098 | + var initFrame = -999999; | |
| 3099 | + function interpolateShape(frameNum, previousValue, caching) { | |
| 3100 | + var iterationIndex = caching.lastIndex; | |
| 3101 | + var keyPropS; | |
| 3102 | + var keyPropE; | |
| 3103 | + var isHold; | |
| 3104 | + var j; | |
| 3105 | + var k; | |
| 3106 | + var jLen; | |
| 3107 | + var kLen; | |
| 3108 | + var perc; | |
| 3109 | + var vertexValue; | |
| 3110 | + var kf = this.keyframes; | |
| 3111 | + if (frameNum < kf[0].t - this.offsetTime) { | |
| 3112 | + keyPropS = kf[0].s[0]; | |
| 3113 | + isHold = true; | |
| 3114 | + iterationIndex = 0; | |
| 3115 | + } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) { | |
| 3116 | + keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0]; | |
| 3117 | + isHold = true; | |
| 3118 | + } else { | |
| 3119 | + var i = iterationIndex; | |
| 3120 | + var len = kf.length - 1; | |
| 3121 | + var flag = true; | |
| 3122 | + var keyData; | |
| 3123 | + var nextKeyData; | |
| 3124 | + var keyframeMetadata; | |
| 3125 | + while (flag) { | |
| 3126 | + keyData = kf[i]; | |
| 3127 | + nextKeyData = kf[i + 1]; | |
| 3128 | + if (nextKeyData.t - this.offsetTime > frameNum) break; | |
| 3129 | + if (i < len - 1) i += 1; | |
| 3130 | + else flag = false; | |
| 3131 | + } | |
| 3132 | + keyframeMetadata = this.keyframesMetadata[i] || {}; | |
| 3133 | + isHold = keyData.h === 1; | |
| 3134 | + iterationIndex = i; | |
| 3135 | + if (!isHold) { | |
| 3136 | + if (frameNum >= nextKeyData.t - this.offsetTime) perc = 1; | |
| 3137 | + else if (frameNum < keyData.t - this.offsetTime) perc = 0; | |
| 3138 | + else { | |
| 3139 | + var fnc; | |
| 3140 | + if (keyframeMetadata.__fnct) fnc = keyframeMetadata.__fnct; | |
| 3141 | + else { | |
| 3142 | + fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get; | |
| 3143 | + keyframeMetadata.__fnct = fnc; | |
| 3144 | + } | |
| 3145 | + perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime))); | |
| 3146 | + } | |
| 3147 | + keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0]; | |
| 3148 | + } | |
| 3149 | + keyPropS = keyData.s[0]; | |
| 3150 | + } | |
| 3151 | + jLen = previousValue._length; | |
| 3152 | + kLen = keyPropS.i[0].length; | |
| 3153 | + caching.lastIndex = iterationIndex; | |
| 3154 | + for (j = 0; j < jLen; j += 1) for (k = 0; k < kLen; k += 1) { | |
| 3155 | + vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc; | |
| 3156 | + previousValue.i[j][k] = vertexValue; | |
| 3157 | + vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc; | |
| 3158 | + previousValue.o[j][k] = vertexValue; | |
| 3159 | + vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc; | |
| 3160 | + previousValue.v[j][k] = vertexValue; | |
| 3161 | + } | |
| 3162 | + } | |
| 3163 | + function interpolateShapeCurrentTime() { | |
| 3164 | + var frameNum = this.comp.renderedFrame - this.offsetTime; | |
| 3165 | + var initTime = this.keyframes[0].t - this.offsetTime; | |
| 3166 | + var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; | |
| 3167 | + var lastFrame = this._caching.lastFrame; | |
| 3168 | + if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) { | |
| 3169 | + this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0; | |
| 3170 | + this.interpolateShape(frameNum, this.pv, this._caching); | |
| 3171 | + } | |
| 3172 | + this._caching.lastFrame = frameNum; | |
| 3173 | + return this.pv; | |
| 3174 | + } | |
| 3175 | + function resetShape() { | |
| 3176 | + this.paths = this.localShapeCollection; | |
| 3177 | + } | |
| 3178 | + function shapesEqual(shape1, shape2) { | |
| 3179 | + if (shape1._length !== shape2._length || shape1.c !== shape2.c) return false; | |
| 3180 | + var i; | |
| 3181 | + var len = shape1._length; | |
| 3182 | + for (i = 0; i < len; i += 1) if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) return false; | |
| 3183 | + return true; | |
| 3184 | + } | |
| 3185 | + function setVValue(newPath) { | |
| 3186 | + if (!shapesEqual(this.v, newPath)) { | |
| 3187 | + this.v = shapePool.clone(newPath); | |
| 3188 | + this.localShapeCollection.releaseShapes(); | |
| 3189 | + this.localShapeCollection.addShape(this.v); | |
| 3190 | + this._mdf = true; | |
| 3191 | + this.paths = this.localShapeCollection; | |
| 3192 | + } | |
| 3193 | + } | |
| 3194 | + function processEffectsSequence() { | |
| 3195 | + if (this.elem.globalData.frameId === this.frameId) return; | |
| 3196 | + if (!this.effectsSequence.length) { | |
| 3197 | + this._mdf = false; | |
| 3198 | + return; | |
| 3199 | + } | |
| 3200 | + if (this.lock) { | |
| 3201 | + this.setVValue(this.pv); | |
| 3202 | + return; | |
| 3203 | + } | |
| 3204 | + this.lock = true; | |
| 3205 | + this._mdf = false; | |
| 3206 | + var finalValue; | |
| 3207 | + if (this.kf) finalValue = this.pv; | |
| 3208 | + else if (this.data.ks) finalValue = this.data.ks.k; | |
| 3209 | + else finalValue = this.data.pt.k; | |
| 3210 | + var i; | |
| 3211 | + var len = this.effectsSequence.length; | |
| 3212 | + for (i = 0; i < len; i += 1) finalValue = this.effectsSequence[i](finalValue); | |
| 3213 | + this.setVValue(finalValue); | |
| 3214 | + this.lock = false; | |
| 3215 | + this.frameId = this.elem.globalData.frameId; | |
| 3216 | + } | |
| 3217 | + function ShapeProperty(elem, data, type) { | |
| 3218 | + this.propType = "shape"; | |
| 3219 | + this.comp = elem.comp; | |
| 3220 | + this.container = elem; | |
| 3221 | + this.elem = elem; | |
| 3222 | + this.data = data; | |
| 3223 | + this.k = false; | |
| 3224 | + this.kf = false; | |
| 3225 | + this._mdf = false; | |
| 3226 | + var pathData = type === 3 ? data.pt.k : data.ks.k; | |
| 3227 | + this.v = shapePool.clone(pathData); | |
| 3228 | + this.pv = shapePool.clone(this.v); | |
| 3229 | + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 3230 | + this.paths = this.localShapeCollection; | |
| 3231 | + this.paths.addShape(this.v); | |
| 3232 | + this.reset = resetShape; | |
| 3233 | + this.effectsSequence = []; | |
| 3234 | + } | |
| 3235 | + function addEffect(effectFunction) { | |
| 3236 | + this.effectsSequence.push(effectFunction); | |
| 3237 | + this.container.addDynamicProperty(this); | |
| 3238 | + } | |
| 3239 | + ShapeProperty.prototype.interpolateShape = interpolateShape; | |
| 3240 | + ShapeProperty.prototype.getValue = processEffectsSequence; | |
| 3241 | + ShapeProperty.prototype.setVValue = setVValue; | |
| 3242 | + ShapeProperty.prototype.addEffect = addEffect; | |
| 3243 | + function KeyframedShapeProperty(elem, data, type) { | |
| 3244 | + this.propType = "shape"; | |
| 3245 | + this.comp = elem.comp; | |
| 3246 | + this.elem = elem; | |
| 3247 | + this.container = elem; | |
| 3248 | + this.offsetTime = elem.data.st; | |
| 3249 | + this.keyframes = type === 3 ? data.pt.k : data.ks.k; | |
| 3250 | + this.keyframesMetadata = []; | |
| 3251 | + this.k = true; | |
| 3252 | + this.kf = true; | |
| 3253 | + var len = this.keyframes[0].s[0].i.length; | |
| 3254 | + this.v = shapePool.newElement(); | |
| 3255 | + this.v.setPathData(this.keyframes[0].s[0].c, len); | |
| 3256 | + this.pv = shapePool.clone(this.v); | |
| 3257 | + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 3258 | + this.paths = this.localShapeCollection; | |
| 3259 | + this.paths.addShape(this.v); | |
| 3260 | + this.lastFrame = initFrame; | |
| 3261 | + this.reset = resetShape; | |
| 3262 | + this._caching = { | |
| 3263 | + lastFrame: initFrame, | |
| 3264 | + lastIndex: 0 | |
| 3265 | + }; | |
| 3266 | + this.effectsSequence = [interpolateShapeCurrentTime.bind(this)]; | |
| 3267 | + } | |
| 3268 | + KeyframedShapeProperty.prototype.getValue = processEffectsSequence; | |
| 3269 | + KeyframedShapeProperty.prototype.interpolateShape = interpolateShape; | |
| 3270 | + KeyframedShapeProperty.prototype.setVValue = setVValue; | |
| 3271 | + KeyframedShapeProperty.prototype.addEffect = addEffect; | |
| 3272 | + var EllShapeProperty = function() { | |
| 3273 | + var cPoint = roundCorner; | |
| 3274 | + function EllShapePropertyFactory(elem, data) { | |
| 3275 | + this.v = shapePool.newElement(); | |
| 3276 | + this.v.setPathData(true, 4); | |
| 3277 | + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 3278 | + this.paths = this.localShapeCollection; | |
| 3279 | + this.localShapeCollection.addShape(this.v); | |
| 3280 | + this.d = data.d; | |
| 3281 | + this.elem = elem; | |
| 3282 | + this.comp = elem.comp; | |
| 3283 | + this.frameId = -1; | |
| 3284 | + this.initDynamicPropertyContainer(elem); | |
| 3285 | + this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); | |
| 3286 | + this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this); | |
| 3287 | + if (this.dynamicProperties.length) this.k = true; | |
| 3288 | + else { | |
| 3289 | + this.k = false; | |
| 3290 | + this.convertEllToPath(); | |
| 3291 | + } | |
| 3292 | + } | |
| 3293 | + EllShapePropertyFactory.prototype = { | |
| 3294 | + reset: resetShape, | |
| 3295 | + getValue: function getValue() { | |
| 3296 | + if (this.elem.globalData.frameId === this.frameId) return; | |
| 3297 | + this.frameId = this.elem.globalData.frameId; | |
| 3298 | + this.iterateDynamicProperties(); | |
| 3299 | + if (this._mdf) this.convertEllToPath(); | |
| 3300 | + }, | |
| 3301 | + convertEllToPath: function convertEllToPath() { | |
| 3302 | + var p0 = this.p.v[0]; | |
| 3303 | + var p1 = this.p.v[1]; | |
| 3304 | + var s0 = this.s.v[0] / 2; | |
| 3305 | + var s1 = this.s.v[1] / 2; | |
| 3306 | + var _cw = this.d !== 3; | |
| 3307 | + var _v = this.v; | |
| 3308 | + _v.v[0][0] = p0; | |
| 3309 | + _v.v[0][1] = p1 - s1; | |
| 3310 | + _v.v[1][0] = _cw ? p0 + s0 : p0 - s0; | |
| 3311 | + _v.v[1][1] = p1; | |
| 3312 | + _v.v[2][0] = p0; | |
| 3313 | + _v.v[2][1] = p1 + s1; | |
| 3314 | + _v.v[3][0] = _cw ? p0 - s0 : p0 + s0; | |
| 3315 | + _v.v[3][1] = p1; | |
| 3316 | + _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; | |
| 3317 | + _v.i[0][1] = p1 - s1; | |
| 3318 | + _v.i[1][0] = _cw ? p0 + s0 : p0 - s0; | |
| 3319 | + _v.i[1][1] = p1 - s1 * cPoint; | |
| 3320 | + _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; | |
| 3321 | + _v.i[2][1] = p1 + s1; | |
| 3322 | + _v.i[3][0] = _cw ? p0 - s0 : p0 + s0; | |
| 3323 | + _v.i[3][1] = p1 + s1 * cPoint; | |
| 3324 | + _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; | |
| 3325 | + _v.o[0][1] = p1 - s1; | |
| 3326 | + _v.o[1][0] = _cw ? p0 + s0 : p0 - s0; | |
| 3327 | + _v.o[1][1] = p1 + s1 * cPoint; | |
| 3328 | + _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; | |
| 3329 | + _v.o[2][1] = p1 + s1; | |
| 3330 | + _v.o[3][0] = _cw ? p0 - s0 : p0 + s0; | |
| 3331 | + _v.o[3][1] = p1 - s1 * cPoint; | |
| 3332 | + } | |
| 3333 | + }; | |
| 3334 | + extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory); | |
| 3335 | + return EllShapePropertyFactory; | |
| 3336 | + }(); | |
| 3337 | + var StarShapeProperty = function() { | |
| 3338 | + function StarShapePropertyFactory(elem, data) { | |
| 3339 | + this.v = shapePool.newElement(); | |
| 3340 | + this.v.setPathData(true, 0); | |
| 3341 | + this.elem = elem; | |
| 3342 | + this.comp = elem.comp; | |
| 3343 | + this.data = data; | |
| 3344 | + this.frameId = -1; | |
| 3345 | + this.d = data.d; | |
| 3346 | + this.initDynamicPropertyContainer(elem); | |
| 3347 | + if (data.sy === 1) { | |
| 3348 | + this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this); | |
| 3349 | + this.is = PropertyFactory.getProp(elem, data.is, 0, .01, this); | |
| 3350 | + this.convertToPath = this.convertStarToPath; | |
| 3351 | + } else this.convertToPath = this.convertPolygonToPath; | |
| 3352 | + this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this); | |
| 3353 | + this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); | |
| 3354 | + this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this); | |
| 3355 | + this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this); | |
| 3356 | + this.os = PropertyFactory.getProp(elem, data.os, 0, .01, this); | |
| 3357 | + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 3358 | + this.localShapeCollection.addShape(this.v); | |
| 3359 | + this.paths = this.localShapeCollection; | |
| 3360 | + if (this.dynamicProperties.length) this.k = true; | |
| 3361 | + else { | |
| 3362 | + this.k = false; | |
| 3363 | + this.convertToPath(); | |
| 3364 | + } | |
| 3365 | + } | |
| 3366 | + StarShapePropertyFactory.prototype = { | |
| 3367 | + reset: resetShape, | |
| 3368 | + getValue: function getValue() { | |
| 3369 | + if (this.elem.globalData.frameId === this.frameId) return; | |
| 3370 | + this.frameId = this.elem.globalData.frameId; | |
| 3371 | + this.iterateDynamicProperties(); | |
| 3372 | + if (this._mdf) this.convertToPath(); | |
| 3373 | + }, | |
| 3374 | + convertStarToPath: function convertStarToPath() { | |
| 3375 | + var numPts = Math.floor(this.pt.v) * 2; | |
| 3376 | + var angle = Math.PI * 2 / numPts; | |
| 3377 | + var longFlag = true; | |
| 3378 | + var longRad = this.or.v; | |
| 3379 | + var shortRad = this.ir.v; | |
| 3380 | + var longRound = this.os.v; | |
| 3381 | + var shortRound = this.is.v; | |
| 3382 | + var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2); | |
| 3383 | + var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2); | |
| 3384 | + var i; | |
| 3385 | + var rad; | |
| 3386 | + var roundness; | |
| 3387 | + var perimSegment; | |
| 3388 | + var currentAng = -Math.PI / 2; | |
| 3389 | + currentAng += this.r.v; | |
| 3390 | + var dir = this.data.d === 3 ? -1 : 1; | |
| 3391 | + this.v._length = 0; | |
| 3392 | + for (i = 0; i < numPts; i += 1) { | |
| 3393 | + rad = longFlag ? longRad : shortRad; | |
| 3394 | + roundness = longFlag ? longRound : shortRound; | |
| 3395 | + perimSegment = longFlag ? longPerimSegment : shortPerimSegment; | |
| 3396 | + var x = rad * Math.cos(currentAng); | |
| 3397 | + var y = rad * Math.sin(currentAng); | |
| 3398 | + var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y); | |
| 3399 | + var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y); | |
| 3400 | + x += +this.p.v[0]; | |
| 3401 | + y += +this.p.v[1]; | |
| 3402 | + 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); | |
| 3403 | + longFlag = !longFlag; | |
| 3404 | + currentAng += angle * dir; | |
| 3405 | + } | |
| 3406 | + }, | |
| 3407 | + convertPolygonToPath: function convertPolygonToPath() { | |
| 3408 | + var numPts = Math.floor(this.pt.v); | |
| 3409 | + var angle = Math.PI * 2 / numPts; | |
| 3410 | + var rad = this.or.v; | |
| 3411 | + var roundness = this.os.v; | |
| 3412 | + var perimSegment = 2 * Math.PI * rad / (numPts * 4); | |
| 3413 | + var i; | |
| 3414 | + var currentAng = -Math.PI * .5; | |
| 3415 | + var dir = this.data.d === 3 ? -1 : 1; | |
| 3416 | + currentAng += this.r.v; | |
| 3417 | + this.v._length = 0; | |
| 3418 | + for (i = 0; i < numPts; i += 1) { | |
| 3419 | + var x = rad * Math.cos(currentAng); | |
| 3420 | + var y = rad * Math.sin(currentAng); | |
| 3421 | + var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y); | |
| 3422 | + var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y); | |
| 3423 | + x += +this.p.v[0]; | |
| 3424 | + y += +this.p.v[1]; | |
| 3425 | + 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); | |
| 3426 | + currentAng += angle * dir; | |
| 3427 | + } | |
| 3428 | + this.paths.length = 0; | |
| 3429 | + this.paths[0] = this.v; | |
| 3430 | + } | |
| 3431 | + }; | |
| 3432 | + extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory); | |
| 3433 | + return StarShapePropertyFactory; | |
| 3434 | + }(); | |
| 3435 | + var RectShapeProperty = function() { | |
| 3436 | + function RectShapePropertyFactory(elem, data) { | |
| 3437 | + this.v = shapePool.newElement(); | |
| 3438 | + this.v.c = true; | |
| 3439 | + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 3440 | + this.localShapeCollection.addShape(this.v); | |
| 3441 | + this.paths = this.localShapeCollection; | |
| 3442 | + this.elem = elem; | |
| 3443 | + this.comp = elem.comp; | |
| 3444 | + this.frameId = -1; | |
| 3445 | + this.d = data.d; | |
| 3446 | + this.initDynamicPropertyContainer(elem); | |
| 3447 | + this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); | |
| 3448 | + this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this); | |
| 3449 | + this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this); | |
| 3450 | + if (this.dynamicProperties.length) this.k = true; | |
| 3451 | + else { | |
| 3452 | + this.k = false; | |
| 3453 | + this.convertRectToPath(); | |
| 3454 | + } | |
| 3455 | + } | |
| 3456 | + RectShapePropertyFactory.prototype = { | |
| 3457 | + convertRectToPath: function convertRectToPath() { | |
| 3458 | + var p0 = this.p.v[0]; | |
| 3459 | + var p1 = this.p.v[1]; | |
| 3460 | + var v0 = this.s.v[0] / 2; | |
| 3461 | + var v1 = this.s.v[1] / 2; | |
| 3462 | + var round = bmMin(v0, v1, this.r.v); | |
| 3463 | + var cPoint = round * (1 - roundCorner); | |
| 3464 | + this.v._length = 0; | |
| 3465 | + if (this.d === 2 || this.d === 1) { | |
| 3466 | + this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true); | |
| 3467 | + this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true); | |
| 3468 | + if (round !== 0) { | |
| 3469 | + this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true); | |
| 3470 | + this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true); | |
| 3471 | + this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true); | |
| 3472 | + this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true); | |
| 3473 | + this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true); | |
| 3474 | + this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true); | |
| 3475 | + } else { | |
| 3476 | + this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2); | |
| 3477 | + this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3); | |
| 3478 | + } | |
| 3479 | + } else { | |
| 3480 | + this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true); | |
| 3481 | + if (round !== 0) { | |
| 3482 | + this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true); | |
| 3483 | + this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true); | |
| 3484 | + this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true); | |
| 3485 | + this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true); | |
| 3486 | + this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true); | |
| 3487 | + this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true); | |
| 3488 | + this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true); | |
| 3489 | + } else { | |
| 3490 | + this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true); | |
| 3491 | + this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true); | |
| 3492 | + this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true); | |
| 3493 | + } | |
| 3494 | + } | |
| 3495 | + }, | |
| 3496 | + getValue: function getValue() { | |
| 3497 | + if (this.elem.globalData.frameId === this.frameId) return; | |
| 3498 | + this.frameId = this.elem.globalData.frameId; | |
| 3499 | + this.iterateDynamicProperties(); | |
| 3500 | + if (this._mdf) this.convertRectToPath(); | |
| 3501 | + }, | |
| 3502 | + reset: resetShape | |
| 3503 | + }; | |
| 3504 | + extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory); | |
| 3505 | + return RectShapePropertyFactory; | |
| 3506 | + }(); | |
| 3507 | + function getShapeProp(elem, data, type) { | |
| 3508 | + var prop; | |
| 3509 | + if (type === 3 || type === 4) if ((type === 3 ? data.pt : data.ks).k.length) prop = new KeyframedShapeProperty(elem, data, type); | |
| 3510 | + else prop = new ShapeProperty(elem, data, type); | |
| 3511 | + else if (type === 5) prop = new RectShapeProperty(elem, data); | |
| 3512 | + else if (type === 6) prop = new EllShapeProperty(elem, data); | |
| 3513 | + else if (type === 7) prop = new StarShapeProperty(elem, data); | |
| 3514 | + if (prop.k) elem.addDynamicProperty(prop); | |
| 3515 | + return prop; | |
| 3516 | + } | |
| 3517 | + function getConstructorFunction() { | |
| 3518 | + return ShapeProperty; | |
| 3519 | + } | |
| 3520 | + function getKeyframedConstructorFunction() { | |
| 3521 | + return KeyframedShapeProperty; | |
| 3522 | + } | |
| 3523 | + var ob = {}; | |
| 3524 | + ob.getShapeProp = getShapeProp; | |
| 3525 | + ob.getConstructorFunction = getConstructorFunction; | |
| 3526 | + ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction; | |
| 3527 | + return ob; | |
| 3528 | + }(); | |
| 3529 | + /*! | |
| 3530 | + Transformation Matrix v2.0 | |
| 3531 | + (c) Epistemex 2014-2015 | |
| 3532 | + www.epistemex.com | |
| 3533 | + By Ken Fyrstenberg | |
| 3534 | + Contributions by leeoniya. | |
| 3535 | + License: MIT, header required. | |
| 3536 | + */ | |
| 3537 | + /** | |
| 3538 | + * 2D transformation matrix object initialized with identity matrix. | |
| 3539 | + * | |
| 3540 | + * The matrix can synchronize a canvas context by supplying the context | |
| 3541 | + * as an argument, or later apply current absolute transform to an | |
| 3542 | + * existing context. | |
| 3543 | + * | |
| 3544 | + * All values are handled as floating point values. | |
| 3545 | + * | |
| 3546 | + * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix | |
| 3547 | + * @prop {number} a - scale x | |
| 3548 | + * @prop {number} b - shear y | |
| 3549 | + * @prop {number} c - shear x | |
| 3550 | + * @prop {number} d - scale y | |
| 3551 | + * @prop {number} e - translate x | |
| 3552 | + * @prop {number} f - translate y | |
| 3553 | + * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context | |
| 3554 | + * @constructor | |
| 3555 | + */ | |
| 3556 | + var Matrix = function() { | |
| 3557 | + var _cos = Math.cos; | |
| 3558 | + var _sin = Math.sin; | |
| 3559 | + var _tan = Math.tan; | |
| 3560 | + var _rnd = Math.round; | |
| 3561 | + function reset() { | |
| 3562 | + this.props[0] = 1; | |
| 3563 | + this.props[1] = 0; | |
| 3564 | + this.props[2] = 0; | |
| 3565 | + this.props[3] = 0; | |
| 3566 | + this.props[4] = 0; | |
| 3567 | + this.props[5] = 1; | |
| 3568 | + this.props[6] = 0; | |
| 3569 | + this.props[7] = 0; | |
| 3570 | + this.props[8] = 0; | |
| 3571 | + this.props[9] = 0; | |
| 3572 | + this.props[10] = 1; | |
| 3573 | + this.props[11] = 0; | |
| 3574 | + this.props[12] = 0; | |
| 3575 | + this.props[13] = 0; | |
| 3576 | + this.props[14] = 0; | |
| 3577 | + this.props[15] = 1; | |
| 3578 | + return this; | |
| 3579 | + } | |
| 3580 | + function rotate(angle) { | |
| 3581 | + if (angle === 0) return this; | |
| 3582 | + var mCos = _cos(angle); | |
| 3583 | + var mSin = _sin(angle); | |
| 3584 | + return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); | |
| 3585 | + } | |
| 3586 | + function rotateX(angle) { | |
| 3587 | + if (angle === 0) return this; | |
| 3588 | + var mCos = _cos(angle); | |
| 3589 | + var mSin = _sin(angle); | |
| 3590 | + return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1); | |
| 3591 | + } | |
| 3592 | + function rotateY(angle) { | |
| 3593 | + if (angle === 0) return this; | |
| 3594 | + var mCos = _cos(angle); | |
| 3595 | + var mSin = _sin(angle); | |
| 3596 | + return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1); | |
| 3597 | + } | |
| 3598 | + function rotateZ(angle) { | |
| 3599 | + if (angle === 0) return this; | |
| 3600 | + var mCos = _cos(angle); | |
| 3601 | + var mSin = _sin(angle); | |
| 3602 | + return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); | |
| 3603 | + } | |
| 3604 | + function shear(sx, sy) { | |
| 3605 | + return this._t(1, sy, sx, 1, 0, 0); | |
| 3606 | + } | |
| 3607 | + function skew(ax, ay) { | |
| 3608 | + return this.shear(_tan(ax), _tan(ay)); | |
| 3609 | + } | |
| 3610 | + function skewFromAxis(ax, angle) { | |
| 3611 | + var mCos = _cos(angle); | |
| 3612 | + var mSin = _sin(angle); | |
| 3613 | + return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); | |
| 3614 | + } | |
| 3615 | + function scale(sx, sy, sz) { | |
| 3616 | + if (!sz && sz !== 0) sz = 1; | |
| 3617 | + if (sx === 1 && sy === 1 && sz === 1) return this; | |
| 3618 | + return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1); | |
| 3619 | + } | |
| 3620 | + function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) { | |
| 3621 | + this.props[0] = a; | |
| 3622 | + this.props[1] = b; | |
| 3623 | + this.props[2] = c; | |
| 3624 | + this.props[3] = d; | |
| 3625 | + this.props[4] = e; | |
| 3626 | + this.props[5] = f; | |
| 3627 | + this.props[6] = g; | |
| 3628 | + this.props[7] = h; | |
| 3629 | + this.props[8] = i; | |
| 3630 | + this.props[9] = j; | |
| 3631 | + this.props[10] = k; | |
| 3632 | + this.props[11] = l; | |
| 3633 | + this.props[12] = m; | |
| 3634 | + this.props[13] = n; | |
| 3635 | + this.props[14] = o; | |
| 3636 | + this.props[15] = p; | |
| 3637 | + return this; | |
| 3638 | + } | |
| 3639 | + function translate(tx, ty, tz) { | |
| 3640 | + tz = tz || 0; | |
| 3641 | + if (tx !== 0 || ty !== 0 || tz !== 0) return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1); | |
| 3642 | + return this; | |
| 3643 | + } | |
| 3644 | + function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) { | |
| 3645 | + var _p = this.props; | |
| 3646 | + 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) { | |
| 3647 | + _p[12] = _p[12] * a2 + _p[15] * m2; | |
| 3648 | + _p[13] = _p[13] * f2 + _p[15] * n2; | |
| 3649 | + _p[14] = _p[14] * k2 + _p[15] * o2; | |
| 3650 | + _p[15] *= p2; | |
| 3651 | + this._identityCalculated = false; | |
| 3652 | + return this; | |
| 3653 | + } | |
| 3654 | + var a1 = _p[0]; | |
| 3655 | + var b1 = _p[1]; | |
| 3656 | + var c1 = _p[2]; | |
| 3657 | + var d1 = _p[3]; | |
| 3658 | + var e1 = _p[4]; | |
| 3659 | + var f1 = _p[5]; | |
| 3660 | + var g1 = _p[6]; | |
| 3661 | + var h1 = _p[7]; | |
| 3662 | + var i1 = _p[8]; | |
| 3663 | + var j1 = _p[9]; | |
| 3664 | + var k1 = _p[10]; | |
| 3665 | + var l1 = _p[11]; | |
| 3666 | + var m1 = _p[12]; | |
| 3667 | + var n1 = _p[13]; | |
| 3668 | + var o1 = _p[14]; | |
| 3669 | + var p1 = _p[15]; | |
| 3670 | + _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2; | |
| 3671 | + _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2; | |
| 3672 | + _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2; | |
| 3673 | + _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2; | |
| 3674 | + _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2; | |
| 3675 | + _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2; | |
| 3676 | + _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2; | |
| 3677 | + _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2; | |
| 3678 | + _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2; | |
| 3679 | + _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2; | |
| 3680 | + _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2; | |
| 3681 | + _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2; | |
| 3682 | + _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2; | |
| 3683 | + _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2; | |
| 3684 | + _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2; | |
| 3685 | + _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2; | |
| 3686 | + this._identityCalculated = false; | |
| 3687 | + return this; | |
| 3688 | + } | |
| 3689 | + function multiply(matrix) { | |
| 3690 | + var matrixProps = matrix.props; | |
| 3691 | + return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]); | |
| 3692 | + } | |
| 3693 | + function isIdentity() { | |
| 3694 | + if (!this._identityCalculated) { | |
| 3695 | + 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); | |
| 3696 | + this._identityCalculated = true; | |
| 3697 | + } | |
| 3698 | + return this._identity; | |
| 3699 | + } | |
| 3700 | + function equals(matr) { | |
| 3701 | + var i = 0; | |
| 3702 | + while (i < 16) { | |
| 3703 | + if (matr.props[i] !== this.props[i]) return false; | |
| 3704 | + i += 1; | |
| 3705 | + } | |
| 3706 | + return true; | |
| 3707 | + } | |
| 3708 | + function clone(matr) { | |
| 3709 | + var i; | |
| 3710 | + for (i = 0; i < 16; i += 1) matr.props[i] = this.props[i]; | |
| 3711 | + return matr; | |
| 3712 | + } | |
| 3713 | + function cloneFromProps(props) { | |
| 3714 | + var i; | |
| 3715 | + for (i = 0; i < 16; i += 1) this.props[i] = props[i]; | |
| 3716 | + } | |
| 3717 | + function applyToPoint(x, y, z) { | |
| 3718 | + return { | |
| 3719 | + x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], | |
| 3720 | + y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], | |
| 3721 | + z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14] | |
| 3722 | + }; | |
| 3723 | + } | |
| 3724 | + function applyToX(x, y, z) { | |
| 3725 | + return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12]; | |
| 3726 | + } | |
| 3727 | + function applyToY(x, y, z) { | |
| 3728 | + return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13]; | |
| 3729 | + } | |
| 3730 | + function applyToZ(x, y, z) { | |
| 3731 | + return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]; | |
| 3732 | + } | |
| 3733 | + function getInverseMatrix() { | |
| 3734 | + var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4]; | |
| 3735 | + var a = this.props[5] / determinant; | |
| 3736 | + var b = -this.props[1] / determinant; | |
| 3737 | + var c = -this.props[4] / determinant; | |
| 3738 | + var d = this.props[0] / determinant; | |
| 3739 | + var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant; | |
| 3740 | + var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant; | |
| 3741 | + var inverseMatrix = new Matrix(); | |
| 3742 | + inverseMatrix.props[0] = a; | |
| 3743 | + inverseMatrix.props[1] = b; | |
| 3744 | + inverseMatrix.props[4] = c; | |
| 3745 | + inverseMatrix.props[5] = d; | |
| 3746 | + inverseMatrix.props[12] = e; | |
| 3747 | + inverseMatrix.props[13] = f; | |
| 3748 | + return inverseMatrix; | |
| 3749 | + } | |
| 3750 | + function inversePoint(pt) { | |
| 3751 | + return this.getInverseMatrix().applyToPointArray(pt[0], pt[1], pt[2] || 0); | |
| 3752 | + } | |
| 3753 | + function inversePoints(pts) { | |
| 3754 | + var i; | |
| 3755 | + var len = pts.length; | |
| 3756 | + var retPts = []; | |
| 3757 | + for (i = 0; i < len; i += 1) retPts[i] = inversePoint(pts[i]); | |
| 3758 | + return retPts; | |
| 3759 | + } | |
| 3760 | + function applyToTriplePoints(pt1, pt2, pt3) { | |
| 3761 | + var arr = createTypedArray("float32", 6); | |
| 3762 | + if (this.isIdentity()) { | |
| 3763 | + arr[0] = pt1[0]; | |
| 3764 | + arr[1] = pt1[1]; | |
| 3765 | + arr[2] = pt2[0]; | |
| 3766 | + arr[3] = pt2[1]; | |
| 3767 | + arr[4] = pt3[0]; | |
| 3768 | + arr[5] = pt3[1]; | |
| 3769 | + } else { | |
| 3770 | + var p0 = this.props[0]; | |
| 3771 | + var p1 = this.props[1]; | |
| 3772 | + var p4 = this.props[4]; | |
| 3773 | + var p5 = this.props[5]; | |
| 3774 | + var p12 = this.props[12]; | |
| 3775 | + var p13 = this.props[13]; | |
| 3776 | + arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12; | |
| 3777 | + arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13; | |
| 3778 | + arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12; | |
| 3779 | + arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13; | |
| 3780 | + arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12; | |
| 3781 | + arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13; | |
| 3782 | + } | |
| 3783 | + return arr; | |
| 3784 | + } | |
| 3785 | + function applyToPointArray(x, y, z) { | |
| 3786 | + var arr; | |
| 3787 | + if (this.isIdentity()) arr = [ | |
| 3788 | + x, | |
| 3789 | + y, | |
| 3790 | + z | |
| 3791 | + ]; | |
| 3792 | + else arr = [ | |
| 3793 | + x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], | |
| 3794 | + x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], | |
| 3795 | + x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14] | |
| 3796 | + ]; | |
| 3797 | + return arr; | |
| 3798 | + } | |
| 3799 | + function applyToPointStringified(x, y) { | |
| 3800 | + if (this.isIdentity()) return x + "," + y; | |
| 3801 | + var _p = this.props; | |
| 3802 | + 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; | |
| 3803 | + } | |
| 3804 | + function toCSS() { | |
| 3805 | + var i = 0; | |
| 3806 | + var props = this.props; | |
| 3807 | + var cssValue = "matrix3d("; | |
| 3808 | + var v = 1e4; | |
| 3809 | + while (i < 16) { | |
| 3810 | + cssValue += _rnd(props[i] * v) / v; | |
| 3811 | + cssValue += i === 15 ? ")" : ","; | |
| 3812 | + i += 1; | |
| 3813 | + } | |
| 3814 | + return cssValue; | |
| 3815 | + } | |
| 3816 | + function roundMatrixProperty(val) { | |
| 3817 | + var v = 1e4; | |
| 3818 | + if (val < 1e-6 && val > 0 || val > -1e-6 && val < 0) return _rnd(val * v) / v; | |
| 3819 | + return val; | |
| 3820 | + } | |
| 3821 | + function to2dCSS() { | |
| 3822 | + var props = this.props; | |
| 3823 | + var _a = roundMatrixProperty(props[0]); | |
| 3824 | + var _b = roundMatrixProperty(props[1]); | |
| 3825 | + var _c = roundMatrixProperty(props[4]); | |
| 3826 | + var _d = roundMatrixProperty(props[5]); | |
| 3827 | + var _e = roundMatrixProperty(props[12]); | |
| 3828 | + var _f = roundMatrixProperty(props[13]); | |
| 3829 | + return "matrix(" + _a + "," + _b + "," + _c + "," + _d + "," + _e + "," + _f + ")"; | |
| 3830 | + } | |
| 3831 | + return function() { | |
| 3832 | + this.reset = reset; | |
| 3833 | + this.rotate = rotate; | |
| 3834 | + this.rotateX = rotateX; | |
| 3835 | + this.rotateY = rotateY; | |
| 3836 | + this.rotateZ = rotateZ; | |
| 3837 | + this.skew = skew; | |
| 3838 | + this.skewFromAxis = skewFromAxis; | |
| 3839 | + this.shear = shear; | |
| 3840 | + this.scale = scale; | |
| 3841 | + this.setTransform = setTransform; | |
| 3842 | + this.translate = translate; | |
| 3843 | + this.transform = transform; | |
| 3844 | + this.multiply = multiply; | |
| 3845 | + this.applyToPoint = applyToPoint; | |
| 3846 | + this.applyToX = applyToX; | |
| 3847 | + this.applyToY = applyToY; | |
| 3848 | + this.applyToZ = applyToZ; | |
| 3849 | + this.applyToPointArray = applyToPointArray; | |
| 3850 | + this.applyToTriplePoints = applyToTriplePoints; | |
| 3851 | + this.applyToPointStringified = applyToPointStringified; | |
| 3852 | + this.toCSS = toCSS; | |
| 3853 | + this.to2dCSS = to2dCSS; | |
| 3854 | + this.clone = clone; | |
| 3855 | + this.cloneFromProps = cloneFromProps; | |
| 3856 | + this.equals = equals; | |
| 3857 | + this.inversePoints = inversePoints; | |
| 3858 | + this.inversePoint = inversePoint; | |
| 3859 | + this.getInverseMatrix = getInverseMatrix; | |
| 3860 | + this._t = this.transform; | |
| 3861 | + this.isIdentity = isIdentity; | |
| 3862 | + this._identity = true; | |
| 3863 | + this._identityCalculated = false; | |
| 3864 | + this.props = createTypedArray("float32", 16); | |
| 3865 | + this.reset(); | |
| 3866 | + }; | |
| 3867 | + }(); | |
| 3868 | + function _typeof$3(o) { | |
| 3869 | + "@babel/helpers - typeof"; | |
| 3870 | + return _typeof$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) { | |
| 3871 | + return typeof o; | |
| 3872 | + } : function(o) { | |
| 3873 | + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; | |
| 3874 | + }, _typeof$3(o); | |
| 3875 | + } | |
| 3876 | + var lottie = {}; | |
| 3877 | + var standalone = "__[STANDALONE]__"; | |
| 3878 | + var animationData = "__[ANIMATIONDATA]__"; | |
| 3879 | + var renderer = ""; | |
| 3880 | + function setLocation(href) { | |
| 3881 | + setLocationHref(href); | |
| 3882 | + } | |
| 3883 | + function searchAnimations() { | |
| 3884 | + if (standalone === true) animationManager.searchAnimations(animationData, standalone, renderer); | |
| 3885 | + else animationManager.searchAnimations(); | |
| 3886 | + } | |
| 3887 | + function setSubframeRendering(flag) { | |
| 3888 | + setSubframeEnabled(flag); | |
| 3889 | + } | |
| 3890 | + function setPrefix(prefix) { | |
| 3891 | + setIdPrefix(prefix); | |
| 3892 | + } | |
| 3893 | + function loadAnimation(params) { | |
| 3894 | + if (standalone === true) params.animationData = JSON.parse(animationData); | |
| 3895 | + return animationManager.loadAnimation(params); | |
| 3896 | + } | |
| 3897 | + function setQuality(value) { | |
| 3898 | + if (typeof value === "string") switch (value) { | |
| 3899 | + case "high": | |
| 3900 | + setDefaultCurveSegments(200); | |
| 3901 | + break; | |
| 3902 | + default: | |
| 3903 | + case "medium": | |
| 3904 | + setDefaultCurveSegments(50); | |
| 3905 | + break; | |
| 3906 | + case "low": | |
| 3907 | + setDefaultCurveSegments(10); | |
| 3908 | + break; | |
| 3909 | + } | |
| 3910 | + else if (!isNaN(value) && value > 1) setDefaultCurveSegments(value); | |
| 3911 | + if (getDefaultCurveSegments() >= 50) roundValues(false); | |
| 3912 | + else roundValues(true); | |
| 3913 | + } | |
| 3914 | + function inBrowser() { | |
| 3915 | + return typeof navigator !== "undefined"; | |
| 3916 | + } | |
| 3917 | + function installPlugin(type, plugin) { | |
| 3918 | + if (type === "expressions") setExpressionsPlugin(plugin); | |
| 3919 | + } | |
| 3920 | + function getFactory(name) { | |
| 3921 | + switch (name) { | |
| 3922 | + case "propertyFactory": return PropertyFactory; | |
| 3923 | + case "shapePropertyFactory": return ShapePropertyFactory; | |
| 3924 | + case "matrix": return Matrix; | |
| 3925 | + default: return null; | |
| 3926 | + } | |
| 3927 | + } | |
| 3928 | + lottie.play = animationManager.play; | |
| 3929 | + lottie.pause = animationManager.pause; | |
| 3930 | + lottie.setLocationHref = setLocation; | |
| 3931 | + lottie.togglePause = animationManager.togglePause; | |
| 3932 | + lottie.setSpeed = animationManager.setSpeed; | |
| 3933 | + lottie.setDirection = animationManager.setDirection; | |
| 3934 | + lottie.stop = animationManager.stop; | |
| 3935 | + lottie.searchAnimations = searchAnimations; | |
| 3936 | + lottie.registerAnimation = animationManager.registerAnimation; | |
| 3937 | + lottie.loadAnimation = loadAnimation; | |
| 3938 | + lottie.setSubframeRendering = setSubframeRendering; | |
| 3939 | + lottie.resize = animationManager.resize; | |
| 3940 | + lottie.goToAndStop = animationManager.goToAndStop; | |
| 3941 | + lottie.destroy = animationManager.destroy; | |
| 3942 | + lottie.setQuality = setQuality; | |
| 3943 | + lottie.inBrowser = inBrowser; | |
| 3944 | + lottie.installPlugin = installPlugin; | |
| 3945 | + lottie.freeze = animationManager.freeze; | |
| 3946 | + lottie.unfreeze = animationManager.unfreeze; | |
| 3947 | + lottie.setVolume = animationManager.setVolume; | |
| 3948 | + lottie.mute = animationManager.mute; | |
| 3949 | + lottie.unmute = animationManager.unmute; | |
| 3950 | + lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations; | |
| 3951 | + lottie.useWebWorker = setWebWorker; | |
| 3952 | + lottie.setIDPrefix = setPrefix; | |
| 3953 | + lottie.__getFactory = getFactory; | |
| 3954 | + lottie.version = "5.13.0"; | |
| 3955 | + function checkReady() { | |
| 3956 | + if (document.readyState === "complete") { | |
| 3957 | + clearInterval(readyStateCheckInterval); | |
| 3958 | + searchAnimations(); | |
| 3959 | + } | |
| 3960 | + } | |
| 3961 | + function getQueryVariable(variable) { | |
| 3962 | + var vars = queryString.split("&"); | |
| 3963 | + for (var i = 0; i < vars.length; i += 1) { | |
| 3964 | + var pair = vars[i].split("="); | |
| 3965 | + if (decodeURIComponent(pair[0]) == variable) return decodeURIComponent(pair[1]); | |
| 3966 | + } | |
| 3967 | + return null; | |
| 3968 | + } | |
| 3969 | + var queryString = ""; | |
| 3970 | + if (standalone) { | |
| 3971 | + var scripts = document.getElementsByTagName("script"); | |
| 3972 | + var myScript = scripts[scripts.length - 1] || { src: "" }; | |
| 3973 | + queryString = myScript.src ? myScript.src.replace(/^[^\?]+\??/, "") : ""; | |
| 3974 | + renderer = getQueryVariable("renderer"); | |
| 3975 | + } | |
| 3976 | + var readyStateCheckInterval = setInterval(checkReady, 100); | |
| 3977 | + try { | |
| 3978 | + if (!((typeof exports === "undefined" ? "undefined" : _typeof$3(exports)) === "object" && typeof module !== "undefined") && !(typeof define === "function" && define.amd)) window.bodymovin = lottie; | |
| 3979 | + } catch (err) {} | |
| 3980 | + var ShapeModifiers = function() { | |
| 3981 | + var ob = {}; | |
| 3982 | + var modifiers = {}; | |
| 3983 | + ob.registerModifier = registerModifier; | |
| 3984 | + ob.getModifier = getModifier; | |
| 3985 | + function registerModifier(nm, factory) { | |
| 3986 | + if (!modifiers[nm]) modifiers[nm] = factory; | |
| 3987 | + } | |
| 3988 | + function getModifier(nm, elem, data) { | |
| 3989 | + return new modifiers[nm](elem, data); | |
| 3990 | + } | |
| 3991 | + return ob; | |
| 3992 | + }(); | |
| 3993 | + function ShapeModifier() {} | |
| 3994 | + ShapeModifier.prototype.initModifierProperties = function() {}; | |
| 3995 | + ShapeModifier.prototype.addShapeToModifier = function() {}; | |
| 3996 | + ShapeModifier.prototype.addShape = function(data) { | |
| 3997 | + if (!this.closed) { | |
| 3998 | + data.sh.container.addDynamicProperty(data.sh); | |
| 3999 | + var shapeData = { | |
| 4000 | + shape: data.sh, | |
| 4001 | + data, | |
| 4002 | + localShapeCollection: shapeCollectionPool.newShapeCollection() | |
| 4003 | + }; | |
| 4004 | + this.shapes.push(shapeData); | |
| 4005 | + this.addShapeToModifier(shapeData); | |
| 4006 | + if (this._isAnimated) data.setAsAnimated(); | |
| 4007 | + } | |
| 4008 | + }; | |
| 4009 | + ShapeModifier.prototype.init = function(elem, data) { | |
| 4010 | + this.shapes = []; | |
| 4011 | + this.elem = elem; | |
| 4012 | + this.initDynamicPropertyContainer(elem); | |
| 4013 | + this.initModifierProperties(elem, data); | |
| 4014 | + this.frameId = initialDefaultFrame; | |
| 4015 | + this.closed = false; | |
| 4016 | + this.k = false; | |
| 4017 | + if (this.dynamicProperties.length) this.k = true; | |
| 4018 | + else this.getValue(true); | |
| 4019 | + }; | |
| 4020 | + ShapeModifier.prototype.processKeys = function() { | |
| 4021 | + if (this.elem.globalData.frameId === this.frameId) return; | |
| 4022 | + this.frameId = this.elem.globalData.frameId; | |
| 4023 | + this.iterateDynamicProperties(); | |
| 4024 | + }; | |
| 4025 | + extendPrototype([DynamicPropertyContainer], ShapeModifier); | |
| 4026 | + function TrimModifier() {} | |
| 4027 | + extendPrototype([ShapeModifier], TrimModifier); | |
| 4028 | + TrimModifier.prototype.initModifierProperties = function(elem, data) { | |
| 4029 | + this.s = PropertyFactory.getProp(elem, data.s, 0, .01, this); | |
| 4030 | + this.e = PropertyFactory.getProp(elem, data.e, 0, .01, this); | |
| 4031 | + this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this); | |
| 4032 | + this.sValue = 0; | |
| 4033 | + this.eValue = 0; | |
| 4034 | + this.getValue = this.processKeys; | |
| 4035 | + this.m = data.m; | |
| 4036 | + this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length; | |
| 4037 | + }; | |
| 4038 | + TrimModifier.prototype.addShapeToModifier = function(shapeData) { | |
| 4039 | + shapeData.pathsData = []; | |
| 4040 | + }; | |
| 4041 | + TrimModifier.prototype.calculateShapeEdges = function(s, e, shapeLength, addedLength, totalModifierLength) { | |
| 4042 | + var segments = []; | |
| 4043 | + if (e <= 1) segments.push({ | |
| 4044 | + s, | |
| 4045 | + e | |
| 4046 | + }); | |
| 4047 | + else if (s >= 1) segments.push({ | |
| 4048 | + s: s - 1, | |
| 4049 | + e: e - 1 | |
| 4050 | + }); | |
| 4051 | + else { | |
| 4052 | + segments.push({ | |
| 4053 | + s, | |
| 4054 | + e: 1 | |
| 4055 | + }); | |
| 4056 | + segments.push({ | |
| 4057 | + s: 0, | |
| 4058 | + e: e - 1 | |
| 4059 | + }); | |
| 4060 | + } | |
| 4061 | + var shapeSegments = []; | |
| 4062 | + var i; | |
| 4063 | + var len = segments.length; | |
| 4064 | + var segmentOb; | |
| 4065 | + for (i = 0; i < len; i += 1) { | |
| 4066 | + segmentOb = segments[i]; | |
| 4067 | + if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) { | |
| 4068 | + var shapeS; | |
| 4069 | + var shapeE; | |
| 4070 | + if (segmentOb.s * totalModifierLength <= addedLength) shapeS = 0; | |
| 4071 | + else shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength; | |
| 4072 | + if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) shapeE = 1; | |
| 4073 | + else shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength; | |
| 4074 | + shapeSegments.push([shapeS, shapeE]); | |
| 4075 | + } | |
| 4076 | + } | |
| 4077 | + if (!shapeSegments.length) shapeSegments.push([0, 0]); | |
| 4078 | + return shapeSegments; | |
| 4079 | + }; | |
| 4080 | + TrimModifier.prototype.releasePathsData = function(pathsData) { | |
| 4081 | + var i; | |
| 4082 | + var len = pathsData.length; | |
| 4083 | + for (i = 0; i < len; i += 1) segmentsLengthPool.release(pathsData[i]); | |
| 4084 | + pathsData.length = 0; | |
| 4085 | + return pathsData; | |
| 4086 | + }; | |
| 4087 | + TrimModifier.prototype.processShapes = function(_isFirstFrame) { | |
| 4088 | + var s; | |
| 4089 | + var e; | |
| 4090 | + if (this._mdf || _isFirstFrame) { | |
| 4091 | + var o = this.o.v % 360 / 360; | |
| 4092 | + if (o < 0) o += 1; | |
| 4093 | + if (this.s.v > 1) s = 1 + o; | |
| 4094 | + else if (this.s.v < 0) s = 0 + o; | |
| 4095 | + else s = this.s.v + o; | |
| 4096 | + if (this.e.v > 1) e = 1 + o; | |
| 4097 | + else if (this.e.v < 0) e = 0 + o; | |
| 4098 | + else e = this.e.v + o; | |
| 4099 | + if (s > e) { | |
| 4100 | + var _s = s; | |
| 4101 | + s = e; | |
| 4102 | + e = _s; | |
| 4103 | + } | |
| 4104 | + s = Math.round(s * 1e4) * 1e-4; | |
| 4105 | + e = Math.round(e * 1e4) * 1e-4; | |
| 4106 | + this.sValue = s; | |
| 4107 | + this.eValue = e; | |
| 4108 | + } else { | |
| 4109 | + s = this.sValue; | |
| 4110 | + e = this.eValue; | |
| 4111 | + } | |
| 4112 | + var shapePaths; | |
| 4113 | + var i; | |
| 4114 | + var len = this.shapes.length; | |
| 4115 | + var j; | |
| 4116 | + var jLen; | |
| 4117 | + var pathsData; | |
| 4118 | + var pathData; | |
| 4119 | + var totalShapeLength; | |
| 4120 | + var totalModifierLength = 0; | |
| 4121 | + if (e === s) for (i = 0; i < len; i += 1) { | |
| 4122 | + this.shapes[i].localShapeCollection.releaseShapes(); | |
| 4123 | + this.shapes[i].shape._mdf = true; | |
| 4124 | + this.shapes[i].shape.paths = this.shapes[i].localShapeCollection; | |
| 4125 | + if (this._mdf) this.shapes[i].pathsData.length = 0; | |
| 4126 | + } | |
| 4127 | + else if (!(e === 1 && s === 0 || e === 0 && s === 1)) { | |
| 4128 | + var segments = []; | |
| 4129 | + var shapeData; | |
| 4130 | + var localShapeCollection; | |
| 4131 | + for (i = 0; i < len; i += 1) { | |
| 4132 | + shapeData = this.shapes[i]; | |
| 4133 | + if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) shapeData.shape.paths = shapeData.localShapeCollection; | |
| 4134 | + else { | |
| 4135 | + shapePaths = shapeData.shape.paths; | |
| 4136 | + jLen = shapePaths._length; | |
| 4137 | + totalShapeLength = 0; | |
| 4138 | + if (!shapeData.shape._mdf && shapeData.pathsData.length) totalShapeLength = shapeData.totalShapeLength; | |
| 4139 | + else { | |
| 4140 | + pathsData = this.releasePathsData(shapeData.pathsData); | |
| 4141 | + for (j = 0; j < jLen; j += 1) { | |
| 4142 | + pathData = bez.getSegmentsLength(shapePaths.shapes[j]); | |
| 4143 | + pathsData.push(pathData); | |
| 4144 | + totalShapeLength += pathData.totalLength; | |
| 4145 | + } | |
| 4146 | + shapeData.totalShapeLength = totalShapeLength; | |
| 4147 | + shapeData.pathsData = pathsData; | |
| 4148 | + } | |
| 4149 | + totalModifierLength += totalShapeLength; | |
| 4150 | + shapeData.shape._mdf = true; | |
| 4151 | + } | |
| 4152 | + } | |
| 4153 | + var shapeS = s; | |
| 4154 | + var shapeE = e; | |
| 4155 | + var addedLength = 0; | |
| 4156 | + var edges; | |
| 4157 | + for (i = len - 1; i >= 0; i -= 1) { | |
| 4158 | + shapeData = this.shapes[i]; | |
| 4159 | + if (shapeData.shape._mdf) { | |
| 4160 | + localShapeCollection = shapeData.localShapeCollection; | |
| 4161 | + localShapeCollection.releaseShapes(); | |
| 4162 | + if (this.m === 2 && len > 1) { | |
| 4163 | + edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength); | |
| 4164 | + addedLength += shapeData.totalShapeLength; | |
| 4165 | + } else edges = [[shapeS, shapeE]]; | |
| 4166 | + jLen = edges.length; | |
| 4167 | + for (j = 0; j < jLen; j += 1) { | |
| 4168 | + shapeS = edges[j][0]; | |
| 4169 | + shapeE = edges[j][1]; | |
| 4170 | + segments.length = 0; | |
| 4171 | + if (shapeE <= 1) segments.push({ | |
| 4172 | + s: shapeData.totalShapeLength * shapeS, | |
| 4173 | + e: shapeData.totalShapeLength * shapeE | |
| 4174 | + }); | |
| 4175 | + else if (shapeS >= 1) segments.push({ | |
| 4176 | + s: shapeData.totalShapeLength * (shapeS - 1), | |
| 4177 | + e: shapeData.totalShapeLength * (shapeE - 1) | |
| 4178 | + }); | |
| 4179 | + else { | |
| 4180 | + segments.push({ | |
| 4181 | + s: shapeData.totalShapeLength * shapeS, | |
| 4182 | + e: shapeData.totalShapeLength | |
| 4183 | + }); | |
| 4184 | + segments.push({ | |
| 4185 | + s: 0, | |
| 4186 | + e: shapeData.totalShapeLength * (shapeE - 1) | |
| 4187 | + }); | |
| 4188 | + } | |
| 4189 | + var newShapesData = this.addShapes(shapeData, segments[0]); | |
| 4190 | + if (segments[0].s !== segments[0].e) { | |
| 4191 | + if (segments.length > 1) if (shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1].c) { | |
| 4192 | + var lastShape = newShapesData.pop(); | |
| 4193 | + this.addPaths(newShapesData, localShapeCollection); | |
| 4194 | + newShapesData = this.addShapes(shapeData, segments[1], lastShape); | |
| 4195 | + } else { | |
| 4196 | + this.addPaths(newShapesData, localShapeCollection); | |
| 4197 | + newShapesData = this.addShapes(shapeData, segments[1]); | |
| 4198 | + } | |
| 4199 | + this.addPaths(newShapesData, localShapeCollection); | |
| 4200 | + } | |
| 4201 | + } | |
| 4202 | + shapeData.shape.paths = localShapeCollection; | |
| 4203 | + } | |
| 4204 | + } | |
| 4205 | + } else if (this._mdf) for (i = 0; i < len; i += 1) { | |
| 4206 | + this.shapes[i].pathsData.length = 0; | |
| 4207 | + this.shapes[i].shape._mdf = true; | |
| 4208 | + } | |
| 4209 | + }; | |
| 4210 | + TrimModifier.prototype.addPaths = function(newPaths, localShapeCollection) { | |
| 4211 | + var i; | |
| 4212 | + var len = newPaths.length; | |
| 4213 | + for (i = 0; i < len; i += 1) localShapeCollection.addShape(newPaths[i]); | |
| 4214 | + }; | |
| 4215 | + TrimModifier.prototype.addSegment = function(pt1, pt2, pt3, pt4, shapePath, pos, newShape) { | |
| 4216 | + shapePath.setXYAt(pt2[0], pt2[1], "o", pos); | |
| 4217 | + shapePath.setXYAt(pt3[0], pt3[1], "i", pos + 1); | |
| 4218 | + if (newShape) shapePath.setXYAt(pt1[0], pt1[1], "v", pos); | |
| 4219 | + shapePath.setXYAt(pt4[0], pt4[1], "v", pos + 1); | |
| 4220 | + }; | |
| 4221 | + TrimModifier.prototype.addSegmentFromArray = function(points, shapePath, pos, newShape) { | |
| 4222 | + shapePath.setXYAt(points[1], points[5], "o", pos); | |
| 4223 | + shapePath.setXYAt(points[2], points[6], "i", pos + 1); | |
| 4224 | + if (newShape) shapePath.setXYAt(points[0], points[4], "v", pos); | |
| 4225 | + shapePath.setXYAt(points[3], points[7], "v", pos + 1); | |
| 4226 | + }; | |
| 4227 | + TrimModifier.prototype.addShapes = function(shapeData, shapeSegment, shapePath) { | |
| 4228 | + var pathsData = shapeData.pathsData; | |
| 4229 | + var shapePaths = shapeData.shape.paths.shapes; | |
| 4230 | + var i; | |
| 4231 | + var len = shapeData.shape.paths._length; | |
| 4232 | + var j; | |
| 4233 | + var jLen; | |
| 4234 | + var addedLength = 0; | |
| 4235 | + var currentLengthData; | |
| 4236 | + var segmentCount; | |
| 4237 | + var lengths; | |
| 4238 | + var segment; | |
| 4239 | + var shapes = []; | |
| 4240 | + var initPos; | |
| 4241 | + var newShape = true; | |
| 4242 | + if (!shapePath) { | |
| 4243 | + shapePath = shapePool.newElement(); | |
| 4244 | + segmentCount = 0; | |
| 4245 | + initPos = 0; | |
| 4246 | + } else { | |
| 4247 | + segmentCount = shapePath._length; | |
| 4248 | + initPos = shapePath._length; | |
| 4249 | + } | |
| 4250 | + shapes.push(shapePath); | |
| 4251 | + for (i = 0; i < len; i += 1) { | |
| 4252 | + lengths = pathsData[i].lengths; | |
| 4253 | + shapePath.c = shapePaths[i].c; | |
| 4254 | + jLen = shapePaths[i].c ? lengths.length : lengths.length + 1; | |
| 4255 | + for (j = 1; j < jLen; j += 1) { | |
| 4256 | + currentLengthData = lengths[j - 1]; | |
| 4257 | + if (addedLength + currentLengthData.addedLength < shapeSegment.s) { | |
| 4258 | + addedLength += currentLengthData.addedLength; | |
| 4259 | + shapePath.c = false; | |
| 4260 | + } else if (addedLength > shapeSegment.e) { | |
| 4261 | + shapePath.c = false; | |
| 4262 | + break; | |
| 4263 | + } else { | |
| 4264 | + if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) { | |
| 4265 | + this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape); | |
| 4266 | + newShape = false; | |
| 4267 | + } else { | |
| 4268 | + 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]); | |
| 4269 | + this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); | |
| 4270 | + newShape = false; | |
| 4271 | + shapePath.c = false; | |
| 4272 | + } | |
| 4273 | + addedLength += currentLengthData.addedLength; | |
| 4274 | + segmentCount += 1; | |
| 4275 | + } | |
| 4276 | + } | |
| 4277 | + if (shapePaths[i].c && lengths.length) { | |
| 4278 | + currentLengthData = lengths[j - 1]; | |
| 4279 | + if (addedLength <= shapeSegment.e) { | |
| 4280 | + var segmentLength = lengths[j - 1].addedLength; | |
| 4281 | + if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) { | |
| 4282 | + this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape); | |
| 4283 | + newShape = false; | |
| 4284 | + } else { | |
| 4285 | + 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]); | |
| 4286 | + this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); | |
| 4287 | + newShape = false; | |
| 4288 | + shapePath.c = false; | |
| 4289 | + } | |
| 4290 | + } else shapePath.c = false; | |
| 4291 | + addedLength += currentLengthData.addedLength; | |
| 4292 | + segmentCount += 1; | |
| 4293 | + } | |
| 4294 | + if (shapePath._length) { | |
| 4295 | + shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], "i", initPos); | |
| 4296 | + shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], "o", shapePath._length - 1); | |
| 4297 | + } | |
| 4298 | + if (addedLength > shapeSegment.e) break; | |
| 4299 | + if (i < len - 1) { | |
| 4300 | + shapePath = shapePool.newElement(); | |
| 4301 | + newShape = true; | |
| 4302 | + shapes.push(shapePath); | |
| 4303 | + segmentCount = 0; | |
| 4304 | + } | |
| 4305 | + } | |
| 4306 | + return shapes; | |
| 4307 | + }; | |
| 4308 | + function PuckerAndBloatModifier() {} | |
| 4309 | + extendPrototype([ShapeModifier], PuckerAndBloatModifier); | |
| 4310 | + PuckerAndBloatModifier.prototype.initModifierProperties = function(elem, data) { | |
| 4311 | + this.getValue = this.processKeys; | |
| 4312 | + this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this); | |
| 4313 | + this._isAnimated = !!this.amount.effectsSequence.length; | |
| 4314 | + }; | |
| 4315 | + PuckerAndBloatModifier.prototype.processPath = function(path, amount) { | |
| 4316 | + var percent = amount / 100; | |
| 4317 | + var centerPoint = [0, 0]; | |
| 4318 | + var pathLength = path._length; | |
| 4319 | + var i = 0; | |
| 4320 | + for (i = 0; i < pathLength; i += 1) { | |
| 4321 | + centerPoint[0] += path.v[i][0]; | |
| 4322 | + centerPoint[1] += path.v[i][1]; | |
| 4323 | + } | |
| 4324 | + centerPoint[0] /= pathLength; | |
| 4325 | + centerPoint[1] /= pathLength; | |
| 4326 | + var clonedPath = shapePool.newElement(); | |
| 4327 | + clonedPath.c = path.c; | |
| 4328 | + var vX; | |
| 4329 | + var vY; | |
| 4330 | + var oX; | |
| 4331 | + var oY; | |
| 4332 | + var iX; | |
| 4333 | + var iY; | |
| 4334 | + for (i = 0; i < pathLength; i += 1) { | |
| 4335 | + vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent; | |
| 4336 | + vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent; | |
| 4337 | + oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent; | |
| 4338 | + oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent; | |
| 4339 | + iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent; | |
| 4340 | + iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent; | |
| 4341 | + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i); | |
| 4342 | + } | |
| 4343 | + return clonedPath; | |
| 4344 | + }; | |
| 4345 | + PuckerAndBloatModifier.prototype.processShapes = function(_isFirstFrame) { | |
| 4346 | + var shapePaths; | |
| 4347 | + var i; | |
| 4348 | + var len = this.shapes.length; | |
| 4349 | + var j; | |
| 4350 | + var jLen; | |
| 4351 | + var amount = this.amount.v; | |
| 4352 | + if (amount !== 0) { | |
| 4353 | + var shapeData; | |
| 4354 | + var localShapeCollection; | |
| 4355 | + for (i = 0; i < len; i += 1) { | |
| 4356 | + shapeData = this.shapes[i]; | |
| 4357 | + localShapeCollection = shapeData.localShapeCollection; | |
| 4358 | + if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { | |
| 4359 | + localShapeCollection.releaseShapes(); | |
| 4360 | + shapeData.shape._mdf = true; | |
| 4361 | + shapePaths = shapeData.shape.paths.shapes; | |
| 4362 | + jLen = shapeData.shape.paths._length; | |
| 4363 | + for (j = 0; j < jLen; j += 1) localShapeCollection.addShape(this.processPath(shapePaths[j], amount)); | |
| 4364 | + } | |
| 4365 | + shapeData.shape.paths = shapeData.localShapeCollection; | |
| 4366 | + } | |
| 4367 | + } | |
| 4368 | + if (!this.dynamicProperties.length) this._mdf = false; | |
| 4369 | + }; | |
| 4370 | + var TransformPropertyFactory = function() { | |
| 4371 | + var defaultVector = [0, 0]; | |
| 4372 | + function applyToMatrix(mat) { | |
| 4373 | + var _mdf = this._mdf; | |
| 4374 | + this.iterateDynamicProperties(); | |
| 4375 | + this._mdf = this._mdf || _mdf; | |
| 4376 | + if (this.a) mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); | |
| 4377 | + if (this.s) mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]); | |
| 4378 | + if (this.sk) mat.skewFromAxis(-this.sk.v, this.sa.v); | |
| 4379 | + if (this.r) mat.rotate(-this.r.v); | |
| 4380 | + else mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); | |
| 4381 | + if (this.data.p.s) if (this.data.p.z) mat.translate(this.px.v, this.py.v, -this.pz.v); | |
| 4382 | + else mat.translate(this.px.v, this.py.v, 0); | |
| 4383 | + else mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); | |
| 4384 | + } | |
| 4385 | + function processKeys(forceRender) { | |
| 4386 | + if (this.elem.globalData.frameId === this.frameId) return; | |
| 4387 | + if (this._isDirty) { | |
| 4388 | + this.precalculateMatrix(); | |
| 4389 | + this._isDirty = false; | |
| 4390 | + } | |
| 4391 | + this.iterateDynamicProperties(); | |
| 4392 | + if (this._mdf || forceRender) { | |
| 4393 | + var frameRate; | |
| 4394 | + this.v.cloneFromProps(this.pre.props); | |
| 4395 | + if (this.appliedTransformations < 1) this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); | |
| 4396 | + if (this.appliedTransformations < 2) this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]); | |
| 4397 | + if (this.sk && this.appliedTransformations < 3) this.v.skewFromAxis(-this.sk.v, this.sa.v); | |
| 4398 | + if (this.r && this.appliedTransformations < 4) this.v.rotate(-this.r.v); | |
| 4399 | + else if (!this.r && this.appliedTransformations < 4) this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); | |
| 4400 | + if (this.autoOriented) { | |
| 4401 | + var v1; | |
| 4402 | + var v2; | |
| 4403 | + frameRate = this.elem.globalData.frameRate; | |
| 4404 | + if (this.p && this.p.keyframes && this.p.getValueAtTime) if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) { | |
| 4405 | + v1 = this.p.getValueAtTime((this.p.keyframes[0].t + .01) / frameRate, 0); | |
| 4406 | + v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0); | |
| 4407 | + } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) { | |
| 4408 | + v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0); | |
| 4409 | + v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - .05) / frameRate, 0); | |
| 4410 | + } else { | |
| 4411 | + v1 = this.p.pv; | |
| 4412 | + v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - .01) / frameRate, this.p.offsetTime); | |
| 4413 | + } | |
| 4414 | + else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) { | |
| 4415 | + v1 = []; | |
| 4416 | + v2 = []; | |
| 4417 | + var px = this.px; | |
| 4418 | + var py = this.py; | |
| 4419 | + if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) { | |
| 4420 | + v1[0] = px.getValueAtTime((px.keyframes[0].t + .01) / frameRate, 0); | |
| 4421 | + v1[1] = py.getValueAtTime((py.keyframes[0].t + .01) / frameRate, 0); | |
| 4422 | + v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0); | |
| 4423 | + v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0); | |
| 4424 | + } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) { | |
| 4425 | + v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0); | |
| 4426 | + v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0); | |
| 4427 | + v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - .01) / frameRate, 0); | |
| 4428 | + v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - .01) / frameRate, 0); | |
| 4429 | + } else { | |
| 4430 | + v1 = [px.pv, py.pv]; | |
| 4431 | + v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - .01) / frameRate, px.offsetTime); | |
| 4432 | + v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - .01) / frameRate, py.offsetTime); | |
| 4433 | + } | |
| 4434 | + } else { | |
| 4435 | + v2 = defaultVector; | |
| 4436 | + v1 = v2; | |
| 4437 | + } | |
| 4438 | + this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0])); | |
| 4439 | + } | |
| 4440 | + if (this.data.p && this.data.p.s) if (this.data.p.z) this.v.translate(this.px.v, this.py.v, -this.pz.v); | |
| 4441 | + else this.v.translate(this.px.v, this.py.v, 0); | |
| 4442 | + else this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); | |
| 4443 | + } | |
| 4444 | + this.frameId = this.elem.globalData.frameId; | |
| 4445 | + } | |
| 4446 | + function precalculateMatrix() { | |
| 4447 | + this.appliedTransformations = 0; | |
| 4448 | + this.pre.reset(); | |
| 4449 | + if (!this.a.effectsSequence.length) { | |
| 4450 | + this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); | |
| 4451 | + this.appliedTransformations = 1; | |
| 4452 | + } else return; | |
| 4453 | + if (!this.s.effectsSequence.length) { | |
| 4454 | + this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]); | |
| 4455 | + this.appliedTransformations = 2; | |
| 4456 | + } else return; | |
| 4457 | + if (this.sk) if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) { | |
| 4458 | + this.pre.skewFromAxis(-this.sk.v, this.sa.v); | |
| 4459 | + this.appliedTransformations = 3; | |
| 4460 | + } else return; | |
| 4461 | + if (this.r) { | |
| 4462 | + if (!this.r.effectsSequence.length) { | |
| 4463 | + this.pre.rotate(-this.r.v); | |
| 4464 | + this.appliedTransformations = 4; | |
| 4465 | + } | |
| 4466 | + } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) { | |
| 4467 | + this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); | |
| 4468 | + this.appliedTransformations = 4; | |
| 4469 | + } | |
| 4470 | + } | |
| 4471 | + function autoOrient() {} | |
| 4472 | + function addDynamicProperty(prop) { | |
| 4473 | + this._addDynamicProperty(prop); | |
| 4474 | + this.elem.addDynamicProperty(prop); | |
| 4475 | + this._isDirty = true; | |
| 4476 | + } | |
| 4477 | + function TransformProperty(elem, data, container) { | |
| 4478 | + this.elem = elem; | |
| 4479 | + this.frameId = -1; | |
| 4480 | + this.propType = "transform"; | |
| 4481 | + this.data = data; | |
| 4482 | + this.v = new Matrix(); | |
| 4483 | + this.pre = new Matrix(); | |
| 4484 | + this.appliedTransformations = 0; | |
| 4485 | + this.initDynamicPropertyContainer(container || elem); | |
| 4486 | + if (data.p && data.p.s) { | |
| 4487 | + this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this); | |
| 4488 | + this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this); | |
| 4489 | + if (data.p.z) this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this); | |
| 4490 | + } else this.p = PropertyFactory.getProp(elem, data.p || { k: [ | |
| 4491 | + 0, | |
| 4492 | + 0, | |
| 4493 | + 0 | |
| 4494 | + ] }, 1, 0, this); | |
| 4495 | + if (data.rx) { | |
| 4496 | + this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this); | |
| 4497 | + this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this); | |
| 4498 | + this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this); | |
| 4499 | + if (data.or.k[0].ti) { | |
| 4500 | + var i; | |
| 4501 | + var len = data.or.k.length; | |
| 4502 | + for (i = 0; i < len; i += 1) { | |
| 4503 | + data.or.k[i].to = null; | |
| 4504 | + data.or.k[i].ti = null; | |
| 4505 | + } | |
| 4506 | + } | |
| 4507 | + this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); | |
| 4508 | + this.or.sh = true; | |
| 4509 | + } else this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this); | |
| 4510 | + if (data.sk) { | |
| 4511 | + this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this); | |
| 4512 | + this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this); | |
| 4513 | + } | |
| 4514 | + this.a = PropertyFactory.getProp(elem, data.a || { k: [ | |
| 4515 | + 0, | |
| 4516 | + 0, | |
| 4517 | + 0 | |
| 4518 | + ] }, 1, 0, this); | |
| 4519 | + this.s = PropertyFactory.getProp(elem, data.s || { k: [ | |
| 4520 | + 100, | |
| 4521 | + 100, | |
| 4522 | + 100 | |
| 4523 | + ] }, 1, .01, this); | |
| 4524 | + if (data.o) this.o = PropertyFactory.getProp(elem, data.o, 0, .01, elem); | |
| 4525 | + else this.o = { | |
| 4526 | + _mdf: false, | |
| 4527 | + v: 1 | |
| 4528 | + }; | |
| 4529 | + this._isDirty = true; | |
| 4530 | + if (!this.dynamicProperties.length) this.getValue(true); | |
| 4531 | + } | |
| 4532 | + TransformProperty.prototype = { | |
| 4533 | + applyToMatrix, | |
| 4534 | + getValue: processKeys, | |
| 4535 | + precalculateMatrix, | |
| 4536 | + autoOrient | |
| 4537 | + }; | |
| 4538 | + extendPrototype([DynamicPropertyContainer], TransformProperty); | |
| 4539 | + TransformProperty.prototype.addDynamicProperty = addDynamicProperty; | |
| 4540 | + TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty; | |
| 4541 | + function getTransformProperty(elem, data, container) { | |
| 4542 | + return new TransformProperty(elem, data, container); | |
| 4543 | + } | |
| 4544 | + return { getTransformProperty }; | |
| 4545 | + }(); | |
| 4546 | + function RepeaterModifier() {} | |
| 4547 | + extendPrototype([ShapeModifier], RepeaterModifier); | |
| 4548 | + RepeaterModifier.prototype.initModifierProperties = function(elem, data) { | |
| 4549 | + this.getValue = this.processKeys; | |
| 4550 | + this.c = PropertyFactory.getProp(elem, data.c, 0, null, this); | |
| 4551 | + this.o = PropertyFactory.getProp(elem, data.o, 0, null, this); | |
| 4552 | + this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this); | |
| 4553 | + this.so = PropertyFactory.getProp(elem, data.tr.so, 0, .01, this); | |
| 4554 | + this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, .01, this); | |
| 4555 | + this.data = data; | |
| 4556 | + if (!this.dynamicProperties.length) this.getValue(true); | |
| 4557 | + this._isAnimated = !!this.dynamicProperties.length; | |
| 4558 | + this.pMatrix = new Matrix(); | |
| 4559 | + this.rMatrix = new Matrix(); | |
| 4560 | + this.sMatrix = new Matrix(); | |
| 4561 | + this.tMatrix = new Matrix(); | |
| 4562 | + this.matrix = new Matrix(); | |
| 4563 | + }; | |
| 4564 | + RepeaterModifier.prototype.applyTransforms = function(pMatrix, rMatrix, sMatrix, transform, perc, inv) { | |
| 4565 | + var dir = inv ? -1 : 1; | |
| 4566 | + var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc); | |
| 4567 | + var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc); | |
| 4568 | + pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]); | |
| 4569 | + rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]); | |
| 4570 | + rMatrix.rotate(-transform.r.v * dir * perc); | |
| 4571 | + rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]); | |
| 4572 | + sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]); | |
| 4573 | + sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY); | |
| 4574 | + sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]); | |
| 4575 | + }; | |
| 4576 | + RepeaterModifier.prototype.init = function(elem, arr, pos, elemsData) { | |
| 4577 | + this.elem = elem; | |
| 4578 | + this.arr = arr; | |
| 4579 | + this.pos = pos; | |
| 4580 | + this.elemsData = elemsData; | |
| 4581 | + this._currentCopies = 0; | |
| 4582 | + this._elements = []; | |
| 4583 | + this._groups = []; | |
| 4584 | + this.frameId = -1; | |
| 4585 | + this.initDynamicPropertyContainer(elem); | |
| 4586 | + this.initModifierProperties(elem, arr[pos]); | |
| 4587 | + while (pos > 0) { | |
| 4588 | + pos -= 1; | |
| 4589 | + this._elements.unshift(arr[pos]); | |
| 4590 | + } | |
| 4591 | + if (this.dynamicProperties.length) this.k = true; | |
| 4592 | + else this.getValue(true); | |
| 4593 | + }; | |
| 4594 | + RepeaterModifier.prototype.resetElements = function(elements) { | |
| 4595 | + var i; | |
| 4596 | + var len = elements.length; | |
| 4597 | + for (i = 0; i < len; i += 1) { | |
| 4598 | + elements[i]._processed = false; | |
| 4599 | + if (elements[i].ty === "gr") this.resetElements(elements[i].it); | |
| 4600 | + } | |
| 4601 | + }; | |
| 4602 | + RepeaterModifier.prototype.cloneElements = function(elements) { | |
| 4603 | + var newElements = JSON.parse(JSON.stringify(elements)); | |
| 4604 | + this.resetElements(newElements); | |
| 4605 | + return newElements; | |
| 4606 | + }; | |
| 4607 | + RepeaterModifier.prototype.changeGroupRender = function(elements, renderFlag) { | |
| 4608 | + var i; | |
| 4609 | + var len = elements.length; | |
| 4610 | + for (i = 0; i < len; i += 1) { | |
| 4611 | + elements[i]._render = renderFlag; | |
| 4612 | + if (elements[i].ty === "gr") this.changeGroupRender(elements[i].it, renderFlag); | |
| 4613 | + } | |
| 4614 | + }; | |
| 4615 | + RepeaterModifier.prototype.processShapes = function(_isFirstFrame) { | |
| 4616 | + var items; | |
| 4617 | + var itemsTransform; | |
| 4618 | + var i; | |
| 4619 | + var dir; | |
| 4620 | + var cont; | |
| 4621 | + var hasReloaded = false; | |
| 4622 | + if (this._mdf || _isFirstFrame) { | |
| 4623 | + var copies = Math.ceil(this.c.v); | |
| 4624 | + if (this._groups.length < copies) { | |
| 4625 | + while (this._groups.length < copies) { | |
| 4626 | + var group = { | |
| 4627 | + it: this.cloneElements(this._elements), | |
| 4628 | + ty: "gr" | |
| 4629 | + }; | |
| 4630 | + group.it.push({ | |
| 4631 | + a: { | |
| 4632 | + a: 0, | |
| 4633 | + ix: 1, | |
| 4634 | + k: [0, 0] | |
| 4635 | + }, | |
| 4636 | + nm: "Transform", | |
| 4637 | + o: { | |
| 4638 | + a: 0, | |
| 4639 | + ix: 7, | |
| 4640 | + k: 100 | |
| 4641 | + }, | |
| 4642 | + p: { | |
| 4643 | + a: 0, | |
| 4644 | + ix: 2, | |
| 4645 | + k: [0, 0] | |
| 4646 | + }, | |
| 4647 | + r: { | |
| 4648 | + a: 1, | |
| 4649 | + ix: 6, | |
| 4650 | + k: [{ | |
| 4651 | + s: 0, | |
| 4652 | + e: 0, | |
| 4653 | + t: 0 | |
| 4654 | + }, { | |
| 4655 | + s: 0, | |
| 4656 | + e: 0, | |
| 4657 | + t: 1 | |
| 4658 | + }] | |
| 4659 | + }, | |
| 4660 | + s: { | |
| 4661 | + a: 0, | |
| 4662 | + ix: 3, | |
| 4663 | + k: [100, 100] | |
| 4664 | + }, | |
| 4665 | + sa: { | |
| 4666 | + a: 0, | |
| 4667 | + ix: 5, | |
| 4668 | + k: 0 | |
| 4669 | + }, | |
| 4670 | + sk: { | |
| 4671 | + a: 0, | |
| 4672 | + ix: 4, | |
| 4673 | + k: 0 | |
| 4674 | + }, | |
| 4675 | + ty: "tr" | |
| 4676 | + }); | |
| 4677 | + this.arr.splice(0, 0, group); | |
| 4678 | + this._groups.splice(0, 0, group); | |
| 4679 | + this._currentCopies += 1; | |
| 4680 | + } | |
| 4681 | + this.elem.reloadShapes(); | |
| 4682 | + hasReloaded = true; | |
| 4683 | + } | |
| 4684 | + cont = 0; | |
| 4685 | + var renderFlag; | |
| 4686 | + for (i = 0; i <= this._groups.length - 1; i += 1) { | |
| 4687 | + renderFlag = cont < copies; | |
| 4688 | + this._groups[i]._render = renderFlag; | |
| 4689 | + this.changeGroupRender(this._groups[i].it, renderFlag); | |
| 4690 | + if (!renderFlag) { | |
| 4691 | + var elems = this.elemsData[i].it; | |
| 4692 | + var transformData = elems[elems.length - 1]; | |
| 4693 | + if (transformData.transform.op.v !== 0) { | |
| 4694 | + transformData.transform.op._mdf = true; | |
| 4695 | + transformData.transform.op.v = 0; | |
| 4696 | + } else transformData.transform.op._mdf = false; | |
| 4697 | + } | |
| 4698 | + cont += 1; | |
| 4699 | + } | |
| 4700 | + this._currentCopies = copies; | |
| 4701 | + var offset = this.o.v; | |
| 4702 | + var offsetModulo = offset % 1; | |
| 4703 | + var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset); | |
| 4704 | + var pProps = this.pMatrix.props; | |
| 4705 | + var rProps = this.rMatrix.props; | |
| 4706 | + var sProps = this.sMatrix.props; | |
| 4707 | + this.pMatrix.reset(); | |
| 4708 | + this.rMatrix.reset(); | |
| 4709 | + this.sMatrix.reset(); | |
| 4710 | + this.tMatrix.reset(); | |
| 4711 | + this.matrix.reset(); | |
| 4712 | + var iteration = 0; | |
| 4713 | + if (offset > 0) { | |
| 4714 | + while (iteration < roundOffset) { | |
| 4715 | + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); | |
| 4716 | + iteration += 1; | |
| 4717 | + } | |
| 4718 | + if (offsetModulo) { | |
| 4719 | + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false); | |
| 4720 | + iteration += offsetModulo; | |
| 4721 | + } | |
| 4722 | + } else if (offset < 0) { | |
| 4723 | + while (iteration > roundOffset) { | |
| 4724 | + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true); | |
| 4725 | + iteration -= 1; | |
| 4726 | + } | |
| 4727 | + if (offsetModulo) { | |
| 4728 | + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true); | |
| 4729 | + iteration -= offsetModulo; | |
| 4730 | + } | |
| 4731 | + } | |
| 4732 | + i = this.data.m === 1 ? 0 : this._currentCopies - 1; | |
| 4733 | + dir = this.data.m === 1 ? 1 : -1; | |
| 4734 | + cont = this._currentCopies; | |
| 4735 | + var j; | |
| 4736 | + var jLen; | |
| 4737 | + while (cont) { | |
| 4738 | + items = this.elemsData[i].it; | |
| 4739 | + itemsTransform = items[items.length - 1].transform.mProps.v.props; | |
| 4740 | + jLen = itemsTransform.length; | |
| 4741 | + items[items.length - 1].transform.mProps._mdf = true; | |
| 4742 | + items[items.length - 1].transform.op._mdf = true; | |
| 4743 | + items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1)); | |
| 4744 | + if (iteration !== 0) { | |
| 4745 | + if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); | |
| 4746 | + 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]); | |
| 4747 | + 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]); | |
| 4748 | + 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]); | |
| 4749 | + for (j = 0; j < jLen; j += 1) itemsTransform[j] = this.matrix.props[j]; | |
| 4750 | + this.matrix.reset(); | |
| 4751 | + } else { | |
| 4752 | + this.matrix.reset(); | |
| 4753 | + for (j = 0; j < jLen; j += 1) itemsTransform[j] = this.matrix.props[j]; | |
| 4754 | + } | |
| 4755 | + iteration += 1; | |
| 4756 | + cont -= 1; | |
| 4757 | + i += dir; | |
| 4758 | + } | |
| 4759 | + } else { | |
| 4760 | + cont = this._currentCopies; | |
| 4761 | + i = 0; | |
| 4762 | + dir = 1; | |
| 4763 | + while (cont) { | |
| 4764 | + items = this.elemsData[i].it; | |
| 4765 | + itemsTransform = items[items.length - 1].transform.mProps.v.props; | |
| 4766 | + items[items.length - 1].transform.mProps._mdf = false; | |
| 4767 | + items[items.length - 1].transform.op._mdf = false; | |
| 4768 | + cont -= 1; | |
| 4769 | + i += dir; | |
| 4770 | + } | |
| 4771 | + } | |
| 4772 | + return hasReloaded; | |
| 4773 | + }; | |
| 4774 | + RepeaterModifier.prototype.addShape = function() {}; | |
| 4775 | + function RoundCornersModifier() {} | |
| 4776 | + extendPrototype([ShapeModifier], RoundCornersModifier); | |
| 4777 | + RoundCornersModifier.prototype.initModifierProperties = function(elem, data) { | |
| 4778 | + this.getValue = this.processKeys; | |
| 4779 | + this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this); | |
| 4780 | + this._isAnimated = !!this.rd.effectsSequence.length; | |
| 4781 | + }; | |
| 4782 | + RoundCornersModifier.prototype.processPath = function(path, round) { | |
| 4783 | + var clonedPath = shapePool.newElement(); | |
| 4784 | + clonedPath.c = path.c; | |
| 4785 | + var i; | |
| 4786 | + var len = path._length; | |
| 4787 | + var currentV; | |
| 4788 | + var currentI; | |
| 4789 | + var currentO; | |
| 4790 | + var closerV; | |
| 4791 | + var distance; | |
| 4792 | + var newPosPerc; | |
| 4793 | + var index = 0; | |
| 4794 | + var vX; | |
| 4795 | + var vY; | |
| 4796 | + var oX; | |
| 4797 | + var oY; | |
| 4798 | + var iX; | |
| 4799 | + var iY; | |
| 4800 | + for (i = 0; i < len; i += 1) { | |
| 4801 | + currentV = path.v[i]; | |
| 4802 | + currentO = path.o[i]; | |
| 4803 | + currentI = path.i[i]; | |
| 4804 | + if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) if ((i === 0 || i === len - 1) && !path.c) { | |
| 4805 | + clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index); | |
| 4806 | + index += 1; | |
| 4807 | + } else { | |
| 4808 | + if (i === 0) closerV = path.v[len - 1]; | |
| 4809 | + else closerV = path.v[i - 1]; | |
| 4810 | + distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); | |
| 4811 | + newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; | |
| 4812 | + iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; | |
| 4813 | + vX = iX; | |
| 4814 | + iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc; | |
| 4815 | + vY = iY; | |
| 4816 | + oX = vX - (vX - currentV[0]) * roundCorner; | |
| 4817 | + oY = vY - (vY - currentV[1]) * roundCorner; | |
| 4818 | + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index); | |
| 4819 | + index += 1; | |
| 4820 | + if (i === len - 1) closerV = path.v[0]; | |
| 4821 | + else closerV = path.v[i + 1]; | |
| 4822 | + distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); | |
| 4823 | + newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; | |
| 4824 | + oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; | |
| 4825 | + vX = oX; | |
| 4826 | + oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc; | |
| 4827 | + vY = oY; | |
| 4828 | + iX = vX - (vX - currentV[0]) * roundCorner; | |
| 4829 | + iY = vY - (vY - currentV[1]) * roundCorner; | |
| 4830 | + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index); | |
| 4831 | + index += 1; | |
| 4832 | + } | |
| 4833 | + else { | |
| 4834 | + 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); | |
| 4835 | + index += 1; | |
| 4836 | + } | |
| 4837 | + } | |
| 4838 | + return clonedPath; | |
| 4839 | + }; | |
| 4840 | + RoundCornersModifier.prototype.processShapes = function(_isFirstFrame) { | |
| 4841 | + var shapePaths; | |
| 4842 | + var i; | |
| 4843 | + var len = this.shapes.length; | |
| 4844 | + var j; | |
| 4845 | + var jLen; | |
| 4846 | + var rd = this.rd.v; | |
| 4847 | + if (rd !== 0) { | |
| 4848 | + var shapeData; | |
| 4849 | + var localShapeCollection; | |
| 4850 | + for (i = 0; i < len; i += 1) { | |
| 4851 | + shapeData = this.shapes[i]; | |
| 4852 | + localShapeCollection = shapeData.localShapeCollection; | |
| 4853 | + if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { | |
| 4854 | + localShapeCollection.releaseShapes(); | |
| 4855 | + shapeData.shape._mdf = true; | |
| 4856 | + shapePaths = shapeData.shape.paths.shapes; | |
| 4857 | + jLen = shapeData.shape.paths._length; | |
| 4858 | + for (j = 0; j < jLen; j += 1) localShapeCollection.addShape(this.processPath(shapePaths[j], rd)); | |
| 4859 | + } | |
| 4860 | + shapeData.shape.paths = shapeData.localShapeCollection; | |
| 4861 | + } | |
| 4862 | + } | |
| 4863 | + if (!this.dynamicProperties.length) this._mdf = false; | |
| 4864 | + }; | |
| 4865 | + function floatEqual(a, b) { | |
| 4866 | + return Math.abs(a - b) * 1e5 <= Math.min(Math.abs(a), Math.abs(b)); | |
| 4867 | + } | |
| 4868 | + function floatZero(f) { | |
| 4869 | + return Math.abs(f) <= 1e-5; | |
| 4870 | + } | |
| 4871 | + function lerp(p0, p1, amount) { | |
| 4872 | + return p0 * (1 - amount) + p1 * amount; | |
| 4873 | + } | |
| 4874 | + function lerpPoint(p0, p1, amount) { | |
| 4875 | + return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)]; | |
| 4876 | + } | |
| 4877 | + function quadRoots(a, b, c) { | |
| 4878 | + if (a === 0) return []; | |
| 4879 | + var s = b * b - 4 * a * c; | |
| 4880 | + if (s < 0) return []; | |
| 4881 | + var singleRoot = -b / (2 * a); | |
| 4882 | + if (s === 0) return [singleRoot]; | |
| 4883 | + var delta = Math.sqrt(s) / (2 * a); | |
| 4884 | + return [singleRoot - delta, singleRoot + delta]; | |
| 4885 | + } | |
| 4886 | + function polynomialCoefficients(p0, p1, p2, p3) { | |
| 4887 | + return [ | |
| 4888 | + -p0 + 3 * p1 - 3 * p2 + p3, | |
| 4889 | + 3 * p0 - 6 * p1 + 3 * p2, | |
| 4890 | + -3 * p0 + 3 * p1, | |
| 4891 | + p0 | |
| 4892 | + ]; | |
| 4893 | + } | |
| 4894 | + function singlePoint(p) { | |
| 4895 | + return new PolynomialBezier(p, p, p, p, false); | |
| 4896 | + } | |
| 4897 | + function PolynomialBezier(p0, p1, p2, p3, linearize) { | |
| 4898 | + if (linearize && pointEqual(p0, p1)) p1 = lerpPoint(p0, p3, 1 / 3); | |
| 4899 | + if (linearize && pointEqual(p2, p3)) p2 = lerpPoint(p0, p3, 2 / 3); | |
| 4900 | + var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]); | |
| 4901 | + var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]); | |
| 4902 | + this.a = [coeffx[0], coeffy[0]]; | |
| 4903 | + this.b = [coeffx[1], coeffy[1]]; | |
| 4904 | + this.c = [coeffx[2], coeffy[2]]; | |
| 4905 | + this.d = [coeffx[3], coeffy[3]]; | |
| 4906 | + this.points = [ | |
| 4907 | + p0, | |
| 4908 | + p1, | |
| 4909 | + p2, | |
| 4910 | + p3 | |
| 4911 | + ]; | |
| 4912 | + } | |
| 4913 | + PolynomialBezier.prototype.point = function(t) { | |
| 4914 | + return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]]; | |
| 4915 | + }; | |
| 4916 | + PolynomialBezier.prototype.derivative = function(t) { | |
| 4917 | + return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]]; | |
| 4918 | + }; | |
| 4919 | + PolynomialBezier.prototype.tangentAngle = function(t) { | |
| 4920 | + var p = this.derivative(t); | |
| 4921 | + return Math.atan2(p[1], p[0]); | |
| 4922 | + }; | |
| 4923 | + PolynomialBezier.prototype.normalAngle = function(t) { | |
| 4924 | + var p = this.derivative(t); | |
| 4925 | + return Math.atan2(p[0], p[1]); | |
| 4926 | + }; | |
| 4927 | + PolynomialBezier.prototype.inflectionPoints = function() { | |
| 4928 | + var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1]; | |
| 4929 | + if (floatZero(denom)) return []; | |
| 4930 | + var tcusp = -.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom; | |
| 4931 | + var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom; | |
| 4932 | + if (square < 0) return []; | |
| 4933 | + var root = Math.sqrt(square); | |
| 4934 | + if (floatZero(root)) { | |
| 4935 | + if (root > 0 && root < 1) return [tcusp]; | |
| 4936 | + return []; | |
| 4937 | + } | |
| 4938 | + return [tcusp - root, tcusp + root].filter(function(r) { | |
| 4939 | + return r > 0 && r < 1; | |
| 4940 | + }); | |
| 4941 | + }; | |
| 4942 | + PolynomialBezier.prototype.split = function(t) { | |
| 4943 | + if (t <= 0) return [singlePoint(this.points[0]), this]; | |
| 4944 | + if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])]; | |
| 4945 | + var p10 = lerpPoint(this.points[0], this.points[1], t); | |
| 4946 | + var p11 = lerpPoint(this.points[1], this.points[2], t); | |
| 4947 | + var p12 = lerpPoint(this.points[2], this.points[3], t); | |
| 4948 | + var p20 = lerpPoint(p10, p11, t); | |
| 4949 | + var p21 = lerpPoint(p11, p12, t); | |
| 4950 | + var p3 = lerpPoint(p20, p21, t); | |
| 4951 | + return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)]; | |
| 4952 | + }; | |
| 4953 | + function extrema(bez, comp) { | |
| 4954 | + var min = bez.points[0][comp]; | |
| 4955 | + var max = bez.points[bez.points.length - 1][comp]; | |
| 4956 | + if (min > max) { | |
| 4957 | + var e = max; | |
| 4958 | + max = min; | |
| 4959 | + min = e; | |
| 4960 | + } | |
| 4961 | + var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]); | |
| 4962 | + for (var i = 0; i < f.length; i += 1) if (f[i] > 0 && f[i] < 1) { | |
| 4963 | + var val = bez.point(f[i])[comp]; | |
| 4964 | + if (val < min) min = val; | |
| 4965 | + else if (val > max) max = val; | |
| 4966 | + } | |
| 4967 | + return { | |
| 4968 | + min, | |
| 4969 | + max | |
| 4970 | + }; | |
| 4971 | + } | |
| 4972 | + PolynomialBezier.prototype.bounds = function() { | |
| 4973 | + return { | |
| 4974 | + x: extrema(this, 0), | |
| 4975 | + y: extrema(this, 1) | |
| 4976 | + }; | |
| 4977 | + }; | |
| 4978 | + PolynomialBezier.prototype.boundingBox = function() { | |
| 4979 | + var bounds = this.bounds(); | |
| 4980 | + return { | |
| 4981 | + left: bounds.x.min, | |
| 4982 | + right: bounds.x.max, | |
| 4983 | + top: bounds.y.min, | |
| 4984 | + bottom: bounds.y.max, | |
| 4985 | + width: bounds.x.max - bounds.x.min, | |
| 4986 | + height: bounds.y.max - bounds.y.min, | |
| 4987 | + cx: (bounds.x.max + bounds.x.min) / 2, | |
| 4988 | + cy: (bounds.y.max + bounds.y.min) / 2 | |
| 4989 | + }; | |
| 4990 | + }; | |
| 4991 | + function intersectData(bez, t1, t2) { | |
| 4992 | + var box = bez.boundingBox(); | |
| 4993 | + return { | |
| 4994 | + cx: box.cx, | |
| 4995 | + cy: box.cy, | |
| 4996 | + width: box.width, | |
| 4997 | + height: box.height, | |
| 4998 | + bez, | |
| 4999 | + t: (t1 + t2) / 2, | |
| 5000 | + t1, | |
| 5001 | + t2 | |
| 5002 | + }; | |
| 5003 | + } | |
| 5004 | + function splitData(data) { | |
| 5005 | + var split = data.bez.split(.5); | |
| 5006 | + return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)]; | |
| 5007 | + } | |
| 5008 | + function boxIntersect(b1, b2) { | |
| 5009 | + return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height; | |
| 5010 | + } | |
| 5011 | + function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) { | |
| 5012 | + if (!boxIntersect(d1, d2)) return; | |
| 5013 | + if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) { | |
| 5014 | + intersections.push([d1.t, d2.t]); | |
| 5015 | + return; | |
| 5016 | + } | |
| 5017 | + var d1s = splitData(d1); | |
| 5018 | + var d2s = splitData(d2); | |
| 5019 | + intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion); | |
| 5020 | + intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion); | |
| 5021 | + intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion); | |
| 5022 | + intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion); | |
| 5023 | + } | |
| 5024 | + PolynomialBezier.prototype.intersections = function(other, tolerance, maxRecursion) { | |
| 5025 | + if (tolerance === void 0) tolerance = 2; | |
| 5026 | + if (maxRecursion === void 0) maxRecursion = 7; | |
| 5027 | + var intersections = []; | |
| 5028 | + intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion); | |
| 5029 | + return intersections; | |
| 5030 | + }; | |
| 5031 | + PolynomialBezier.shapeSegment = function(shapePath, index) { | |
| 5032 | + var nextIndex = (index + 1) % shapePath.length(); | |
| 5033 | + return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true); | |
| 5034 | + }; | |
| 5035 | + PolynomialBezier.shapeSegmentInverted = function(shapePath, index) { | |
| 5036 | + var nextIndex = (index + 1) % shapePath.length(); | |
| 5037 | + return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true); | |
| 5038 | + }; | |
| 5039 | + function crossProduct(a, b) { | |
| 5040 | + return [ | |
| 5041 | + a[1] * b[2] - a[2] * b[1], | |
| 5042 | + a[2] * b[0] - a[0] * b[2], | |
| 5043 | + a[0] * b[1] - a[1] * b[0] | |
| 5044 | + ]; | |
| 5045 | + } | |
| 5046 | + function lineIntersection(start1, end1, start2, end2) { | |
| 5047 | + var v1 = [ | |
| 5048 | + start1[0], | |
| 5049 | + start1[1], | |
| 5050 | + 1 | |
| 5051 | + ]; | |
| 5052 | + var v2 = [ | |
| 5053 | + end1[0], | |
| 5054 | + end1[1], | |
| 5055 | + 1 | |
| 5056 | + ]; | |
| 5057 | + var v3 = [ | |
| 5058 | + start2[0], | |
| 5059 | + start2[1], | |
| 5060 | + 1 | |
| 5061 | + ]; | |
| 5062 | + var v4 = [ | |
| 5063 | + end2[0], | |
| 5064 | + end2[1], | |
| 5065 | + 1 | |
| 5066 | + ]; | |
| 5067 | + var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4)); | |
| 5068 | + if (floatZero(r[2])) return null; | |
| 5069 | + return [r[0] / r[2], r[1] / r[2]]; | |
| 5070 | + } | |
| 5071 | + function polarOffset(p, angle, length) { | |
| 5072 | + return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length]; | |
| 5073 | + } | |
| 5074 | + function pointDistance(p1, p2) { | |
| 5075 | + return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]); | |
| 5076 | + } | |
| 5077 | + function pointEqual(p1, p2) { | |
| 5078 | + return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]); | |
| 5079 | + } | |
| 5080 | + function ZigZagModifier() {} | |
| 5081 | + extendPrototype([ShapeModifier], ZigZagModifier); | |
| 5082 | + ZigZagModifier.prototype.initModifierProperties = function(elem, data) { | |
| 5083 | + this.getValue = this.processKeys; | |
| 5084 | + this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this); | |
| 5085 | + this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this); | |
| 5086 | + this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this); | |
| 5087 | + this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0; | |
| 5088 | + }; | |
| 5089 | + function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) { | |
| 5090 | + var angO = angle - Math.PI / 2; | |
| 5091 | + var angI = angle + Math.PI / 2; | |
| 5092 | + var px = point[0] + Math.cos(angle) * direction * amplitude; | |
| 5093 | + var py = point[1] - Math.sin(angle) * direction * amplitude; | |
| 5094 | + outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length()); | |
| 5095 | + } | |
| 5096 | + function getPerpendicularVector(pt1, pt2) { | |
| 5097 | + var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]]; | |
| 5098 | + var rot = -Math.PI * .5; | |
| 5099 | + return [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]]; | |
| 5100 | + } | |
| 5101 | + function getProjectingAngle(path, cur) { | |
| 5102 | + var prevIndex = cur === 0 ? path.length() - 1 : cur - 1; | |
| 5103 | + var nextIndex = (cur + 1) % path.length(); | |
| 5104 | + var prevPoint = path.v[prevIndex]; | |
| 5105 | + var nextPoint = path.v[nextIndex]; | |
| 5106 | + var pVector = getPerpendicularVector(prevPoint, nextPoint); | |
| 5107 | + return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]); | |
| 5108 | + } | |
| 5109 | + function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) { | |
| 5110 | + var angle = getProjectingAngle(path, cur); | |
| 5111 | + var point = path.v[cur % path._length]; | |
| 5112 | + var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1]; | |
| 5113 | + var nextPoint = path.v[(cur + 1) % path._length]; | |
| 5114 | + var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0; | |
| 5115 | + var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0; | |
| 5116 | + setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType); | |
| 5117 | + } | |
| 5118 | + function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) { | |
| 5119 | + for (var i = 0; i < frequency; i += 1) { | |
| 5120 | + var t = (i + 1) / (frequency + 1); | |
| 5121 | + var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0; | |
| 5122 | + var angle = segment.normalAngle(t); | |
| 5123 | + setPoint(outputBezier, segment.point(t), angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType); | |
| 5124 | + direction = -direction; | |
| 5125 | + } | |
| 5126 | + return direction; | |
| 5127 | + } | |
| 5128 | + ZigZagModifier.prototype.processPath = function(path, amplitude, frequency, pointType) { | |
| 5129 | + var count = path._length; | |
| 5130 | + var clonedPath = shapePool.newElement(); | |
| 5131 | + clonedPath.c = path.c; | |
| 5132 | + if (!path.c) count -= 1; | |
| 5133 | + if (count === 0) return clonedPath; | |
| 5134 | + var direction = -1; | |
| 5135 | + var segment = PolynomialBezier.shapeSegment(path, 0); | |
| 5136 | + zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction); | |
| 5137 | + for (var i = 0; i < count; i += 1) { | |
| 5138 | + direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction); | |
| 5139 | + if (i === count - 1 && !path.c) segment = null; | |
| 5140 | + else segment = PolynomialBezier.shapeSegment(path, (i + 1) % count); | |
| 5141 | + zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction); | |
| 5142 | + } | |
| 5143 | + return clonedPath; | |
| 5144 | + }; | |
| 5145 | + ZigZagModifier.prototype.processShapes = function(_isFirstFrame) { | |
| 5146 | + var shapePaths; | |
| 5147 | + var i; | |
| 5148 | + var len = this.shapes.length; | |
| 5149 | + var j; | |
| 5150 | + var jLen; | |
| 5151 | + var amplitude = this.amplitude.v; | |
| 5152 | + var frequency = Math.max(0, Math.round(this.frequency.v)); | |
| 5153 | + var pointType = this.pointsType.v; | |
| 5154 | + if (amplitude !== 0) { | |
| 5155 | + var shapeData; | |
| 5156 | + var localShapeCollection; | |
| 5157 | + for (i = 0; i < len; i += 1) { | |
| 5158 | + shapeData = this.shapes[i]; | |
| 5159 | + localShapeCollection = shapeData.localShapeCollection; | |
| 5160 | + if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { | |
| 5161 | + localShapeCollection.releaseShapes(); | |
| 5162 | + shapeData.shape._mdf = true; | |
| 5163 | + shapePaths = shapeData.shape.paths.shapes; | |
| 5164 | + jLen = shapeData.shape.paths._length; | |
| 5165 | + for (j = 0; j < jLen; j += 1) localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType)); | |
| 5166 | + } | |
| 5167 | + shapeData.shape.paths = shapeData.localShapeCollection; | |
| 5168 | + } | |
| 5169 | + } | |
| 5170 | + if (!this.dynamicProperties.length) this._mdf = false; | |
| 5171 | + }; | |
| 5172 | + function linearOffset(p1, p2, amount) { | |
| 5173 | + var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]); | |
| 5174 | + return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)]; | |
| 5175 | + } | |
| 5176 | + function offsetSegment(segment, amount) { | |
| 5177 | + var p0; | |
| 5178 | + var p1a; | |
| 5179 | + var p1b; | |
| 5180 | + var p2b; | |
| 5181 | + var p2a; | |
| 5182 | + var p3; | |
| 5183 | + var e = linearOffset(segment.points[0], segment.points[1], amount); | |
| 5184 | + p0 = e[0]; | |
| 5185 | + p1a = e[1]; | |
| 5186 | + e = linearOffset(segment.points[1], segment.points[2], amount); | |
| 5187 | + p1b = e[0]; | |
| 5188 | + p2b = e[1]; | |
| 5189 | + e = linearOffset(segment.points[2], segment.points[3], amount); | |
| 5190 | + p2a = e[0]; | |
| 5191 | + p3 = e[1]; | |
| 5192 | + var p1 = lineIntersection(p0, p1a, p1b, p2b); | |
| 5193 | + if (p1 === null) p1 = p1a; | |
| 5194 | + var p2 = lineIntersection(p2a, p3, p1b, p2b); | |
| 5195 | + if (p2 === null) p2 = p2a; | |
| 5196 | + return new PolynomialBezier(p0, p1, p2, p3); | |
| 5197 | + } | |
| 5198 | + function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) { | |
| 5199 | + var p0 = seg1.points[3]; | |
| 5200 | + var p1 = seg2.points[0]; | |
| 5201 | + if (lineJoin === 3) return p0; | |
| 5202 | + if (pointEqual(p0, p1)) return p0; | |
| 5203 | + if (lineJoin === 2) { | |
| 5204 | + var angleOut = -seg1.tangentAngle(1); | |
| 5205 | + var angleIn = -seg2.tangentAngle(0) + Math.PI; | |
| 5206 | + var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100)); | |
| 5207 | + var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2; | |
| 5208 | + var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner); | |
| 5209 | + outputBezier.setXYAt(tan[0], tan[1], "o", outputBezier.length() - 1); | |
| 5210 | + tan = polarOffset(p1, angleIn, 2 * radius * roundCorner); | |
| 5211 | + outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length()); | |
| 5212 | + return p1; | |
| 5213 | + } | |
| 5214 | + var intersection = lineIntersection(pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2], p0, p1, pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1]); | |
| 5215 | + if (intersection && pointDistance(intersection, p0) < miterLimit) { | |
| 5216 | + outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length()); | |
| 5217 | + return intersection; | |
| 5218 | + } | |
| 5219 | + return p0; | |
| 5220 | + } | |
| 5221 | + function getIntersection(a, b) { | |
| 5222 | + var intersect = a.intersections(b); | |
| 5223 | + if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift(); | |
| 5224 | + if (intersect.length) return intersect[0]; | |
| 5225 | + return null; | |
| 5226 | + } | |
| 5227 | + function pruneSegmentIntersection(a, b) { | |
| 5228 | + var outa = a.slice(); | |
| 5229 | + var outb = b.slice(); | |
| 5230 | + var intersect = getIntersection(a[a.length - 1], b[0]); | |
| 5231 | + if (intersect) { | |
| 5232 | + outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0]; | |
| 5233 | + outb[0] = b[0].split(intersect[1])[1]; | |
| 5234 | + } | |
| 5235 | + if (a.length > 1 && b.length > 1) { | |
| 5236 | + intersect = getIntersection(a[0], b[b.length - 1]); | |
| 5237 | + if (intersect) return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]]; | |
| 5238 | + } | |
| 5239 | + return [outa, outb]; | |
| 5240 | + } | |
| 5241 | + function pruneIntersections(segments) { | |
| 5242 | + var e; | |
| 5243 | + for (var i = 1; i < segments.length; i += 1) { | |
| 5244 | + e = pruneSegmentIntersection(segments[i - 1], segments[i]); | |
| 5245 | + segments[i - 1] = e[0]; | |
| 5246 | + segments[i] = e[1]; | |
| 5247 | + } | |
| 5248 | + if (segments.length > 1) { | |
| 5249 | + e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]); | |
| 5250 | + segments[segments.length - 1] = e[0]; | |
| 5251 | + segments[0] = e[1]; | |
| 5252 | + } | |
| 5253 | + return segments; | |
| 5254 | + } | |
| 5255 | + function offsetSegmentSplit(segment, amount) { | |
| 5256 | + var flex = segment.inflectionPoints(); | |
| 5257 | + var left; | |
| 5258 | + var right; | |
| 5259 | + var split; | |
| 5260 | + var mid; | |
| 5261 | + if (flex.length === 0) return [offsetSegment(segment, amount)]; | |
| 5262 | + if (flex.length === 1 || floatEqual(flex[1], 1)) { | |
| 5263 | + split = segment.split(flex[0]); | |
| 5264 | + left = split[0]; | |
| 5265 | + right = split[1]; | |
| 5266 | + return [offsetSegment(left, amount), offsetSegment(right, amount)]; | |
| 5267 | + } | |
| 5268 | + split = segment.split(flex[0]); | |
| 5269 | + left = split[0]; | |
| 5270 | + var t = (flex[1] - flex[0]) / (1 - flex[0]); | |
| 5271 | + split = split[1].split(t); | |
| 5272 | + mid = split[0]; | |
| 5273 | + right = split[1]; | |
| 5274 | + return [ | |
| 5275 | + offsetSegment(left, amount), | |
| 5276 | + offsetSegment(mid, amount), | |
| 5277 | + offsetSegment(right, amount) | |
| 5278 | + ]; | |
| 5279 | + } | |
| 5280 | + function OffsetPathModifier() {} | |
| 5281 | + extendPrototype([ShapeModifier], OffsetPathModifier); | |
| 5282 | + OffsetPathModifier.prototype.initModifierProperties = function(elem, data) { | |
| 5283 | + this.getValue = this.processKeys; | |
| 5284 | + this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this); | |
| 5285 | + this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this); | |
| 5286 | + this.lineJoin = data.lj; | |
| 5287 | + this._isAnimated = this.amount.effectsSequence.length !== 0; | |
| 5288 | + }; | |
| 5289 | + OffsetPathModifier.prototype.processPath = function(inputBezier, amount, lineJoin, miterLimit) { | |
| 5290 | + var outputBezier = shapePool.newElement(); | |
| 5291 | + outputBezier.c = inputBezier.c; | |
| 5292 | + var count = inputBezier.length(); | |
| 5293 | + if (!inputBezier.c) count -= 1; | |
| 5294 | + var i; | |
| 5295 | + var j; | |
| 5296 | + var segment; | |
| 5297 | + var multiSegments = []; | |
| 5298 | + for (i = 0; i < count; i += 1) { | |
| 5299 | + segment = PolynomialBezier.shapeSegment(inputBezier, i); | |
| 5300 | + multiSegments.push(offsetSegmentSplit(segment, amount)); | |
| 5301 | + } | |
| 5302 | + if (!inputBezier.c) for (i = count - 1; i >= 0; i -= 1) { | |
| 5303 | + segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i); | |
| 5304 | + multiSegments.push(offsetSegmentSplit(segment, amount)); | |
| 5305 | + } | |
| 5306 | + multiSegments = pruneIntersections(multiSegments); | |
| 5307 | + var lastPoint = null; | |
| 5308 | + var lastSeg = null; | |
| 5309 | + for (i = 0; i < multiSegments.length; i += 1) { | |
| 5310 | + var multiSegment = multiSegments[i]; | |
| 5311 | + if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit); | |
| 5312 | + lastSeg = multiSegment[multiSegment.length - 1]; | |
| 5313 | + for (j = 0; j < multiSegment.length; j += 1) { | |
| 5314 | + segment = multiSegment[j]; | |
| 5315 | + if (lastPoint && pointEqual(segment.points[0], lastPoint)) outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], "o", outputBezier.length() - 1); | |
| 5316 | + else outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length()); | |
| 5317 | + outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length()); | |
| 5318 | + lastPoint = segment.points[3]; | |
| 5319 | + } | |
| 5320 | + } | |
| 5321 | + if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit); | |
| 5322 | + return outputBezier; | |
| 5323 | + }; | |
| 5324 | + OffsetPathModifier.prototype.processShapes = function(_isFirstFrame) { | |
| 5325 | + var shapePaths; | |
| 5326 | + var i; | |
| 5327 | + var len = this.shapes.length; | |
| 5328 | + var j; | |
| 5329 | + var jLen; | |
| 5330 | + var amount = this.amount.v; | |
| 5331 | + var miterLimit = this.miterLimit.v; | |
| 5332 | + var lineJoin = this.lineJoin; | |
| 5333 | + if (amount !== 0) { | |
| 5334 | + var shapeData; | |
| 5335 | + var localShapeCollection; | |
| 5336 | + for (i = 0; i < len; i += 1) { | |
| 5337 | + shapeData = this.shapes[i]; | |
| 5338 | + localShapeCollection = shapeData.localShapeCollection; | |
| 5339 | + if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { | |
| 5340 | + localShapeCollection.releaseShapes(); | |
| 5341 | + shapeData.shape._mdf = true; | |
| 5342 | + shapePaths = shapeData.shape.paths.shapes; | |
| 5343 | + jLen = shapeData.shape.paths._length; | |
| 5344 | + for (j = 0; j < jLen; j += 1) localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit)); | |
| 5345 | + } | |
| 5346 | + shapeData.shape.paths = shapeData.localShapeCollection; | |
| 5347 | + } | |
| 5348 | + } | |
| 5349 | + if (!this.dynamicProperties.length) this._mdf = false; | |
| 5350 | + }; | |
| 5351 | + function getFontProperties(fontData) { | |
| 5352 | + var styles = fontData.fStyle ? fontData.fStyle.split(" ") : []; | |
| 5353 | + var fWeight = "normal"; | |
| 5354 | + var fStyle = "normal"; | |
| 5355 | + var len = styles.length; | |
| 5356 | + var styleName; | |
| 5357 | + for (var i = 0; i < len; i += 1) { | |
| 5358 | + styleName = styles[i].toLowerCase(); | |
| 5359 | + switch (styleName) { | |
| 5360 | + case "italic": | |
| 5361 | + fStyle = "italic"; | |
| 5362 | + break; | |
| 5363 | + case "bold": | |
| 5364 | + fWeight = "700"; | |
| 5365 | + break; | |
| 5366 | + case "black": | |
| 5367 | + fWeight = "900"; | |
| 5368 | + break; | |
| 5369 | + case "medium": | |
| 5370 | + fWeight = "500"; | |
| 5371 | + break; | |
| 5372 | + case "regular": | |
| 5373 | + case "normal": | |
| 5374 | + fWeight = "400"; | |
| 5375 | + break; | |
| 5376 | + case "light": | |
| 5377 | + case "thin": | |
| 5378 | + fWeight = "200"; | |
| 5379 | + break; | |
| 5380 | + default: break; | |
| 5381 | + } | |
| 5382 | + } | |
| 5383 | + return { | |
| 5384 | + style: fStyle, | |
| 5385 | + weight: fontData.fWeight || fWeight | |
| 5386 | + }; | |
| 5387 | + } | |
| 5388 | + var FontManager = function() { | |
| 5389 | + var maxWaitingTime = 5e3; | |
| 5390 | + var emptyChar = { | |
| 5391 | + w: 0, | |
| 5392 | + size: 0, | |
| 5393 | + shapes: [], | |
| 5394 | + data: { shapes: [] } | |
| 5395 | + }; | |
| 5396 | + var combinedCharacters = []; | |
| 5397 | + combinedCharacters = combinedCharacters.concat([ | |
| 5398 | + 2304, | |
| 5399 | + 2305, | |
| 5400 | + 2306, | |
| 5401 | + 2307, | |
| 5402 | + 2362, | |
| 5403 | + 2363, | |
| 5404 | + 2364, | |
| 5405 | + 2364, | |
| 5406 | + 2366, | |
| 5407 | + 2367, | |
| 5408 | + 2368, | |
| 5409 | + 2369, | |
| 5410 | + 2370, | |
| 5411 | + 2371, | |
| 5412 | + 2372, | |
| 5413 | + 2373, | |
| 5414 | + 2374, | |
| 5415 | + 2375, | |
| 5416 | + 2376, | |
| 5417 | + 2377, | |
| 5418 | + 2378, | |
| 5419 | + 2379, | |
| 5420 | + 2380, | |
| 5421 | + 2381, | |
| 5422 | + 2382, | |
| 5423 | + 2383, | |
| 5424 | + 2387, | |
| 5425 | + 2388, | |
| 5426 | + 2389, | |
| 5427 | + 2390, | |
| 5428 | + 2391, | |
| 5429 | + 2402, | |
| 5430 | + 2403 | |
| 5431 | + ]); | |
| 5432 | + var BLACK_FLAG_CODE_POINT = 127988; | |
| 5433 | + var CANCEL_TAG_CODE_POINT = 917631; | |
| 5434 | + var A_TAG_CODE_POINT = 917601; | |
| 5435 | + var Z_TAG_CODE_POINT = 917626; | |
| 5436 | + var VARIATION_SELECTOR_16_CODE_POINT = 65039; | |
| 5437 | + var ZERO_WIDTH_JOINER_CODE_POINT = 8205; | |
| 5438 | + var REGIONAL_CHARACTER_A_CODE_POINT = 127462; | |
| 5439 | + var REGIONAL_CHARACTER_Z_CODE_POINT = 127487; | |
| 5440 | + var surrogateModifiers = [ | |
| 5441 | + "d83cdffb", | |
| 5442 | + "d83cdffc", | |
| 5443 | + "d83cdffd", | |
| 5444 | + "d83cdffe", | |
| 5445 | + "d83cdfff" | |
| 5446 | + ]; | |
| 5447 | + function trimFontOptions(font) { | |
| 5448 | + var familyArray = font.split(","); | |
| 5449 | + var i; | |
| 5450 | + var len = familyArray.length; | |
| 5451 | + var enabledFamilies = []; | |
| 5452 | + for (i = 0; i < len; i += 1) if (familyArray[i] !== "sans-serif" && familyArray[i] !== "monospace") enabledFamilies.push(familyArray[i]); | |
| 5453 | + return enabledFamilies.join(","); | |
| 5454 | + } | |
| 5455 | + function setUpNode(font, family) { | |
| 5456 | + var parentNode = createTag("span"); | |
| 5457 | + parentNode.setAttribute("aria-hidden", true); | |
| 5458 | + parentNode.style.fontFamily = family; | |
| 5459 | + var node = createTag("span"); | |
| 5460 | + node.innerText = "giItT1WQy@!-/#"; | |
| 5461 | + parentNode.style.position = "absolute"; | |
| 5462 | + parentNode.style.left = "-10000px"; | |
| 5463 | + parentNode.style.top = "-10000px"; | |
| 5464 | + parentNode.style.fontSize = "300px"; | |
| 5465 | + parentNode.style.fontVariant = "normal"; | |
| 5466 | + parentNode.style.fontStyle = "normal"; | |
| 5467 | + parentNode.style.fontWeight = "normal"; | |
| 5468 | + parentNode.style.letterSpacing = "0"; | |
| 5469 | + parentNode.appendChild(node); | |
| 5470 | + document.body.appendChild(parentNode); | |
| 5471 | + var width = node.offsetWidth; | |
| 5472 | + node.style.fontFamily = trimFontOptions(font) + ", " + family; | |
| 5473 | + return { | |
| 5474 | + node, | |
| 5475 | + w: width, | |
| 5476 | + parent: parentNode | |
| 5477 | + }; | |
| 5478 | + } | |
| 5479 | + function checkLoadedFonts() { | |
| 5480 | + var i; | |
| 5481 | + var len = this.fonts.length; | |
| 5482 | + var node; | |
| 5483 | + var w; | |
| 5484 | + var loadedCount = len; | |
| 5485 | + for (i = 0; i < len; i += 1) if (this.fonts[i].loaded) loadedCount -= 1; | |
| 5486 | + else if (this.fonts[i].fOrigin === "n" || this.fonts[i].origin === 0) this.fonts[i].loaded = true; | |
| 5487 | + else { | |
| 5488 | + node = this.fonts[i].monoCase.node; | |
| 5489 | + w = this.fonts[i].monoCase.w; | |
| 5490 | + if (node.offsetWidth !== w) { | |
| 5491 | + loadedCount -= 1; | |
| 5492 | + this.fonts[i].loaded = true; | |
| 5493 | + } else { | |
| 5494 | + node = this.fonts[i].sansCase.node; | |
| 5495 | + w = this.fonts[i].sansCase.w; | |
| 5496 | + if (node.offsetWidth !== w) { | |
| 5497 | + loadedCount -= 1; | |
| 5498 | + this.fonts[i].loaded = true; | |
| 5499 | + } | |
| 5500 | + } | |
| 5501 | + if (this.fonts[i].loaded) { | |
| 5502 | + this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent); | |
| 5503 | + this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent); | |
| 5504 | + } | |
| 5505 | + } | |
| 5506 | + if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) setTimeout(this.checkLoadedFontsBinded, 20); | |
| 5507 | + else setTimeout(this.setIsLoadedBinded, 10); | |
| 5508 | + } | |
| 5509 | + function createHelper(fontData, def) { | |
| 5510 | + var engine = document.body && def ? "svg" : "canvas"; | |
| 5511 | + var helper; | |
| 5512 | + var fontProps = getFontProperties(fontData); | |
| 5513 | + if (engine === "svg") { | |
| 5514 | + var tHelper = createNS("text"); | |
| 5515 | + tHelper.style.fontSize = "100px"; | |
| 5516 | + tHelper.setAttribute("font-family", fontData.fFamily); | |
| 5517 | + tHelper.setAttribute("font-style", fontProps.style); | |
| 5518 | + tHelper.setAttribute("font-weight", fontProps.weight); | |
| 5519 | + tHelper.textContent = "1"; | |
| 5520 | + if (fontData.fClass) { | |
| 5521 | + tHelper.style.fontFamily = "inherit"; | |
| 5522 | + tHelper.setAttribute("class", fontData.fClass); | |
| 5523 | + } else tHelper.style.fontFamily = fontData.fFamily; | |
| 5524 | + def.appendChild(tHelper); | |
| 5525 | + helper = tHelper; | |
| 5526 | + } else { | |
| 5527 | + var tCanvasHelper = new OffscreenCanvas(500, 500).getContext("2d"); | |
| 5528 | + tCanvasHelper.font = fontProps.style + " " + fontProps.weight + " 100px " + fontData.fFamily; | |
| 5529 | + helper = tCanvasHelper; | |
| 5530 | + } | |
| 5531 | + function measure(text) { | |
| 5532 | + if (engine === "svg") { | |
| 5533 | + helper.textContent = text; | |
| 5534 | + return helper.getComputedTextLength(); | |
| 5535 | + } | |
| 5536 | + return helper.measureText(text).width; | |
| 5537 | + } | |
| 5538 | + return { measureText: measure }; | |
| 5539 | + } | |
| 5540 | + function addFonts(fontData, defs) { | |
| 5541 | + if (!fontData) { | |
| 5542 | + this.isLoaded = true; | |
| 5543 | + return; | |
| 5544 | + } | |
| 5545 | + if (this.chars) { | |
| 5546 | + this.isLoaded = true; | |
| 5547 | + this.fonts = fontData.list; | |
| 5548 | + return; | |
| 5549 | + } | |
| 5550 | + if (!document.body) { | |
| 5551 | + this.isLoaded = true; | |
| 5552 | + fontData.list.forEach(function(data) { | |
| 5553 | + data.helper = createHelper(data); | |
| 5554 | + data.cache = {}; | |
| 5555 | + }); | |
| 5556 | + this.fonts = fontData.list; | |
| 5557 | + return; | |
| 5558 | + } | |
| 5559 | + var fontArr = fontData.list; | |
| 5560 | + var i; | |
| 5561 | + var len = fontArr.length; | |
| 5562 | + var _pendingFonts = len; | |
| 5563 | + for (i = 0; i < len; i += 1) { | |
| 5564 | + var shouldLoadFont = true; | |
| 5565 | + var loadedSelector; | |
| 5566 | + var j; | |
| 5567 | + fontArr[i].loaded = false; | |
| 5568 | + fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, "monospace"); | |
| 5569 | + fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, "sans-serif"); | |
| 5570 | + if (!fontArr[i].fPath) { | |
| 5571 | + fontArr[i].loaded = true; | |
| 5572 | + _pendingFonts -= 1; | |
| 5573 | + } else if (fontArr[i].fOrigin === "p" || fontArr[i].origin === 3) { | |
| 5574 | + loadedSelector = document.querySelectorAll("style[f-forigin=\"p\"][f-family=\"" + fontArr[i].fFamily + "\"], style[f-origin=\"3\"][f-family=\"" + fontArr[i].fFamily + "\"]"); | |
| 5575 | + if (loadedSelector.length > 0) shouldLoadFont = false; | |
| 5576 | + if (shouldLoadFont) { | |
| 5577 | + var s = createTag("style"); | |
| 5578 | + s.setAttribute("f-forigin", fontArr[i].fOrigin); | |
| 5579 | + s.setAttribute("f-origin", fontArr[i].origin); | |
| 5580 | + s.setAttribute("f-family", fontArr[i].fFamily); | |
| 5581 | + s.type = "text/css"; | |
| 5582 | + s.innerText = "@font-face {font-family: " + fontArr[i].fFamily + "; font-style: normal; src: url('" + fontArr[i].fPath + "');}"; | |
| 5583 | + defs.appendChild(s); | |
| 5584 | + } | |
| 5585 | + } else if (fontArr[i].fOrigin === "g" || fontArr[i].origin === 1) { | |
| 5586 | + loadedSelector = document.querySelectorAll("link[f-forigin=\"g\"], link[f-origin=\"1\"]"); | |
| 5587 | + for (j = 0; j < loadedSelector.length; j += 1) if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) shouldLoadFont = false; | |
| 5588 | + if (shouldLoadFont) { | |
| 5589 | + var l = createTag("link"); | |
| 5590 | + l.setAttribute("f-forigin", fontArr[i].fOrigin); | |
| 5591 | + l.setAttribute("f-origin", fontArr[i].origin); | |
| 5592 | + l.type = "text/css"; | |
| 5593 | + l.rel = "stylesheet"; | |
| 5594 | + l.href = fontArr[i].fPath; | |
| 5595 | + document.body.appendChild(l); | |
| 5596 | + } | |
| 5597 | + } else if (fontArr[i].fOrigin === "t" || fontArr[i].origin === 2) { | |
| 5598 | + loadedSelector = document.querySelectorAll("script[f-forigin=\"t\"], script[f-origin=\"2\"]"); | |
| 5599 | + for (j = 0; j < loadedSelector.length; j += 1) if (fontArr[i].fPath === loadedSelector[j].src) shouldLoadFont = false; | |
| 5600 | + if (shouldLoadFont) { | |
| 5601 | + var sc = createTag("link"); | |
| 5602 | + sc.setAttribute("f-forigin", fontArr[i].fOrigin); | |
| 5603 | + sc.setAttribute("f-origin", fontArr[i].origin); | |
| 5604 | + sc.setAttribute("rel", "stylesheet"); | |
| 5605 | + sc.setAttribute("href", fontArr[i].fPath); | |
| 5606 | + defs.appendChild(sc); | |
| 5607 | + } | |
| 5608 | + } | |
| 5609 | + fontArr[i].helper = createHelper(fontArr[i], defs); | |
| 5610 | + fontArr[i].cache = {}; | |
| 5611 | + this.fonts.push(fontArr[i]); | |
| 5612 | + } | |
| 5613 | + if (_pendingFonts === 0) this.isLoaded = true; | |
| 5614 | + else setTimeout(this.checkLoadedFonts.bind(this), 100); | |
| 5615 | + } | |
| 5616 | + function addChars(chars) { | |
| 5617 | + if (!chars) return; | |
| 5618 | + if (!this.chars) this.chars = []; | |
| 5619 | + var i; | |
| 5620 | + var len = chars.length; | |
| 5621 | + var j; | |
| 5622 | + var jLen = this.chars.length; | |
| 5623 | + var found; | |
| 5624 | + for (i = 0; i < len; i += 1) { | |
| 5625 | + j = 0; | |
| 5626 | + found = false; | |
| 5627 | + while (j < jLen) { | |
| 5628 | + if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) found = true; | |
| 5629 | + j += 1; | |
| 5630 | + } | |
| 5631 | + if (!found) { | |
| 5632 | + this.chars.push(chars[i]); | |
| 5633 | + jLen += 1; | |
| 5634 | + } | |
| 5635 | + } | |
| 5636 | + } | |
| 5637 | + function getCharData(_char, style, font) { | |
| 5638 | + var i = 0; | |
| 5639 | + var len = this.chars.length; | |
| 5640 | + while (i < len) { | |
| 5641 | + if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) return this.chars[i]; | |
| 5642 | + i += 1; | |
| 5643 | + } | |
| 5644 | + if ((typeof _char === "string" && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn && !this._warned) { | |
| 5645 | + this._warned = true; | |
| 5646 | + console.warn("Missing character from exported characters list: ", _char, style, font); | |
| 5647 | + } | |
| 5648 | + return emptyChar; | |
| 5649 | + } | |
| 5650 | + function measureText(_char2, fontName, size) { | |
| 5651 | + var fontData = this.getFontByName(fontName); | |
| 5652 | + var index = _char2; | |
| 5653 | + if (!fontData.cache[index]) { | |
| 5654 | + var tHelper = fontData.helper; | |
| 5655 | + if (_char2 === " ") { | |
| 5656 | + var doubleSize = tHelper.measureText("|" + _char2 + "|"); | |
| 5657 | + var singleSize = tHelper.measureText("||"); | |
| 5658 | + fontData.cache[index] = (doubleSize - singleSize) / 100; | |
| 5659 | + } else fontData.cache[index] = tHelper.measureText(_char2) / 100; | |
| 5660 | + } | |
| 5661 | + return fontData.cache[index] * size; | |
| 5662 | + } | |
| 5663 | + function getFontByName(name) { | |
| 5664 | + var i = 0; | |
| 5665 | + var len = this.fonts.length; | |
| 5666 | + while (i < len) { | |
| 5667 | + if (this.fonts[i].fName === name) return this.fonts[i]; | |
| 5668 | + i += 1; | |
| 5669 | + } | |
| 5670 | + return this.fonts[0]; | |
| 5671 | + } | |
| 5672 | + function getCodePoint(string) { | |
| 5673 | + var codePoint = 0; | |
| 5674 | + var first = string.charCodeAt(0); | |
| 5675 | + if (first >= 55296 && first <= 56319) { | |
| 5676 | + var second = string.charCodeAt(1); | |
| 5677 | + if (second >= 56320 && second <= 57343) codePoint = (first - 55296) * 1024 + second - 56320 + 65536; | |
| 5678 | + } | |
| 5679 | + return codePoint; | |
| 5680 | + } | |
| 5681 | + function isModifier(firstCharCode, secondCharCode) { | |
| 5682 | + var sum = firstCharCode.toString(16) + secondCharCode.toString(16); | |
| 5683 | + return surrogateModifiers.indexOf(sum) !== -1; | |
| 5684 | + } | |
| 5685 | + function isZeroWidthJoiner(charCode) { | |
| 5686 | + return charCode === ZERO_WIDTH_JOINER_CODE_POINT; | |
| 5687 | + } | |
| 5688 | + function isVariationSelector(charCode) { | |
| 5689 | + return charCode === VARIATION_SELECTOR_16_CODE_POINT; | |
| 5690 | + } | |
| 5691 | + function isRegionalCode(string) { | |
| 5692 | + var codePoint = getCodePoint(string); | |
| 5693 | + if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) return true; | |
| 5694 | + return false; | |
| 5695 | + } | |
| 5696 | + function isFlagEmoji(string) { | |
| 5697 | + return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2)); | |
| 5698 | + } | |
| 5699 | + function isCombinedCharacter(_char3) { | |
| 5700 | + return combinedCharacters.indexOf(_char3) !== -1; | |
| 5701 | + } | |
| 5702 | + function isRegionalFlag(text, index) { | |
| 5703 | + var codePoint = getCodePoint(text.substr(index, 2)); | |
| 5704 | + if (codePoint !== BLACK_FLAG_CODE_POINT) return false; | |
| 5705 | + var count = 0; | |
| 5706 | + index += 2; | |
| 5707 | + while (count < 5) { | |
| 5708 | + codePoint = getCodePoint(text.substr(index, 2)); | |
| 5709 | + if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) return false; | |
| 5710 | + count += 1; | |
| 5711 | + index += 2; | |
| 5712 | + } | |
| 5713 | + return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT; | |
| 5714 | + } | |
| 5715 | + function setIsLoaded() { | |
| 5716 | + this.isLoaded = true; | |
| 5717 | + } | |
| 5718 | + var Font = function Font() { | |
| 5719 | + this.fonts = []; | |
| 5720 | + this.chars = null; | |
| 5721 | + this.typekitLoaded = 0; | |
| 5722 | + this.isLoaded = false; | |
| 5723 | + this._warned = false; | |
| 5724 | + this.initTime = Date.now(); | |
| 5725 | + this.setIsLoadedBinded = this.setIsLoaded.bind(this); | |
| 5726 | + this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this); | |
| 5727 | + }; | |
| 5728 | + Font.isModifier = isModifier; | |
| 5729 | + Font.isZeroWidthJoiner = isZeroWidthJoiner; | |
| 5730 | + Font.isFlagEmoji = isFlagEmoji; | |
| 5731 | + Font.isRegionalCode = isRegionalCode; | |
| 5732 | + Font.isCombinedCharacter = isCombinedCharacter; | |
| 5733 | + Font.isRegionalFlag = isRegionalFlag; | |
| 5734 | + Font.isVariationSelector = isVariationSelector; | |
| 5735 | + Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT; | |
| 5736 | + Font.prototype = { | |
| 5737 | + addChars, | |
| 5738 | + addFonts, | |
| 5739 | + getCharData, | |
| 5740 | + getFontByName, | |
| 5741 | + measureText, | |
| 5742 | + checkLoadedFonts, | |
| 5743 | + setIsLoaded | |
| 5744 | + }; | |
| 5745 | + return Font; | |
| 5746 | + }(); | |
| 5747 | + function SlotManager(animationData) { | |
| 5748 | + this.animationData = animationData; | |
| 5749 | + } | |
| 5750 | + SlotManager.prototype.getProp = function(data) { | |
| 5751 | + if (this.animationData.slots && this.animationData.slots[data.sid]) return Object.assign(data, this.animationData.slots[data.sid].p); | |
| 5752 | + return data; | |
| 5753 | + }; | |
| 5754 | + function slotFactory(animationData) { | |
| 5755 | + return new SlotManager(animationData); | |
| 5756 | + } | |
| 5757 | + function RenderableElement() {} | |
| 5758 | + RenderableElement.prototype = { | |
| 5759 | + initRenderable: function initRenderable() { | |
| 5760 | + this.isInRange = false; | |
| 5761 | + this.hidden = false; | |
| 5762 | + this.isTransparent = false; | |
| 5763 | + this.renderableComponents = []; | |
| 5764 | + }, | |
| 5765 | + addRenderableComponent: function addRenderableComponent(component) { | |
| 5766 | + if (this.renderableComponents.indexOf(component) === -1) this.renderableComponents.push(component); | |
| 5767 | + }, | |
| 5768 | + removeRenderableComponent: function removeRenderableComponent(component) { | |
| 5769 | + if (this.renderableComponents.indexOf(component) !== -1) this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1); | |
| 5770 | + }, | |
| 5771 | + prepareRenderableFrame: function prepareRenderableFrame(num) { | |
| 5772 | + this.checkLayerLimits(num); | |
| 5773 | + }, | |
| 5774 | + checkTransparency: function checkTransparency() { | |
| 5775 | + if (this.finalTransform.mProp.o.v <= 0) { | |
| 5776 | + if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) { | |
| 5777 | + this.isTransparent = true; | |
| 5778 | + this.hide(); | |
| 5779 | + } | |
| 5780 | + } else if (this.isTransparent) { | |
| 5781 | + this.isTransparent = false; | |
| 5782 | + this.show(); | |
| 5783 | + } | |
| 5784 | + }, | |
| 5785 | + /** | |
| 5786 | + * @function | |
| 5787 | + * Initializes frame related properties. | |
| 5788 | + * | |
| 5789 | + * @param {number} num | |
| 5790 | + * current frame number in Layer's time | |
| 5791 | + * | |
| 5792 | + */ | |
| 5793 | + checkLayerLimits: function checkLayerLimits(num) { | |
| 5794 | + if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) { | |
| 5795 | + if (this.isInRange !== true) { | |
| 5796 | + this.globalData._mdf = true; | |
| 5797 | + this._mdf = true; | |
| 5798 | + this.isInRange = true; | |
| 5799 | + this.show(); | |
| 5800 | + } | |
| 5801 | + } else if (this.isInRange !== false) { | |
| 5802 | + this.globalData._mdf = true; | |
| 5803 | + this.isInRange = false; | |
| 5804 | + this.hide(); | |
| 5805 | + } | |
| 5806 | + }, | |
| 5807 | + renderRenderable: function renderRenderable() { | |
| 5808 | + var i; | |
| 5809 | + var len = this.renderableComponents.length; | |
| 5810 | + for (i = 0; i < len; i += 1) this.renderableComponents[i].renderFrame(this._isFirstFrame); | |
| 5811 | + }, | |
| 5812 | + sourceRectAtTime: function sourceRectAtTime() { | |
| 5813 | + return { | |
| 5814 | + top: 0, | |
| 5815 | + left: 0, | |
| 5816 | + width: 100, | |
| 5817 | + height: 100 | |
| 5818 | + }; | |
| 5819 | + }, | |
| 5820 | + getLayerSize: function getLayerSize() { | |
| 5821 | + if (this.data.ty === 5) return { | |
| 5822 | + w: this.data.textData.width, | |
| 5823 | + h: this.data.textData.height | |
| 5824 | + }; | |
| 5825 | + return { | |
| 5826 | + w: this.data.width, | |
| 5827 | + h: this.data.height | |
| 5828 | + }; | |
| 5829 | + } | |
| 5830 | + }; | |
| 5831 | + var getBlendMode = function() { | |
| 5832 | + var blendModeEnums = { | |
| 5833 | + 0: "source-over", | |
| 5834 | + 1: "multiply", | |
| 5835 | + 2: "screen", | |
| 5836 | + 3: "overlay", | |
| 5837 | + 4: "darken", | |
| 5838 | + 5: "lighten", | |
| 5839 | + 6: "color-dodge", | |
| 5840 | + 7: "color-burn", | |
| 5841 | + 8: "hard-light", | |
| 5842 | + 9: "soft-light", | |
| 5843 | + 10: "difference", | |
| 5844 | + 11: "exclusion", | |
| 5845 | + 12: "hue", | |
| 5846 | + 13: "saturation", | |
| 5847 | + 14: "color", | |
| 5848 | + 15: "luminosity" | |
| 5849 | + }; | |
| 5850 | + return function(mode) { | |
| 5851 | + return blendModeEnums[mode] || ""; | |
| 5852 | + }; | |
| 5853 | + }(); | |
| 5854 | + function SliderEffect(data, elem, container) { | |
| 5855 | + this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 5856 | + } | |
| 5857 | + function AngleEffect(data, elem, container) { | |
| 5858 | + this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 5859 | + } | |
| 5860 | + function ColorEffect(data, elem, container) { | |
| 5861 | + this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container); | |
| 5862 | + } | |
| 5863 | + function PointEffect(data, elem, container) { | |
| 5864 | + this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container); | |
| 5865 | + } | |
| 5866 | + function LayerIndexEffect(data, elem, container) { | |
| 5867 | + this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 5868 | + } | |
| 5869 | + function MaskIndexEffect(data, elem, container) { | |
| 5870 | + this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 5871 | + } | |
| 5872 | + function CheckboxEffect(data, elem, container) { | |
| 5873 | + this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 5874 | + } | |
| 5875 | + function NoValueEffect() { | |
| 5876 | + this.p = {}; | |
| 5877 | + } | |
| 5878 | + function EffectsManager(data, element) { | |
| 5879 | + var effects = data.ef || []; | |
| 5880 | + this.effectElements = []; | |
| 5881 | + var i; | |
| 5882 | + var len = effects.length; | |
| 5883 | + var effectItem; | |
| 5884 | + for (i = 0; i < len; i += 1) { | |
| 5885 | + effectItem = new GroupEffect(effects[i], element); | |
| 5886 | + this.effectElements.push(effectItem); | |
| 5887 | + } | |
| 5888 | + } | |
| 5889 | + function GroupEffect(data, element) { | |
| 5890 | + this.init(data, element); | |
| 5891 | + } | |
| 5892 | + extendPrototype([DynamicPropertyContainer], GroupEffect); | |
| 5893 | + GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties; | |
| 5894 | + GroupEffect.prototype.init = function(data, element) { | |
| 5895 | + this.data = data; | |
| 5896 | + this.effectElements = []; | |
| 5897 | + this.initDynamicPropertyContainer(element); | |
| 5898 | + var i; | |
| 5899 | + var len = this.data.ef.length; | |
| 5900 | + var eff; | |
| 5901 | + var effects = this.data.ef; | |
| 5902 | + for (i = 0; i < len; i += 1) { | |
| 5903 | + eff = null; | |
| 5904 | + switch (effects[i].ty) { | |
| 5905 | + case 0: | |
| 5906 | + eff = new SliderEffect(effects[i], element, this); | |
| 5907 | + break; | |
| 5908 | + case 1: | |
| 5909 | + eff = new AngleEffect(effects[i], element, this); | |
| 5910 | + break; | |
| 5911 | + case 2: | |
| 5912 | + eff = new ColorEffect(effects[i], element, this); | |
| 5913 | + break; | |
| 5914 | + case 3: | |
| 5915 | + eff = new PointEffect(effects[i], element, this); | |
| 5916 | + break; | |
| 5917 | + case 4: | |
| 5918 | + case 7: | |
| 5919 | + eff = new CheckboxEffect(effects[i], element, this); | |
| 5920 | + break; | |
| 5921 | + case 10: | |
| 5922 | + eff = new LayerIndexEffect(effects[i], element, this); | |
| 5923 | + break; | |
| 5924 | + case 11: | |
| 5925 | + eff = new MaskIndexEffect(effects[i], element, this); | |
| 5926 | + break; | |
| 5927 | + case 5: | |
| 5928 | + eff = new EffectsManager(effects[i], element, this); | |
| 5929 | + break; | |
| 5930 | + default: | |
| 5931 | + eff = new NoValueEffect(effects[i], element, this); | |
| 5932 | + break; | |
| 5933 | + } | |
| 5934 | + if (eff) this.effectElements.push(eff); | |
| 5935 | + } | |
| 5936 | + }; | |
| 5937 | + function BaseElement() {} | |
| 5938 | + BaseElement.prototype = { | |
| 5939 | + checkMasks: function checkMasks() { | |
| 5940 | + if (!this.data.hasMask) return false; | |
| 5941 | + var i = 0; | |
| 5942 | + var len = this.data.masksProperties.length; | |
| 5943 | + while (i < len) { | |
| 5944 | + if (this.data.masksProperties[i].mode !== "n" && this.data.masksProperties[i].cl !== false) return true; | |
| 5945 | + i += 1; | |
| 5946 | + } | |
| 5947 | + return false; | |
| 5948 | + }, | |
| 5949 | + initExpressions: function initExpressions() { | |
| 5950 | + var expressionsInterfaces = getExpressionInterfaces(); | |
| 5951 | + if (!expressionsInterfaces) return; | |
| 5952 | + var LayerExpressionInterface = expressionsInterfaces("layer"); | |
| 5953 | + var EffectsExpressionInterface = expressionsInterfaces("effects"); | |
| 5954 | + var ShapeExpressionInterface = expressionsInterfaces("shape"); | |
| 5955 | + var TextExpressionInterface = expressionsInterfaces("text"); | |
| 5956 | + var CompExpressionInterface = expressionsInterfaces("comp"); | |
| 5957 | + this.layerInterface = LayerExpressionInterface(this); | |
| 5958 | + if (this.data.hasMask && this.maskManager) this.layerInterface.registerMaskInterface(this.maskManager); | |
| 5959 | + var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface); | |
| 5960 | + this.layerInterface.registerEffectsInterface(effectsInterface); | |
| 5961 | + if (this.data.ty === 0 || this.data.xt) this.compInterface = CompExpressionInterface(this); | |
| 5962 | + else if (this.data.ty === 4) { | |
| 5963 | + this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface); | |
| 5964 | + this.layerInterface.content = this.layerInterface.shapeInterface; | |
| 5965 | + } else if (this.data.ty === 5) { | |
| 5966 | + this.layerInterface.textInterface = TextExpressionInterface(this); | |
| 5967 | + this.layerInterface.text = this.layerInterface.textInterface; | |
| 5968 | + } | |
| 5969 | + }, | |
| 5970 | + setBlendMode: function setBlendMode() { | |
| 5971 | + var blendModeValue = getBlendMode(this.data.bm); | |
| 5972 | + var elem = this.baseElement || this.layerElement; | |
| 5973 | + elem.style["mix-blend-mode"] = blendModeValue; | |
| 5974 | + }, | |
| 5975 | + initBaseData: function initBaseData(data, globalData, comp) { | |
| 5976 | + this.globalData = globalData; | |
| 5977 | + this.comp = comp; | |
| 5978 | + this.data = data; | |
| 5979 | + this.layerId = createElementID(); | |
| 5980 | + if (!this.data.sr) this.data.sr = 1; | |
| 5981 | + this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties); | |
| 5982 | + }, | |
| 5983 | + getType: function getType() { | |
| 5984 | + return this.type; | |
| 5985 | + }, | |
| 5986 | + sourceRectAtTime: function sourceRectAtTime() {} | |
| 5987 | + }; | |
| 5988 | + /** | |
| 5989 | + * @file | |
| 5990 | + * Handles element's layer frame update. | |
| 5991 | + * Checks layer in point and out point | |
| 5992 | + * | |
| 5993 | + */ | |
| 5994 | + function FrameElement() {} | |
| 5995 | + FrameElement.prototype = { | |
| 5996 | + /** | |
| 5997 | + * @function | |
| 5998 | + * Initializes frame related properties. | |
| 5999 | + * | |
| 6000 | + */ | |
| 6001 | + initFrame: function initFrame() { | |
| 6002 | + this._isFirstFrame = false; | |
| 6003 | + this.dynamicProperties = []; | |
| 6004 | + this._mdf = false; | |
| 6005 | + }, | |
| 6006 | + /** | |
| 6007 | + * @function | |
| 6008 | + * Calculates all dynamic values | |
| 6009 | + * | |
| 6010 | + * @param {number} num | |
| 6011 | + * current frame number in Layer's time | |
| 6012 | + * @param {boolean} isVisible | |
| 6013 | + * if layers is currently in range | |
| 6014 | + * | |
| 6015 | + */ | |
| 6016 | + prepareProperties: function prepareProperties(num, isVisible) { | |
| 6017 | + var i; | |
| 6018 | + var len = this.dynamicProperties.length; | |
| 6019 | + for (i = 0; i < len; i += 1) if (isVisible || this._isParent && this.dynamicProperties[i].propType === "transform") { | |
| 6020 | + this.dynamicProperties[i].getValue(); | |
| 6021 | + if (this.dynamicProperties[i]._mdf) { | |
| 6022 | + this.globalData._mdf = true; | |
| 6023 | + this._mdf = true; | |
| 6024 | + } | |
| 6025 | + } | |
| 6026 | + }, | |
| 6027 | + addDynamicProperty: function addDynamicProperty(prop) { | |
| 6028 | + if (this.dynamicProperties.indexOf(prop) === -1) this.dynamicProperties.push(prop); | |
| 6029 | + } | |
| 6030 | + }; | |
| 6031 | + function FootageElement(data, globalData, comp) { | |
| 6032 | + this.initFrame(); | |
| 6033 | + this.initRenderable(); | |
| 6034 | + this.assetData = globalData.getAssetData(data.refId); | |
| 6035 | + this.footageData = globalData.imageLoader.getAsset(this.assetData); | |
| 6036 | + this.initBaseData(data, globalData, comp); | |
| 6037 | + } | |
| 6038 | + FootageElement.prototype.prepareFrame = function() {}; | |
| 6039 | + extendPrototype([ | |
| 6040 | + RenderableElement, | |
| 6041 | + BaseElement, | |
| 6042 | + FrameElement | |
| 6043 | + ], FootageElement); | |
| 6044 | + FootageElement.prototype.getBaseElement = function() { | |
| 6045 | + return null; | |
| 6046 | + }; | |
| 6047 | + FootageElement.prototype.renderFrame = function() {}; | |
| 6048 | + FootageElement.prototype.destroy = function() {}; | |
| 6049 | + FootageElement.prototype.initExpressions = function() { | |
| 6050 | + var expressionsInterfaces = getExpressionInterfaces(); | |
| 6051 | + if (!expressionsInterfaces) return; | |
| 6052 | + var FootageInterface = expressionsInterfaces("footage"); | |
| 6053 | + this.layerInterface = FootageInterface(this); | |
| 6054 | + }; | |
| 6055 | + FootageElement.prototype.getFootageData = function() { | |
| 6056 | + return this.footageData; | |
| 6057 | + }; | |
| 6058 | + function AudioElement(data, globalData, comp) { | |
| 6059 | + this.initFrame(); | |
| 6060 | + this.initRenderable(); | |
| 6061 | + this.assetData = globalData.getAssetData(data.refId); | |
| 6062 | + this.initBaseData(data, globalData, comp); | |
| 6063 | + this._isPlaying = false; | |
| 6064 | + this._canPlay = false; | |
| 6065 | + var assetPath = this.globalData.getAssetsPath(this.assetData); | |
| 6066 | + this.audio = this.globalData.audioController.createAudio(assetPath); | |
| 6067 | + this._currentTime = 0; | |
| 6068 | + this.globalData.audioController.addAudio(this); | |
| 6069 | + this._volumeMultiplier = 1; | |
| 6070 | + this._volume = 1; | |
| 6071 | + this._previousVolume = null; | |
| 6072 | + this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; | |
| 6073 | + this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : { k: [100] }, 1, .01, this); | |
| 6074 | + } | |
| 6075 | + AudioElement.prototype.prepareFrame = function(num) { | |
| 6076 | + this.prepareRenderableFrame(num, true); | |
| 6077 | + this.prepareProperties(num, true); | |
| 6078 | + if (!this.tm._placeholder) { | |
| 6079 | + var timeRemapped = this.tm.v; | |
| 6080 | + this._currentTime = timeRemapped; | |
| 6081 | + } else this._currentTime = num / this.data.sr; | |
| 6082 | + this._volume = this.lv.v[0]; | |
| 6083 | + var totalVolume = this._volume * this._volumeMultiplier; | |
| 6084 | + if (this._previousVolume !== totalVolume) { | |
| 6085 | + this._previousVolume = totalVolume; | |
| 6086 | + this.audio.volume(totalVolume); | |
| 6087 | + } | |
| 6088 | + }; | |
| 6089 | + extendPrototype([ | |
| 6090 | + RenderableElement, | |
| 6091 | + BaseElement, | |
| 6092 | + FrameElement | |
| 6093 | + ], AudioElement); | |
| 6094 | + AudioElement.prototype.renderFrame = function() { | |
| 6095 | + if (this.isInRange && this._canPlay) { | |
| 6096 | + if (!this._isPlaying) { | |
| 6097 | + this.audio.play(); | |
| 6098 | + this.audio.seek(this._currentTime / this.globalData.frameRate); | |
| 6099 | + this._isPlaying = true; | |
| 6100 | + } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > .1) this.audio.seek(this._currentTime / this.globalData.frameRate); | |
| 6101 | + } | |
| 6102 | + }; | |
| 6103 | + AudioElement.prototype.show = function() {}; | |
| 6104 | + AudioElement.prototype.hide = function() { | |
| 6105 | + this.audio.pause(); | |
| 6106 | + this._isPlaying = false; | |
| 6107 | + }; | |
| 6108 | + AudioElement.prototype.pause = function() { | |
| 6109 | + this.audio.pause(); | |
| 6110 | + this._isPlaying = false; | |
| 6111 | + this._canPlay = false; | |
| 6112 | + }; | |
| 6113 | + AudioElement.prototype.resume = function() { | |
| 6114 | + this._canPlay = true; | |
| 6115 | + }; | |
| 6116 | + AudioElement.prototype.setRate = function(rateValue) { | |
| 6117 | + this.audio.rate(rateValue); | |
| 6118 | + }; | |
| 6119 | + AudioElement.prototype.volume = function(volumeValue) { | |
| 6120 | + this._volumeMultiplier = volumeValue; | |
| 6121 | + this._previousVolume = volumeValue * this._volume; | |
| 6122 | + this.audio.volume(this._previousVolume); | |
| 6123 | + }; | |
| 6124 | + AudioElement.prototype.getBaseElement = function() { | |
| 6125 | + return null; | |
| 6126 | + }; | |
| 6127 | + AudioElement.prototype.destroy = function() {}; | |
| 6128 | + AudioElement.prototype.sourceRectAtTime = function() {}; | |
| 6129 | + AudioElement.prototype.initExpressions = function() {}; | |
| 6130 | + function BaseRenderer() {} | |
| 6131 | + BaseRenderer.prototype.checkLayers = function(num) { | |
| 6132 | + var i; | |
| 6133 | + var len = this.layers.length; | |
| 6134 | + var data; | |
| 6135 | + this.completeLayers = true; | |
| 6136 | + for (i = len - 1; i >= 0; i -= 1) { | |
| 6137 | + if (!this.elements[i]) { | |
| 6138 | + data = this.layers[i]; | |
| 6139 | + if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) this.buildItem(i); | |
| 6140 | + } | |
| 6141 | + this.completeLayers = this.elements[i] ? this.completeLayers : false; | |
| 6142 | + } | |
| 6143 | + this.checkPendingElements(); | |
| 6144 | + }; | |
| 6145 | + BaseRenderer.prototype.createItem = function(layer) { | |
| 6146 | + switch (layer.ty) { | |
| 6147 | + case 2: return this.createImage(layer); | |
| 6148 | + case 0: return this.createComp(layer); | |
| 6149 | + case 1: return this.createSolid(layer); | |
| 6150 | + case 3: return this.createNull(layer); | |
| 6151 | + case 4: return this.createShape(layer); | |
| 6152 | + case 5: return this.createText(layer); | |
| 6153 | + case 6: return this.createAudio(layer); | |
| 6154 | + case 13: return this.createCamera(layer); | |
| 6155 | + case 15: return this.createFootage(layer); | |
| 6156 | + default: return this.createNull(layer); | |
| 6157 | + } | |
| 6158 | + }; | |
| 6159 | + BaseRenderer.prototype.createCamera = function() { | |
| 6160 | + throw new Error("You're using a 3d camera. Try the html renderer."); | |
| 6161 | + }; | |
| 6162 | + BaseRenderer.prototype.createAudio = function(data) { | |
| 6163 | + return new AudioElement(data, this.globalData, this); | |
| 6164 | + }; | |
| 6165 | + BaseRenderer.prototype.createFootage = function(data) { | |
| 6166 | + return new FootageElement(data, this.globalData, this); | |
| 6167 | + }; | |
| 6168 | + BaseRenderer.prototype.buildAllItems = function() { | |
| 6169 | + var i; | |
| 6170 | + var len = this.layers.length; | |
| 6171 | + for (i = 0; i < len; i += 1) this.buildItem(i); | |
| 6172 | + this.checkPendingElements(); | |
| 6173 | + }; | |
| 6174 | + BaseRenderer.prototype.includeLayers = function(newLayers) { | |
| 6175 | + this.completeLayers = false; | |
| 6176 | + var i; | |
| 6177 | + var len = newLayers.length; | |
| 6178 | + var j; | |
| 6179 | + var jLen = this.layers.length; | |
| 6180 | + for (i = 0; i < len; i += 1) { | |
| 6181 | + j = 0; | |
| 6182 | + while (j < jLen) { | |
| 6183 | + if (this.layers[j].id === newLayers[i].id) { | |
| 6184 | + this.layers[j] = newLayers[i]; | |
| 6185 | + break; | |
| 6186 | + } | |
| 6187 | + j += 1; | |
| 6188 | + } | |
| 6189 | + } | |
| 6190 | + }; | |
| 6191 | + BaseRenderer.prototype.setProjectInterface = function(pInterface) { | |
| 6192 | + this.globalData.projectInterface = pInterface; | |
| 6193 | + }; | |
| 6194 | + BaseRenderer.prototype.initItems = function() { | |
| 6195 | + if (!this.globalData.progressiveLoad) this.buildAllItems(); | |
| 6196 | + }; | |
| 6197 | + BaseRenderer.prototype.buildElementParenting = function(element, parentName, hierarchy) { | |
| 6198 | + var elements = this.elements; | |
| 6199 | + var layers = this.layers; | |
| 6200 | + var i = 0; | |
| 6201 | + var len = layers.length; | |
| 6202 | + while (i < len) { | |
| 6203 | + if (layers[i].ind == parentName) if (!elements[i] || elements[i] === true) { | |
| 6204 | + this.buildItem(i); | |
| 6205 | + this.addPendingElement(element); | |
| 6206 | + } else { | |
| 6207 | + hierarchy.push(elements[i]); | |
| 6208 | + elements[i].setAsParent(); | |
| 6209 | + if (layers[i].parent !== void 0) this.buildElementParenting(element, layers[i].parent, hierarchy); | |
| 6210 | + else element.setHierarchy(hierarchy); | |
| 6211 | + } | |
| 6212 | + i += 1; | |
| 6213 | + } | |
| 6214 | + }; | |
| 6215 | + BaseRenderer.prototype.addPendingElement = function(element) { | |
| 6216 | + this.pendingElements.push(element); | |
| 6217 | + }; | |
| 6218 | + BaseRenderer.prototype.searchExtraCompositions = function(assets) { | |
| 6219 | + var i; | |
| 6220 | + var len = assets.length; | |
| 6221 | + for (i = 0; i < len; i += 1) if (assets[i].xt) { | |
| 6222 | + var comp = this.createComp(assets[i]); | |
| 6223 | + comp.initExpressions(); | |
| 6224 | + this.globalData.projectInterface.registerComposition(comp); | |
| 6225 | + } | |
| 6226 | + }; | |
| 6227 | + BaseRenderer.prototype.getElementById = function(ind) { | |
| 6228 | + var i; | |
| 6229 | + var len = this.elements.length; | |
| 6230 | + for (i = 0; i < len; i += 1) if (this.elements[i].data.ind === ind) return this.elements[i]; | |
| 6231 | + return null; | |
| 6232 | + }; | |
| 6233 | + BaseRenderer.prototype.getElementByPath = function(path) { | |
| 6234 | + var pathValue = path.shift(); | |
| 6235 | + var element; | |
| 6236 | + if (typeof pathValue === "number") element = this.elements[pathValue]; | |
| 6237 | + else { | |
| 6238 | + var i; | |
| 6239 | + var len = this.elements.length; | |
| 6240 | + for (i = 0; i < len; i += 1) if (this.elements[i].data.nm === pathValue) { | |
| 6241 | + element = this.elements[i]; | |
| 6242 | + break; | |
| 6243 | + } | |
| 6244 | + } | |
| 6245 | + if (path.length === 0) return element; | |
| 6246 | + return element.getElementByPath(path); | |
| 6247 | + }; | |
| 6248 | + BaseRenderer.prototype.setupGlobalData = function(animData, fontsContainer) { | |
| 6249 | + this.globalData.fontManager = new FontManager(); | |
| 6250 | + this.globalData.slotManager = slotFactory(animData); | |
| 6251 | + this.globalData.fontManager.addChars(animData.chars); | |
| 6252 | + this.globalData.fontManager.addFonts(animData.fonts, fontsContainer); | |
| 6253 | + this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem); | |
| 6254 | + this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem); | |
| 6255 | + this.globalData.imageLoader = this.animationItem.imagePreloader; | |
| 6256 | + this.globalData.audioController = this.animationItem.audioController; | |
| 6257 | + this.globalData.frameId = 0; | |
| 6258 | + this.globalData.frameRate = animData.fr; | |
| 6259 | + this.globalData.nm = animData.nm; | |
| 6260 | + this.globalData.compSize = { | |
| 6261 | + w: animData.w, | |
| 6262 | + h: animData.h | |
| 6263 | + }; | |
| 6264 | + }; | |
| 6265 | + var effectTypes = { TRANSFORM_EFFECT: "transformEFfect" }; | |
| 6266 | + function TransformElement() {} | |
| 6267 | + TransformElement.prototype = { | |
| 6268 | + initTransform: function initTransform() { | |
| 6269 | + var mat = new Matrix(); | |
| 6270 | + this.finalTransform = { | |
| 6271 | + mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 }, | |
| 6272 | + _matMdf: false, | |
| 6273 | + _localMatMdf: false, | |
| 6274 | + _opMdf: false, | |
| 6275 | + mat, | |
| 6276 | + localMat: mat, | |
| 6277 | + localOpacity: 1 | |
| 6278 | + }; | |
| 6279 | + if (this.data.ao) this.finalTransform.mProp.autoOriented = true; | |
| 6280 | + if (this.data.ty !== 11) {} | |
| 6281 | + }, | |
| 6282 | + renderTransform: function renderTransform() { | |
| 6283 | + this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame; | |
| 6284 | + this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame; | |
| 6285 | + if (this.hierarchy) { | |
| 6286 | + var mat; | |
| 6287 | + var finalMat = this.finalTransform.mat; | |
| 6288 | + var i = 0; | |
| 6289 | + var len = this.hierarchy.length; | |
| 6290 | + if (!this.finalTransform._matMdf) while (i < len) { | |
| 6291 | + if (this.hierarchy[i].finalTransform.mProp._mdf) { | |
| 6292 | + this.finalTransform._matMdf = true; | |
| 6293 | + break; | |
| 6294 | + } | |
| 6295 | + i += 1; | |
| 6296 | + } | |
| 6297 | + if (this.finalTransform._matMdf) { | |
| 6298 | + mat = this.finalTransform.mProp.v.props; | |
| 6299 | + finalMat.cloneFromProps(mat); | |
| 6300 | + for (i = 0; i < len; i += 1) finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v); | |
| 6301 | + } | |
| 6302 | + } | |
| 6303 | + if (!this.localTransforms || this.finalTransform._matMdf) this.finalTransform._localMatMdf = this.finalTransform._matMdf; | |
| 6304 | + if (this.finalTransform._opMdf) this.finalTransform.localOpacity = this.finalTransform.mProp.o.v; | |
| 6305 | + }, | |
| 6306 | + renderLocalTransform: function renderLocalTransform() { | |
| 6307 | + if (this.localTransforms) { | |
| 6308 | + var i = 0; | |
| 6309 | + var len = this.localTransforms.length; | |
| 6310 | + this.finalTransform._localMatMdf = this.finalTransform._matMdf; | |
| 6311 | + if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) while (i < len) { | |
| 6312 | + if (this.localTransforms[i]._mdf) this.finalTransform._localMatMdf = true; | |
| 6313 | + if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) { | |
| 6314 | + this.finalTransform.localOpacity = this.finalTransform.mProp.o.v; | |
| 6315 | + this.finalTransform._opMdf = true; | |
| 6316 | + } | |
| 6317 | + i += 1; | |
| 6318 | + } | |
| 6319 | + if (this.finalTransform._localMatMdf) { | |
| 6320 | + var localMat = this.finalTransform.localMat; | |
| 6321 | + this.localTransforms[0].matrix.clone(localMat); | |
| 6322 | + for (i = 1; i < len; i += 1) { | |
| 6323 | + var lmat = this.localTransforms[i].matrix; | |
| 6324 | + localMat.multiply(lmat); | |
| 6325 | + } | |
| 6326 | + localMat.multiply(this.finalTransform.mat); | |
| 6327 | + } | |
| 6328 | + if (this.finalTransform._opMdf) { | |
| 6329 | + var localOp = this.finalTransform.localOpacity; | |
| 6330 | + for (i = 0; i < len; i += 1) localOp *= this.localTransforms[i].opacity * .01; | |
| 6331 | + this.finalTransform.localOpacity = localOp; | |
| 6332 | + } | |
| 6333 | + } | |
| 6334 | + }, | |
| 6335 | + searchEffectTransforms: function searchEffectTransforms() { | |
| 6336 | + if (this.renderableEffectsManager) { | |
| 6337 | + var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT); | |
| 6338 | + if (transformEffects.length) { | |
| 6339 | + this.localTransforms = []; | |
| 6340 | + this.finalTransform.localMat = new Matrix(); | |
| 6341 | + var i = 0; | |
| 6342 | + var len = transformEffects.length; | |
| 6343 | + for (i = 0; i < len; i += 1) this.localTransforms.push(transformEffects[i]); | |
| 6344 | + } | |
| 6345 | + } | |
| 6346 | + }, | |
| 6347 | + globalToLocal: function globalToLocal(pt) { | |
| 6348 | + var transforms = []; | |
| 6349 | + transforms.push(this.finalTransform); | |
| 6350 | + var flag = true; | |
| 6351 | + var comp = this.comp; | |
| 6352 | + while (flag) if (comp.finalTransform) { | |
| 6353 | + if (comp.data.hasMask) transforms.splice(0, 0, comp.finalTransform); | |
| 6354 | + comp = comp.comp; | |
| 6355 | + } else flag = false; | |
| 6356 | + var i; | |
| 6357 | + var len = transforms.length; | |
| 6358 | + var ptNew; | |
| 6359 | + for (i = 0; i < len; i += 1) { | |
| 6360 | + ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); | |
| 6361 | + pt = [ | |
| 6362 | + pt[0] - ptNew[0], | |
| 6363 | + pt[1] - ptNew[1], | |
| 6364 | + 0 | |
| 6365 | + ]; | |
| 6366 | + } | |
| 6367 | + return pt; | |
| 6368 | + }, | |
| 6369 | + mHelper: new Matrix() | |
| 6370 | + }; | |
| 6371 | + function MaskElement(data, element, globalData) { | |
| 6372 | + this.data = data; | |
| 6373 | + this.element = element; | |
| 6374 | + this.globalData = globalData; | |
| 6375 | + this.storedData = []; | |
| 6376 | + this.masksProperties = this.data.masksProperties || []; | |
| 6377 | + this.maskElement = null; | |
| 6378 | + var defs = this.globalData.defs; | |
| 6379 | + var i; | |
| 6380 | + var len = this.masksProperties ? this.masksProperties.length : 0; | |
| 6381 | + this.viewData = createSizedArray(len); | |
| 6382 | + this.solidPath = ""; | |
| 6383 | + var path; | |
| 6384 | + var properties = this.masksProperties; | |
| 6385 | + var count = 0; | |
| 6386 | + var currentMasks = []; | |
| 6387 | + var j; | |
| 6388 | + var jLen; | |
| 6389 | + var layerId = createElementID(); | |
| 6390 | + var rect; | |
| 6391 | + var expansor; | |
| 6392 | + var feMorph; | |
| 6393 | + var x; | |
| 6394 | + var maskType = "clipPath"; | |
| 6395 | + var maskRef = "clip-path"; | |
| 6396 | + for (i = 0; i < len; i += 1) { | |
| 6397 | + if (properties[i].mode !== "a" && properties[i].mode !== "n" || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) { | |
| 6398 | + maskType = "mask"; | |
| 6399 | + maskRef = "mask"; | |
| 6400 | + } | |
| 6401 | + if ((properties[i].mode === "s" || properties[i].mode === "i") && count === 0) { | |
| 6402 | + rect = createNS("rect"); | |
| 6403 | + rect.setAttribute("fill", "#ffffff"); | |
| 6404 | + rect.setAttribute("width", this.element.comp.data.w || 0); | |
| 6405 | + rect.setAttribute("height", this.element.comp.data.h || 0); | |
| 6406 | + currentMasks.push(rect); | |
| 6407 | + } else rect = null; | |
| 6408 | + path = createNS("path"); | |
| 6409 | + if (properties[i].mode === "n") { | |
| 6410 | + this.viewData[i] = { | |
| 6411 | + op: PropertyFactory.getProp(this.element, properties[i].o, 0, .01, this.element), | |
| 6412 | + prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), | |
| 6413 | + elem: path, | |
| 6414 | + lastPath: "" | |
| 6415 | + }; | |
| 6416 | + defs.appendChild(path); | |
| 6417 | + } else { | |
| 6418 | + count += 1; | |
| 6419 | + path.setAttribute("fill", properties[i].mode === "s" ? "#000000" : "#ffffff"); | |
| 6420 | + path.setAttribute("clip-rule", "nonzero"); | |
| 6421 | + var filterID; | |
| 6422 | + if (properties[i].x.k !== 0) { | |
| 6423 | + maskType = "mask"; | |
| 6424 | + maskRef = "mask"; | |
| 6425 | + x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element); | |
| 6426 | + filterID = createElementID(); | |
| 6427 | + expansor = createNS("filter"); | |
| 6428 | + expansor.setAttribute("id", filterID); | |
| 6429 | + feMorph = createNS("feMorphology"); | |
| 6430 | + feMorph.setAttribute("operator", "erode"); | |
| 6431 | + feMorph.setAttribute("in", "SourceGraphic"); | |
| 6432 | + feMorph.setAttribute("radius", "0"); | |
| 6433 | + expansor.appendChild(feMorph); | |
| 6434 | + defs.appendChild(expansor); | |
| 6435 | + path.setAttribute("stroke", properties[i].mode === "s" ? "#000000" : "#ffffff"); | |
| 6436 | + } else { | |
| 6437 | + feMorph = null; | |
| 6438 | + x = null; | |
| 6439 | + } | |
| 6440 | + this.storedData[i] = { | |
| 6441 | + elem: path, | |
| 6442 | + x, | |
| 6443 | + expan: feMorph, | |
| 6444 | + lastPath: "", | |
| 6445 | + lastOperator: "", | |
| 6446 | + filterId: filterID, | |
| 6447 | + lastRadius: 0 | |
| 6448 | + }; | |
| 6449 | + if (properties[i].mode === "i") { | |
| 6450 | + jLen = currentMasks.length; | |
| 6451 | + var g = createNS("g"); | |
| 6452 | + for (j = 0; j < jLen; j += 1) g.appendChild(currentMasks[j]); | |
| 6453 | + var mask = createNS("mask"); | |
| 6454 | + mask.setAttribute("mask-type", "alpha"); | |
| 6455 | + mask.setAttribute("id", layerId + "_" + count); | |
| 6456 | + mask.appendChild(path); | |
| 6457 | + defs.appendChild(mask); | |
| 6458 | + g.setAttribute("mask", "url(" + getLocationHref() + "#" + layerId + "_" + count + ")"); | |
| 6459 | + currentMasks.length = 0; | |
| 6460 | + currentMasks.push(g); | |
| 6461 | + } else currentMasks.push(path); | |
| 6462 | + if (properties[i].inv && !this.solidPath) this.solidPath = this.createLayerSolidPath(); | |
| 6463 | + this.viewData[i] = { | |
| 6464 | + elem: path, | |
| 6465 | + lastPath: "", | |
| 6466 | + op: PropertyFactory.getProp(this.element, properties[i].o, 0, .01, this.element), | |
| 6467 | + prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), | |
| 6468 | + invRect: rect | |
| 6469 | + }; | |
| 6470 | + if (!this.viewData[i].prop.k) this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]); | |
| 6471 | + } | |
| 6472 | + } | |
| 6473 | + this.maskElement = createNS(maskType); | |
| 6474 | + len = currentMasks.length; | |
| 6475 | + for (i = 0; i < len; i += 1) this.maskElement.appendChild(currentMasks[i]); | |
| 6476 | + if (count > 0) { | |
| 6477 | + this.maskElement.setAttribute("id", layerId); | |
| 6478 | + this.element.maskedElement.setAttribute(maskRef, "url(" + getLocationHref() + "#" + layerId + ")"); | |
| 6479 | + defs.appendChild(this.maskElement); | |
| 6480 | + } | |
| 6481 | + if (this.viewData.length) this.element.addRenderableComponent(this); | |
| 6482 | + } | |
| 6483 | + MaskElement.prototype.getMaskProperty = function(pos) { | |
| 6484 | + return this.viewData[pos].prop; | |
| 6485 | + }; | |
| 6486 | + MaskElement.prototype.renderFrame = function(isFirstFrame) { | |
| 6487 | + var finalMat = this.element.finalTransform.mat; | |
| 6488 | + var i; | |
| 6489 | + var len = this.masksProperties.length; | |
| 6490 | + for (i = 0; i < len; i += 1) { | |
| 6491 | + if (this.viewData[i].prop._mdf || isFirstFrame) this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]); | |
| 6492 | + if (this.viewData[i].op._mdf || isFirstFrame) this.viewData[i].elem.setAttribute("fill-opacity", this.viewData[i].op.v); | |
| 6493 | + if (this.masksProperties[i].mode !== "n") { | |
| 6494 | + if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) this.viewData[i].invRect.setAttribute("transform", finalMat.getInverseMatrix().to2dCSS()); | |
| 6495 | + if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) { | |
| 6496 | + var feMorph = this.storedData[i].expan; | |
| 6497 | + if (this.storedData[i].x.v < 0) { | |
| 6498 | + if (this.storedData[i].lastOperator !== "erode") { | |
| 6499 | + this.storedData[i].lastOperator = "erode"; | |
| 6500 | + this.storedData[i].elem.setAttribute("filter", "url(" + getLocationHref() + "#" + this.storedData[i].filterId + ")"); | |
| 6501 | + } | |
| 6502 | + feMorph.setAttribute("radius", -this.storedData[i].x.v); | |
| 6503 | + } else { | |
| 6504 | + if (this.storedData[i].lastOperator !== "dilate") { | |
| 6505 | + this.storedData[i].lastOperator = "dilate"; | |
| 6506 | + this.storedData[i].elem.setAttribute("filter", null); | |
| 6507 | + } | |
| 6508 | + this.storedData[i].elem.setAttribute("stroke-width", this.storedData[i].x.v * 2); | |
| 6509 | + } | |
| 6510 | + } | |
| 6511 | + } | |
| 6512 | + } | |
| 6513 | + }; | |
| 6514 | + MaskElement.prototype.getMaskelement = function() { | |
| 6515 | + return this.maskElement; | |
| 6516 | + }; | |
| 6517 | + MaskElement.prototype.createLayerSolidPath = function() { | |
| 6518 | + var path = "M0,0 "; | |
| 6519 | + path += " h" + this.globalData.compSize.w; | |
| 6520 | + path += " v" + this.globalData.compSize.h; | |
| 6521 | + path += " h-" + this.globalData.compSize.w; | |
| 6522 | + path += " v-" + this.globalData.compSize.h + " "; | |
| 6523 | + return path; | |
| 6524 | + }; | |
| 6525 | + MaskElement.prototype.drawPath = function(pathData, pathNodes, viewData) { | |
| 6526 | + var pathString = " M" + pathNodes.v[0][0] + "," + pathNodes.v[0][1]; | |
| 6527 | + var i; | |
| 6528 | + var len = pathNodes._length; | |
| 6529 | + for (i = 1; i < len; i += 1) 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]; | |
| 6530 | + if (pathNodes.c && len > 1) 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]; | |
| 6531 | + if (viewData.lastPath !== pathString) { | |
| 6532 | + var pathShapeValue = ""; | |
| 6533 | + if (viewData.elem) { | |
| 6534 | + if (pathNodes.c) pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString; | |
| 6535 | + viewData.elem.setAttribute("d", pathShapeValue); | |
| 6536 | + } | |
| 6537 | + viewData.lastPath = pathString; | |
| 6538 | + } | |
| 6539 | + }; | |
| 6540 | + MaskElement.prototype.destroy = function() { | |
| 6541 | + this.element = null; | |
| 6542 | + this.globalData = null; | |
| 6543 | + this.maskElement = null; | |
| 6544 | + this.data = null; | |
| 6545 | + this.masksProperties = null; | |
| 6546 | + }; | |
| 6547 | + var filtersFactory = function() { | |
| 6548 | + var ob = {}; | |
| 6549 | + ob.createFilter = createFilter; | |
| 6550 | + ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter; | |
| 6551 | + function createFilter(filId, skipCoordinates) { | |
| 6552 | + var fil = createNS("filter"); | |
| 6553 | + fil.setAttribute("id", filId); | |
| 6554 | + if (skipCoordinates !== true) { | |
| 6555 | + fil.setAttribute("filterUnits", "objectBoundingBox"); | |
| 6556 | + fil.setAttribute("x", "0%"); | |
| 6557 | + fil.setAttribute("y", "0%"); | |
| 6558 | + fil.setAttribute("width", "100%"); | |
| 6559 | + fil.setAttribute("height", "100%"); | |
| 6560 | + } | |
| 6561 | + return fil; | |
| 6562 | + } | |
| 6563 | + function createAlphaToLuminanceFilter() { | |
| 6564 | + var feColorMatrix = createNS("feColorMatrix"); | |
| 6565 | + feColorMatrix.setAttribute("type", "matrix"); | |
| 6566 | + feColorMatrix.setAttribute("color-interpolation-filters", "sRGB"); | |
| 6567 | + feColorMatrix.setAttribute("values", "0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"); | |
| 6568 | + return feColorMatrix; | |
| 6569 | + } | |
| 6570 | + return ob; | |
| 6571 | + }(); | |
| 6572 | + var featureSupport = function() { | |
| 6573 | + var ob = { | |
| 6574 | + maskType: true, | |
| 6575 | + svgLumaHidden: true, | |
| 6576 | + offscreenCanvas: typeof OffscreenCanvas !== "undefined" | |
| 6577 | + }; | |
| 6578 | + 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)) ob.maskType = false; | |
| 6579 | + if (/firefox/i.test(navigator.userAgent)) ob.svgLumaHidden = false; | |
| 6580 | + return ob; | |
| 6581 | + }(); | |
| 6582 | + var registeredEffects$1 = {}; | |
| 6583 | + var idPrefix = "filter_result_"; | |
| 6584 | + function SVGEffects(elem) { | |
| 6585 | + var i; | |
| 6586 | + var source = "SourceGraphic"; | |
| 6587 | + var len = elem.data.ef ? elem.data.ef.length : 0; | |
| 6588 | + var filId = createElementID(); | |
| 6589 | + var fil = filtersFactory.createFilter(filId, true); | |
| 6590 | + var count = 0; | |
| 6591 | + this.filters = []; | |
| 6592 | + var filterManager; | |
| 6593 | + for (i = 0; i < len; i += 1) { | |
| 6594 | + filterManager = null; | |
| 6595 | + var type = elem.data.ef[i].ty; | |
| 6596 | + if (registeredEffects$1[type]) { | |
| 6597 | + var Effect = registeredEffects$1[type].effect; | |
| 6598 | + filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source); | |
| 6599 | + source = idPrefix + count; | |
| 6600 | + if (registeredEffects$1[type].countsAsEffect) count += 1; | |
| 6601 | + } | |
| 6602 | + if (filterManager) this.filters.push(filterManager); | |
| 6603 | + } | |
| 6604 | + if (count) { | |
| 6605 | + elem.globalData.defs.appendChild(fil); | |
| 6606 | + elem.layerElement.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); | |
| 6607 | + } | |
| 6608 | + if (this.filters.length) elem.addRenderableComponent(this); | |
| 6609 | + } | |
| 6610 | + SVGEffects.prototype.renderFrame = function(_isFirstFrame) { | |
| 6611 | + var i; | |
| 6612 | + var len = this.filters.length; | |
| 6613 | + for (i = 0; i < len; i += 1) this.filters[i].renderFrame(_isFirstFrame); | |
| 6614 | + }; | |
| 6615 | + SVGEffects.prototype.getEffects = function(type) { | |
| 6616 | + var i; | |
| 6617 | + var len = this.filters.length; | |
| 6618 | + var effects = []; | |
| 6619 | + for (i = 0; i < len; i += 1) if (this.filters[i].type === type) effects.push(this.filters[i]); | |
| 6620 | + return effects; | |
| 6621 | + }; | |
| 6622 | + function registerEffect$1(id, effect, countsAsEffect) { | |
| 6623 | + registeredEffects$1[id] = { | |
| 6624 | + effect, | |
| 6625 | + countsAsEffect | |
| 6626 | + }; | |
| 6627 | + } | |
| 6628 | + function SVGBaseElement() {} | |
| 6629 | + SVGBaseElement.prototype = { | |
| 6630 | + initRendererElement: function initRendererElement() { | |
| 6631 | + this.layerElement = createNS("g"); | |
| 6632 | + }, | |
| 6633 | + createContainerElements: function createContainerElements() { | |
| 6634 | + this.matteElement = createNS("g"); | |
| 6635 | + this.transformedElement = this.layerElement; | |
| 6636 | + this.maskedElement = this.layerElement; | |
| 6637 | + this._sizeChanged = false; | |
| 6638 | + var layerElementParent = null; | |
| 6639 | + if (this.data.td) { | |
| 6640 | + this.matteMasks = {}; | |
| 6641 | + var gg = createNS("g"); | |
| 6642 | + gg.setAttribute("id", this.layerId); | |
| 6643 | + gg.appendChild(this.layerElement); | |
| 6644 | + layerElementParent = gg; | |
| 6645 | + this.globalData.defs.appendChild(gg); | |
| 6646 | + } else if (this.data.tt) { | |
| 6647 | + this.matteElement.appendChild(this.layerElement); | |
| 6648 | + layerElementParent = this.matteElement; | |
| 6649 | + this.baseElement = this.matteElement; | |
| 6650 | + } else this.baseElement = this.layerElement; | |
| 6651 | + if (this.data.ln) this.layerElement.setAttribute("id", this.data.ln); | |
| 6652 | + if (this.data.cl) this.layerElement.setAttribute("class", this.data.cl); | |
| 6653 | + if (this.data.ty === 0 && !this.data.hd) { | |
| 6654 | + var cp = createNS("clipPath"); | |
| 6655 | + var pt = createNS("path"); | |
| 6656 | + pt.setAttribute("d", "M0,0 L" + this.data.w + ",0 L" + this.data.w + "," + this.data.h + " L0," + this.data.h + "z"); | |
| 6657 | + var clipId = createElementID(); | |
| 6658 | + cp.setAttribute("id", clipId); | |
| 6659 | + cp.appendChild(pt); | |
| 6660 | + this.globalData.defs.appendChild(cp); | |
| 6661 | + if (this.checkMasks()) { | |
| 6662 | + var cpGroup = createNS("g"); | |
| 6663 | + cpGroup.setAttribute("clip-path", "url(" + getLocationHref() + "#" + clipId + ")"); | |
| 6664 | + cpGroup.appendChild(this.layerElement); | |
| 6665 | + this.transformedElement = cpGroup; | |
| 6666 | + if (layerElementParent) layerElementParent.appendChild(this.transformedElement); | |
| 6667 | + else this.baseElement = this.transformedElement; | |
| 6668 | + } else this.layerElement.setAttribute("clip-path", "url(" + getLocationHref() + "#" + clipId + ")"); | |
| 6669 | + } | |
| 6670 | + if (this.data.bm !== 0) this.setBlendMode(); | |
| 6671 | + }, | |
| 6672 | + renderElement: function renderElement() { | |
| 6673 | + if (this.finalTransform._localMatMdf) this.transformedElement.setAttribute("transform", this.finalTransform.localMat.to2dCSS()); | |
| 6674 | + if (this.finalTransform._opMdf) this.transformedElement.setAttribute("opacity", this.finalTransform.localOpacity); | |
| 6675 | + }, | |
| 6676 | + destroyBaseElement: function destroyBaseElement() { | |
| 6677 | + this.layerElement = null; | |
| 6678 | + this.matteElement = null; | |
| 6679 | + this.maskManager.destroy(); | |
| 6680 | + }, | |
| 6681 | + getBaseElement: function getBaseElement() { | |
| 6682 | + if (this.data.hd) return null; | |
| 6683 | + return this.baseElement; | |
| 6684 | + }, | |
| 6685 | + createRenderableComponents: function createRenderableComponents() { | |
| 6686 | + this.maskManager = new MaskElement(this.data, this, this.globalData); | |
| 6687 | + this.renderableEffectsManager = new SVGEffects(this); | |
| 6688 | + this.searchEffectTransforms(); | |
| 6689 | + }, | |
| 6690 | + getMatte: function getMatte(matteType) { | |
| 6691 | + if (!this.matteMasks) this.matteMasks = {}; | |
| 6692 | + if (!this.matteMasks[matteType]) { | |
| 6693 | + var id = this.layerId + "_" + matteType; | |
| 6694 | + var filId; | |
| 6695 | + var fil; | |
| 6696 | + var useElement; | |
| 6697 | + var gg; | |
| 6698 | + if (matteType === 1 || matteType === 3) { | |
| 6699 | + var masker = createNS("mask"); | |
| 6700 | + masker.setAttribute("id", id); | |
| 6701 | + masker.setAttribute("mask-type", matteType === 3 ? "luminance" : "alpha"); | |
| 6702 | + useElement = createNS("use"); | |
| 6703 | + useElement.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#" + this.layerId); | |
| 6704 | + masker.appendChild(useElement); | |
| 6705 | + this.globalData.defs.appendChild(masker); | |
| 6706 | + if (!featureSupport.maskType && matteType === 1) { | |
| 6707 | + masker.setAttribute("mask-type", "luminance"); | |
| 6708 | + filId = createElementID(); | |
| 6709 | + fil = filtersFactory.createFilter(filId); | |
| 6710 | + this.globalData.defs.appendChild(fil); | |
| 6711 | + fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); | |
| 6712 | + gg = createNS("g"); | |
| 6713 | + gg.appendChild(useElement); | |
| 6714 | + masker.appendChild(gg); | |
| 6715 | + gg.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); | |
| 6716 | + } | |
| 6717 | + } else if (matteType === 2) { | |
| 6718 | + var maskGroup = createNS("mask"); | |
| 6719 | + maskGroup.setAttribute("id", id); | |
| 6720 | + maskGroup.setAttribute("mask-type", "alpha"); | |
| 6721 | + var maskGrouper = createNS("g"); | |
| 6722 | + maskGroup.appendChild(maskGrouper); | |
| 6723 | + filId = createElementID(); | |
| 6724 | + fil = filtersFactory.createFilter(filId); | |
| 6725 | + var feCTr = createNS("feComponentTransfer"); | |
| 6726 | + feCTr.setAttribute("in", "SourceGraphic"); | |
| 6727 | + fil.appendChild(feCTr); | |
| 6728 | + var feFunc = createNS("feFuncA"); | |
| 6729 | + feFunc.setAttribute("type", "table"); | |
| 6730 | + feFunc.setAttribute("tableValues", "1.0 0.0"); | |
| 6731 | + feCTr.appendChild(feFunc); | |
| 6732 | + this.globalData.defs.appendChild(fil); | |
| 6733 | + var alphaRect = createNS("rect"); | |
| 6734 | + alphaRect.setAttribute("width", this.comp.data.w); | |
| 6735 | + alphaRect.setAttribute("height", this.comp.data.h); | |
| 6736 | + alphaRect.setAttribute("x", "0"); | |
| 6737 | + alphaRect.setAttribute("y", "0"); | |
| 6738 | + alphaRect.setAttribute("fill", "#ffffff"); | |
| 6739 | + alphaRect.setAttribute("opacity", "0"); | |
| 6740 | + maskGrouper.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); | |
| 6741 | + maskGrouper.appendChild(alphaRect); | |
| 6742 | + useElement = createNS("use"); | |
| 6743 | + useElement.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#" + this.layerId); | |
| 6744 | + maskGrouper.appendChild(useElement); | |
| 6745 | + if (!featureSupport.maskType) { | |
| 6746 | + maskGroup.setAttribute("mask-type", "luminance"); | |
| 6747 | + fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); | |
| 6748 | + gg = createNS("g"); | |
| 6749 | + maskGrouper.appendChild(alphaRect); | |
| 6750 | + gg.appendChild(this.layerElement); | |
| 6751 | + maskGrouper.appendChild(gg); | |
| 6752 | + } | |
| 6753 | + this.globalData.defs.appendChild(maskGroup); | |
| 6754 | + } | |
| 6755 | + this.matteMasks[matteType] = id; | |
| 6756 | + } | |
| 6757 | + return this.matteMasks[matteType]; | |
| 6758 | + }, | |
| 6759 | + setMatte: function setMatte(id) { | |
| 6760 | + if (!this.matteElement) return; | |
| 6761 | + this.matteElement.setAttribute("mask", "url(" + getLocationHref() + "#" + id + ")"); | |
| 6762 | + } | |
| 6763 | + }; | |
| 6764 | + /** | |
| 6765 | + * @file | |
| 6766 | + * Handles AE's layer parenting property. | |
| 6767 | + * | |
| 6768 | + */ | |
| 6769 | + function HierarchyElement() {} | |
| 6770 | + HierarchyElement.prototype = { | |
| 6771 | + /** | |
| 6772 | + * @function | |
| 6773 | + * Initializes hierarchy properties | |
| 6774 | + * | |
| 6775 | + */ | |
| 6776 | + initHierarchy: function initHierarchy() { | |
| 6777 | + this.hierarchy = []; | |
| 6778 | + this._isParent = false; | |
| 6779 | + this.checkParenting(); | |
| 6780 | + }, | |
| 6781 | + /** | |
| 6782 | + * @function | |
| 6783 | + * Sets layer's hierarchy. | |
| 6784 | + * @param {array} hierarch | |
| 6785 | + * layer's parent list | |
| 6786 | + * | |
| 6787 | + */ | |
| 6788 | + setHierarchy: function setHierarchy(hierarchy) { | |
| 6789 | + this.hierarchy = hierarchy; | |
| 6790 | + }, | |
| 6791 | + /** | |
| 6792 | + * @function | |
| 6793 | + * Sets layer as parent. | |
| 6794 | + * | |
| 6795 | + */ | |
| 6796 | + setAsParent: function setAsParent() { | |
| 6797 | + this._isParent = true; | |
| 6798 | + }, | |
| 6799 | + /** | |
| 6800 | + * @function | |
| 6801 | + * Searches layer's parenting chain | |
| 6802 | + * | |
| 6803 | + */ | |
| 6804 | + checkParenting: function checkParenting() { | |
| 6805 | + if (this.data.parent !== void 0) this.comp.buildElementParenting(this, this.data.parent, []); | |
| 6806 | + } | |
| 6807 | + }; | |
| 6808 | + function RenderableDOMElement() {} | |
| 6809 | + (function() { | |
| 6810 | + extendPrototype([RenderableElement, createProxyFunction({ | |
| 6811 | + initElement: function initElement(data, globalData, comp) { | |
| 6812 | + this.initFrame(); | |
| 6813 | + this.initBaseData(data, globalData, comp); | |
| 6814 | + this.initTransform(data, globalData, comp); | |
| 6815 | + this.initHierarchy(); | |
| 6816 | + this.initRenderable(); | |
| 6817 | + this.initRendererElement(); | |
| 6818 | + this.createContainerElements(); | |
| 6819 | + this.createRenderableComponents(); | |
| 6820 | + this.createContent(); | |
| 6821 | + this.hide(); | |
| 6822 | + }, | |
| 6823 | + hide: function hide() { | |
| 6824 | + if (!this.hidden && (!this.isInRange || this.isTransparent)) { | |
| 6825 | + var elem = this.baseElement || this.layerElement; | |
| 6826 | + elem.style.display = "none"; | |
| 6827 | + this.hidden = true; | |
| 6828 | + } | |
| 6829 | + }, | |
| 6830 | + show: function show() { | |
| 6831 | + if (this.isInRange && !this.isTransparent) { | |
| 6832 | + if (!this.data.hd) { | |
| 6833 | + var elem = this.baseElement || this.layerElement; | |
| 6834 | + elem.style.display = "block"; | |
| 6835 | + } | |
| 6836 | + this.hidden = false; | |
| 6837 | + this._isFirstFrame = true; | |
| 6838 | + } | |
| 6839 | + }, | |
| 6840 | + renderFrame: function renderFrame() { | |
| 6841 | + if (this.data.hd || this.hidden) return; | |
| 6842 | + this.renderTransform(); | |
| 6843 | + this.renderRenderable(); | |
| 6844 | + this.renderLocalTransform(); | |
| 6845 | + this.renderElement(); | |
| 6846 | + this.renderInnerContent(); | |
| 6847 | + if (this._isFirstFrame) this._isFirstFrame = false; | |
| 6848 | + }, | |
| 6849 | + renderInnerContent: function renderInnerContent() {}, | |
| 6850 | + prepareFrame: function prepareFrame(num) { | |
| 6851 | + this._mdf = false; | |
| 6852 | + this.prepareRenderableFrame(num); | |
| 6853 | + this.prepareProperties(num, this.isInRange); | |
| 6854 | + this.checkTransparency(); | |
| 6855 | + }, | |
| 6856 | + destroy: function destroy() { | |
| 6857 | + this.innerElem = null; | |
| 6858 | + this.destroyBaseElement(); | |
| 6859 | + } | |
| 6860 | + })], RenderableDOMElement); | |
| 6861 | + })(); | |
| 6862 | + function IImageElement(data, globalData, comp) { | |
| 6863 | + this.assetData = globalData.getAssetData(data.refId); | |
| 6864 | + if (this.assetData && this.assetData.sid) this.assetData = globalData.slotManager.getProp(this.assetData); | |
| 6865 | + this.initElement(data, globalData, comp); | |
| 6866 | + this.sourceRect = { | |
| 6867 | + top: 0, | |
| 6868 | + left: 0, | |
| 6869 | + width: this.assetData.w, | |
| 6870 | + height: this.assetData.h | |
| 6871 | + }; | |
| 6872 | + } | |
| 6873 | + extendPrototype([ | |
| 6874 | + BaseElement, | |
| 6875 | + TransformElement, | |
| 6876 | + SVGBaseElement, | |
| 6877 | + HierarchyElement, | |
| 6878 | + FrameElement, | |
| 6879 | + RenderableDOMElement | |
| 6880 | + ], IImageElement); | |
| 6881 | + IImageElement.prototype.createContent = function() { | |
| 6882 | + var assetPath = this.globalData.getAssetsPath(this.assetData); | |
| 6883 | + this.innerElem = createNS("image"); | |
| 6884 | + this.innerElem.setAttribute("width", this.assetData.w + "px"); | |
| 6885 | + this.innerElem.setAttribute("height", this.assetData.h + "px"); | |
| 6886 | + this.innerElem.setAttribute("preserveAspectRatio", this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio); | |
| 6887 | + this.innerElem.setAttributeNS("http://www.w3.org/1999/xlink", "href", assetPath); | |
| 6888 | + this.layerElement.appendChild(this.innerElem); | |
| 6889 | + }; | |
| 6890 | + IImageElement.prototype.sourceRectAtTime = function() { | |
| 6891 | + return this.sourceRect; | |
| 6892 | + }; | |
| 6893 | + function ProcessedElement(element, position) { | |
| 6894 | + this.elem = element; | |
| 6895 | + this.pos = position; | |
| 6896 | + } | |
| 6897 | + function IShapeElement() {} | |
| 6898 | + IShapeElement.prototype = { | |
| 6899 | + addShapeToModifiers: function addShapeToModifiers(data) { | |
| 6900 | + var i; | |
| 6901 | + var len = this.shapeModifiers.length; | |
| 6902 | + for (i = 0; i < len; i += 1) this.shapeModifiers[i].addShape(data); | |
| 6903 | + }, | |
| 6904 | + isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) { | |
| 6905 | + var i = 0; | |
| 6906 | + var len = this.shapeModifiers.length; | |
| 6907 | + while (i < len) if (this.shapeModifiers[i].isAnimatedWithShape(data)) return true; | |
| 6908 | + return false; | |
| 6909 | + }, | |
| 6910 | + renderModifiers: function renderModifiers() { | |
| 6911 | + if (!this.shapeModifiers.length) return; | |
| 6912 | + var i; | |
| 6913 | + var len = this.shapes.length; | |
| 6914 | + for (i = 0; i < len; i += 1) this.shapes[i].sh.reset(); | |
| 6915 | + len = this.shapeModifiers.length; | |
| 6916 | + var shouldBreakProcess; | |
| 6917 | + for (i = len - 1; i >= 0; i -= 1) { | |
| 6918 | + shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); | |
| 6919 | + if (shouldBreakProcess) break; | |
| 6920 | + } | |
| 6921 | + }, | |
| 6922 | + searchProcessedElement: function searchProcessedElement(elem) { | |
| 6923 | + var elements = this.processedElements; | |
| 6924 | + var i = 0; | |
| 6925 | + var len = elements.length; | |
| 6926 | + while (i < len) { | |
| 6927 | + if (elements[i].elem === elem) return elements[i].pos; | |
| 6928 | + i += 1; | |
| 6929 | + } | |
| 6930 | + return 0; | |
| 6931 | + }, | |
| 6932 | + addProcessedElement: function addProcessedElement(elem, pos) { | |
| 6933 | + var elements = this.processedElements; | |
| 6934 | + var i = elements.length; | |
| 6935 | + while (i) { | |
| 6936 | + i -= 1; | |
| 6937 | + if (elements[i].elem === elem) { | |
| 6938 | + elements[i].pos = pos; | |
| 6939 | + return; | |
| 6940 | + } | |
| 6941 | + } | |
| 6942 | + elements.push(new ProcessedElement(elem, pos)); | |
| 6943 | + }, | |
| 6944 | + prepareFrame: function prepareFrame(num) { | |
| 6945 | + this.prepareRenderableFrame(num); | |
| 6946 | + this.prepareProperties(num, this.isInRange); | |
| 6947 | + } | |
| 6948 | + }; | |
| 6949 | + var lineCapEnum = { | |
| 6950 | + 1: "butt", | |
| 6951 | + 2: "round", | |
| 6952 | + 3: "square" | |
| 6953 | + }; | |
| 6954 | + var lineJoinEnum = { | |
| 6955 | + 1: "miter", | |
| 6956 | + 2: "round", | |
| 6957 | + 3: "bevel" | |
| 6958 | + }; | |
| 6959 | + function SVGShapeData(transformers, level, shape) { | |
| 6960 | + this.caches = []; | |
| 6961 | + this.styles = []; | |
| 6962 | + this.transformers = transformers; | |
| 6963 | + this.lStr = ""; | |
| 6964 | + this.sh = shape; | |
| 6965 | + this.lvl = level; | |
| 6966 | + this._isAnimated = !!shape.k; | |
| 6967 | + var i = 0; | |
| 6968 | + var len = transformers.length; | |
| 6969 | + while (i < len) { | |
| 6970 | + if (transformers[i].mProps.dynamicProperties.length) { | |
| 6971 | + this._isAnimated = true; | |
| 6972 | + break; | |
| 6973 | + } | |
| 6974 | + i += 1; | |
| 6975 | + } | |
| 6976 | + } | |
| 6977 | + SVGShapeData.prototype.setAsAnimated = function() { | |
| 6978 | + this._isAnimated = true; | |
| 6979 | + }; | |
| 6980 | + function SVGStyleData(data, level) { | |
| 6981 | + this.data = data; | |
| 6982 | + this.type = data.ty; | |
| 6983 | + this.d = ""; | |
| 6984 | + this.lvl = level; | |
| 6985 | + this._mdf = false; | |
| 6986 | + this.closed = data.hd === true; | |
| 6987 | + this.pElem = createNS("path"); | |
| 6988 | + this.msElem = null; | |
| 6989 | + } | |
| 6990 | + SVGStyleData.prototype.reset = function() { | |
| 6991 | + this.d = ""; | |
| 6992 | + this._mdf = false; | |
| 6993 | + }; | |
| 6994 | + function DashProperty(elem, data, renderer, container) { | |
| 6995 | + this.elem = elem; | |
| 6996 | + this.frameId = -1; | |
| 6997 | + this.dataProps = createSizedArray(data.length); | |
| 6998 | + this.renderer = renderer; | |
| 6999 | + this.k = false; | |
| 7000 | + this.dashStr = ""; | |
| 7001 | + this.dashArray = createTypedArray("float32", data.length ? data.length - 1 : 0); | |
| 7002 | + this.dashoffset = createTypedArray("float32", 1); | |
| 7003 | + this.initDynamicPropertyContainer(container); | |
| 7004 | + var i; | |
| 7005 | + var len = data.length || 0; | |
| 7006 | + var prop; | |
| 7007 | + for (i = 0; i < len; i += 1) { | |
| 7008 | + prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this); | |
| 7009 | + this.k = prop.k || this.k; | |
| 7010 | + this.dataProps[i] = { | |
| 7011 | + n: data[i].n, | |
| 7012 | + p: prop | |
| 7013 | + }; | |
| 7014 | + } | |
| 7015 | + if (!this.k) this.getValue(true); | |
| 7016 | + this._isAnimated = this.k; | |
| 7017 | + } | |
| 7018 | + DashProperty.prototype.getValue = function(forceRender) { | |
| 7019 | + if (this.elem.globalData.frameId === this.frameId && !forceRender) return; | |
| 7020 | + this.frameId = this.elem.globalData.frameId; | |
| 7021 | + this.iterateDynamicProperties(); | |
| 7022 | + this._mdf = this._mdf || forceRender; | |
| 7023 | + if (this._mdf) { | |
| 7024 | + var i = 0; | |
| 7025 | + var len = this.dataProps.length; | |
| 7026 | + if (this.renderer === "svg") this.dashStr = ""; | |
| 7027 | + for (i = 0; i < len; i += 1) if (this.dataProps[i].n !== "o") if (this.renderer === "svg") this.dashStr += " " + this.dataProps[i].p.v; | |
| 7028 | + else this.dashArray[i] = this.dataProps[i].p.v; | |
| 7029 | + else this.dashoffset[0] = this.dataProps[i].p.v; | |
| 7030 | + } | |
| 7031 | + }; | |
| 7032 | + extendPrototype([DynamicPropertyContainer], DashProperty); | |
| 7033 | + function SVGStrokeStyleData(elem, data, styleOb) { | |
| 7034 | + this.initDynamicPropertyContainer(elem); | |
| 7035 | + this.getValue = this.iterateDynamicProperties; | |
| 7036 | + this.o = PropertyFactory.getProp(elem, data.o, 0, .01, this); | |
| 7037 | + this.w = PropertyFactory.getProp(elem, data.w, 0, null, this); | |
| 7038 | + this.d = new DashProperty(elem, data.d || {}, "svg", this); | |
| 7039 | + this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this); | |
| 7040 | + this.style = styleOb; | |
| 7041 | + this._isAnimated = !!this._isAnimated; | |
| 7042 | + } | |
| 7043 | + extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData); | |
| 7044 | + function SVGFillStyleData(elem, data, styleOb) { | |
| 7045 | + this.initDynamicPropertyContainer(elem); | |
| 7046 | + this.getValue = this.iterateDynamicProperties; | |
| 7047 | + this.o = PropertyFactory.getProp(elem, data.o, 0, .01, this); | |
| 7048 | + this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this); | |
| 7049 | + this.style = styleOb; | |
| 7050 | + } | |
| 7051 | + extendPrototype([DynamicPropertyContainer], SVGFillStyleData); | |
| 7052 | + function SVGNoStyleData(elem, data, styleOb) { | |
| 7053 | + this.initDynamicPropertyContainer(elem); | |
| 7054 | + this.getValue = this.iterateDynamicProperties; | |
| 7055 | + this.style = styleOb; | |
| 7056 | + } | |
| 7057 | + extendPrototype([DynamicPropertyContainer], SVGNoStyleData); | |
| 7058 | + function GradientProperty(elem, data, container) { | |
| 7059 | + this.data = data; | |
| 7060 | + this.c = createTypedArray("uint8c", data.p * 4); | |
| 7061 | + var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4; | |
| 7062 | + this.o = createTypedArray("float32", cLength); | |
| 7063 | + this._cmdf = false; | |
| 7064 | + this._omdf = false; | |
| 7065 | + this._collapsable = this.checkCollapsable(); | |
| 7066 | + this._hasOpacity = cLength; | |
| 7067 | + this.initDynamicPropertyContainer(container); | |
| 7068 | + this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this); | |
| 7069 | + this.k = this.prop.k; | |
| 7070 | + this.getValue(true); | |
| 7071 | + } | |
| 7072 | + GradientProperty.prototype.comparePoints = function(values, points) { | |
| 7073 | + var i = 0; | |
| 7074 | + var len = this.o.length / 2; | |
| 7075 | + var diff; | |
| 7076 | + while (i < len) { | |
| 7077 | + diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]); | |
| 7078 | + if (diff > .01) return false; | |
| 7079 | + i += 1; | |
| 7080 | + } | |
| 7081 | + return true; | |
| 7082 | + }; | |
| 7083 | + GradientProperty.prototype.checkCollapsable = function() { | |
| 7084 | + if (this.o.length / 2 !== this.c.length / 4) return false; | |
| 7085 | + if (this.data.k.k[0].s) { | |
| 7086 | + var i = 0; | |
| 7087 | + var len = this.data.k.k.length; | |
| 7088 | + while (i < len) { | |
| 7089 | + if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) return false; | |
| 7090 | + i += 1; | |
| 7091 | + } | |
| 7092 | + } else if (!this.comparePoints(this.data.k.k, this.data.p)) return false; | |
| 7093 | + return true; | |
| 7094 | + }; | |
| 7095 | + GradientProperty.prototype.getValue = function(forceRender) { | |
| 7096 | + this.prop.getValue(); | |
| 7097 | + this._mdf = false; | |
| 7098 | + this._cmdf = false; | |
| 7099 | + this._omdf = false; | |
| 7100 | + if (this.prop._mdf || forceRender) { | |
| 7101 | + var i; | |
| 7102 | + var len = this.data.p * 4; | |
| 7103 | + var mult; | |
| 7104 | + var val; | |
| 7105 | + for (i = 0; i < len; i += 1) { | |
| 7106 | + mult = i % 4 === 0 ? 100 : 255; | |
| 7107 | + val = Math.round(this.prop.v[i] * mult); | |
| 7108 | + if (this.c[i] !== val) { | |
| 7109 | + this.c[i] = val; | |
| 7110 | + this._cmdf = !forceRender; | |
| 7111 | + } | |
| 7112 | + } | |
| 7113 | + if (this.o.length) { | |
| 7114 | + len = this.prop.v.length; | |
| 7115 | + for (i = this.data.p * 4; i < len; i += 1) { | |
| 7116 | + mult = i % 2 === 0 ? 100 : 1; | |
| 7117 | + val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i]; | |
| 7118 | + if (this.o[i - this.data.p * 4] !== val) { | |
| 7119 | + this.o[i - this.data.p * 4] = val; | |
| 7120 | + this._omdf = !forceRender; | |
| 7121 | + } | |
| 7122 | + } | |
| 7123 | + } | |
| 7124 | + this._mdf = !forceRender; | |
| 7125 | + } | |
| 7126 | + }; | |
| 7127 | + extendPrototype([DynamicPropertyContainer], GradientProperty); | |
| 7128 | + function SVGGradientFillStyleData(elem, data, styleOb) { | |
| 7129 | + this.initDynamicPropertyContainer(elem); | |
| 7130 | + this.getValue = this.iterateDynamicProperties; | |
| 7131 | + this.initGradientData(elem, data, styleOb); | |
| 7132 | + } | |
| 7133 | + SVGGradientFillStyleData.prototype.initGradientData = function(elem, data, styleOb) { | |
| 7134 | + this.o = PropertyFactory.getProp(elem, data.o, 0, .01, this); | |
| 7135 | + this.s = PropertyFactory.getProp(elem, data.s, 1, null, this); | |
| 7136 | + this.e = PropertyFactory.getProp(elem, data.e, 1, null, this); | |
| 7137 | + this.h = PropertyFactory.getProp(elem, data.h || { k: 0 }, 0, .01, this); | |
| 7138 | + this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 0, degToRads, this); | |
| 7139 | + this.g = new GradientProperty(elem, data.g, this); | |
| 7140 | + this.style = styleOb; | |
| 7141 | + this.stops = []; | |
| 7142 | + this.setGradientData(styleOb.pElem, data); | |
| 7143 | + this.setGradientOpacity(data, styleOb); | |
| 7144 | + this._isAnimated = !!this._isAnimated; | |
| 7145 | + }; | |
| 7146 | + SVGGradientFillStyleData.prototype.setGradientData = function(pathElement, data) { | |
| 7147 | + var gradientId = createElementID(); | |
| 7148 | + var gfill = createNS(data.t === 1 ? "linearGradient" : "radialGradient"); | |
| 7149 | + gfill.setAttribute("id", gradientId); | |
| 7150 | + gfill.setAttribute("spreadMethod", "pad"); | |
| 7151 | + gfill.setAttribute("gradientUnits", "userSpaceOnUse"); | |
| 7152 | + var stops = []; | |
| 7153 | + var stop; | |
| 7154 | + var j; | |
| 7155 | + var jLen = data.g.p * 4; | |
| 7156 | + for (j = 0; j < jLen; j += 4) { | |
| 7157 | + stop = createNS("stop"); | |
| 7158 | + gfill.appendChild(stop); | |
| 7159 | + stops.push(stop); | |
| 7160 | + } | |
| 7161 | + pathElement.setAttribute(data.ty === "gf" ? "fill" : "stroke", "url(" + getLocationHref() + "#" + gradientId + ")"); | |
| 7162 | + this.gf = gfill; | |
| 7163 | + this.cst = stops; | |
| 7164 | + }; | |
| 7165 | + SVGGradientFillStyleData.prototype.setGradientOpacity = function(data, styleOb) { | |
| 7166 | + if (this.g._hasOpacity && !this.g._collapsable) { | |
| 7167 | + var stop; | |
| 7168 | + var j; | |
| 7169 | + var jLen; | |
| 7170 | + var mask = createNS("mask"); | |
| 7171 | + var maskElement = createNS("path"); | |
| 7172 | + mask.appendChild(maskElement); | |
| 7173 | + var opacityId = createElementID(); | |
| 7174 | + var maskId = createElementID(); | |
| 7175 | + mask.setAttribute("id", maskId); | |
| 7176 | + var opFill = createNS(data.t === 1 ? "linearGradient" : "radialGradient"); | |
| 7177 | + opFill.setAttribute("id", opacityId); | |
| 7178 | + opFill.setAttribute("spreadMethod", "pad"); | |
| 7179 | + opFill.setAttribute("gradientUnits", "userSpaceOnUse"); | |
| 7180 | + jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length; | |
| 7181 | + var stops = this.stops; | |
| 7182 | + for (j = data.g.p * 4; j < jLen; j += 2) { | |
| 7183 | + stop = createNS("stop"); | |
| 7184 | + stop.setAttribute("stop-color", "rgb(255,255,255)"); | |
| 7185 | + opFill.appendChild(stop); | |
| 7186 | + stops.push(stop); | |
| 7187 | + } | |
| 7188 | + maskElement.setAttribute(data.ty === "gf" ? "fill" : "stroke", "url(" + getLocationHref() + "#" + opacityId + ")"); | |
| 7189 | + if (data.ty === "gs") { | |
| 7190 | + maskElement.setAttribute("stroke-linecap", lineCapEnum[data.lc || 2]); | |
| 7191 | + maskElement.setAttribute("stroke-linejoin", lineJoinEnum[data.lj || 2]); | |
| 7192 | + if (data.lj === 1) maskElement.setAttribute("stroke-miterlimit", data.ml); | |
| 7193 | + } | |
| 7194 | + this.of = opFill; | |
| 7195 | + this.ms = mask; | |
| 7196 | + this.ost = stops; | |
| 7197 | + this.maskId = maskId; | |
| 7198 | + styleOb.msElem = maskElement; | |
| 7199 | + } | |
| 7200 | + }; | |
| 7201 | + extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData); | |
| 7202 | + function SVGGradientStrokeStyleData(elem, data, styleOb) { | |
| 7203 | + this.initDynamicPropertyContainer(elem); | |
| 7204 | + this.getValue = this.iterateDynamicProperties; | |
| 7205 | + this.w = PropertyFactory.getProp(elem, data.w, 0, null, this); | |
| 7206 | + this.d = new DashProperty(elem, data.d || {}, "svg", this); | |
| 7207 | + this.initGradientData(elem, data, styleOb); | |
| 7208 | + this._isAnimated = !!this._isAnimated; | |
| 7209 | + } | |
| 7210 | + extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData); | |
| 7211 | + function ShapeGroupData() { | |
| 7212 | + this.it = []; | |
| 7213 | + this.prevViewData = []; | |
| 7214 | + this.gr = createNS("g"); | |
| 7215 | + } | |
| 7216 | + function SVGTransformData(mProps, op, container) { | |
| 7217 | + this.transform = { | |
| 7218 | + mProps, | |
| 7219 | + op, | |
| 7220 | + container | |
| 7221 | + }; | |
| 7222 | + this.elements = []; | |
| 7223 | + this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length; | |
| 7224 | + } | |
| 7225 | + var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) { | |
| 7226 | + if (length === 0) return ""; | |
| 7227 | + var _o = pathNodes.o; | |
| 7228 | + var _i = pathNodes.i; | |
| 7229 | + var _v = pathNodes.v; | |
| 7230 | + var i; | |
| 7231 | + var shapeString = " M" + mat.applyToPointStringified(_v[0][0], _v[0][1]); | |
| 7232 | + for (i = 1; i < length; i += 1) 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]); | |
| 7233 | + if (closed && length) { | |
| 7234 | + 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]); | |
| 7235 | + shapeString += "z"; | |
| 7236 | + } | |
| 7237 | + return shapeString; | |
| 7238 | + }; | |
| 7239 | + var SVGElementsRenderer = function() { | |
| 7240 | + var _identityMatrix = new Matrix(); | |
| 7241 | + var _matrixHelper = new Matrix(); | |
| 7242 | + var ob = { createRenderFunction }; | |
| 7243 | + function createRenderFunction(data) { | |
| 7244 | + switch (data.ty) { | |
| 7245 | + case "fl": return renderFill; | |
| 7246 | + case "gf": return renderGradient; | |
| 7247 | + case "gs": return renderGradientStroke; | |
| 7248 | + case "st": return renderStroke; | |
| 7249 | + case "sh": | |
| 7250 | + case "el": | |
| 7251 | + case "rc": | |
| 7252 | + case "sr": return renderPath; | |
| 7253 | + case "tr": return renderContentTransform; | |
| 7254 | + case "no": return renderNoop; | |
| 7255 | + default: return null; | |
| 7256 | + } | |
| 7257 | + } | |
| 7258 | + function renderContentTransform(styleData, itemData, isFirstFrame) { | |
| 7259 | + if (isFirstFrame || itemData.transform.op._mdf) itemData.transform.container.setAttribute("opacity", itemData.transform.op.v); | |
| 7260 | + if (isFirstFrame || itemData.transform.mProps._mdf) itemData.transform.container.setAttribute("transform", itemData.transform.mProps.v.to2dCSS()); | |
| 7261 | + } | |
| 7262 | + function renderNoop() {} | |
| 7263 | + function renderPath(styleData, itemData, isFirstFrame) { | |
| 7264 | + var j; | |
| 7265 | + var jLen; | |
| 7266 | + var pathStringTransformed; | |
| 7267 | + var redraw; | |
| 7268 | + var pathNodes; | |
| 7269 | + var l; | |
| 7270 | + var lLen = itemData.styles.length; | |
| 7271 | + var lvl = itemData.lvl; | |
| 7272 | + var paths; | |
| 7273 | + var mat; | |
| 7274 | + var iterations; | |
| 7275 | + var k; | |
| 7276 | + for (l = 0; l < lLen; l += 1) { | |
| 7277 | + redraw = itemData.sh._mdf || isFirstFrame; | |
| 7278 | + if (itemData.styles[l].lvl < lvl) { | |
| 7279 | + mat = _matrixHelper.reset(); | |
| 7280 | + iterations = lvl - itemData.styles[l].lvl; | |
| 7281 | + k = itemData.transformers.length - 1; | |
| 7282 | + while (!redraw && iterations > 0) { | |
| 7283 | + redraw = itemData.transformers[k].mProps._mdf || redraw; | |
| 7284 | + iterations -= 1; | |
| 7285 | + k -= 1; | |
| 7286 | + } | |
| 7287 | + if (redraw) { | |
| 7288 | + iterations = lvl - itemData.styles[l].lvl; | |
| 7289 | + k = itemData.transformers.length - 1; | |
| 7290 | + while (iterations > 0) { | |
| 7291 | + mat.multiply(itemData.transformers[k].mProps.v); | |
| 7292 | + iterations -= 1; | |
| 7293 | + k -= 1; | |
| 7294 | + } | |
| 7295 | + } | |
| 7296 | + } else mat = _identityMatrix; | |
| 7297 | + paths = itemData.sh.paths; | |
| 7298 | + jLen = paths._length; | |
| 7299 | + if (redraw) { | |
| 7300 | + pathStringTransformed = ""; | |
| 7301 | + for (j = 0; j < jLen; j += 1) { | |
| 7302 | + pathNodes = paths.shapes[j]; | |
| 7303 | + if (pathNodes && pathNodes._length) pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat); | |
| 7304 | + } | |
| 7305 | + itemData.caches[l] = pathStringTransformed; | |
| 7306 | + } else pathStringTransformed = itemData.caches[l]; | |
| 7307 | + itemData.styles[l].d += styleData.hd === true ? "" : pathStringTransformed; | |
| 7308 | + itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf; | |
| 7309 | + } | |
| 7310 | + } | |
| 7311 | + function renderFill(styleData, itemData, isFirstFrame) { | |
| 7312 | + var styleElem = itemData.style; | |
| 7313 | + if (itemData.c._mdf || isFirstFrame) styleElem.pElem.setAttribute("fill", "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"); | |
| 7314 | + if (itemData.o._mdf || isFirstFrame) styleElem.pElem.setAttribute("fill-opacity", itemData.o.v); | |
| 7315 | + } | |
| 7316 | + function renderGradientStroke(styleData, itemData, isFirstFrame) { | |
| 7317 | + renderGradient(styleData, itemData, isFirstFrame); | |
| 7318 | + renderStroke(styleData, itemData, isFirstFrame); | |
| 7319 | + } | |
| 7320 | + function renderGradient(styleData, itemData, isFirstFrame) { | |
| 7321 | + var gfill = itemData.gf; | |
| 7322 | + var hasOpacity = itemData.g._hasOpacity; | |
| 7323 | + var pt1 = itemData.s.v; | |
| 7324 | + var pt2 = itemData.e.v; | |
| 7325 | + if (itemData.o._mdf || isFirstFrame) { | |
| 7326 | + var attr = styleData.ty === "gf" ? "fill-opacity" : "stroke-opacity"; | |
| 7327 | + itemData.style.pElem.setAttribute(attr, itemData.o.v); | |
| 7328 | + } | |
| 7329 | + if (itemData.s._mdf || isFirstFrame) { | |
| 7330 | + var attr1 = styleData.t === 1 ? "x1" : "cx"; | |
| 7331 | + var attr2 = attr1 === "x1" ? "y1" : "cy"; | |
| 7332 | + gfill.setAttribute(attr1, pt1[0]); | |
| 7333 | + gfill.setAttribute(attr2, pt1[1]); | |
| 7334 | + if (hasOpacity && !itemData.g._collapsable) { | |
| 7335 | + itemData.of.setAttribute(attr1, pt1[0]); | |
| 7336 | + itemData.of.setAttribute(attr2, pt1[1]); | |
| 7337 | + } | |
| 7338 | + } | |
| 7339 | + var stops; | |
| 7340 | + var i; | |
| 7341 | + var len; | |
| 7342 | + var stop; | |
| 7343 | + if (itemData.g._cmdf || isFirstFrame) { | |
| 7344 | + stops = itemData.cst; | |
| 7345 | + var cValues = itemData.g.c; | |
| 7346 | + len = stops.length; | |
| 7347 | + for (i = 0; i < len; i += 1) { | |
| 7348 | + stop = stops[i]; | |
| 7349 | + stop.setAttribute("offset", cValues[i * 4] + "%"); | |
| 7350 | + stop.setAttribute("stop-color", "rgb(" + cValues[i * 4 + 1] + "," + cValues[i * 4 + 2] + "," + cValues[i * 4 + 3] + ")"); | |
| 7351 | + } | |
| 7352 | + } | |
| 7353 | + if (hasOpacity && (itemData.g._omdf || isFirstFrame)) { | |
| 7354 | + var oValues = itemData.g.o; | |
| 7355 | + if (itemData.g._collapsable) stops = itemData.cst; | |
| 7356 | + else stops = itemData.ost; | |
| 7357 | + len = stops.length; | |
| 7358 | + for (i = 0; i < len; i += 1) { | |
| 7359 | + stop = stops[i]; | |
| 7360 | + if (!itemData.g._collapsable) stop.setAttribute("offset", oValues[i * 2] + "%"); | |
| 7361 | + stop.setAttribute("stop-opacity", oValues[i * 2 + 1]); | |
| 7362 | + } | |
| 7363 | + } | |
| 7364 | + if (styleData.t === 1) { | |
| 7365 | + if (itemData.e._mdf || isFirstFrame) { | |
| 7366 | + gfill.setAttribute("x2", pt2[0]); | |
| 7367 | + gfill.setAttribute("y2", pt2[1]); | |
| 7368 | + if (hasOpacity && !itemData.g._collapsable) { | |
| 7369 | + itemData.of.setAttribute("x2", pt2[0]); | |
| 7370 | + itemData.of.setAttribute("y2", pt2[1]); | |
| 7371 | + } | |
| 7372 | + } | |
| 7373 | + } else { | |
| 7374 | + var rad; | |
| 7375 | + if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) { | |
| 7376 | + rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); | |
| 7377 | + gfill.setAttribute("r", rad); | |
| 7378 | + if (hasOpacity && !itemData.g._collapsable) itemData.of.setAttribute("r", rad); | |
| 7379 | + } | |
| 7380 | + if (itemData.s._mdf || itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) { | |
| 7381 | + if (!rad) rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); | |
| 7382 | + var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); | |
| 7383 | + var percent = itemData.h.v; | |
| 7384 | + if (percent >= 1) percent = .99; | |
| 7385 | + else if (percent <= -1) percent = -.99; | |
| 7386 | + var dist = rad * percent; | |
| 7387 | + var x = Math.cos(ang + itemData.a.v) * dist + pt1[0]; | |
| 7388 | + var y = Math.sin(ang + itemData.a.v) * dist + pt1[1]; | |
| 7389 | + gfill.setAttribute("fx", x); | |
| 7390 | + gfill.setAttribute("fy", y); | |
| 7391 | + if (hasOpacity && !itemData.g._collapsable) { | |
| 7392 | + itemData.of.setAttribute("fx", x); | |
| 7393 | + itemData.of.setAttribute("fy", y); | |
| 7394 | + } | |
| 7395 | + } | |
| 7396 | + } | |
| 7397 | + } | |
| 7398 | + function renderStroke(styleData, itemData, isFirstFrame) { | |
| 7399 | + var styleElem = itemData.style; | |
| 7400 | + var d = itemData.d; | |
| 7401 | + if (d && (d._mdf || isFirstFrame) && d.dashStr) { | |
| 7402 | + styleElem.pElem.setAttribute("stroke-dasharray", d.dashStr); | |
| 7403 | + styleElem.pElem.setAttribute("stroke-dashoffset", d.dashoffset[0]); | |
| 7404 | + } | |
| 7405 | + if (itemData.c && (itemData.c._mdf || isFirstFrame)) styleElem.pElem.setAttribute("stroke", "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"); | |
| 7406 | + if (itemData.o._mdf || isFirstFrame) styleElem.pElem.setAttribute("stroke-opacity", itemData.o.v); | |
| 7407 | + if (itemData.w._mdf || isFirstFrame) { | |
| 7408 | + styleElem.pElem.setAttribute("stroke-width", itemData.w.v); | |
| 7409 | + if (styleElem.msElem) styleElem.msElem.setAttribute("stroke-width", itemData.w.v); | |
| 7410 | + } | |
| 7411 | + } | |
| 7412 | + return ob; | |
| 7413 | + }(); | |
| 7414 | + function SVGShapeElement(data, globalData, comp) { | |
| 7415 | + this.shapes = []; | |
| 7416 | + this.shapesData = data.shapes; | |
| 7417 | + this.stylesList = []; | |
| 7418 | + this.shapeModifiers = []; | |
| 7419 | + this.itemsData = []; | |
| 7420 | + this.processedElements = []; | |
| 7421 | + this.animatedContents = []; | |
| 7422 | + this.initElement(data, globalData, comp); | |
| 7423 | + this.prevViewData = []; | |
| 7424 | + } | |
| 7425 | + extendPrototype([ | |
| 7426 | + BaseElement, | |
| 7427 | + TransformElement, | |
| 7428 | + SVGBaseElement, | |
| 7429 | + IShapeElement, | |
| 7430 | + HierarchyElement, | |
| 7431 | + FrameElement, | |
| 7432 | + RenderableDOMElement | |
| 7433 | + ], SVGShapeElement); | |
| 7434 | + SVGShapeElement.prototype.initSecondaryElement = function() {}; | |
| 7435 | + SVGShapeElement.prototype.identityMatrix = new Matrix(); | |
| 7436 | + SVGShapeElement.prototype.buildExpressionInterface = function() {}; | |
| 7437 | + SVGShapeElement.prototype.createContent = function() { | |
| 7438 | + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); | |
| 7439 | + this.filterUniqueShapes(); | |
| 7440 | + }; | |
| 7441 | + SVGShapeElement.prototype.filterUniqueShapes = function() { | |
| 7442 | + var i; | |
| 7443 | + var len = this.shapes.length; | |
| 7444 | + var shape; | |
| 7445 | + var j; | |
| 7446 | + var jLen = this.stylesList.length; | |
| 7447 | + var style; | |
| 7448 | + var tempShapes = []; | |
| 7449 | + var areAnimated = false; | |
| 7450 | + for (j = 0; j < jLen; j += 1) { | |
| 7451 | + style = this.stylesList[j]; | |
| 7452 | + areAnimated = false; | |
| 7453 | + tempShapes.length = 0; | |
| 7454 | + for (i = 0; i < len; i += 1) { | |
| 7455 | + shape = this.shapes[i]; | |
| 7456 | + if (shape.styles.indexOf(style) !== -1) { | |
| 7457 | + tempShapes.push(shape); | |
| 7458 | + areAnimated = shape._isAnimated || areAnimated; | |
| 7459 | + } | |
| 7460 | + } | |
| 7461 | + if (tempShapes.length > 1 && areAnimated) this.setShapesAsAnimated(tempShapes); | |
| 7462 | + } | |
| 7463 | + }; | |
| 7464 | + SVGShapeElement.prototype.setShapesAsAnimated = function(shapes) { | |
| 7465 | + var i; | |
| 7466 | + var len = shapes.length; | |
| 7467 | + for (i = 0; i < len; i += 1) shapes[i].setAsAnimated(); | |
| 7468 | + }; | |
| 7469 | + SVGShapeElement.prototype.createStyleElement = function(data, level) { | |
| 7470 | + var elementData; | |
| 7471 | + var styleOb = new SVGStyleData(data, level); | |
| 7472 | + var pathElement = styleOb.pElem; | |
| 7473 | + if (data.ty === "st") elementData = new SVGStrokeStyleData(this, data, styleOb); | |
| 7474 | + else if (data.ty === "fl") elementData = new SVGFillStyleData(this, data, styleOb); | |
| 7475 | + else if (data.ty === "gf" || data.ty === "gs") { | |
| 7476 | + elementData = new (data.ty === "gf" ? SVGGradientFillStyleData : SVGGradientStrokeStyleData)(this, data, styleOb); | |
| 7477 | + this.globalData.defs.appendChild(elementData.gf); | |
| 7478 | + if (elementData.maskId) { | |
| 7479 | + this.globalData.defs.appendChild(elementData.ms); | |
| 7480 | + this.globalData.defs.appendChild(elementData.of); | |
| 7481 | + pathElement.setAttribute("mask", "url(" + getLocationHref() + "#" + elementData.maskId + ")"); | |
| 7482 | + } | |
| 7483 | + } else if (data.ty === "no") elementData = new SVGNoStyleData(this, data, styleOb); | |
| 7484 | + if (data.ty === "st" || data.ty === "gs") { | |
| 7485 | + pathElement.setAttribute("stroke-linecap", lineCapEnum[data.lc || 2]); | |
| 7486 | + pathElement.setAttribute("stroke-linejoin", lineJoinEnum[data.lj || 2]); | |
| 7487 | + pathElement.setAttribute("fill-opacity", "0"); | |
| 7488 | + if (data.lj === 1) pathElement.setAttribute("stroke-miterlimit", data.ml); | |
| 7489 | + } | |
| 7490 | + if (data.r === 2) pathElement.setAttribute("fill-rule", "evenodd"); | |
| 7491 | + if (data.ln) pathElement.setAttribute("id", data.ln); | |
| 7492 | + if (data.cl) pathElement.setAttribute("class", data.cl); | |
| 7493 | + if (data.bm) pathElement.style["mix-blend-mode"] = getBlendMode(data.bm); | |
| 7494 | + this.stylesList.push(styleOb); | |
| 7495 | + this.addToAnimatedContents(data, elementData); | |
| 7496 | + return elementData; | |
| 7497 | + }; | |
| 7498 | + SVGShapeElement.prototype.createGroupElement = function(data) { | |
| 7499 | + var elementData = new ShapeGroupData(); | |
| 7500 | + if (data.ln) elementData.gr.setAttribute("id", data.ln); | |
| 7501 | + if (data.cl) elementData.gr.setAttribute("class", data.cl); | |
| 7502 | + if (data.bm) elementData.gr.style["mix-blend-mode"] = getBlendMode(data.bm); | |
| 7503 | + return elementData; | |
| 7504 | + }; | |
| 7505 | + SVGShapeElement.prototype.createTransformElement = function(data, container) { | |
| 7506 | + var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this); | |
| 7507 | + var elementData = new SVGTransformData(transformProperty, transformProperty.o, container); | |
| 7508 | + this.addToAnimatedContents(data, elementData); | |
| 7509 | + return elementData; | |
| 7510 | + }; | |
| 7511 | + SVGShapeElement.prototype.createShapeElement = function(data, ownTransformers, level) { | |
| 7512 | + var ty = 4; | |
| 7513 | + if (data.ty === "rc") ty = 5; | |
| 7514 | + else if (data.ty === "el") ty = 6; | |
| 7515 | + else if (data.ty === "sr") ty = 7; | |
| 7516 | + var elementData = new SVGShapeData(ownTransformers, level, ShapePropertyFactory.getShapeProp(this, data, ty, this)); | |
| 7517 | + this.shapes.push(elementData); | |
| 7518 | + this.addShapeToModifiers(elementData); | |
| 7519 | + this.addToAnimatedContents(data, elementData); | |
| 7520 | + return elementData; | |
| 7521 | + }; | |
| 7522 | + SVGShapeElement.prototype.addToAnimatedContents = function(data, element) { | |
| 7523 | + var i = 0; | |
| 7524 | + var len = this.animatedContents.length; | |
| 7525 | + while (i < len) { | |
| 7526 | + if (this.animatedContents[i].element === element) return; | |
| 7527 | + i += 1; | |
| 7528 | + } | |
| 7529 | + this.animatedContents.push({ | |
| 7530 | + fn: SVGElementsRenderer.createRenderFunction(data), | |
| 7531 | + element, | |
| 7532 | + data | |
| 7533 | + }); | |
| 7534 | + }; | |
| 7535 | + SVGShapeElement.prototype.setElementStyles = function(elementData) { | |
| 7536 | + var arr = elementData.styles; | |
| 7537 | + var j; | |
| 7538 | + var jLen = this.stylesList.length; | |
| 7539 | + for (j = 0; j < jLen; j += 1) if (arr.indexOf(this.stylesList[j]) === -1 && !this.stylesList[j].closed) arr.push(this.stylesList[j]); | |
| 7540 | + }; | |
| 7541 | + SVGShapeElement.prototype.reloadShapes = function() { | |
| 7542 | + this._isFirstFrame = true; | |
| 7543 | + var i; | |
| 7544 | + var len = this.itemsData.length; | |
| 7545 | + for (i = 0; i < len; i += 1) this.prevViewData[i] = this.itemsData[i]; | |
| 7546 | + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); | |
| 7547 | + this.filterUniqueShapes(); | |
| 7548 | + len = this.dynamicProperties.length; | |
| 7549 | + for (i = 0; i < len; i += 1) this.dynamicProperties[i].getValue(); | |
| 7550 | + this.renderModifiers(); | |
| 7551 | + }; | |
| 7552 | + SVGShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, container, level, transformers, render) { | |
| 7553 | + var ownTransformers = [].concat(transformers); | |
| 7554 | + var i; | |
| 7555 | + var len = arr.length - 1; | |
| 7556 | + var j; | |
| 7557 | + var jLen; | |
| 7558 | + var ownStyles = []; | |
| 7559 | + var ownModifiers = []; | |
| 7560 | + var currentTransform; | |
| 7561 | + var modifier; | |
| 7562 | + var processedPos; | |
| 7563 | + for (i = len; i >= 0; i -= 1) { | |
| 7564 | + processedPos = this.searchProcessedElement(arr[i]); | |
| 7565 | + if (!processedPos) arr[i]._render = render; | |
| 7566 | + else itemsData[i] = prevViewData[processedPos - 1]; | |
| 7567 | + if (arr[i].ty === "fl" || arr[i].ty === "st" || arr[i].ty === "gf" || arr[i].ty === "gs" || arr[i].ty === "no") { | |
| 7568 | + if (!processedPos) itemsData[i] = this.createStyleElement(arr[i], level); | |
| 7569 | + else itemsData[i].style.closed = arr[i].hd; | |
| 7570 | + if (arr[i]._render) { | |
| 7571 | + if (itemsData[i].style.pElem.parentNode !== container) container.appendChild(itemsData[i].style.pElem); | |
| 7572 | + } | |
| 7573 | + ownStyles.push(itemsData[i].style); | |
| 7574 | + } else if (arr[i].ty === "gr") { | |
| 7575 | + if (!processedPos) itemsData[i] = this.createGroupElement(arr[i]); | |
| 7576 | + else { | |
| 7577 | + jLen = itemsData[i].it.length; | |
| 7578 | + for (j = 0; j < jLen; j += 1) itemsData[i].prevViewData[j] = itemsData[i].it[j]; | |
| 7579 | + } | |
| 7580 | + this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render); | |
| 7581 | + if (arr[i]._render) { | |
| 7582 | + if (itemsData[i].gr.parentNode !== container) container.appendChild(itemsData[i].gr); | |
| 7583 | + } | |
| 7584 | + } else if (arr[i].ty === "tr") { | |
| 7585 | + if (!processedPos) itemsData[i] = this.createTransformElement(arr[i], container); | |
| 7586 | + currentTransform = itemsData[i].transform; | |
| 7587 | + ownTransformers.push(currentTransform); | |
| 7588 | + } else if (arr[i].ty === "sh" || arr[i].ty === "rc" || arr[i].ty === "el" || arr[i].ty === "sr") { | |
| 7589 | + if (!processedPos) itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level); | |
| 7590 | + this.setElementStyles(itemsData[i]); | |
| 7591 | + } else if (arr[i].ty === "tm" || arr[i].ty === "rd" || arr[i].ty === "ms" || arr[i].ty === "pb" || arr[i].ty === "zz" || arr[i].ty === "op") { | |
| 7592 | + if (!processedPos) { | |
| 7593 | + modifier = ShapeModifiers.getModifier(arr[i].ty); | |
| 7594 | + modifier.init(this, arr[i]); | |
| 7595 | + itemsData[i] = modifier; | |
| 7596 | + this.shapeModifiers.push(modifier); | |
| 7597 | + } else { | |
| 7598 | + modifier = itemsData[i]; | |
| 7599 | + modifier.closed = false; | |
| 7600 | + } | |
| 7601 | + ownModifiers.push(modifier); | |
| 7602 | + } else if (arr[i].ty === "rp") { | |
| 7603 | + if (!processedPos) { | |
| 7604 | + modifier = ShapeModifiers.getModifier(arr[i].ty); | |
| 7605 | + itemsData[i] = modifier; | |
| 7606 | + modifier.init(this, arr, i, itemsData); | |
| 7607 | + this.shapeModifiers.push(modifier); | |
| 7608 | + render = false; | |
| 7609 | + } else { | |
| 7610 | + modifier = itemsData[i]; | |
| 7611 | + modifier.closed = true; | |
| 7612 | + } | |
| 7613 | + ownModifiers.push(modifier); | |
| 7614 | + } | |
| 7615 | + this.addProcessedElement(arr[i], i + 1); | |
| 7616 | + } | |
| 7617 | + len = ownStyles.length; | |
| 7618 | + for (i = 0; i < len; i += 1) ownStyles[i].closed = true; | |
| 7619 | + len = ownModifiers.length; | |
| 7620 | + for (i = 0; i < len; i += 1) ownModifiers[i].closed = true; | |
| 7621 | + }; | |
| 7622 | + SVGShapeElement.prototype.renderInnerContent = function() { | |
| 7623 | + this.renderModifiers(); | |
| 7624 | + var i; | |
| 7625 | + var len = this.stylesList.length; | |
| 7626 | + for (i = 0; i < len; i += 1) this.stylesList[i].reset(); | |
| 7627 | + this.renderShape(); | |
| 7628 | + for (i = 0; i < len; i += 1) if (this.stylesList[i]._mdf || this._isFirstFrame) { | |
| 7629 | + if (this.stylesList[i].msElem) { | |
| 7630 | + this.stylesList[i].msElem.setAttribute("d", this.stylesList[i].d); | |
| 7631 | + this.stylesList[i].d = "M0 0" + this.stylesList[i].d; | |
| 7632 | + } | |
| 7633 | + this.stylesList[i].pElem.setAttribute("d", this.stylesList[i].d || "M0 0"); | |
| 7634 | + } | |
| 7635 | + }; | |
| 7636 | + SVGShapeElement.prototype.renderShape = function() { | |
| 7637 | + var i; | |
| 7638 | + var len = this.animatedContents.length; | |
| 7639 | + var animatedContent; | |
| 7640 | + for (i = 0; i < len; i += 1) { | |
| 7641 | + animatedContent = this.animatedContents[i]; | |
| 7642 | + if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame); | |
| 7643 | + } | |
| 7644 | + }; | |
| 7645 | + SVGShapeElement.prototype.destroy = function() { | |
| 7646 | + this.destroyBaseElement(); | |
| 7647 | + this.shapesData = null; | |
| 7648 | + this.itemsData = null; | |
| 7649 | + }; | |
| 7650 | + function LetterProps(o, sw, sc, fc, m, p) { | |
| 7651 | + this.o = o; | |
| 7652 | + this.sw = sw; | |
| 7653 | + this.sc = sc; | |
| 7654 | + this.fc = fc; | |
| 7655 | + this.m = m; | |
| 7656 | + this.p = p; | |
| 7657 | + this._mdf = { | |
| 7658 | + o: true, | |
| 7659 | + sw: !!sw, | |
| 7660 | + sc: !!sc, | |
| 7661 | + fc: !!fc, | |
| 7662 | + m: true, | |
| 7663 | + p: true | |
| 7664 | + }; | |
| 7665 | + } | |
| 7666 | + LetterProps.prototype.update = function(o, sw, sc, fc, m, p) { | |
| 7667 | + this._mdf.o = false; | |
| 7668 | + this._mdf.sw = false; | |
| 7669 | + this._mdf.sc = false; | |
| 7670 | + this._mdf.fc = false; | |
| 7671 | + this._mdf.m = false; | |
| 7672 | + this._mdf.p = false; | |
| 7673 | + var updated = false; | |
| 7674 | + if (this.o !== o) { | |
| 7675 | + this.o = o; | |
| 7676 | + this._mdf.o = true; | |
| 7677 | + updated = true; | |
| 7678 | + } | |
| 7679 | + if (this.sw !== sw) { | |
| 7680 | + this.sw = sw; | |
| 7681 | + this._mdf.sw = true; | |
| 7682 | + updated = true; | |
| 7683 | + } | |
| 7684 | + if (this.sc !== sc) { | |
| 7685 | + this.sc = sc; | |
| 7686 | + this._mdf.sc = true; | |
| 7687 | + updated = true; | |
| 7688 | + } | |
| 7689 | + if (this.fc !== fc) { | |
| 7690 | + this.fc = fc; | |
| 7691 | + this._mdf.fc = true; | |
| 7692 | + updated = true; | |
| 7693 | + } | |
| 7694 | + if (this.m !== m) { | |
| 7695 | + this.m = m; | |
| 7696 | + this._mdf.m = true; | |
| 7697 | + updated = true; | |
| 7698 | + } | |
| 7699 | + 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])) { | |
| 7700 | + this.p = p; | |
| 7701 | + this._mdf.p = true; | |
| 7702 | + updated = true; | |
| 7703 | + } | |
| 7704 | + return updated; | |
| 7705 | + }; | |
| 7706 | + function TextProperty(elem, data) { | |
| 7707 | + this._frameId = initialDefaultFrame; | |
| 7708 | + this.pv = ""; | |
| 7709 | + this.v = ""; | |
| 7710 | + this.kf = false; | |
| 7711 | + this._isFirstFrame = true; | |
| 7712 | + this._mdf = false; | |
| 7713 | + if (data.d && data.d.sid) data.d = elem.globalData.slotManager.getProp(data.d); | |
| 7714 | + this.data = data; | |
| 7715 | + this.elem = elem; | |
| 7716 | + this.comp = this.elem.comp; | |
| 7717 | + this.keysIndex = 0; | |
| 7718 | + this.canResize = false; | |
| 7719 | + this.minimumFontSize = 1; | |
| 7720 | + this.effectsSequence = []; | |
| 7721 | + this.currentData = { | |
| 7722 | + ascent: 0, | |
| 7723 | + boxWidth: this.defaultBoxWidth, | |
| 7724 | + f: "", | |
| 7725 | + fStyle: "", | |
| 7726 | + fWeight: "", | |
| 7727 | + fc: "", | |
| 7728 | + j: "", | |
| 7729 | + justifyOffset: "", | |
| 7730 | + l: [], | |
| 7731 | + lh: 0, | |
| 7732 | + lineWidths: [], | |
| 7733 | + ls: "", | |
| 7734 | + of: "", | |
| 7735 | + s: "", | |
| 7736 | + sc: "", | |
| 7737 | + sw: 0, | |
| 7738 | + t: 0, | |
| 7739 | + tr: 0, | |
| 7740 | + sz: 0, | |
| 7741 | + ps: null, | |
| 7742 | + fillColorAnim: false, | |
| 7743 | + strokeColorAnim: false, | |
| 7744 | + strokeWidthAnim: false, | |
| 7745 | + yOffset: 0, | |
| 7746 | + finalSize: 0, | |
| 7747 | + finalText: [], | |
| 7748 | + finalLineHeight: 0, | |
| 7749 | + __complete: false | |
| 7750 | + }; | |
| 7751 | + this.copyData(this.currentData, this.data.d.k[0].s); | |
| 7752 | + if (!this.searchProperty()) this.completeTextData(this.currentData); | |
| 7753 | + } | |
| 7754 | + TextProperty.prototype.defaultBoxWidth = [0, 0]; | |
| 7755 | + TextProperty.prototype.copyData = function(obj, data) { | |
| 7756 | + for (var s in data) if (Object.prototype.hasOwnProperty.call(data, s)) obj[s] = data[s]; | |
| 7757 | + return obj; | |
| 7758 | + }; | |
| 7759 | + TextProperty.prototype.setCurrentData = function(data) { | |
| 7760 | + if (!data.__complete) this.completeTextData(data); | |
| 7761 | + this.currentData = data; | |
| 7762 | + this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth; | |
| 7763 | + this._mdf = true; | |
| 7764 | + }; | |
| 7765 | + TextProperty.prototype.searchProperty = function() { | |
| 7766 | + return this.searchKeyframes(); | |
| 7767 | + }; | |
| 7768 | + TextProperty.prototype.searchKeyframes = function() { | |
| 7769 | + this.kf = this.data.d.k.length > 1; | |
| 7770 | + if (this.kf) this.addEffect(this.getKeyframeValue.bind(this)); | |
| 7771 | + return this.kf; | |
| 7772 | + }; | |
| 7773 | + TextProperty.prototype.addEffect = function(effectFunction) { | |
| 7774 | + this.effectsSequence.push(effectFunction); | |
| 7775 | + this.elem.addDynamicProperty(this); | |
| 7776 | + }; | |
| 7777 | + TextProperty.prototype.getValue = function(_finalValue) { | |
| 7778 | + if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) return; | |
| 7779 | + this.currentData.t = this.data.d.k[this.keysIndex].s.t; | |
| 7780 | + var currentValue = this.currentData; | |
| 7781 | + var currentIndex = this.keysIndex; | |
| 7782 | + if (this.lock) { | |
| 7783 | + this.setCurrentData(this.currentData); | |
| 7784 | + return; | |
| 7785 | + } | |
| 7786 | + this.lock = true; | |
| 7787 | + this._mdf = false; | |
| 7788 | + var i; | |
| 7789 | + var len = this.effectsSequence.length; | |
| 7790 | + var finalValue = _finalValue || this.data.d.k[this.keysIndex].s; | |
| 7791 | + for (i = 0; i < len; i += 1) if (currentIndex !== this.keysIndex) finalValue = this.effectsSequence[i](finalValue, finalValue.t); | |
| 7792 | + else finalValue = this.effectsSequence[i](this.currentData, finalValue.t); | |
| 7793 | + if (currentValue !== finalValue) this.setCurrentData(finalValue); | |
| 7794 | + this.v = this.currentData; | |
| 7795 | + this.pv = this.v; | |
| 7796 | + this.lock = false; | |
| 7797 | + this.frameId = this.elem.globalData.frameId; | |
| 7798 | + }; | |
| 7799 | + TextProperty.prototype.getKeyframeValue = function() { | |
| 7800 | + var textKeys = this.data.d.k; | |
| 7801 | + var frameNum = this.elem.comp.renderedFrame; | |
| 7802 | + var i = 0; | |
| 7803 | + var len = textKeys.length; | |
| 7804 | + while (i <= len - 1) { | |
| 7805 | + if (i === len - 1 || textKeys[i + 1].t > frameNum) break; | |
| 7806 | + i += 1; | |
| 7807 | + } | |
| 7808 | + if (this.keysIndex !== i) this.keysIndex = i; | |
| 7809 | + return this.data.d.k[this.keysIndex].s; | |
| 7810 | + }; | |
| 7811 | + TextProperty.prototype.buildFinalText = function(text) { | |
| 7812 | + var charactersArray = []; | |
| 7813 | + var i = 0; | |
| 7814 | + var len = text.length; | |
| 7815 | + var charCode; | |
| 7816 | + var secondCharCode; | |
| 7817 | + var shouldCombine = false; | |
| 7818 | + var shouldCombineNext = false; | |
| 7819 | + var currentChars = ""; | |
| 7820 | + while (i < len) { | |
| 7821 | + shouldCombine = shouldCombineNext; | |
| 7822 | + shouldCombineNext = false; | |
| 7823 | + charCode = text.charCodeAt(i); | |
| 7824 | + currentChars = text.charAt(i); | |
| 7825 | + if (FontManager.isCombinedCharacter(charCode)) shouldCombine = true; | |
| 7826 | + else if (charCode >= 55296 && charCode <= 56319) if (FontManager.isRegionalFlag(text, i)) currentChars = text.substr(i, 14); | |
| 7827 | + else { | |
| 7828 | + secondCharCode = text.charCodeAt(i + 1); | |
| 7829 | + if (secondCharCode >= 56320 && secondCharCode <= 57343) if (FontManager.isModifier(charCode, secondCharCode)) { | |
| 7830 | + currentChars = text.substr(i, 2); | |
| 7831 | + shouldCombine = true; | |
| 7832 | + } else if (FontManager.isFlagEmoji(text.substr(i, 4))) currentChars = text.substr(i, 4); | |
| 7833 | + else currentChars = text.substr(i, 2); | |
| 7834 | + } | |
| 7835 | + else if (charCode > 56319) { | |
| 7836 | + secondCharCode = text.charCodeAt(i + 1); | |
| 7837 | + if (FontManager.isVariationSelector(charCode)) shouldCombine = true; | |
| 7838 | + } else if (FontManager.isZeroWidthJoiner(charCode)) { | |
| 7839 | + shouldCombine = true; | |
| 7840 | + shouldCombineNext = true; | |
| 7841 | + } | |
| 7842 | + if (shouldCombine) { | |
| 7843 | + charactersArray[charactersArray.length - 1] += currentChars; | |
| 7844 | + shouldCombine = false; | |
| 7845 | + } else charactersArray.push(currentChars); | |
| 7846 | + i += currentChars.length; | |
| 7847 | + } | |
| 7848 | + return charactersArray; | |
| 7849 | + }; | |
| 7850 | + TextProperty.prototype.completeTextData = function(documentData) { | |
| 7851 | + documentData.__complete = true; | |
| 7852 | + var fontManager = this.elem.globalData.fontManager; | |
| 7853 | + var data = this.data; | |
| 7854 | + var letters = []; | |
| 7855 | + var i; | |
| 7856 | + var len; | |
| 7857 | + var newLineFlag; | |
| 7858 | + var index = 0; | |
| 7859 | + var val; | |
| 7860 | + var anchorGrouping = data.m.g; | |
| 7861 | + var currentSize = 0; | |
| 7862 | + var currentPos = 0; | |
| 7863 | + var currentLine = 0; | |
| 7864 | + var lineWidths = []; | |
| 7865 | + var lineWidth = 0; | |
| 7866 | + var maxLineWidth = 0; | |
| 7867 | + var j; | |
| 7868 | + var jLen; | |
| 7869 | + var fontData = fontManager.getFontByName(documentData.f); | |
| 7870 | + var charData; | |
| 7871 | + var cLength = 0; | |
| 7872 | + var fontProps = getFontProperties(fontData); | |
| 7873 | + documentData.fWeight = fontProps.weight; | |
| 7874 | + documentData.fStyle = fontProps.style; | |
| 7875 | + documentData.finalSize = documentData.s; | |
| 7876 | + documentData.finalText = this.buildFinalText(documentData.t); | |
| 7877 | + len = documentData.finalText.length; | |
| 7878 | + documentData.finalLineHeight = documentData.lh; | |
| 7879 | + var trackingOffset = documentData.tr / 1e3 * documentData.finalSize; | |
| 7880 | + var charCode; | |
| 7881 | + if (documentData.sz) { | |
| 7882 | + var flag = true; | |
| 7883 | + var boxWidth = documentData.sz[0]; | |
| 7884 | + var boxHeight = documentData.sz[1]; | |
| 7885 | + var currentHeight; | |
| 7886 | + var finalText; | |
| 7887 | + while (flag) { | |
| 7888 | + finalText = this.buildFinalText(documentData.t); | |
| 7889 | + currentHeight = 0; | |
| 7890 | + lineWidth = 0; | |
| 7891 | + len = finalText.length; | |
| 7892 | + trackingOffset = documentData.tr / 1e3 * documentData.finalSize; | |
| 7893 | + var lastSpaceIndex = -1; | |
| 7894 | + for (i = 0; i < len; i += 1) { | |
| 7895 | + charCode = finalText[i].charCodeAt(0); | |
| 7896 | + newLineFlag = false; | |
| 7897 | + if (finalText[i] === " ") lastSpaceIndex = i; | |
| 7898 | + else if (charCode === 13 || charCode === 3) { | |
| 7899 | + lineWidth = 0; | |
| 7900 | + newLineFlag = true; | |
| 7901 | + currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; | |
| 7902 | + } | |
| 7903 | + if (fontManager.chars) { | |
| 7904 | + charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily); | |
| 7905 | + cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; | |
| 7906 | + } else cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize); | |
| 7907 | + if (lineWidth + cLength > boxWidth && finalText[i] !== " ") { | |
| 7908 | + if (lastSpaceIndex === -1) len += 1; | |
| 7909 | + else i = lastSpaceIndex; | |
| 7910 | + currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; | |
| 7911 | + finalText.splice(i, lastSpaceIndex === i ? 1 : 0, "\r"); | |
| 7912 | + lastSpaceIndex = -1; | |
| 7913 | + lineWidth = 0; | |
| 7914 | + } else { | |
| 7915 | + lineWidth += cLength; | |
| 7916 | + lineWidth += trackingOffset; | |
| 7917 | + } | |
| 7918 | + } | |
| 7919 | + currentHeight += fontData.ascent * documentData.finalSize / 100; | |
| 7920 | + if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) { | |
| 7921 | + documentData.finalSize -= 1; | |
| 7922 | + documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s; | |
| 7923 | + } else { | |
| 7924 | + documentData.finalText = finalText; | |
| 7925 | + len = documentData.finalText.length; | |
| 7926 | + flag = false; | |
| 7927 | + } | |
| 7928 | + } | |
| 7929 | + } | |
| 7930 | + lineWidth = -trackingOffset; | |
| 7931 | + cLength = 0; | |
| 7932 | + var uncollapsedSpaces = 0; | |
| 7933 | + var currentChar; | |
| 7934 | + for (i = 0; i < len; i += 1) { | |
| 7935 | + newLineFlag = false; | |
| 7936 | + currentChar = documentData.finalText[i]; | |
| 7937 | + charCode = currentChar.charCodeAt(0); | |
| 7938 | + if (charCode === 13 || charCode === 3) { | |
| 7939 | + uncollapsedSpaces = 0; | |
| 7940 | + lineWidths.push(lineWidth); | |
| 7941 | + maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; | |
| 7942 | + lineWidth = -2 * trackingOffset; | |
| 7943 | + val = ""; | |
| 7944 | + newLineFlag = true; | |
| 7945 | + currentLine += 1; | |
| 7946 | + } else val = currentChar; | |
| 7947 | + if (fontManager.chars) { | |
| 7948 | + charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily); | |
| 7949 | + cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; | |
| 7950 | + } else cLength = fontManager.measureText(val, documentData.f, documentData.finalSize); | |
| 7951 | + if (currentChar === " ") uncollapsedSpaces += cLength + trackingOffset; | |
| 7952 | + else { | |
| 7953 | + lineWidth += cLength + trackingOffset + uncollapsedSpaces; | |
| 7954 | + uncollapsedSpaces = 0; | |
| 7955 | + } | |
| 7956 | + letters.push({ | |
| 7957 | + l: cLength, | |
| 7958 | + an: cLength, | |
| 7959 | + add: currentSize, | |
| 7960 | + n: newLineFlag, | |
| 7961 | + anIndexes: [], | |
| 7962 | + val, | |
| 7963 | + line: currentLine, | |
| 7964 | + animatorJustifyOffset: 0 | |
| 7965 | + }); | |
| 7966 | + if (anchorGrouping == 2) { | |
| 7967 | + currentSize += cLength; | |
| 7968 | + if (val === "" || val === " " || i === len - 1) { | |
| 7969 | + if (val === "" || val === " ") currentSize -= cLength; | |
| 7970 | + while (currentPos <= i) { | |
| 7971 | + letters[currentPos].an = currentSize; | |
| 7972 | + letters[currentPos].ind = index; | |
| 7973 | + letters[currentPos].extra = cLength; | |
| 7974 | + currentPos += 1; | |
| 7975 | + } | |
| 7976 | + index += 1; | |
| 7977 | + currentSize = 0; | |
| 7978 | + } | |
| 7979 | + } else if (anchorGrouping == 3) { | |
| 7980 | + currentSize += cLength; | |
| 7981 | + if (val === "" || i === len - 1) { | |
| 7982 | + if (val === "") currentSize -= cLength; | |
| 7983 | + while (currentPos <= i) { | |
| 7984 | + letters[currentPos].an = currentSize; | |
| 7985 | + letters[currentPos].ind = index; | |
| 7986 | + letters[currentPos].extra = cLength; | |
| 7987 | + currentPos += 1; | |
| 7988 | + } | |
| 7989 | + currentSize = 0; | |
| 7990 | + index += 1; | |
| 7991 | + } | |
| 7992 | + } else { | |
| 7993 | + letters[index].ind = index; | |
| 7994 | + letters[index].extra = 0; | |
| 7995 | + index += 1; | |
| 7996 | + } | |
| 7997 | + } | |
| 7998 | + documentData.l = letters; | |
| 7999 | + maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; | |
| 8000 | + lineWidths.push(lineWidth); | |
| 8001 | + if (documentData.sz) { | |
| 8002 | + documentData.boxWidth = documentData.sz[0]; | |
| 8003 | + documentData.justifyOffset = 0; | |
| 8004 | + } else { | |
| 8005 | + documentData.boxWidth = maxLineWidth; | |
| 8006 | + switch (documentData.j) { | |
| 8007 | + case 1: | |
| 8008 | + documentData.justifyOffset = -documentData.boxWidth; | |
| 8009 | + break; | |
| 8010 | + case 2: | |
| 8011 | + documentData.justifyOffset = -documentData.boxWidth / 2; | |
| 8012 | + break; | |
| 8013 | + default: documentData.justifyOffset = 0; | |
| 8014 | + } | |
| 8015 | + } | |
| 8016 | + documentData.lineWidths = lineWidths; | |
| 8017 | + var animators = data.a; | |
| 8018 | + var animatorData; | |
| 8019 | + var letterData; | |
| 8020 | + jLen = animators.length; | |
| 8021 | + var based; | |
| 8022 | + var ind; | |
| 8023 | + var indexes = []; | |
| 8024 | + for (j = 0; j < jLen; j += 1) { | |
| 8025 | + animatorData = animators[j]; | |
| 8026 | + if (animatorData.a.sc) documentData.strokeColorAnim = true; | |
| 8027 | + if (animatorData.a.sw) documentData.strokeWidthAnim = true; | |
| 8028 | + if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) documentData.fillColorAnim = true; | |
| 8029 | + ind = 0; | |
| 8030 | + based = animatorData.s.b; | |
| 8031 | + for (i = 0; i < len; i += 1) { | |
| 8032 | + letterData = letters[i]; | |
| 8033 | + letterData.anIndexes[j] = ind; | |
| 8034 | + 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)) { | |
| 8035 | + if (animatorData.s.rn === 1) indexes.push(ind); | |
| 8036 | + ind += 1; | |
| 8037 | + } | |
| 8038 | + } | |
| 8039 | + data.a[j].s.totalChars = ind; | |
| 8040 | + var currentInd = -1; | |
| 8041 | + var newInd; | |
| 8042 | + if (animatorData.s.rn === 1) for (i = 0; i < len; i += 1) { | |
| 8043 | + letterData = letters[i]; | |
| 8044 | + if (currentInd != letterData.anIndexes[j]) { | |
| 8045 | + currentInd = letterData.anIndexes[j]; | |
| 8046 | + newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0]; | |
| 8047 | + } | |
| 8048 | + letterData.anIndexes[j] = newInd; | |
| 8049 | + } | |
| 8050 | + } | |
| 8051 | + documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2; | |
| 8052 | + documentData.ls = documentData.ls || 0; | |
| 8053 | + documentData.ascent = fontData.ascent * documentData.finalSize / 100; | |
| 8054 | + }; | |
| 8055 | + TextProperty.prototype.updateDocumentData = function(newData, index) { | |
| 8056 | + index = index === void 0 ? this.keysIndex : index; | |
| 8057 | + var dData = this.copyData({}, this.data.d.k[index].s); | |
| 8058 | + dData = this.copyData(dData, newData); | |
| 8059 | + this.data.d.k[index].s = dData; | |
| 8060 | + this.recalculate(index); | |
| 8061 | + this.setCurrentData(dData); | |
| 8062 | + this.elem.addDynamicProperty(this); | |
| 8063 | + }; | |
| 8064 | + TextProperty.prototype.recalculate = function(index) { | |
| 8065 | + var dData = this.data.d.k[index].s; | |
| 8066 | + dData.__complete = false; | |
| 8067 | + this.keysIndex = 0; | |
| 8068 | + this._isFirstFrame = true; | |
| 8069 | + this.getValue(dData); | |
| 8070 | + }; | |
| 8071 | + TextProperty.prototype.canResizeFont = function(_canResize) { | |
| 8072 | + this.canResize = _canResize; | |
| 8073 | + this.recalculate(this.keysIndex); | |
| 8074 | + this.elem.addDynamicProperty(this); | |
| 8075 | + }; | |
| 8076 | + TextProperty.prototype.setMinimumFontSize = function(_fontValue) { | |
| 8077 | + this.minimumFontSize = Math.floor(_fontValue) || 1; | |
| 8078 | + this.recalculate(this.keysIndex); | |
| 8079 | + this.elem.addDynamicProperty(this); | |
| 8080 | + }; | |
| 8081 | + var TextSelectorProp = function() { | |
| 8082 | + var max = Math.max; | |
| 8083 | + var min = Math.min; | |
| 8084 | + var floor = Math.floor; | |
| 8085 | + function TextSelectorPropFactory(elem, data) { | |
| 8086 | + this._currentTextLength = -1; | |
| 8087 | + this.k = false; | |
| 8088 | + this.data = data; | |
| 8089 | + this.elem = elem; | |
| 8090 | + this.comp = elem.comp; | |
| 8091 | + this.finalS = 0; | |
| 8092 | + this.finalE = 0; | |
| 8093 | + this.initDynamicPropertyContainer(elem); | |
| 8094 | + this.s = PropertyFactory.getProp(elem, data.s || { k: 0 }, 0, 0, this); | |
| 8095 | + if ("e" in data) this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this); | |
| 8096 | + else this.e = { v: 100 }; | |
| 8097 | + this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this); | |
| 8098 | + this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this); | |
| 8099 | + this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this); | |
| 8100 | + this.sm = PropertyFactory.getProp(elem, data.sm || { k: 100 }, 0, 0, this); | |
| 8101 | + this.a = PropertyFactory.getProp(elem, data.a, 0, .01, this); | |
| 8102 | + if (!this.dynamicProperties.length) this.getValue(); | |
| 8103 | + } | |
| 8104 | + TextSelectorPropFactory.prototype = { | |
| 8105 | + getMult: function getMult(ind) { | |
| 8106 | + if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) this.getValue(); | |
| 8107 | + var x1 = 0; | |
| 8108 | + var y1 = 0; | |
| 8109 | + var x2 = 1; | |
| 8110 | + var y2 = 1; | |
| 8111 | + if (this.ne.v > 0) x1 = this.ne.v / 100; | |
| 8112 | + else y1 = -this.ne.v / 100; | |
| 8113 | + if (this.xe.v > 0) x2 = 1 - this.xe.v / 100; | |
| 8114 | + else y2 = 1 + this.xe.v / 100; | |
| 8115 | + var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get; | |
| 8116 | + var mult = 0; | |
| 8117 | + var s = this.finalS; | |
| 8118 | + var e = this.finalE; | |
| 8119 | + var type = this.data.sh; | |
| 8120 | + if (type === 2) { | |
| 8121 | + if (e === s) mult = ind >= e ? 1 : 0; | |
| 8122 | + else mult = max(0, min(.5 / (e - s) + (ind - s) / (e - s), 1)); | |
| 8123 | + mult = easer(mult); | |
| 8124 | + } else if (type === 3) { | |
| 8125 | + if (e === s) mult = ind >= e ? 0 : 1; | |
| 8126 | + else mult = 1 - max(0, min(.5 / (e - s) + (ind - s) / (e - s), 1)); | |
| 8127 | + mult = easer(mult); | |
| 8128 | + } else if (type === 4) { | |
| 8129 | + if (e === s) mult = 0; | |
| 8130 | + else { | |
| 8131 | + mult = max(0, min(.5 / (e - s) + (ind - s) / (e - s), 1)); | |
| 8132 | + if (mult < .5) mult *= 2; | |
| 8133 | + else mult = 1 - 2 * (mult - .5); | |
| 8134 | + } | |
| 8135 | + mult = easer(mult); | |
| 8136 | + } else if (type === 5) { | |
| 8137 | + if (e === s) mult = 0; | |
| 8138 | + else { | |
| 8139 | + var tot = e - s; | |
| 8140 | + ind = min(max(0, ind + .5 - s), e - s); | |
| 8141 | + var x = -tot / 2 + ind; | |
| 8142 | + var a = tot / 2; | |
| 8143 | + mult = Math.sqrt(1 - x * x / (a * a)); | |
| 8144 | + } | |
| 8145 | + mult = easer(mult); | |
| 8146 | + } else if (type === 6) { | |
| 8147 | + if (e === s) mult = 0; | |
| 8148 | + else { | |
| 8149 | + ind = min(max(0, ind + .5 - s), e - s); | |
| 8150 | + mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; | |
| 8151 | + } | |
| 8152 | + mult = easer(mult); | |
| 8153 | + } else { | |
| 8154 | + if (ind >= floor(s)) if (ind - s < 0) mult = max(0, min(min(e, 1) - (s - ind), 1)); | |
| 8155 | + else mult = max(0, min(e - ind, 1)); | |
| 8156 | + mult = easer(mult); | |
| 8157 | + } | |
| 8158 | + if (this.sm.v !== 100) { | |
| 8159 | + var smoothness = this.sm.v * .01; | |
| 8160 | + if (smoothness === 0) smoothness = 1e-8; | |
| 8161 | + var threshold = .5 - smoothness * .5; | |
| 8162 | + if (mult < threshold) mult = 0; | |
| 8163 | + else { | |
| 8164 | + mult = (mult - threshold) / smoothness; | |
| 8165 | + if (mult > 1) mult = 1; | |
| 8166 | + } | |
| 8167 | + } | |
| 8168 | + return mult * this.a.v; | |
| 8169 | + }, | |
| 8170 | + getValue: function getValue(newCharsFlag) { | |
| 8171 | + this.iterateDynamicProperties(); | |
| 8172 | + this._mdf = newCharsFlag || this._mdf; | |
| 8173 | + this._currentTextLength = this.elem.textProperty.currentData.l.length || 0; | |
| 8174 | + if (newCharsFlag && this.data.r === 2) this.e.v = this._currentTextLength; | |
| 8175 | + var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars; | |
| 8176 | + var o = this.o.v / divisor; | |
| 8177 | + var s = this.s.v / divisor + o; | |
| 8178 | + var e = this.e.v / divisor + o; | |
| 8179 | + if (s > e) { | |
| 8180 | + var _s = s; | |
| 8181 | + s = e; | |
| 8182 | + e = _s; | |
| 8183 | + } | |
| 8184 | + this.finalS = s; | |
| 8185 | + this.finalE = e; | |
| 8186 | + } | |
| 8187 | + }; | |
| 8188 | + extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory); | |
| 8189 | + function getTextSelectorProp(elem, data, arr) { | |
| 8190 | + return new TextSelectorPropFactory(elem, data, arr); | |
| 8191 | + } | |
| 8192 | + return { getTextSelectorProp }; | |
| 8193 | + }(); | |
| 8194 | + function TextAnimatorDataProperty(elem, animatorProps, container) { | |
| 8195 | + var defaultData = { propType: false }; | |
| 8196 | + var getProp = PropertyFactory.getProp; | |
| 8197 | + var textAnimatorAnimatables = animatorProps.a; | |
| 8198 | + this.a = { | |
| 8199 | + r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData, | |
| 8200 | + rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData, | |
| 8201 | + ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData, | |
| 8202 | + sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData, | |
| 8203 | + sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData, | |
| 8204 | + s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, .01, container) : defaultData, | |
| 8205 | + a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData, | |
| 8206 | + o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, .01, container) : defaultData, | |
| 8207 | + p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData, | |
| 8208 | + sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData, | |
| 8209 | + sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData, | |
| 8210 | + fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData, | |
| 8211 | + fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData, | |
| 8212 | + fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, .01, container) : defaultData, | |
| 8213 | + fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, .01, container) : defaultData, | |
| 8214 | + t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData | |
| 8215 | + }; | |
| 8216 | + this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container); | |
| 8217 | + this.s.t = animatorProps.s.t; | |
| 8218 | + } | |
| 8219 | + function TextAnimatorProperty(textData, renderType, elem) { | |
| 8220 | + this._isFirstFrame = true; | |
| 8221 | + this._hasMaskedPath = false; | |
| 8222 | + this._frameId = -1; | |
| 8223 | + this._textData = textData; | |
| 8224 | + this._renderType = renderType; | |
| 8225 | + this._elem = elem; | |
| 8226 | + this._animatorsData = createSizedArray(this._textData.a.length); | |
| 8227 | + this._pathData = {}; | |
| 8228 | + this._moreOptions = { alignment: {} }; | |
| 8229 | + this.renderedLetters = []; | |
| 8230 | + this.lettersChangedFlag = false; | |
| 8231 | + this.initDynamicPropertyContainer(elem); | |
| 8232 | + } | |
| 8233 | + TextAnimatorProperty.prototype.searchProperties = function() { | |
| 8234 | + var i; | |
| 8235 | + var len = this._textData.a.length; | |
| 8236 | + var animatorProps; | |
| 8237 | + var getProp = PropertyFactory.getProp; | |
| 8238 | + for (i = 0; i < len; i += 1) { | |
| 8239 | + animatorProps = this._textData.a[i]; | |
| 8240 | + this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this); | |
| 8241 | + } | |
| 8242 | + if (this._textData.p && "m" in this._textData.p) { | |
| 8243 | + this._pathData = { | |
| 8244 | + a: getProp(this._elem, this._textData.p.a, 0, 0, this), | |
| 8245 | + f: getProp(this._elem, this._textData.p.f, 0, 0, this), | |
| 8246 | + l: getProp(this._elem, this._textData.p.l, 0, 0, this), | |
| 8247 | + r: getProp(this._elem, this._textData.p.r, 0, 0, this), | |
| 8248 | + p: getProp(this._elem, this._textData.p.p, 0, 0, this), | |
| 8249 | + m: this._elem.maskManager.getMaskProperty(this._textData.p.m) | |
| 8250 | + }; | |
| 8251 | + this._hasMaskedPath = true; | |
| 8252 | + } else this._hasMaskedPath = false; | |
| 8253 | + this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this); | |
| 8254 | + }; | |
| 8255 | + TextAnimatorProperty.prototype.getMeasures = function(documentData, lettersChangedFlag) { | |
| 8256 | + this.lettersChangedFlag = lettersChangedFlag; | |
| 8257 | + if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) return; | |
| 8258 | + this._isFirstFrame = false; | |
| 8259 | + var alignment = this._moreOptions.alignment.v; | |
| 8260 | + var animators = this._animatorsData; | |
| 8261 | + var textData = this._textData; | |
| 8262 | + var matrixHelper = this.mHelper; | |
| 8263 | + var renderType = this._renderType; | |
| 8264 | + var renderedLettersCount = this.renderedLetters.length; | |
| 8265 | + var xPos; | |
| 8266 | + var yPos; | |
| 8267 | + var i; | |
| 8268 | + var len; | |
| 8269 | + var letters = documentData.l; | |
| 8270 | + var pathInfo; | |
| 8271 | + var currentLength; | |
| 8272 | + var currentPoint; | |
| 8273 | + var segmentLength; | |
| 8274 | + var flag; | |
| 8275 | + var pointInd; | |
| 8276 | + var segmentInd; | |
| 8277 | + var prevPoint; | |
| 8278 | + var points; | |
| 8279 | + var segments; | |
| 8280 | + var partialLength; | |
| 8281 | + var totalLength; | |
| 8282 | + var perc; | |
| 8283 | + var tanAngle; | |
| 8284 | + var mask; | |
| 8285 | + if (this._hasMaskedPath) { | |
| 8286 | + mask = this._pathData.m; | |
| 8287 | + if (!this._pathData.n || this._pathData._mdf) { | |
| 8288 | + var paths = mask.v; | |
| 8289 | + if (this._pathData.r.v) paths = paths.reverse(); | |
| 8290 | + pathInfo = { | |
| 8291 | + tLength: 0, | |
| 8292 | + segments: [] | |
| 8293 | + }; | |
| 8294 | + len = paths._length - 1; | |
| 8295 | + var bezierData; | |
| 8296 | + totalLength = 0; | |
| 8297 | + for (i = 0; i < len; i += 1) { | |
| 8298 | + bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]); | |
| 8299 | + pathInfo.tLength += bezierData.segmentLength; | |
| 8300 | + pathInfo.segments.push(bezierData); | |
| 8301 | + totalLength += bezierData.segmentLength; | |
| 8302 | + } | |
| 8303 | + i = len; | |
| 8304 | + if (mask.v.c) { | |
| 8305 | + bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]); | |
| 8306 | + pathInfo.tLength += bezierData.segmentLength; | |
| 8307 | + pathInfo.segments.push(bezierData); | |
| 8308 | + totalLength += bezierData.segmentLength; | |
| 8309 | + } | |
| 8310 | + this._pathData.pi = pathInfo; | |
| 8311 | + } | |
| 8312 | + pathInfo = this._pathData.pi; | |
| 8313 | + currentLength = this._pathData.f.v; | |
| 8314 | + segmentInd = 0; | |
| 8315 | + pointInd = 1; | |
| 8316 | + segmentLength = 0; | |
| 8317 | + flag = true; | |
| 8318 | + segments = pathInfo.segments; | |
| 8319 | + if (currentLength < 0 && mask.v.c) { | |
| 8320 | + if (pathInfo.tLength < Math.abs(currentLength)) currentLength = -Math.abs(currentLength) % pathInfo.tLength; | |
| 8321 | + segmentInd = segments.length - 1; | |
| 8322 | + points = segments[segmentInd].points; | |
| 8323 | + pointInd = points.length - 1; | |
| 8324 | + while (currentLength < 0) { | |
| 8325 | + currentLength += points[pointInd].partialLength; | |
| 8326 | + pointInd -= 1; | |
| 8327 | + if (pointInd < 0) { | |
| 8328 | + segmentInd -= 1; | |
| 8329 | + points = segments[segmentInd].points; | |
| 8330 | + pointInd = points.length - 1; | |
| 8331 | + } | |
| 8332 | + } | |
| 8333 | + } | |
| 8334 | + points = segments[segmentInd].points; | |
| 8335 | + prevPoint = points[pointInd - 1]; | |
| 8336 | + currentPoint = points[pointInd]; | |
| 8337 | + partialLength = currentPoint.partialLength; | |
| 8338 | + } | |
| 8339 | + len = letters.length; | |
| 8340 | + xPos = 0; | |
| 8341 | + yPos = 0; | |
| 8342 | + var yOff = documentData.finalSize * 1.2 * .714; | |
| 8343 | + var firstLine = true; | |
| 8344 | + var animatorProps; | |
| 8345 | + var animatorSelector; | |
| 8346 | + var j; | |
| 8347 | + var jLen; | |
| 8348 | + var letterValue; | |
| 8349 | + jLen = animators.length; | |
| 8350 | + var mult; | |
| 8351 | + var ind = -1; | |
| 8352 | + var offf; | |
| 8353 | + var xPathPos; | |
| 8354 | + var yPathPos; | |
| 8355 | + var initPathPos = currentLength; | |
| 8356 | + var initSegmentInd = segmentInd; | |
| 8357 | + var initPointInd = pointInd; | |
| 8358 | + var currentLine = -1; | |
| 8359 | + var elemOpacity; | |
| 8360 | + var sc; | |
| 8361 | + var sw; | |
| 8362 | + var fc; | |
| 8363 | + var k; | |
| 8364 | + var letterSw; | |
| 8365 | + var letterSc; | |
| 8366 | + var letterFc; | |
| 8367 | + var letterM = ""; | |
| 8368 | + var letterP = this.defaultPropsArray; | |
| 8369 | + var letterO; | |
| 8370 | + if (documentData.j === 2 || documentData.j === 1) { | |
| 8371 | + var animatorJustifyOffset = 0; | |
| 8372 | + var animatorFirstCharOffset = 0; | |
| 8373 | + var justifyOffsetMult = documentData.j === 2 ? -.5 : -1; | |
| 8374 | + var lastIndex = 0; | |
| 8375 | + var isNewLine = true; | |
| 8376 | + for (i = 0; i < len; i += 1) if (letters[i].n) { | |
| 8377 | + if (animatorJustifyOffset) animatorJustifyOffset += animatorFirstCharOffset; | |
| 8378 | + while (lastIndex < i) { | |
| 8379 | + letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; | |
| 8380 | + lastIndex += 1; | |
| 8381 | + } | |
| 8382 | + animatorJustifyOffset = 0; | |
| 8383 | + isNewLine = true; | |
| 8384 | + } else { | |
| 8385 | + for (j = 0; j < jLen; j += 1) { | |
| 8386 | + animatorProps = animators[j].a; | |
| 8387 | + if (animatorProps.t.propType) { | |
| 8388 | + if (isNewLine && documentData.j === 2) animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult; | |
| 8389 | + animatorSelector = animators[j].s; | |
| 8390 | + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 8391 | + if (mult.length) animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult; | |
| 8392 | + else animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult; | |
| 8393 | + } | |
| 8394 | + } | |
| 8395 | + isNewLine = false; | |
| 8396 | + } | |
| 8397 | + if (animatorJustifyOffset) animatorJustifyOffset += animatorFirstCharOffset; | |
| 8398 | + while (lastIndex < i) { | |
| 8399 | + letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; | |
| 8400 | + lastIndex += 1; | |
| 8401 | + } | |
| 8402 | + } | |
| 8403 | + for (i = 0; i < len; i += 1) { | |
| 8404 | + matrixHelper.reset(); | |
| 8405 | + elemOpacity = 1; | |
| 8406 | + if (letters[i].n) { | |
| 8407 | + xPos = 0; | |
| 8408 | + yPos += documentData.yOffset; | |
| 8409 | + yPos += firstLine ? 1 : 0; | |
| 8410 | + currentLength = initPathPos; | |
| 8411 | + firstLine = false; | |
| 8412 | + if (this._hasMaskedPath) { | |
| 8413 | + segmentInd = initSegmentInd; | |
| 8414 | + pointInd = initPointInd; | |
| 8415 | + points = segments[segmentInd].points; | |
| 8416 | + prevPoint = points[pointInd - 1]; | |
| 8417 | + currentPoint = points[pointInd]; | |
| 8418 | + partialLength = currentPoint.partialLength; | |
| 8419 | + segmentLength = 0; | |
| 8420 | + } | |
| 8421 | + letterM = ""; | |
| 8422 | + letterFc = ""; | |
| 8423 | + letterSw = ""; | |
| 8424 | + letterO = ""; | |
| 8425 | + letterP = this.defaultPropsArray; | |
| 8426 | + } else { | |
| 8427 | + if (this._hasMaskedPath) { | |
| 8428 | + if (currentLine !== letters[i].line) { | |
| 8429 | + switch (documentData.j) { | |
| 8430 | + case 1: | |
| 8431 | + currentLength += totalLength - documentData.lineWidths[letters[i].line]; | |
| 8432 | + break; | |
| 8433 | + case 2: | |
| 8434 | + currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2; | |
| 8435 | + break; | |
| 8436 | + default: break; | |
| 8437 | + } | |
| 8438 | + currentLine = letters[i].line; | |
| 8439 | + } | |
| 8440 | + if (ind !== letters[i].ind) { | |
| 8441 | + if (letters[ind]) currentLength += letters[ind].extra; | |
| 8442 | + currentLength += letters[i].an / 2; | |
| 8443 | + ind = letters[i].ind; | |
| 8444 | + } | |
| 8445 | + currentLength += alignment[0] * letters[i].an * .005; | |
| 8446 | + var animatorOffset = 0; | |
| 8447 | + for (j = 0; j < jLen; j += 1) { | |
| 8448 | + animatorProps = animators[j].a; | |
| 8449 | + if (animatorProps.p.propType) { | |
| 8450 | + animatorSelector = animators[j].s; | |
| 8451 | + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 8452 | + if (mult.length) animatorOffset += animatorProps.p.v[0] * mult[0]; | |
| 8453 | + else animatorOffset += animatorProps.p.v[0] * mult; | |
| 8454 | + } | |
| 8455 | + if (animatorProps.a.propType) { | |
| 8456 | + animatorSelector = animators[j].s; | |
| 8457 | + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 8458 | + if (mult.length) animatorOffset += animatorProps.a.v[0] * mult[0]; | |
| 8459 | + else animatorOffset += animatorProps.a.v[0] * mult; | |
| 8460 | + } | |
| 8461 | + } | |
| 8462 | + flag = true; | |
| 8463 | + if (this._pathData.a.v) { | |
| 8464 | + currentLength = letters[0].an * .5 + (totalLength - this._pathData.f.v - letters[0].an * .5 - letters[letters.length - 1].an * .5) * ind / (len - 1); | |
| 8465 | + currentLength += this._pathData.f.v; | |
| 8466 | + } | |
| 8467 | + while (flag) if (segmentLength + partialLength >= currentLength + animatorOffset || !points) { | |
| 8468 | + perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength; | |
| 8469 | + xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc; | |
| 8470 | + yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc; | |
| 8471 | + matrixHelper.translate(-alignment[0] * letters[i].an * .005, -(alignment[1] * yOff) * .01); | |
| 8472 | + flag = false; | |
| 8473 | + } else if (points) { | |
| 8474 | + segmentLength += currentPoint.partialLength; | |
| 8475 | + pointInd += 1; | |
| 8476 | + if (pointInd >= points.length) { | |
| 8477 | + pointInd = 0; | |
| 8478 | + segmentInd += 1; | |
| 8479 | + if (!segments[segmentInd]) if (mask.v.c) { | |
| 8480 | + pointInd = 0; | |
| 8481 | + segmentInd = 0; | |
| 8482 | + points = segments[segmentInd].points; | |
| 8483 | + } else { | |
| 8484 | + segmentLength -= currentPoint.partialLength; | |
| 8485 | + points = null; | |
| 8486 | + } | |
| 8487 | + else points = segments[segmentInd].points; | |
| 8488 | + } | |
| 8489 | + if (points) { | |
| 8490 | + prevPoint = currentPoint; | |
| 8491 | + currentPoint = points[pointInd]; | |
| 8492 | + partialLength = currentPoint.partialLength; | |
| 8493 | + } | |
| 8494 | + } | |
| 8495 | + offf = letters[i].an / 2 - letters[i].add; | |
| 8496 | + matrixHelper.translate(-offf, 0, 0); | |
| 8497 | + } else { | |
| 8498 | + offf = letters[i].an / 2 - letters[i].add; | |
| 8499 | + matrixHelper.translate(-offf, 0, 0); | |
| 8500 | + matrixHelper.translate(-alignment[0] * letters[i].an * .005, -alignment[1] * yOff * .01, 0); | |
| 8501 | + } | |
| 8502 | + for (j = 0; j < jLen; j += 1) { | |
| 8503 | + animatorProps = animators[j].a; | |
| 8504 | + if (animatorProps.t.propType) { | |
| 8505 | + animatorSelector = animators[j].s; | |
| 8506 | + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 8507 | + if (xPos !== 0 || documentData.j !== 0) if (this._hasMaskedPath) if (mult.length) currentLength += animatorProps.t.v * mult[0]; | |
| 8508 | + else currentLength += animatorProps.t.v * mult; | |
| 8509 | + else if (mult.length) xPos += animatorProps.t.v * mult[0]; | |
| 8510 | + else xPos += animatorProps.t.v * mult; | |
| 8511 | + } | |
| 8512 | + } | |
| 8513 | + if (documentData.strokeWidthAnim) sw = documentData.sw || 0; | |
| 8514 | + if (documentData.strokeColorAnim) if (documentData.sc) sc = [ | |
| 8515 | + documentData.sc[0], | |
| 8516 | + documentData.sc[1], | |
| 8517 | + documentData.sc[2] | |
| 8518 | + ]; | |
| 8519 | + else sc = [ | |
| 8520 | + 0, | |
| 8521 | + 0, | |
| 8522 | + 0 | |
| 8523 | + ]; | |
| 8524 | + if (documentData.fillColorAnim && documentData.fc) fc = [ | |
| 8525 | + documentData.fc[0], | |
| 8526 | + documentData.fc[1], | |
| 8527 | + documentData.fc[2] | |
| 8528 | + ]; | |
| 8529 | + for (j = 0; j < jLen; j += 1) { | |
| 8530 | + animatorProps = animators[j].a; | |
| 8531 | + if (animatorProps.a.propType) { | |
| 8532 | + animatorSelector = animators[j].s; | |
| 8533 | + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 8534 | + if (mult.length) matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]); | |
| 8535 | + else matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult); | |
| 8536 | + } | |
| 8537 | + } | |
| 8538 | + for (j = 0; j < jLen; j += 1) { | |
| 8539 | + animatorProps = animators[j].a; | |
| 8540 | + if (animatorProps.s.propType) { | |
| 8541 | + animatorSelector = animators[j].s; | |
| 8542 | + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 8543 | + if (mult.length) matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1); | |
| 8544 | + else matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1); | |
| 8545 | + } | |
| 8546 | + } | |
| 8547 | + for (j = 0; j < jLen; j += 1) { | |
| 8548 | + animatorProps = animators[j].a; | |
| 8549 | + animatorSelector = animators[j].s; | |
| 8550 | + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 8551 | + if (animatorProps.sk.propType) if (mult.length) matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]); | |
| 8552 | + else matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult); | |
| 8553 | + if (animatorProps.r.propType) if (mult.length) matrixHelper.rotateZ(-animatorProps.r.v * mult[2]); | |
| 8554 | + else matrixHelper.rotateZ(-animatorProps.r.v * mult); | |
| 8555 | + if (animatorProps.ry.propType) if (mult.length) matrixHelper.rotateY(animatorProps.ry.v * mult[1]); | |
| 8556 | + else matrixHelper.rotateY(animatorProps.ry.v * mult); | |
| 8557 | + if (animatorProps.rx.propType) if (mult.length) matrixHelper.rotateX(animatorProps.rx.v * mult[0]); | |
| 8558 | + else matrixHelper.rotateX(animatorProps.rx.v * mult); | |
| 8559 | + if (animatorProps.o.propType) if (mult.length) elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0]; | |
| 8560 | + else elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult; | |
| 8561 | + if (documentData.strokeWidthAnim && animatorProps.sw.propType) if (mult.length) sw += animatorProps.sw.v * mult[0]; | |
| 8562 | + else sw += animatorProps.sw.v * mult; | |
| 8563 | + if (documentData.strokeColorAnim && animatorProps.sc.propType) for (k = 0; k < 3; k += 1) if (mult.length) sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0]; | |
| 8564 | + else sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult; | |
| 8565 | + if (documentData.fillColorAnim && documentData.fc) { | |
| 8566 | + if (animatorProps.fc.propType) for (k = 0; k < 3; k += 1) if (mult.length) fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0]; | |
| 8567 | + else fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult; | |
| 8568 | + if (animatorProps.fh.propType) if (mult.length) fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]); | |
| 8569 | + else fc = addHueToRGB(fc, animatorProps.fh.v * mult); | |
| 8570 | + if (animatorProps.fs.propType) if (mult.length) fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]); | |
| 8571 | + else fc = addSaturationToRGB(fc, animatorProps.fs.v * mult); | |
| 8572 | + if (animatorProps.fb.propType) if (mult.length) fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]); | |
| 8573 | + else fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult); | |
| 8574 | + } | |
| 8575 | + } | |
| 8576 | + for (j = 0; j < jLen; j += 1) { | |
| 8577 | + animatorProps = animators[j].a; | |
| 8578 | + if (animatorProps.p.propType) { | |
| 8579 | + animatorSelector = animators[j].s; | |
| 8580 | + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 8581 | + if (this._hasMaskedPath) if (mult.length) matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]); | |
| 8582 | + else matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); | |
| 8583 | + else if (mult.length) matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]); | |
| 8584 | + else matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); | |
| 8585 | + } | |
| 8586 | + } | |
| 8587 | + if (documentData.strokeWidthAnim) letterSw = sw < 0 ? 0 : sw; | |
| 8588 | + if (documentData.strokeColorAnim) letterSc = "rgb(" + Math.round(sc[0] * 255) + "," + Math.round(sc[1] * 255) + "," + Math.round(sc[2] * 255) + ")"; | |
| 8589 | + if (documentData.fillColorAnim && documentData.fc) letterFc = "rgb(" + Math.round(fc[0] * 255) + "," + Math.round(fc[1] * 255) + "," + Math.round(fc[2] * 255) + ")"; | |
| 8590 | + if (this._hasMaskedPath) { | |
| 8591 | + matrixHelper.translate(0, -documentData.ls); | |
| 8592 | + matrixHelper.translate(0, alignment[1] * yOff * .01 + yPos, 0); | |
| 8593 | + if (this._pathData.p.v) { | |
| 8594 | + tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]); | |
| 8595 | + var rot = Math.atan(tanAngle) * 180 / Math.PI; | |
| 8596 | + if (currentPoint.point[0] < prevPoint.point[0]) rot += 180; | |
| 8597 | + matrixHelper.rotate(-rot * Math.PI / 180); | |
| 8598 | + } | |
| 8599 | + matrixHelper.translate(xPathPos, yPathPos, 0); | |
| 8600 | + currentLength -= alignment[0] * letters[i].an * .005; | |
| 8601 | + if (letters[i + 1] && ind !== letters[i + 1].ind) { | |
| 8602 | + currentLength += letters[i].an / 2; | |
| 8603 | + currentLength += documentData.tr * .001 * documentData.finalSize; | |
| 8604 | + } | |
| 8605 | + } else { | |
| 8606 | + matrixHelper.translate(xPos, yPos, 0); | |
| 8607 | + if (documentData.ps) matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); | |
| 8608 | + switch (documentData.j) { | |
| 8609 | + case 1: | |
| 8610 | + matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0); | |
| 8611 | + break; | |
| 8612 | + case 2: | |
| 8613 | + matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0); | |
| 8614 | + break; | |
| 8615 | + default: break; | |
| 8616 | + } | |
| 8617 | + matrixHelper.translate(0, -documentData.ls); | |
| 8618 | + matrixHelper.translate(offf, 0, 0); | |
| 8619 | + matrixHelper.translate(alignment[0] * letters[i].an * .005, alignment[1] * yOff * .01, 0); | |
| 8620 | + xPos += letters[i].l + documentData.tr * .001 * documentData.finalSize; | |
| 8621 | + } | |
| 8622 | + if (renderType === "html") letterM = matrixHelper.toCSS(); | |
| 8623 | + else if (renderType === "svg") letterM = matrixHelper.to2dCSS(); | |
| 8624 | + else letterP = [ | |
| 8625 | + matrixHelper.props[0], | |
| 8626 | + matrixHelper.props[1], | |
| 8627 | + matrixHelper.props[2], | |
| 8628 | + matrixHelper.props[3], | |
| 8629 | + matrixHelper.props[4], | |
| 8630 | + matrixHelper.props[5], | |
| 8631 | + matrixHelper.props[6], | |
| 8632 | + matrixHelper.props[7], | |
| 8633 | + matrixHelper.props[8], | |
| 8634 | + matrixHelper.props[9], | |
| 8635 | + matrixHelper.props[10], | |
| 8636 | + matrixHelper.props[11], | |
| 8637 | + matrixHelper.props[12], | |
| 8638 | + matrixHelper.props[13], | |
| 8639 | + matrixHelper.props[14], | |
| 8640 | + matrixHelper.props[15] | |
| 8641 | + ]; | |
| 8642 | + letterO = elemOpacity; | |
| 8643 | + } | |
| 8644 | + if (renderedLettersCount <= i) { | |
| 8645 | + letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP); | |
| 8646 | + this.renderedLetters.push(letterValue); | |
| 8647 | + renderedLettersCount += 1; | |
| 8648 | + this.lettersChangedFlag = true; | |
| 8649 | + } else { | |
| 8650 | + letterValue = this.renderedLetters[i]; | |
| 8651 | + this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag; | |
| 8652 | + } | |
| 8653 | + } | |
| 8654 | + }; | |
| 8655 | + TextAnimatorProperty.prototype.getValue = function() { | |
| 8656 | + if (this._elem.globalData.frameId === this._frameId) return; | |
| 8657 | + this._frameId = this._elem.globalData.frameId; | |
| 8658 | + this.iterateDynamicProperties(); | |
| 8659 | + }; | |
| 8660 | + TextAnimatorProperty.prototype.mHelper = new Matrix(); | |
| 8661 | + TextAnimatorProperty.prototype.defaultPropsArray = []; | |
| 8662 | + extendPrototype([DynamicPropertyContainer], TextAnimatorProperty); | |
| 8663 | + function ITextElement() {} | |
| 8664 | + ITextElement.prototype.initElement = function(data, globalData, comp) { | |
| 8665 | + this.lettersChangedFlag = true; | |
| 8666 | + this.initFrame(); | |
| 8667 | + this.initBaseData(data, globalData, comp); | |
| 8668 | + this.textProperty = new TextProperty(this, data.t, this.dynamicProperties); | |
| 8669 | + this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this); | |
| 8670 | + this.initTransform(data, globalData, comp); | |
| 8671 | + this.initHierarchy(); | |
| 8672 | + this.initRenderable(); | |
| 8673 | + this.initRendererElement(); | |
| 8674 | + this.createContainerElements(); | |
| 8675 | + this.createRenderableComponents(); | |
| 8676 | + this.createContent(); | |
| 8677 | + this.hide(); | |
| 8678 | + this.textAnimator.searchProperties(this.dynamicProperties); | |
| 8679 | + }; | |
| 8680 | + ITextElement.prototype.prepareFrame = function(num) { | |
| 8681 | + this._mdf = false; | |
| 8682 | + this.prepareRenderableFrame(num); | |
| 8683 | + this.prepareProperties(num, this.isInRange); | |
| 8684 | + }; | |
| 8685 | + ITextElement.prototype.createPathShape = function(matrixHelper, shapes) { | |
| 8686 | + var j; | |
| 8687 | + var jLen = shapes.length; | |
| 8688 | + var pathNodes; | |
| 8689 | + var shapeStr = ""; | |
| 8690 | + for (j = 0; j < jLen; j += 1) if (shapes[j].ty === "sh") { | |
| 8691 | + pathNodes = shapes[j].ks.k; | |
| 8692 | + shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper); | |
| 8693 | + } | |
| 8694 | + return shapeStr; | |
| 8695 | + }; | |
| 8696 | + ITextElement.prototype.updateDocumentData = function(newData, index) { | |
| 8697 | + this.textProperty.updateDocumentData(newData, index); | |
| 8698 | + }; | |
| 8699 | + ITextElement.prototype.canResizeFont = function(_canResize) { | |
| 8700 | + this.textProperty.canResizeFont(_canResize); | |
| 8701 | + }; | |
| 8702 | + ITextElement.prototype.setMinimumFontSize = function(_fontSize) { | |
| 8703 | + this.textProperty.setMinimumFontSize(_fontSize); | |
| 8704 | + }; | |
| 8705 | + ITextElement.prototype.applyTextPropertiesToMatrix = function(documentData, matrixHelper, lineNumber, xPos, yPos) { | |
| 8706 | + if (documentData.ps) matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); | |
| 8707 | + matrixHelper.translate(0, -documentData.ls, 0); | |
| 8708 | + switch (documentData.j) { | |
| 8709 | + case 1: | |
| 8710 | + matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0); | |
| 8711 | + break; | |
| 8712 | + case 2: | |
| 8713 | + matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0); | |
| 8714 | + break; | |
| 8715 | + default: break; | |
| 8716 | + } | |
| 8717 | + matrixHelper.translate(xPos, yPos, 0); | |
| 8718 | + }; | |
| 8719 | + ITextElement.prototype.buildColor = function(colorData) { | |
| 8720 | + return "rgb(" + Math.round(colorData[0] * 255) + "," + Math.round(colorData[1] * 255) + "," + Math.round(colorData[2] * 255) + ")"; | |
| 8721 | + }; | |
| 8722 | + ITextElement.prototype.emptyProp = new LetterProps(); | |
| 8723 | + ITextElement.prototype.destroy = function() {}; | |
| 8724 | + ITextElement.prototype.validateText = function() { | |
| 8725 | + if (this.textProperty._mdf || this.textProperty._isFirstFrame) { | |
| 8726 | + this.buildNewText(); | |
| 8727 | + this.textProperty._isFirstFrame = false; | |
| 8728 | + this.textProperty._mdf = false; | |
| 8729 | + } | |
| 8730 | + }; | |
| 8731 | + var emptyShapeData = { shapes: [] }; | |
| 8732 | + function SVGTextLottieElement(data, globalData, comp) { | |
| 8733 | + this.textSpans = []; | |
| 8734 | + this.renderType = "svg"; | |
| 8735 | + this.initElement(data, globalData, comp); | |
| 8736 | + } | |
| 8737 | + extendPrototype([ | |
| 8738 | + BaseElement, | |
| 8739 | + TransformElement, | |
| 8740 | + SVGBaseElement, | |
| 8741 | + HierarchyElement, | |
| 8742 | + FrameElement, | |
| 8743 | + RenderableDOMElement, | |
| 8744 | + ITextElement | |
| 8745 | + ], SVGTextLottieElement); | |
| 8746 | + SVGTextLottieElement.prototype.createContent = function() { | |
| 8747 | + if (this.data.singleShape && !this.globalData.fontManager.chars) this.textContainer = createNS("text"); | |
| 8748 | + }; | |
| 8749 | + SVGTextLottieElement.prototype.buildTextContents = function(textArray) { | |
| 8750 | + var i = 0; | |
| 8751 | + var len = textArray.length; | |
| 8752 | + var textContents = []; | |
| 8753 | + var currentTextContent = ""; | |
| 8754 | + while (i < len) { | |
| 8755 | + if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) { | |
| 8756 | + textContents.push(currentTextContent); | |
| 8757 | + currentTextContent = ""; | |
| 8758 | + } else currentTextContent += textArray[i]; | |
| 8759 | + i += 1; | |
| 8760 | + } | |
| 8761 | + textContents.push(currentTextContent); | |
| 8762 | + return textContents; | |
| 8763 | + }; | |
| 8764 | + SVGTextLottieElement.prototype.buildShapeData = function(data, scale) { | |
| 8765 | + if (data.shapes && data.shapes.length) { | |
| 8766 | + var shape = data.shapes[0]; | |
| 8767 | + if (shape.it) { | |
| 8768 | + var shapeItem = shape.it[shape.it.length - 1]; | |
| 8769 | + if (shapeItem.s) { | |
| 8770 | + shapeItem.s.k[0] = scale; | |
| 8771 | + shapeItem.s.k[1] = scale; | |
| 8772 | + } | |
| 8773 | + } | |
| 8774 | + } | |
| 8775 | + return data; | |
| 8776 | + }; | |
| 8777 | + SVGTextLottieElement.prototype.buildNewText = function() { | |
| 8778 | + this.addDynamicProperty(this); | |
| 8779 | + var i; | |
| 8780 | + var len; | |
| 8781 | + var documentData = this.textProperty.currentData; | |
| 8782 | + this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0); | |
| 8783 | + if (documentData.fc) this.layerElement.setAttribute("fill", this.buildColor(documentData.fc)); | |
| 8784 | + else this.layerElement.setAttribute("fill", "rgba(0,0,0,0)"); | |
| 8785 | + if (documentData.sc) { | |
| 8786 | + this.layerElement.setAttribute("stroke", this.buildColor(documentData.sc)); | |
| 8787 | + this.layerElement.setAttribute("stroke-width", documentData.sw); | |
| 8788 | + } | |
| 8789 | + this.layerElement.setAttribute("font-size", documentData.finalSize); | |
| 8790 | + var fontData = this.globalData.fontManager.getFontByName(documentData.f); | |
| 8791 | + if (fontData.fClass) this.layerElement.setAttribute("class", fontData.fClass); | |
| 8792 | + else { | |
| 8793 | + this.layerElement.setAttribute("font-family", fontData.fFamily); | |
| 8794 | + var fWeight = documentData.fWeight; | |
| 8795 | + var fStyle = documentData.fStyle; | |
| 8796 | + this.layerElement.setAttribute("font-style", fStyle); | |
| 8797 | + this.layerElement.setAttribute("font-weight", fWeight); | |
| 8798 | + } | |
| 8799 | + this.layerElement.setAttribute("aria-label", documentData.t); | |
| 8800 | + var letters = documentData.l || []; | |
| 8801 | + var usesGlyphs = !!this.globalData.fontManager.chars; | |
| 8802 | + len = letters.length; | |
| 8803 | + var tSpan; | |
| 8804 | + var matrixHelper = this.mHelper; | |
| 8805 | + var shapeStr = ""; | |
| 8806 | + var singleShape = this.data.singleShape; | |
| 8807 | + var xPos = 0; | |
| 8808 | + var yPos = 0; | |
| 8809 | + var firstLine = true; | |
| 8810 | + var trackingOffset = documentData.tr * .001 * documentData.finalSize; | |
| 8811 | + if (singleShape && !usesGlyphs && !documentData.sz) { | |
| 8812 | + var tElement = this.textContainer; | |
| 8813 | + var justify = "start"; | |
| 8814 | + switch (documentData.j) { | |
| 8815 | + case 1: | |
| 8816 | + justify = "end"; | |
| 8817 | + break; | |
| 8818 | + case 2: | |
| 8819 | + justify = "middle"; | |
| 8820 | + break; | |
| 8821 | + default: | |
| 8822 | + justify = "start"; | |
| 8823 | + break; | |
| 8824 | + } | |
| 8825 | + tElement.setAttribute("text-anchor", justify); | |
| 8826 | + tElement.setAttribute("letter-spacing", trackingOffset); | |
| 8827 | + var textContent = this.buildTextContents(documentData.finalText); | |
| 8828 | + len = textContent.length; | |
| 8829 | + yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0; | |
| 8830 | + for (i = 0; i < len; i += 1) { | |
| 8831 | + tSpan = this.textSpans[i].span || createNS("tspan"); | |
| 8832 | + tSpan.textContent = textContent[i]; | |
| 8833 | + tSpan.setAttribute("x", 0); | |
| 8834 | + tSpan.setAttribute("y", yPos); | |
| 8835 | + tSpan.style.display = "inherit"; | |
| 8836 | + tElement.appendChild(tSpan); | |
| 8837 | + if (!this.textSpans[i]) this.textSpans[i] = { | |
| 8838 | + span: null, | |
| 8839 | + glyph: null | |
| 8840 | + }; | |
| 8841 | + this.textSpans[i].span = tSpan; | |
| 8842 | + yPos += documentData.finalLineHeight; | |
| 8843 | + } | |
| 8844 | + this.layerElement.appendChild(tElement); | |
| 8845 | + } else { | |
| 8846 | + var cachedSpansLength = this.textSpans.length; | |
| 8847 | + var charData; | |
| 8848 | + for (i = 0; i < len; i += 1) { | |
| 8849 | + if (!this.textSpans[i]) this.textSpans[i] = { | |
| 8850 | + span: null, | |
| 8851 | + childSpan: null, | |
| 8852 | + glyph: null | |
| 8853 | + }; | |
| 8854 | + if (!usesGlyphs || !singleShape || i === 0) { | |
| 8855 | + tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? "g" : "text"); | |
| 8856 | + if (cachedSpansLength <= i) { | |
| 8857 | + tSpan.setAttribute("stroke-linecap", "butt"); | |
| 8858 | + tSpan.setAttribute("stroke-linejoin", "round"); | |
| 8859 | + tSpan.setAttribute("stroke-miterlimit", "4"); | |
| 8860 | + this.textSpans[i].span = tSpan; | |
| 8861 | + if (usesGlyphs) { | |
| 8862 | + var childSpan = createNS("g"); | |
| 8863 | + tSpan.appendChild(childSpan); | |
| 8864 | + this.textSpans[i].childSpan = childSpan; | |
| 8865 | + } | |
| 8866 | + this.textSpans[i].span = tSpan; | |
| 8867 | + this.layerElement.appendChild(tSpan); | |
| 8868 | + } | |
| 8869 | + tSpan.style.display = "inherit"; | |
| 8870 | + } | |
| 8871 | + matrixHelper.reset(); | |
| 8872 | + if (singleShape) { | |
| 8873 | + if (letters[i].n) { | |
| 8874 | + xPos = -trackingOffset; | |
| 8875 | + yPos += documentData.yOffset; | |
| 8876 | + yPos += firstLine ? 1 : 0; | |
| 8877 | + firstLine = false; | |
| 8878 | + } | |
| 8879 | + this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); | |
| 8880 | + xPos += letters[i].l || 0; | |
| 8881 | + xPos += trackingOffset; | |
| 8882 | + } | |
| 8883 | + if (usesGlyphs) { | |
| 8884 | + charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); | |
| 8885 | + var glyphElement; | |
| 8886 | + if (charData.t === 1) glyphElement = new SVGCompElement(charData.data, this.globalData, this); | |
| 8887 | + else { | |
| 8888 | + var data = emptyShapeData; | |
| 8889 | + if (charData.data && charData.data.shapes) data = this.buildShapeData(charData.data, documentData.finalSize); | |
| 8890 | + glyphElement = new SVGShapeElement(data, this.globalData, this); | |
| 8891 | + } | |
| 8892 | + if (this.textSpans[i].glyph) { | |
| 8893 | + var glyph = this.textSpans[i].glyph; | |
| 8894 | + this.textSpans[i].childSpan.removeChild(glyph.layerElement); | |
| 8895 | + glyph.destroy(); | |
| 8896 | + } | |
| 8897 | + this.textSpans[i].glyph = glyphElement; | |
| 8898 | + glyphElement._debug = true; | |
| 8899 | + glyphElement.prepareFrame(0); | |
| 8900 | + glyphElement.renderFrame(); | |
| 8901 | + this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); | |
| 8902 | + if (charData.t === 1) this.textSpans[i].childSpan.setAttribute("transform", "scale(" + documentData.finalSize / 100 + "," + documentData.finalSize / 100 + ")"); | |
| 8903 | + } else { | |
| 8904 | + if (singleShape) tSpan.setAttribute("transform", "translate(" + matrixHelper.props[12] + "," + matrixHelper.props[13] + ")"); | |
| 8905 | + tSpan.textContent = letters[i].val; | |
| 8906 | + tSpan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); | |
| 8907 | + } | |
| 8908 | + } | |
| 8909 | + if (singleShape && tSpan) tSpan.setAttribute("d", shapeStr); | |
| 8910 | + } | |
| 8911 | + while (i < this.textSpans.length) { | |
| 8912 | + this.textSpans[i].span.style.display = "none"; | |
| 8913 | + i += 1; | |
| 8914 | + } | |
| 8915 | + this._sizeChanged = true; | |
| 8916 | + }; | |
| 8917 | + SVGTextLottieElement.prototype.sourceRectAtTime = function() { | |
| 8918 | + this.prepareFrame(this.comp.renderedFrame - this.data.st); | |
| 8919 | + this.renderInnerContent(); | |
| 8920 | + if (this._sizeChanged) { | |
| 8921 | + this._sizeChanged = false; | |
| 8922 | + var textBox = this.layerElement.getBBox(); | |
| 8923 | + this.bbox = { | |
| 8924 | + top: textBox.y, | |
| 8925 | + left: textBox.x, | |
| 8926 | + width: textBox.width, | |
| 8927 | + height: textBox.height | |
| 8928 | + }; | |
| 8929 | + } | |
| 8930 | + return this.bbox; | |
| 8931 | + }; | |
| 8932 | + SVGTextLottieElement.prototype.getValue = function() { | |
| 8933 | + var i; | |
| 8934 | + var len = this.textSpans.length; | |
| 8935 | + var glyphElement; | |
| 8936 | + this.renderedFrame = this.comp.renderedFrame; | |
| 8937 | + for (i = 0; i < len; i += 1) { | |
| 8938 | + glyphElement = this.textSpans[i].glyph; | |
| 8939 | + if (glyphElement) { | |
| 8940 | + glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st); | |
| 8941 | + if (glyphElement._mdf) this._mdf = true; | |
| 8942 | + } | |
| 8943 | + } | |
| 8944 | + }; | |
| 8945 | + SVGTextLottieElement.prototype.renderInnerContent = function() { | |
| 8946 | + this.validateText(); | |
| 8947 | + if (!this.data.singleShape || this._mdf) { | |
| 8948 | + this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); | |
| 8949 | + if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) { | |
| 8950 | + this._sizeChanged = true; | |
| 8951 | + var i; | |
| 8952 | + var len; | |
| 8953 | + var renderedLetters = this.textAnimator.renderedLetters; | |
| 8954 | + var letters = this.textProperty.currentData.l; | |
| 8955 | + len = letters.length; | |
| 8956 | + var renderedLetter; | |
| 8957 | + var textSpan; | |
| 8958 | + var glyphElement; | |
| 8959 | + for (i = 0; i < len; i += 1) if (!letters[i].n) { | |
| 8960 | + renderedLetter = renderedLetters[i]; | |
| 8961 | + textSpan = this.textSpans[i].span; | |
| 8962 | + glyphElement = this.textSpans[i].glyph; | |
| 8963 | + if (glyphElement) glyphElement.renderFrame(); | |
| 8964 | + if (renderedLetter._mdf.m) textSpan.setAttribute("transform", renderedLetter.m); | |
| 8965 | + if (renderedLetter._mdf.o) textSpan.setAttribute("opacity", renderedLetter.o); | |
| 8966 | + if (renderedLetter._mdf.sw) textSpan.setAttribute("stroke-width", renderedLetter.sw); | |
| 8967 | + if (renderedLetter._mdf.sc) textSpan.setAttribute("stroke", renderedLetter.sc); | |
| 8968 | + if (renderedLetter._mdf.fc) textSpan.setAttribute("fill", renderedLetter.fc); | |
| 8969 | + } | |
| 8970 | + } | |
| 8971 | + } | |
| 8972 | + }; | |
| 8973 | + function ISolidElement(data, globalData, comp) { | |
| 8974 | + this.initElement(data, globalData, comp); | |
| 8975 | + } | |
| 8976 | + extendPrototype([IImageElement], ISolidElement); | |
| 8977 | + ISolidElement.prototype.createContent = function() { | |
| 8978 | + var rect = createNS("rect"); | |
| 8979 | + rect.setAttribute("width", this.data.sw); | |
| 8980 | + rect.setAttribute("height", this.data.sh); | |
| 8981 | + rect.setAttribute("fill", this.data.sc); | |
| 8982 | + this.layerElement.appendChild(rect); | |
| 8983 | + }; | |
| 8984 | + function NullElement(data, globalData, comp) { | |
| 8985 | + this.initFrame(); | |
| 8986 | + this.initBaseData(data, globalData, comp); | |
| 8987 | + this.initFrame(); | |
| 8988 | + this.initTransform(data, globalData, comp); | |
| 8989 | + this.initHierarchy(); | |
| 8990 | + } | |
| 8991 | + NullElement.prototype.prepareFrame = function(num) { | |
| 8992 | + this.prepareProperties(num, true); | |
| 8993 | + }; | |
| 8994 | + NullElement.prototype.renderFrame = function() {}; | |
| 8995 | + NullElement.prototype.getBaseElement = function() { | |
| 8996 | + return null; | |
| 8997 | + }; | |
| 8998 | + NullElement.prototype.destroy = function() {}; | |
| 8999 | + NullElement.prototype.sourceRectAtTime = function() {}; | |
| 9000 | + NullElement.prototype.hide = function() {}; | |
| 9001 | + extendPrototype([ | |
| 9002 | + BaseElement, | |
| 9003 | + TransformElement, | |
| 9004 | + HierarchyElement, | |
| 9005 | + FrameElement | |
| 9006 | + ], NullElement); | |
| 9007 | + function SVGRendererBase() {} | |
| 9008 | + extendPrototype([BaseRenderer], SVGRendererBase); | |
| 9009 | + SVGRendererBase.prototype.createNull = function(data) { | |
| 9010 | + return new NullElement(data, this.globalData, this); | |
| 9011 | + }; | |
| 9012 | + SVGRendererBase.prototype.createShape = function(data) { | |
| 9013 | + return new SVGShapeElement(data, this.globalData, this); | |
| 9014 | + }; | |
| 9015 | + SVGRendererBase.prototype.createText = function(data) { | |
| 9016 | + return new SVGTextLottieElement(data, this.globalData, this); | |
| 9017 | + }; | |
| 9018 | + SVGRendererBase.prototype.createImage = function(data) { | |
| 9019 | + return new IImageElement(data, this.globalData, this); | |
| 9020 | + }; | |
| 9021 | + SVGRendererBase.prototype.createSolid = function(data) { | |
| 9022 | + return new ISolidElement(data, this.globalData, this); | |
| 9023 | + }; | |
| 9024 | + SVGRendererBase.prototype.configAnimation = function(animData) { | |
| 9025 | + this.svgElement.setAttribute("xmlns", "http://www.w3.org/2000/svg"); | |
| 9026 | + this.svgElement.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); | |
| 9027 | + if (this.renderConfig.viewBoxSize) this.svgElement.setAttribute("viewBox", this.renderConfig.viewBoxSize); | |
| 9028 | + else this.svgElement.setAttribute("viewBox", "0 0 " + animData.w + " " + animData.h); | |
| 9029 | + if (!this.renderConfig.viewBoxOnly) { | |
| 9030 | + this.svgElement.setAttribute("width", animData.w); | |
| 9031 | + this.svgElement.setAttribute("height", animData.h); | |
| 9032 | + this.svgElement.style.width = "100%"; | |
| 9033 | + this.svgElement.style.height = "100%"; | |
| 9034 | + this.svgElement.style.transform = "translate3d(0,0,0)"; | |
| 9035 | + this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility; | |
| 9036 | + } | |
| 9037 | + if (this.renderConfig.width) this.svgElement.setAttribute("width", this.renderConfig.width); | |
| 9038 | + if (this.renderConfig.height) this.svgElement.setAttribute("height", this.renderConfig.height); | |
| 9039 | + if (this.renderConfig.className) this.svgElement.setAttribute("class", this.renderConfig.className); | |
| 9040 | + if (this.renderConfig.id) this.svgElement.setAttribute("id", this.renderConfig.id); | |
| 9041 | + if (this.renderConfig.focusable !== void 0) this.svgElement.setAttribute("focusable", this.renderConfig.focusable); | |
| 9042 | + this.svgElement.setAttribute("preserveAspectRatio", this.renderConfig.preserveAspectRatio); | |
| 9043 | + this.animationItem.wrapper.appendChild(this.svgElement); | |
| 9044 | + var defs = this.globalData.defs; | |
| 9045 | + this.setupGlobalData(animData, defs); | |
| 9046 | + this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; | |
| 9047 | + this.data = animData; | |
| 9048 | + var maskElement = createNS("clipPath"); | |
| 9049 | + var rect = createNS("rect"); | |
| 9050 | + rect.setAttribute("width", animData.w); | |
| 9051 | + rect.setAttribute("height", animData.h); | |
| 9052 | + rect.setAttribute("x", 0); | |
| 9053 | + rect.setAttribute("y", 0); | |
| 9054 | + var maskId = createElementID(); | |
| 9055 | + maskElement.setAttribute("id", maskId); | |
| 9056 | + maskElement.appendChild(rect); | |
| 9057 | + this.layerElement.setAttribute("clip-path", "url(" + getLocationHref() + "#" + maskId + ")"); | |
| 9058 | + defs.appendChild(maskElement); | |
| 9059 | + this.layers = animData.layers; | |
| 9060 | + this.elements = createSizedArray(animData.layers.length); | |
| 9061 | + }; | |
| 9062 | + SVGRendererBase.prototype.destroy = function() { | |
| 9063 | + if (this.animationItem.wrapper) this.animationItem.wrapper.innerText = ""; | |
| 9064 | + this.layerElement = null; | |
| 9065 | + this.globalData.defs = null; | |
| 9066 | + var i; | |
| 9067 | + var len = this.layers ? this.layers.length : 0; | |
| 9068 | + for (i = 0; i < len; i += 1) if (this.elements[i] && this.elements[i].destroy) this.elements[i].destroy(); | |
| 9069 | + this.elements.length = 0; | |
| 9070 | + this.destroyed = true; | |
| 9071 | + this.animationItem = null; | |
| 9072 | + }; | |
| 9073 | + SVGRendererBase.prototype.updateContainerSize = function() {}; | |
| 9074 | + SVGRendererBase.prototype.findIndexByInd = function(ind) { | |
| 9075 | + var i = 0; | |
| 9076 | + var len = this.layers.length; | |
| 9077 | + for (i = 0; i < len; i += 1) if (this.layers[i].ind === ind) return i; | |
| 9078 | + return -1; | |
| 9079 | + }; | |
| 9080 | + SVGRendererBase.prototype.buildItem = function(pos) { | |
| 9081 | + var elements = this.elements; | |
| 9082 | + if (elements[pos] || this.layers[pos].ty === 99) return; | |
| 9083 | + elements[pos] = true; | |
| 9084 | + var element = this.createItem(this.layers[pos]); | |
| 9085 | + elements[pos] = element; | |
| 9086 | + if (getExpressionsPlugin()) { | |
| 9087 | + if (this.layers[pos].ty === 0) this.globalData.projectInterface.registerComposition(element); | |
| 9088 | + element.initExpressions(); | |
| 9089 | + } | |
| 9090 | + this.appendElementInPos(element, pos); | |
| 9091 | + if (this.layers[pos].tt) { | |
| 9092 | + var elementIndex = "tp" in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1; | |
| 9093 | + if (elementIndex === -1) return; | |
| 9094 | + if (!this.elements[elementIndex] || this.elements[elementIndex] === true) { | |
| 9095 | + this.buildItem(elementIndex); | |
| 9096 | + this.addPendingElement(element); | |
| 9097 | + } else { | |
| 9098 | + var matteMask = elements[elementIndex].getMatte(this.layers[pos].tt); | |
| 9099 | + element.setMatte(matteMask); | |
| 9100 | + } | |
| 9101 | + } | |
| 9102 | + }; | |
| 9103 | + SVGRendererBase.prototype.checkPendingElements = function() { | |
| 9104 | + while (this.pendingElements.length) { | |
| 9105 | + var element = this.pendingElements.pop(); | |
| 9106 | + element.checkParenting(); | |
| 9107 | + if (element.data.tt) { | |
| 9108 | + var i = 0; | |
| 9109 | + var len = this.elements.length; | |
| 9110 | + while (i < len) { | |
| 9111 | + if (this.elements[i] === element) { | |
| 9112 | + var elementIndex = "tp" in element.data ? this.findIndexByInd(element.data.tp) : i - 1; | |
| 9113 | + var matteMask = this.elements[elementIndex].getMatte(this.layers[i].tt); | |
| 9114 | + element.setMatte(matteMask); | |
| 9115 | + break; | |
| 9116 | + } | |
| 9117 | + i += 1; | |
| 9118 | + } | |
| 9119 | + } | |
| 9120 | + } | |
| 9121 | + }; | |
| 9122 | + SVGRendererBase.prototype.renderFrame = function(num) { | |
| 9123 | + if (this.renderedFrame === num || this.destroyed) return; | |
| 9124 | + if (num === null) num = this.renderedFrame; | |
| 9125 | + else this.renderedFrame = num; | |
| 9126 | + this.globalData.frameNum = num; | |
| 9127 | + this.globalData.frameId += 1; | |
| 9128 | + this.globalData.projectInterface.currentFrame = num; | |
| 9129 | + this.globalData._mdf = false; | |
| 9130 | + var i; | |
| 9131 | + var len = this.layers.length; | |
| 9132 | + if (!this.completeLayers) this.checkLayers(num); | |
| 9133 | + for (i = len - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) this.elements[i].prepareFrame(num - this.layers[i].st); | |
| 9134 | + if (this.globalData._mdf) { | |
| 9135 | + for (i = 0; i < len; i += 1) if (this.completeLayers || this.elements[i]) this.elements[i].renderFrame(); | |
| 9136 | + } | |
| 9137 | + }; | |
| 9138 | + SVGRendererBase.prototype.appendElementInPos = function(element, pos) { | |
| 9139 | + var newElement = element.getBaseElement(); | |
| 9140 | + if (!newElement) return; | |
| 9141 | + var i = 0; | |
| 9142 | + var nextElement; | |
| 9143 | + while (i < pos) { | |
| 9144 | + if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) nextElement = this.elements[i].getBaseElement(); | |
| 9145 | + i += 1; | |
| 9146 | + } | |
| 9147 | + if (nextElement) this.layerElement.insertBefore(newElement, nextElement); | |
| 9148 | + else this.layerElement.appendChild(newElement); | |
| 9149 | + }; | |
| 9150 | + SVGRendererBase.prototype.hide = function() { | |
| 9151 | + this.layerElement.style.display = "none"; | |
| 9152 | + }; | |
| 9153 | + SVGRendererBase.prototype.show = function() { | |
| 9154 | + this.layerElement.style.display = "block"; | |
| 9155 | + }; | |
| 9156 | + function ICompElement() {} | |
| 9157 | + extendPrototype([ | |
| 9158 | + BaseElement, | |
| 9159 | + TransformElement, | |
| 9160 | + HierarchyElement, | |
| 9161 | + FrameElement, | |
| 9162 | + RenderableDOMElement | |
| 9163 | + ], ICompElement); | |
| 9164 | + ICompElement.prototype.initElement = function(data, globalData, comp) { | |
| 9165 | + this.initFrame(); | |
| 9166 | + this.initBaseData(data, globalData, comp); | |
| 9167 | + this.initTransform(data, globalData, comp); | |
| 9168 | + this.initRenderable(); | |
| 9169 | + this.initHierarchy(); | |
| 9170 | + this.initRendererElement(); | |
| 9171 | + this.createContainerElements(); | |
| 9172 | + this.createRenderableComponents(); | |
| 9173 | + if (this.data.xt || !globalData.progressiveLoad) this.buildAllItems(); | |
| 9174 | + this.hide(); | |
| 9175 | + }; | |
| 9176 | + ICompElement.prototype.prepareFrame = function(num) { | |
| 9177 | + this._mdf = false; | |
| 9178 | + this.prepareRenderableFrame(num); | |
| 9179 | + this.prepareProperties(num, this.isInRange); | |
| 9180 | + if (!this.isInRange && !this.data.xt) return; | |
| 9181 | + if (!this.tm._placeholder) { | |
| 9182 | + var timeRemapped = this.tm.v; | |
| 9183 | + if (timeRemapped === this.data.op) timeRemapped = this.data.op - 1; | |
| 9184 | + this.renderedFrame = timeRemapped; | |
| 9185 | + } else this.renderedFrame = num / this.data.sr; | |
| 9186 | + var i; | |
| 9187 | + var len = this.elements.length; | |
| 9188 | + if (!this.completeLayers) this.checkLayers(this.renderedFrame); | |
| 9189 | + for (i = len - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) { | |
| 9190 | + this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st); | |
| 9191 | + if (this.elements[i]._mdf) this._mdf = true; | |
| 9192 | + } | |
| 9193 | + }; | |
| 9194 | + ICompElement.prototype.renderInnerContent = function() { | |
| 9195 | + var i; | |
| 9196 | + var len = this.layers.length; | |
| 9197 | + for (i = 0; i < len; i += 1) if (this.completeLayers || this.elements[i]) this.elements[i].renderFrame(); | |
| 9198 | + }; | |
| 9199 | + ICompElement.prototype.setElements = function(elems) { | |
| 9200 | + this.elements = elems; | |
| 9201 | + }; | |
| 9202 | + ICompElement.prototype.getElements = function() { | |
| 9203 | + return this.elements; | |
| 9204 | + }; | |
| 9205 | + ICompElement.prototype.destroyElements = function() { | |
| 9206 | + var i; | |
| 9207 | + var len = this.layers.length; | |
| 9208 | + for (i = 0; i < len; i += 1) if (this.elements[i]) this.elements[i].destroy(); | |
| 9209 | + }; | |
| 9210 | + ICompElement.prototype.destroy = function() { | |
| 9211 | + this.destroyElements(); | |
| 9212 | + this.destroyBaseElement(); | |
| 9213 | + }; | |
| 9214 | + function SVGCompElement(data, globalData, comp) { | |
| 9215 | + this.layers = data.layers; | |
| 9216 | + this.supports3d = true; | |
| 9217 | + this.completeLayers = false; | |
| 9218 | + this.pendingElements = []; | |
| 9219 | + this.elements = this.layers ? createSizedArray(this.layers.length) : []; | |
| 9220 | + this.initElement(data, globalData, comp); | |
| 9221 | + this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; | |
| 9222 | + } | |
| 9223 | + extendPrototype([ | |
| 9224 | + SVGRendererBase, | |
| 9225 | + ICompElement, | |
| 9226 | + SVGBaseElement | |
| 9227 | + ], SVGCompElement); | |
| 9228 | + SVGCompElement.prototype.createComp = function(data) { | |
| 9229 | + return new SVGCompElement(data, this.globalData, this); | |
| 9230 | + }; | |
| 9231 | + function SVGRenderer(animationItem, config) { | |
| 9232 | + this.animationItem = animationItem; | |
| 9233 | + this.layers = null; | |
| 9234 | + this.renderedFrame = -1; | |
| 9235 | + this.svgElement = createNS("svg"); | |
| 9236 | + var ariaLabel = ""; | |
| 9237 | + if (config && config.title) { | |
| 9238 | + var titleElement = createNS("title"); | |
| 9239 | + var titleId = createElementID(); | |
| 9240 | + titleElement.setAttribute("id", titleId); | |
| 9241 | + titleElement.textContent = config.title; | |
| 9242 | + this.svgElement.appendChild(titleElement); | |
| 9243 | + ariaLabel += titleId; | |
| 9244 | + } | |
| 9245 | + if (config && config.description) { | |
| 9246 | + var descElement = createNS("desc"); | |
| 9247 | + var descId = createElementID(); | |
| 9248 | + descElement.setAttribute("id", descId); | |
| 9249 | + descElement.textContent = config.description; | |
| 9250 | + this.svgElement.appendChild(descElement); | |
| 9251 | + ariaLabel += " " + descId; | |
| 9252 | + } | |
| 9253 | + if (ariaLabel) this.svgElement.setAttribute("aria-labelledby", ariaLabel); | |
| 9254 | + var defs = createNS("defs"); | |
| 9255 | + this.svgElement.appendChild(defs); | |
| 9256 | + var maskElement = createNS("g"); | |
| 9257 | + this.svgElement.appendChild(maskElement); | |
| 9258 | + this.layerElement = maskElement; | |
| 9259 | + this.renderConfig = { | |
| 9260 | + preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", | |
| 9261 | + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", | |
| 9262 | + contentVisibility: config && config.contentVisibility || "visible", | |
| 9263 | + progressiveLoad: config && config.progressiveLoad || false, | |
| 9264 | + hideOnTransparent: !(config && config.hideOnTransparent === false), | |
| 9265 | + viewBoxOnly: config && config.viewBoxOnly || false, | |
| 9266 | + viewBoxSize: config && config.viewBoxSize || false, | |
| 9267 | + className: config && config.className || "", | |
| 9268 | + id: config && config.id || "", | |
| 9269 | + focusable: config && config.focusable, | |
| 9270 | + filterSize: { | |
| 9271 | + width: config && config.filterSize && config.filterSize.width || "100%", | |
| 9272 | + height: config && config.filterSize && config.filterSize.height || "100%", | |
| 9273 | + x: config && config.filterSize && config.filterSize.x || "0%", | |
| 9274 | + y: config && config.filterSize && config.filterSize.y || "0%" | |
| 9275 | + }, | |
| 9276 | + width: config && config.width, | |
| 9277 | + height: config && config.height, | |
| 9278 | + runExpressions: !config || config.runExpressions === void 0 || config.runExpressions | |
| 9279 | + }; | |
| 9280 | + this.globalData = { | |
| 9281 | + _mdf: false, | |
| 9282 | + frameNum: -1, | |
| 9283 | + defs, | |
| 9284 | + renderConfig: this.renderConfig | |
| 9285 | + }; | |
| 9286 | + this.elements = []; | |
| 9287 | + this.pendingElements = []; | |
| 9288 | + this.destroyed = false; | |
| 9289 | + this.rendererType = "svg"; | |
| 9290 | + } | |
| 9291 | + extendPrototype([SVGRendererBase], SVGRenderer); | |
| 9292 | + SVGRenderer.prototype.createComp = function(data) { | |
| 9293 | + return new SVGCompElement(data, this.globalData, this); | |
| 9294 | + }; | |
| 9295 | + function ShapeTransformManager() { | |
| 9296 | + this.sequences = {}; | |
| 9297 | + this.sequenceList = []; | |
| 9298 | + this.transform_key_count = 0; | |
| 9299 | + } | |
| 9300 | + ShapeTransformManager.prototype = { | |
| 9301 | + addTransformSequence: function addTransformSequence(transforms) { | |
| 9302 | + var i; | |
| 9303 | + var len = transforms.length; | |
| 9304 | + var key = "_"; | |
| 9305 | + for (i = 0; i < len; i += 1) key += transforms[i].transform.key + "_"; | |
| 9306 | + var sequence = this.sequences[key]; | |
| 9307 | + if (!sequence) { | |
| 9308 | + sequence = { | |
| 9309 | + transforms: [].concat(transforms), | |
| 9310 | + finalTransform: new Matrix(), | |
| 9311 | + _mdf: false | |
| 9312 | + }; | |
| 9313 | + this.sequences[key] = sequence; | |
| 9314 | + this.sequenceList.push(sequence); | |
| 9315 | + } | |
| 9316 | + return sequence; | |
| 9317 | + }, | |
| 9318 | + processSequence: function processSequence(sequence, isFirstFrame) { | |
| 9319 | + var i = 0; | |
| 9320 | + var len = sequence.transforms.length; | |
| 9321 | + var _mdf = isFirstFrame; | |
| 9322 | + while (i < len && !isFirstFrame) { | |
| 9323 | + if (sequence.transforms[i].transform.mProps._mdf) { | |
| 9324 | + _mdf = true; | |
| 9325 | + break; | |
| 9326 | + } | |
| 9327 | + i += 1; | |
| 9328 | + } | |
| 9329 | + if (_mdf) { | |
| 9330 | + sequence.finalTransform.reset(); | |
| 9331 | + for (i = len - 1; i >= 0; i -= 1) sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v); | |
| 9332 | + } | |
| 9333 | + sequence._mdf = _mdf; | |
| 9334 | + }, | |
| 9335 | + processSequences: function processSequences(isFirstFrame) { | |
| 9336 | + var i; | |
| 9337 | + var len = this.sequenceList.length; | |
| 9338 | + for (i = 0; i < len; i += 1) this.processSequence(this.sequenceList[i], isFirstFrame); | |
| 9339 | + }, | |
| 9340 | + getNewKey: function getNewKey() { | |
| 9341 | + this.transform_key_count += 1; | |
| 9342 | + return "_" + this.transform_key_count; | |
| 9343 | + } | |
| 9344 | + }; | |
| 9345 | + var lumaLoader = function lumaLoader() { | |
| 9346 | + var id = "__lottie_element_luma_buffer"; | |
| 9347 | + var lumaBuffer = null; | |
| 9348 | + var lumaBufferCtx = null; | |
| 9349 | + var svg = null; | |
| 9350 | + function createLumaSvgFilter() { | |
| 9351 | + var _svg = createNS("svg"); | |
| 9352 | + var fil = createNS("filter"); | |
| 9353 | + var matrix = createNS("feColorMatrix"); | |
| 9354 | + fil.setAttribute("id", id); | |
| 9355 | + matrix.setAttribute("type", "matrix"); | |
| 9356 | + matrix.setAttribute("color-interpolation-filters", "sRGB"); | |
| 9357 | + matrix.setAttribute("values", "0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0"); | |
| 9358 | + fil.appendChild(matrix); | |
| 9359 | + _svg.appendChild(fil); | |
| 9360 | + _svg.setAttribute("id", "__lottie_element_luma_buffer_svg"); | |
| 9361 | + if (featureSupport.svgLumaHidden) _svg.style.display = "none"; | |
| 9362 | + return _svg; | |
| 9363 | + } | |
| 9364 | + function loadLuma() { | |
| 9365 | + if (!lumaBuffer) { | |
| 9366 | + svg = createLumaSvgFilter(); | |
| 9367 | + document.body.appendChild(svg); | |
| 9368 | + lumaBuffer = createTag("canvas"); | |
| 9369 | + lumaBufferCtx = lumaBuffer.getContext("2d"); | |
| 9370 | + lumaBufferCtx.filter = "url(#__lottie_element_luma_buffer)"; | |
| 9371 | + lumaBufferCtx.fillStyle = "rgba(0,0,0,0)"; | |
| 9372 | + lumaBufferCtx.fillRect(0, 0, 1, 1); | |
| 9373 | + } | |
| 9374 | + } | |
| 9375 | + function getLuma(canvas) { | |
| 9376 | + if (!lumaBuffer) loadLuma(); | |
| 9377 | + lumaBuffer.width = canvas.width; | |
| 9378 | + lumaBuffer.height = canvas.height; | |
| 9379 | + lumaBufferCtx.filter = "url(#__lottie_element_luma_buffer)"; | |
| 9380 | + return lumaBuffer; | |
| 9381 | + } | |
| 9382 | + return { | |
| 9383 | + load: loadLuma, | |
| 9384 | + get: getLuma | |
| 9385 | + }; | |
| 9386 | + }; | |
| 9387 | + function createCanvas(width, height) { | |
| 9388 | + if (featureSupport.offscreenCanvas) return new OffscreenCanvas(width, height); | |
| 9389 | + var canvas = createTag("canvas"); | |
| 9390 | + canvas.width = width; | |
| 9391 | + canvas.height = height; | |
| 9392 | + return canvas; | |
| 9393 | + } | |
| 9394 | + var assetLoader = function() { | |
| 9395 | + return { | |
| 9396 | + loadLumaCanvas: lumaLoader.load, | |
| 9397 | + getLumaCanvas: lumaLoader.get, | |
| 9398 | + createCanvas | |
| 9399 | + }; | |
| 9400 | + }(); | |
| 9401 | + var registeredEffects = {}; | |
| 9402 | + function CVEffects(elem) { | |
| 9403 | + var i; | |
| 9404 | + var len = elem.data.ef ? elem.data.ef.length : 0; | |
| 9405 | + this.filters = []; | |
| 9406 | + var filterManager; | |
| 9407 | + for (i = 0; i < len; i += 1) { | |
| 9408 | + filterManager = null; | |
| 9409 | + var type = elem.data.ef[i].ty; | |
| 9410 | + if (registeredEffects[type]) { | |
| 9411 | + var Effect = registeredEffects[type].effect; | |
| 9412 | + filterManager = new Effect(elem.effectsManager.effectElements[i], elem); | |
| 9413 | + } | |
| 9414 | + if (filterManager) this.filters.push(filterManager); | |
| 9415 | + } | |
| 9416 | + if (this.filters.length) elem.addRenderableComponent(this); | |
| 9417 | + } | |
| 9418 | + CVEffects.prototype.renderFrame = function(_isFirstFrame) { | |
| 9419 | + var i; | |
| 9420 | + var len = this.filters.length; | |
| 9421 | + for (i = 0; i < len; i += 1) this.filters[i].renderFrame(_isFirstFrame); | |
| 9422 | + }; | |
| 9423 | + CVEffects.prototype.getEffects = function(type) { | |
| 9424 | + var i; | |
| 9425 | + var len = this.filters.length; | |
| 9426 | + var effects = []; | |
| 9427 | + for (i = 0; i < len; i += 1) if (this.filters[i].type === type) effects.push(this.filters[i]); | |
| 9428 | + return effects; | |
| 9429 | + }; | |
| 9430 | + function registerEffect(id, effect) { | |
| 9431 | + registeredEffects[id] = { effect }; | |
| 9432 | + } | |
| 9433 | + function CVMaskElement(data, element) { | |
| 9434 | + this.data = data; | |
| 9435 | + this.element = element; | |
| 9436 | + this.masksProperties = this.data.masksProperties || []; | |
| 9437 | + this.viewData = createSizedArray(this.masksProperties.length); | |
| 9438 | + var i; | |
| 9439 | + var len = this.masksProperties.length; | |
| 9440 | + var hasMasks = false; | |
| 9441 | + for (i = 0; i < len; i += 1) { | |
| 9442 | + if (this.masksProperties[i].mode !== "n") hasMasks = true; | |
| 9443 | + this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3); | |
| 9444 | + } | |
| 9445 | + this.hasMasks = hasMasks; | |
| 9446 | + if (hasMasks) this.element.addRenderableComponent(this); | |
| 9447 | + } | |
| 9448 | + CVMaskElement.prototype.renderFrame = function() { | |
| 9449 | + if (!this.hasMasks) return; | |
| 9450 | + var transform = this.element.finalTransform.mat; | |
| 9451 | + var ctx = this.element.canvasContext; | |
| 9452 | + var i; | |
| 9453 | + var len = this.masksProperties.length; | |
| 9454 | + var pt; | |
| 9455 | + var pts; | |
| 9456 | + var data; | |
| 9457 | + ctx.beginPath(); | |
| 9458 | + for (i = 0; i < len; i += 1) if (this.masksProperties[i].mode !== "n") { | |
| 9459 | + if (this.masksProperties[i].inv) { | |
| 9460 | + ctx.moveTo(0, 0); | |
| 9461 | + ctx.lineTo(this.element.globalData.compSize.w, 0); | |
| 9462 | + ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h); | |
| 9463 | + ctx.lineTo(0, this.element.globalData.compSize.h); | |
| 9464 | + ctx.lineTo(0, 0); | |
| 9465 | + } | |
| 9466 | + data = this.viewData[i].v; | |
| 9467 | + pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0); | |
| 9468 | + ctx.moveTo(pt[0], pt[1]); | |
| 9469 | + var j; | |
| 9470 | + var jLen = data._length; | |
| 9471 | + for (j = 1; j < jLen; j += 1) { | |
| 9472 | + pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]); | |
| 9473 | + ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); | |
| 9474 | + } | |
| 9475 | + pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]); | |
| 9476 | + ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); | |
| 9477 | + } | |
| 9478 | + this.element.globalData.renderer.save(true); | |
| 9479 | + ctx.clip(); | |
| 9480 | + }; | |
| 9481 | + CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty; | |
| 9482 | + CVMaskElement.prototype.destroy = function() { | |
| 9483 | + this.element = null; | |
| 9484 | + }; | |
| 9485 | + function CVBaseElement() {} | |
| 9486 | + var operationsMap = { | |
| 9487 | + 1: "source-in", | |
| 9488 | + 2: "source-out", | |
| 9489 | + 3: "source-in", | |
| 9490 | + 4: "source-out" | |
| 9491 | + }; | |
| 9492 | + CVBaseElement.prototype = { | |
| 9493 | + createElements: function createElements() {}, | |
| 9494 | + initRendererElement: function initRendererElement() {}, | |
| 9495 | + createContainerElements: function createContainerElements() { | |
| 9496 | + if (this.data.tt >= 1) { | |
| 9497 | + this.buffers = []; | |
| 9498 | + var canvasContext = this.globalData.canvasContext; | |
| 9499 | + var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height); | |
| 9500 | + this.buffers.push(bufferCanvas); | |
| 9501 | + var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height); | |
| 9502 | + this.buffers.push(bufferCanvas2); | |
| 9503 | + if (this.data.tt >= 3 && !document._isProxy) assetLoader.loadLumaCanvas(); | |
| 9504 | + } | |
| 9505 | + this.canvasContext = this.globalData.canvasContext; | |
| 9506 | + this.transformCanvas = this.globalData.transformCanvas; | |
| 9507 | + this.renderableEffectsManager = new CVEffects(this); | |
| 9508 | + this.searchEffectTransforms(); | |
| 9509 | + }, | |
| 9510 | + createContent: function createContent() {}, | |
| 9511 | + setBlendMode: function setBlendMode() { | |
| 9512 | + var globalData = this.globalData; | |
| 9513 | + if (globalData.blendMode !== this.data.bm) { | |
| 9514 | + globalData.blendMode = this.data.bm; | |
| 9515 | + var blendModeValue = getBlendMode(this.data.bm); | |
| 9516 | + globalData.canvasContext.globalCompositeOperation = blendModeValue; | |
| 9517 | + } | |
| 9518 | + }, | |
| 9519 | + createRenderableComponents: function createRenderableComponents() { | |
| 9520 | + this.maskManager = new CVMaskElement(this.data, this); | |
| 9521 | + this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT); | |
| 9522 | + }, | |
| 9523 | + hideElement: function hideElement() { | |
| 9524 | + if (!this.hidden && (!this.isInRange || this.isTransparent)) this.hidden = true; | |
| 9525 | + }, | |
| 9526 | + showElement: function showElement() { | |
| 9527 | + if (this.isInRange && !this.isTransparent) { | |
| 9528 | + this.hidden = false; | |
| 9529 | + this._isFirstFrame = true; | |
| 9530 | + this.maskManager._isFirstFrame = true; | |
| 9531 | + } | |
| 9532 | + }, | |
| 9533 | + clearCanvas: function clearCanvas(canvasContext) { | |
| 9534 | + canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy); | |
| 9535 | + }, | |
| 9536 | + prepareLayer: function prepareLayer() { | |
| 9537 | + if (this.data.tt >= 1) { | |
| 9538 | + var bufferCtx = this.buffers[0].getContext("2d"); | |
| 9539 | + this.clearCanvas(bufferCtx); | |
| 9540 | + bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); | |
| 9541 | + this.currentTransform = this.canvasContext.getTransform(); | |
| 9542 | + this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); | |
| 9543 | + this.clearCanvas(this.canvasContext); | |
| 9544 | + this.canvasContext.setTransform(this.currentTransform); | |
| 9545 | + } | |
| 9546 | + }, | |
| 9547 | + exitLayer: function exitLayer() { | |
| 9548 | + if (this.data.tt >= 1) { | |
| 9549 | + var buffer = this.buffers[1]; | |
| 9550 | + var bufferCtx = buffer.getContext("2d"); | |
| 9551 | + this.clearCanvas(bufferCtx); | |
| 9552 | + bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); | |
| 9553 | + this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); | |
| 9554 | + this.clearCanvas(this.canvasContext); | |
| 9555 | + this.canvasContext.setTransform(this.currentTransform); | |
| 9556 | + this.comp.getElementById("tp" in this.data ? this.data.tp : this.data.ind - 1).renderFrame(true); | |
| 9557 | + this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); | |
| 9558 | + if (this.data.tt >= 3 && !document._isProxy) { | |
| 9559 | + var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas); | |
| 9560 | + lumaBuffer.getContext("2d").drawImage(this.canvasContext.canvas, 0, 0); | |
| 9561 | + this.clearCanvas(this.canvasContext); | |
| 9562 | + this.canvasContext.drawImage(lumaBuffer, 0, 0); | |
| 9563 | + } | |
| 9564 | + this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt]; | |
| 9565 | + this.canvasContext.drawImage(buffer, 0, 0); | |
| 9566 | + this.canvasContext.globalCompositeOperation = "destination-over"; | |
| 9567 | + this.canvasContext.drawImage(this.buffers[0], 0, 0); | |
| 9568 | + this.canvasContext.setTransform(this.currentTransform); | |
| 9569 | + this.canvasContext.globalCompositeOperation = "source-over"; | |
| 9570 | + } | |
| 9571 | + }, | |
| 9572 | + renderFrame: function renderFrame(forceRender) { | |
| 9573 | + if (this.hidden || this.data.hd) return; | |
| 9574 | + if (this.data.td === 1 && !forceRender) return; | |
| 9575 | + this.renderTransform(); | |
| 9576 | + this.renderRenderable(); | |
| 9577 | + this.renderLocalTransform(); | |
| 9578 | + this.setBlendMode(); | |
| 9579 | + var forceRealStack = this.data.ty === 0; | |
| 9580 | + this.prepareLayer(); | |
| 9581 | + this.globalData.renderer.save(forceRealStack); | |
| 9582 | + this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props); | |
| 9583 | + this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity); | |
| 9584 | + this.renderInnerContent(); | |
| 9585 | + this.globalData.renderer.restore(forceRealStack); | |
| 9586 | + this.exitLayer(); | |
| 9587 | + if (this.maskManager.hasMasks) this.globalData.renderer.restore(true); | |
| 9588 | + if (this._isFirstFrame) this._isFirstFrame = false; | |
| 9589 | + }, | |
| 9590 | + destroy: function destroy() { | |
| 9591 | + this.canvasContext = null; | |
| 9592 | + this.data = null; | |
| 9593 | + this.globalData = null; | |
| 9594 | + this.maskManager.destroy(); | |
| 9595 | + }, | |
| 9596 | + mHelper: new Matrix() | |
| 9597 | + }; | |
| 9598 | + CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement; | |
| 9599 | + CVBaseElement.prototype.show = CVBaseElement.prototype.showElement; | |
| 9600 | + function CVShapeData(element, data, styles, transformsManager) { | |
| 9601 | + this.styledShapes = []; | |
| 9602 | + this.tr = [ | |
| 9603 | + 0, | |
| 9604 | + 0, | |
| 9605 | + 0, | |
| 9606 | + 0, | |
| 9607 | + 0, | |
| 9608 | + 0 | |
| 9609 | + ]; | |
| 9610 | + var ty = 4; | |
| 9611 | + if (data.ty === "rc") ty = 5; | |
| 9612 | + else if (data.ty === "el") ty = 6; | |
| 9613 | + else if (data.ty === "sr") ty = 7; | |
| 9614 | + this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element); | |
| 9615 | + var i; | |
| 9616 | + var len = styles.length; | |
| 9617 | + var styledShape; | |
| 9618 | + for (i = 0; i < len; i += 1) if (!styles[i].closed) { | |
| 9619 | + styledShape = { | |
| 9620 | + transforms: transformsManager.addTransformSequence(styles[i].transforms), | |
| 9621 | + trNodes: [] | |
| 9622 | + }; | |
| 9623 | + this.styledShapes.push(styledShape); | |
| 9624 | + styles[i].elements.push(styledShape); | |
| 9625 | + } | |
| 9626 | + } | |
| 9627 | + CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated; | |
| 9628 | + function CVShapeElement(data, globalData, comp) { | |
| 9629 | + this.shapes = []; | |
| 9630 | + this.shapesData = data.shapes; | |
| 9631 | + this.stylesList = []; | |
| 9632 | + this.itemsData = []; | |
| 9633 | + this.prevViewData = []; | |
| 9634 | + this.shapeModifiers = []; | |
| 9635 | + this.processedElements = []; | |
| 9636 | + this.transformsManager = new ShapeTransformManager(); | |
| 9637 | + this.initElement(data, globalData, comp); | |
| 9638 | + } | |
| 9639 | + extendPrototype([ | |
| 9640 | + BaseElement, | |
| 9641 | + TransformElement, | |
| 9642 | + CVBaseElement, | |
| 9643 | + IShapeElement, | |
| 9644 | + HierarchyElement, | |
| 9645 | + FrameElement, | |
| 9646 | + RenderableElement | |
| 9647 | + ], CVShapeElement); | |
| 9648 | + CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement; | |
| 9649 | + CVShapeElement.prototype.transformHelper = { | |
| 9650 | + opacity: 1, | |
| 9651 | + _opMdf: false | |
| 9652 | + }; | |
| 9653 | + CVShapeElement.prototype.dashResetter = []; | |
| 9654 | + CVShapeElement.prototype.createContent = function() { | |
| 9655 | + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); | |
| 9656 | + }; | |
| 9657 | + CVShapeElement.prototype.createStyleElement = function(data, transforms) { | |
| 9658 | + var styleElem = { | |
| 9659 | + data, | |
| 9660 | + type: data.ty, | |
| 9661 | + preTransforms: this.transformsManager.addTransformSequence(transforms), | |
| 9662 | + transforms: [], | |
| 9663 | + elements: [], | |
| 9664 | + closed: data.hd === true | |
| 9665 | + }; | |
| 9666 | + var elementData = {}; | |
| 9667 | + if (data.ty === "fl" || data.ty === "st") { | |
| 9668 | + elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this); | |
| 9669 | + if (!elementData.c.k) styleElem.co = "rgb(" + bmFloor(elementData.c.v[0]) + "," + bmFloor(elementData.c.v[1]) + "," + bmFloor(elementData.c.v[2]) + ")"; | |
| 9670 | + } else if (data.ty === "gf" || data.ty === "gs") { | |
| 9671 | + elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this); | |
| 9672 | + elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this); | |
| 9673 | + elementData.h = PropertyFactory.getProp(this, data.h || { k: 0 }, 0, .01, this); | |
| 9674 | + elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this); | |
| 9675 | + elementData.g = new GradientProperty(this, data.g, this); | |
| 9676 | + } | |
| 9677 | + elementData.o = PropertyFactory.getProp(this, data.o, 0, .01, this); | |
| 9678 | + if (data.ty === "st" || data.ty === "gs") { | |
| 9679 | + styleElem.lc = lineCapEnum[data.lc || 2]; | |
| 9680 | + styleElem.lj = lineJoinEnum[data.lj || 2]; | |
| 9681 | + if (data.lj == 1) styleElem.ml = data.ml; | |
| 9682 | + elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this); | |
| 9683 | + if (!elementData.w.k) styleElem.wi = elementData.w.v; | |
| 9684 | + if (data.d) { | |
| 9685 | + elementData.d = new DashProperty(this, data.d, "canvas", this); | |
| 9686 | + if (!elementData.d.k) { | |
| 9687 | + styleElem.da = elementData.d.dashArray; | |
| 9688 | + styleElem["do"] = elementData.d.dashoffset[0]; | |
| 9689 | + } | |
| 9690 | + } | |
| 9691 | + } else styleElem.r = data.r === 2 ? "evenodd" : "nonzero"; | |
| 9692 | + this.stylesList.push(styleElem); | |
| 9693 | + elementData.style = styleElem; | |
| 9694 | + return elementData; | |
| 9695 | + }; | |
| 9696 | + CVShapeElement.prototype.createGroupElement = function() { | |
| 9697 | + return { | |
| 9698 | + it: [], | |
| 9699 | + prevViewData: [] | |
| 9700 | + }; | |
| 9701 | + }; | |
| 9702 | + CVShapeElement.prototype.createTransformElement = function(data) { | |
| 9703 | + return { transform: { | |
| 9704 | + opacity: 1, | |
| 9705 | + _opMdf: false, | |
| 9706 | + key: this.transformsManager.getNewKey(), | |
| 9707 | + op: PropertyFactory.getProp(this, data.o, 0, .01, this), | |
| 9708 | + mProps: TransformPropertyFactory.getTransformProperty(this, data, this) | |
| 9709 | + } }; | |
| 9710 | + }; | |
| 9711 | + CVShapeElement.prototype.createShapeElement = function(data) { | |
| 9712 | + var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager); | |
| 9713 | + this.shapes.push(elementData); | |
| 9714 | + this.addShapeToModifiers(elementData); | |
| 9715 | + return elementData; | |
| 9716 | + }; | |
| 9717 | + CVShapeElement.prototype.reloadShapes = function() { | |
| 9718 | + this._isFirstFrame = true; | |
| 9719 | + var i; | |
| 9720 | + var len = this.itemsData.length; | |
| 9721 | + for (i = 0; i < len; i += 1) this.prevViewData[i] = this.itemsData[i]; | |
| 9722 | + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); | |
| 9723 | + len = this.dynamicProperties.length; | |
| 9724 | + for (i = 0; i < len; i += 1) this.dynamicProperties[i].getValue(); | |
| 9725 | + this.renderModifiers(); | |
| 9726 | + this.transformsManager.processSequences(this._isFirstFrame); | |
| 9727 | + }; | |
| 9728 | + CVShapeElement.prototype.addTransformToStyleList = function(transform) { | |
| 9729 | + var i; | |
| 9730 | + var len = this.stylesList.length; | |
| 9731 | + for (i = 0; i < len; i += 1) if (!this.stylesList[i].closed) this.stylesList[i].transforms.push(transform); | |
| 9732 | + }; | |
| 9733 | + CVShapeElement.prototype.removeTransformFromStyleList = function() { | |
| 9734 | + var i; | |
| 9735 | + var len = this.stylesList.length; | |
| 9736 | + for (i = 0; i < len; i += 1) if (!this.stylesList[i].closed) this.stylesList[i].transforms.pop(); | |
| 9737 | + }; | |
| 9738 | + CVShapeElement.prototype.closeStyles = function(styles) { | |
| 9739 | + var i; | |
| 9740 | + var len = styles.length; | |
| 9741 | + for (i = 0; i < len; i += 1) styles[i].closed = true; | |
| 9742 | + }; | |
| 9743 | + CVShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, shouldRender, transforms) { | |
| 9744 | + var i; | |
| 9745 | + var len = arr.length - 1; | |
| 9746 | + var j; | |
| 9747 | + var jLen; | |
| 9748 | + var ownStyles = []; | |
| 9749 | + var ownModifiers = []; | |
| 9750 | + var processedPos; | |
| 9751 | + var modifier; | |
| 9752 | + var currentTransform; | |
| 9753 | + var ownTransforms = [].concat(transforms); | |
| 9754 | + for (i = len; i >= 0; i -= 1) { | |
| 9755 | + processedPos = this.searchProcessedElement(arr[i]); | |
| 9756 | + if (!processedPos) arr[i]._shouldRender = shouldRender; | |
| 9757 | + else itemsData[i] = prevViewData[processedPos - 1]; | |
| 9758 | + if (arr[i].ty === "fl" || arr[i].ty === "st" || arr[i].ty === "gf" || arr[i].ty === "gs") { | |
| 9759 | + if (!processedPos) itemsData[i] = this.createStyleElement(arr[i], ownTransforms); | |
| 9760 | + else itemsData[i].style.closed = false; | |
| 9761 | + ownStyles.push(itemsData[i].style); | |
| 9762 | + } else if (arr[i].ty === "gr") { | |
| 9763 | + if (!processedPos) itemsData[i] = this.createGroupElement(arr[i]); | |
| 9764 | + else { | |
| 9765 | + jLen = itemsData[i].it.length; | |
| 9766 | + for (j = 0; j < jLen; j += 1) itemsData[i].prevViewData[j] = itemsData[i].it[j]; | |
| 9767 | + } | |
| 9768 | + this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms); | |
| 9769 | + } else if (arr[i].ty === "tr") { | |
| 9770 | + if (!processedPos) { | |
| 9771 | + currentTransform = this.createTransformElement(arr[i]); | |
| 9772 | + itemsData[i] = currentTransform; | |
| 9773 | + } | |
| 9774 | + ownTransforms.push(itemsData[i]); | |
| 9775 | + this.addTransformToStyleList(itemsData[i]); | |
| 9776 | + } else if (arr[i].ty === "sh" || arr[i].ty === "rc" || arr[i].ty === "el" || arr[i].ty === "sr") { | |
| 9777 | + if (!processedPos) itemsData[i] = this.createShapeElement(arr[i]); | |
| 9778 | + } else if (arr[i].ty === "tm" || arr[i].ty === "rd" || arr[i].ty === "pb" || arr[i].ty === "zz" || arr[i].ty === "op") { | |
| 9779 | + if (!processedPos) { | |
| 9780 | + modifier = ShapeModifiers.getModifier(arr[i].ty); | |
| 9781 | + modifier.init(this, arr[i]); | |
| 9782 | + itemsData[i] = modifier; | |
| 9783 | + this.shapeModifiers.push(modifier); | |
| 9784 | + } else { | |
| 9785 | + modifier = itemsData[i]; | |
| 9786 | + modifier.closed = false; | |
| 9787 | + } | |
| 9788 | + ownModifiers.push(modifier); | |
| 9789 | + } else if (arr[i].ty === "rp") { | |
| 9790 | + if (!processedPos) { | |
| 9791 | + modifier = ShapeModifiers.getModifier(arr[i].ty); | |
| 9792 | + itemsData[i] = modifier; | |
| 9793 | + modifier.init(this, arr, i, itemsData); | |
| 9794 | + this.shapeModifiers.push(modifier); | |
| 9795 | + shouldRender = false; | |
| 9796 | + } else { | |
| 9797 | + modifier = itemsData[i]; | |
| 9798 | + modifier.closed = true; | |
| 9799 | + } | |
| 9800 | + ownModifiers.push(modifier); | |
| 9801 | + } | |
| 9802 | + this.addProcessedElement(arr[i], i + 1); | |
| 9803 | + } | |
| 9804 | + this.removeTransformFromStyleList(); | |
| 9805 | + this.closeStyles(ownStyles); | |
| 9806 | + len = ownModifiers.length; | |
| 9807 | + for (i = 0; i < len; i += 1) ownModifiers[i].closed = true; | |
| 9808 | + }; | |
| 9809 | + CVShapeElement.prototype.renderInnerContent = function() { | |
| 9810 | + this.transformHelper.opacity = 1; | |
| 9811 | + this.transformHelper._opMdf = false; | |
| 9812 | + this.renderModifiers(); | |
| 9813 | + this.transformsManager.processSequences(this._isFirstFrame); | |
| 9814 | + this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true); | |
| 9815 | + }; | |
| 9816 | + CVShapeElement.prototype.renderShapeTransform = function(parentTransform, groupTransform) { | |
| 9817 | + if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) { | |
| 9818 | + groupTransform.opacity = parentTransform.opacity; | |
| 9819 | + groupTransform.opacity *= groupTransform.op.v; | |
| 9820 | + groupTransform._opMdf = true; | |
| 9821 | + } | |
| 9822 | + }; | |
| 9823 | + CVShapeElement.prototype.drawLayer = function() { | |
| 9824 | + var i; | |
| 9825 | + var len = this.stylesList.length; | |
| 9826 | + var j; | |
| 9827 | + var jLen; | |
| 9828 | + var k; | |
| 9829 | + var kLen; | |
| 9830 | + var elems; | |
| 9831 | + var nodes; | |
| 9832 | + var renderer = this.globalData.renderer; | |
| 9833 | + var ctx = this.globalData.canvasContext; | |
| 9834 | + var type; | |
| 9835 | + var currentStyle; | |
| 9836 | + for (i = 0; i < len; i += 1) { | |
| 9837 | + currentStyle = this.stylesList[i]; | |
| 9838 | + type = currentStyle.type; | |
| 9839 | + if (!((type === "st" || type === "gs") && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) { | |
| 9840 | + renderer.save(); | |
| 9841 | + elems = currentStyle.elements; | |
| 9842 | + if (type === "st" || type === "gs") { | |
| 9843 | + renderer.ctxStrokeStyle(type === "st" ? currentStyle.co : currentStyle.grd); | |
| 9844 | + renderer.ctxLineWidth(currentStyle.wi); | |
| 9845 | + renderer.ctxLineCap(currentStyle.lc); | |
| 9846 | + renderer.ctxLineJoin(currentStyle.lj); | |
| 9847 | + renderer.ctxMiterLimit(currentStyle.ml || 0); | |
| 9848 | + } else renderer.ctxFillStyle(type === "fl" ? currentStyle.co : currentStyle.grd); | |
| 9849 | + renderer.ctxOpacity(currentStyle.coOp); | |
| 9850 | + if (type !== "st" && type !== "gs") ctx.beginPath(); | |
| 9851 | + renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props); | |
| 9852 | + jLen = elems.length; | |
| 9853 | + for (j = 0; j < jLen; j += 1) { | |
| 9854 | + if (type === "st" || type === "gs") { | |
| 9855 | + ctx.beginPath(); | |
| 9856 | + if (currentStyle.da) { | |
| 9857 | + ctx.setLineDash(currentStyle.da); | |
| 9858 | + ctx.lineDashOffset = currentStyle["do"]; | |
| 9859 | + } | |
| 9860 | + } | |
| 9861 | + nodes = elems[j].trNodes; | |
| 9862 | + kLen = nodes.length; | |
| 9863 | + for (k = 0; k < kLen; k += 1) if (nodes[k].t === "m") ctx.moveTo(nodes[k].p[0], nodes[k].p[1]); | |
| 9864 | + else if (nodes[k].t === "c") 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]); | |
| 9865 | + else ctx.closePath(); | |
| 9866 | + if (type === "st" || type === "gs") { | |
| 9867 | + renderer.ctxStroke(); | |
| 9868 | + if (currentStyle.da) ctx.setLineDash(this.dashResetter); | |
| 9869 | + } | |
| 9870 | + } | |
| 9871 | + if (type !== "st" && type !== "gs") this.globalData.renderer.ctxFill(currentStyle.r); | |
| 9872 | + renderer.restore(); | |
| 9873 | + } | |
| 9874 | + } | |
| 9875 | + }; | |
| 9876 | + CVShapeElement.prototype.renderShape = function(parentTransform, items, data, isMain) { | |
| 9877 | + var i; | |
| 9878 | + var len = items.length - 1; | |
| 9879 | + var groupTransform = parentTransform; | |
| 9880 | + for (i = len; i >= 0; i -= 1) if (items[i].ty === "tr") { | |
| 9881 | + groupTransform = data[i].transform; | |
| 9882 | + this.renderShapeTransform(parentTransform, groupTransform); | |
| 9883 | + } else if (items[i].ty === "sh" || items[i].ty === "el" || items[i].ty === "rc" || items[i].ty === "sr") this.renderPath(items[i], data[i]); | |
| 9884 | + else if (items[i].ty === "fl") this.renderFill(items[i], data[i], groupTransform); | |
| 9885 | + else if (items[i].ty === "st") this.renderStroke(items[i], data[i], groupTransform); | |
| 9886 | + else if (items[i].ty === "gf" || items[i].ty === "gs") this.renderGradientFill(items[i], data[i], groupTransform); | |
| 9887 | + else if (items[i].ty === "gr") this.renderShape(groupTransform, items[i].it, data[i].it); | |
| 9888 | + else if (items[i].ty === "tm") {} | |
| 9889 | + if (isMain) this.drawLayer(); | |
| 9890 | + }; | |
| 9891 | + CVShapeElement.prototype.renderStyledShape = function(styledShape, shape) { | |
| 9892 | + if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) { | |
| 9893 | + var shapeNodes = styledShape.trNodes; | |
| 9894 | + var paths = shape.paths; | |
| 9895 | + var i; | |
| 9896 | + var len; | |
| 9897 | + var j; | |
| 9898 | + var jLen = paths._length; | |
| 9899 | + shapeNodes.length = 0; | |
| 9900 | + var groupTransformMat = styledShape.transforms.finalTransform; | |
| 9901 | + for (j = 0; j < jLen; j += 1) { | |
| 9902 | + var pathNodes = paths.shapes[j]; | |
| 9903 | + if (pathNodes && pathNodes.v) { | |
| 9904 | + len = pathNodes._length; | |
| 9905 | + for (i = 1; i < len; i += 1) { | |
| 9906 | + if (i === 1) shapeNodes.push({ | |
| 9907 | + t: "m", | |
| 9908 | + p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) | |
| 9909 | + }); | |
| 9910 | + shapeNodes.push({ | |
| 9911 | + t: "c", | |
| 9912 | + pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]) | |
| 9913 | + }); | |
| 9914 | + } | |
| 9915 | + if (len === 1) shapeNodes.push({ | |
| 9916 | + t: "m", | |
| 9917 | + p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) | |
| 9918 | + }); | |
| 9919 | + if (pathNodes.c && len) { | |
| 9920 | + shapeNodes.push({ | |
| 9921 | + t: "c", | |
| 9922 | + pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]) | |
| 9923 | + }); | |
| 9924 | + shapeNodes.push({ t: "z" }); | |
| 9925 | + } | |
| 9926 | + } | |
| 9927 | + } | |
| 9928 | + styledShape.trNodes = shapeNodes; | |
| 9929 | + } | |
| 9930 | + }; | |
| 9931 | + CVShapeElement.prototype.renderPath = function(pathData, itemData) { | |
| 9932 | + if (pathData.hd !== true && pathData._shouldRender) { | |
| 9933 | + var i; | |
| 9934 | + var len = itemData.styledShapes.length; | |
| 9935 | + for (i = 0; i < len; i += 1) this.renderStyledShape(itemData.styledShapes[i], itemData.sh); | |
| 9936 | + } | |
| 9937 | + }; | |
| 9938 | + CVShapeElement.prototype.renderFill = function(styleData, itemData, groupTransform) { | |
| 9939 | + var styleElem = itemData.style; | |
| 9940 | + if (itemData.c._mdf || this._isFirstFrame) styleElem.co = "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"; | |
| 9941 | + if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) styleElem.coOp = itemData.o.v * groupTransform.opacity; | |
| 9942 | + }; | |
| 9943 | + CVShapeElement.prototype.renderGradientFill = function(styleData, itemData, groupTransform) { | |
| 9944 | + var styleElem = itemData.style; | |
| 9945 | + var grd; | |
| 9946 | + if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) { | |
| 9947 | + var ctx = this.globalData.canvasContext; | |
| 9948 | + var pt1 = itemData.s.v; | |
| 9949 | + var pt2 = itemData.e.v; | |
| 9950 | + if (styleData.t === 1) grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]); | |
| 9951 | + else { | |
| 9952 | + var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); | |
| 9953 | + var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); | |
| 9954 | + var percent = itemData.h.v; | |
| 9955 | + if (percent >= 1) percent = .99; | |
| 9956 | + else if (percent <= -1) percent = -.99; | |
| 9957 | + var dist = rad * percent; | |
| 9958 | + var x = Math.cos(ang + itemData.a.v) * dist + pt1[0]; | |
| 9959 | + var y = Math.sin(ang + itemData.a.v) * dist + pt1[1]; | |
| 9960 | + grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad); | |
| 9961 | + } | |
| 9962 | + var i; | |
| 9963 | + var len = styleData.g.p; | |
| 9964 | + var cValues = itemData.g.c; | |
| 9965 | + var opacity = 1; | |
| 9966 | + for (i = 0; i < len; i += 1) { | |
| 9967 | + if (itemData.g._hasOpacity && itemData.g._collapsable) opacity = itemData.g.o[i * 2 + 1]; | |
| 9968 | + grd.addColorStop(cValues[i * 4] / 100, "rgba(" + cValues[i * 4 + 1] + "," + cValues[i * 4 + 2] + "," + cValues[i * 4 + 3] + "," + opacity + ")"); | |
| 9969 | + } | |
| 9970 | + styleElem.grd = grd; | |
| 9971 | + } | |
| 9972 | + styleElem.coOp = itemData.o.v * groupTransform.opacity; | |
| 9973 | + }; | |
| 9974 | + CVShapeElement.prototype.renderStroke = function(styleData, itemData, groupTransform) { | |
| 9975 | + var styleElem = itemData.style; | |
| 9976 | + var d = itemData.d; | |
| 9977 | + if (d && (d._mdf || this._isFirstFrame)) { | |
| 9978 | + styleElem.da = d.dashArray; | |
| 9979 | + styleElem["do"] = d.dashoffset[0]; | |
| 9980 | + } | |
| 9981 | + if (itemData.c._mdf || this._isFirstFrame) styleElem.co = "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"; | |
| 9982 | + if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) styleElem.coOp = itemData.o.v * groupTransform.opacity; | |
| 9983 | + if (itemData.w._mdf || this._isFirstFrame) styleElem.wi = itemData.w.v; | |
| 9984 | + }; | |
| 9985 | + CVShapeElement.prototype.destroy = function() { | |
| 9986 | + this.shapesData = null; | |
| 9987 | + this.globalData = null; | |
| 9988 | + this.canvasContext = null; | |
| 9989 | + this.stylesList.length = 0; | |
| 9990 | + this.itemsData.length = 0; | |
| 9991 | + }; | |
| 9992 | + function CVTextElement(data, globalData, comp) { | |
| 9993 | + this.textSpans = []; | |
| 9994 | + this.yOffset = 0; | |
| 9995 | + this.fillColorAnim = false; | |
| 9996 | + this.strokeColorAnim = false; | |
| 9997 | + this.strokeWidthAnim = false; | |
| 9998 | + this.stroke = false; | |
| 9999 | + this.fill = false; | |
| 10000 | + this.justifyOffset = 0; | |
| 10001 | + this.currentRender = null; | |
| 10002 | + this.renderType = "canvas"; | |
| 10003 | + this.values = { | |
| 10004 | + fill: "rgba(0,0,0,0)", | |
| 10005 | + stroke: "rgba(0,0,0,0)", | |
| 10006 | + sWidth: 0, | |
| 10007 | + fValue: "" | |
| 10008 | + }; | |
| 10009 | + this.initElement(data, globalData, comp); | |
| 10010 | + } | |
| 10011 | + extendPrototype([ | |
| 10012 | + BaseElement, | |
| 10013 | + TransformElement, | |
| 10014 | + CVBaseElement, | |
| 10015 | + HierarchyElement, | |
| 10016 | + FrameElement, | |
| 10017 | + RenderableElement, | |
| 10018 | + ITextElement | |
| 10019 | + ], CVTextElement); | |
| 10020 | + CVTextElement.prototype.tHelper = createTag("canvas").getContext("2d"); | |
| 10021 | + CVTextElement.prototype.buildNewText = function() { | |
| 10022 | + var documentData = this.textProperty.currentData; | |
| 10023 | + this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); | |
| 10024 | + var hasFill = false; | |
| 10025 | + if (documentData.fc) { | |
| 10026 | + hasFill = true; | |
| 10027 | + this.values.fill = this.buildColor(documentData.fc); | |
| 10028 | + } else this.values.fill = "rgba(0,0,0,0)"; | |
| 10029 | + this.fill = hasFill; | |
| 10030 | + var hasStroke = false; | |
| 10031 | + if (documentData.sc) { | |
| 10032 | + hasStroke = true; | |
| 10033 | + this.values.stroke = this.buildColor(documentData.sc); | |
| 10034 | + this.values.sWidth = documentData.sw; | |
| 10035 | + } | |
| 10036 | + var fontData = this.globalData.fontManager.getFontByName(documentData.f); | |
| 10037 | + var i; | |
| 10038 | + var len; | |
| 10039 | + var letters = documentData.l; | |
| 10040 | + var matrixHelper = this.mHelper; | |
| 10041 | + this.stroke = hasStroke; | |
| 10042 | + this.values.fValue = documentData.finalSize + "px " + this.globalData.fontManager.getFontByName(documentData.f).fFamily; | |
| 10043 | + len = documentData.finalText.length; | |
| 10044 | + var charData; | |
| 10045 | + var shapeData; | |
| 10046 | + var k; | |
| 10047 | + var kLen; | |
| 10048 | + var shapes; | |
| 10049 | + var j; | |
| 10050 | + var jLen; | |
| 10051 | + var pathNodes; | |
| 10052 | + var commands; | |
| 10053 | + var pathArr; | |
| 10054 | + var singleShape = this.data.singleShape; | |
| 10055 | + var trackingOffset = documentData.tr * .001 * documentData.finalSize; | |
| 10056 | + var xPos = 0; | |
| 10057 | + var yPos = 0; | |
| 10058 | + var firstLine = true; | |
| 10059 | + var cnt = 0; | |
| 10060 | + for (i = 0; i < len; i += 1) { | |
| 10061 | + charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); | |
| 10062 | + shapeData = charData && charData.data || {}; | |
| 10063 | + matrixHelper.reset(); | |
| 10064 | + if (singleShape && letters[i].n) { | |
| 10065 | + xPos = -trackingOffset; | |
| 10066 | + yPos += documentData.yOffset; | |
| 10067 | + yPos += firstLine ? 1 : 0; | |
| 10068 | + firstLine = false; | |
| 10069 | + } | |
| 10070 | + shapes = shapeData.shapes ? shapeData.shapes[0].it : []; | |
| 10071 | + jLen = shapes.length; | |
| 10072 | + matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); | |
| 10073 | + if (singleShape) this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); | |
| 10074 | + commands = createSizedArray(jLen - 1); | |
| 10075 | + var commandsCounter = 0; | |
| 10076 | + for (j = 0; j < jLen; j += 1) if (shapes[j].ty === "sh") { | |
| 10077 | + kLen = shapes[j].ks.k.i.length; | |
| 10078 | + pathNodes = shapes[j].ks.k; | |
| 10079 | + pathArr = []; | |
| 10080 | + for (k = 1; k < kLen; k += 1) { | |
| 10081 | + if (k === 1) pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)); | |
| 10082 | + 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)); | |
| 10083 | + } | |
| 10084 | + 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)); | |
| 10085 | + commands[commandsCounter] = pathArr; | |
| 10086 | + commandsCounter += 1; | |
| 10087 | + } | |
| 10088 | + if (singleShape) { | |
| 10089 | + xPos += letters[i].l; | |
| 10090 | + xPos += trackingOffset; | |
| 10091 | + } | |
| 10092 | + if (this.textSpans[cnt]) this.textSpans[cnt].elem = commands; | |
| 10093 | + else this.textSpans[cnt] = { elem: commands }; | |
| 10094 | + cnt += 1; | |
| 10095 | + } | |
| 10096 | + }; | |
| 10097 | + CVTextElement.prototype.renderInnerContent = function() { | |
| 10098 | + this.validateText(); | |
| 10099 | + var ctx = this.canvasContext; | |
| 10100 | + ctx.font = this.values.fValue; | |
| 10101 | + this.globalData.renderer.ctxLineCap("butt"); | |
| 10102 | + this.globalData.renderer.ctxLineJoin("miter"); | |
| 10103 | + this.globalData.renderer.ctxMiterLimit(4); | |
| 10104 | + if (!this.data.singleShape) this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); | |
| 10105 | + var i; | |
| 10106 | + var len; | |
| 10107 | + var j; | |
| 10108 | + var jLen; | |
| 10109 | + var k; | |
| 10110 | + var kLen; | |
| 10111 | + var renderedLetters = this.textAnimator.renderedLetters; | |
| 10112 | + var letters = this.textProperty.currentData.l; | |
| 10113 | + len = letters.length; | |
| 10114 | + var renderedLetter; | |
| 10115 | + var lastFill = null; | |
| 10116 | + var lastStroke = null; | |
| 10117 | + var lastStrokeW = null; | |
| 10118 | + var commands; | |
| 10119 | + var pathArr; | |
| 10120 | + var renderer = this.globalData.renderer; | |
| 10121 | + for (i = 0; i < len; i += 1) if (!letters[i].n) { | |
| 10122 | + renderedLetter = renderedLetters[i]; | |
| 10123 | + if (renderedLetter) { | |
| 10124 | + renderer.save(); | |
| 10125 | + renderer.ctxTransform(renderedLetter.p); | |
| 10126 | + renderer.ctxOpacity(renderedLetter.o); | |
| 10127 | + } | |
| 10128 | + if (this.fill) { | |
| 10129 | + if (renderedLetter && renderedLetter.fc) { | |
| 10130 | + if (lastFill !== renderedLetter.fc) { | |
| 10131 | + renderer.ctxFillStyle(renderedLetter.fc); | |
| 10132 | + lastFill = renderedLetter.fc; | |
| 10133 | + } | |
| 10134 | + } else if (lastFill !== this.values.fill) { | |
| 10135 | + lastFill = this.values.fill; | |
| 10136 | + renderer.ctxFillStyle(this.values.fill); | |
| 10137 | + } | |
| 10138 | + commands = this.textSpans[i].elem; | |
| 10139 | + jLen = commands.length; | |
| 10140 | + this.globalData.canvasContext.beginPath(); | |
| 10141 | + for (j = 0; j < jLen; j += 1) { | |
| 10142 | + pathArr = commands[j]; | |
| 10143 | + kLen = pathArr.length; | |
| 10144 | + this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); | |
| 10145 | + for (k = 2; k < kLen; k += 6) this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]); | |
| 10146 | + } | |
| 10147 | + this.globalData.canvasContext.closePath(); | |
| 10148 | + renderer.ctxFill(); | |
| 10149 | + } | |
| 10150 | + if (this.stroke) { | |
| 10151 | + if (renderedLetter && renderedLetter.sw) { | |
| 10152 | + if (lastStrokeW !== renderedLetter.sw) { | |
| 10153 | + lastStrokeW = renderedLetter.sw; | |
| 10154 | + renderer.ctxLineWidth(renderedLetter.sw); | |
| 10155 | + } | |
| 10156 | + } else if (lastStrokeW !== this.values.sWidth) { | |
| 10157 | + lastStrokeW = this.values.sWidth; | |
| 10158 | + renderer.ctxLineWidth(this.values.sWidth); | |
| 10159 | + } | |
| 10160 | + if (renderedLetter && renderedLetter.sc) { | |
| 10161 | + if (lastStroke !== renderedLetter.sc) { | |
| 10162 | + lastStroke = renderedLetter.sc; | |
| 10163 | + renderer.ctxStrokeStyle(renderedLetter.sc); | |
| 10164 | + } | |
| 10165 | + } else if (lastStroke !== this.values.stroke) { | |
| 10166 | + lastStroke = this.values.stroke; | |
| 10167 | + renderer.ctxStrokeStyle(this.values.stroke); | |
| 10168 | + } | |
| 10169 | + commands = this.textSpans[i].elem; | |
| 10170 | + jLen = commands.length; | |
| 10171 | + this.globalData.canvasContext.beginPath(); | |
| 10172 | + for (j = 0; j < jLen; j += 1) { | |
| 10173 | + pathArr = commands[j]; | |
| 10174 | + kLen = pathArr.length; | |
| 10175 | + this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); | |
| 10176 | + for (k = 2; k < kLen; k += 6) this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]); | |
| 10177 | + } | |
| 10178 | + this.globalData.canvasContext.closePath(); | |
| 10179 | + renderer.ctxStroke(); | |
| 10180 | + } | |
| 10181 | + if (renderedLetter) this.globalData.renderer.restore(); | |
| 10182 | + } | |
| 10183 | + }; | |
| 10184 | + function CVImageElement(data, globalData, comp) { | |
| 10185 | + this.assetData = globalData.getAssetData(data.refId); | |
| 10186 | + this.img = globalData.imageLoader.getAsset(this.assetData); | |
| 10187 | + this.initElement(data, globalData, comp); | |
| 10188 | + } | |
| 10189 | + extendPrototype([ | |
| 10190 | + BaseElement, | |
| 10191 | + TransformElement, | |
| 10192 | + CVBaseElement, | |
| 10193 | + HierarchyElement, | |
| 10194 | + FrameElement, | |
| 10195 | + RenderableElement | |
| 10196 | + ], CVImageElement); | |
| 10197 | + CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement; | |
| 10198 | + CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; | |
| 10199 | + CVImageElement.prototype.createContent = function() { | |
| 10200 | + if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) { | |
| 10201 | + var canvas = createTag("canvas"); | |
| 10202 | + canvas.width = this.assetData.w; | |
| 10203 | + canvas.height = this.assetData.h; | |
| 10204 | + var ctx = canvas.getContext("2d"); | |
| 10205 | + var imgW = this.img.width; | |
| 10206 | + var imgH = this.img.height; | |
| 10207 | + var imgRel = imgW / imgH; | |
| 10208 | + var canvasRel = this.assetData.w / this.assetData.h; | |
| 10209 | + var widthCrop; | |
| 10210 | + var heightCrop; | |
| 10211 | + var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio; | |
| 10212 | + if (imgRel > canvasRel && par === "xMidYMid slice" || imgRel < canvasRel && par !== "xMidYMid slice") { | |
| 10213 | + heightCrop = imgH; | |
| 10214 | + widthCrop = heightCrop * canvasRel; | |
| 10215 | + } else { | |
| 10216 | + widthCrop = imgW; | |
| 10217 | + heightCrop = widthCrop / canvasRel; | |
| 10218 | + } | |
| 10219 | + ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h); | |
| 10220 | + this.img = canvas; | |
| 10221 | + } | |
| 10222 | + }; | |
| 10223 | + CVImageElement.prototype.renderInnerContent = function() { | |
| 10224 | + this.canvasContext.drawImage(this.img, 0, 0); | |
| 10225 | + }; | |
| 10226 | + CVImageElement.prototype.destroy = function() { | |
| 10227 | + this.img = null; | |
| 10228 | + }; | |
| 10229 | + function CVSolidElement(data, globalData, comp) { | |
| 10230 | + this.initElement(data, globalData, comp); | |
| 10231 | + } | |
| 10232 | + extendPrototype([ | |
| 10233 | + BaseElement, | |
| 10234 | + TransformElement, | |
| 10235 | + CVBaseElement, | |
| 10236 | + HierarchyElement, | |
| 10237 | + FrameElement, | |
| 10238 | + RenderableElement | |
| 10239 | + ], CVSolidElement); | |
| 10240 | + CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement; | |
| 10241 | + CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; | |
| 10242 | + CVSolidElement.prototype.renderInnerContent = function() { | |
| 10243 | + this.globalData.renderer.ctxFillStyle(this.data.sc); | |
| 10244 | + this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); | |
| 10245 | + }; | |
| 10246 | + function CanvasRendererBase() {} | |
| 10247 | + extendPrototype([BaseRenderer], CanvasRendererBase); | |
| 10248 | + CanvasRendererBase.prototype.createShape = function(data) { | |
| 10249 | + return new CVShapeElement(data, this.globalData, this); | |
| 10250 | + }; | |
| 10251 | + CanvasRendererBase.prototype.createText = function(data) { | |
| 10252 | + return new CVTextElement(data, this.globalData, this); | |
| 10253 | + }; | |
| 10254 | + CanvasRendererBase.prototype.createImage = function(data) { | |
| 10255 | + return new CVImageElement(data, this.globalData, this); | |
| 10256 | + }; | |
| 10257 | + CanvasRendererBase.prototype.createSolid = function(data) { | |
| 10258 | + return new CVSolidElement(data, this.globalData, this); | |
| 10259 | + }; | |
| 10260 | + CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; | |
| 10261 | + CanvasRendererBase.prototype.ctxTransform = function(props) { | |
| 10262 | + if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) return; | |
| 10263 | + this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]); | |
| 10264 | + }; | |
| 10265 | + CanvasRendererBase.prototype.ctxOpacity = function(op) { | |
| 10266 | + this.canvasContext.globalAlpha *= op < 0 ? 0 : op; | |
| 10267 | + }; | |
| 10268 | + CanvasRendererBase.prototype.ctxFillStyle = function(value) { | |
| 10269 | + this.canvasContext.fillStyle = value; | |
| 10270 | + }; | |
| 10271 | + CanvasRendererBase.prototype.ctxStrokeStyle = function(value) { | |
| 10272 | + this.canvasContext.strokeStyle = value; | |
| 10273 | + }; | |
| 10274 | + CanvasRendererBase.prototype.ctxLineWidth = function(value) { | |
| 10275 | + this.canvasContext.lineWidth = value; | |
| 10276 | + }; | |
| 10277 | + CanvasRendererBase.prototype.ctxLineCap = function(value) { | |
| 10278 | + this.canvasContext.lineCap = value; | |
| 10279 | + }; | |
| 10280 | + CanvasRendererBase.prototype.ctxLineJoin = function(value) { | |
| 10281 | + this.canvasContext.lineJoin = value; | |
| 10282 | + }; | |
| 10283 | + CanvasRendererBase.prototype.ctxMiterLimit = function(value) { | |
| 10284 | + this.canvasContext.miterLimit = value; | |
| 10285 | + }; | |
| 10286 | + CanvasRendererBase.prototype.ctxFill = function(rule) { | |
| 10287 | + this.canvasContext.fill(rule); | |
| 10288 | + }; | |
| 10289 | + CanvasRendererBase.prototype.ctxFillRect = function(x, y, w, h) { | |
| 10290 | + this.canvasContext.fillRect(x, y, w, h); | |
| 10291 | + }; | |
| 10292 | + CanvasRendererBase.prototype.ctxStroke = function() { | |
| 10293 | + this.canvasContext.stroke(); | |
| 10294 | + }; | |
| 10295 | + CanvasRendererBase.prototype.reset = function() { | |
| 10296 | + if (!this.renderConfig.clearCanvas) { | |
| 10297 | + this.canvasContext.restore(); | |
| 10298 | + return; | |
| 10299 | + } | |
| 10300 | + this.contextData.reset(); | |
| 10301 | + }; | |
| 10302 | + CanvasRendererBase.prototype.save = function() { | |
| 10303 | + this.canvasContext.save(); | |
| 10304 | + }; | |
| 10305 | + CanvasRendererBase.prototype.restore = function(actionFlag) { | |
| 10306 | + if (!this.renderConfig.clearCanvas) { | |
| 10307 | + this.canvasContext.restore(); | |
| 10308 | + return; | |
| 10309 | + } | |
| 10310 | + if (actionFlag) this.globalData.blendMode = "source-over"; | |
| 10311 | + this.contextData.restore(actionFlag); | |
| 10312 | + }; | |
| 10313 | + CanvasRendererBase.prototype.configAnimation = function(animData) { | |
| 10314 | + if (this.animationItem.wrapper) { | |
| 10315 | + this.animationItem.container = createTag("canvas"); | |
| 10316 | + var containerStyle = this.animationItem.container.style; | |
| 10317 | + containerStyle.width = "100%"; | |
| 10318 | + containerStyle.height = "100%"; | |
| 10319 | + var origin = "0px 0px 0px"; | |
| 10320 | + containerStyle.transformOrigin = origin; | |
| 10321 | + containerStyle.mozTransformOrigin = origin; | |
| 10322 | + containerStyle.webkitTransformOrigin = origin; | |
| 10323 | + containerStyle["-webkit-transform"] = origin; | |
| 10324 | + containerStyle.contentVisibility = this.renderConfig.contentVisibility; | |
| 10325 | + this.animationItem.wrapper.appendChild(this.animationItem.container); | |
| 10326 | + this.canvasContext = this.animationItem.container.getContext("2d"); | |
| 10327 | + if (this.renderConfig.className) this.animationItem.container.setAttribute("class", this.renderConfig.className); | |
| 10328 | + if (this.renderConfig.id) this.animationItem.container.setAttribute("id", this.renderConfig.id); | |
| 10329 | + } else this.canvasContext = this.renderConfig.context; | |
| 10330 | + this.contextData.setContext(this.canvasContext); | |
| 10331 | + this.data = animData; | |
| 10332 | + this.layers = animData.layers; | |
| 10333 | + this.transformCanvas = { | |
| 10334 | + w: animData.w, | |
| 10335 | + h: animData.h, | |
| 10336 | + sx: 0, | |
| 10337 | + sy: 0, | |
| 10338 | + tx: 0, | |
| 10339 | + ty: 0 | |
| 10340 | + }; | |
| 10341 | + this.setupGlobalData(animData, document.body); | |
| 10342 | + this.globalData.canvasContext = this.canvasContext; | |
| 10343 | + this.globalData.renderer = this; | |
| 10344 | + this.globalData.isDashed = false; | |
| 10345 | + this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; | |
| 10346 | + this.globalData.transformCanvas = this.transformCanvas; | |
| 10347 | + this.elements = createSizedArray(animData.layers.length); | |
| 10348 | + this.updateContainerSize(); | |
| 10349 | + }; | |
| 10350 | + CanvasRendererBase.prototype.updateContainerSize = function(width, height) { | |
| 10351 | + this.reset(); | |
| 10352 | + var elementWidth; | |
| 10353 | + var elementHeight; | |
| 10354 | + if (width) { | |
| 10355 | + elementWidth = width; | |
| 10356 | + elementHeight = height; | |
| 10357 | + this.canvasContext.canvas.width = elementWidth; | |
| 10358 | + this.canvasContext.canvas.height = elementHeight; | |
| 10359 | + } else { | |
| 10360 | + if (this.animationItem.wrapper && this.animationItem.container) { | |
| 10361 | + elementWidth = this.animationItem.wrapper.offsetWidth; | |
| 10362 | + elementHeight = this.animationItem.wrapper.offsetHeight; | |
| 10363 | + } else { | |
| 10364 | + elementWidth = this.canvasContext.canvas.width; | |
| 10365 | + elementHeight = this.canvasContext.canvas.height; | |
| 10366 | + } | |
| 10367 | + this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr; | |
| 10368 | + this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr; | |
| 10369 | + } | |
| 10370 | + var elementRel; | |
| 10371 | + var animationRel; | |
| 10372 | + if (this.renderConfig.preserveAspectRatio.indexOf("meet") !== -1 || this.renderConfig.preserveAspectRatio.indexOf("slice") !== -1) { | |
| 10373 | + var par = this.renderConfig.preserveAspectRatio.split(" "); | |
| 10374 | + var fillType = par[1] || "meet"; | |
| 10375 | + var pos = par[0] || "xMidYMid"; | |
| 10376 | + var xPos = pos.substr(0, 4); | |
| 10377 | + var yPos = pos.substr(4); | |
| 10378 | + elementRel = elementWidth / elementHeight; | |
| 10379 | + animationRel = this.transformCanvas.w / this.transformCanvas.h; | |
| 10380 | + if (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice") { | |
| 10381 | + this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); | |
| 10382 | + this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); | |
| 10383 | + } else { | |
| 10384 | + this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); | |
| 10385 | + this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); | |
| 10386 | + } | |
| 10387 | + if (xPos === "xMid" && (animationRel < elementRel && fillType === "meet" || animationRel > elementRel && fillType === "slice")) this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr; | |
| 10388 | + else if (xPos === "xMax" && (animationRel < elementRel && fillType === "meet" || animationRel > elementRel && fillType === "slice")) this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr; | |
| 10389 | + else this.transformCanvas.tx = 0; | |
| 10390 | + if (yPos === "YMid" && (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice")) this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr; | |
| 10391 | + else if (yPos === "YMax" && (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice")) this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr; | |
| 10392 | + else this.transformCanvas.ty = 0; | |
| 10393 | + } else if (this.renderConfig.preserveAspectRatio === "none") { | |
| 10394 | + this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); | |
| 10395 | + this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); | |
| 10396 | + this.transformCanvas.tx = 0; | |
| 10397 | + this.transformCanvas.ty = 0; | |
| 10398 | + } else { | |
| 10399 | + this.transformCanvas.sx = this.renderConfig.dpr; | |
| 10400 | + this.transformCanvas.sy = this.renderConfig.dpr; | |
| 10401 | + this.transformCanvas.tx = 0; | |
| 10402 | + this.transformCanvas.ty = 0; | |
| 10403 | + } | |
| 10404 | + this.transformCanvas.props = [ | |
| 10405 | + this.transformCanvas.sx, | |
| 10406 | + 0, | |
| 10407 | + 0, | |
| 10408 | + 0, | |
| 10409 | + 0, | |
| 10410 | + this.transformCanvas.sy, | |
| 10411 | + 0, | |
| 10412 | + 0, | |
| 10413 | + 0, | |
| 10414 | + 0, | |
| 10415 | + 1, | |
| 10416 | + 0, | |
| 10417 | + this.transformCanvas.tx, | |
| 10418 | + this.transformCanvas.ty, | |
| 10419 | + 0, | |
| 10420 | + 1 | |
| 10421 | + ]; | |
| 10422 | + this.ctxTransform(this.transformCanvas.props); | |
| 10423 | + this.canvasContext.beginPath(); | |
| 10424 | + this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h); | |
| 10425 | + this.canvasContext.closePath(); | |
| 10426 | + this.canvasContext.clip(); | |
| 10427 | + this.renderFrame(this.renderedFrame, true); | |
| 10428 | + }; | |
| 10429 | + CanvasRendererBase.prototype.destroy = function() { | |
| 10430 | + if (this.renderConfig.clearCanvas && this.animationItem.wrapper) this.animationItem.wrapper.innerText = ""; | |
| 10431 | + var i; | |
| 10432 | + for (i = (this.layers ? this.layers.length : 0) - 1; i >= 0; i -= 1) if (this.elements[i] && this.elements[i].destroy) this.elements[i].destroy(); | |
| 10433 | + this.elements.length = 0; | |
| 10434 | + this.globalData.canvasContext = null; | |
| 10435 | + this.animationItem.container = null; | |
| 10436 | + this.destroyed = true; | |
| 10437 | + }; | |
| 10438 | + CanvasRendererBase.prototype.renderFrame = function(num, forceRender) { | |
| 10439 | + if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) return; | |
| 10440 | + this.renderedFrame = num; | |
| 10441 | + this.globalData.frameNum = num - this.animationItem._isFirstFrame; | |
| 10442 | + this.globalData.frameId += 1; | |
| 10443 | + this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender; | |
| 10444 | + this.globalData.projectInterface.currentFrame = num; | |
| 10445 | + var i; | |
| 10446 | + var len = this.layers.length; | |
| 10447 | + if (!this.completeLayers) this.checkLayers(num); | |
| 10448 | + for (i = len - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) this.elements[i].prepareFrame(num - this.layers[i].st); | |
| 10449 | + if (this.globalData._mdf) { | |
| 10450 | + if (this.renderConfig.clearCanvas === true) this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h); | |
| 10451 | + else this.save(); | |
| 10452 | + for (i = len - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) this.elements[i].renderFrame(); | |
| 10453 | + if (this.renderConfig.clearCanvas !== true) this.restore(); | |
| 10454 | + } | |
| 10455 | + }; | |
| 10456 | + CanvasRendererBase.prototype.buildItem = function(pos) { | |
| 10457 | + var elements = this.elements; | |
| 10458 | + if (elements[pos] || this.layers[pos].ty === 99) return; | |
| 10459 | + var element = this.createItem(this.layers[pos], this, this.globalData); | |
| 10460 | + elements[pos] = element; | |
| 10461 | + element.initExpressions(); | |
| 10462 | + }; | |
| 10463 | + CanvasRendererBase.prototype.checkPendingElements = function() { | |
| 10464 | + while (this.pendingElements.length) this.pendingElements.pop().checkParenting(); | |
| 10465 | + }; | |
| 10466 | + CanvasRendererBase.prototype.hide = function() { | |
| 10467 | + this.animationItem.container.style.display = "none"; | |
| 10468 | + }; | |
| 10469 | + CanvasRendererBase.prototype.show = function() { | |
| 10470 | + this.animationItem.container.style.display = "block"; | |
| 10471 | + }; | |
| 10472 | + function CanvasContext() { | |
| 10473 | + this.opacity = -1; | |
| 10474 | + this.transform = createTypedArray("float32", 16); | |
| 10475 | + this.fillStyle = ""; | |
| 10476 | + this.strokeStyle = ""; | |
| 10477 | + this.lineWidth = ""; | |
| 10478 | + this.lineCap = ""; | |
| 10479 | + this.lineJoin = ""; | |
| 10480 | + this.miterLimit = ""; | |
| 10481 | + this.id = Math.random(); | |
| 10482 | + } | |
| 10483 | + function CVContextData() { | |
| 10484 | + this.stack = []; | |
| 10485 | + this.cArrPos = 0; | |
| 10486 | + this.cTr = new Matrix(); | |
| 10487 | + var i; | |
| 10488 | + var len = 15; | |
| 10489 | + for (i = 0; i < len; i += 1) { | |
| 10490 | + var canvasContext = new CanvasContext(); | |
| 10491 | + this.stack[i] = canvasContext; | |
| 10492 | + } | |
| 10493 | + this._length = len; | |
| 10494 | + this.nativeContext = null; | |
| 10495 | + this.transformMat = new Matrix(); | |
| 10496 | + this.currentOpacity = 1; | |
| 10497 | + this.currentFillStyle = ""; | |
| 10498 | + this.appliedFillStyle = ""; | |
| 10499 | + this.currentStrokeStyle = ""; | |
| 10500 | + this.appliedStrokeStyle = ""; | |
| 10501 | + this.currentLineWidth = ""; | |
| 10502 | + this.appliedLineWidth = ""; | |
| 10503 | + this.currentLineCap = ""; | |
| 10504 | + this.appliedLineCap = ""; | |
| 10505 | + this.currentLineJoin = ""; | |
| 10506 | + this.appliedLineJoin = ""; | |
| 10507 | + this.appliedMiterLimit = ""; | |
| 10508 | + this.currentMiterLimit = ""; | |
| 10509 | + } | |
| 10510 | + CVContextData.prototype.duplicate = function() { | |
| 10511 | + var newLength = this._length * 2; | |
| 10512 | + var i = 0; | |
| 10513 | + for (i = this._length; i < newLength; i += 1) this.stack[i] = new CanvasContext(); | |
| 10514 | + this._length = newLength; | |
| 10515 | + }; | |
| 10516 | + CVContextData.prototype.reset = function() { | |
| 10517 | + this.cArrPos = 0; | |
| 10518 | + this.cTr.reset(); | |
| 10519 | + this.stack[this.cArrPos].opacity = 1; | |
| 10520 | + }; | |
| 10521 | + CVContextData.prototype.restore = function(forceRestore) { | |
| 10522 | + this.cArrPos -= 1; | |
| 10523 | + var currentContext = this.stack[this.cArrPos]; | |
| 10524 | + var transform = currentContext.transform; | |
| 10525 | + var i; | |
| 10526 | + var arr = this.cTr.props; | |
| 10527 | + for (i = 0; i < 16; i += 1) arr[i] = transform[i]; | |
| 10528 | + if (forceRestore) { | |
| 10529 | + this.nativeContext.restore(); | |
| 10530 | + var prevStack = this.stack[this.cArrPos + 1]; | |
| 10531 | + this.appliedFillStyle = prevStack.fillStyle; | |
| 10532 | + this.appliedStrokeStyle = prevStack.strokeStyle; | |
| 10533 | + this.appliedLineWidth = prevStack.lineWidth; | |
| 10534 | + this.appliedLineCap = prevStack.lineCap; | |
| 10535 | + this.appliedLineJoin = prevStack.lineJoin; | |
| 10536 | + this.appliedMiterLimit = prevStack.miterLimit; | |
| 10537 | + } | |
| 10538 | + this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]); | |
| 10539 | + if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) { | |
| 10540 | + this.nativeContext.globalAlpha = currentContext.opacity; | |
| 10541 | + this.currentOpacity = currentContext.opacity; | |
| 10542 | + } | |
| 10543 | + this.currentFillStyle = currentContext.fillStyle; | |
| 10544 | + this.currentStrokeStyle = currentContext.strokeStyle; | |
| 10545 | + this.currentLineWidth = currentContext.lineWidth; | |
| 10546 | + this.currentLineCap = currentContext.lineCap; | |
| 10547 | + this.currentLineJoin = currentContext.lineJoin; | |
| 10548 | + this.currentMiterLimit = currentContext.miterLimit; | |
| 10549 | + }; | |
| 10550 | + CVContextData.prototype.save = function(saveOnNativeFlag) { | |
| 10551 | + if (saveOnNativeFlag) this.nativeContext.save(); | |
| 10552 | + var props = this.cTr.props; | |
| 10553 | + if (this._length <= this.cArrPos) this.duplicate(); | |
| 10554 | + var currentStack = this.stack[this.cArrPos]; | |
| 10555 | + var i; | |
| 10556 | + for (i = 0; i < 16; i += 1) currentStack.transform[i] = props[i]; | |
| 10557 | + this.cArrPos += 1; | |
| 10558 | + var newStack = this.stack[this.cArrPos]; | |
| 10559 | + newStack.opacity = currentStack.opacity; | |
| 10560 | + newStack.fillStyle = currentStack.fillStyle; | |
| 10561 | + newStack.strokeStyle = currentStack.strokeStyle; | |
| 10562 | + newStack.lineWidth = currentStack.lineWidth; | |
| 10563 | + newStack.lineCap = currentStack.lineCap; | |
| 10564 | + newStack.lineJoin = currentStack.lineJoin; | |
| 10565 | + newStack.miterLimit = currentStack.miterLimit; | |
| 10566 | + }; | |
| 10567 | + CVContextData.prototype.setOpacity = function(value) { | |
| 10568 | + this.stack[this.cArrPos].opacity = value; | |
| 10569 | + }; | |
| 10570 | + CVContextData.prototype.setContext = function(value) { | |
| 10571 | + this.nativeContext = value; | |
| 10572 | + }; | |
| 10573 | + CVContextData.prototype.fillStyle = function(value) { | |
| 10574 | + if (this.stack[this.cArrPos].fillStyle !== value) { | |
| 10575 | + this.currentFillStyle = value; | |
| 10576 | + this.stack[this.cArrPos].fillStyle = value; | |
| 10577 | + } | |
| 10578 | + }; | |
| 10579 | + CVContextData.prototype.strokeStyle = function(value) { | |
| 10580 | + if (this.stack[this.cArrPos].strokeStyle !== value) { | |
| 10581 | + this.currentStrokeStyle = value; | |
| 10582 | + this.stack[this.cArrPos].strokeStyle = value; | |
| 10583 | + } | |
| 10584 | + }; | |
| 10585 | + CVContextData.prototype.lineWidth = function(value) { | |
| 10586 | + if (this.stack[this.cArrPos].lineWidth !== value) { | |
| 10587 | + this.currentLineWidth = value; | |
| 10588 | + this.stack[this.cArrPos].lineWidth = value; | |
| 10589 | + } | |
| 10590 | + }; | |
| 10591 | + CVContextData.prototype.lineCap = function(value) { | |
| 10592 | + if (this.stack[this.cArrPos].lineCap !== value) { | |
| 10593 | + this.currentLineCap = value; | |
| 10594 | + this.stack[this.cArrPos].lineCap = value; | |
| 10595 | + } | |
| 10596 | + }; | |
| 10597 | + CVContextData.prototype.lineJoin = function(value) { | |
| 10598 | + if (this.stack[this.cArrPos].lineJoin !== value) { | |
| 10599 | + this.currentLineJoin = value; | |
| 10600 | + this.stack[this.cArrPos].lineJoin = value; | |
| 10601 | + } | |
| 10602 | + }; | |
| 10603 | + CVContextData.prototype.miterLimit = function(value) { | |
| 10604 | + if (this.stack[this.cArrPos].miterLimit !== value) { | |
| 10605 | + this.currentMiterLimit = value; | |
| 10606 | + this.stack[this.cArrPos].miterLimit = value; | |
| 10607 | + } | |
| 10608 | + }; | |
| 10609 | + CVContextData.prototype.transform = function(props) { | |
| 10610 | + this.transformMat.cloneFromProps(props); | |
| 10611 | + var currentTransform = this.cTr; | |
| 10612 | + this.transformMat.multiply(currentTransform); | |
| 10613 | + currentTransform.cloneFromProps(this.transformMat.props); | |
| 10614 | + var trProps = currentTransform.props; | |
| 10615 | + this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]); | |
| 10616 | + }; | |
| 10617 | + CVContextData.prototype.opacity = function(op) { | |
| 10618 | + var currentOpacity = this.stack[this.cArrPos].opacity; | |
| 10619 | + currentOpacity *= op < 0 ? 0 : op; | |
| 10620 | + if (this.stack[this.cArrPos].opacity !== currentOpacity) { | |
| 10621 | + if (this.currentOpacity !== op) { | |
| 10622 | + this.nativeContext.globalAlpha = op; | |
| 10623 | + this.currentOpacity = op; | |
| 10624 | + } | |
| 10625 | + this.stack[this.cArrPos].opacity = currentOpacity; | |
| 10626 | + } | |
| 10627 | + }; | |
| 10628 | + CVContextData.prototype.fill = function(rule) { | |
| 10629 | + if (this.appliedFillStyle !== this.currentFillStyle) { | |
| 10630 | + this.appliedFillStyle = this.currentFillStyle; | |
| 10631 | + this.nativeContext.fillStyle = this.appliedFillStyle; | |
| 10632 | + } | |
| 10633 | + this.nativeContext.fill(rule); | |
| 10634 | + }; | |
| 10635 | + CVContextData.prototype.fillRect = function(x, y, w, h) { | |
| 10636 | + if (this.appliedFillStyle !== this.currentFillStyle) { | |
| 10637 | + this.appliedFillStyle = this.currentFillStyle; | |
| 10638 | + this.nativeContext.fillStyle = this.appliedFillStyle; | |
| 10639 | + } | |
| 10640 | + this.nativeContext.fillRect(x, y, w, h); | |
| 10641 | + }; | |
| 10642 | + CVContextData.prototype.stroke = function() { | |
| 10643 | + if (this.appliedStrokeStyle !== this.currentStrokeStyle) { | |
| 10644 | + this.appliedStrokeStyle = this.currentStrokeStyle; | |
| 10645 | + this.nativeContext.strokeStyle = this.appliedStrokeStyle; | |
| 10646 | + } | |
| 10647 | + if (this.appliedLineWidth !== this.currentLineWidth) { | |
| 10648 | + this.appliedLineWidth = this.currentLineWidth; | |
| 10649 | + this.nativeContext.lineWidth = this.appliedLineWidth; | |
| 10650 | + } | |
| 10651 | + if (this.appliedLineCap !== this.currentLineCap) { | |
| 10652 | + this.appliedLineCap = this.currentLineCap; | |
| 10653 | + this.nativeContext.lineCap = this.appliedLineCap; | |
| 10654 | + } | |
| 10655 | + if (this.appliedLineJoin !== this.currentLineJoin) { | |
| 10656 | + this.appliedLineJoin = this.currentLineJoin; | |
| 10657 | + this.nativeContext.lineJoin = this.appliedLineJoin; | |
| 10658 | + } | |
| 10659 | + if (this.appliedMiterLimit !== this.currentMiterLimit) { | |
| 10660 | + this.appliedMiterLimit = this.currentMiterLimit; | |
| 10661 | + this.nativeContext.miterLimit = this.appliedMiterLimit; | |
| 10662 | + } | |
| 10663 | + this.nativeContext.stroke(); | |
| 10664 | + }; | |
| 10665 | + function CVCompElement(data, globalData, comp) { | |
| 10666 | + this.completeLayers = false; | |
| 10667 | + this.layers = data.layers; | |
| 10668 | + this.pendingElements = []; | |
| 10669 | + this.elements = createSizedArray(this.layers.length); | |
| 10670 | + this.initElement(data, globalData, comp); | |
| 10671 | + this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; | |
| 10672 | + } | |
| 10673 | + extendPrototype([ | |
| 10674 | + CanvasRendererBase, | |
| 10675 | + ICompElement, | |
| 10676 | + CVBaseElement | |
| 10677 | + ], CVCompElement); | |
| 10678 | + CVCompElement.prototype.renderInnerContent = function() { | |
| 10679 | + var ctx = this.canvasContext; | |
| 10680 | + ctx.beginPath(); | |
| 10681 | + ctx.moveTo(0, 0); | |
| 10682 | + ctx.lineTo(this.data.w, 0); | |
| 10683 | + ctx.lineTo(this.data.w, this.data.h); | |
| 10684 | + ctx.lineTo(0, this.data.h); | |
| 10685 | + ctx.lineTo(0, 0); | |
| 10686 | + ctx.clip(); | |
| 10687 | + var i; | |
| 10688 | + for (i = this.layers.length - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) this.elements[i].renderFrame(); | |
| 10689 | + }; | |
| 10690 | + CVCompElement.prototype.destroy = function() { | |
| 10691 | + var i; | |
| 10692 | + for (i = this.layers.length - 1; i >= 0; i -= 1) if (this.elements[i]) this.elements[i].destroy(); | |
| 10693 | + this.layers = null; | |
| 10694 | + this.elements = null; | |
| 10695 | + }; | |
| 10696 | + CVCompElement.prototype.createComp = function(data) { | |
| 10697 | + return new CVCompElement(data, this.globalData, this); | |
| 10698 | + }; | |
| 10699 | + function CanvasRenderer(animationItem, config) { | |
| 10700 | + this.animationItem = animationItem; | |
| 10701 | + this.renderConfig = { | |
| 10702 | + clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true, | |
| 10703 | + context: config && config.context || null, | |
| 10704 | + progressiveLoad: config && config.progressiveLoad || false, | |
| 10705 | + preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", | |
| 10706 | + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", | |
| 10707 | + contentVisibility: config && config.contentVisibility || "visible", | |
| 10708 | + className: config && config.className || "", | |
| 10709 | + id: config && config.id || "", | |
| 10710 | + runExpressions: !config || config.runExpressions === void 0 || config.runExpressions | |
| 10711 | + }; | |
| 10712 | + this.renderConfig.dpr = config && config.dpr || 1; | |
| 10713 | + if (this.animationItem.wrapper) this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; | |
| 10714 | + this.renderedFrame = -1; | |
| 10715 | + this.globalData = { | |
| 10716 | + frameNum: -1, | |
| 10717 | + _mdf: false, | |
| 10718 | + renderConfig: this.renderConfig, | |
| 10719 | + currentGlobalAlpha: -1 | |
| 10720 | + }; | |
| 10721 | + this.contextData = new CVContextData(); | |
| 10722 | + this.elements = []; | |
| 10723 | + this.pendingElements = []; | |
| 10724 | + this.transformMat = new Matrix(); | |
| 10725 | + this.completeLayers = false; | |
| 10726 | + this.rendererType = "canvas"; | |
| 10727 | + if (this.renderConfig.clearCanvas) { | |
| 10728 | + this.ctxTransform = this.contextData.transform.bind(this.contextData); | |
| 10729 | + this.ctxOpacity = this.contextData.opacity.bind(this.contextData); | |
| 10730 | + this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData); | |
| 10731 | + this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData); | |
| 10732 | + this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData); | |
| 10733 | + this.ctxLineCap = this.contextData.lineCap.bind(this.contextData); | |
| 10734 | + this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData); | |
| 10735 | + this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData); | |
| 10736 | + this.ctxFill = this.contextData.fill.bind(this.contextData); | |
| 10737 | + this.ctxFillRect = this.contextData.fillRect.bind(this.contextData); | |
| 10738 | + this.ctxStroke = this.contextData.stroke.bind(this.contextData); | |
| 10739 | + this.save = this.contextData.save.bind(this.contextData); | |
| 10740 | + } | |
| 10741 | + } | |
| 10742 | + extendPrototype([CanvasRendererBase], CanvasRenderer); | |
| 10743 | + CanvasRenderer.prototype.createComp = function(data) { | |
| 10744 | + return new CVCompElement(data, this.globalData, this); | |
| 10745 | + }; | |
| 10746 | + function HBaseElement() {} | |
| 10747 | + HBaseElement.prototype = { | |
| 10748 | + checkBlendMode: function checkBlendMode() {}, | |
| 10749 | + initRendererElement: function initRendererElement() { | |
| 10750 | + this.baseElement = createTag(this.data.tg || "div"); | |
| 10751 | + if (this.data.hasMask) { | |
| 10752 | + this.svgElement = createNS("svg"); | |
| 10753 | + this.layerElement = createNS("g"); | |
| 10754 | + this.maskedElement = this.layerElement; | |
| 10755 | + this.svgElement.appendChild(this.layerElement); | |
| 10756 | + this.baseElement.appendChild(this.svgElement); | |
| 10757 | + } else this.layerElement = this.baseElement; | |
| 10758 | + styleDiv(this.baseElement); | |
| 10759 | + }, | |
| 10760 | + createContainerElements: function createContainerElements() { | |
| 10761 | + this.renderableEffectsManager = new CVEffects(this); | |
| 10762 | + this.transformedElement = this.baseElement; | |
| 10763 | + this.maskedElement = this.layerElement; | |
| 10764 | + if (this.data.ln) this.layerElement.setAttribute("id", this.data.ln); | |
| 10765 | + if (this.data.cl) this.layerElement.setAttribute("class", this.data.cl); | |
| 10766 | + if (this.data.bm !== 0) this.setBlendMode(); | |
| 10767 | + }, | |
| 10768 | + renderElement: function renderElement() { | |
| 10769 | + var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {}; | |
| 10770 | + if (this.finalTransform._matMdf) { | |
| 10771 | + var matrixValue = this.finalTransform.mat.toCSS(); | |
| 10772 | + transformedElementStyle.transform = matrixValue; | |
| 10773 | + transformedElementStyle.webkitTransform = matrixValue; | |
| 10774 | + } | |
| 10775 | + if (this.finalTransform._opMdf) transformedElementStyle.opacity = this.finalTransform.mProp.o.v; | |
| 10776 | + }, | |
| 10777 | + renderFrame: function renderFrame() { | |
| 10778 | + if (this.data.hd || this.hidden) return; | |
| 10779 | + this.renderTransform(); | |
| 10780 | + this.renderRenderable(); | |
| 10781 | + this.renderElement(); | |
| 10782 | + this.renderInnerContent(); | |
| 10783 | + if (this._isFirstFrame) this._isFirstFrame = false; | |
| 10784 | + }, | |
| 10785 | + destroy: function destroy() { | |
| 10786 | + this.layerElement = null; | |
| 10787 | + this.transformedElement = null; | |
| 10788 | + if (this.matteElement) this.matteElement = null; | |
| 10789 | + if (this.maskManager) { | |
| 10790 | + this.maskManager.destroy(); | |
| 10791 | + this.maskManager = null; | |
| 10792 | + } | |
| 10793 | + }, | |
| 10794 | + createRenderableComponents: function createRenderableComponents() { | |
| 10795 | + this.maskManager = new MaskElement(this.data, this, this.globalData); | |
| 10796 | + }, | |
| 10797 | + addEffects: function addEffects() {}, | |
| 10798 | + setMatte: function setMatte() {} | |
| 10799 | + }; | |
| 10800 | + HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement; | |
| 10801 | + HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy; | |
| 10802 | + HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting; | |
| 10803 | + function HSolidElement(data, globalData, comp) { | |
| 10804 | + this.initElement(data, globalData, comp); | |
| 10805 | + } | |
| 10806 | + extendPrototype([ | |
| 10807 | + BaseElement, | |
| 10808 | + TransformElement, | |
| 10809 | + HBaseElement, | |
| 10810 | + HierarchyElement, | |
| 10811 | + FrameElement, | |
| 10812 | + RenderableDOMElement | |
| 10813 | + ], HSolidElement); | |
| 10814 | + HSolidElement.prototype.createContent = function() { | |
| 10815 | + var rect; | |
| 10816 | + if (this.data.hasMask) { | |
| 10817 | + rect = createNS("rect"); | |
| 10818 | + rect.setAttribute("width", this.data.sw); | |
| 10819 | + rect.setAttribute("height", this.data.sh); | |
| 10820 | + rect.setAttribute("fill", this.data.sc); | |
| 10821 | + this.svgElement.setAttribute("width", this.data.sw); | |
| 10822 | + this.svgElement.setAttribute("height", this.data.sh); | |
| 10823 | + } else { | |
| 10824 | + rect = createTag("div"); | |
| 10825 | + rect.style.width = this.data.sw + "px"; | |
| 10826 | + rect.style.height = this.data.sh + "px"; | |
| 10827 | + rect.style.backgroundColor = this.data.sc; | |
| 10828 | + } | |
| 10829 | + this.layerElement.appendChild(rect); | |
| 10830 | + }; | |
| 10831 | + function HShapeElement(data, globalData, comp) { | |
| 10832 | + this.shapes = []; | |
| 10833 | + this.shapesData = data.shapes; | |
| 10834 | + this.stylesList = []; | |
| 10835 | + this.shapeModifiers = []; | |
| 10836 | + this.itemsData = []; | |
| 10837 | + this.processedElements = []; | |
| 10838 | + this.animatedContents = []; | |
| 10839 | + this.shapesContainer = createNS("g"); | |
| 10840 | + this.initElement(data, globalData, comp); | |
| 10841 | + this.prevViewData = []; | |
| 10842 | + this.currentBBox = { | |
| 10843 | + x: 999999, | |
| 10844 | + y: -999999, | |
| 10845 | + h: 0, | |
| 10846 | + w: 0 | |
| 10847 | + }; | |
| 10848 | + } | |
| 10849 | + extendPrototype([ | |
| 10850 | + BaseElement, | |
| 10851 | + TransformElement, | |
| 10852 | + HSolidElement, | |
| 10853 | + SVGShapeElement, | |
| 10854 | + HBaseElement, | |
| 10855 | + HierarchyElement, | |
| 10856 | + FrameElement, | |
| 10857 | + RenderableElement | |
| 10858 | + ], HShapeElement); | |
| 10859 | + HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent; | |
| 10860 | + HShapeElement.prototype.createContent = function() { | |
| 10861 | + var cont; | |
| 10862 | + this.baseElement.style.fontSize = 0; | |
| 10863 | + if (this.data.hasMask) { | |
| 10864 | + this.layerElement.appendChild(this.shapesContainer); | |
| 10865 | + cont = this.svgElement; | |
| 10866 | + } else { | |
| 10867 | + cont = createNS("svg"); | |
| 10868 | + var size = this.comp.data ? this.comp.data : this.globalData.compSize; | |
| 10869 | + cont.setAttribute("width", size.w); | |
| 10870 | + cont.setAttribute("height", size.h); | |
| 10871 | + cont.appendChild(this.shapesContainer); | |
| 10872 | + this.layerElement.appendChild(cont); | |
| 10873 | + } | |
| 10874 | + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true); | |
| 10875 | + this.filterUniqueShapes(); | |
| 10876 | + this.shapeCont = cont; | |
| 10877 | + }; | |
| 10878 | + HShapeElement.prototype.getTransformedPoint = function(transformers, point) { | |
| 10879 | + var i; | |
| 10880 | + var len = transformers.length; | |
| 10881 | + for (i = 0; i < len; i += 1) point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0); | |
| 10882 | + return point; | |
| 10883 | + }; | |
| 10884 | + HShapeElement.prototype.calculateShapeBoundingBox = function(item, boundingBox) { | |
| 10885 | + var shape = item.sh.v; | |
| 10886 | + var transformers = item.transformers; | |
| 10887 | + var i; | |
| 10888 | + var len = shape._length; | |
| 10889 | + var vPoint; | |
| 10890 | + var oPoint; | |
| 10891 | + var nextIPoint; | |
| 10892 | + var nextVPoint; | |
| 10893 | + if (len <= 1) return; | |
| 10894 | + for (i = 0; i < len - 1; i += 1) { | |
| 10895 | + vPoint = this.getTransformedPoint(transformers, shape.v[i]); | |
| 10896 | + oPoint = this.getTransformedPoint(transformers, shape.o[i]); | |
| 10897 | + nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]); | |
| 10898 | + nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]); | |
| 10899 | + this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox); | |
| 10900 | + } | |
| 10901 | + if (shape.c) { | |
| 10902 | + vPoint = this.getTransformedPoint(transformers, shape.v[i]); | |
| 10903 | + oPoint = this.getTransformedPoint(transformers, shape.o[i]); | |
| 10904 | + nextIPoint = this.getTransformedPoint(transformers, shape.i[0]); | |
| 10905 | + nextVPoint = this.getTransformedPoint(transformers, shape.v[0]); | |
| 10906 | + this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox); | |
| 10907 | + } | |
| 10908 | + }; | |
| 10909 | + HShapeElement.prototype.checkBounds = function(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) { | |
| 10910 | + this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint); | |
| 10911 | + var bounds = this.shapeBoundingBox; | |
| 10912 | + boundingBox.x = bmMin(bounds.left, boundingBox.x); | |
| 10913 | + boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax); | |
| 10914 | + boundingBox.y = bmMin(bounds.top, boundingBox.y); | |
| 10915 | + boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax); | |
| 10916 | + }; | |
| 10917 | + HShapeElement.prototype.shapeBoundingBox = { | |
| 10918 | + left: 0, | |
| 10919 | + right: 0, | |
| 10920 | + top: 0, | |
| 10921 | + bottom: 0 | |
| 10922 | + }; | |
| 10923 | + HShapeElement.prototype.tempBoundingBox = { | |
| 10924 | + x: 0, | |
| 10925 | + xMax: 0, | |
| 10926 | + y: 0, | |
| 10927 | + yMax: 0, | |
| 10928 | + width: 0, | |
| 10929 | + height: 0 | |
| 10930 | + }; | |
| 10931 | + HShapeElement.prototype.getBoundsOfCurve = function(p0, p1, p2, p3) { | |
| 10932 | + var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]]; | |
| 10933 | + for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) { | |
| 10934 | + b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; | |
| 10935 | + a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; | |
| 10936 | + c = 3 * p1[i] - 3 * p0[i]; | |
| 10937 | + b |= 0; | |
| 10938 | + a |= 0; | |
| 10939 | + c |= 0; | |
| 10940 | + if (a === 0 && b === 0) {} else if (a === 0) { | |
| 10941 | + t = -c / b; | |
| 10942 | + if (t > 0 && t < 1) bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i)); | |
| 10943 | + } else { | |
| 10944 | + b2ac = b * b - 4 * c * a; | |
| 10945 | + if (b2ac >= 0) { | |
| 10946 | + t1 = (-b + bmSqrt(b2ac)) / (2 * a); | |
| 10947 | + if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i)); | |
| 10948 | + t2 = (-b - bmSqrt(b2ac)) / (2 * a); | |
| 10949 | + if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i)); | |
| 10950 | + } | |
| 10951 | + } | |
| 10952 | + } | |
| 10953 | + this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]); | |
| 10954 | + this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]); | |
| 10955 | + this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]); | |
| 10956 | + this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]); | |
| 10957 | + }; | |
| 10958 | + HShapeElement.prototype.calculateF = function(t, p0, p1, p2, p3, i) { | |
| 10959 | + return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i]; | |
| 10960 | + }; | |
| 10961 | + HShapeElement.prototype.calculateBoundingBox = function(itemsData, boundingBox) { | |
| 10962 | + var i; | |
| 10963 | + var len = itemsData.length; | |
| 10964 | + for (i = 0; i < len; i += 1) if (itemsData[i] && itemsData[i].sh) this.calculateShapeBoundingBox(itemsData[i], boundingBox); | |
| 10965 | + else if (itemsData[i] && itemsData[i].it) this.calculateBoundingBox(itemsData[i].it, boundingBox); | |
| 10966 | + else if (itemsData[i] && itemsData[i].style && itemsData[i].w) this.expandStrokeBoundingBox(itemsData[i].w, boundingBox); | |
| 10967 | + }; | |
| 10968 | + HShapeElement.prototype.expandStrokeBoundingBox = function(widthProperty, boundingBox) { | |
| 10969 | + var width = 0; | |
| 10970 | + if (widthProperty.keyframes) { | |
| 10971 | + for (var i = 0; i < widthProperty.keyframes.length; i += 1) { | |
| 10972 | + var kfw = widthProperty.keyframes[i].s; | |
| 10973 | + if (kfw > width) width = kfw; | |
| 10974 | + } | |
| 10975 | + width *= widthProperty.mult; | |
| 10976 | + } else width = widthProperty.v * widthProperty.mult; | |
| 10977 | + boundingBox.x -= width; | |
| 10978 | + boundingBox.xMax += width; | |
| 10979 | + boundingBox.y -= width; | |
| 10980 | + boundingBox.yMax += width; | |
| 10981 | + }; | |
| 10982 | + HShapeElement.prototype.currentBoxContains = function(box) { | |
| 10983 | + return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height; | |
| 10984 | + }; | |
| 10985 | + HShapeElement.prototype.renderInnerContent = function() { | |
| 10986 | + this._renderShapeFrame(); | |
| 10987 | + if (!this.hidden && (this._isFirstFrame || this._mdf)) { | |
| 10988 | + var tempBoundingBox = this.tempBoundingBox; | |
| 10989 | + var max = 999999; | |
| 10990 | + tempBoundingBox.x = max; | |
| 10991 | + tempBoundingBox.xMax = -max; | |
| 10992 | + tempBoundingBox.y = max; | |
| 10993 | + tempBoundingBox.yMax = -max; | |
| 10994 | + this.calculateBoundingBox(this.itemsData, tempBoundingBox); | |
| 10995 | + tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x; | |
| 10996 | + tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; | |
| 10997 | + if (this.currentBoxContains(tempBoundingBox)) return; | |
| 10998 | + var changed = false; | |
| 10999 | + if (this.currentBBox.w !== tempBoundingBox.width) { | |
| 11000 | + this.currentBBox.w = tempBoundingBox.width; | |
| 11001 | + this.shapeCont.setAttribute("width", tempBoundingBox.width); | |
| 11002 | + changed = true; | |
| 11003 | + } | |
| 11004 | + if (this.currentBBox.h !== tempBoundingBox.height) { | |
| 11005 | + this.currentBBox.h = tempBoundingBox.height; | |
| 11006 | + this.shapeCont.setAttribute("height", tempBoundingBox.height); | |
| 11007 | + changed = true; | |
| 11008 | + } | |
| 11009 | + if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) { | |
| 11010 | + this.currentBBox.w = tempBoundingBox.width; | |
| 11011 | + this.currentBBox.h = tempBoundingBox.height; | |
| 11012 | + this.currentBBox.x = tempBoundingBox.x; | |
| 11013 | + this.currentBBox.y = tempBoundingBox.y; | |
| 11014 | + this.shapeCont.setAttribute("viewBox", this.currentBBox.x + " " + this.currentBBox.y + " " + this.currentBBox.w + " " + this.currentBBox.h); | |
| 11015 | + var shapeStyle = this.shapeCont.style; | |
| 11016 | + var shapeTransform = "translate(" + this.currentBBox.x + "px," + this.currentBBox.y + "px)"; | |
| 11017 | + shapeStyle.transform = shapeTransform; | |
| 11018 | + shapeStyle.webkitTransform = shapeTransform; | |
| 11019 | + } | |
| 11020 | + } | |
| 11021 | + }; | |
| 11022 | + function HTextElement(data, globalData, comp) { | |
| 11023 | + this.textSpans = []; | |
| 11024 | + this.textPaths = []; | |
| 11025 | + this.currentBBox = { | |
| 11026 | + x: 999999, | |
| 11027 | + y: -999999, | |
| 11028 | + h: 0, | |
| 11029 | + w: 0 | |
| 11030 | + }; | |
| 11031 | + this.renderType = "svg"; | |
| 11032 | + this.isMasked = false; | |
| 11033 | + this.initElement(data, globalData, comp); | |
| 11034 | + } | |
| 11035 | + extendPrototype([ | |
| 11036 | + BaseElement, | |
| 11037 | + TransformElement, | |
| 11038 | + HBaseElement, | |
| 11039 | + HierarchyElement, | |
| 11040 | + FrameElement, | |
| 11041 | + RenderableDOMElement, | |
| 11042 | + ITextElement | |
| 11043 | + ], HTextElement); | |
| 11044 | + HTextElement.prototype.createContent = function() { | |
| 11045 | + this.isMasked = this.checkMasks(); | |
| 11046 | + if (this.isMasked) { | |
| 11047 | + this.renderType = "svg"; | |
| 11048 | + this.compW = this.comp.data.w; | |
| 11049 | + this.compH = this.comp.data.h; | |
| 11050 | + this.svgElement.setAttribute("width", this.compW); | |
| 11051 | + this.svgElement.setAttribute("height", this.compH); | |
| 11052 | + var g = createNS("g"); | |
| 11053 | + this.maskedElement.appendChild(g); | |
| 11054 | + this.innerElem = g; | |
| 11055 | + } else { | |
| 11056 | + this.renderType = "html"; | |
| 11057 | + this.innerElem = this.layerElement; | |
| 11058 | + } | |
| 11059 | + this.checkParenting(); | |
| 11060 | + }; | |
| 11061 | + HTextElement.prototype.buildNewText = function() { | |
| 11062 | + var documentData = this.textProperty.currentData; | |
| 11063 | + this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); | |
| 11064 | + var innerElemStyle = this.innerElem.style; | |
| 11065 | + var textColor = documentData.fc ? this.buildColor(documentData.fc) : "rgba(0,0,0,0)"; | |
| 11066 | + innerElemStyle.fill = textColor; | |
| 11067 | + innerElemStyle.color = textColor; | |
| 11068 | + if (documentData.sc) { | |
| 11069 | + innerElemStyle.stroke = this.buildColor(documentData.sc); | |
| 11070 | + innerElemStyle.strokeWidth = documentData.sw + "px"; | |
| 11071 | + } | |
| 11072 | + var fontData = this.globalData.fontManager.getFontByName(documentData.f); | |
| 11073 | + if (!this.globalData.fontManager.chars) { | |
| 11074 | + innerElemStyle.fontSize = documentData.finalSize + "px"; | |
| 11075 | + innerElemStyle.lineHeight = documentData.finalSize + "px"; | |
| 11076 | + if (fontData.fClass) this.innerElem.className = fontData.fClass; | |
| 11077 | + else { | |
| 11078 | + innerElemStyle.fontFamily = fontData.fFamily; | |
| 11079 | + var fWeight = documentData.fWeight; | |
| 11080 | + innerElemStyle.fontStyle = documentData.fStyle; | |
| 11081 | + innerElemStyle.fontWeight = fWeight; | |
| 11082 | + } | |
| 11083 | + } | |
| 11084 | + var i; | |
| 11085 | + var len; | |
| 11086 | + var letters = documentData.l; | |
| 11087 | + len = letters.length; | |
| 11088 | + var tSpan; | |
| 11089 | + var tParent; | |
| 11090 | + var tCont; | |
| 11091 | + var matrixHelper = this.mHelper; | |
| 11092 | + var shapes; | |
| 11093 | + var shapeStr = ""; | |
| 11094 | + var cnt = 0; | |
| 11095 | + for (i = 0; i < len; i += 1) { | |
| 11096 | + if (this.globalData.fontManager.chars) { | |
| 11097 | + if (!this.textPaths[cnt]) { | |
| 11098 | + tSpan = createNS("path"); | |
| 11099 | + tSpan.setAttribute("stroke-linecap", lineCapEnum[1]); | |
| 11100 | + tSpan.setAttribute("stroke-linejoin", lineJoinEnum[2]); | |
| 11101 | + tSpan.setAttribute("stroke-miterlimit", "4"); | |
| 11102 | + } else tSpan = this.textPaths[cnt]; | |
| 11103 | + if (!this.isMasked) if (this.textSpans[cnt]) { | |
| 11104 | + tParent = this.textSpans[cnt]; | |
| 11105 | + tCont = tParent.children[0]; | |
| 11106 | + } else { | |
| 11107 | + tParent = createTag("div"); | |
| 11108 | + tParent.style.lineHeight = 0; | |
| 11109 | + tCont = createNS("svg"); | |
| 11110 | + tCont.appendChild(tSpan); | |
| 11111 | + styleDiv(tParent); | |
| 11112 | + } | |
| 11113 | + } else if (!this.isMasked) if (this.textSpans[cnt]) { | |
| 11114 | + tParent = this.textSpans[cnt]; | |
| 11115 | + tSpan = this.textPaths[cnt]; | |
| 11116 | + } else { | |
| 11117 | + tParent = createTag("span"); | |
| 11118 | + styleDiv(tParent); | |
| 11119 | + tSpan = createTag("span"); | |
| 11120 | + styleDiv(tSpan); | |
| 11121 | + tParent.appendChild(tSpan); | |
| 11122 | + } | |
| 11123 | + else tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS("text"); | |
| 11124 | + if (this.globalData.fontManager.chars) { | |
| 11125 | + var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); | |
| 11126 | + var shapeData; | |
| 11127 | + if (charData) shapeData = charData.data; | |
| 11128 | + else shapeData = null; | |
| 11129 | + matrixHelper.reset(); | |
| 11130 | + if (shapeData && shapeData.shapes && shapeData.shapes.length) { | |
| 11131 | + shapes = shapeData.shapes[0].it; | |
| 11132 | + matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); | |
| 11133 | + shapeStr = this.createPathShape(matrixHelper, shapes); | |
| 11134 | + tSpan.setAttribute("d", shapeStr); | |
| 11135 | + } | |
| 11136 | + if (!this.isMasked) { | |
| 11137 | + this.innerElem.appendChild(tParent); | |
| 11138 | + if (shapeData && shapeData.shapes) { | |
| 11139 | + document.body.appendChild(tCont); | |
| 11140 | + var boundingBox = tCont.getBBox(); | |
| 11141 | + tCont.setAttribute("width", boundingBox.width + 2); | |
| 11142 | + tCont.setAttribute("height", boundingBox.height + 2); | |
| 11143 | + tCont.setAttribute("viewBox", boundingBox.x - 1 + " " + (boundingBox.y - 1) + " " + (boundingBox.width + 2) + " " + (boundingBox.height + 2)); | |
| 11144 | + var tContStyle = tCont.style; | |
| 11145 | + var tContTranslation = "translate(" + (boundingBox.x - 1) + "px," + (boundingBox.y - 1) + "px)"; | |
| 11146 | + tContStyle.transform = tContTranslation; | |
| 11147 | + tContStyle.webkitTransform = tContTranslation; | |
| 11148 | + letters[i].yOffset = boundingBox.y - 1; | |
| 11149 | + } else { | |
| 11150 | + tCont.setAttribute("width", 1); | |
| 11151 | + tCont.setAttribute("height", 1); | |
| 11152 | + } | |
| 11153 | + tParent.appendChild(tCont); | |
| 11154 | + } else this.innerElem.appendChild(tSpan); | |
| 11155 | + } else { | |
| 11156 | + tSpan.textContent = letters[i].val; | |
| 11157 | + tSpan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); | |
| 11158 | + if (!this.isMasked) { | |
| 11159 | + this.innerElem.appendChild(tParent); | |
| 11160 | + var tStyle = tSpan.style; | |
| 11161 | + var tSpanTranslation = "translate3d(0," + -documentData.finalSize / 1.2 + "px,0)"; | |
| 11162 | + tStyle.transform = tSpanTranslation; | |
| 11163 | + tStyle.webkitTransform = tSpanTranslation; | |
| 11164 | + } else this.innerElem.appendChild(tSpan); | |
| 11165 | + } | |
| 11166 | + if (!this.isMasked) this.textSpans[cnt] = tParent; | |
| 11167 | + else this.textSpans[cnt] = tSpan; | |
| 11168 | + this.textSpans[cnt].style.display = "block"; | |
| 11169 | + this.textPaths[cnt] = tSpan; | |
| 11170 | + cnt += 1; | |
| 11171 | + } | |
| 11172 | + while (cnt < this.textSpans.length) { | |
| 11173 | + this.textSpans[cnt].style.display = "none"; | |
| 11174 | + cnt += 1; | |
| 11175 | + } | |
| 11176 | + }; | |
| 11177 | + HTextElement.prototype.renderInnerContent = function() { | |
| 11178 | + this.validateText(); | |
| 11179 | + var svgStyle; | |
| 11180 | + if (this.data.singleShape) { | |
| 11181 | + if (!this._isFirstFrame && !this.lettersChangedFlag) return; | |
| 11182 | + if (this.isMasked && this.finalTransform._matMdf) { | |
| 11183 | + this.svgElement.setAttribute("viewBox", -this.finalTransform.mProp.p.v[0] + " " + -this.finalTransform.mProp.p.v[1] + " " + this.compW + " " + this.compH); | |
| 11184 | + svgStyle = this.svgElement.style; | |
| 11185 | + var translation = "translate(" + -this.finalTransform.mProp.p.v[0] + "px," + -this.finalTransform.mProp.p.v[1] + "px)"; | |
| 11186 | + svgStyle.transform = translation; | |
| 11187 | + svgStyle.webkitTransform = translation; | |
| 11188 | + } | |
| 11189 | + } | |
| 11190 | + this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); | |
| 11191 | + if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) return; | |
| 11192 | + var i; | |
| 11193 | + var len; | |
| 11194 | + var count = 0; | |
| 11195 | + var renderedLetters = this.textAnimator.renderedLetters; | |
| 11196 | + var letters = this.textProperty.currentData.l; | |
| 11197 | + len = letters.length; | |
| 11198 | + var renderedLetter; | |
| 11199 | + var textSpan; | |
| 11200 | + var textPath; | |
| 11201 | + for (i = 0; i < len; i += 1) if (letters[i].n) count += 1; | |
| 11202 | + else { | |
| 11203 | + textSpan = this.textSpans[i]; | |
| 11204 | + textPath = this.textPaths[i]; | |
| 11205 | + renderedLetter = renderedLetters[count]; | |
| 11206 | + count += 1; | |
| 11207 | + if (renderedLetter._mdf.m) if (!this.isMasked) { | |
| 11208 | + textSpan.style.webkitTransform = renderedLetter.m; | |
| 11209 | + textSpan.style.transform = renderedLetter.m; | |
| 11210 | + } else textSpan.setAttribute("transform", renderedLetter.m); | |
| 11211 | + textSpan.style.opacity = renderedLetter.o; | |
| 11212 | + if (renderedLetter.sw && renderedLetter._mdf.sw) textPath.setAttribute("stroke-width", renderedLetter.sw); | |
| 11213 | + if (renderedLetter.sc && renderedLetter._mdf.sc) textPath.setAttribute("stroke", renderedLetter.sc); | |
| 11214 | + if (renderedLetter.fc && renderedLetter._mdf.fc) { | |
| 11215 | + textPath.setAttribute("fill", renderedLetter.fc); | |
| 11216 | + textPath.style.color = renderedLetter.fc; | |
| 11217 | + } | |
| 11218 | + } | |
| 11219 | + if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) { | |
| 11220 | + var boundingBox = this.innerElem.getBBox(); | |
| 11221 | + if (this.currentBBox.w !== boundingBox.width) { | |
| 11222 | + this.currentBBox.w = boundingBox.width; | |
| 11223 | + this.svgElement.setAttribute("width", boundingBox.width); | |
| 11224 | + } | |
| 11225 | + if (this.currentBBox.h !== boundingBox.height) { | |
| 11226 | + this.currentBBox.h = boundingBox.height; | |
| 11227 | + this.svgElement.setAttribute("height", boundingBox.height); | |
| 11228 | + } | |
| 11229 | + var margin = 1; | |
| 11230 | + 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) { | |
| 11231 | + this.currentBBox.w = boundingBox.width + margin * 2; | |
| 11232 | + this.currentBBox.h = boundingBox.height + margin * 2; | |
| 11233 | + this.currentBBox.x = boundingBox.x - margin; | |
| 11234 | + this.currentBBox.y = boundingBox.y - margin; | |
| 11235 | + this.svgElement.setAttribute("viewBox", this.currentBBox.x + " " + this.currentBBox.y + " " + this.currentBBox.w + " " + this.currentBBox.h); | |
| 11236 | + svgStyle = this.svgElement.style; | |
| 11237 | + var svgTransform = "translate(" + this.currentBBox.x + "px," + this.currentBBox.y + "px)"; | |
| 11238 | + svgStyle.transform = svgTransform; | |
| 11239 | + svgStyle.webkitTransform = svgTransform; | |
| 11240 | + } | |
| 11241 | + } | |
| 11242 | + }; | |
| 11243 | + function HCameraElement(data, globalData, comp) { | |
| 11244 | + this.initFrame(); | |
| 11245 | + this.initBaseData(data, globalData, comp); | |
| 11246 | + this.initHierarchy(); | |
| 11247 | + var getProp = PropertyFactory.getProp; | |
| 11248 | + this.pe = getProp(this, data.pe, 0, 0, this); | |
| 11249 | + if (data.ks.p.s) { | |
| 11250 | + this.px = getProp(this, data.ks.p.x, 1, 0, this); | |
| 11251 | + this.py = getProp(this, data.ks.p.y, 1, 0, this); | |
| 11252 | + this.pz = getProp(this, data.ks.p.z, 1, 0, this); | |
| 11253 | + } else this.p = getProp(this, data.ks.p, 1, 0, this); | |
| 11254 | + if (data.ks.a) this.a = getProp(this, data.ks.a, 1, 0, this); | |
| 11255 | + if (data.ks.or.k.length && data.ks.or.k[0].to) { | |
| 11256 | + var i; | |
| 11257 | + var len = data.ks.or.k.length; | |
| 11258 | + for (i = 0; i < len; i += 1) { | |
| 11259 | + data.ks.or.k[i].to = null; | |
| 11260 | + data.ks.or.k[i].ti = null; | |
| 11261 | + } | |
| 11262 | + } | |
| 11263 | + this.or = getProp(this, data.ks.or, 1, degToRads, this); | |
| 11264 | + this.or.sh = true; | |
| 11265 | + this.rx = getProp(this, data.ks.rx, 0, degToRads, this); | |
| 11266 | + this.ry = getProp(this, data.ks.ry, 0, degToRads, this); | |
| 11267 | + this.rz = getProp(this, data.ks.rz, 0, degToRads, this); | |
| 11268 | + this.mat = new Matrix(); | |
| 11269 | + this._prevMat = new Matrix(); | |
| 11270 | + this._isFirstFrame = true; | |
| 11271 | + this.finalTransform = { mProp: this }; | |
| 11272 | + } | |
| 11273 | + extendPrototype([ | |
| 11274 | + BaseElement, | |
| 11275 | + FrameElement, | |
| 11276 | + HierarchyElement | |
| 11277 | + ], HCameraElement); | |
| 11278 | + HCameraElement.prototype.setup = function() { | |
| 11279 | + var i; | |
| 11280 | + var len = this.comp.threeDElements.length; | |
| 11281 | + var comp; | |
| 11282 | + var perspectiveStyle; | |
| 11283 | + var containerStyle; | |
| 11284 | + for (i = 0; i < len; i += 1) { | |
| 11285 | + comp = this.comp.threeDElements[i]; | |
| 11286 | + if (comp.type === "3d") { | |
| 11287 | + perspectiveStyle = comp.perspectiveElem.style; | |
| 11288 | + containerStyle = comp.container.style; | |
| 11289 | + var perspective = this.pe.v + "px"; | |
| 11290 | + var origin = "0px 0px 0px"; | |
| 11291 | + var matrix = "matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)"; | |
| 11292 | + perspectiveStyle.perspective = perspective; | |
| 11293 | + perspectiveStyle.webkitPerspective = perspective; | |
| 11294 | + containerStyle.transformOrigin = origin; | |
| 11295 | + containerStyle.mozTransformOrigin = origin; | |
| 11296 | + containerStyle.webkitTransformOrigin = origin; | |
| 11297 | + perspectiveStyle.transform = matrix; | |
| 11298 | + perspectiveStyle.webkitTransform = matrix; | |
| 11299 | + } | |
| 11300 | + } | |
| 11301 | + }; | |
| 11302 | + HCameraElement.prototype.createElements = function() {}; | |
| 11303 | + HCameraElement.prototype.hide = function() {}; | |
| 11304 | + HCameraElement.prototype.renderFrame = function() { | |
| 11305 | + var _mdf = this._isFirstFrame; | |
| 11306 | + var i; | |
| 11307 | + var len; | |
| 11308 | + if (this.hierarchy) { | |
| 11309 | + len = this.hierarchy.length; | |
| 11310 | + for (i = 0; i < len; i += 1) _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf; | |
| 11311 | + } | |
| 11312 | + 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) { | |
| 11313 | + this.mat.reset(); | |
| 11314 | + if (this.hierarchy) { | |
| 11315 | + len = this.hierarchy.length - 1; | |
| 11316 | + for (i = len; i >= 0; i -= 1) { | |
| 11317 | + var mTransf = this.hierarchy[i].finalTransform.mProp; | |
| 11318 | + this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]); | |
| 11319 | + this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]); | |
| 11320 | + this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v); | |
| 11321 | + this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]); | |
| 11322 | + this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]); | |
| 11323 | + } | |
| 11324 | + } | |
| 11325 | + if (this.p) this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]); | |
| 11326 | + else this.mat.translate(-this.px.v, -this.py.v, this.pz.v); | |
| 11327 | + if (this.a) { | |
| 11328 | + var diffVector; | |
| 11329 | + if (this.p) diffVector = [ | |
| 11330 | + this.p.v[0] - this.a.v[0], | |
| 11331 | + this.p.v[1] - this.a.v[1], | |
| 11332 | + this.p.v[2] - this.a.v[2] | |
| 11333 | + ]; | |
| 11334 | + else diffVector = [ | |
| 11335 | + this.px.v - this.a.v[0], | |
| 11336 | + this.py.v - this.a.v[1], | |
| 11337 | + this.pz.v - this.a.v[2] | |
| 11338 | + ]; | |
| 11339 | + var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); | |
| 11340 | + var lookDir = [ | |
| 11341 | + diffVector[0] / mag, | |
| 11342 | + diffVector[1] / mag, | |
| 11343 | + diffVector[2] / mag | |
| 11344 | + ]; | |
| 11345 | + var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]); | |
| 11346 | + var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ); | |
| 11347 | + var mRotationY = Math.atan2(lookDir[0], -lookDir[2]); | |
| 11348 | + this.mat.rotateY(mRotationY).rotateX(-mRotationX); | |
| 11349 | + } | |
| 11350 | + this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v); | |
| 11351 | + this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]); | |
| 11352 | + this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0); | |
| 11353 | + this.mat.translate(0, 0, this.pe.v); | |
| 11354 | + var hasMatrixChanged = !this._prevMat.equals(this.mat); | |
| 11355 | + if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) { | |
| 11356 | + len = this.comp.threeDElements.length; | |
| 11357 | + var comp; | |
| 11358 | + var perspectiveStyle; | |
| 11359 | + var containerStyle; | |
| 11360 | + for (i = 0; i < len; i += 1) { | |
| 11361 | + comp = this.comp.threeDElements[i]; | |
| 11362 | + if (comp.type === "3d") { | |
| 11363 | + if (hasMatrixChanged) { | |
| 11364 | + var matValue = this.mat.toCSS(); | |
| 11365 | + containerStyle = comp.container.style; | |
| 11366 | + containerStyle.transform = matValue; | |
| 11367 | + containerStyle.webkitTransform = matValue; | |
| 11368 | + } | |
| 11369 | + if (this.pe._mdf) { | |
| 11370 | + perspectiveStyle = comp.perspectiveElem.style; | |
| 11371 | + perspectiveStyle.perspective = this.pe.v + "px"; | |
| 11372 | + perspectiveStyle.webkitPerspective = this.pe.v + "px"; | |
| 11373 | + } | |
| 11374 | + } | |
| 11375 | + } | |
| 11376 | + this.mat.clone(this._prevMat); | |
| 11377 | + } | |
| 11378 | + } | |
| 11379 | + this._isFirstFrame = false; | |
| 11380 | + }; | |
| 11381 | + HCameraElement.prototype.prepareFrame = function(num) { | |
| 11382 | + this.prepareProperties(num, true); | |
| 11383 | + }; | |
| 11384 | + HCameraElement.prototype.destroy = function() {}; | |
| 11385 | + HCameraElement.prototype.getBaseElement = function() { | |
| 11386 | + return null; | |
| 11387 | + }; | |
| 11388 | + function HImageElement(data, globalData, comp) { | |
| 11389 | + this.assetData = globalData.getAssetData(data.refId); | |
| 11390 | + this.initElement(data, globalData, comp); | |
| 11391 | + } | |
| 11392 | + extendPrototype([ | |
| 11393 | + BaseElement, | |
| 11394 | + TransformElement, | |
| 11395 | + HBaseElement, | |
| 11396 | + HSolidElement, | |
| 11397 | + HierarchyElement, | |
| 11398 | + FrameElement, | |
| 11399 | + RenderableElement | |
| 11400 | + ], HImageElement); | |
| 11401 | + HImageElement.prototype.createContent = function() { | |
| 11402 | + var assetPath = this.globalData.getAssetsPath(this.assetData); | |
| 11403 | + var img = new Image(); | |
| 11404 | + if (this.data.hasMask) { | |
| 11405 | + this.imageElem = createNS("image"); | |
| 11406 | + this.imageElem.setAttribute("width", this.assetData.w + "px"); | |
| 11407 | + this.imageElem.setAttribute("height", this.assetData.h + "px"); | |
| 11408 | + this.imageElem.setAttributeNS("http://www.w3.org/1999/xlink", "href", assetPath); | |
| 11409 | + this.layerElement.appendChild(this.imageElem); | |
| 11410 | + this.baseElement.setAttribute("width", this.assetData.w); | |
| 11411 | + this.baseElement.setAttribute("height", this.assetData.h); | |
| 11412 | + } else this.layerElement.appendChild(img); | |
| 11413 | + img.crossOrigin = "anonymous"; | |
| 11414 | + img.src = assetPath; | |
| 11415 | + if (this.data.ln) this.baseElement.setAttribute("id", this.data.ln); | |
| 11416 | + }; | |
| 11417 | + function HybridRendererBase(animationItem, config) { | |
| 11418 | + this.animationItem = animationItem; | |
| 11419 | + this.layers = null; | |
| 11420 | + this.renderedFrame = -1; | |
| 11421 | + this.renderConfig = { | |
| 11422 | + className: config && config.className || "", | |
| 11423 | + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", | |
| 11424 | + hideOnTransparent: !(config && config.hideOnTransparent === false), | |
| 11425 | + filterSize: { | |
| 11426 | + width: config && config.filterSize && config.filterSize.width || "400%", | |
| 11427 | + height: config && config.filterSize && config.filterSize.height || "400%", | |
| 11428 | + x: config && config.filterSize && config.filterSize.x || "-100%", | |
| 11429 | + y: config && config.filterSize && config.filterSize.y || "-100%" | |
| 11430 | + } | |
| 11431 | + }; | |
| 11432 | + this.globalData = { | |
| 11433 | + _mdf: false, | |
| 11434 | + frameNum: -1, | |
| 11435 | + renderConfig: this.renderConfig | |
| 11436 | + }; | |
| 11437 | + this.pendingElements = []; | |
| 11438 | + this.elements = []; | |
| 11439 | + this.threeDElements = []; | |
| 11440 | + this.destroyed = false; | |
| 11441 | + this.camera = null; | |
| 11442 | + this.supports3d = true; | |
| 11443 | + this.rendererType = "html"; | |
| 11444 | + } | |
| 11445 | + extendPrototype([BaseRenderer], HybridRendererBase); | |
| 11446 | + HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem; | |
| 11447 | + HybridRendererBase.prototype.checkPendingElements = function() { | |
| 11448 | + while (this.pendingElements.length) this.pendingElements.pop().checkParenting(); | |
| 11449 | + }; | |
| 11450 | + HybridRendererBase.prototype.appendElementInPos = function(element, pos) { | |
| 11451 | + var newDOMElement = element.getBaseElement(); | |
| 11452 | + if (!newDOMElement) return; | |
| 11453 | + var layer = this.layers[pos]; | |
| 11454 | + if (!layer.ddd || !this.supports3d) if (this.threeDElements) this.addTo3dContainer(newDOMElement, pos); | |
| 11455 | + else { | |
| 11456 | + var i = 0; | |
| 11457 | + var nextDOMElement; | |
| 11458 | + var nextLayer; | |
| 11459 | + var tmpDOMElement; | |
| 11460 | + while (i < pos) { | |
| 11461 | + if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) { | |
| 11462 | + nextLayer = this.elements[i]; | |
| 11463 | + tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement(); | |
| 11464 | + nextDOMElement = tmpDOMElement || nextDOMElement; | |
| 11465 | + } | |
| 11466 | + i += 1; | |
| 11467 | + } | |
| 11468 | + if (nextDOMElement) { | |
| 11469 | + if (!layer.ddd || !this.supports3d) this.layerElement.insertBefore(newDOMElement, nextDOMElement); | |
| 11470 | + } else if (!layer.ddd || !this.supports3d) this.layerElement.appendChild(newDOMElement); | |
| 11471 | + } | |
| 11472 | + else this.addTo3dContainer(newDOMElement, pos); | |
| 11473 | + }; | |
| 11474 | + HybridRendererBase.prototype.createShape = function(data) { | |
| 11475 | + if (!this.supports3d) return new SVGShapeElement(data, this.globalData, this); | |
| 11476 | + return new HShapeElement(data, this.globalData, this); | |
| 11477 | + }; | |
| 11478 | + HybridRendererBase.prototype.createText = function(data) { | |
| 11479 | + if (!this.supports3d) return new SVGTextLottieElement(data, this.globalData, this); | |
| 11480 | + return new HTextElement(data, this.globalData, this); | |
| 11481 | + }; | |
| 11482 | + HybridRendererBase.prototype.createCamera = function(data) { | |
| 11483 | + this.camera = new HCameraElement(data, this.globalData, this); | |
| 11484 | + return this.camera; | |
| 11485 | + }; | |
| 11486 | + HybridRendererBase.prototype.createImage = function(data) { | |
| 11487 | + if (!this.supports3d) return new IImageElement(data, this.globalData, this); | |
| 11488 | + return new HImageElement(data, this.globalData, this); | |
| 11489 | + }; | |
| 11490 | + HybridRendererBase.prototype.createSolid = function(data) { | |
| 11491 | + if (!this.supports3d) return new ISolidElement(data, this.globalData, this); | |
| 11492 | + return new HSolidElement(data, this.globalData, this); | |
| 11493 | + }; | |
| 11494 | + HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; | |
| 11495 | + HybridRendererBase.prototype.getThreeDContainerByPos = function(pos) { | |
| 11496 | + var i = 0; | |
| 11497 | + var len = this.threeDElements.length; | |
| 11498 | + while (i < len) { | |
| 11499 | + if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) return this.threeDElements[i].perspectiveElem; | |
| 11500 | + i += 1; | |
| 11501 | + } | |
| 11502 | + return null; | |
| 11503 | + }; | |
| 11504 | + HybridRendererBase.prototype.createThreeDContainer = function(pos, type) { | |
| 11505 | + var perspectiveElem = createTag("div"); | |
| 11506 | + var style; | |
| 11507 | + var containerStyle; | |
| 11508 | + styleDiv(perspectiveElem); | |
| 11509 | + var container = createTag("div"); | |
| 11510 | + styleDiv(container); | |
| 11511 | + if (type === "3d") { | |
| 11512 | + style = perspectiveElem.style; | |
| 11513 | + style.width = this.globalData.compSize.w + "px"; | |
| 11514 | + style.height = this.globalData.compSize.h + "px"; | |
| 11515 | + var center = "50% 50%"; | |
| 11516 | + style.webkitTransformOrigin = center; | |
| 11517 | + style.mozTransformOrigin = center; | |
| 11518 | + style.transformOrigin = center; | |
| 11519 | + containerStyle = container.style; | |
| 11520 | + var matrix = "matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)"; | |
| 11521 | + containerStyle.transform = matrix; | |
| 11522 | + containerStyle.webkitTransform = matrix; | |
| 11523 | + } | |
| 11524 | + perspectiveElem.appendChild(container); | |
| 11525 | + var threeDContainerData = { | |
| 11526 | + container, | |
| 11527 | + perspectiveElem, | |
| 11528 | + startPos: pos, | |
| 11529 | + endPos: pos, | |
| 11530 | + type | |
| 11531 | + }; | |
| 11532 | + this.threeDElements.push(threeDContainerData); | |
| 11533 | + return threeDContainerData; | |
| 11534 | + }; | |
| 11535 | + HybridRendererBase.prototype.build3dContainers = function() { | |
| 11536 | + var i; | |
| 11537 | + var len = this.layers.length; | |
| 11538 | + var lastThreeDContainerData; | |
| 11539 | + var currentContainer = ""; | |
| 11540 | + for (i = 0; i < len; i += 1) if (this.layers[i].ddd && this.layers[i].ty !== 3) { | |
| 11541 | + if (currentContainer !== "3d") { | |
| 11542 | + currentContainer = "3d"; | |
| 11543 | + lastThreeDContainerData = this.createThreeDContainer(i, "3d"); | |
| 11544 | + } | |
| 11545 | + lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i); | |
| 11546 | + } else { | |
| 11547 | + if (currentContainer !== "2d") { | |
| 11548 | + currentContainer = "2d"; | |
| 11549 | + lastThreeDContainerData = this.createThreeDContainer(i, "2d"); | |
| 11550 | + } | |
| 11551 | + lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i); | |
| 11552 | + } | |
| 11553 | + len = this.threeDElements.length; | |
| 11554 | + for (i = len - 1; i >= 0; i -= 1) this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem); | |
| 11555 | + }; | |
| 11556 | + HybridRendererBase.prototype.addTo3dContainer = function(elem, pos) { | |
| 11557 | + var i = 0; | |
| 11558 | + var len = this.threeDElements.length; | |
| 11559 | + while (i < len) { | |
| 11560 | + if (pos <= this.threeDElements[i].endPos) { | |
| 11561 | + var j = this.threeDElements[i].startPos; | |
| 11562 | + var nextElement; | |
| 11563 | + while (j < pos) { | |
| 11564 | + if (this.elements[j] && this.elements[j].getBaseElement) nextElement = this.elements[j].getBaseElement(); | |
| 11565 | + j += 1; | |
| 11566 | + } | |
| 11567 | + if (nextElement) this.threeDElements[i].container.insertBefore(elem, nextElement); | |
| 11568 | + else this.threeDElements[i].container.appendChild(elem); | |
| 11569 | + break; | |
| 11570 | + } | |
| 11571 | + i += 1; | |
| 11572 | + } | |
| 11573 | + }; | |
| 11574 | + HybridRendererBase.prototype.configAnimation = function(animData) { | |
| 11575 | + var resizerElem = createTag("div"); | |
| 11576 | + var wrapper = this.animationItem.wrapper; | |
| 11577 | + var style = resizerElem.style; | |
| 11578 | + style.width = animData.w + "px"; | |
| 11579 | + style.height = animData.h + "px"; | |
| 11580 | + this.resizerElem = resizerElem; | |
| 11581 | + styleDiv(resizerElem); | |
| 11582 | + style.transformStyle = "flat"; | |
| 11583 | + style.mozTransformStyle = "flat"; | |
| 11584 | + style.webkitTransformStyle = "flat"; | |
| 11585 | + if (this.renderConfig.className) resizerElem.setAttribute("class", this.renderConfig.className); | |
| 11586 | + wrapper.appendChild(resizerElem); | |
| 11587 | + style.overflow = "hidden"; | |
| 11588 | + var svg = createNS("svg"); | |
| 11589 | + svg.setAttribute("width", "1"); | |
| 11590 | + svg.setAttribute("height", "1"); | |
| 11591 | + styleDiv(svg); | |
| 11592 | + this.resizerElem.appendChild(svg); | |
| 11593 | + var defs = createNS("defs"); | |
| 11594 | + svg.appendChild(defs); | |
| 11595 | + this.data = animData; | |
| 11596 | + this.setupGlobalData(animData, svg); | |
| 11597 | + this.globalData.defs = defs; | |
| 11598 | + this.layers = animData.layers; | |
| 11599 | + this.layerElement = this.resizerElem; | |
| 11600 | + this.build3dContainers(); | |
| 11601 | + this.updateContainerSize(); | |
| 11602 | + }; | |
| 11603 | + HybridRendererBase.prototype.destroy = function() { | |
| 11604 | + if (this.animationItem.wrapper) this.animationItem.wrapper.innerText = ""; | |
| 11605 | + this.animationItem.container = null; | |
| 11606 | + this.globalData.defs = null; | |
| 11607 | + var i; | |
| 11608 | + var len = this.layers ? this.layers.length : 0; | |
| 11609 | + for (i = 0; i < len; i += 1) if (this.elements[i] && this.elements[i].destroy) this.elements[i].destroy(); | |
| 11610 | + this.elements.length = 0; | |
| 11611 | + this.destroyed = true; | |
| 11612 | + this.animationItem = null; | |
| 11613 | + }; | |
| 11614 | + HybridRendererBase.prototype.updateContainerSize = function() { | |
| 11615 | + var elementWidth = this.animationItem.wrapper.offsetWidth; | |
| 11616 | + var elementHeight = this.animationItem.wrapper.offsetHeight; | |
| 11617 | + var elementRel = elementWidth / elementHeight; | |
| 11618 | + var animationRel = this.globalData.compSize.w / this.globalData.compSize.h; | |
| 11619 | + var sx; | |
| 11620 | + var sy; | |
| 11621 | + var tx; | |
| 11622 | + var ty; | |
| 11623 | + if (animationRel > elementRel) { | |
| 11624 | + sx = elementWidth / this.globalData.compSize.w; | |
| 11625 | + sy = elementWidth / this.globalData.compSize.w; | |
| 11626 | + tx = 0; | |
| 11627 | + ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2; | |
| 11628 | + } else { | |
| 11629 | + sx = elementHeight / this.globalData.compSize.h; | |
| 11630 | + sy = elementHeight / this.globalData.compSize.h; | |
| 11631 | + tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2; | |
| 11632 | + ty = 0; | |
| 11633 | + } | |
| 11634 | + var style = this.resizerElem.style; | |
| 11635 | + style.webkitTransform = "matrix3d(" + sx + ",0,0,0,0," + sy + ",0,0,0,0,1,0," + tx + "," + ty + ",0,1)"; | |
| 11636 | + style.transform = style.webkitTransform; | |
| 11637 | + }; | |
| 11638 | + HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame; | |
| 11639 | + HybridRendererBase.prototype.hide = function() { | |
| 11640 | + this.resizerElem.style.display = "none"; | |
| 11641 | + }; | |
| 11642 | + HybridRendererBase.prototype.show = function() { | |
| 11643 | + this.resizerElem.style.display = "block"; | |
| 11644 | + }; | |
| 11645 | + HybridRendererBase.prototype.initItems = function() { | |
| 11646 | + this.buildAllItems(); | |
| 11647 | + if (this.camera) this.camera.setup(); | |
| 11648 | + else { | |
| 11649 | + var cWidth = this.globalData.compSize.w; | |
| 11650 | + var cHeight = this.globalData.compSize.h; | |
| 11651 | + var i; | |
| 11652 | + var len = this.threeDElements.length; | |
| 11653 | + for (i = 0; i < len; i += 1) { | |
| 11654 | + var style = this.threeDElements[i].perspectiveElem.style; | |
| 11655 | + style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + "px"; | |
| 11656 | + style.perspective = style.webkitPerspective; | |
| 11657 | + } | |
| 11658 | + } | |
| 11659 | + }; | |
| 11660 | + HybridRendererBase.prototype.searchExtraCompositions = function(assets) { | |
| 11661 | + var i; | |
| 11662 | + var len = assets.length; | |
| 11663 | + var floatingContainer = createTag("div"); | |
| 11664 | + for (i = 0; i < len; i += 1) if (assets[i].xt) { | |
| 11665 | + var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null); | |
| 11666 | + comp.initExpressions(); | |
| 11667 | + this.globalData.projectInterface.registerComposition(comp); | |
| 11668 | + } | |
| 11669 | + }; | |
| 11670 | + function HCompElement(data, globalData, comp) { | |
| 11671 | + this.layers = data.layers; | |
| 11672 | + this.supports3d = !data.hasMask; | |
| 11673 | + this.completeLayers = false; | |
| 11674 | + this.pendingElements = []; | |
| 11675 | + this.elements = this.layers ? createSizedArray(this.layers.length) : []; | |
| 11676 | + this.initElement(data, globalData, comp); | |
| 11677 | + this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; | |
| 11678 | + } | |
| 11679 | + extendPrototype([ | |
| 11680 | + HybridRendererBase, | |
| 11681 | + ICompElement, | |
| 11682 | + HBaseElement | |
| 11683 | + ], HCompElement); | |
| 11684 | + HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements; | |
| 11685 | + HCompElement.prototype.createContainerElements = function() { | |
| 11686 | + this._createBaseContainerElements(); | |
| 11687 | + if (this.data.hasMask) { | |
| 11688 | + this.svgElement.setAttribute("width", this.data.w); | |
| 11689 | + this.svgElement.setAttribute("height", this.data.h); | |
| 11690 | + this.transformedElement = this.baseElement; | |
| 11691 | + } else this.transformedElement = this.layerElement; | |
| 11692 | + }; | |
| 11693 | + HCompElement.prototype.addTo3dContainer = function(elem, pos) { | |
| 11694 | + var j = 0; | |
| 11695 | + var nextElement; | |
| 11696 | + while (j < pos) { | |
| 11697 | + if (this.elements[j] && this.elements[j].getBaseElement) nextElement = this.elements[j].getBaseElement(); | |
| 11698 | + j += 1; | |
| 11699 | + } | |
| 11700 | + if (nextElement) this.layerElement.insertBefore(elem, nextElement); | |
| 11701 | + else this.layerElement.appendChild(elem); | |
| 11702 | + }; | |
| 11703 | + HCompElement.prototype.createComp = function(data) { | |
| 11704 | + if (!this.supports3d) return new SVGCompElement(data, this.globalData, this); | |
| 11705 | + return new HCompElement(data, this.globalData, this); | |
| 11706 | + }; | |
| 11707 | + function HybridRenderer(animationItem, config) { | |
| 11708 | + this.animationItem = animationItem; | |
| 11709 | + this.layers = null; | |
| 11710 | + this.renderedFrame = -1; | |
| 11711 | + this.renderConfig = { | |
| 11712 | + className: config && config.className || "", | |
| 11713 | + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", | |
| 11714 | + hideOnTransparent: !(config && config.hideOnTransparent === false), | |
| 11715 | + filterSize: { | |
| 11716 | + width: config && config.filterSize && config.filterSize.width || "400%", | |
| 11717 | + height: config && config.filterSize && config.filterSize.height || "400%", | |
| 11718 | + x: config && config.filterSize && config.filterSize.x || "-100%", | |
| 11719 | + y: config && config.filterSize && config.filterSize.y || "-100%" | |
| 11720 | + }, | |
| 11721 | + runExpressions: !config || config.runExpressions === void 0 || config.runExpressions | |
| 11722 | + }; | |
| 11723 | + this.globalData = { | |
| 11724 | + _mdf: false, | |
| 11725 | + frameNum: -1, | |
| 11726 | + renderConfig: this.renderConfig | |
| 11727 | + }; | |
| 11728 | + this.pendingElements = []; | |
| 11729 | + this.elements = []; | |
| 11730 | + this.threeDElements = []; | |
| 11731 | + this.destroyed = false; | |
| 11732 | + this.camera = null; | |
| 11733 | + this.supports3d = true; | |
| 11734 | + this.rendererType = "html"; | |
| 11735 | + } | |
| 11736 | + extendPrototype([HybridRendererBase], HybridRenderer); | |
| 11737 | + HybridRenderer.prototype.createComp = function(data) { | |
| 11738 | + if (!this.supports3d) return new SVGCompElement(data, this.globalData, this); | |
| 11739 | + return new HCompElement(data, this.globalData, this); | |
| 11740 | + }; | |
| 11741 | + var CompExpressionInterface = function() { | |
| 11742 | + return function(comp) { | |
| 11743 | + function _thisLayerFunction(name) { | |
| 11744 | + var i = 0; | |
| 11745 | + var len = comp.layers.length; | |
| 11746 | + while (i < len) { | |
| 11747 | + if (comp.layers[i].nm === name || comp.layers[i].ind === name) return comp.elements[i].layerInterface; | |
| 11748 | + i += 1; | |
| 11749 | + } | |
| 11750 | + return null; | |
| 11751 | + } | |
| 11752 | + Object.defineProperty(_thisLayerFunction, "_name", { value: comp.data.nm }); | |
| 11753 | + _thisLayerFunction.layer = _thisLayerFunction; | |
| 11754 | + _thisLayerFunction.pixelAspect = 1; | |
| 11755 | + _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h; | |
| 11756 | + _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w; | |
| 11757 | + _thisLayerFunction.pixelAspect = 1; | |
| 11758 | + _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate; | |
| 11759 | + _thisLayerFunction.displayStartTime = 0; | |
| 11760 | + _thisLayerFunction.numLayers = comp.layers.length; | |
| 11761 | + return _thisLayerFunction; | |
| 11762 | + }; | |
| 11763 | + }(); | |
| 11764 | + function _typeof$2(o) { | |
| 11765 | + "@babel/helpers - typeof"; | |
| 11766 | + return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) { | |
| 11767 | + return typeof o; | |
| 11768 | + } : function(o) { | |
| 11769 | + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; | |
| 11770 | + }, _typeof$2(o); | |
| 11771 | + } | |
| 11772 | + function seedRandom(pool, math) { | |
| 11773 | + var global = this; | |
| 11774 | + var width = 256; | |
| 11775 | + var chunks = 6; | |
| 11776 | + var digits = 52; | |
| 11777 | + var rngname = "random"; | |
| 11778 | + var startdenom = math.pow(width, chunks); | |
| 11779 | + var significance = math.pow(2, digits); | |
| 11780 | + var overflow = significance * 2; | |
| 11781 | + var mask = width - 1; | |
| 11782 | + var nodecrypto; | |
| 11783 | + function seedrandom(seed, options, callback) { | |
| 11784 | + var key = []; | |
| 11785 | + options = options === true ? { entropy: true } : options || {}; | |
| 11786 | + var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); | |
| 11787 | + var arc4 = new ARC4(key); | |
| 11788 | + var prng = function prng() { | |
| 11789 | + var n = arc4.g(chunks); | |
| 11790 | + var d = startdenom; | |
| 11791 | + var x = 0; | |
| 11792 | + while (n < significance) { | |
| 11793 | + n = (n + x) * width; | |
| 11794 | + d *= width; | |
| 11795 | + x = arc4.g(1); | |
| 11796 | + } | |
| 11797 | + while (n >= overflow) { | |
| 11798 | + n /= 2; | |
| 11799 | + d /= 2; | |
| 11800 | + x >>>= 1; | |
| 11801 | + } | |
| 11802 | + return (n + x) / d; | |
| 11803 | + }; | |
| 11804 | + prng.int32 = function() { | |
| 11805 | + return arc4.g(4) | 0; | |
| 11806 | + }; | |
| 11807 | + prng.quick = function() { | |
| 11808 | + return arc4.g(4) / 4294967296; | |
| 11809 | + }; | |
| 11810 | + prng["double"] = prng; | |
| 11811 | + mixkey(tostring(arc4.S), pool); | |
| 11812 | + return (options.pass || callback || function(prng, seed, is_math_call, state) { | |
| 11813 | + if (state) { | |
| 11814 | + if (state.S) copy(state, arc4); | |
| 11815 | + prng.state = function() { | |
| 11816 | + return copy(arc4, {}); | |
| 11817 | + }; | |
| 11818 | + } | |
| 11819 | + if (is_math_call) { | |
| 11820 | + math[rngname] = prng; | |
| 11821 | + return seed; | |
| 11822 | + } else return prng; | |
| 11823 | + })(prng, shortseed, "global" in options ? options.global : this == math, options.state); | |
| 11824 | + } | |
| 11825 | + math["seed" + rngname] = seedrandom; | |
| 11826 | + function ARC4(key) { | |
| 11827 | + var t; | |
| 11828 | + var keylen = key.length; | |
| 11829 | + var me = this; | |
| 11830 | + var i = 0; | |
| 11831 | + var j = me.i = me.j = 0; | |
| 11832 | + var s = me.S = []; | |
| 11833 | + if (!keylen) key = [keylen++]; | |
| 11834 | + while (i < width) s[i] = i++; | |
| 11835 | + for (i = 0; i < width; i++) { | |
| 11836 | + s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])]; | |
| 11837 | + s[j] = t; | |
| 11838 | + } | |
| 11839 | + me.g = function(count) { | |
| 11840 | + var t; | |
| 11841 | + var r = 0; | |
| 11842 | + var i = me.i; | |
| 11843 | + var j = me.j; | |
| 11844 | + var s = me.S; | |
| 11845 | + while (count--) { | |
| 11846 | + t = s[i = mask & i + 1]; | |
| 11847 | + r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)]; | |
| 11848 | + } | |
| 11849 | + me.i = i; | |
| 11850 | + me.j = j; | |
| 11851 | + return r; | |
| 11852 | + }; | |
| 11853 | + } | |
| 11854 | + function copy(f, t) { | |
| 11855 | + t.i = f.i; | |
| 11856 | + t.j = f.j; | |
| 11857 | + t.S = f.S.slice(); | |
| 11858 | + return t; | |
| 11859 | + } | |
| 11860 | + function flatten(obj, depth) { | |
| 11861 | + var result = []; | |
| 11862 | + var typ = _typeof$2(obj); | |
| 11863 | + var prop; | |
| 11864 | + if (depth && typ == "object") for (prop in obj) try { | |
| 11865 | + result.push(flatten(obj[prop], depth - 1)); | |
| 11866 | + } catch (e) {} | |
| 11867 | + return result.length ? result : typ == "string" ? obj : obj + "\0"; | |
| 11868 | + } | |
| 11869 | + function mixkey(seed, key) { | |
| 11870 | + var stringseed = seed + ""; | |
| 11871 | + var smear; | |
| 11872 | + var j = 0; | |
| 11873 | + while (j < stringseed.length) key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++); | |
| 11874 | + return tostring(key); | |
| 11875 | + } | |
| 11876 | + function autoseed() { | |
| 11877 | + try { | |
| 11878 | + if (nodecrypto) return tostring(nodecrypto.randomBytes(width)); | |
| 11879 | + var out = new Uint8Array(width); | |
| 11880 | + (global.crypto || global.msCrypto).getRandomValues(out); | |
| 11881 | + return tostring(out); | |
| 11882 | + } catch (e) { | |
| 11883 | + var browser = global.navigator; | |
| 11884 | + var plugins = browser && browser.plugins; | |
| 11885 | + return [ | |
| 11886 | + +/* @__PURE__ */ new Date(), | |
| 11887 | + global, | |
| 11888 | + plugins, | |
| 11889 | + global.screen, | |
| 11890 | + tostring(pool) | |
| 11891 | + ]; | |
| 11892 | + } | |
| 11893 | + } | |
| 11894 | + function tostring(a) { | |
| 11895 | + return String.fromCharCode.apply(0, a); | |
| 11896 | + } | |
| 11897 | + mixkey(math.random(), pool); | |
| 11898 | + } | |
| 11899 | + function initialize$2(BMMath) { | |
| 11900 | + seedRandom([], BMMath); | |
| 11901 | + } | |
| 11902 | + var propTypes = { SHAPE: "shape" }; | |
| 11903 | + function _typeof$1(o) { | |
| 11904 | + "@babel/helpers - typeof"; | |
| 11905 | + return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) { | |
| 11906 | + return typeof o; | |
| 11907 | + } : function(o) { | |
| 11908 | + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; | |
| 11909 | + }, _typeof$1(o); | |
| 11910 | + } | |
| 11911 | + var ExpressionManager = function() { | |
| 11912 | + "use strict"; | |
| 11913 | + var ob = {}; | |
| 11914 | + var Math = BMMath; | |
| 11915 | + var window = null; | |
| 11916 | + var document = null; | |
| 11917 | + var XMLHttpRequest = null; | |
| 11918 | + var fetch = null; | |
| 11919 | + var frames = null; | |
| 11920 | + var _lottieGlobal = {}; | |
| 11921 | + initialize$2(BMMath); | |
| 11922 | + function resetFrame() { | |
| 11923 | + _lottieGlobal = {}; | |
| 11924 | + } | |
| 11925 | + function $bm_isInstanceOfArray(arr) { | |
| 11926 | + return arr.constructor === Array || arr.constructor === Float32Array; | |
| 11927 | + } | |
| 11928 | + function isNumerable(tOfV, v) { | |
| 11929 | + return tOfV === "number" || v instanceof Number || tOfV === "boolean" || tOfV === "string"; | |
| 11930 | + } | |
| 11931 | + function $bm_neg(a) { | |
| 11932 | + var tOfA = _typeof$1(a); | |
| 11933 | + if (tOfA === "number" || a instanceof Number || tOfA === "boolean") return -a; | |
| 11934 | + if ($bm_isInstanceOfArray(a)) { | |
| 11935 | + var i; | |
| 11936 | + var lenA = a.length; | |
| 11937 | + var retArr = []; | |
| 11938 | + for (i = 0; i < lenA; i += 1) retArr[i] = -a[i]; | |
| 11939 | + return retArr; | |
| 11940 | + } | |
| 11941 | + if (a.propType) return a.v; | |
| 11942 | + return -a; | |
| 11943 | + } | |
| 11944 | + var easeInBez = BezierFactory.getBezierEasing(.333, 0, .833, .833, "easeIn").get; | |
| 11945 | + var easeOutBez = BezierFactory.getBezierEasing(.167, .167, .667, 1, "easeOut").get; | |
| 11946 | + var easeInOutBez = BezierFactory.getBezierEasing(.33, 0, .667, 1, "easeInOut").get; | |
| 11947 | + function sum(a, b) { | |
| 11948 | + var tOfA = _typeof$1(a); | |
| 11949 | + var tOfB = _typeof$1(b); | |
| 11950 | + if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === "string" || tOfB === "string") return a + b; | |
| 11951 | + if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { | |
| 11952 | + a = a.slice(0); | |
| 11953 | + a[0] += b; | |
| 11954 | + return a; | |
| 11955 | + } | |
| 11956 | + if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { | |
| 11957 | + b = b.slice(0); | |
| 11958 | + b[0] = a + b[0]; | |
| 11959 | + return b; | |
| 11960 | + } | |
| 11961 | + if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) { | |
| 11962 | + var i = 0; | |
| 11963 | + var lenA = a.length; | |
| 11964 | + var lenB = b.length; | |
| 11965 | + var retArr = []; | |
| 11966 | + while (i < lenA || i < lenB) { | |
| 11967 | + if ((typeof a[i] === "number" || a[i] instanceof Number) && (typeof b[i] === "number" || b[i] instanceof Number)) retArr[i] = a[i] + b[i]; | |
| 11968 | + else retArr[i] = b[i] === void 0 ? a[i] : a[i] || b[i]; | |
| 11969 | + i += 1; | |
| 11970 | + } | |
| 11971 | + return retArr; | |
| 11972 | + } | |
| 11973 | + return 0; | |
| 11974 | + } | |
| 11975 | + var add = sum; | |
| 11976 | + function sub(a, b) { | |
| 11977 | + var tOfA = _typeof$1(a); | |
| 11978 | + var tOfB = _typeof$1(b); | |
| 11979 | + if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) { | |
| 11980 | + if (tOfA === "string") a = parseInt(a, 10); | |
| 11981 | + if (tOfB === "string") b = parseInt(b, 10); | |
| 11982 | + return a - b; | |
| 11983 | + } | |
| 11984 | + if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { | |
| 11985 | + a = a.slice(0); | |
| 11986 | + a[0] -= b; | |
| 11987 | + return a; | |
| 11988 | + } | |
| 11989 | + if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { | |
| 11990 | + b = b.slice(0); | |
| 11991 | + b[0] = a - b[0]; | |
| 11992 | + return b; | |
| 11993 | + } | |
| 11994 | + if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) { | |
| 11995 | + var i = 0; | |
| 11996 | + var lenA = a.length; | |
| 11997 | + var lenB = b.length; | |
| 11998 | + var retArr = []; | |
| 11999 | + while (i < lenA || i < lenB) { | |
| 12000 | + if ((typeof a[i] === "number" || a[i] instanceof Number) && (typeof b[i] === "number" || b[i] instanceof Number)) retArr[i] = a[i] - b[i]; | |
| 12001 | + else retArr[i] = b[i] === void 0 ? a[i] : a[i] || b[i]; | |
| 12002 | + i += 1; | |
| 12003 | + } | |
| 12004 | + return retArr; | |
| 12005 | + } | |
| 12006 | + return 0; | |
| 12007 | + } | |
| 12008 | + function mul(a, b) { | |
| 12009 | + var tOfA = _typeof$1(a); | |
| 12010 | + var tOfB = _typeof$1(b); | |
| 12011 | + var arr; | |
| 12012 | + if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) return a * b; | |
| 12013 | + var i; | |
| 12014 | + var len; | |
| 12015 | + if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { | |
| 12016 | + len = a.length; | |
| 12017 | + arr = createTypedArray("float32", len); | |
| 12018 | + for (i = 0; i < len; i += 1) arr[i] = a[i] * b; | |
| 12019 | + return arr; | |
| 12020 | + } | |
| 12021 | + if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { | |
| 12022 | + len = b.length; | |
| 12023 | + arr = createTypedArray("float32", len); | |
| 12024 | + for (i = 0; i < len; i += 1) arr[i] = a * b[i]; | |
| 12025 | + return arr; | |
| 12026 | + } | |
| 12027 | + return 0; | |
| 12028 | + } | |
| 12029 | + function div(a, b) { | |
| 12030 | + var tOfA = _typeof$1(a); | |
| 12031 | + var tOfB = _typeof$1(b); | |
| 12032 | + var arr; | |
| 12033 | + if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) return a / b; | |
| 12034 | + var i; | |
| 12035 | + var len; | |
| 12036 | + if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { | |
| 12037 | + len = a.length; | |
| 12038 | + arr = createTypedArray("float32", len); | |
| 12039 | + for (i = 0; i < len; i += 1) arr[i] = a[i] / b; | |
| 12040 | + return arr; | |
| 12041 | + } | |
| 12042 | + if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { | |
| 12043 | + len = b.length; | |
| 12044 | + arr = createTypedArray("float32", len); | |
| 12045 | + for (i = 0; i < len; i += 1) arr[i] = a / b[i]; | |
| 12046 | + return arr; | |
| 12047 | + } | |
| 12048 | + return 0; | |
| 12049 | + } | |
| 12050 | + function mod(a, b) { | |
| 12051 | + if (typeof a === "string") a = parseInt(a, 10); | |
| 12052 | + if (typeof b === "string") b = parseInt(b, 10); | |
| 12053 | + return a % b; | |
| 12054 | + } | |
| 12055 | + var $bm_sum = sum; | |
| 12056 | + var $bm_sub = sub; | |
| 12057 | + var $bm_mul = mul; | |
| 12058 | + var $bm_div = div; | |
| 12059 | + var $bm_mod = mod; | |
| 12060 | + function clamp(num, min, max) { | |
| 12061 | + if (min > max) { | |
| 12062 | + var mm = max; | |
| 12063 | + max = min; | |
| 12064 | + min = mm; | |
| 12065 | + } | |
| 12066 | + return Math.min(Math.max(num, min), max); | |
| 12067 | + } | |
| 12068 | + function radiansToDegrees(val) { | |
| 12069 | + return val / degToRads; | |
| 12070 | + } | |
| 12071 | + var radians_to_degrees = radiansToDegrees; | |
| 12072 | + function degreesToRadians(val) { | |
| 12073 | + return val * degToRads; | |
| 12074 | + } | |
| 12075 | + var degrees_to_radians = radiansToDegrees; | |
| 12076 | + var helperLengthArray = [ | |
| 12077 | + 0, | |
| 12078 | + 0, | |
| 12079 | + 0, | |
| 12080 | + 0, | |
| 12081 | + 0, | |
| 12082 | + 0 | |
| 12083 | + ]; | |
| 12084 | + function length(arr1, arr2) { | |
| 12085 | + if (typeof arr1 === "number" || arr1 instanceof Number) { | |
| 12086 | + arr2 = arr2 || 0; | |
| 12087 | + return Math.abs(arr1 - arr2); | |
| 12088 | + } | |
| 12089 | + if (!arr2) arr2 = helperLengthArray; | |
| 12090 | + var i; | |
| 12091 | + var len = Math.min(arr1.length, arr2.length); | |
| 12092 | + var addedLength = 0; | |
| 12093 | + for (i = 0; i < len; i += 1) addedLength += Math.pow(arr2[i] - arr1[i], 2); | |
| 12094 | + return Math.sqrt(addedLength); | |
| 12095 | + } | |
| 12096 | + function normalize(vec) { | |
| 12097 | + return div(vec, length(vec)); | |
| 12098 | + } | |
| 12099 | + function rgbToHsl(val) { | |
| 12100 | + var r = val[0]; | |
| 12101 | + var g = val[1]; | |
| 12102 | + var b = val[2]; | |
| 12103 | + var max = Math.max(r, g, b); | |
| 12104 | + var min = Math.min(r, g, b); | |
| 12105 | + var h; | |
| 12106 | + var s; | |
| 12107 | + var l = (max + min) / 2; | |
| 12108 | + if (max === min) { | |
| 12109 | + h = 0; | |
| 12110 | + s = 0; | |
| 12111 | + } else { | |
| 12112 | + var d = max - min; | |
| 12113 | + s = l > .5 ? d / (2 - max - min) : d / (max + min); | |
| 12114 | + switch (max) { | |
| 12115 | + case r: | |
| 12116 | + h = (g - b) / d + (g < b ? 6 : 0); | |
| 12117 | + break; | |
| 12118 | + case g: | |
| 12119 | + h = (b - r) / d + 2; | |
| 12120 | + break; | |
| 12121 | + case b: | |
| 12122 | + h = (r - g) / d + 4; | |
| 12123 | + break; | |
| 12124 | + default: break; | |
| 12125 | + } | |
| 12126 | + h /= 6; | |
| 12127 | + } | |
| 12128 | + return [ | |
| 12129 | + h, | |
| 12130 | + s, | |
| 12131 | + l, | |
| 12132 | + val[3] | |
| 12133 | + ]; | |
| 12134 | + } | |
| 12135 | + function hue2rgb(p, q, t) { | |
| 12136 | + if (t < 0) t += 1; | |
| 12137 | + if (t > 1) t -= 1; | |
| 12138 | + if (t < 1 / 6) return p + (q - p) * 6 * t; | |
| 12139 | + if (t < 1 / 2) return q; | |
| 12140 | + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; | |
| 12141 | + return p; | |
| 12142 | + } | |
| 12143 | + function hslToRgb(val) { | |
| 12144 | + var h = val[0]; | |
| 12145 | + var s = val[1]; | |
| 12146 | + var l = val[2]; | |
| 12147 | + var r; | |
| 12148 | + var g; | |
| 12149 | + var b; | |
| 12150 | + if (s === 0) { | |
| 12151 | + r = l; | |
| 12152 | + b = l; | |
| 12153 | + g = l; | |
| 12154 | + } else { | |
| 12155 | + var q = l < .5 ? l * (1 + s) : l + s - l * s; | |
| 12156 | + var p = 2 * l - q; | |
| 12157 | + r = hue2rgb(p, q, h + 1 / 3); | |
| 12158 | + g = hue2rgb(p, q, h); | |
| 12159 | + b = hue2rgb(p, q, h - 1 / 3); | |
| 12160 | + } | |
| 12161 | + return [ | |
| 12162 | + r, | |
| 12163 | + g, | |
| 12164 | + b, | |
| 12165 | + val[3] | |
| 12166 | + ]; | |
| 12167 | + } | |
| 12168 | + function linear(t, tMin, tMax, value1, value2) { | |
| 12169 | + if (value1 === void 0 || value2 === void 0) { | |
| 12170 | + value1 = tMin; | |
| 12171 | + value2 = tMax; | |
| 12172 | + tMin = 0; | |
| 12173 | + tMax = 1; | |
| 12174 | + } | |
| 12175 | + if (tMax < tMin) { | |
| 12176 | + var _tMin = tMax; | |
| 12177 | + tMax = tMin; | |
| 12178 | + tMin = _tMin; | |
| 12179 | + } | |
| 12180 | + if (t <= tMin) return value1; | |
| 12181 | + if (t >= tMax) return value2; | |
| 12182 | + var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin); | |
| 12183 | + if (!value1.length) return value1 + (value2 - value1) * perc; | |
| 12184 | + var i; | |
| 12185 | + var len = value1.length; | |
| 12186 | + var arr = createTypedArray("float32", len); | |
| 12187 | + for (i = 0; i < len; i += 1) arr[i] = value1[i] + (value2[i] - value1[i]) * perc; | |
| 12188 | + return arr; | |
| 12189 | + } | |
| 12190 | + function random(min, max) { | |
| 12191 | + if (max === void 0) if (min === void 0) { | |
| 12192 | + min = 0; | |
| 12193 | + max = 1; | |
| 12194 | + } else { | |
| 12195 | + max = min; | |
| 12196 | + min = void 0; | |
| 12197 | + } | |
| 12198 | + if (max.length) { | |
| 12199 | + var i; | |
| 12200 | + var len = max.length; | |
| 12201 | + if (!min) min = createTypedArray("float32", len); | |
| 12202 | + var arr = createTypedArray("float32", len); | |
| 12203 | + var rnd = BMMath.random(); | |
| 12204 | + for (i = 0; i < len; i += 1) arr[i] = min[i] + rnd * (max[i] - min[i]); | |
| 12205 | + return arr; | |
| 12206 | + } | |
| 12207 | + if (min === void 0) min = 0; | |
| 12208 | + var rndm = BMMath.random(); | |
| 12209 | + return min + rndm * (max - min); | |
| 12210 | + } | |
| 12211 | + function createPath(points, inTangents, outTangents, closed) { | |
| 12212 | + var i; | |
| 12213 | + var len = points.length; | |
| 12214 | + var path = shapePool.newElement(); | |
| 12215 | + path.setPathData(!!closed, len); | |
| 12216 | + var arrPlaceholder = [0, 0]; | |
| 12217 | + var inVertexPoint; | |
| 12218 | + var outVertexPoint; | |
| 12219 | + for (i = 0; i < len; i += 1) { | |
| 12220 | + inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder; | |
| 12221 | + outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder; | |
| 12222 | + 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); | |
| 12223 | + } | |
| 12224 | + return path; | |
| 12225 | + } | |
| 12226 | + function initiateExpression(elem, data, property) { | |
| 12227 | + function noOp(_value) { | |
| 12228 | + return _value; | |
| 12229 | + } | |
| 12230 | + if (!elem.globalData.renderConfig.runExpressions) return noOp; | |
| 12231 | + var val = data.x; | |
| 12232 | + var needsVelocity = /velocity(?![\w\d])/.test(val); | |
| 12233 | + var _needsRandom = val.indexOf("random") !== -1; | |
| 12234 | + var elemType = elem.data.ty; | |
| 12235 | + var transform; | |
| 12236 | + var $bm_transform; | |
| 12237 | + var content; | |
| 12238 | + var effect; | |
| 12239 | + var thisProperty = property; | |
| 12240 | + thisProperty._name = elem.data.nm; | |
| 12241 | + thisProperty.valueAtTime = thisProperty.getValueAtTime; | |
| 12242 | + Object.defineProperty(thisProperty, "value", { get: function get() { | |
| 12243 | + return thisProperty.v; | |
| 12244 | + } }); | |
| 12245 | + elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate; | |
| 12246 | + elem.comp.displayStartTime = 0; | |
| 12247 | + var inPoint = elem.data.ip / elem.comp.globalData.frameRate; | |
| 12248 | + var outPoint = elem.data.op / elem.comp.globalData.frameRate; | |
| 12249 | + var width = elem.data.sw ? elem.data.sw : 0; | |
| 12250 | + var height = elem.data.sh ? elem.data.sh : 0; | |
| 12251 | + var name = elem.data.nm; | |
| 12252 | + var loopIn; | |
| 12253 | + var loop_in; | |
| 12254 | + var loopOut; | |
| 12255 | + var loop_out; | |
| 12256 | + var smooth; | |
| 12257 | + var toWorld; | |
| 12258 | + var fromWorld; | |
| 12259 | + var fromComp; | |
| 12260 | + var toComp; | |
| 12261 | + var fromCompToSurface; | |
| 12262 | + var position; | |
| 12263 | + var rotation; | |
| 12264 | + var anchorPoint; | |
| 12265 | + var scale; | |
| 12266 | + var thisLayer; | |
| 12267 | + var thisComp; | |
| 12268 | + var mask; | |
| 12269 | + var valueAtTime; | |
| 12270 | + var velocityAtTime; | |
| 12271 | + var scoped_bm_rt; | |
| 12272 | + var expression_function = eval("[function _expression_function(){" + val + ";scoped_bm_rt=$bm_rt}]")[0]; | |
| 12273 | + var numKeys = property.kf ? data.k.length : 0; | |
| 12274 | + var active = !this.data || this.data.hd !== true; | |
| 12275 | + var wiggle = function wiggle(freq, amp) { | |
| 12276 | + var iWiggle; | |
| 12277 | + var j; | |
| 12278 | + var lenWiggle = this.pv.length ? this.pv.length : 1; | |
| 12279 | + var addedAmps = createTypedArray("float32", lenWiggle); | |
| 12280 | + freq = 5; | |
| 12281 | + var iterations = Math.floor(time * freq); | |
| 12282 | + iWiggle = 0; | |
| 12283 | + j = 0; | |
| 12284 | + while (iWiggle < iterations) { | |
| 12285 | + for (j = 0; j < lenWiggle; j += 1) addedAmps[j] += -amp + amp * 2 * BMMath.random(); | |
| 12286 | + iWiggle += 1; | |
| 12287 | + } | |
| 12288 | + var periods = time * freq; | |
| 12289 | + var perc = periods - Math.floor(periods); | |
| 12290 | + var arr = createTypedArray("float32", lenWiggle); | |
| 12291 | + if (lenWiggle > 1) { | |
| 12292 | + for (j = 0; j < lenWiggle; j += 1) arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; | |
| 12293 | + return arr; | |
| 12294 | + } | |
| 12295 | + return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc; | |
| 12296 | + }.bind(this); | |
| 12297 | + if (thisProperty.loopIn) { | |
| 12298 | + loopIn = thisProperty.loopIn.bind(thisProperty); | |
| 12299 | + loop_in = loopIn; | |
| 12300 | + } | |
| 12301 | + if (thisProperty.loopOut) { | |
| 12302 | + loopOut = thisProperty.loopOut.bind(thisProperty); | |
| 12303 | + loop_out = loopOut; | |
| 12304 | + } | |
| 12305 | + if (thisProperty.smooth) smooth = thisProperty.smooth.bind(thisProperty); | |
| 12306 | + function loopInDuration(type, duration) { | |
| 12307 | + return loopIn(type, duration, true); | |
| 12308 | + } | |
| 12309 | + function loopOutDuration(type, duration) { | |
| 12310 | + return loopOut(type, duration, true); | |
| 12311 | + } | |
| 12312 | + if (this.getValueAtTime) valueAtTime = this.getValueAtTime.bind(this); | |
| 12313 | + if (this.getVelocityAtTime) velocityAtTime = this.getVelocityAtTime.bind(this); | |
| 12314 | + var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface); | |
| 12315 | + function lookAt(elem1, elem2) { | |
| 12316 | + var fVec = [ | |
| 12317 | + elem2[0] - elem1[0], | |
| 12318 | + elem2[1] - elem1[1], | |
| 12319 | + elem2[2] - elem1[2] | |
| 12320 | + ]; | |
| 12321 | + var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads; | |
| 12322 | + return [ | |
| 12323 | + -Math.atan2(fVec[1], fVec[2]) / degToRads, | |
| 12324 | + pitch, | |
| 12325 | + 0 | |
| 12326 | + ]; | |
| 12327 | + } | |
| 12328 | + function easeOut(t, tMin, tMax, val1, val2) { | |
| 12329 | + return applyEase(easeOutBez, t, tMin, tMax, val1, val2); | |
| 12330 | + } | |
| 12331 | + function easeIn(t, tMin, tMax, val1, val2) { | |
| 12332 | + return applyEase(easeInBez, t, tMin, tMax, val1, val2); | |
| 12333 | + } | |
| 12334 | + function ease(t, tMin, tMax, val1, val2) { | |
| 12335 | + return applyEase(easeInOutBez, t, tMin, tMax, val1, val2); | |
| 12336 | + } | |
| 12337 | + function applyEase(fn, t, tMin, tMax, val1, val2) { | |
| 12338 | + if (val1 === void 0) { | |
| 12339 | + val1 = tMin; | |
| 12340 | + val2 = tMax; | |
| 12341 | + } else t = (t - tMin) / (tMax - tMin); | |
| 12342 | + if (t > 1) t = 1; | |
| 12343 | + else if (t < 0) t = 0; | |
| 12344 | + var mult = fn(t); | |
| 12345 | + if ($bm_isInstanceOfArray(val1)) { | |
| 12346 | + var iKey; | |
| 12347 | + var lenKey = val1.length; | |
| 12348 | + var arr = createTypedArray("float32", lenKey); | |
| 12349 | + for (iKey = 0; iKey < lenKey; iKey += 1) arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey]; | |
| 12350 | + return arr; | |
| 12351 | + } | |
| 12352 | + return (val2 - val1) * mult + val1; | |
| 12353 | + } | |
| 12354 | + function nearestKey(time) { | |
| 12355 | + var iKey; | |
| 12356 | + var lenKey = data.k.length; | |
| 12357 | + var index; | |
| 12358 | + var keyTime; | |
| 12359 | + if (!data.k.length || typeof data.k[0] === "number") { | |
| 12360 | + index = 0; | |
| 12361 | + keyTime = 0; | |
| 12362 | + } else { | |
| 12363 | + index = -1; | |
| 12364 | + time *= elem.comp.globalData.frameRate; | |
| 12365 | + if (time < data.k[0].t) { | |
| 12366 | + index = 1; | |
| 12367 | + keyTime = data.k[0].t; | |
| 12368 | + } else { | |
| 12369 | + for (iKey = 0; iKey < lenKey - 1; iKey += 1) if (time === data.k[iKey].t) { | |
| 12370 | + index = iKey + 1; | |
| 12371 | + keyTime = data.k[iKey].t; | |
| 12372 | + break; | |
| 12373 | + } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) { | |
| 12374 | + if (time - data.k[iKey].t > data.k[iKey + 1].t - time) { | |
| 12375 | + index = iKey + 2; | |
| 12376 | + keyTime = data.k[iKey + 1].t; | |
| 12377 | + } else { | |
| 12378 | + index = iKey + 1; | |
| 12379 | + keyTime = data.k[iKey].t; | |
| 12380 | + } | |
| 12381 | + break; | |
| 12382 | + } | |
| 12383 | + if (index === -1) { | |
| 12384 | + index = iKey + 1; | |
| 12385 | + keyTime = data.k[iKey].t; | |
| 12386 | + } | |
| 12387 | + } | |
| 12388 | + } | |
| 12389 | + var obKey = {}; | |
| 12390 | + obKey.index = index; | |
| 12391 | + obKey.time = keyTime / elem.comp.globalData.frameRate; | |
| 12392 | + return obKey; | |
| 12393 | + } | |
| 12394 | + function key(ind) { | |
| 12395 | + var obKey; | |
| 12396 | + var iKey; | |
| 12397 | + var lenKey; | |
| 12398 | + if (!data.k.length || typeof data.k[0] === "number") throw new Error("The property has no keyframe at index " + ind); | |
| 12399 | + ind -= 1; | |
| 12400 | + obKey = { | |
| 12401 | + time: data.k[ind].t / elem.comp.globalData.frameRate, | |
| 12402 | + value: [] | |
| 12403 | + }; | |
| 12404 | + var arr = Object.prototype.hasOwnProperty.call(data.k[ind], "s") ? data.k[ind].s : data.k[ind - 1].e; | |
| 12405 | + lenKey = arr.length; | |
| 12406 | + for (iKey = 0; iKey < lenKey; iKey += 1) { | |
| 12407 | + obKey[iKey] = arr[iKey]; | |
| 12408 | + obKey.value[iKey] = arr[iKey]; | |
| 12409 | + } | |
| 12410 | + return obKey; | |
| 12411 | + } | |
| 12412 | + function framesToTime(fr, fps) { | |
| 12413 | + if (!fps) fps = elem.comp.globalData.frameRate; | |
| 12414 | + return fr / fps; | |
| 12415 | + } | |
| 12416 | + function timeToFrames(t, fps) { | |
| 12417 | + if (!t && t !== 0) t = time; | |
| 12418 | + if (!fps) fps = elem.comp.globalData.frameRate; | |
| 12419 | + return t * fps; | |
| 12420 | + } | |
| 12421 | + function seedRandom(seed) { | |
| 12422 | + BMMath.seedrandom(randSeed + seed); | |
| 12423 | + } | |
| 12424 | + function sourceRectAtTime() { | |
| 12425 | + return elem.sourceRectAtTime(); | |
| 12426 | + } | |
| 12427 | + function substring(init, end) { | |
| 12428 | + if (typeof value === "string") { | |
| 12429 | + if (end === void 0) return value.substring(init); | |
| 12430 | + return value.substring(init, end); | |
| 12431 | + } | |
| 12432 | + return ""; | |
| 12433 | + } | |
| 12434 | + function substr(init, end) { | |
| 12435 | + if (typeof value === "string") { | |
| 12436 | + if (end === void 0) return value.substr(init); | |
| 12437 | + return value.substr(init, end); | |
| 12438 | + } | |
| 12439 | + return ""; | |
| 12440 | + } | |
| 12441 | + function posterizeTime(framesPerSecond) { | |
| 12442 | + time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond; | |
| 12443 | + value = valueAtTime(time); | |
| 12444 | + } | |
| 12445 | + var time; | |
| 12446 | + var velocity; | |
| 12447 | + var value; | |
| 12448 | + var text; | |
| 12449 | + var textIndex; | |
| 12450 | + var textTotal; | |
| 12451 | + var selectorValue; | |
| 12452 | + var index = elem.data.ind; | |
| 12453 | + var hasParent = !!(elem.hierarchy && elem.hierarchy.length); | |
| 12454 | + var parent; | |
| 12455 | + var randSeed = Math.floor(Math.random() * 1e6); | |
| 12456 | + var globalData = elem.globalData; | |
| 12457 | + function executeExpression(_value) { | |
| 12458 | + value = _value; | |
| 12459 | + if (this.frameExpressionId === elem.globalData.frameId && this.propType !== "textSelector") return value; | |
| 12460 | + if (this.propType === "textSelector") { | |
| 12461 | + textIndex = this.textIndex; | |
| 12462 | + textTotal = this.textTotal; | |
| 12463 | + selectorValue = this.selectorValue; | |
| 12464 | + } | |
| 12465 | + if (!thisLayer) { | |
| 12466 | + text = elem.layerInterface.text; | |
| 12467 | + thisLayer = elem.layerInterface; | |
| 12468 | + thisComp = elem.comp.compInterface; | |
| 12469 | + toWorld = thisLayer.toWorld.bind(thisLayer); | |
| 12470 | + fromWorld = thisLayer.fromWorld.bind(thisLayer); | |
| 12471 | + fromComp = thisLayer.fromComp.bind(thisLayer); | |
| 12472 | + toComp = thisLayer.toComp.bind(thisLayer); | |
| 12473 | + mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null; | |
| 12474 | + fromCompToSurface = fromComp; | |
| 12475 | + } | |
| 12476 | + if (!transform) { | |
| 12477 | + transform = elem.layerInterface("ADBE Transform Group"); | |
| 12478 | + $bm_transform = transform; | |
| 12479 | + if (transform) anchorPoint = transform.anchorPoint; | |
| 12480 | + } | |
| 12481 | + if (elemType === 4 && !content) content = thisLayer("ADBE Root Vectors Group"); | |
| 12482 | + if (!effect) effect = thisLayer(4); | |
| 12483 | + hasParent = !!(elem.hierarchy && elem.hierarchy.length); | |
| 12484 | + if (hasParent && !parent) parent = elem.hierarchy[0].layerInterface; | |
| 12485 | + time = this.comp.renderedFrame / this.comp.globalData.frameRate; | |
| 12486 | + if (_needsRandom) seedRandom(randSeed + time); | |
| 12487 | + if (needsVelocity) velocity = velocityAtTime(time); | |
| 12488 | + expression_function(); | |
| 12489 | + this.frameExpressionId = elem.globalData.frameId; | |
| 12490 | + scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt; | |
| 12491 | + return scoped_bm_rt; | |
| 12492 | + } | |
| 12493 | + executeExpression.__preventDeadCodeRemoval = [ | |
| 12494 | + $bm_transform, | |
| 12495 | + anchorPoint, | |
| 12496 | + time, | |
| 12497 | + velocity, | |
| 12498 | + inPoint, | |
| 12499 | + outPoint, | |
| 12500 | + width, | |
| 12501 | + height, | |
| 12502 | + name, | |
| 12503 | + loop_in, | |
| 12504 | + loop_out, | |
| 12505 | + smooth, | |
| 12506 | + toComp, | |
| 12507 | + fromCompToSurface, | |
| 12508 | + toWorld, | |
| 12509 | + fromWorld, | |
| 12510 | + mask, | |
| 12511 | + position, | |
| 12512 | + rotation, | |
| 12513 | + scale, | |
| 12514 | + thisComp, | |
| 12515 | + numKeys, | |
| 12516 | + active, | |
| 12517 | + wiggle, | |
| 12518 | + loopInDuration, | |
| 12519 | + loopOutDuration, | |
| 12520 | + comp, | |
| 12521 | + lookAt, | |
| 12522 | + easeOut, | |
| 12523 | + easeIn, | |
| 12524 | + ease, | |
| 12525 | + nearestKey, | |
| 12526 | + key, | |
| 12527 | + text, | |
| 12528 | + textIndex, | |
| 12529 | + textTotal, | |
| 12530 | + selectorValue, | |
| 12531 | + framesToTime, | |
| 12532 | + timeToFrames, | |
| 12533 | + sourceRectAtTime, | |
| 12534 | + substring, | |
| 12535 | + substr, | |
| 12536 | + posterizeTime, | |
| 12537 | + index, | |
| 12538 | + globalData | |
| 12539 | + ]; | |
| 12540 | + return executeExpression; | |
| 12541 | + } | |
| 12542 | + ob.initiateExpression = initiateExpression; | |
| 12543 | + ob.__preventDeadCodeRemoval = [ | |
| 12544 | + window, | |
| 12545 | + document, | |
| 12546 | + XMLHttpRequest, | |
| 12547 | + fetch, | |
| 12548 | + frames, | |
| 12549 | + $bm_neg, | |
| 12550 | + add, | |
| 12551 | + $bm_sum, | |
| 12552 | + $bm_sub, | |
| 12553 | + $bm_mul, | |
| 12554 | + $bm_div, | |
| 12555 | + $bm_mod, | |
| 12556 | + clamp, | |
| 12557 | + radians_to_degrees, | |
| 12558 | + degreesToRadians, | |
| 12559 | + degrees_to_radians, | |
| 12560 | + normalize, | |
| 12561 | + rgbToHsl, | |
| 12562 | + hslToRgb, | |
| 12563 | + linear, | |
| 12564 | + random, | |
| 12565 | + createPath, | |
| 12566 | + _lottieGlobal | |
| 12567 | + ]; | |
| 12568 | + ob.resetFrame = resetFrame; | |
| 12569 | + return ob; | |
| 12570 | + }(); | |
| 12571 | + var Expressions = function() { | |
| 12572 | + var ob = {}; | |
| 12573 | + ob.initExpressions = initExpressions; | |
| 12574 | + ob.resetFrame = ExpressionManager.resetFrame; | |
| 12575 | + function initExpressions(animation) { | |
| 12576 | + var stackCount = 0; | |
| 12577 | + var registers = []; | |
| 12578 | + function pushExpression() { | |
| 12579 | + stackCount += 1; | |
| 12580 | + } | |
| 12581 | + function popExpression() { | |
| 12582 | + stackCount -= 1; | |
| 12583 | + if (stackCount === 0) releaseInstances(); | |
| 12584 | + } | |
| 12585 | + function registerExpressionProperty(expression) { | |
| 12586 | + if (registers.indexOf(expression) === -1) registers.push(expression); | |
| 12587 | + } | |
| 12588 | + function releaseInstances() { | |
| 12589 | + var i; | |
| 12590 | + var len = registers.length; | |
| 12591 | + for (i = 0; i < len; i += 1) registers[i].release(); | |
| 12592 | + registers.length = 0; | |
| 12593 | + } | |
| 12594 | + animation.renderer.compInterface = CompExpressionInterface(animation.renderer); | |
| 12595 | + animation.renderer.globalData.projectInterface.registerComposition(animation.renderer); | |
| 12596 | + animation.renderer.globalData.pushExpression = pushExpression; | |
| 12597 | + animation.renderer.globalData.popExpression = popExpression; | |
| 12598 | + animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty; | |
| 12599 | + } | |
| 12600 | + return ob; | |
| 12601 | + }(); | |
| 12602 | + var MaskManagerInterface = function() { | |
| 12603 | + function MaskInterface(mask, data) { | |
| 12604 | + this._mask = mask; | |
| 12605 | + this._data = data; | |
| 12606 | + } | |
| 12607 | + Object.defineProperty(MaskInterface.prototype, "maskPath", { get: function get() { | |
| 12608 | + if (this._mask.prop.k) this._mask.prop.getValue(); | |
| 12609 | + return this._mask.prop; | |
| 12610 | + } }); | |
| 12611 | + Object.defineProperty(MaskInterface.prototype, "maskOpacity", { get: function get() { | |
| 12612 | + if (this._mask.op.k) this._mask.op.getValue(); | |
| 12613 | + return this._mask.op.v * 100; | |
| 12614 | + } }); | |
| 12615 | + return function MaskManager(maskManager) { | |
| 12616 | + var _masksInterfaces = createSizedArray(maskManager.viewData.length); | |
| 12617 | + var i; | |
| 12618 | + var len = maskManager.viewData.length; | |
| 12619 | + for (i = 0; i < len; i += 1) _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]); | |
| 12620 | + return function maskFunction(name) { | |
| 12621 | + i = 0; | |
| 12622 | + while (i < len) { | |
| 12623 | + if (maskManager.masksProperties[i].nm === name) return _masksInterfaces[i]; | |
| 12624 | + i += 1; | |
| 12625 | + } | |
| 12626 | + return null; | |
| 12627 | + }; | |
| 12628 | + }; | |
| 12629 | + }(); | |
| 12630 | + var ExpressionPropertyInterface = function() { | |
| 12631 | + var defaultUnidimensionalValue = { | |
| 12632 | + pv: 0, | |
| 12633 | + v: 0, | |
| 12634 | + mult: 1 | |
| 12635 | + }; | |
| 12636 | + var defaultMultidimensionalValue = { | |
| 12637 | + pv: [ | |
| 12638 | + 0, | |
| 12639 | + 0, | |
| 12640 | + 0 | |
| 12641 | + ], | |
| 12642 | + v: [ | |
| 12643 | + 0, | |
| 12644 | + 0, | |
| 12645 | + 0 | |
| 12646 | + ], | |
| 12647 | + mult: 1 | |
| 12648 | + }; | |
| 12649 | + function completeProperty(expressionValue, property, type) { | |
| 12650 | + Object.defineProperty(expressionValue, "velocity", { get: function get() { | |
| 12651 | + return property.getVelocityAtTime(property.comp.currentFrame); | |
| 12652 | + } }); | |
| 12653 | + expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0; | |
| 12654 | + expressionValue.key = function(pos) { | |
| 12655 | + if (!expressionValue.numKeys) return 0; | |
| 12656 | + var value = ""; | |
| 12657 | + if ("s" in property.keyframes[pos - 1]) value = property.keyframes[pos - 1].s; | |
| 12658 | + else if ("e" in property.keyframes[pos - 2]) value = property.keyframes[pos - 2].e; | |
| 12659 | + else value = property.keyframes[pos - 2].s; | |
| 12660 | + var valueProp = type === "unidimensional" ? new Number(value) : Object.assign({}, value); | |
| 12661 | + valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate; | |
| 12662 | + valueProp.value = type === "unidimensional" ? value[0] : value; | |
| 12663 | + return valueProp; | |
| 12664 | + }; | |
| 12665 | + expressionValue.valueAtTime = property.getValueAtTime; | |
| 12666 | + expressionValue.speedAtTime = property.getSpeedAtTime; | |
| 12667 | + expressionValue.velocityAtTime = property.getVelocityAtTime; | |
| 12668 | + expressionValue.propertyGroup = property.propertyGroup; | |
| 12669 | + } | |
| 12670 | + function UnidimensionalPropertyInterface(property) { | |
| 12671 | + if (!property || !("pv" in property)) property = defaultUnidimensionalValue; | |
| 12672 | + var mult = 1 / property.mult; | |
| 12673 | + var val = property.pv * mult; | |
| 12674 | + var expressionValue = new Number(val); | |
| 12675 | + expressionValue.value = val; | |
| 12676 | + completeProperty(expressionValue, property, "unidimensional"); | |
| 12677 | + return function() { | |
| 12678 | + if (property.k) property.getValue(); | |
| 12679 | + val = property.v * mult; | |
| 12680 | + if (expressionValue.value !== val) { | |
| 12681 | + expressionValue = new Number(val); | |
| 12682 | + expressionValue.value = val; | |
| 12683 | + expressionValue[0] = val; | |
| 12684 | + completeProperty(expressionValue, property, "unidimensional"); | |
| 12685 | + } | |
| 12686 | + return expressionValue; | |
| 12687 | + }; | |
| 12688 | + } | |
| 12689 | + function MultidimensionalPropertyInterface(property) { | |
| 12690 | + if (!property || !("pv" in property)) property = defaultMultidimensionalValue; | |
| 12691 | + var mult = 1 / property.mult; | |
| 12692 | + var len = property.data && property.data.l || property.pv.length; | |
| 12693 | + var expressionValue = createTypedArray("float32", len); | |
| 12694 | + var arrValue = createTypedArray("float32", len); | |
| 12695 | + expressionValue.value = arrValue; | |
| 12696 | + completeProperty(expressionValue, property, "multidimensional"); | |
| 12697 | + return function() { | |
| 12698 | + if (property.k) property.getValue(); | |
| 12699 | + for (var i = 0; i < len; i += 1) { | |
| 12700 | + arrValue[i] = property.v[i] * mult; | |
| 12701 | + expressionValue[i] = arrValue[i]; | |
| 12702 | + } | |
| 12703 | + return expressionValue; | |
| 12704 | + }; | |
| 12705 | + } | |
| 12706 | + function defaultGetter() { | |
| 12707 | + return defaultUnidimensionalValue; | |
| 12708 | + } | |
| 12709 | + return function(property) { | |
| 12710 | + if (!property) return defaultGetter; | |
| 12711 | + if (property.propType === "unidimensional") return UnidimensionalPropertyInterface(property); | |
| 12712 | + return MultidimensionalPropertyInterface(property); | |
| 12713 | + }; | |
| 12714 | + }(); | |
| 12715 | + var TransformExpressionInterface = function() { | |
| 12716 | + return function(transform) { | |
| 12717 | + function _thisFunction(name) { | |
| 12718 | + switch (name) { | |
| 12719 | + case "scale": | |
| 12720 | + case "Scale": | |
| 12721 | + case "ADBE Scale": | |
| 12722 | + case 6: return _thisFunction.scale; | |
| 12723 | + case "rotation": | |
| 12724 | + case "Rotation": | |
| 12725 | + case "ADBE Rotation": | |
| 12726 | + case "ADBE Rotate Z": | |
| 12727 | + case 10: return _thisFunction.rotation; | |
| 12728 | + case "ADBE Rotate X": return _thisFunction.xRotation; | |
| 12729 | + case "ADBE Rotate Y": return _thisFunction.yRotation; | |
| 12730 | + case "position": | |
| 12731 | + case "Position": | |
| 12732 | + case "ADBE Position": | |
| 12733 | + case 2: return _thisFunction.position; | |
| 12734 | + case "ADBE Position_0": return _thisFunction.xPosition; | |
| 12735 | + case "ADBE Position_1": return _thisFunction.yPosition; | |
| 12736 | + case "ADBE Position_2": return _thisFunction.zPosition; | |
| 12737 | + case "anchorPoint": | |
| 12738 | + case "AnchorPoint": | |
| 12739 | + case "Anchor Point": | |
| 12740 | + case "ADBE AnchorPoint": | |
| 12741 | + case 1: return _thisFunction.anchorPoint; | |
| 12742 | + case "opacity": | |
| 12743 | + case "Opacity": | |
| 12744 | + case 11: return _thisFunction.opacity; | |
| 12745 | + default: return null; | |
| 12746 | + } | |
| 12747 | + } | |
| 12748 | + Object.defineProperty(_thisFunction, "rotation", { get: ExpressionPropertyInterface(transform.r || transform.rz) }); | |
| 12749 | + Object.defineProperty(_thisFunction, "zRotation", { get: ExpressionPropertyInterface(transform.rz || transform.r) }); | |
| 12750 | + Object.defineProperty(_thisFunction, "xRotation", { get: ExpressionPropertyInterface(transform.rx) }); | |
| 12751 | + Object.defineProperty(_thisFunction, "yRotation", { get: ExpressionPropertyInterface(transform.ry) }); | |
| 12752 | + Object.defineProperty(_thisFunction, "scale", { get: ExpressionPropertyInterface(transform.s) }); | |
| 12753 | + var _px; | |
| 12754 | + var _py; | |
| 12755 | + var _pz; | |
| 12756 | + var _transformFactory; | |
| 12757 | + if (transform.p) _transformFactory = ExpressionPropertyInterface(transform.p); | |
| 12758 | + else { | |
| 12759 | + _px = ExpressionPropertyInterface(transform.px); | |
| 12760 | + _py = ExpressionPropertyInterface(transform.py); | |
| 12761 | + if (transform.pz) _pz = ExpressionPropertyInterface(transform.pz); | |
| 12762 | + } | |
| 12763 | + Object.defineProperty(_thisFunction, "position", { get: function get() { | |
| 12764 | + if (transform.p) return _transformFactory(); | |
| 12765 | + return [ | |
| 12766 | + _px(), | |
| 12767 | + _py(), | |
| 12768 | + _pz ? _pz() : 0 | |
| 12769 | + ]; | |
| 12770 | + } }); | |
| 12771 | + Object.defineProperty(_thisFunction, "xPosition", { get: ExpressionPropertyInterface(transform.px) }); | |
| 12772 | + Object.defineProperty(_thisFunction, "yPosition", { get: ExpressionPropertyInterface(transform.py) }); | |
| 12773 | + Object.defineProperty(_thisFunction, "zPosition", { get: ExpressionPropertyInterface(transform.pz) }); | |
| 12774 | + Object.defineProperty(_thisFunction, "anchorPoint", { get: ExpressionPropertyInterface(transform.a) }); | |
| 12775 | + Object.defineProperty(_thisFunction, "opacity", { get: ExpressionPropertyInterface(transform.o) }); | |
| 12776 | + Object.defineProperty(_thisFunction, "skew", { get: ExpressionPropertyInterface(transform.sk) }); | |
| 12777 | + Object.defineProperty(_thisFunction, "skewAxis", { get: ExpressionPropertyInterface(transform.sa) }); | |
| 12778 | + Object.defineProperty(_thisFunction, "orientation", { get: ExpressionPropertyInterface(transform.or) }); | |
| 12779 | + return _thisFunction; | |
| 12780 | + }; | |
| 12781 | + }(); | |
| 12782 | + var LayerExpressionInterface = function() { | |
| 12783 | + function getMatrix(time) { | |
| 12784 | + var toWorldMat = new Matrix(); | |
| 12785 | + if (time !== void 0) this._elem.finalTransform.mProp.getValueAtTime(time).clone(toWorldMat); | |
| 12786 | + else this._elem.finalTransform.mProp.applyToMatrix(toWorldMat); | |
| 12787 | + return toWorldMat; | |
| 12788 | + } | |
| 12789 | + function toWorldVec(arr, time) { | |
| 12790 | + var toWorldMat = this.getMatrix(time); | |
| 12791 | + toWorldMat.props[12] = 0; | |
| 12792 | + toWorldMat.props[13] = 0; | |
| 12793 | + toWorldMat.props[14] = 0; | |
| 12794 | + return this.applyPoint(toWorldMat, arr); | |
| 12795 | + } | |
| 12796 | + function toWorld(arr, time) { | |
| 12797 | + var toWorldMat = this.getMatrix(time); | |
| 12798 | + return this.applyPoint(toWorldMat, arr); | |
| 12799 | + } | |
| 12800 | + function fromWorldVec(arr, time) { | |
| 12801 | + var toWorldMat = this.getMatrix(time); | |
| 12802 | + toWorldMat.props[12] = 0; | |
| 12803 | + toWorldMat.props[13] = 0; | |
| 12804 | + toWorldMat.props[14] = 0; | |
| 12805 | + return this.invertPoint(toWorldMat, arr); | |
| 12806 | + } | |
| 12807 | + function fromWorld(arr, time) { | |
| 12808 | + var toWorldMat = this.getMatrix(time); | |
| 12809 | + return this.invertPoint(toWorldMat, arr); | |
| 12810 | + } | |
| 12811 | + function applyPoint(matrix, arr) { | |
| 12812 | + if (this._elem.hierarchy && this._elem.hierarchy.length) { | |
| 12813 | + var i; | |
| 12814 | + var len = this._elem.hierarchy.length; | |
| 12815 | + for (i = 0; i < len; i += 1) this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix); | |
| 12816 | + } | |
| 12817 | + return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0); | |
| 12818 | + } | |
| 12819 | + function invertPoint(matrix, arr) { | |
| 12820 | + if (this._elem.hierarchy && this._elem.hierarchy.length) { | |
| 12821 | + var i; | |
| 12822 | + var len = this._elem.hierarchy.length; | |
| 12823 | + for (i = 0; i < len; i += 1) this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix); | |
| 12824 | + } | |
| 12825 | + return matrix.inversePoint(arr); | |
| 12826 | + } | |
| 12827 | + function fromComp(arr) { | |
| 12828 | + var toWorldMat = new Matrix(); | |
| 12829 | + toWorldMat.reset(); | |
| 12830 | + this._elem.finalTransform.mProp.applyToMatrix(toWorldMat); | |
| 12831 | + if (this._elem.hierarchy && this._elem.hierarchy.length) { | |
| 12832 | + var i; | |
| 12833 | + var len = this._elem.hierarchy.length; | |
| 12834 | + for (i = 0; i < len; i += 1) this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat); | |
| 12835 | + return toWorldMat.inversePoint(arr); | |
| 12836 | + } | |
| 12837 | + return toWorldMat.inversePoint(arr); | |
| 12838 | + } | |
| 12839 | + function sampleImage() { | |
| 12840 | + return [ | |
| 12841 | + 1, | |
| 12842 | + 1, | |
| 12843 | + 1, | |
| 12844 | + 1 | |
| 12845 | + ]; | |
| 12846 | + } | |
| 12847 | + return function(elem) { | |
| 12848 | + var transformInterface; | |
| 12849 | + function _registerMaskInterface(maskManager) { | |
| 12850 | + _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem); | |
| 12851 | + } | |
| 12852 | + function _registerEffectsInterface(effects) { | |
| 12853 | + _thisLayerFunction.effect = effects; | |
| 12854 | + } | |
| 12855 | + function _thisLayerFunction(name) { | |
| 12856 | + switch (name) { | |
| 12857 | + case "ADBE Root Vectors Group": | |
| 12858 | + case "Contents": | |
| 12859 | + case 2: return _thisLayerFunction.shapeInterface; | |
| 12860 | + case 1: | |
| 12861 | + case 6: | |
| 12862 | + case "Transform": | |
| 12863 | + case "transform": | |
| 12864 | + case "ADBE Transform Group": return transformInterface; | |
| 12865 | + case 4: | |
| 12866 | + case "ADBE Effect Parade": | |
| 12867 | + case "effects": | |
| 12868 | + case "Effects": return _thisLayerFunction.effect; | |
| 12869 | + case "ADBE Text Properties": return _thisLayerFunction.textInterface; | |
| 12870 | + default: return null; | |
| 12871 | + } | |
| 12872 | + } | |
| 12873 | + _thisLayerFunction.getMatrix = getMatrix; | |
| 12874 | + _thisLayerFunction.invertPoint = invertPoint; | |
| 12875 | + _thisLayerFunction.applyPoint = applyPoint; | |
| 12876 | + _thisLayerFunction.toWorld = toWorld; | |
| 12877 | + _thisLayerFunction.toWorldVec = toWorldVec; | |
| 12878 | + _thisLayerFunction.fromWorld = fromWorld; | |
| 12879 | + _thisLayerFunction.fromWorldVec = fromWorldVec; | |
| 12880 | + _thisLayerFunction.toComp = toWorld; | |
| 12881 | + _thisLayerFunction.fromComp = fromComp; | |
| 12882 | + _thisLayerFunction.sampleImage = sampleImage; | |
| 12883 | + _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem); | |
| 12884 | + _thisLayerFunction._elem = elem; | |
| 12885 | + transformInterface = TransformExpressionInterface(elem.finalTransform.mProp); | |
| 12886 | + var anchorPointDescriptor = getDescriptor(transformInterface, "anchorPoint"); | |
| 12887 | + Object.defineProperties(_thisLayerFunction, { | |
| 12888 | + hasParent: { get: function get() { | |
| 12889 | + return elem.hierarchy.length; | |
| 12890 | + } }, | |
| 12891 | + parent: { get: function get() { | |
| 12892 | + return elem.hierarchy[0].layerInterface; | |
| 12893 | + } }, | |
| 12894 | + rotation: getDescriptor(transformInterface, "rotation"), | |
| 12895 | + scale: getDescriptor(transformInterface, "scale"), | |
| 12896 | + position: getDescriptor(transformInterface, "position"), | |
| 12897 | + opacity: getDescriptor(transformInterface, "opacity"), | |
| 12898 | + anchorPoint: anchorPointDescriptor, | |
| 12899 | + anchor_point: anchorPointDescriptor, | |
| 12900 | + transform: { get: function get() { | |
| 12901 | + return transformInterface; | |
| 12902 | + } }, | |
| 12903 | + active: { get: function get() { | |
| 12904 | + return elem.isInRange; | |
| 12905 | + } } | |
| 12906 | + }); | |
| 12907 | + _thisLayerFunction.startTime = elem.data.st; | |
| 12908 | + _thisLayerFunction.index = elem.data.ind; | |
| 12909 | + _thisLayerFunction.source = elem.data.refId; | |
| 12910 | + _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100; | |
| 12911 | + _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100; | |
| 12912 | + _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate; | |
| 12913 | + _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate; | |
| 12914 | + _thisLayerFunction._name = elem.data.nm; | |
| 12915 | + _thisLayerFunction.registerMaskInterface = _registerMaskInterface; | |
| 12916 | + _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface; | |
| 12917 | + return _thisLayerFunction; | |
| 12918 | + }; | |
| 12919 | + }(); | |
| 12920 | + var propertyGroupFactory = function() { | |
| 12921 | + return function(interfaceFunction, parentPropertyGroup) { | |
| 12922 | + return function(val) { | |
| 12923 | + val = val === void 0 ? 1 : val; | |
| 12924 | + if (val <= 0) return interfaceFunction; | |
| 12925 | + return parentPropertyGroup(val - 1); | |
| 12926 | + }; | |
| 12927 | + }; | |
| 12928 | + }(); | |
| 12929 | + var PropertyInterface = function() { | |
| 12930 | + return function(propertyName, propertyGroup) { | |
| 12931 | + var interfaceFunction = { _name: propertyName }; | |
| 12932 | + function _propertyGroup(val) { | |
| 12933 | + val = val === void 0 ? 1 : val; | |
| 12934 | + if (val <= 0) return interfaceFunction; | |
| 12935 | + return propertyGroup(val - 1); | |
| 12936 | + } | |
| 12937 | + return _propertyGroup; | |
| 12938 | + }; | |
| 12939 | + }(); | |
| 12940 | + var EffectsExpressionInterface = function() { | |
| 12941 | + var ob = { createEffectsInterface }; | |
| 12942 | + function createEffectsInterface(elem, propertyGroup) { | |
| 12943 | + if (elem.effectsManager) { | |
| 12944 | + var effectElements = []; | |
| 12945 | + var effectsData = elem.data.ef; | |
| 12946 | + var i; | |
| 12947 | + var len = elem.effectsManager.effectElements.length; | |
| 12948 | + for (i = 0; i < len; i += 1) effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem)); | |
| 12949 | + var effects = elem.data.ef || []; | |
| 12950 | + var groupInterface = function groupInterface(name) { | |
| 12951 | + i = 0; | |
| 12952 | + len = effects.length; | |
| 12953 | + while (i < len) { | |
| 12954 | + if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) return effectElements[i]; | |
| 12955 | + i += 1; | |
| 12956 | + } | |
| 12957 | + return null; | |
| 12958 | + }; | |
| 12959 | + Object.defineProperty(groupInterface, "numProperties", { get: function get() { | |
| 12960 | + return effects.length; | |
| 12961 | + } }); | |
| 12962 | + return groupInterface; | |
| 12963 | + } | |
| 12964 | + return null; | |
| 12965 | + } | |
| 12966 | + function createGroupInterface(data, elements, propertyGroup, elem) { | |
| 12967 | + function groupInterface(name) { | |
| 12968 | + var effects = data.ef; | |
| 12969 | + var i = 0; | |
| 12970 | + var len = effects.length; | |
| 12971 | + while (i < len) { | |
| 12972 | + if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) { | |
| 12973 | + if (effects[i].ty === 5) return effectElements[i]; | |
| 12974 | + return effectElements[i](); | |
| 12975 | + } | |
| 12976 | + i += 1; | |
| 12977 | + } | |
| 12978 | + throw new Error(); | |
| 12979 | + } | |
| 12980 | + var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup); | |
| 12981 | + var effectElements = []; | |
| 12982 | + var i; | |
| 12983 | + var len = data.ef.length; | |
| 12984 | + for (i = 0; i < len; i += 1) if (data.ef[i].ty === 5) effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem)); | |
| 12985 | + else effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup)); | |
| 12986 | + if (data.mn === "ADBE Color Control") Object.defineProperty(groupInterface, "color", { get: function get() { | |
| 12987 | + return effectElements[0](); | |
| 12988 | + } }); | |
| 12989 | + Object.defineProperties(groupInterface, { | |
| 12990 | + numProperties: { get: function get() { | |
| 12991 | + return data.np; | |
| 12992 | + } }, | |
| 12993 | + _name: { value: data.nm }, | |
| 12994 | + propertyGroup: { value: _propertyGroup } | |
| 12995 | + }); | |
| 12996 | + groupInterface.enabled = data.en !== 0; | |
| 12997 | + groupInterface.active = groupInterface.enabled; | |
| 12998 | + return groupInterface; | |
| 12999 | + } | |
| 13000 | + function createValueInterface(element, type, elem, propertyGroup) { | |
| 13001 | + var expressionProperty = ExpressionPropertyInterface(element.p); | |
| 13002 | + function interfaceFunction() { | |
| 13003 | + if (type === 10) return elem.comp.compInterface(element.p.v); | |
| 13004 | + return expressionProperty(); | |
| 13005 | + } | |
| 13006 | + if (element.p.setGroupProperty) element.p.setGroupProperty(PropertyInterface("", propertyGroup)); | |
| 13007 | + return interfaceFunction; | |
| 13008 | + } | |
| 13009 | + return ob; | |
| 13010 | + }(); | |
| 13011 | + var ShapePathInterface = function() { | |
| 13012 | + return function pathInterfaceFactory(shape, view, propertyGroup) { | |
| 13013 | + var prop = view.sh; | |
| 13014 | + function interfaceFunction(val) { | |
| 13015 | + if (val === "Shape" || val === "shape" || val === "Path" || val === "path" || val === "ADBE Vector Shape" || val === 2) return interfaceFunction.path; | |
| 13016 | + return null; | |
| 13017 | + } | |
| 13018 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13019 | + prop.setGroupProperty(PropertyInterface("Path", _propertyGroup)); | |
| 13020 | + Object.defineProperties(interfaceFunction, { | |
| 13021 | + path: { get: function get() { | |
| 13022 | + if (prop.k) prop.getValue(); | |
| 13023 | + return prop; | |
| 13024 | + } }, | |
| 13025 | + shape: { get: function get() { | |
| 13026 | + if (prop.k) prop.getValue(); | |
| 13027 | + return prop; | |
| 13028 | + } }, | |
| 13029 | + _name: { value: shape.nm }, | |
| 13030 | + ix: { value: shape.ix }, | |
| 13031 | + propertyIndex: { value: shape.ix }, | |
| 13032 | + mn: { value: shape.mn }, | |
| 13033 | + propertyGroup: { value: propertyGroup } | |
| 13034 | + }); | |
| 13035 | + return interfaceFunction; | |
| 13036 | + }; | |
| 13037 | + }(); | |
| 13038 | + var ShapeExpressionInterface = function() { | |
| 13039 | + function iterateElements(shapes, view, propertyGroup) { | |
| 13040 | + var arr = []; | |
| 13041 | + var i; | |
| 13042 | + var len = shapes ? shapes.length : 0; | |
| 13043 | + for (i = 0; i < len; i += 1) if (shapes[i].ty === "gr") arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13044 | + else if (shapes[i].ty === "fl") arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13045 | + else if (shapes[i].ty === "st") arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13046 | + else if (shapes[i].ty === "tm") arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13047 | + else if (shapes[i].ty === "tr") {} else if (shapes[i].ty === "el") arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13048 | + else if (shapes[i].ty === "sr") arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13049 | + else if (shapes[i].ty === "sh") arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup)); | |
| 13050 | + else if (shapes[i].ty === "rc") arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13051 | + else if (shapes[i].ty === "rd") arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13052 | + else if (shapes[i].ty === "rp") arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13053 | + else if (shapes[i].ty === "gf") arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13054 | + else arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 13055 | + return arr; | |
| 13056 | + } | |
| 13057 | + function contentsInterfaceFactory(shape, view, propertyGroup) { | |
| 13058 | + var interfaces; | |
| 13059 | + var interfaceFunction = function _interfaceFunction(value) { | |
| 13060 | + var i = 0; | |
| 13061 | + var len = interfaces.length; | |
| 13062 | + while (i < len) { | |
| 13063 | + if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) return interfaces[i]; | |
| 13064 | + i += 1; | |
| 13065 | + } | |
| 13066 | + if (typeof value === "number") return interfaces[value - 1]; | |
| 13067 | + return null; | |
| 13068 | + }; | |
| 13069 | + interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13070 | + interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup); | |
| 13071 | + interfaceFunction.numProperties = interfaces.length; | |
| 13072 | + interfaceFunction.transform = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); | |
| 13073 | + interfaceFunction.propertyIndex = shape.cix; | |
| 13074 | + interfaceFunction._name = shape.nm; | |
| 13075 | + return interfaceFunction; | |
| 13076 | + } | |
| 13077 | + function groupInterfaceFactory(shape, view, propertyGroup) { | |
| 13078 | + var interfaceFunction = function _interfaceFunction(value) { | |
| 13079 | + switch (value) { | |
| 13080 | + case "ADBE Vectors Group": | |
| 13081 | + case "Contents": | |
| 13082 | + case 2: return interfaceFunction.content; | |
| 13083 | + default: return interfaceFunction.transform; | |
| 13084 | + } | |
| 13085 | + }; | |
| 13086 | + interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13087 | + var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup); | |
| 13088 | + var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); | |
| 13089 | + interfaceFunction.content = content; | |
| 13090 | + interfaceFunction.transform = transformInterface; | |
| 13091 | + Object.defineProperty(interfaceFunction, "_name", { get: function get() { | |
| 13092 | + return shape.nm; | |
| 13093 | + } }); | |
| 13094 | + interfaceFunction.numProperties = shape.np; | |
| 13095 | + interfaceFunction.propertyIndex = shape.ix; | |
| 13096 | + interfaceFunction.nm = shape.nm; | |
| 13097 | + interfaceFunction.mn = shape.mn; | |
| 13098 | + return interfaceFunction; | |
| 13099 | + } | |
| 13100 | + function fillInterfaceFactory(shape, view, propertyGroup) { | |
| 13101 | + function interfaceFunction(val) { | |
| 13102 | + if (val === "Color" || val === "color") return interfaceFunction.color; | |
| 13103 | + if (val === "Opacity" || val === "opacity") return interfaceFunction.opacity; | |
| 13104 | + return null; | |
| 13105 | + } | |
| 13106 | + Object.defineProperties(interfaceFunction, { | |
| 13107 | + color: { get: ExpressionPropertyInterface(view.c) }, | |
| 13108 | + opacity: { get: ExpressionPropertyInterface(view.o) }, | |
| 13109 | + _name: { value: shape.nm }, | |
| 13110 | + mn: { value: shape.mn } | |
| 13111 | + }); | |
| 13112 | + view.c.setGroupProperty(PropertyInterface("Color", propertyGroup)); | |
| 13113 | + view.o.setGroupProperty(PropertyInterface("Opacity", propertyGroup)); | |
| 13114 | + return interfaceFunction; | |
| 13115 | + } | |
| 13116 | + function gradientFillInterfaceFactory(shape, view, propertyGroup) { | |
| 13117 | + function interfaceFunction(val) { | |
| 13118 | + if (val === "Start Point" || val === "start point") return interfaceFunction.startPoint; | |
| 13119 | + if (val === "End Point" || val === "end point") return interfaceFunction.endPoint; | |
| 13120 | + if (val === "Opacity" || val === "opacity") return interfaceFunction.opacity; | |
| 13121 | + return null; | |
| 13122 | + } | |
| 13123 | + Object.defineProperties(interfaceFunction, { | |
| 13124 | + startPoint: { get: ExpressionPropertyInterface(view.s) }, | |
| 13125 | + endPoint: { get: ExpressionPropertyInterface(view.e) }, | |
| 13126 | + opacity: { get: ExpressionPropertyInterface(view.o) }, | |
| 13127 | + type: { get: function get() { | |
| 13128 | + return "a"; | |
| 13129 | + } }, | |
| 13130 | + _name: { value: shape.nm }, | |
| 13131 | + mn: { value: shape.mn } | |
| 13132 | + }); | |
| 13133 | + view.s.setGroupProperty(PropertyInterface("Start Point", propertyGroup)); | |
| 13134 | + view.e.setGroupProperty(PropertyInterface("End Point", propertyGroup)); | |
| 13135 | + view.o.setGroupProperty(PropertyInterface("Opacity", propertyGroup)); | |
| 13136 | + return interfaceFunction; | |
| 13137 | + } | |
| 13138 | + function defaultInterfaceFactory() { | |
| 13139 | + function interfaceFunction() { | |
| 13140 | + return null; | |
| 13141 | + } | |
| 13142 | + return interfaceFunction; | |
| 13143 | + } | |
| 13144 | + function strokeInterfaceFactory(shape, view, propertyGroup) { | |
| 13145 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13146 | + var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup); | |
| 13147 | + function addPropertyToDashOb(i) { | |
| 13148 | + Object.defineProperty(dashOb, shape.d[i].nm, { get: ExpressionPropertyInterface(view.d.dataProps[i].p) }); | |
| 13149 | + } | |
| 13150 | + var i; | |
| 13151 | + var len = shape.d ? shape.d.length : 0; | |
| 13152 | + var dashOb = {}; | |
| 13153 | + for (i = 0; i < len; i += 1) { | |
| 13154 | + addPropertyToDashOb(i); | |
| 13155 | + view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup); | |
| 13156 | + } | |
| 13157 | + function interfaceFunction(val) { | |
| 13158 | + if (val === "Color" || val === "color") return interfaceFunction.color; | |
| 13159 | + if (val === "Opacity" || val === "opacity") return interfaceFunction.opacity; | |
| 13160 | + if (val === "Stroke Width" || val === "stroke width") return interfaceFunction.strokeWidth; | |
| 13161 | + return null; | |
| 13162 | + } | |
| 13163 | + Object.defineProperties(interfaceFunction, { | |
| 13164 | + color: { get: ExpressionPropertyInterface(view.c) }, | |
| 13165 | + opacity: { get: ExpressionPropertyInterface(view.o) }, | |
| 13166 | + strokeWidth: { get: ExpressionPropertyInterface(view.w) }, | |
| 13167 | + dash: { get: function get() { | |
| 13168 | + return dashOb; | |
| 13169 | + } }, | |
| 13170 | + _name: { value: shape.nm }, | |
| 13171 | + mn: { value: shape.mn } | |
| 13172 | + }); | |
| 13173 | + view.c.setGroupProperty(PropertyInterface("Color", _propertyGroup)); | |
| 13174 | + view.o.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); | |
| 13175 | + view.w.setGroupProperty(PropertyInterface("Stroke Width", _propertyGroup)); | |
| 13176 | + return interfaceFunction; | |
| 13177 | + } | |
| 13178 | + function trimInterfaceFactory(shape, view, propertyGroup) { | |
| 13179 | + function interfaceFunction(val) { | |
| 13180 | + if (val === shape.e.ix || val === "End" || val === "end") return interfaceFunction.end; | |
| 13181 | + if (val === shape.s.ix) return interfaceFunction.start; | |
| 13182 | + if (val === shape.o.ix) return interfaceFunction.offset; | |
| 13183 | + return null; | |
| 13184 | + } | |
| 13185 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13186 | + interfaceFunction.propertyIndex = shape.ix; | |
| 13187 | + view.s.setGroupProperty(PropertyInterface("Start", _propertyGroup)); | |
| 13188 | + view.e.setGroupProperty(PropertyInterface("End", _propertyGroup)); | |
| 13189 | + view.o.setGroupProperty(PropertyInterface("Offset", _propertyGroup)); | |
| 13190 | + interfaceFunction.propertyIndex = shape.ix; | |
| 13191 | + interfaceFunction.propertyGroup = propertyGroup; | |
| 13192 | + Object.defineProperties(interfaceFunction, { | |
| 13193 | + start: { get: ExpressionPropertyInterface(view.s) }, | |
| 13194 | + end: { get: ExpressionPropertyInterface(view.e) }, | |
| 13195 | + offset: { get: ExpressionPropertyInterface(view.o) }, | |
| 13196 | + _name: { value: shape.nm } | |
| 13197 | + }); | |
| 13198 | + interfaceFunction.mn = shape.mn; | |
| 13199 | + return interfaceFunction; | |
| 13200 | + } | |
| 13201 | + function transformInterfaceFactory(shape, view, propertyGroup) { | |
| 13202 | + function interfaceFunction(value) { | |
| 13203 | + if (shape.a.ix === value || value === "Anchor Point") return interfaceFunction.anchorPoint; | |
| 13204 | + if (shape.o.ix === value || value === "Opacity") return interfaceFunction.opacity; | |
| 13205 | + if (shape.p.ix === value || value === "Position") return interfaceFunction.position; | |
| 13206 | + if (shape.r.ix === value || value === "Rotation" || value === "ADBE Vector Rotation") return interfaceFunction.rotation; | |
| 13207 | + if (shape.s.ix === value || value === "Scale") return interfaceFunction.scale; | |
| 13208 | + if (shape.sk && shape.sk.ix === value || value === "Skew") return interfaceFunction.skew; | |
| 13209 | + if (shape.sa && shape.sa.ix === value || value === "Skew Axis") return interfaceFunction.skewAxis; | |
| 13210 | + return null; | |
| 13211 | + } | |
| 13212 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13213 | + view.transform.mProps.o.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); | |
| 13214 | + view.transform.mProps.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); | |
| 13215 | + view.transform.mProps.a.setGroupProperty(PropertyInterface("Anchor Point", _propertyGroup)); | |
| 13216 | + view.transform.mProps.s.setGroupProperty(PropertyInterface("Scale", _propertyGroup)); | |
| 13217 | + view.transform.mProps.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); | |
| 13218 | + if (view.transform.mProps.sk) { | |
| 13219 | + view.transform.mProps.sk.setGroupProperty(PropertyInterface("Skew", _propertyGroup)); | |
| 13220 | + view.transform.mProps.sa.setGroupProperty(PropertyInterface("Skew Angle", _propertyGroup)); | |
| 13221 | + } | |
| 13222 | + view.transform.op.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); | |
| 13223 | + Object.defineProperties(interfaceFunction, { | |
| 13224 | + opacity: { get: ExpressionPropertyInterface(view.transform.mProps.o) }, | |
| 13225 | + position: { get: ExpressionPropertyInterface(view.transform.mProps.p) }, | |
| 13226 | + anchorPoint: { get: ExpressionPropertyInterface(view.transform.mProps.a) }, | |
| 13227 | + scale: { get: ExpressionPropertyInterface(view.transform.mProps.s) }, | |
| 13228 | + rotation: { get: ExpressionPropertyInterface(view.transform.mProps.r) }, | |
| 13229 | + skew: { get: ExpressionPropertyInterface(view.transform.mProps.sk) }, | |
| 13230 | + skewAxis: { get: ExpressionPropertyInterface(view.transform.mProps.sa) }, | |
| 13231 | + _name: { value: shape.nm } | |
| 13232 | + }); | |
| 13233 | + interfaceFunction.ty = "tr"; | |
| 13234 | + interfaceFunction.mn = shape.mn; | |
| 13235 | + interfaceFunction.propertyGroup = propertyGroup; | |
| 13236 | + return interfaceFunction; | |
| 13237 | + } | |
| 13238 | + function ellipseInterfaceFactory(shape, view, propertyGroup) { | |
| 13239 | + function interfaceFunction(value) { | |
| 13240 | + if (shape.p.ix === value) return interfaceFunction.position; | |
| 13241 | + if (shape.s.ix === value) return interfaceFunction.size; | |
| 13242 | + return null; | |
| 13243 | + } | |
| 13244 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13245 | + interfaceFunction.propertyIndex = shape.ix; | |
| 13246 | + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; | |
| 13247 | + prop.s.setGroupProperty(PropertyInterface("Size", _propertyGroup)); | |
| 13248 | + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); | |
| 13249 | + Object.defineProperties(interfaceFunction, { | |
| 13250 | + size: { get: ExpressionPropertyInterface(prop.s) }, | |
| 13251 | + position: { get: ExpressionPropertyInterface(prop.p) }, | |
| 13252 | + _name: { value: shape.nm } | |
| 13253 | + }); | |
| 13254 | + interfaceFunction.mn = shape.mn; | |
| 13255 | + return interfaceFunction; | |
| 13256 | + } | |
| 13257 | + function starInterfaceFactory(shape, view, propertyGroup) { | |
| 13258 | + function interfaceFunction(value) { | |
| 13259 | + if (shape.p.ix === value) return interfaceFunction.position; | |
| 13260 | + if (shape.r.ix === value) return interfaceFunction.rotation; | |
| 13261 | + if (shape.pt.ix === value) return interfaceFunction.points; | |
| 13262 | + if (shape.or.ix === value || value === "ADBE Vector Star Outer Radius") return interfaceFunction.outerRadius; | |
| 13263 | + if (shape.os.ix === value) return interfaceFunction.outerRoundness; | |
| 13264 | + if (shape.ir && (shape.ir.ix === value || value === "ADBE Vector Star Inner Radius")) return interfaceFunction.innerRadius; | |
| 13265 | + if (shape.is && shape.is.ix === value) return interfaceFunction.innerRoundness; | |
| 13266 | + return null; | |
| 13267 | + } | |
| 13268 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13269 | + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; | |
| 13270 | + interfaceFunction.propertyIndex = shape.ix; | |
| 13271 | + prop.or.setGroupProperty(PropertyInterface("Outer Radius", _propertyGroup)); | |
| 13272 | + prop.os.setGroupProperty(PropertyInterface("Outer Roundness", _propertyGroup)); | |
| 13273 | + prop.pt.setGroupProperty(PropertyInterface("Points", _propertyGroup)); | |
| 13274 | + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); | |
| 13275 | + prop.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); | |
| 13276 | + if (shape.ir) { | |
| 13277 | + prop.ir.setGroupProperty(PropertyInterface("Inner Radius", _propertyGroup)); | |
| 13278 | + prop.is.setGroupProperty(PropertyInterface("Inner Roundness", _propertyGroup)); | |
| 13279 | + } | |
| 13280 | + Object.defineProperties(interfaceFunction, { | |
| 13281 | + position: { get: ExpressionPropertyInterface(prop.p) }, | |
| 13282 | + rotation: { get: ExpressionPropertyInterface(prop.r) }, | |
| 13283 | + points: { get: ExpressionPropertyInterface(prop.pt) }, | |
| 13284 | + outerRadius: { get: ExpressionPropertyInterface(prop.or) }, | |
| 13285 | + outerRoundness: { get: ExpressionPropertyInterface(prop.os) }, | |
| 13286 | + innerRadius: { get: ExpressionPropertyInterface(prop.ir) }, | |
| 13287 | + innerRoundness: { get: ExpressionPropertyInterface(prop.is) }, | |
| 13288 | + _name: { value: shape.nm } | |
| 13289 | + }); | |
| 13290 | + interfaceFunction.mn = shape.mn; | |
| 13291 | + return interfaceFunction; | |
| 13292 | + } | |
| 13293 | + function rectInterfaceFactory(shape, view, propertyGroup) { | |
| 13294 | + function interfaceFunction(value) { | |
| 13295 | + if (shape.p.ix === value) return interfaceFunction.position; | |
| 13296 | + if (shape.r.ix === value) return interfaceFunction.roundness; | |
| 13297 | + if (shape.s.ix === value || value === "Size" || value === "ADBE Vector Rect Size") return interfaceFunction.size; | |
| 13298 | + return null; | |
| 13299 | + } | |
| 13300 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13301 | + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; | |
| 13302 | + interfaceFunction.propertyIndex = shape.ix; | |
| 13303 | + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); | |
| 13304 | + prop.s.setGroupProperty(PropertyInterface("Size", _propertyGroup)); | |
| 13305 | + prop.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); | |
| 13306 | + Object.defineProperties(interfaceFunction, { | |
| 13307 | + position: { get: ExpressionPropertyInterface(prop.p) }, | |
| 13308 | + roundness: { get: ExpressionPropertyInterface(prop.r) }, | |
| 13309 | + size: { get: ExpressionPropertyInterface(prop.s) }, | |
| 13310 | + _name: { value: shape.nm } | |
| 13311 | + }); | |
| 13312 | + interfaceFunction.mn = shape.mn; | |
| 13313 | + return interfaceFunction; | |
| 13314 | + } | |
| 13315 | + function roundedInterfaceFactory(shape, view, propertyGroup) { | |
| 13316 | + function interfaceFunction(value) { | |
| 13317 | + if (shape.r.ix === value || value === "Round Corners 1") return interfaceFunction.radius; | |
| 13318 | + return null; | |
| 13319 | + } | |
| 13320 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13321 | + var prop = view; | |
| 13322 | + interfaceFunction.propertyIndex = shape.ix; | |
| 13323 | + prop.rd.setGroupProperty(PropertyInterface("Radius", _propertyGroup)); | |
| 13324 | + Object.defineProperties(interfaceFunction, { | |
| 13325 | + radius: { get: ExpressionPropertyInterface(prop.rd) }, | |
| 13326 | + _name: { value: shape.nm } | |
| 13327 | + }); | |
| 13328 | + interfaceFunction.mn = shape.mn; | |
| 13329 | + return interfaceFunction; | |
| 13330 | + } | |
| 13331 | + function repeaterInterfaceFactory(shape, view, propertyGroup) { | |
| 13332 | + function interfaceFunction(value) { | |
| 13333 | + if (shape.c.ix === value || value === "Copies") return interfaceFunction.copies; | |
| 13334 | + if (shape.o.ix === value || value === "Offset") return interfaceFunction.offset; | |
| 13335 | + return null; | |
| 13336 | + } | |
| 13337 | + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 13338 | + var prop = view; | |
| 13339 | + interfaceFunction.propertyIndex = shape.ix; | |
| 13340 | + prop.c.setGroupProperty(PropertyInterface("Copies", _propertyGroup)); | |
| 13341 | + prop.o.setGroupProperty(PropertyInterface("Offset", _propertyGroup)); | |
| 13342 | + Object.defineProperties(interfaceFunction, { | |
| 13343 | + copies: { get: ExpressionPropertyInterface(prop.c) }, | |
| 13344 | + offset: { get: ExpressionPropertyInterface(prop.o) }, | |
| 13345 | + _name: { value: shape.nm } | |
| 13346 | + }); | |
| 13347 | + interfaceFunction.mn = shape.mn; | |
| 13348 | + return interfaceFunction; | |
| 13349 | + } | |
| 13350 | + return function(shapes, view, propertyGroup) { | |
| 13351 | + var interfaces; | |
| 13352 | + function _interfaceFunction(value) { | |
| 13353 | + if (typeof value === "number") { | |
| 13354 | + value = value === void 0 ? 1 : value; | |
| 13355 | + if (value === 0) return propertyGroup; | |
| 13356 | + return interfaces[value - 1]; | |
| 13357 | + } | |
| 13358 | + var i = 0; | |
| 13359 | + var len = interfaces.length; | |
| 13360 | + while (i < len) { | |
| 13361 | + if (interfaces[i]._name === value) return interfaces[i]; | |
| 13362 | + i += 1; | |
| 13363 | + } | |
| 13364 | + return null; | |
| 13365 | + } | |
| 13366 | + function parentGroupWrapper() { | |
| 13367 | + return propertyGroup; | |
| 13368 | + } | |
| 13369 | + _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper); | |
| 13370 | + interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup); | |
| 13371 | + _interfaceFunction.numProperties = interfaces.length; | |
| 13372 | + _interfaceFunction._name = "Contents"; | |
| 13373 | + return _interfaceFunction; | |
| 13374 | + }; | |
| 13375 | + }(); | |
| 13376 | + var TextExpressionInterface = function() { | |
| 13377 | + return function(elem) { | |
| 13378 | + var _sourceText; | |
| 13379 | + function _thisLayerFunction(name) { | |
| 13380 | + switch (name) { | |
| 13381 | + case "ADBE Text Document": return _thisLayerFunction.sourceText; | |
| 13382 | + default: return null; | |
| 13383 | + } | |
| 13384 | + } | |
| 13385 | + Object.defineProperty(_thisLayerFunction, "sourceText", { get: function get() { | |
| 13386 | + elem.textProperty.getValue(); | |
| 13387 | + var stringValue = elem.textProperty.currentData.t; | |
| 13388 | + if (!_sourceText || stringValue !== _sourceText.value) { | |
| 13389 | + _sourceText = new String(stringValue); | |
| 13390 | + _sourceText.value = stringValue || new String(stringValue); | |
| 13391 | + Object.defineProperty(_sourceText, "style", { get: function get() { | |
| 13392 | + return { fillColor: elem.textProperty.currentData.fc }; | |
| 13393 | + } }); | |
| 13394 | + } | |
| 13395 | + return _sourceText; | |
| 13396 | + } }); | |
| 13397 | + return _thisLayerFunction; | |
| 13398 | + }; | |
| 13399 | + }(); | |
| 13400 | + function _typeof(o) { | |
| 13401 | + "@babel/helpers - typeof"; | |
| 13402 | + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) { | |
| 13403 | + return typeof o; | |
| 13404 | + } : function(o) { | |
| 13405 | + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; | |
| 13406 | + }, _typeof(o); | |
| 13407 | + } | |
| 13408 | + var FootageInterface = function() { | |
| 13409 | + var outlineInterfaceFactory = function outlineInterfaceFactory(elem) { | |
| 13410 | + var currentPropertyName = ""; | |
| 13411 | + var currentProperty = elem.getFootageData(); | |
| 13412 | + function init() { | |
| 13413 | + currentPropertyName = ""; | |
| 13414 | + currentProperty = elem.getFootageData(); | |
| 13415 | + return searchProperty; | |
| 13416 | + } | |
| 13417 | + function searchProperty(value) { | |
| 13418 | + if (currentProperty[value]) { | |
| 13419 | + currentPropertyName = value; | |
| 13420 | + currentProperty = currentProperty[value]; | |
| 13421 | + if (_typeof(currentProperty) === "object") return searchProperty; | |
| 13422 | + return currentProperty; | |
| 13423 | + } | |
| 13424 | + var propertyNameIndex = value.indexOf(currentPropertyName); | |
| 13425 | + if (propertyNameIndex !== -1) { | |
| 13426 | + var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10); | |
| 13427 | + currentProperty = currentProperty[index]; | |
| 13428 | + if (_typeof(currentProperty) === "object") return searchProperty; | |
| 13429 | + return currentProperty; | |
| 13430 | + } | |
| 13431 | + return ""; | |
| 13432 | + } | |
| 13433 | + return init; | |
| 13434 | + }; | |
| 13435 | + var dataInterfaceFactory = function dataInterfaceFactory(elem) { | |
| 13436 | + function interfaceFunction(value) { | |
| 13437 | + if (value === "Outline") return interfaceFunction.outlineInterface(); | |
| 13438 | + return null; | |
| 13439 | + } | |
| 13440 | + interfaceFunction._name = "Outline"; | |
| 13441 | + interfaceFunction.outlineInterface = outlineInterfaceFactory(elem); | |
| 13442 | + return interfaceFunction; | |
| 13443 | + }; | |
| 13444 | + return function(elem) { | |
| 13445 | + function _interfaceFunction(value) { | |
| 13446 | + if (value === "Data") return _interfaceFunction.dataInterface; | |
| 13447 | + return null; | |
| 13448 | + } | |
| 13449 | + _interfaceFunction._name = "Data"; | |
| 13450 | + _interfaceFunction.dataInterface = dataInterfaceFactory(elem); | |
| 13451 | + return _interfaceFunction; | |
| 13452 | + }; | |
| 13453 | + }(); | |
| 13454 | + var interfaces = { | |
| 13455 | + layer: LayerExpressionInterface, | |
| 13456 | + effects: EffectsExpressionInterface, | |
| 13457 | + comp: CompExpressionInterface, | |
| 13458 | + shape: ShapeExpressionInterface, | |
| 13459 | + text: TextExpressionInterface, | |
| 13460 | + footage: FootageInterface | |
| 13461 | + }; | |
| 13462 | + function getInterface(type) { | |
| 13463 | + return interfaces[type] || null; | |
| 13464 | + } | |
| 13465 | + var expressionHelpers = function() { | |
| 13466 | + function searchExpressions(elem, data, prop) { | |
| 13467 | + if (data.x) { | |
| 13468 | + prop.k = true; | |
| 13469 | + prop.x = true; | |
| 13470 | + prop.initiateExpression = ExpressionManager.initiateExpression; | |
| 13471 | + prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop)); | |
| 13472 | + } | |
| 13473 | + } | |
| 13474 | + function getValueAtTime(frameNum) { | |
| 13475 | + frameNum *= this.elem.globalData.frameRate; | |
| 13476 | + frameNum -= this.offsetTime; | |
| 13477 | + if (frameNum !== this._cachingAtTime.lastFrame) { | |
| 13478 | + this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0; | |
| 13479 | + this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime); | |
| 13480 | + this._cachingAtTime.lastFrame = frameNum; | |
| 13481 | + } | |
| 13482 | + return this._cachingAtTime.value; | |
| 13483 | + } | |
| 13484 | + function getSpeedAtTime(frameNum) { | |
| 13485 | + var delta = -.01; | |
| 13486 | + var v1 = this.getValueAtTime(frameNum); | |
| 13487 | + var v2 = this.getValueAtTime(frameNum + delta); | |
| 13488 | + var speed = 0; | |
| 13489 | + if (v1.length) { | |
| 13490 | + var i; | |
| 13491 | + for (i = 0; i < v1.length; i += 1) speed += Math.pow(v2[i] - v1[i], 2); | |
| 13492 | + speed = Math.sqrt(speed) * 100; | |
| 13493 | + } else speed = 0; | |
| 13494 | + return speed; | |
| 13495 | + } | |
| 13496 | + function getVelocityAtTime(frameNum) { | |
| 13497 | + if (this.vel !== void 0) return this.vel; | |
| 13498 | + var delta = -.001; | |
| 13499 | + var v1 = this.getValueAtTime(frameNum); | |
| 13500 | + var v2 = this.getValueAtTime(frameNum + delta); | |
| 13501 | + var velocity; | |
| 13502 | + if (v1.length) { | |
| 13503 | + velocity = createTypedArray("float32", v1.length); | |
| 13504 | + var i; | |
| 13505 | + for (i = 0; i < v1.length; i += 1) velocity[i] = (v2[i] - v1[i]) / delta; | |
| 13506 | + } else velocity = (v2 - v1) / delta; | |
| 13507 | + return velocity; | |
| 13508 | + } | |
| 13509 | + function getStaticValueAtTime() { | |
| 13510 | + return this.pv; | |
| 13511 | + } | |
| 13512 | + function setGroupProperty(propertyGroup) { | |
| 13513 | + this.propertyGroup = propertyGroup; | |
| 13514 | + } | |
| 13515 | + return { | |
| 13516 | + searchExpressions, | |
| 13517 | + getSpeedAtTime, | |
| 13518 | + getVelocityAtTime, | |
| 13519 | + getValueAtTime, | |
| 13520 | + getStaticValueAtTime, | |
| 13521 | + setGroupProperty | |
| 13522 | + }; | |
| 13523 | + }(); | |
| 13524 | + function addPropertyDecorator() { | |
| 13525 | + function loopOut(type, duration, durationFlag) { | |
| 13526 | + if (!this.k || !this.keyframes) return this.pv; | |
| 13527 | + type = type ? type.toLowerCase() : ""; | |
| 13528 | + var currentFrame = this.comp.renderedFrame; | |
| 13529 | + var keyframes = this.keyframes; | |
| 13530 | + var lastKeyFrame = keyframes[keyframes.length - 1].t; | |
| 13531 | + if (currentFrame <= lastKeyFrame) return this.pv; | |
| 13532 | + var cycleDuration; | |
| 13533 | + var firstKeyFrame; | |
| 13534 | + if (!durationFlag) { | |
| 13535 | + if (!duration || duration > keyframes.length - 1) duration = keyframes.length - 1; | |
| 13536 | + firstKeyFrame = keyframes[keyframes.length - 1 - duration].t; | |
| 13537 | + cycleDuration = lastKeyFrame - firstKeyFrame; | |
| 13538 | + } else { | |
| 13539 | + if (!duration) cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip); | |
| 13540 | + else cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration); | |
| 13541 | + firstKeyFrame = lastKeyFrame - cycleDuration; | |
| 13542 | + } | |
| 13543 | + var i; | |
| 13544 | + var len; | |
| 13545 | + var ret; | |
| 13546 | + if (type === "pingpong") { | |
| 13547 | + if (Math.floor((currentFrame - firstKeyFrame) / cycleDuration) % 2 !== 0) return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); | |
| 13548 | + } else if (type === "offset") { | |
| 13549 | + var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); | |
| 13550 | + var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); | |
| 13551 | + var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); | |
| 13552 | + var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); | |
| 13553 | + if (this.pv.length) { | |
| 13554 | + ret = new Array(initV.length); | |
| 13555 | + len = ret.length; | |
| 13556 | + for (i = 0; i < len; i += 1) ret[i] = (endV[i] - initV[i]) * repeats + current[i]; | |
| 13557 | + return ret; | |
| 13558 | + } | |
| 13559 | + return (endV - initV) * repeats + current; | |
| 13560 | + } else if (type === "continue") { | |
| 13561 | + var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); | |
| 13562 | + var nextLastValue = this.getValueAtTime((lastKeyFrame - .001) / this.comp.globalData.frameRate, 0); | |
| 13563 | + if (this.pv.length) { | |
| 13564 | + ret = new Array(lastValue.length); | |
| 13565 | + len = ret.length; | |
| 13566 | + for (i = 0; i < len; i += 1) ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 5e-4; | |
| 13567 | + return ret; | |
| 13568 | + } | |
| 13569 | + return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / .001); | |
| 13570 | + } | |
| 13571 | + return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); | |
| 13572 | + } | |
| 13573 | + function loopIn(type, duration, durationFlag) { | |
| 13574 | + if (!this.k) return this.pv; | |
| 13575 | + type = type ? type.toLowerCase() : ""; | |
| 13576 | + var currentFrame = this.comp.renderedFrame; | |
| 13577 | + var keyframes = this.keyframes; | |
| 13578 | + var firstKeyFrame = keyframes[0].t; | |
| 13579 | + if (currentFrame >= firstKeyFrame) return this.pv; | |
| 13580 | + var cycleDuration; | |
| 13581 | + var lastKeyFrame; | |
| 13582 | + if (!durationFlag) { | |
| 13583 | + if (!duration || duration > keyframes.length - 1) duration = keyframes.length - 1; | |
| 13584 | + lastKeyFrame = keyframes[duration].t; | |
| 13585 | + cycleDuration = lastKeyFrame - firstKeyFrame; | |
| 13586 | + } else { | |
| 13587 | + if (!duration) cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame); | |
| 13588 | + else cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration); | |
| 13589 | + lastKeyFrame = firstKeyFrame + cycleDuration; | |
| 13590 | + } | |
| 13591 | + var i; | |
| 13592 | + var len; | |
| 13593 | + var ret; | |
| 13594 | + if (type === "pingpong") { | |
| 13595 | + if (Math.floor((firstKeyFrame - currentFrame) / cycleDuration) % 2 === 0) return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); | |
| 13596 | + } else if (type === "offset") { | |
| 13597 | + var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); | |
| 13598 | + var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); | |
| 13599 | + var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); | |
| 13600 | + var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1; | |
| 13601 | + if (this.pv.length) { | |
| 13602 | + ret = new Array(initV.length); | |
| 13603 | + len = ret.length; | |
| 13604 | + for (i = 0; i < len; i += 1) ret[i] = current[i] - (endV[i] - initV[i]) * repeats; | |
| 13605 | + return ret; | |
| 13606 | + } | |
| 13607 | + return current - (endV - initV) * repeats; | |
| 13608 | + } else if (type === "continue") { | |
| 13609 | + var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); | |
| 13610 | + var nextFirstValue = this.getValueAtTime((firstKeyFrame + .001) / this.comp.globalData.frameRate, 0); | |
| 13611 | + if (this.pv.length) { | |
| 13612 | + ret = new Array(firstValue.length); | |
| 13613 | + len = ret.length; | |
| 13614 | + for (i = 0; i < len; i += 1) ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / .001; | |
| 13615 | + return ret; | |
| 13616 | + } | |
| 13617 | + return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / .001; | |
| 13618 | + } | |
| 13619 | + return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); | |
| 13620 | + } | |
| 13621 | + function smooth(width, samples) { | |
| 13622 | + if (!this.k) return this.pv; | |
| 13623 | + width = (width || .4) * .5; | |
| 13624 | + samples = Math.floor(samples || 5); | |
| 13625 | + if (samples <= 1) return this.pv; | |
| 13626 | + var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate; | |
| 13627 | + var initFrame = currentTime - width; | |
| 13628 | + var endFrame = currentTime + width; | |
| 13629 | + var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1; | |
| 13630 | + var i = 0; | |
| 13631 | + var j = 0; | |
| 13632 | + var value; | |
| 13633 | + if (this.pv.length) value = createTypedArray("float32", this.pv.length); | |
| 13634 | + else value = 0; | |
| 13635 | + var sampleValue; | |
| 13636 | + while (i < samples) { | |
| 13637 | + sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency); | |
| 13638 | + if (this.pv.length) for (j = 0; j < this.pv.length; j += 1) value[j] += sampleValue[j]; | |
| 13639 | + else value += sampleValue; | |
| 13640 | + i += 1; | |
| 13641 | + } | |
| 13642 | + if (this.pv.length) for (j = 0; j < this.pv.length; j += 1) value[j] /= samples; | |
| 13643 | + else value /= samples; | |
| 13644 | + return value; | |
| 13645 | + } | |
| 13646 | + function getTransformValueAtTime(time) { | |
| 13647 | + if (!this._transformCachingAtTime) this._transformCachingAtTime = { v: new Matrix() }; | |
| 13648 | + var matrix = this._transformCachingAtTime.v; | |
| 13649 | + matrix.cloneFromProps(this.pre.props); | |
| 13650 | + if (this.appliedTransformations < 1) { | |
| 13651 | + var anchor = this.a.getValueAtTime(time); | |
| 13652 | + matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult); | |
| 13653 | + } | |
| 13654 | + if (this.appliedTransformations < 2) { | |
| 13655 | + var scale = this.s.getValueAtTime(time); | |
| 13656 | + matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult); | |
| 13657 | + } | |
| 13658 | + if (this.sk && this.appliedTransformations < 3) { | |
| 13659 | + var skew = this.sk.getValueAtTime(time); | |
| 13660 | + var skewAxis = this.sa.getValueAtTime(time); | |
| 13661 | + matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult); | |
| 13662 | + } | |
| 13663 | + if (this.r && this.appliedTransformations < 4) { | |
| 13664 | + var rotation = this.r.getValueAtTime(time); | |
| 13665 | + matrix.rotate(-rotation * this.r.mult); | |
| 13666 | + } else if (!this.r && this.appliedTransformations < 4) { | |
| 13667 | + var rotationZ = this.rz.getValueAtTime(time); | |
| 13668 | + var rotationY = this.ry.getValueAtTime(time); | |
| 13669 | + var rotationX = this.rx.getValueAtTime(time); | |
| 13670 | + var orientation = this.or.getValueAtTime(time); | |
| 13671 | + matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult); | |
| 13672 | + } | |
| 13673 | + if (this.data.p && this.data.p.s) { | |
| 13674 | + var positionX = this.px.getValueAtTime(time); | |
| 13675 | + var positionY = this.py.getValueAtTime(time); | |
| 13676 | + if (this.data.p.z) { | |
| 13677 | + var positionZ = this.pz.getValueAtTime(time); | |
| 13678 | + matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult); | |
| 13679 | + } else matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0); | |
| 13680 | + } else { | |
| 13681 | + var position = this.p.getValueAtTime(time); | |
| 13682 | + matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult); | |
| 13683 | + } | |
| 13684 | + return matrix; | |
| 13685 | + } | |
| 13686 | + function getTransformStaticValueAtTime() { | |
| 13687 | + return this.v.clone(new Matrix()); | |
| 13688 | + } | |
| 13689 | + var getTransformProperty = TransformPropertyFactory.getTransformProperty; | |
| 13690 | + TransformPropertyFactory.getTransformProperty = function(elem, data, container) { | |
| 13691 | + var prop = getTransformProperty(elem, data, container); | |
| 13692 | + if (prop.dynamicProperties.length) prop.getValueAtTime = getTransformValueAtTime.bind(prop); | |
| 13693 | + else prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop); | |
| 13694 | + prop.setGroupProperty = expressionHelpers.setGroupProperty; | |
| 13695 | + return prop; | |
| 13696 | + }; | |
| 13697 | + var propertyGetProp = PropertyFactory.getProp; | |
| 13698 | + PropertyFactory.getProp = function(elem, data, type, mult, container) { | |
| 13699 | + var prop = propertyGetProp(elem, data, type, mult, container); | |
| 13700 | + if (prop.kf) prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop); | |
| 13701 | + else prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop); | |
| 13702 | + prop.setGroupProperty = expressionHelpers.setGroupProperty; | |
| 13703 | + prop.loopOut = loopOut; | |
| 13704 | + prop.loopIn = loopIn; | |
| 13705 | + prop.smooth = smooth; | |
| 13706 | + prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop); | |
| 13707 | + prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop); | |
| 13708 | + prop.numKeys = data.a === 1 ? data.k.length : 0; | |
| 13709 | + prop.propertyIndex = data.ix; | |
| 13710 | + var value = 0; | |
| 13711 | + if (type !== 0) value = createTypedArray("float32", data.a === 1 ? data.k[0].s.length : data.k.length); | |
| 13712 | + prop._cachingAtTime = { | |
| 13713 | + lastFrame: initialDefaultFrame, | |
| 13714 | + lastIndex: 0, | |
| 13715 | + value | |
| 13716 | + }; | |
| 13717 | + expressionHelpers.searchExpressions(elem, data, prop); | |
| 13718 | + if (prop.k) container.addDynamicProperty(prop); | |
| 13719 | + return prop; | |
| 13720 | + }; | |
| 13721 | + function getShapeValueAtTime(frameNum) { | |
| 13722 | + if (!this._cachingAtTime) this._cachingAtTime = { | |
| 13723 | + shapeValue: shapePool.clone(this.pv), | |
| 13724 | + lastIndex: 0, | |
| 13725 | + lastTime: initialDefaultFrame | |
| 13726 | + }; | |
| 13727 | + frameNum *= this.elem.globalData.frameRate; | |
| 13728 | + frameNum -= this.offsetTime; | |
| 13729 | + if (frameNum !== this._cachingAtTime.lastTime) { | |
| 13730 | + this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0; | |
| 13731 | + this._cachingAtTime.lastTime = frameNum; | |
| 13732 | + this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime); | |
| 13733 | + } | |
| 13734 | + return this._cachingAtTime.shapeValue; | |
| 13735 | + } | |
| 13736 | + var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction(); | |
| 13737 | + var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction(); | |
| 13738 | + function ShapeExpressions() {} | |
| 13739 | + ShapeExpressions.prototype = { | |
| 13740 | + vertices: function vertices(prop, time) { | |
| 13741 | + if (this.k) this.getValue(); | |
| 13742 | + var shapePath = this.v; | |
| 13743 | + if (time !== void 0) shapePath = this.getValueAtTime(time, 0); | |
| 13744 | + var i; | |
| 13745 | + var len = shapePath._length; | |
| 13746 | + var vertices = shapePath[prop]; | |
| 13747 | + var points = shapePath.v; | |
| 13748 | + var arr = createSizedArray(len); | |
| 13749 | + for (i = 0; i < len; i += 1) if (prop === "i" || prop === "o") arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]]; | |
| 13750 | + else arr[i] = [vertices[i][0], vertices[i][1]]; | |
| 13751 | + return arr; | |
| 13752 | + }, | |
| 13753 | + points: function points(time) { | |
| 13754 | + return this.vertices("v", time); | |
| 13755 | + }, | |
| 13756 | + inTangents: function inTangents(time) { | |
| 13757 | + return this.vertices("i", time); | |
| 13758 | + }, | |
| 13759 | + outTangents: function outTangents(time) { | |
| 13760 | + return this.vertices("o", time); | |
| 13761 | + }, | |
| 13762 | + isClosed: function isClosed() { | |
| 13763 | + return this.v.c; | |
| 13764 | + }, | |
| 13765 | + pointOnPath: function pointOnPath(perc, time) { | |
| 13766 | + var shapePath = this.v; | |
| 13767 | + if (time !== void 0) shapePath = this.getValueAtTime(time, 0); | |
| 13768 | + if (!this._segmentsLength) this._segmentsLength = bez.getSegmentsLength(shapePath); | |
| 13769 | + var segmentsLength = this._segmentsLength; | |
| 13770 | + var lengths = segmentsLength.lengths; | |
| 13771 | + var lengthPos = segmentsLength.totalLength * perc; | |
| 13772 | + var i = 0; | |
| 13773 | + var len = lengths.length; | |
| 13774 | + var accumulatedLength = 0; | |
| 13775 | + var pt; | |
| 13776 | + while (i < len) { | |
| 13777 | + if (accumulatedLength + lengths[i].addedLength > lengthPos) { | |
| 13778 | + var initIndex = i; | |
| 13779 | + var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1; | |
| 13780 | + var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength; | |
| 13781 | + pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]); | |
| 13782 | + break; | |
| 13783 | + } else accumulatedLength += lengths[i].addedLength; | |
| 13784 | + i += 1; | |
| 13785 | + } | |
| 13786 | + if (!pt) pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]]; | |
| 13787 | + return pt; | |
| 13788 | + }, | |
| 13789 | + vectorOnPath: function vectorOnPath(perc, time, vectorType) { | |
| 13790 | + if (perc == 1) perc = this.v.c; | |
| 13791 | + else if (perc == 0) perc = .999; | |
| 13792 | + var pt1 = this.pointOnPath(perc, time); | |
| 13793 | + var pt2 = this.pointOnPath(perc + .001, time); | |
| 13794 | + var xLength = pt2[0] - pt1[0]; | |
| 13795 | + var yLength = pt2[1] - pt1[1]; | |
| 13796 | + var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2)); | |
| 13797 | + if (magnitude === 0) return [0, 0]; | |
| 13798 | + return vectorType === "tangent" ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude]; | |
| 13799 | + }, | |
| 13800 | + tangentOnPath: function tangentOnPath(perc, time) { | |
| 13801 | + return this.vectorOnPath(perc, time, "tangent"); | |
| 13802 | + }, | |
| 13803 | + normalOnPath: function normalOnPath(perc, time) { | |
| 13804 | + return this.vectorOnPath(perc, time, "normal"); | |
| 13805 | + }, | |
| 13806 | + setGroupProperty: expressionHelpers.setGroupProperty, | |
| 13807 | + getValueAtTime: expressionHelpers.getStaticValueAtTime | |
| 13808 | + }; | |
| 13809 | + extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction); | |
| 13810 | + extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction); | |
| 13811 | + KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime; | |
| 13812 | + KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression; | |
| 13813 | + var propertyGetShapeProp = ShapePropertyFactory.getShapeProp; | |
| 13814 | + ShapePropertyFactory.getShapeProp = function(elem, data, type, arr, trims) { | |
| 13815 | + var prop = propertyGetShapeProp(elem, data, type, arr, trims); | |
| 13816 | + prop.propertyIndex = data.ix; | |
| 13817 | + prop.lock = false; | |
| 13818 | + if (type === 3) expressionHelpers.searchExpressions(elem, data.pt, prop); | |
| 13819 | + else if (type === 4) expressionHelpers.searchExpressions(elem, data.ks, prop); | |
| 13820 | + if (prop.k) elem.addDynamicProperty(prop); | |
| 13821 | + return prop; | |
| 13822 | + }; | |
| 13823 | + } | |
| 13824 | + function initialize$1() { | |
| 13825 | + addPropertyDecorator(); | |
| 13826 | + } | |
| 13827 | + function addDecorator() { | |
| 13828 | + function searchExpressions() { | |
| 13829 | + if (this.data.d.x) { | |
| 13830 | + this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this); | |
| 13831 | + this.addEffect(this.getExpressionValue.bind(this)); | |
| 13832 | + return true; | |
| 13833 | + } | |
| 13834 | + return null; | |
| 13835 | + } | |
| 13836 | + TextProperty.prototype.getExpressionValue = function(currentValue, text) { | |
| 13837 | + var newValue = this.calculateExpression(text); | |
| 13838 | + if (currentValue.t !== newValue) { | |
| 13839 | + var newData = {}; | |
| 13840 | + this.copyData(newData, currentValue); | |
| 13841 | + newData.t = newValue.toString(); | |
| 13842 | + newData.__complete = false; | |
| 13843 | + return newData; | |
| 13844 | + } | |
| 13845 | + return currentValue; | |
| 13846 | + }; | |
| 13847 | + TextProperty.prototype.searchProperty = function() { | |
| 13848 | + var isKeyframed = this.searchKeyframes(); | |
| 13849 | + var hasExpressions = this.searchExpressions(); | |
| 13850 | + this.kf = isKeyframed || hasExpressions; | |
| 13851 | + return this.kf; | |
| 13852 | + }; | |
| 13853 | + TextProperty.prototype.searchExpressions = searchExpressions; | |
| 13854 | + } | |
| 13855 | + function initialize() { | |
| 13856 | + addDecorator(); | |
| 13857 | + } | |
| 13858 | + function SVGComposableEffect() {} | |
| 13859 | + SVGComposableEffect.prototype = { createMergeNode: function createMergeNode(resultId, ins) { | |
| 13860 | + var feMerge = createNS("feMerge"); | |
| 13861 | + feMerge.setAttribute("result", resultId); | |
| 13862 | + var feMergeNode; | |
| 13863 | + var i; | |
| 13864 | + for (i = 0; i < ins.length; i += 1) { | |
| 13865 | + feMergeNode = createNS("feMergeNode"); | |
| 13866 | + feMergeNode.setAttribute("in", ins[i]); | |
| 13867 | + feMerge.appendChild(feMergeNode); | |
| 13868 | + feMerge.appendChild(feMergeNode); | |
| 13869 | + } | |
| 13870 | + return feMerge; | |
| 13871 | + } }; | |
| 13872 | + var linearFilterValue = "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"; | |
| 13873 | + function SVGTintFilter(filter, filterManager, elem, id, source) { | |
| 13874 | + this.filterManager = filterManager; | |
| 13875 | + var feColorMatrix = createNS("feColorMatrix"); | |
| 13876 | + feColorMatrix.setAttribute("type", "matrix"); | |
| 13877 | + feColorMatrix.setAttribute("color-interpolation-filters", "linearRGB"); | |
| 13878 | + feColorMatrix.setAttribute("values", linearFilterValue + " 1 0"); | |
| 13879 | + this.linearFilter = feColorMatrix; | |
| 13880 | + feColorMatrix.setAttribute("result", id + "_tint_1"); | |
| 13881 | + filter.appendChild(feColorMatrix); | |
| 13882 | + feColorMatrix = createNS("feColorMatrix"); | |
| 13883 | + feColorMatrix.setAttribute("type", "matrix"); | |
| 13884 | + feColorMatrix.setAttribute("color-interpolation-filters", "sRGB"); | |
| 13885 | + feColorMatrix.setAttribute("values", "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"); | |
| 13886 | + feColorMatrix.setAttribute("result", id + "_tint_2"); | |
| 13887 | + filter.appendChild(feColorMatrix); | |
| 13888 | + this.matrixFilter = feColorMatrix; | |
| 13889 | + var feMerge = this.createMergeNode(id, [ | |
| 13890 | + source, | |
| 13891 | + id + "_tint_1", | |
| 13892 | + id + "_tint_2" | |
| 13893 | + ]); | |
| 13894 | + filter.appendChild(feMerge); | |
| 13895 | + } | |
| 13896 | + extendPrototype([SVGComposableEffect], SVGTintFilter); | |
| 13897 | + SVGTintFilter.prototype.renderFrame = function(forceRender) { | |
| 13898 | + if (forceRender || this.filterManager._mdf) { | |
| 13899 | + var colorBlack = this.filterManager.effectElements[0].p.v; | |
| 13900 | + var colorWhite = this.filterManager.effectElements[1].p.v; | |
| 13901 | + var opacity = this.filterManager.effectElements[2].p.v / 100; | |
| 13902 | + this.linearFilter.setAttribute("values", linearFilterValue + " " + opacity + " 0"); | |
| 13903 | + 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 1 0"); | |
| 13904 | + } | |
| 13905 | + }; | |
| 13906 | + function SVGFillFilter(filter, filterManager, elem, id) { | |
| 13907 | + this.filterManager = filterManager; | |
| 13908 | + var feColorMatrix = createNS("feColorMatrix"); | |
| 13909 | + feColorMatrix.setAttribute("type", "matrix"); | |
| 13910 | + feColorMatrix.setAttribute("color-interpolation-filters", "sRGB"); | |
| 13911 | + feColorMatrix.setAttribute("values", "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"); | |
| 13912 | + feColorMatrix.setAttribute("result", id); | |
| 13913 | + filter.appendChild(feColorMatrix); | |
| 13914 | + this.matrixFilter = feColorMatrix; | |
| 13915 | + } | |
| 13916 | + SVGFillFilter.prototype.renderFrame = function(forceRender) { | |
| 13917 | + if (forceRender || this.filterManager._mdf) { | |
| 13918 | + var color = this.filterManager.effectElements[2].p.v; | |
| 13919 | + var opacity = this.filterManager.effectElements[6].p.v; | |
| 13920 | + 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"); | |
| 13921 | + } | |
| 13922 | + }; | |
| 13923 | + function SVGStrokeEffect(fil, filterManager, elem) { | |
| 13924 | + this.initialized = false; | |
| 13925 | + this.filterManager = filterManager; | |
| 13926 | + this.elem = elem; | |
| 13927 | + this.paths = []; | |
| 13928 | + } | |
| 13929 | + SVGStrokeEffect.prototype.initialize = function() { | |
| 13930 | + var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes; | |
| 13931 | + var path; | |
| 13932 | + var groupPath; | |
| 13933 | + var i; | |
| 13934 | + var len; | |
| 13935 | + if (this.filterManager.effectElements[1].p.v === 1) { | |
| 13936 | + len = this.elem.maskManager.masksProperties.length; | |
| 13937 | + i = 0; | |
| 13938 | + } else { | |
| 13939 | + i = this.filterManager.effectElements[0].p.v - 1; | |
| 13940 | + len = i + 1; | |
| 13941 | + } | |
| 13942 | + groupPath = createNS("g"); | |
| 13943 | + groupPath.setAttribute("fill", "none"); | |
| 13944 | + groupPath.setAttribute("stroke-linecap", "round"); | |
| 13945 | + groupPath.setAttribute("stroke-dashoffset", 1); | |
| 13946 | + for (; i < len; i += 1) { | |
| 13947 | + path = createNS("path"); | |
| 13948 | + groupPath.appendChild(path); | |
| 13949 | + this.paths.push({ | |
| 13950 | + p: path, | |
| 13951 | + m: i | |
| 13952 | + }); | |
| 13953 | + } | |
| 13954 | + if (this.filterManager.effectElements[10].p.v === 3) { | |
| 13955 | + var mask = createNS("mask"); | |
| 13956 | + var id = createElementID(); | |
| 13957 | + mask.setAttribute("id", id); | |
| 13958 | + mask.setAttribute("mask-type", "alpha"); | |
| 13959 | + mask.appendChild(groupPath); | |
| 13960 | + this.elem.globalData.defs.appendChild(mask); | |
| 13961 | + var g = createNS("g"); | |
| 13962 | + g.setAttribute("mask", "url(" + getLocationHref() + "#" + id + ")"); | |
| 13963 | + while (elemChildren[0]) g.appendChild(elemChildren[0]); | |
| 13964 | + this.elem.layerElement.appendChild(g); | |
| 13965 | + this.masker = mask; | |
| 13966 | + groupPath.setAttribute("stroke", "#fff"); | |
| 13967 | + } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) { | |
| 13968 | + if (this.filterManager.effectElements[10].p.v === 2) { | |
| 13969 | + elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes; | |
| 13970 | + while (elemChildren.length) this.elem.layerElement.removeChild(elemChildren[0]); | |
| 13971 | + } | |
| 13972 | + this.elem.layerElement.appendChild(groupPath); | |
| 13973 | + this.elem.layerElement.removeAttribute("mask"); | |
| 13974 | + groupPath.setAttribute("stroke", "#fff"); | |
| 13975 | + } | |
| 13976 | + this.initialized = true; | |
| 13977 | + this.pathMasker = groupPath; | |
| 13978 | + }; | |
| 13979 | + SVGStrokeEffect.prototype.renderFrame = function(forceRender) { | |
| 13980 | + if (!this.initialized) this.initialize(); | |
| 13981 | + var i; | |
| 13982 | + var len = this.paths.length; | |
| 13983 | + var mask; | |
| 13984 | + var path; | |
| 13985 | + for (i = 0; i < len; i += 1) if (this.paths[i].m !== -1) { | |
| 13986 | + mask = this.elem.maskManager.viewData[this.paths[i].m]; | |
| 13987 | + path = this.paths[i].p; | |
| 13988 | + if (forceRender || this.filterManager._mdf || mask.prop._mdf) path.setAttribute("d", mask.lastPath); | |
| 13989 | + 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) { | |
| 13990 | + var dasharrayValue; | |
| 13991 | + if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) { | |
| 13992 | + var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * .01; | |
| 13993 | + var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * .01; | |
| 13994 | + var l = path.getTotalLength(); | |
| 13995 | + dasharrayValue = "0 0 0 " + l * s + " "; | |
| 13996 | + var lineLength = l * (e - s); | |
| 13997 | + var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * .01; | |
| 13998 | + var units = Math.floor(lineLength / segment); | |
| 13999 | + var j; | |
| 14000 | + for (j = 0; j < units; j += 1) dasharrayValue += "1 " + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * .01 + " "; | |
| 14001 | + dasharrayValue += "0 " + l * 10 + " 0 0"; | |
| 14002 | + } else dasharrayValue = "1 " + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * .01; | |
| 14003 | + path.setAttribute("stroke-dasharray", dasharrayValue); | |
| 14004 | + } | |
| 14005 | + } | |
| 14006 | + if (forceRender || this.filterManager.effectElements[4].p._mdf) this.pathMasker.setAttribute("stroke-width", this.filterManager.effectElements[4].p.v * 2); | |
| 14007 | + if (forceRender || this.filterManager.effectElements[6].p._mdf) this.pathMasker.setAttribute("opacity", this.filterManager.effectElements[6].p.v); | |
| 14008 | + if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) { | |
| 14009 | + if (forceRender || this.filterManager.effectElements[3].p._mdf) { | |
| 14010 | + var color = this.filterManager.effectElements[3].p.v; | |
| 14011 | + this.pathMasker.setAttribute("stroke", "rgb(" + bmFloor(color[0] * 255) + "," + bmFloor(color[1] * 255) + "," + bmFloor(color[2] * 255) + ")"); | |
| 14012 | + } | |
| 14013 | + } | |
| 14014 | + }; | |
| 14015 | + function SVGTritoneFilter(filter, filterManager, elem, id) { | |
| 14016 | + this.filterManager = filterManager; | |
| 14017 | + var feColorMatrix = createNS("feColorMatrix"); | |
| 14018 | + feColorMatrix.setAttribute("type", "matrix"); | |
| 14019 | + feColorMatrix.setAttribute("color-interpolation-filters", "linearRGB"); | |
| 14020 | + 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"); | |
| 14021 | + filter.appendChild(feColorMatrix); | |
| 14022 | + var feComponentTransfer = createNS("feComponentTransfer"); | |
| 14023 | + feComponentTransfer.setAttribute("color-interpolation-filters", "sRGB"); | |
| 14024 | + feComponentTransfer.setAttribute("result", id); | |
| 14025 | + this.matrixFilter = feComponentTransfer; | |
| 14026 | + var feFuncR = createNS("feFuncR"); | |
| 14027 | + feFuncR.setAttribute("type", "table"); | |
| 14028 | + feComponentTransfer.appendChild(feFuncR); | |
| 14029 | + this.feFuncR = feFuncR; | |
| 14030 | + var feFuncG = createNS("feFuncG"); | |
| 14031 | + feFuncG.setAttribute("type", "table"); | |
| 14032 | + feComponentTransfer.appendChild(feFuncG); | |
| 14033 | + this.feFuncG = feFuncG; | |
| 14034 | + var feFuncB = createNS("feFuncB"); | |
| 14035 | + feFuncB.setAttribute("type", "table"); | |
| 14036 | + feComponentTransfer.appendChild(feFuncB); | |
| 14037 | + this.feFuncB = feFuncB; | |
| 14038 | + filter.appendChild(feComponentTransfer); | |
| 14039 | + } | |
| 14040 | + SVGTritoneFilter.prototype.renderFrame = function(forceRender) { | |
| 14041 | + if (forceRender || this.filterManager._mdf) { | |
| 14042 | + var color1 = this.filterManager.effectElements[0].p.v; | |
| 14043 | + var color2 = this.filterManager.effectElements[1].p.v; | |
| 14044 | + var color3 = this.filterManager.effectElements[2].p.v; | |
| 14045 | + var tableR = color3[0] + " " + color2[0] + " " + color1[0]; | |
| 14046 | + var tableG = color3[1] + " " + color2[1] + " " + color1[1]; | |
| 14047 | + var tableB = color3[2] + " " + color2[2] + " " + color1[2]; | |
| 14048 | + this.feFuncR.setAttribute("tableValues", tableR); | |
| 14049 | + this.feFuncG.setAttribute("tableValues", tableG); | |
| 14050 | + this.feFuncB.setAttribute("tableValues", tableB); | |
| 14051 | + } | |
| 14052 | + }; | |
| 14053 | + function SVGProLevelsFilter(filter, filterManager, elem, id) { | |
| 14054 | + this.filterManager = filterManager; | |
| 14055 | + var effectElements = this.filterManager.effectElements; | |
| 14056 | + var feComponentTransfer = createNS("feComponentTransfer"); | |
| 14057 | + 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) this.feFuncR = this.createFeFunc("feFuncR", feComponentTransfer); | |
| 14058 | + 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) this.feFuncG = this.createFeFunc("feFuncG", feComponentTransfer); | |
| 14059 | + 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) this.feFuncB = this.createFeFunc("feFuncB", feComponentTransfer); | |
| 14060 | + 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) this.feFuncA = this.createFeFunc("feFuncA", feComponentTransfer); | |
| 14061 | + if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) { | |
| 14062 | + feComponentTransfer.setAttribute("color-interpolation-filters", "sRGB"); | |
| 14063 | + filter.appendChild(feComponentTransfer); | |
| 14064 | + } | |
| 14065 | + 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) { | |
| 14066 | + feComponentTransfer = createNS("feComponentTransfer"); | |
| 14067 | + feComponentTransfer.setAttribute("color-interpolation-filters", "sRGB"); | |
| 14068 | + feComponentTransfer.setAttribute("result", id); | |
| 14069 | + filter.appendChild(feComponentTransfer); | |
| 14070 | + this.feFuncRComposed = this.createFeFunc("feFuncR", feComponentTransfer); | |
| 14071 | + this.feFuncGComposed = this.createFeFunc("feFuncG", feComponentTransfer); | |
| 14072 | + this.feFuncBComposed = this.createFeFunc("feFuncB", feComponentTransfer); | |
| 14073 | + } | |
| 14074 | + } | |
| 14075 | + SVGProLevelsFilter.prototype.createFeFunc = function(type, feComponentTransfer) { | |
| 14076 | + var feFunc = createNS(type); | |
| 14077 | + feFunc.setAttribute("type", "table"); | |
| 14078 | + feComponentTransfer.appendChild(feFunc); | |
| 14079 | + return feFunc; | |
| 14080 | + }; | |
| 14081 | + SVGProLevelsFilter.prototype.getTableValue = function(inputBlack, inputWhite, gamma, outputBlack, outputWhite) { | |
| 14082 | + var cnt = 0; | |
| 14083 | + var segments = 256; | |
| 14084 | + var perc; | |
| 14085 | + var min = Math.min(inputBlack, inputWhite); | |
| 14086 | + var max = Math.max(inputBlack, inputWhite); | |
| 14087 | + var table = Array.call(null, { length: segments }); | |
| 14088 | + var colorValue; | |
| 14089 | + var pos = 0; | |
| 14090 | + var outputDelta = outputWhite - outputBlack; | |
| 14091 | + var inputDelta = inputWhite - inputBlack; | |
| 14092 | + while (cnt <= 256) { | |
| 14093 | + perc = cnt / 256; | |
| 14094 | + if (perc <= min) colorValue = inputDelta < 0 ? outputWhite : outputBlack; | |
| 14095 | + else if (perc >= max) colorValue = inputDelta < 0 ? outputBlack : outputWhite; | |
| 14096 | + else colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma); | |
| 14097 | + table[pos] = colorValue; | |
| 14098 | + pos += 1; | |
| 14099 | + cnt += 256 / (segments - 1); | |
| 14100 | + } | |
| 14101 | + return table.join(" "); | |
| 14102 | + }; | |
| 14103 | + SVGProLevelsFilter.prototype.renderFrame = function(forceRender) { | |
| 14104 | + if (forceRender || this.filterManager._mdf) { | |
| 14105 | + var val; | |
| 14106 | + var effectElements = this.filterManager.effectElements; | |
| 14107 | + if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) { | |
| 14108 | + val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v); | |
| 14109 | + this.feFuncRComposed.setAttribute("tableValues", val); | |
| 14110 | + this.feFuncGComposed.setAttribute("tableValues", val); | |
| 14111 | + this.feFuncBComposed.setAttribute("tableValues", val); | |
| 14112 | + } | |
| 14113 | + if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) { | |
| 14114 | + val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v); | |
| 14115 | + this.feFuncR.setAttribute("tableValues", val); | |
| 14116 | + } | |
| 14117 | + if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) { | |
| 14118 | + val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v); | |
| 14119 | + this.feFuncG.setAttribute("tableValues", val); | |
| 14120 | + } | |
| 14121 | + if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) { | |
| 14122 | + val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v); | |
| 14123 | + this.feFuncB.setAttribute("tableValues", val); | |
| 14124 | + } | |
| 14125 | + if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) { | |
| 14126 | + val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v); | |
| 14127 | + this.feFuncA.setAttribute("tableValues", val); | |
| 14128 | + } | |
| 14129 | + } | |
| 14130 | + }; | |
| 14131 | + function SVGDropShadowEffect(filter, filterManager, elem, id, source) { | |
| 14132 | + var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize; | |
| 14133 | + var filterSize = filterManager.data.fs || globalFilterSize; | |
| 14134 | + filter.setAttribute("x", filterSize.x || globalFilterSize.x); | |
| 14135 | + filter.setAttribute("y", filterSize.y || globalFilterSize.y); | |
| 14136 | + filter.setAttribute("width", filterSize.width || globalFilterSize.width); | |
| 14137 | + filter.setAttribute("height", filterSize.height || globalFilterSize.height); | |
| 14138 | + this.filterManager = filterManager; | |
| 14139 | + var feGaussianBlur = createNS("feGaussianBlur"); | |
| 14140 | + feGaussianBlur.setAttribute("in", "SourceAlpha"); | |
| 14141 | + feGaussianBlur.setAttribute("result", id + "_drop_shadow_1"); | |
| 14142 | + feGaussianBlur.setAttribute("stdDeviation", "0"); | |
| 14143 | + this.feGaussianBlur = feGaussianBlur; | |
| 14144 | + filter.appendChild(feGaussianBlur); | |
| 14145 | + var feOffset = createNS("feOffset"); | |
| 14146 | + feOffset.setAttribute("dx", "25"); | |
| 14147 | + feOffset.setAttribute("dy", "0"); | |
| 14148 | + feOffset.setAttribute("in", id + "_drop_shadow_1"); | |
| 14149 | + feOffset.setAttribute("result", id + "_drop_shadow_2"); | |
| 14150 | + this.feOffset = feOffset; | |
| 14151 | + filter.appendChild(feOffset); | |
| 14152 | + var feFlood = createNS("feFlood"); | |
| 14153 | + feFlood.setAttribute("flood-color", "#00ff00"); | |
| 14154 | + feFlood.setAttribute("flood-opacity", "1"); | |
| 14155 | + feFlood.setAttribute("result", id + "_drop_shadow_3"); | |
| 14156 | + this.feFlood = feFlood; | |
| 14157 | + filter.appendChild(feFlood); | |
| 14158 | + var feComposite = createNS("feComposite"); | |
| 14159 | + feComposite.setAttribute("in", id + "_drop_shadow_3"); | |
| 14160 | + feComposite.setAttribute("in2", id + "_drop_shadow_2"); | |
| 14161 | + feComposite.setAttribute("operator", "in"); | |
| 14162 | + feComposite.setAttribute("result", id + "_drop_shadow_4"); | |
| 14163 | + filter.appendChild(feComposite); | |
| 14164 | + var feMerge = this.createMergeNode(id, [id + "_drop_shadow_4", source]); | |
| 14165 | + filter.appendChild(feMerge); | |
| 14166 | + } | |
| 14167 | + extendPrototype([SVGComposableEffect], SVGDropShadowEffect); | |
| 14168 | + SVGDropShadowEffect.prototype.renderFrame = function(forceRender) { | |
| 14169 | + if (forceRender || this.filterManager._mdf) { | |
| 14170 | + if (forceRender || this.filterManager.effectElements[4].p._mdf) this.feGaussianBlur.setAttribute("stdDeviation", this.filterManager.effectElements[4].p.v / 4); | |
| 14171 | + if (forceRender || this.filterManager.effectElements[0].p._mdf) { | |
| 14172 | + var col = this.filterManager.effectElements[0].p.v; | |
| 14173 | + this.feFlood.setAttribute("flood-color", rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255))); | |
| 14174 | + } | |
| 14175 | + if (forceRender || this.filterManager.effectElements[1].p._mdf) this.feFlood.setAttribute("flood-opacity", this.filterManager.effectElements[1].p.v / 255); | |
| 14176 | + if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) { | |
| 14177 | + var distance = this.filterManager.effectElements[3].p.v; | |
| 14178 | + var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads; | |
| 14179 | + var x = distance * Math.cos(angle); | |
| 14180 | + var y = distance * Math.sin(angle); | |
| 14181 | + this.feOffset.setAttribute("dx", x); | |
| 14182 | + this.feOffset.setAttribute("dy", y); | |
| 14183 | + } | |
| 14184 | + } | |
| 14185 | + }; | |
| 14186 | + var _svgMatteSymbols = []; | |
| 14187 | + function SVGMatte3Effect(filterElem, filterManager, elem) { | |
| 14188 | + this.initialized = false; | |
| 14189 | + this.filterManager = filterManager; | |
| 14190 | + this.filterElem = filterElem; | |
| 14191 | + this.elem = elem; | |
| 14192 | + elem.matteElement = createNS("g"); | |
| 14193 | + elem.matteElement.appendChild(elem.layerElement); | |
| 14194 | + elem.matteElement.appendChild(elem.transformedElement); | |
| 14195 | + elem.baseElement = elem.matteElement; | |
| 14196 | + } | |
| 14197 | + SVGMatte3Effect.prototype.findSymbol = function(mask) { | |
| 14198 | + var i = 0; | |
| 14199 | + var len = _svgMatteSymbols.length; | |
| 14200 | + while (i < len) { | |
| 14201 | + if (_svgMatteSymbols[i] === mask) return _svgMatteSymbols[i]; | |
| 14202 | + i += 1; | |
| 14203 | + } | |
| 14204 | + return null; | |
| 14205 | + }; | |
| 14206 | + SVGMatte3Effect.prototype.replaceInParent = function(mask, symbolId) { | |
| 14207 | + var parentNode = mask.layerElement.parentNode; | |
| 14208 | + if (!parentNode) return; | |
| 14209 | + var children = parentNode.children; | |
| 14210 | + var i = 0; | |
| 14211 | + var len = children.length; | |
| 14212 | + while (i < len) { | |
| 14213 | + if (children[i] === mask.layerElement) break; | |
| 14214 | + i += 1; | |
| 14215 | + } | |
| 14216 | + var nextChild; | |
| 14217 | + if (i <= len - 2) nextChild = children[i + 1]; | |
| 14218 | + var useElem = createNS("use"); | |
| 14219 | + useElem.setAttribute("href", "#" + symbolId); | |
| 14220 | + if (nextChild) parentNode.insertBefore(useElem, nextChild); | |
| 14221 | + else parentNode.appendChild(useElem); | |
| 14222 | + }; | |
| 14223 | + SVGMatte3Effect.prototype.setElementAsMask = function(elem, mask) { | |
| 14224 | + if (!this.findSymbol(mask)) { | |
| 14225 | + var symbolId = createElementID(); | |
| 14226 | + var masker = createNS("mask"); | |
| 14227 | + masker.setAttribute("id", mask.layerId); | |
| 14228 | + masker.setAttribute("mask-type", "alpha"); | |
| 14229 | + _svgMatteSymbols.push(mask); | |
| 14230 | + var defs = elem.globalData.defs; | |
| 14231 | + defs.appendChild(masker); | |
| 14232 | + var symbol = createNS("symbol"); | |
| 14233 | + symbol.setAttribute("id", symbolId); | |
| 14234 | + this.replaceInParent(mask, symbolId); | |
| 14235 | + symbol.appendChild(mask.layerElement); | |
| 14236 | + defs.appendChild(symbol); | |
| 14237 | + var useElem = createNS("use"); | |
| 14238 | + useElem.setAttribute("href", "#" + symbolId); | |
| 14239 | + masker.appendChild(useElem); | |
| 14240 | + mask.data.hd = false; | |
| 14241 | + mask.show(); | |
| 14242 | + } | |
| 14243 | + elem.setMatte(mask.layerId); | |
| 14244 | + }; | |
| 14245 | + SVGMatte3Effect.prototype.initialize = function() { | |
| 14246 | + var ind = this.filterManager.effectElements[0].p.v; | |
| 14247 | + var elements = this.elem.comp.elements; | |
| 14248 | + var i = 0; | |
| 14249 | + var len = elements.length; | |
| 14250 | + while (i < len) { | |
| 14251 | + if (elements[i] && elements[i].data.ind === ind) this.setElementAsMask(this.elem, elements[i]); | |
| 14252 | + i += 1; | |
| 14253 | + } | |
| 14254 | + this.initialized = true; | |
| 14255 | + }; | |
| 14256 | + SVGMatte3Effect.prototype.renderFrame = function() { | |
| 14257 | + if (!this.initialized) this.initialize(); | |
| 14258 | + }; | |
| 14259 | + function SVGGaussianBlurEffect(filter, filterManager, elem, id) { | |
| 14260 | + filter.setAttribute("x", "-100%"); | |
| 14261 | + filter.setAttribute("y", "-100%"); | |
| 14262 | + filter.setAttribute("width", "300%"); | |
| 14263 | + filter.setAttribute("height", "300%"); | |
| 14264 | + this.filterManager = filterManager; | |
| 14265 | + var feGaussianBlur = createNS("feGaussianBlur"); | |
| 14266 | + feGaussianBlur.setAttribute("result", id); | |
| 14267 | + filter.appendChild(feGaussianBlur); | |
| 14268 | + this.feGaussianBlur = feGaussianBlur; | |
| 14269 | + } | |
| 14270 | + SVGGaussianBlurEffect.prototype.renderFrame = function(forceRender) { | |
| 14271 | + if (forceRender || this.filterManager._mdf) { | |
| 14272 | + var sigma = this.filterManager.effectElements[0].p.v * .3; | |
| 14273 | + var dimensions = this.filterManager.effectElements[1].p.v; | |
| 14274 | + var sigmaX = dimensions == 3 ? 0 : sigma; | |
| 14275 | + var sigmaY = dimensions == 2 ? 0 : sigma; | |
| 14276 | + this.feGaussianBlur.setAttribute("stdDeviation", sigmaX + " " + sigmaY); | |
| 14277 | + var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? "wrap" : "duplicate"; | |
| 14278 | + this.feGaussianBlur.setAttribute("edgeMode", edgeMode); | |
| 14279 | + } | |
| 14280 | + }; | |
| 14281 | + function TransformEffect() {} | |
| 14282 | + TransformEffect.prototype.init = function(effectsManager) { | |
| 14283 | + this.effectsManager = effectsManager; | |
| 14284 | + this.type = effectTypes.TRANSFORM_EFFECT; | |
| 14285 | + this.matrix = new Matrix(); | |
| 14286 | + this.opacity = -1; | |
| 14287 | + this._mdf = false; | |
| 14288 | + this._opMdf = false; | |
| 14289 | + }; | |
| 14290 | + TransformEffect.prototype.renderFrame = function(forceFrame) { | |
| 14291 | + this._opMdf = false; | |
| 14292 | + this._mdf = false; | |
| 14293 | + if (forceFrame || this.effectsManager._mdf) { | |
| 14294 | + var effectElements = this.effectsManager.effectElements; | |
| 14295 | + var anchor = effectElements[0].p.v; | |
| 14296 | + var position = effectElements[1].p.v; | |
| 14297 | + var isUniformScale = effectElements[2].p.v === 1; | |
| 14298 | + var scaleHeight = effectElements[3].p.v; | |
| 14299 | + var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v; | |
| 14300 | + var skew = effectElements[5].p.v; | |
| 14301 | + var skewAxis = effectElements[6].p.v; | |
| 14302 | + var rotation = effectElements[7].p.v; | |
| 14303 | + this.matrix.reset(); | |
| 14304 | + this.matrix.translate(-anchor[0], -anchor[1], anchor[2]); | |
| 14305 | + this.matrix.scale(scaleWidth * .01, scaleHeight * .01, 1); | |
| 14306 | + this.matrix.rotate(-rotation * degToRads); | |
| 14307 | + this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads); | |
| 14308 | + this.matrix.translate(position[0], position[1], 0); | |
| 14309 | + this._mdf = true; | |
| 14310 | + if (this.opacity !== effectElements[8].p.v) { | |
| 14311 | + this.opacity = effectElements[8].p.v; | |
| 14312 | + this._opMdf = true; | |
| 14313 | + } | |
| 14314 | + } | |
| 14315 | + }; | |
| 14316 | + function SVGTransformEffect(_, filterManager) { | |
| 14317 | + this.init(filterManager); | |
| 14318 | + } | |
| 14319 | + extendPrototype([TransformEffect], SVGTransformEffect); | |
| 14320 | + function CVTransformEffect(effectsManager) { | |
| 14321 | + this.init(effectsManager); | |
| 14322 | + } | |
| 14323 | + extendPrototype([TransformEffect], CVTransformEffect); | |
| 14324 | + registerRenderer("canvas", CanvasRenderer); | |
| 14325 | + registerRenderer("html", HybridRenderer); | |
| 14326 | + registerRenderer("svg", SVGRenderer); | |
| 14327 | + ShapeModifiers.registerModifier("tm", TrimModifier); | |
| 14328 | + ShapeModifiers.registerModifier("pb", PuckerAndBloatModifier); | |
| 14329 | + ShapeModifiers.registerModifier("rp", RepeaterModifier); | |
| 14330 | + ShapeModifiers.registerModifier("rd", RoundCornersModifier); | |
| 14331 | + ShapeModifiers.registerModifier("zz", ZigZagModifier); | |
| 14332 | + ShapeModifiers.registerModifier("op", OffsetPathModifier); | |
| 14333 | + setExpressionsPlugin(Expressions); | |
| 14334 | + setExpressionInterfaces(getInterface); | |
| 14335 | + initialize$1(); | |
| 14336 | + initialize(); | |
| 14337 | + registerEffect$1(20, SVGTintFilter, true); | |
| 14338 | + registerEffect$1(21, SVGFillFilter, true); | |
| 14339 | + registerEffect$1(22, SVGStrokeEffect, false); | |
| 14340 | + registerEffect$1(23, SVGTritoneFilter, true); | |
| 14341 | + registerEffect$1(24, SVGProLevelsFilter, true); | |
| 14342 | + registerEffect$1(25, SVGDropShadowEffect, true); | |
| 14343 | + registerEffect$1(28, SVGMatte3Effect, false); | |
| 14344 | + registerEffect$1(29, SVGGaussianBlurEffect, true); | |
| 14345 | + registerEffect$1(35, SVGTransformEffect, false); | |
| 14346 | + registerEffect(35, CVTransformEffect); | |
| 14347 | + return lottie; | |
| 14348 | + })); | |
| 14349 | + })); | |
| 14350 | + | |
| 14351 | +//#endregion | |
| 14352 | +//#region node_modules/lottie-react/build/index.umd.js | |
| 14353 | + var require_index_umd = /* @__PURE__ */ __commonJSMin(((exports, module) => { | |
| 14354 | + (function(global, factory) { | |
| 14355 | + typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require_lottie(), (globalThis.React)) : typeof define === "function" && define.amd ? define([ | |
| 14356 | + "exports", | |
| 14357 | + "lottie-web", | |
| 14358 | + "react" | |
| 14359 | + ], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["lottie-react"] = {}, global.Lottie, global.React)); | |
| 14360 | + })(exports, (function(exports$1, lottie, React) { | |
| 14361 | + "use strict"; | |
| 14362 | + function _interopDefaultLegacy(e) { | |
| 14363 | + return e && typeof e === "object" && "default" in e ? e : { "default": e }; | |
| 14364 | + } | |
| 14365 | + var lottie__default = /*#__PURE__*/ _interopDefaultLegacy(lottie); | |
| 14366 | + var React__default = /*#__PURE__*/ _interopDefaultLegacy(React); | |
| 14367 | + function _arrayLikeToArray(r, a) { | |
| 14368 | + (null == a || a > r.length) && (a = r.length); | |
| 14369 | + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; | |
| 14370 | + return n; | |
| 14371 | + } | |
| 14372 | + function _arrayWithHoles(r) { | |
| 14373 | + if (Array.isArray(r)) return r; | |
| 14374 | + } | |
| 14375 | + function _defineProperty(e, r, t) { | |
| 14376 | + return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { | |
| 14377 | + value: t, | |
| 14378 | + enumerable: !0, | |
| 14379 | + configurable: !0, | |
| 14380 | + writable: !0 | |
| 14381 | + }) : e[r] = t, e; | |
| 14382 | + } | |
| 14383 | + function _iterableToArrayLimit(r, l) { | |
| 14384 | + var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; | |
| 14385 | + if (null != t) { | |
| 14386 | + var e; | |
| 14387 | + var n; | |
| 14388 | + var i; | |
| 14389 | + var u; | |
| 14390 | + var a = []; | |
| 14391 | + var f = !0; | |
| 14392 | + var o = !1; | |
| 14393 | + try { | |
| 14394 | + if (i = (t = t.call(r)).next, 0 === l) { | |
| 14395 | + if (Object(t) !== t) return; | |
| 14396 | + f = !1; | |
| 14397 | + } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); | |
| 14398 | + } catch (r) { | |
| 14399 | + o = !0, n = r; | |
| 14400 | + } finally { | |
| 14401 | + try { | |
| 14402 | + if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; | |
| 14403 | + } finally { | |
| 14404 | + if (o) throw n; | |
| 14405 | + } | |
| 14406 | + } | |
| 14407 | + return a; | |
| 14408 | + } | |
| 14409 | + } | |
| 14410 | + function _nonIterableRest() { | |
| 14411 | + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); | |
| 14412 | + } | |
| 14413 | + function ownKeys(e, r) { | |
| 14414 | + var t = Object.keys(e); | |
| 14415 | + if (Object.getOwnPropertySymbols) { | |
| 14416 | + var o = Object.getOwnPropertySymbols(e); | |
| 14417 | + r && (o = o.filter(function(r) { | |
| 14418 | + return Object.getOwnPropertyDescriptor(e, r).enumerable; | |
| 14419 | + })), t.push.apply(t, o); | |
| 14420 | + } | |
| 14421 | + return t; | |
| 14422 | + } | |
| 14423 | + function _objectSpread2(e) { | |
| 14424 | + for (var r = 1; r < arguments.length; r++) { | |
| 14425 | + var t = null != arguments[r] ? arguments[r] : {}; | |
| 14426 | + r % 2 ? ownKeys(Object(t), !0).forEach(function(r) { | |
| 14427 | + _defineProperty(e, r, t[r]); | |
| 14428 | + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) { | |
| 14429 | + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); | |
| 14430 | + }); | |
| 14431 | + } | |
| 14432 | + return e; | |
| 14433 | + } | |
| 14434 | + function _objectWithoutProperties(e, t) { | |
| 14435 | + if (null == e) return {}; | |
| 14436 | + var o; | |
| 14437 | + var r; | |
| 14438 | + var i = _objectWithoutPropertiesLoose(e, t); | |
| 14439 | + if (Object.getOwnPropertySymbols) { | |
| 14440 | + var s = Object.getOwnPropertySymbols(e); | |
| 14441 | + for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); | |
| 14442 | + } | |
| 14443 | + return i; | |
| 14444 | + } | |
| 14445 | + function _objectWithoutPropertiesLoose(r, e) { | |
| 14446 | + if (null == r) return {}; | |
| 14447 | + var t = {}; | |
| 14448 | + for (var n in r) if ({}.hasOwnProperty.call(r, n)) { | |
| 14449 | + if (e.includes(n)) continue; | |
| 14450 | + t[n] = r[n]; | |
| 14451 | + } | |
| 14452 | + return t; | |
| 14453 | + } | |
| 14454 | + function _slicedToArray(r, e) { | |
| 14455 | + return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); | |
| 14456 | + } | |
| 14457 | + function _toPrimitive(t, r) { | |
| 14458 | + if ("object" != typeof t || !t) return t; | |
| 14459 | + var e = t[Symbol.toPrimitive]; | |
| 14460 | + if (void 0 !== e) { | |
| 14461 | + var i = e.call(t, r || "default"); | |
| 14462 | + if ("object" != typeof i) return i; | |
| 14463 | + throw new TypeError("@@toPrimitive must return a primitive value."); | |
| 14464 | + } | |
| 14465 | + return ("string" === r ? String : Number)(t); | |
| 14466 | + } | |
| 14467 | + function _toPropertyKey(t) { | |
| 14468 | + var i = _toPrimitive(t, "string"); | |
| 14469 | + return "symbol" == typeof i ? i : i + ""; | |
| 14470 | + } | |
| 14471 | + function _unsupportedIterableToArray(r, a) { | |
| 14472 | + if (r) { | |
| 14473 | + if ("string" == typeof r) return _arrayLikeToArray(r, a); | |
| 14474 | + var t = {}.toString.call(r).slice(8, -1); | |
| 14475 | + return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; | |
| 14476 | + } | |
| 14477 | + } | |
| 14478 | + var _excluded$1 = [ | |
| 14479 | + "animationData", | |
| 14480 | + "loop", | |
| 14481 | + "autoplay", | |
| 14482 | + "initialSegment", | |
| 14483 | + "onComplete", | |
| 14484 | + "onLoopComplete", | |
| 14485 | + "onEnterFrame", | |
| 14486 | + "onSegmentStart", | |
| 14487 | + "onConfigReady", | |
| 14488 | + "onDataReady", | |
| 14489 | + "onDataFailed", | |
| 14490 | + "onLoadedImages", | |
| 14491 | + "onDOMLoaded", | |
| 14492 | + "onDestroy", | |
| 14493 | + "lottieRef", | |
| 14494 | + "renderer", | |
| 14495 | + "name", | |
| 14496 | + "assetsPath", | |
| 14497 | + "rendererSettings" | |
| 14498 | + ]; | |
| 14499 | + var useLottie = function useLottie(props, style) { | |
| 14500 | + var animationData = props.animationData; | |
| 14501 | + var loop = props.loop; | |
| 14502 | + var autoplay = props.autoplay; | |
| 14503 | + var initialSegment = props.initialSegment; | |
| 14504 | + var onComplete = props.onComplete; | |
| 14505 | + var onLoopComplete = props.onLoopComplete; | |
| 14506 | + var onEnterFrame = props.onEnterFrame; | |
| 14507 | + var onSegmentStart = props.onSegmentStart; | |
| 14508 | + var onConfigReady = props.onConfigReady; | |
| 14509 | + var onDataReady = props.onDataReady; | |
| 14510 | + var onDataFailed = props.onDataFailed; | |
| 14511 | + var onLoadedImages = props.onLoadedImages; | |
| 14512 | + var onDOMLoaded = props.onDOMLoaded; | |
| 14513 | + var onDestroy = props.onDestroy; | |
| 14514 | + props.lottieRef; | |
| 14515 | + props.renderer; | |
| 14516 | + props.name; | |
| 14517 | + props.assetsPath; | |
| 14518 | + props.rendererSettings; | |
| 14519 | + var rest = _objectWithoutProperties(props, _excluded$1); | |
| 14520 | + var _useState2 = _slicedToArray(React.useState(false), 2); | |
| 14521 | + var animationLoaded = _useState2[0]; | |
| 14522 | + var setAnimationLoaded = _useState2[1]; | |
| 14523 | + var animationInstanceRef = React.useRef(); | |
| 14524 | + var animationContainer = React.useRef(null); | |
| 14525 | + /** | |
| 14526 | + * Play | |
| 14527 | + */ | |
| 14528 | + var play = function play() { | |
| 14529 | + var _a; | |
| 14530 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.play(); | |
| 14531 | + }; | |
| 14532 | + /** | |
| 14533 | + * Stop | |
| 14534 | + */ | |
| 14535 | + var stop = function stop() { | |
| 14536 | + var _a; | |
| 14537 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.stop(); | |
| 14538 | + }; | |
| 14539 | + /** | |
| 14540 | + * Pause | |
| 14541 | + */ | |
| 14542 | + var pause = function pause() { | |
| 14543 | + var _a; | |
| 14544 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.pause(); | |
| 14545 | + }; | |
| 14546 | + /** | |
| 14547 | + * Set animation speed | |
| 14548 | + * @param speed | |
| 14549 | + */ | |
| 14550 | + var setSpeed = function setSpeed(speed) { | |
| 14551 | + var _a; | |
| 14552 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.setSpeed(speed); | |
| 14553 | + }; | |
| 14554 | + /** | |
| 14555 | + * Got to frame and play | |
| 14556 | + * @param value | |
| 14557 | + * @param isFrame | |
| 14558 | + */ | |
| 14559 | + var goToAndPlay = function goToAndPlay(value, isFrame) { | |
| 14560 | + var _a; | |
| 14561 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.goToAndPlay(value, isFrame); | |
| 14562 | + }; | |
| 14563 | + /** | |
| 14564 | + * Got to frame and stop | |
| 14565 | + * @param value | |
| 14566 | + * @param isFrame | |
| 14567 | + */ | |
| 14568 | + var goToAndStop = function goToAndStop(value, isFrame) { | |
| 14569 | + var _a; | |
| 14570 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.goToAndStop(value, isFrame); | |
| 14571 | + }; | |
| 14572 | + /** | |
| 14573 | + * Set animation direction | |
| 14574 | + * @param direction | |
| 14575 | + */ | |
| 14576 | + var setDirection = function setDirection(direction) { | |
| 14577 | + var _a; | |
| 14578 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.setDirection(direction); | |
| 14579 | + }; | |
| 14580 | + /** | |
| 14581 | + * Play animation segments | |
| 14582 | + * @param segments | |
| 14583 | + * @param forceFlag | |
| 14584 | + */ | |
| 14585 | + var playSegments = function playSegments(segments, forceFlag) { | |
| 14586 | + var _a; | |
| 14587 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.playSegments(segments, forceFlag); | |
| 14588 | + }; | |
| 14589 | + /** | |
| 14590 | + * Set sub frames | |
| 14591 | + * @param useSubFrames | |
| 14592 | + */ | |
| 14593 | + var setSubframe = function setSubframe(useSubFrames) { | |
| 14594 | + var _a; | |
| 14595 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.setSubframe(useSubFrames); | |
| 14596 | + }; | |
| 14597 | + /** | |
| 14598 | + * Get animation duration | |
| 14599 | + * @param inFrames | |
| 14600 | + */ | |
| 14601 | + var getDuration = function getDuration(inFrames) { | |
| 14602 | + var _a; | |
| 14603 | + return (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.getDuration(inFrames); | |
| 14604 | + }; | |
| 14605 | + /** | |
| 14606 | + * Destroy animation | |
| 14607 | + */ | |
| 14608 | + var destroy = function destroy() { | |
| 14609 | + var _a; | |
| 14610 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.destroy(); | |
| 14611 | + animationInstanceRef.current = void 0; | |
| 14612 | + }; | |
| 14613 | + /** | |
| 14614 | + * Load a new animation, and if it's the case, destroy the previous one | |
| 14615 | + * @param {Object} forcedConfigs | |
| 14616 | + */ | |
| 14617 | + var loadAnimation = function loadAnimation() { | |
| 14618 | + var forcedConfigs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; | |
| 14619 | + var _a; | |
| 14620 | + if (!animationContainer.current) return; | |
| 14621 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.destroy(); | |
| 14622 | + var config = _objectSpread2(_objectSpread2(_objectSpread2({}, props), forcedConfigs), {}, { container: animationContainer.current }); | |
| 14623 | + animationInstanceRef.current = lottie__default["default"].loadAnimation(config); | |
| 14624 | + setAnimationLoaded(!!animationInstanceRef.current); | |
| 14625 | + return function() { | |
| 14626 | + var _a; | |
| 14627 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.destroy(); | |
| 14628 | + animationInstanceRef.current = void 0; | |
| 14629 | + }; | |
| 14630 | + }; | |
| 14631 | + /** | |
| 14632 | + * (Re)Initialize when animation data changed | |
| 14633 | + */ | |
| 14634 | + React.useEffect(function() { | |
| 14635 | + var onUnmount = loadAnimation(); | |
| 14636 | + return function() { | |
| 14637 | + return onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount(); | |
| 14638 | + }; | |
| 14639 | + }, [animationData, loop]); | |
| 14640 | + React.useEffect(function() { | |
| 14641 | + if (!animationInstanceRef.current) return; | |
| 14642 | + animationInstanceRef.current.autoplay = !!autoplay; | |
| 14643 | + }, [autoplay]); | |
| 14644 | + React.useEffect(function() { | |
| 14645 | + if (!animationInstanceRef.current) return; | |
| 14646 | + if (!initialSegment) { | |
| 14647 | + animationInstanceRef.current.resetSegments(true); | |
| 14648 | + return; | |
| 14649 | + } | |
| 14650 | + if (!Array.isArray(initialSegment) || !initialSegment.length) return; | |
| 14651 | + if (animationInstanceRef.current.currentRawFrame < initialSegment[0] || animationInstanceRef.current.currentRawFrame > initialSegment[1]) animationInstanceRef.current.currentRawFrame = initialSegment[0]; | |
| 14652 | + animationInstanceRef.current.setSegment(initialSegment[0], initialSegment[1]); | |
| 14653 | + }, [initialSegment]); | |
| 14654 | + /** | |
| 14655 | + * Reinitialize listener on change | |
| 14656 | + */ | |
| 14657 | + React.useEffect(function() { | |
| 14658 | + var listeners = [ | |
| 14659 | + { | |
| 14660 | + name: "complete", | |
| 14661 | + handler: onComplete | |
| 14662 | + }, | |
| 14663 | + { | |
| 14664 | + name: "loopComplete", | |
| 14665 | + handler: onLoopComplete | |
| 14666 | + }, | |
| 14667 | + { | |
| 14668 | + name: "enterFrame", | |
| 14669 | + handler: onEnterFrame | |
| 14670 | + }, | |
| 14671 | + { | |
| 14672 | + name: "segmentStart", | |
| 14673 | + handler: onSegmentStart | |
| 14674 | + }, | |
| 14675 | + { | |
| 14676 | + name: "config_ready", | |
| 14677 | + handler: onConfigReady | |
| 14678 | + }, | |
| 14679 | + { | |
| 14680 | + name: "data_ready", | |
| 14681 | + handler: onDataReady | |
| 14682 | + }, | |
| 14683 | + { | |
| 14684 | + name: "data_failed", | |
| 14685 | + handler: onDataFailed | |
| 14686 | + }, | |
| 14687 | + { | |
| 14688 | + name: "loaded_images", | |
| 14689 | + handler: onLoadedImages | |
| 14690 | + }, | |
| 14691 | + { | |
| 14692 | + name: "DOMLoaded", | |
| 14693 | + handler: onDOMLoaded | |
| 14694 | + }, | |
| 14695 | + { | |
| 14696 | + name: "destroy", | |
| 14697 | + handler: onDestroy | |
| 14698 | + } | |
| 14699 | + ].filter(function(listener) { | |
| 14700 | + return listener.handler != null; | |
| 14701 | + }); | |
| 14702 | + if (!listeners.length) return; | |
| 14703 | + var deregisterList = listeners.map( | |
| 14704 | + /** | |
| 14705 | + * Handle the process of adding an event listener | |
| 14706 | + * @param {Listener} listener | |
| 14707 | + * @return {Function} Function that deregister the listener | |
| 14708 | + */ | |
| 14709 | + function(listener) { | |
| 14710 | + var _a; | |
| 14711 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.addEventListener(listener.name, listener.handler); | |
| 14712 | + return function() { | |
| 14713 | + var _a; | |
| 14714 | + (_a = animationInstanceRef.current) === null || _a === void 0 || _a.removeEventListener(listener.name, listener.handler); | |
| 14715 | + }; | |
| 14716 | + } | |
| 14717 | + ); | |
| 14718 | + return function() { | |
| 14719 | + deregisterList.forEach(function(deregister) { | |
| 14720 | + return deregister(); | |
| 14721 | + }); | |
| 14722 | + }; | |
| 14723 | + }, [ | |
| 14724 | + onComplete, | |
| 14725 | + onLoopComplete, | |
| 14726 | + onEnterFrame, | |
| 14727 | + onSegmentStart, | |
| 14728 | + onConfigReady, | |
| 14729 | + onDataReady, | |
| 14730 | + onDataFailed, | |
| 14731 | + onLoadedImages, | |
| 14732 | + onDOMLoaded, | |
| 14733 | + onDestroy | |
| 14734 | + ]); | |
| 14735 | + return { | |
| 14736 | + View: /* @__PURE__ */ React__default["default"].createElement("div", _objectSpread2({ | |
| 14737 | + style, | |
| 14738 | + ref: animationContainer | |
| 14739 | + }, rest)), | |
| 14740 | + play, | |
| 14741 | + stop, | |
| 14742 | + pause, | |
| 14743 | + setSpeed, | |
| 14744 | + goToAndStop, | |
| 14745 | + goToAndPlay, | |
| 14746 | + setDirection, | |
| 14747 | + playSegments, | |
| 14748 | + setSubframe, | |
| 14749 | + getDuration, | |
| 14750 | + destroy, | |
| 14751 | + animationContainerRef: animationContainer, | |
| 14752 | + animationLoaded, | |
| 14753 | + animationItem: animationInstanceRef.current | |
| 14754 | + }; | |
| 14755 | + }; | |
| 14756 | + function getContainerVisibility(container) { | |
| 14757 | + var _container$getBoundin = container.getBoundingClientRect(); | |
| 14758 | + var top = _container$getBoundin.top; | |
| 14759 | + var height = _container$getBoundin.height; | |
| 14760 | + return (window.innerHeight - top) / (window.innerHeight + height); | |
| 14761 | + } | |
| 14762 | + function getContainerCursorPosition(container, cursorX, cursorY) { | |
| 14763 | + var _container$getBoundin2 = container.getBoundingClientRect(); | |
| 14764 | + var top = _container$getBoundin2.top; | |
| 14765 | + var left = _container$getBoundin2.left; | |
| 14766 | + var width = _container$getBoundin2.width; | |
| 14767 | + var height = _container$getBoundin2.height; | |
| 14768 | + return { | |
| 14769 | + x: (cursorX - left) / width, | |
| 14770 | + y: (cursorY - top) / height | |
| 14771 | + }; | |
| 14772 | + } | |
| 14773 | + var useInitInteractivity = function useInitInteractivity(_ref) { | |
| 14774 | + var wrapperRef = _ref.wrapperRef; | |
| 14775 | + var animationItem = _ref.animationItem; | |
| 14776 | + var mode = _ref.mode; | |
| 14777 | + var actions = _ref.actions; | |
| 14778 | + React.useEffect(function() { | |
| 14779 | + var wrapper = wrapperRef.current; | |
| 14780 | + if (!wrapper || !animationItem || !actions.length) return; | |
| 14781 | + animationItem.stop(); | |
| 14782 | + var scrollModeHandler = function scrollModeHandler() { | |
| 14783 | + var assignedSegment = null; | |
| 14784 | + var scrollHandler = function scrollHandler() { | |
| 14785 | + var currentPercent = getContainerVisibility(wrapper); | |
| 14786 | + var action = actions.find(function(_ref2) { | |
| 14787 | + var visibility = _ref2.visibility; | |
| 14788 | + return visibility && currentPercent >= visibility[0] && currentPercent <= visibility[1]; | |
| 14789 | + }); | |
| 14790 | + if (!action) return; | |
| 14791 | + if (action.type === "seek" && action.visibility && action.frames.length === 2) { | |
| 14792 | + var frameToGo = action.frames[0] + Math.ceil((currentPercent - action.visibility[0]) / (action.visibility[1] - action.visibility[0]) * action.frames[1]); | |
| 14793 | + //! goToAndStop must be relative to the start of the current segment | |
| 14794 | + animationItem.goToAndStop(frameToGo - animationItem.firstFrame - 1, true); | |
| 14795 | + } | |
| 14796 | + if (action.type === "loop") { | |
| 14797 | + if (assignedSegment === null) { | |
| 14798 | + animationItem.playSegments(action.frames, true); | |
| 14799 | + assignedSegment = action.frames; | |
| 14800 | + } else if (assignedSegment !== action.frames) { | |
| 14801 | + animationItem.playSegments(action.frames, true); | |
| 14802 | + assignedSegment = action.frames; | |
| 14803 | + } else if (animationItem.isPaused) { | |
| 14804 | + animationItem.playSegments(action.frames, true); | |
| 14805 | + assignedSegment = action.frames; | |
| 14806 | + } | |
| 14807 | + } | |
| 14808 | + if (action.type === "play" && animationItem.isPaused) { | |
| 14809 | + animationItem.resetSegments(true); | |
| 14810 | + animationItem.play(); | |
| 14811 | + } | |
| 14812 | + if (action.type === "stop") animationItem.goToAndStop(action.frames[0] - animationItem.firstFrame - 1, true); | |
| 14813 | + }; | |
| 14814 | + document.addEventListener("scroll", scrollHandler); | |
| 14815 | + return function() { | |
| 14816 | + document.removeEventListener("scroll", scrollHandler); | |
| 14817 | + }; | |
| 14818 | + }; | |
| 14819 | + var cursorModeHandler = function cursorModeHandler() { | |
| 14820 | + var handleCursor = function handleCursor(_x, _y) { | |
| 14821 | + var x = _x; | |
| 14822 | + var y = _y; | |
| 14823 | + if (x !== -1 && y !== -1) { | |
| 14824 | + var pos = getContainerCursorPosition(wrapper, x, y); | |
| 14825 | + x = pos.x; | |
| 14826 | + y = pos.y; | |
| 14827 | + } | |
| 14828 | + var action = actions.find(function(_ref3) { | |
| 14829 | + var position = _ref3.position; | |
| 14830 | + if (position && Array.isArray(position.x) && Array.isArray(position.y)) return x >= position.x[0] && x <= position.x[1] && y >= position.y[0] && y <= position.y[1]; | |
| 14831 | + if (position && !Number.isNaN(position.x) && !Number.isNaN(position.y)) return x === position.x && y === position.y; | |
| 14832 | + return false; | |
| 14833 | + }); | |
| 14834 | + if (!action) return; | |
| 14835 | + if (action.type === "seek" && action.position && Array.isArray(action.position.x) && Array.isArray(action.position.y) && action.frames.length === 2) { | |
| 14836 | + var xPercent = (x - action.position.x[0]) / (action.position.x[1] - action.position.x[0]); | |
| 14837 | + var yPercent = (y - action.position.y[0]) / (action.position.y[1] - action.position.y[0]); | |
| 14838 | + animationItem.playSegments(action.frames, true); | |
| 14839 | + animationItem.goToAndStop(Math.ceil((xPercent + yPercent) / 2 * (action.frames[1] - action.frames[0])), true); | |
| 14840 | + } | |
| 14841 | + if (action.type === "loop") animationItem.playSegments(action.frames, true); | |
| 14842 | + if (action.type === "play") { | |
| 14843 | + if (animationItem.isPaused) animationItem.resetSegments(false); | |
| 14844 | + animationItem.playSegments(action.frames); | |
| 14845 | + } | |
| 14846 | + if (action.type === "stop") animationItem.goToAndStop(action.frames[0], true); | |
| 14847 | + }; | |
| 14848 | + var mouseMoveHandler = function mouseMoveHandler(ev) { | |
| 14849 | + handleCursor(ev.clientX, ev.clientY); | |
| 14850 | + }; | |
| 14851 | + var mouseOutHandler = function mouseOutHandler() { | |
| 14852 | + handleCursor(-1, -1); | |
| 14853 | + }; | |
| 14854 | + wrapper.addEventListener("mousemove", mouseMoveHandler); | |
| 14855 | + wrapper.addEventListener("mouseout", mouseOutHandler); | |
| 14856 | + return function() { | |
| 14857 | + wrapper.removeEventListener("mousemove", mouseMoveHandler); | |
| 14858 | + wrapper.removeEventListener("mouseout", mouseOutHandler); | |
| 14859 | + }; | |
| 14860 | + }; | |
| 14861 | + switch (mode) { | |
| 14862 | + case "scroll": return scrollModeHandler(); | |
| 14863 | + case "cursor": return cursorModeHandler(); | |
| 14864 | + } | |
| 14865 | + }, [mode, animationItem]); | |
| 14866 | + }; | |
| 14867 | + var useLottieInteractivity = function useLottieInteractivity(_ref4) { | |
| 14868 | + var actions = _ref4.actions; | |
| 14869 | + var mode = _ref4.mode; | |
| 14870 | + var lottieObj = _ref4.lottieObj; | |
| 14871 | + var animationItem = lottieObj.animationItem; | |
| 14872 | + var View = lottieObj.View; | |
| 14873 | + var animationContainerRef = lottieObj.animationContainerRef; | |
| 14874 | + useInitInteractivity({ | |
| 14875 | + actions, | |
| 14876 | + animationItem, | |
| 14877 | + mode, | |
| 14878 | + wrapperRef: animationContainerRef | |
| 14879 | + }); | |
| 14880 | + return View; | |
| 14881 | + }; | |
| 14882 | + var _excluded = ["style", "interactivity"]; | |
| 14883 | + var Lottie = function Lottie(props) { | |
| 14884 | + var _a; | |
| 14885 | + var _b; | |
| 14886 | + var _c; | |
| 14887 | + var style = props.style; | |
| 14888 | + var interactivity = props.interactivity; | |
| 14889 | + /** | |
| 14890 | + * Initialize the 'useLottie' hook | |
| 14891 | + */ | |
| 14892 | + var _useLottie = useLottie(_objectWithoutProperties(props, _excluded), style); | |
| 14893 | + var View = _useLottie.View; | |
| 14894 | + var play = _useLottie.play; | |
| 14895 | + var stop = _useLottie.stop; | |
| 14896 | + var pause = _useLottie.pause; | |
| 14897 | + var setSpeed = _useLottie.setSpeed; | |
| 14898 | + var goToAndStop = _useLottie.goToAndStop; | |
| 14899 | + var goToAndPlay = _useLottie.goToAndPlay; | |
| 14900 | + var setDirection = _useLottie.setDirection; | |
| 14901 | + var playSegments = _useLottie.playSegments; | |
| 14902 | + var setSubframe = _useLottie.setSubframe; | |
| 14903 | + var getDuration = _useLottie.getDuration; | |
| 14904 | + var destroy = _useLottie.destroy; | |
| 14905 | + var animationContainerRef = _useLottie.animationContainerRef; | |
| 14906 | + var animationLoaded = _useLottie.animationLoaded; | |
| 14907 | + var animationItem = _useLottie.animationItem; | |
| 14908 | + /** | |
| 14909 | + * Make the hook variables/methods available through the provided 'lottieRef' | |
| 14910 | + */ | |
| 14911 | + React.useEffect(function() { | |
| 14912 | + if (props.lottieRef) props.lottieRef.current = { | |
| 14913 | + play, | |
| 14914 | + stop, | |
| 14915 | + pause, | |
| 14916 | + setSpeed, | |
| 14917 | + goToAndPlay, | |
| 14918 | + goToAndStop, | |
| 14919 | + setDirection, | |
| 14920 | + playSegments, | |
| 14921 | + setSubframe, | |
| 14922 | + getDuration, | |
| 14923 | + destroy, | |
| 14924 | + animationContainerRef, | |
| 14925 | + animationLoaded, | |
| 14926 | + animationItem | |
| 14927 | + }; | |
| 14928 | + }, [(_a = props.lottieRef) === null || _a === void 0 ? void 0 : _a.current]); | |
| 14929 | + return useLottieInteractivity({ | |
| 14930 | + lottieObj: { | |
| 14931 | + View, | |
| 14932 | + play, | |
| 14933 | + stop, | |
| 14934 | + pause, | |
| 14935 | + setSpeed, | |
| 14936 | + goToAndStop, | |
| 14937 | + goToAndPlay, | |
| 14938 | + setDirection, | |
| 14939 | + playSegments, | |
| 14940 | + setSubframe, | |
| 14941 | + getDuration, | |
| 14942 | + destroy, | |
| 14943 | + animationContainerRef, | |
| 14944 | + animationLoaded, | |
| 14945 | + animationItem | |
| 14946 | + }, | |
| 14947 | + actions: (_b = interactivity === null || interactivity === void 0 ? void 0 : interactivity.actions) !== null && _b !== void 0 ? _b : [], | |
| 14948 | + mode: (_c = interactivity === null || interactivity === void 0 ? void 0 : interactivity.mode) !== null && _c !== void 0 ? _c : "scroll" | |
| 14949 | + }); | |
| 14950 | + }; | |
| 14951 | + Object.defineProperty(exports$1, "LottiePlayer", { | |
| 14952 | + enumerable: true, | |
| 14953 | + get: function() { | |
| 14954 | + return lottie__default["default"]; | |
| 14955 | + } | |
| 14956 | + }); | |
| 14957 | + exports$1["default"] = Lottie; | |
| 14958 | + exports$1.useLottie = useLottie; | |
| 14959 | + exports$1.useLottieInteractivity = useLottieInteractivity; | |
| 14960 | + Object.defineProperty(exports$1, "__esModule", { value: true }); | |
| 14961 | + })); | |
| 14962 | + })); | |
| 14963 | + | |
| 14964 | +//#endregion | |
| 14965 | +//#region packages/packages/libs/editor-modal-shell/src/components/background-lottie.tsx | |
| 14966 | + var import_index_umd = /* @__PURE__ */ __toESM(require_index_umd()); | |
| 14967 | + function BackgroundLottie({ animationData, loop = false, autoplay = true, zIndex = MODAL_Z_INDEX - 1, backgroundColor = "transparent", onComplete = () => {} }) { | |
| 14968 | + const prefersReducedMotion = typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches; | |
| 14969 | + (0, react.useEffect)(() => { | |
| 14970 | + if (prefersReducedMotion) onComplete?.(); | |
| 14971 | + }, [prefersReducedMotion, onComplete]); | |
| 14972 | + if (prefersReducedMotion) return null; | |
| 14973 | + return /* @__PURE__ */ react.createElement(import_index_umd.default, { | |
| 14974 | + animationData, | |
| 14975 | + loop, | |
| 14976 | + autoplay, | |
| 14977 | + onComplete: loop ? void 0 : onComplete, | |
| 14978 | + onDataFailed: onComplete, | |
| 14979 | + rendererSettings: { preserveAspectRatio: "xMidYMid slice" }, | |
| 14980 | + style: { | |
| 14981 | + position: "fixed", | |
| 14982 | + inset: 0, | |
| 14983 | + width: "100vw", | |
| 14984 | + height: "100vh", | |
| 14985 | + zIndex, | |
| 14986 | + backgroundColor, | |
| 14987 | + pointerEvents: "none" | |
| 14988 | + } | |
| 14989 | + }); | |
| 14990 | + } | |
| 14991 | + | |
| 14992 | +//#endregion | |
| 14993 | +//#region packages/packages/libs/editor-modal-shell/src/hooks/use-autoplay-carousel.ts | |
| 14994 | + var DEFAULT_INTERVAL_MS = 4e3; | |
| 14995 | + function useAutoplayCarousel(items, intervalMs = DEFAULT_INTERVAL_MS) { | |
| 14996 | + const [selectedItem, setSelectedItem] = (0, react.useState)(items[0]); | |
| 14997 | + const [isAutoPlaying, setIsAutoPlaying] = (0, react.useState)(true); | |
| 14998 | + const advanceToNextItem = (0, react.useCallback)(() => { | |
| 14999 | + setSelectedItem((current) => { | |
| 15000 | + return items[(items.indexOf(current) + 1) % items.length]; | |
| 15001 | + }); | |
| 15002 | + }, [items]); | |
| 15003 | + (0, react.useEffect)(() => { | |
| 15004 | + if (!isAutoPlaying) return; | |
| 15005 | + const id = setInterval(advanceToNextItem, intervalMs); | |
| 15006 | + return () => clearInterval(id); | |
| 15007 | + }, [ | |
| 15008 | + isAutoPlaying, | |
| 15009 | + advanceToNextItem, | |
| 15010 | + intervalMs | |
| 15011 | + ]); | |
| 15012 | + return { | |
| 15013 | + selectedItem, | |
| 15014 | + selectItem: (0, react.useCallback)((item) => { | |
| 15015 | + setSelectedItem(item); | |
| 15016 | + setIsAutoPlaying(false); | |
| 15017 | + }, []) | |
| 15018 | + }; | |
| 15019 | + } | |
| 15020 | + | |
| 15021 | +//#endregion | |
| 15022 | +//#region packages/packages/libs/editor-modal-shell/src/index.ts | |
| 15023 | + var src_exports = /* @__PURE__ */ __exportAll({ | |
| 15024 | + BackgroundLottie: () => BackgroundLottie, | |
| 15025 | + MODAL_Z_INDEX: () => MODAL_Z_INDEX, | |
| 15026 | + ModalFooter: () => ModalFooter, | |
| 15027 | + ModalHeader: () => ModalHeader, | |
| 15028 | + ModalShell: () => ModalShell, | |
| 15029 | + useAutoplayCarousel: () => useAutoplayCarousel, | |
| 15030 | + useModalShell: () => useModalShell | |
| 15031 | + }); | |
| 15032 | + | |
| 15033 | +//#endregion | |
| 15034 | +//#region \0elementor-package-library-entry | |
| 15035 | + (window.elementorV2 = window.elementorV2 || {}).editorModalShell = src_exports; | |
| 15036 | + | |
| 15037 | +//#endregion | |
| 15038 | +})(React, elementorV2.ui); | |
| 15039 | +window.elementorV2.editorModalShell?.init?.(); | |
| 3 | 15040 | //# sourceMappingURL=editor-modal-shell.js.map |