| @@ -1238,40 +1238,8 @@ | ||
| 1238 | 1238 | module.exports = ControlBaseView; |
| 1239 | 1239 | |
| 1240 | 1240 | /***/ }), |
| 1241 | 1241 | |
| 1242 | -/***/ "../assets/dev/js/editor/utils/preview-iframe-listeners.js": | |
| 1243 | -/*!*****************************************************************!*\ | |
| 1244 | - !*** ../assets/dev/js/editor/utils/preview-iframe-listeners.js ***! | |
| 1245 | - \*****************************************************************/ | |
| 1246 | -/***/ ((__unused_webpack_module, exports) => { | |
| 1247 | - | |
| 1248 | -"use strict"; | |
| 1249 | - | |
| 1250 | - | |
| 1251 | -Object.defineProperty(exports, "__esModule", ({ | |
| 1252 | - value: true | |
| 1253 | -})); | |
| 1254 | -exports.bindPreviewIframeEvents = bindPreviewIframeEvents; | |
| 1255 | -function bindPreviewIframeEvents(callback) { | |
| 1256 | - var _elementor; | |
| 1257 | - var iframeDocument = (_elementor = elementor) === null || _elementor === void 0 || (_elementor = _elementor.$preview) === null || _elementor === void 0 || (_elementor = _elementor[0]) === null || _elementor === void 0 ? void 0 : _elementor.contentDocument; | |
| 1258 | - if (!iframeDocument) { | |
| 1259 | - return function () {}; | |
| 1260 | - } | |
| 1261 | - var handleEvent = function handleEvent() { | |
| 1262 | - return callback(); | |
| 1263 | - }; | |
| 1264 | - iframeDocument.addEventListener('click', handleEvent); | |
| 1265 | - iframeDocument.addEventListener('keydown', handleEvent); | |
| 1266 | - return function () { | |
| 1267 | - iframeDocument.removeEventListener('click', handleEvent); | |
| 1268 | - iframeDocument.removeEventListener('keydown', handleEvent); | |
| 1269 | - }; | |
| 1270 | -} | |
| 1271 | - | |
| 1272 | -/***/ }), | |
| 1273 | - | |
| 1274 | 1242 | /***/ "../modules/promotions/assets/js/react/app-manager.js": |
| 1275 | 1243 | /*!************************************************************!*\ |
| 1276 | 1244 | !*** ../modules/promotions/assets/js/react/app-manager.js ***! |
| 1277 | 1245 | \************************************************************/ |
| @@ -1285,28 +1253,17 @@ | ||
| 1285 | 1253 | value: true |
| 1286 | 1254 | })); |
| 1287 | 1255 | exports.AppManager = void 0; |
| 1288 | 1256 | var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); |
| 1289 | -var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js")); | |
| 1290 | -var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); | |
| 1291 | 1257 | var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); |
| 1292 | 1258 | var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); |
| 1293 | 1259 | var _app = _interopRequireDefault(__webpack_require__(/*! ./app */ "../modules/promotions/assets/js/react/app.js")); |
| 1294 | -var _atomicPromotionMedia = __webpack_require__(/*! ./atomic-promotion-media */ "../modules/promotions/assets/js/react/atomic-promotion-media.js"); | |
| 1295 | -var _previewIframeListeners = __webpack_require__(/*! elementor-editor-utils/preview-iframe-listeners */ "../assets/dev/js/editor/utils/preview-iframe-listeners.js"); | |
| 1296 | -var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 1297 | 1260 | var _client = __webpack_require__(/*! react-dom/client */ "../node_modules/react-dom/client.js"); |
| 1298 | -function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } | |
| 1299 | -function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } | |
| 1300 | 1261 | var AppManager = exports.AppManager = /*#__PURE__*/function () { |
| 1301 | 1262 | function AppManager() { |
| 1302 | 1263 | (0, _classCallCheck2.default)(this, AppManager); |
| 1303 | 1264 | this.promotionInfoTip = null; |
| 1304 | - this.promotionWrapper = null; | |
| 1305 | 1265 | this.onRoute = function () {}; |
| 1306 | - this.unbindIframeEvents = function () {}; | |
| 1307 | - this.attachAtomicWidgetPromotionListeners(); | |
| 1308 | - this.attachWidgetPromotionListeners(); | |
| 1309 | 1266 | } |
| 1310 | 1267 | return (0, _createClass2.default)(AppManager, [{ |
| 1311 | 1268 | key: "getPromotionData", |
| 1312 | 1269 | value: function getPromotionData(promotionType) { |
| @@ -1312,41 +1269,12 @@ | ||
| 1312 | 1269 | value: function getPromotionData(promotionType) { |
| 1313 | 1270 | return elementorPromotionsData[promotionType] || {}; |
| 1314 | 1271 | } |
| 1315 | 1272 | }, { |
| 1316 | - key: "resolveWidgetPromotionData", | |
| 1317 | - value: function resolveWidgetPromotionData(detail) { | |
| 1318 | - var _elementor, _elementor$config$pro, _elementsPromotion$ac, _elementsPromotion$ac2, _elementsPromotion$ti, _elementsPromotion$co; | |
| 1319 | - var promotions = ((_elementor = elementor) === null || _elementor === void 0 || (_elementor = _elementor.config) === null || _elementor === void 0 ? void 0 : _elementor.v4Promotions) || {}; | |
| 1320 | - var widgetType = detail.widgetType || ''; | |
| 1321 | - var normalizedType = widgetType.replace(/[-_]/g, '').toLowerCase(); | |
| 1322 | - var key = Object.keys(promotions).find(function (promotionKey) { | |
| 1323 | - return promotionKey.replace(/[-_]/g, '').toLowerCase() === normalizedType; | |
| 1324 | - }); | |
| 1325 | - var promotionData = key ? promotions[key] : null; | |
| 1326 | - var elementsPromotion = ((_elementor$config$pro = elementor.config.promotion) === null || _elementor$config$pro === void 0 ? void 0 : _elementor$config$pro.elements) || {}; | |
| 1327 | - var fallbackCtaUrl = detail.ctaUrl || ((_elementsPromotion$ac = elementsPromotion.action_button) === null || _elementsPromotion$ac === void 0 || (_elementsPromotion$ac = _elementsPromotion$ac.url) === null || _elementsPromotion$ac === void 0 ? void 0 : _elementsPromotion$ac.replace('%s', widgetType)) || ''; | |
| 1328 | - var fallbackCtaText = detail.ctaText || ((_elementsPromotion$ac2 = elementsPromotion.action_button) === null || _elementsPromotion$ac2 === void 0 ? void 0 : _elementsPromotion$ac2.text) || ''; | |
| 1329 | - var widgetName = detail.widgetTitle || detail.title || ''; | |
| 1330 | - var hideProTag = detail.hideProTag || false; | |
| 1331 | - var resolvedPromotionData = promotionData ? _objectSpread(_objectSpread({}, promotionData), {}, { | |
| 1332 | - ctaUrl: promotionData.ctaUrl || fallbackCtaUrl, | |
| 1333 | - ctaText: promotionData.ctaText || fallbackCtaText, | |
| 1334 | - hideProTag: hideProTag | |
| 1335 | - }) : { | |
| 1336 | - title: detail.title || ((_elementsPromotion$ti = elementsPromotion.title) === null || _elementsPromotion$ti === void 0 ? void 0 : _elementsPromotion$ti.replace('%s', widgetName)) || '', | |
| 1337 | - content: detail.content || ((_elementsPromotion$co = elementsPromotion.content) === null || _elementsPromotion$co === void 0 ? void 0 : _elementsPromotion$co.replace('%s', widgetName)) || '', | |
| 1338 | - ctaUrl: fallbackCtaUrl, | |
| 1339 | - ctaText: fallbackCtaText, | |
| 1340 | - hideProTag: hideProTag | |
| 1341 | - }; | |
| 1342 | - return applyProConnectPromotionOverrides(resolvedPromotionData); | |
| 1343 | - } | |
| 1344 | - }, { | |
| 1345 | 1273 | key: "mount", |
| 1346 | 1274 | value: function mount(targetNode, selectors) { |
| 1347 | - var _elementor2, | |
| 1348 | - _elementor2$getPrefer, | |
| 1275 | + var _elementor, | |
| 1276 | + _elementor$getPrefere, | |
| 1349 | 1277 | _rootElement$getAttri, |
| 1350 | 1278 | _this = this; |
| 1351 | 1279 | if (this.promotionInfoTip) { |
| 1352 | 1280 | return; |
| @@ -1357,9 +1285,9 @@ | ||
| 1357 | 1285 | return; |
| 1358 | 1286 | } |
| 1359 | 1287 | this.attachEditorEventListeners(); |
| 1360 | 1288 | this.promotionInfoTip = (0, _client.createRoot)(rootElement); |
| 1361 | - var colorScheme = ((_elementor2 = elementor) === null || _elementor2 === void 0 || (_elementor2$getPrefer = _elementor2.getPreferences) === null || _elementor2$getPrefer === void 0 ? void 0 : _elementor2$getPrefer.call(_elementor2, 'ui_theme')) || 'auto'; | |
| 1289 | + var colorScheme = ((_elementor = elementor) === null || _elementor === void 0 || (_elementor$getPrefere = _elementor.getPreferences) === null || _elementor$getPrefere === void 0 ? void 0 : _elementor$getPrefere.call(_elementor, 'ui_theme')) || 'auto'; | |
| 1362 | 1290 | var isRTL = elementorCommon.config.isRTL; |
| 1363 | 1291 | var promotionType = (_rootElement$getAttri = rootElement.getAttribute('data-promotion')) === null || _rootElement$getAttri === void 0 ? void 0 : _rootElement$getAttri.replace('_promotion', ''); |
| 1364 | 1292 | this.promotionInfoTip.render(/*#__PURE__*/_react.default.createElement(_app.default, { |
| 1365 | 1293 | colorScheme: colorScheme, |
| @@ -1370,99 +1298,25 @@ | ||
| 1370 | 1298 | } |
| 1371 | 1299 | })); |
| 1372 | 1300 | } |
| 1373 | 1301 | }, { |
| 1374 | - key: "mountCard", | |
| 1375 | - value: function mountCard(targetEl, wrapperClassName, appProps) { | |
| 1376 | - var _elementor3, | |
| 1377 | - _elementor3$getPrefer, | |
| 1378 | - _this2 = this; | |
| 1379 | - this.unmount(); | |
| 1380 | - this.promotionWrapper = document.createElement('span'); | |
| 1381 | - this.promotionWrapper.className = wrapperClassName; | |
| 1382 | - document.body.appendChild(this.promotionWrapper); | |
| 1383 | - this.attachEditorEventListeners(); | |
| 1384 | - this.promotionInfoTip = (0, _client.createRoot)(this.promotionWrapper); | |
| 1385 | - this.promotionInfoTip.render(/*#__PURE__*/_react.default.createElement(_app.default, (0, _extends2.default)({ | |
| 1386 | - colorScheme: ((_elementor3 = elementor) === null || _elementor3 === void 0 || (_elementor3$getPrefer = _elementor3.getPreferences) === null || _elementor3$getPrefer === void 0 ? void 0 : _elementor3$getPrefer.call(_elementor3, 'ui_theme')) || 'auto', | |
| 1387 | - isRTL: elementorCommon.config.isRTL, | |
| 1388 | - anchorTarget: targetEl, | |
| 1389 | - doClose: function doClose() { | |
| 1390 | - return _this2.unmount(); | |
| 1391 | - } | |
| 1392 | - }, appProps))); | |
| 1393 | - } | |
| 1394 | - }, { | |
| 1395 | - key: "resolveAtomicWidgetPromotionCardProps", | |
| 1396 | - value: function resolveAtomicWidgetPromotionCardProps(_ref) { | |
| 1397 | - var cardType = _ref.cardType, | |
| 1398 | - content = _ref.content; | |
| 1399 | - return { | |
| 1400 | - cardType: cardType, | |
| 1401 | - promotionData: applyProConnectPromotionOverrides({ | |
| 1402 | - title: content.title, | |
| 1403 | - content: content.content, | |
| 1404 | - ctaText: content.ctaText, | |
| 1405 | - ctaUrl: content.widgetCtaUrl, | |
| 1406 | - image: content.image, | |
| 1407 | - animationData: (0, _atomicPromotionMedia.resolvePromotionAnimation)(content.animation) | |
| 1408 | - }) | |
| 1409 | - }; | |
| 1410 | - } | |
| 1411 | - }, { | |
| 1412 | - key: "attachAtomicWidgetPromotionListeners", | |
| 1413 | - value: function attachAtomicWidgetPromotionListeners() { | |
| 1414 | - var _elementor4, | |
| 1415 | - _this3 = this; | |
| 1416 | - var promotions = ((_elementor4 = elementor) === null || _elementor4 === void 0 || (_elementor4 = _elementor4.config) === null || _elementor4 === void 0 ? void 0 : _elementor4.atomicWidgetPromotions) || []; | |
| 1417 | - promotions.forEach(function (_ref2) { | |
| 1418 | - var type = _ref2.type, | |
| 1419 | - cardType = _ref2.cardType, | |
| 1420 | - content = _ref2.content; | |
| 1421 | - document.addEventListener("".concat(type, "-promotion:open"), function (event) { | |
| 1422 | - _this3.mountCard(event.detail.target, "e-".concat(type, "-promotion-wrapper"), _this3.resolveAtomicWidgetPromotionCardProps({ | |
| 1423 | - cardType: cardType, | |
| 1424 | - content: content | |
| 1425 | - })); | |
| 1426 | - }); | |
| 1427 | - }); | |
| 1428 | - } | |
| 1429 | - }, { | |
| 1430 | - key: "attachWidgetPromotionListeners", | |
| 1431 | - value: function attachWidgetPromotionListeners() { | |
| 1432 | - var _this4 = this; | |
| 1433 | - document.addEventListener('widget-promotion:open', function (event) { | |
| 1434 | - _this4.mountCard(event.detail.target, 'e-widget-promotion-wrapper', { | |
| 1435 | - cardType: 'widgetPromotion', | |
| 1436 | - promotionData: _this4.resolveWidgetPromotionData(event.detail) | |
| 1437 | - }); | |
| 1438 | - }); | |
| 1439 | - } | |
| 1440 | - }, { | |
| 1441 | 1302 | key: "unmount", |
| 1442 | 1303 | value: function unmount() { |
| 1443 | - var _this$promotionWrappe; | |
| 1444 | 1304 | if (this.promotionInfoTip) { |
| 1445 | 1305 | this.detachEditorEventListeners(); |
| 1446 | 1306 | this.promotionInfoTip.unmount(); |
| 1447 | - this.unbindIframeEvents(); | |
| 1448 | 1307 | } |
| 1449 | - (_this$promotionWrappe = this.promotionWrapper) === null || _this$promotionWrappe === void 0 || (_this$promotionWrappe = _this$promotionWrappe.parentNode) === null || _this$promotionWrappe === void 0 || _this$promotionWrappe.removeChild(this.promotionWrapper); | |
| 1450 | 1308 | this.promotionInfoTip = null; |
| 1451 | - this.promotionWrapper = null; | |
| 1452 | 1309 | } |
| 1453 | 1310 | }, { |
| 1454 | 1311 | key: "attachEditorEventListeners", |
| 1455 | 1312 | value: function attachEditorEventListeners() { |
| 1456 | - var _this5 = this; | |
| 1457 | - this.unbindIframeEvents = (0, _previewIframeListeners.bindPreviewIframeEvents)(function () { | |
| 1458 | - return _this5.unmount(); | |
| 1459 | - }); | |
| 1313 | + var _this2 = this; | |
| 1460 | 1314 | this.onRoute = function (component, route) { |
| 1461 | 1315 | if (route !== 'panel/elements/categories' && route !== 'panel/editor/content') { |
| 1462 | 1316 | return; |
| 1463 | 1317 | } |
| 1464 | - _this5.unmount(); | |
| 1318 | + _this2.unmount(); | |
| 1465 | 1319 | }; |
| 1466 | 1320 | $e.routes.on('run:after', this.onRoute); |
| 1467 | 1321 | } |
| 1468 | 1322 | }, { |
| @@ -1471,17 +1325,8 @@ | ||
| 1471 | 1325 | $e.routes.off('run:after', this.onRoute); |
| 1472 | 1326 | } |
| 1473 | 1327 | }]); |
| 1474 | 1328 | }(); |
| 1475 | -function applyProConnectPromotionOverrides(promotionData) { | |
| 1476 | - if (!elementor.helpers.hasProAndNotConnected()) { | |
| 1477 | - return promotionData; | |
| 1478 | - } | |
| 1479 | - return _objectSpread(_objectSpread({}, promotionData), {}, { | |
| 1480 | - ctaUrl: elementorProEditorConfig.urls.connect, | |
| 1481 | - ctaText: (0, _i18n.__)('Connect & Activate', 'elementor') | |
| 1482 | - }); | |
| 1483 | -} | |
| 1484 | 1329 | |
| 1485 | 1330 | /***/ }), |
| 1486 | 1331 | |
| 1487 | 1332 | /***/ "../modules/promotions/assets/js/react/app.js": |
| @@ -1499,268 +1344,44 @@ | ||
| 1499 | 1344 | value: true |
| 1500 | 1345 | })); |
| 1501 | 1346 | exports["default"] = void 0; |
| 1502 | 1347 | var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); |
| 1503 | -var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); | |
| 1504 | -var _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "../node_modules/@babel/runtime/helpers/objectWithoutProperties.js")); | |
| 1505 | 1348 | var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); |
| 1506 | -var _atomicPromotionCard = _interopRequireDefault(__webpack_require__(/*! ./components/atomic-promotion-card */ "../modules/promotions/assets/js/react/components/atomic-promotion-card.js")); | |
| 1507 | 1349 | var _promotionCard = _interopRequireDefault(__webpack_require__(/*! ./components/promotion-card */ "../modules/promotions/assets/js/react/components/promotion-card.js")); |
| 1508 | -var _widgetPromotionCard = _interopRequireDefault(__webpack_require__(/*! ./components/widget-promotion-card */ "../modules/promotions/assets/js/react/components/widget-promotion-card.js")); | |
| 1509 | -var _excluded = ["colorScheme", "isRTL", "anchorTarget"]; | |
| 1510 | -function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } | |
| 1511 | -function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } | |
| 1512 | -var OFFSET_MODIFIER = { | |
| 1513 | - name: 'offset', | |
| 1514 | - options: { | |
| 1515 | - offset: [-24, 8] | |
| 1516 | - } | |
| 1517 | -}; | |
| 1518 | -function getPlacement(anchorTarget, isRTL) { | |
| 1519 | - if (!anchorTarget) { | |
| 1520 | - return 'right'; | |
| 1521 | - } | |
| 1522 | - return isRTL ? 'left-start' : 'right-start'; | |
| 1523 | -} | |
| 1524 | -function getCardContent(props) { | |
| 1525 | - if ('atomic' === props.cardType) { | |
| 1526 | - return /*#__PURE__*/_react.default.createElement(_atomicPromotionCard.default, { | |
| 1527 | - doClose: props.doClose, | |
| 1528 | - promotionData: props.promotionData | |
| 1529 | - }); | |
| 1530 | - } | |
| 1531 | - if ('widgetPromotion' === props.cardType) { | |
| 1532 | - return /*#__PURE__*/_react.default.createElement(_widgetPromotionCard.default, { | |
| 1533 | - doClose: props.doClose, | |
| 1534 | - promotionData: props.promotionData | |
| 1535 | - }); | |
| 1536 | - } | |
| 1537 | - return /*#__PURE__*/_react.default.createElement(_promotionCard.default, { | |
| 1538 | - doClose: props.onClose, | |
| 1539 | - promotionsData: props.promotionsData | |
| 1540 | - }); | |
| 1541 | -} | |
| 1542 | -var App = function App(_ref) { | |
| 1543 | - var colorScheme = _ref.colorScheme, | |
| 1544 | - isRTL = _ref.isRTL, | |
| 1545 | - anchorTarget = _ref.anchorTarget, | |
| 1546 | - props = (0, _objectWithoutProperties2.default)(_ref, _excluded); | |
| 1350 | +var App = function App(props) { | |
| 1547 | 1351 | return /*#__PURE__*/_react.default.createElement(_ui.DirectionProvider, { |
| 1548 | - rtl: isRTL | |
| 1352 | + rtl: props.isRTL | |
| 1549 | 1353 | }, /*#__PURE__*/_react.default.createElement(_ui.LocalizationProvider, null, /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, { |
| 1550 | - colorScheme: colorScheme, | |
| 1551 | - palette: "unstable" | |
| 1354 | + colorScheme: props.colorScheme | |
| 1552 | 1355 | }, /*#__PURE__*/_react.default.createElement(_ui.Infotip, { |
| 1553 | - content: getCardContent(props), | |
| 1554 | - placement: getPlacement(anchorTarget, isRTL), | |
| 1356 | + content: /*#__PURE__*/_react.default.createElement(_promotionCard.default, { | |
| 1357 | + doClose: props.onClose, | |
| 1358 | + promotionsData: props.promotionsData | |
| 1359 | + }), | |
| 1360 | + placement: "right", | |
| 1555 | 1361 | arrow: true, |
| 1556 | 1362 | open: true, |
| 1557 | 1363 | disableHoverListener: true, |
| 1558 | - PopperProps: _objectSpread({ | |
| 1559 | - modifiers: [OFFSET_MODIFIER], | |
| 1560 | - sx: { | |
| 1561 | - zIndex: function zIndex(theme) { | |
| 1562 | - return theme.zIndex.appBar - 1; | |
| 1364 | + PopperProps: { | |
| 1365 | + modifiers: [{ | |
| 1366 | + name: 'offset', | |
| 1367 | + options: { | |
| 1368 | + offset: [-24, 8] | |
| 1563 | 1369 | } |
| 1564 | - } | |
| 1565 | - }, anchorTarget && { | |
| 1566 | - anchorEl: anchorTarget | |
| 1567 | - }) | |
| 1370 | + }] | |
| 1371 | + } | |
| 1568 | 1372 | }, /*#__PURE__*/_react.default.createElement("span", null))))); |
| 1569 | 1373 | }; |
| 1570 | 1374 | App.propTypes = { |
| 1571 | 1375 | colorScheme: PropTypes.oneOf(['auto', 'light', 'dark']), |
| 1572 | 1376 | isRTL: PropTypes.bool, |
| 1573 | - anchorTarget: PropTypes.object, | |
| 1574 | - cardType: PropTypes.string, | |
| 1575 | 1377 | promotionsData: PropTypes.object, |
| 1576 | - promotionData: PropTypes.object, | |
| 1577 | - ctaUrl: PropTypes.string, | |
| 1578 | - doClose: PropTypes.func, | |
| 1579 | - onClose: PropTypes.func | |
| 1378 | + onClose: PropTypes.func.isRequired | |
| 1580 | 1379 | }; |
| 1581 | 1380 | var _default = exports["default"] = App; |
| 1582 | 1381 | |
| 1583 | 1382 | /***/ }), |
| 1584 | 1383 | |
| 1585 | -/***/ "../modules/promotions/assets/js/react/assets/atomic-form-animation.json": | |
| 1586 | -/*!*******************************************************************************!*\ | |
| 1587 | - !*** ../modules/promotions/assets/js/react/assets/atomic-form-animation.json ***! | |
| 1588 | - \*******************************************************************************/ | |
| 1589 | -/***/ ((module) => { | |
| 1590 | - | |
| 1591 | -"use strict"; | |
| 1592 | -module.exports = /*#__PURE__*/JSON.parse('{"v":"5.7.5","fr":100,"ip":0,"op":876,"w":296,"h":148,"ddd":0,"assets":[{"id":"0","layers":[{"ddd":0,"refId":"g","w":1184,"h":592,"ind":1,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[113,57],"ix":2},"a":{"a":0,"k":[592,296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":868,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":884,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"g","layers":[{"ddd":0,"ind":29,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":668,"s":[74,74],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":676,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"h","w":80,"h":78,"ind":30,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-19,-14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":29},{"ddd":0,"ind":31,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"i","w":346,"h":58,"ind":32,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":31},{"ddd":0,"refId":"j","w":626,"h":239,"ind":33,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[279,120],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":34,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.82,1,0.71],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":540,"s":[592,296],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[592,396],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":600,"s":[592,396],"h":1},{"t":620,"s":[592,347],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":540,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":560,"s":[373,373],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":35,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.012,0.18,0.193],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"k","ind":36,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"l","layers":[{"ddd":0,"refId":"m","w":344,"h":54,"ind":37,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":38,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[80,78],"ix":2},"p":{"a":0,"k":[21,25],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"h","layers":[{"ddd":0,"ind":39,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"l","w":80,"h":78,"ind":30,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,25],"ix":2},"a":{"a":0,"k":[21,25],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"m","layers":[{"ddd":0,"ind":40,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":41,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":42,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":43,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"n","layers":[{"ddd":0,"refId":"o","w":344,"h":54,"ind":44,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":45,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[64,60],"ix":2},"p":{"a":0,"k":[29,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"i","layers":[{"ddd":0,"ind":46,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"n","w":346,"h":58,"ind":32,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"o","layers":[{"ddd":0,"ind":47,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":48,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":49,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":50,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"j","layers":[{"ddd":0,"ind":33,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":540,"s":[313,176],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[313,76],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":600,"s":[313,76],"h":1},{"t":620,"s":[313,27],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":540,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":560,"s":[446,446],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":51,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":33},{"ddd":0,"refId":"p","w":24,"h":8,"ind":52,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":51},{"ddd":0,"ind":53,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":33,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.82,1,0.71],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"p","layers":[{"ddd":0,"ind":54,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"k","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"1","layers":[{"ddd":0,"ind":55,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"q","w":346,"h":58,"ind":56,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":55},{"ddd":0,"ind":57,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":536,"s":[74,74],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":544,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"r","w":80,"h":78,"ind":58,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-19,-14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":57},{"ddd":0,"refId":"s","w":626,"h":239,"ind":59,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[279,120],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":60,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.8,0.86,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":424,"s":[592,296],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[592,396],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":484,"s":[592,396],"h":1},{"t":504,"s":[592,347],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":424,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":444,"s":[373,373],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":61,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.01,0.004,0.232],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"t","ind":62,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"u","layers":[{"ddd":0,"refId":"v","w":344,"h":54,"ind":63,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":64,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[64,60],"ix":2},"p":{"a":0,"k":[29,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"q","layers":[{"ddd":0,"ind":65,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"u","w":346,"h":58,"ind":56,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"v","layers":[{"ddd":0,"ind":66,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":67,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":68,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":69,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"w","layers":[{"ddd":0,"refId":"x","w":344,"h":54,"ind":70,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":71,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[80,78],"ix":2},"p":{"a":0,"k":[21,25],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"r","layers":[{"ddd":0,"ind":72,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"w","w":80,"h":78,"ind":58,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,25],"ix":2},"a":{"a":0,"k":[21,25],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"x","layers":[{"ddd":0,"ind":73,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":74,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":75,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":76,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"s","layers":[{"ddd":0,"ind":59,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":424,"s":[313,176],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[313,76],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":484,"s":[313,76],"h":1},{"t":504,"s":[313,27],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":424,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":444,"s":[446,446],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":77,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":59},{"ddd":0,"refId":"y","w":24,"h":8,"ind":78,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":77},{"ddd":0,"ind":79,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":59,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.8,0.86,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"y","layers":[{"ddd":0,"ind":80,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"t","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"2","layers":[{"ddd":0,"refId":"z","ind":3,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[653.5,533.5],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":716,"s":[0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":764,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]}},{"t":868,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":884,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"z","u":"","p":"data:image/png;base64,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8z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z7YAAP76WgAAAAAhAv9TSArcPg+8ZFeuS5te5QitGWKMuFCzmSzN/CFDE0o9GLtt465CWR6JBFj7yYtwh7N3BtG8lMl2AFtfysauWruqxNu9VxwU2itUFdYjIB5OyFSK0cb4lTcJOUxf/ml70n6bnZRTkQnZC4/U6XPXwA/xjnQ82RipjdvlsVTD1TpRJKp6WsFvGtNXYFmBFG7sX5R2lTRfnO0W83OfuXAtcTwoix4mvGtpsMi6aMpCn3byeTwf3JCLNon5cZm7YwYABA/IOu9zm8Dsk8QdbY2erIiNmWNtb4KY7dI6nrmg8g+HmMP3ObRWQo1xEdzS6GD0J+VFCvM+B/7Z1BR8JnyDbRO85y/ak+56/+vlCZmyMoUgwupiyh08vEeoYE2v/rNQzHfLtBdVfgYzPWH4dPuwXlH/5jfTpIVjZWqXCt5brghstH9e2Wke68drY0VlWE4tjoc5LW5DWrECO65cMzBIVIR/znfHqQoWiLD1q6q4ae55Vb952kY6MIr2R1teq6JPwvPWfPB+/xCkdLF4rhsTEaaVXf6Tkvsp1kGpAAjRR5SwsrQkojf6BVyZAJTUi8bCXitzaigQ4XHgu4ruLWlsv6+kFFczxE4r8FJmHRKD/hF7aM31Do7BXTtmK4gUGYteEw1/7Y33FrvETEygALLMw/r/mMBc9HHKk8RP5rSa6Vntb5Cc5pnMf6nuXQvFIInBXT0/bAk9fDEcGvYHCYqm9zsj6lwDEdkVaSA/AUpnTun5rmAmTrkpP23X2i9PiYpOQCakJCS6gZeSNiz6vZvxc4xp+RVdUyaOp2kTBoNRsq6Yv7zWx6zJPNJpXCu0d+nLvj8gjkOQzJc+7g8d9/49lWBPalK1pOs6IvvmZRvEmt6eIMVyHp0aEUBD0hGMYcqbATia1Q0CKSPYyrfw/8zpzWmBkyX+KYjZH7OCfq2oc/VreBjdj0AvXqVVUv3ym8nLyIy42WxK18Xtd/yoxuYY22zUPkXR0rp0++OsFNZzCkCMoo2gluQGccruHXwY3vlmEsXfCeReiba/hvtkgpyCpadwsBI1Q/44h6BdGiX3V3aHkSj6iy7WqI6VOFvsBfmtTGaOgm1AaofOTFoUTZNXzV4sYHBseItex5zxgKggbsPHSsDRxjml4NfSQN9T3nG1KJeKy6pMFEfkeRV6QsKE/70m3LBamVttMJKpPzfHHcVyDiJwkyvZCvrM5P0CfoATBOBW739Sy44OsPWKtVUhmyAekWVgF3b+Ecl1U07gaNMmPcwSrrYAAtvF2rKnkJUxI13lNYM9vpDFmz+J7Nixjd701+26pY3GZU1Oz32JQ+m5/VUPgNILiZ2vpmgWG+XvV/taixBtC6d33XGM6UTIlO7/kFhc70BWbNtJQu4E6cEwCb4Z3YHYgwpjpWPDWq2PU0nMcl6RFh5t6G0ME4Cf/sFqv7WkENi0JNwaeMokOJCMJveBDFSELpzIsTUvlBnTl4137gyrcdTqIiuGxRVbxRkCoMcb/5kYFFxEaY+a5F+rMtzpKLrMsd9H54eZAfmFHB+4FYfwTnhsvkJ55h3N+wnkvGykeChas2GRs1X7riSAUa3BP9qWHjv6OHRcmtrdOhBjvi5TWY8Fx48udMZdVYI7vCQLbZIKFKaraAKSRmd0V/857HfQViRybOfuIggMBCmgHPcO77JYbl2Z6jYPGsi4zCzAEVfjR79kqb9hWETLC2tp6S2fmzpqE9m70Ho1agxB5/bxWU3vc6h7HzvELaHyNy4LJuEcYzZyJKypigZQqguvL9vgPvoCNAwyXUW0y67rRQg9qAwWnx9xuCI3QshsWrOwNR/nxmjvF180lEvf7yBm0feDAevaMbu/V9HSQN3QbFliB/oKE6fDSSssem7H+ISR+qJinBfBs99WY+f2S+r7F3vYVMY26Ku2iWySzX1EOdxkbHlPD7NfxKZqn+iis7ItEdZCu8OJszK+/01BHK1ctxv/5nz6fiWFSRCXaDw2UWcbc/5ErUDcHsq045uNfYsblCo1Z6CxwjJJka/rk8olB+XhKlg/AApw36uaMRxkURmMHecku2+cjYK4qmR8Ho5ySHpmTdh1D3LkvJwi09+f7PT1dLFhuD9mmwfPmvGvmNmKm6iLFv+g8oeitJ6ok3ze4P9prTUVou+1r/T3QNaAMWSXuAdGYtoOMGqoKgiAtjMVnNtQsXKA71QmknOdNpHLeq3EmJ+gmKFjio6t6JX/4Yj5vU2CuMChkXv9XrZztkl9ifE3CaMgJEWvPltlQcpsC+ywPRk354+TtkyDrMPQIyAySWK4nuhI7h2Ex0r+tktzpd/OeHUHS9VGDdS6YG2LoiFJttMX2wf8QjQusa9QQvgYpQwzAusetuyiIV1Y/SAgqQTvR+sW7woCaxX6xOrlXkMkl5EgHgqtzsC+exiXbhPjIB17OjT2JHieoqBrU5P7X1kzXMECcCwSBxZCy+FYYNfUaVi48YDBZ7zBGI51zI+lSFIRhk8PSgLQACx6w7r7S1Ettgz24HTpss0YX9Izd/iRkUPjovxhxG1pVvGuDB6iiDdcIn4qzMQeeruuWGgKcjZRJ7aV4XFCFiRc1HewQZVjm8f9FSe3ByJ8a+VdxJBOmqSTUnjHwtrOGszK/TASW55GJHUgDc4KtgRg4opDlBxkf5cJc3Ws9xgX25+nqQgmWi4vRs0/n/we1+4P+BzqjBkoMpjGNH1Ft8W4CG/mQvwAbeynvKjzm3Ui/HL2oCXdPu1TY6zuwTqLMjT0MtksmHsKJt93ZQmysCdYgg7stSElhgj1XiEnOCcnEZRTU6+bj5/LrlGowppRbYpASL1ViAiH7EryihNRzY+XGVS6H3iV+4nxE45jIeVPmKKvkVbcSPRjUB43DUWrD4vxPRLOA0yHDRmIyh2VaTMQZT5UcLW/L7f80NzOOsbdaT3N9zkv6hn90iU4t1u1tjM8cvYf/Zp405zlljm/3KtFZLvZhjvTzIBJgFYo5ZtynnD6MKlM1MKPZ9uw3TxpI/TgFGdHLfyHQohDH8Q+TSEr3sxignTB0rhr+gwChs6sLFQ524FSDTu5Z4jxJwdtrRLfCS+a1w5bDW+FV8gOcuyoqMK2YVIeABW6yaKDdLrdz3VEi179tGS9T2oci5L4OLn/PgbFgX7ONX9N7FrMHv3Igk93YOTulGmFVYpB+xJtAk2nH9/sMmHlRVrkz3EgE1UcpnkPJCAlKo1ShvCUi+Zi2DBct+Pb5BvDFSnh9FA8ZTjw3gqd6mWUdGlaCO2v0F7vJ4x7KG2Z8eDe1pFIzYHECgoJmXjoxbI4zFP/Cu1bg4gSmxPDCTXn0zC26Rdky3YTklcjbgjsiEm6YhVNXw6IrkA0bQeaLUOrlZf8CNU7m9L0CqK1i6y7M5ROffDMiwKSXWMJ6QJ7wTpYlFWv2TTOTlRqp7NWS8E9fDrGLvuck3HZA12uUVaBg1HZkO9jtXHuVtFIe5sdYuZJT4ZIorbW/mNFndIs7Da/F5w+QRDG6WibnGaSBej1CbQUOaQxJDgffzeQj25RQPYtJaqtPPwKUr4qSOQx2229fjmt8C86abhJSYOU/cmQL7hQMhPZC4awnSo6BvKiPRna/EqsZMBYa1/2c0FjUQfBbCYft3zgs1v3StQ80VKud3JPGfwT/OJT85NdJOu8rKiIoa7Ai2BVQlxvBhg6C+d5+Tu3JEiPEVzPG6cx8kWS8kM7dDbkTKQkGEUH4nMnfEKywLqk7SG/UbIddPT9RdU1rGzbttjqk/EgCUH8f3pkycK5Z/WYKy8/GLfHsd8RSaeXSL/yNgOV+nBLe8w9nfIWOf9GkwZ3qyBTO6oRrquu/svlnmit5wGhjADSZAXB2Vhr8RPhXH/gPiCrG0AG3D/xsyz1nbh/n0X1jPp1MJPKHxR0d1HemVB8/PODU9hm4QpFE9dD7a8I7N9xTUaipgC2S8hWS6fhztetipqjxNDv6jiKmmeRusFK8yfJL+2wSu8qOOVLmspo/m0ffS25nqJV28o93N7teCJULmGPGOiIfbouPreKheFUDOtofgconQKaSR9k4bzsBLhB7zQ880007VJlbOOZIGOwzakiiFyvjiDMd+8/X+5RNRhhjx1yp0Yb4CIKMvIVEeg8AgxHUg4AbOOm3DMAbMM3VYxaT0NG5bO2c//St3pfrWM07Y8QegeMsLy0TWc6JLRHoDJBfImPTNzV2Kvxw1a5RXlxGV0xVkabCqCXdkTXnkyL6DJaa9kuBAEhgvS9hjTgAtYJR4y5ginFzroe7nCFq0hHHoUYwRkl36AQTXlGHl/hRLfthBGcWn9AjnCL1K6zbjSLmYoAMGPReJMV4U1wXKccFj3+36+Bx1X9CtpUhuKXLe6t0AnUYWrSquFPOHJKR/g25LOw4qt8sZgNbaiAmosWrx4FoC+7q9qU6Wdq4msP4xjh8C1UKXazzdUFvX0dVbDvH0odFkF5knZFL+DudouANyCbRpD0l7XwLmhcsCip1UTUoat324LUIBShDpe8U7d+H7fcquVVN+m5d7DQZb7RBiCIAPptEr+5oVG0MkJS+Jxdfo8Ju9jgDTm9RBMKjYkGxSFgJzhoK9CafK7ke7/pU/TqIJyK65GOnc+YarJtMJ+Q8WoECLTzswnmlmWKhX0RQzftKwEPYZxTzvMmS9J0QJMv8W7XshpXZxsKUvndM2H4uNscT+qVQ6+W673JG8f+NasFy+ZEEEe00nuqAl8DLuVVOvPwXSfpY9sZDgPJSf1SrYakD4HPlN/OFJm+8aFay8EdFqAO7feumx2CtLeQjg3dnX/V5PwcYHU+4E01yLk9noSPFgxgcGiqNKqcn1nykaETVC+nRXV/H+5EQ5bTDp6mE1ud9V4A5D22rrXIWkjfb4wnaTsZyyW9C4OtSvOFn9dfo0WFOz/Acu0ercj4QWkrjy6aGaQXDwX93ll/1/bkRSjPC9zphts7CaTVbJYCptToCf8zz9qPfeUuh1kv1dMLK70/BxTCrARO3G5/aUYdCP9L7PnunE5FAyahRpGWe2/AIb5CWLT4j2CM0zRKw+NHR2eGjwe1FgPvKuDnS7k1glgPiS2/jVE/F+xafEewRmmE/aN27gfjJjvi2E/uS2lVgd2dgcjqdso9TjW5L6YEJ8z2sO1Iuv44CYVeYe8Kqh78UwXWnFXiRTgxewedIY0naVmII3MRvK1cQqEruAwdqzwcuA6SyufPicE5C2X9/EGaQeCCFrYFpFYH1+JcpBYHn2m0BL0HJl3H7DB0guQFp5RYIIjtPmZaZaQueAK6C63ANIvAc9sb2Jkas4mhllCcNE9lu1RImrazHdAvqYj1qP6YhpghmWuP4k5nj1Tr35KeT4IlID+HJJ56bMP8cAji9RBj19LrXUHnFKPjAWSB3cSc5xYa5PuyadEFZX+Z6ctsny6kvDqGpLtDFwxCOQzu2Pliho0N5wW9angkhnGFwwa3WntaK0yXlb9Wj2+VcoLhpdiNWNTwSPtRTun/tSjyZuIvo6v3ViCk7Xbjirq5R9WOyy9ccnmpCu6U8BEccA1jFCOCHb5oyE3XdLH9luAskBL2t70+Sm62XBPxTsZs+PG38Ewx3gD/b4xiGAizxnZ01ShiFY2uiwiMyC2m2YNkF0DtDTe0h8GHg/8fyvx3Kv++LMHlxoIQMrBeR6/aMtQJOaVbsy4KfXvVUlaGa95Al3Ds2PWopufBxMlGCjaE/vTkuvALjFlbogNKq8iJKZUYO0bu+P3fkAuBVhkdJkUCMfVIwY58MWre+Bpf+9NFgqEOHc5RpqfVyEbvwwzTTJZc0QrRtojmAb4WU+4UMI07uAIw4NjQELXg39iGO98/9y4x0e1K+vQgPOSpheNIvfeAbCK+YxhSdUKUpDeXlX7Zr3bd8RUTfzOUcGV1aEgk8kB5cC3LTtWFAnKC7kirLwjxLhbOesj8MhDyLPDkyXCttUZ/iJOlOGVs6Y91r/XlFYf/HEPQgfnjtlMrtKn7X4P8zLQaNbAxFrzIYgwHntYeG90sKmdIuSdneLG7nrPhIiQDN81OQjPc2iRlMAtu4M4aAyEaz2SrgPlFGE9RZtyTxihh6o//BHiHJNDiqne5e9zuChLgrt9B7xdM8Kdx7xPw59tEOsJG9v8MBRNIEaLYY/qpvghSMfaDVMlWcNOp9vjtoWAmyBi+hkiHxJN/9p6UlbYQffv7NdC1mEOxeo4Xrqrf+0MZmZkGmQ/ShgD+GeR1chHI/uGZwQWeRNIhf7p1FSp0r6uTChsBZT75WXUxV7yFD378a2xmsB52hI8dp5NOBEkOBM33PK8QEL1wH0xw1ftHOFH19eozTyFmipgOV7Zbedrm22gE7nzq3TE5HSdreaMQHLje/vZHIuS5SVh9XcwH1JDE8/a1QME4hq1MKBjH2jEkhdMrjs0Qol0yCI9MoIi1hAARixwJSMpDvI6CCIHvZ6+fXQKHo6IJ8L25YECi9jT/UEPXKkvQJDYWxqOHfOHW/xPN/RVRK8V6xre96gzbg/a1b+qfwJNahrk5B/fLv3XbQqxX8KCwOR35TMZ10k1MlWXdsICCKjcARZz7gbMgDw8NHCf5jutpqdd2aJspLcvRe6oIyDSu0T8elK7z04/T6lISZndrbMdndKqoob/qkQ/yfMogN2fKPD/azEg9D3EQKqTjtMg9eN9q192xHHr+H+5ItOkVV54Ka9q9sbPi7ia2rK1vvM/CQzod1P6kqycxpN5rYCFNyT7R7c/RlIH0+vOHLqRE7INQsd57fWIQq/SC+rR1VwDbZTVz2ru3XuwwSHw6LqbxHsEZpmiVh8aOjs8NHg9qLAfeVcHOl3JrD2fGjmbxk6HRWPPo6AOpWIj0LdZRPkL72nPWqci06UgMyOxz4VJnIkWFd8P3m+lRxPrthzElyzOa4mRM/2Bx7NH624udAgDVuF4utgA9hvETaZCpM7F1pWb6itNhXq9FNHoDqrLMAxVFKkoLcOZArCMx7qSDis/ly/pgkY47+4pAQzN7SVyV29k+jngNw5+ok0g42mGJ1DW0VeJpqLN9w6+TOmnchPYUVk8wJuyvGhjFCqPhlqfb0EsMGzvIOmfESq/CXH/c9jNqp8aCrZ3A9FD3AwE0SjpASEj6ymMkZB1+L7IrpUMODrUSDLdlsH15z+gwcWTAEfxDbXQS/1q3p9fg1jRq2byKVWhO03EpeqXgPDkpAzXcQffS0EVO3GWUOiiBgVe6FRG7Y0qM7llZkKGgHZPcsNWR77Dri60N9yQ9boQ0Hkx05R2md75FZEVfticLyW5ZXHjd0dGmOX5HTrW7H7cgysMvhYBjeug/YqD1OFmH/1xXs2dAKm8gLJfReENiKlCLOaK9MJx5zLOyTJ5jji6GC77fKh/FyAzsS3P5Mwf83X83I4hbOttSLNqQqrKVdYxRb/4j43K3GtGgQOtSefSME7FFr0OFCzmOKImdkwE0rQyvxcXI37WbjBzFX60/eDV3gfWTmPI3tthS6vjenMcyKlJm9jqIkKOZYovAFWuGdYdpGIS8c35dQn4K3VrSgLq29MBI6gCMaFsqVq1EbyIyW7fxCa/1P/Yxo6+muPVGrGvl+wwl5dFR3nG64UhmtDnofB7v9MCeM2eTk38AxxAewFmG+kRXO/IWpoAWHqxWoJTZaqkAogbh0U3SNBPoJdQriiFv4rW9NNtMKsL0m1WJyivjX8yDsQ1ET7pA5xkHvfPd3nsNwMuHjcAbWSIhzwsfCXnnh5mHtEr8WgYbMj5nAV5PwHsYaLVx6uWT0gZTPAWCHWs2dY6KCQPABUyFIgxTaywNwm7UOvADJH47JIQ9/oPb2rgDRMzbVP5gogxnweSMt/nhUMRAb7XZejKWao6Oiu1nMoLL2tgaptiPkUo2dOR95jag0qKWbrPPFMZ2QWgR+iwRV98ZdIU/hKPag3Pkaxq1dIl7y6ZGCEn2MorQhgmupQcfuNtLUqXE09aejSfvJou2PAegvda9+YpCr/YiK4+Ub0WWDxB+E2xgGKDmkv43p1uTfCpYY92r4AGjDT1HN+a0hEvy7RI2oL6/bU1t6MlIsCEkOK2vshSeQjPchJbb/woMIpI16qGIU4usLxnwB0vpiwnNn4KP2kZQl/7vkOc1rj0eJWQ2ZArmWsxsMdRjH6i3R0KRwYrOVnmrWi2m+FUNqYipFfEMUp9d3WeEvsT2Mp9PdPaPeL2sC+5LKVzNumsQtQRoiajt/4YJw94W3hIa8ZleCYXNGEEUd7m3rZmZ0KBCBFMGvM8/wvRrfx+Dw4ie0qVktqyG0kksybZAACt6q3aX8tGo3tCU2Fq4+TXq2IiU22OarBNUfgPAAT62gAWgc8bDF5QMzBcPF7aUNpNX5KJcLE84VZhO2B1pxuUl9EhYFBAJuyIQieZ6q34HGEMqPzAEnqtLYIcIrqjHXpvHvj5ns+9nlqw0mIiOgTjbHO/pRfUL8QakjG5nz4svfdH5WMJZMFXtTpmwm412zTDgyAfYfXzqFy9oM99L6hcz84gMrVNxvOSgKkn4yy/bVJk9AINwAisyoqoAWQu8i/o6dh5xNf3TnaiAEOpH6osp8fxy48xE+nTRtGPcjXSmnr6TIhueG12/6jH60XQjMtn7B7N55Rma3uOUkrmT2Aygr4juutp8jHgj3LSGAF1VRIePIU69y6+hnir/wFen0HC+/ms+1qeitvj+qGQRSMs2UJvctRxmvUc8RTCQR0AXshiZIcjcZcbOs0sUWCcXEWFrD1HKgWkCrJ54qLhIAAHdAAI8VZvZCE+HE+Ep5mwvyaLjGU72qnCvgRL3OpP9lwAikZ9uJaGcWPPwOafQBOxukbvy+YsuBMVXqQXUzh2glE9fiBsPb6aPAJIHk994x/qzMSnVwvNJoyZtM4rpug9Y6QFR5NLQOjkqGFUfIPw/Bm4lY1gh+sXTTQDQ2q2RvIqxa7AZ+PBnzmwPrkBsQjCXVTc52A8maq+YIN3HrvW/+AMOLQi6gx85PIHA16CBuh+TTW41WeU3PLUvpPIWMp1YpTqaGHjJdM5A6+8+td9HhI6ifqB36+ciGoc6V3s1pQtTi7X6Lq9Nj6Z3cVj7xODmvqV4oLTdFZkfZUtLO11jTpEgtIGjmuOdXDabFfkGypTsAhgoGxBiUoWG48FjHdR5kN4urzfar/3ehdgJKAYHZphRGDZE6AGN8rPRcydfk7jfeSbgrAAABU6ZLg4YnWbkULa360vcYlTQ90Umegd/oS4qpKvr1URxVuIqow75hfOsiFaP25ULyIrP4TI6fHnfjxsNGQ+Utlu8zG6b5Abxw0329hPdPS/zWQRnEY3dmVyx6x4ImlQIF3v3gadS0R85aL9CionSSutomokYnBeH18eB/dEGofhp1RhVfnFoOf7ERCUcTny0IzEIeaaYK82KrWNhJ0V3hAleuJbzFgN5b42B7eqxaXHWdjlBWIbrUz/B2rgOpqMGvjNl8Ys3Fe9XGTzCt+D9Xo113lBUJXo06VYln6CRibTG00zv/HhQWTxfT/aw3GBvLXoC+y39uIqpVMiaMhnEuqGrZ7ftcZuCAJnCdE5qJ8cQAGCtIC/L/qwzse8P7oyEHpNA6AAR0858Nx0zio+I88/tq3ss8R4qNJGwEAnJx8z0po7O/RPmdN4EDingA24s9XESjoe9cEPaIwH+OERRIA+5+8XNx2zFl7kp7mGtyayytOvcGVvvaqQhZYYZthMx8HznLI/LuX6W+xJfCSarsGagwxf/dm728eIgVr3XwEBGyEIwWXk9NQODBzFTH9H4/Wp7r95BzWk8FZmnPwaDhqOpJrGEGb5pdkbOBHHHeBLehxzlqq/PrZF6yDxtj6KZFtyoecBat4pYBkYO/XiRki0G1A4xuRAJKp+gChvsto3RQ6leQbslS3eAFxq5TnbhfDmjTbaLQEBVwIzvY3EBDoAAhJSNjmYd+lqJrBrrfK7jHzi3kSQXxcOvAhfhUPkcFQuM3/f6RZq6DBJ4cZRCXVtY8d3A7draPIbgfeE+IKdef1Sbhh4FJ/E+/Clni97/m6/m5FxYHAf+Xf7iKn0gz0AjPfGtIWSMueJ+xGfeiXb+JID1lKsHwGc8Ro3zUIUfUxEFC17XWRQfVNZdW4wefP2yeGcQ9NKYrFN3spjSjWPrG6ah7mKe7+Xd60w2Z3TmRiXuloIfb3P0PwUsYNW7rg3g+2zUl1GNLv/1wsS4Zgmj5H45wAAAA0MwcIeqXXz4xqiOfiY5FLTcri48R3ENyN1mfFELmr4nmK4afB9W+G1K/8DYYU3ez5JdfS7FcF6Pdz4Ijt8KfFCY6uJfHQZiOuY4ovryg4L+Tkv4PxacnXWEoRXiD9rvNXFivPCCoSQS0itnzhSPoPlXYvQtTC36ahVNyAf7SXMCofISPfaWbKrQ187eWfmc2PnwSUkm9DSG0sEn3J/tcI19TyAiRBK1et7SI2+WKV6ZHOdYCbd7VMut8SpRK3TNvzRjjylShHpRT7u9gQzJQT8UCxWoBbez1cOq4gKqRDIMq+z2Gikrp5MjES3k26HaAAAuZE0Nm+WZSPgg0c7Ns+Gcz52+25Mm/50hLphkRnPubnoYBD2e8ErDqkApujvAsyB12yjoP0wc9ywki6jliUTs8D/ZOCNz5yPgi/WYGImkcwxlVXvBF5lS4dr2vNh+ZPfUKGwIZeWDtxHlpUh/p3eGTE01lZq3Payh2uOFG+JcTudIB5ZejxBeLz+jupMxlHSkSnElHbrCJ7UyBhH9MwwIi325NrPmwOO86O0BtdwZkZnblMT9fRKXekwF4nrB+7RKmaCEgOlKF1Izfd+asPd8DQZsEQ9/jcJLmlzhbvmcOrGXQAA4mHoR48/uQlOhYOlXP7pnegHm6UZrecU9KDCnzMolbOJ+RJDKX8K6eCq6BSdazxPYso2Dykke+X/vYD2nh607pKtGvpy6JKu54SLgDAw/+0Crk3aF/DvhsNRgWNv711RUIv4PiCc0TEZjmvGbI5+pL6ELzf99iRBYYyBmw3bPCqek7oqXm3UDJKU+nft0TrQwdju27RbHpzLcqnMVbxqBCoQlm44tE3AAAAfkpqVCXIG6+W72gbwYTpDNIsn8GjTexnCIkPx3nQhzZWXqu4kChwr04Gr7EtDrhkIvpjl/nTClmY948e0QuYvkTdhJLzI0l+HqR/95iCtXjEpE4nSXVogpor1sYiUAp1uuNChYsVkvwWo3s+Mri8xkMzh3xF63E+ynyjGYTHXJmKUPXtneXMX6mNk7+sDyjmsShtLeBddVv3qC0doGjW1bqBmwbiKxBvG8/7bVp5cdeawHMDuMX1fRaCi5YQAvt9cqYZtjCr2Hz/0qJhohnQ6zchcyvdl4PXZ+MgAAAFIFGH+fJXOTsJFO/gNlQ2dHJDnWhPCHLEbTFzv/nPxR5Ka3KFQo7bQXgK8nq0CPz5/Moc0miyl6u3pV9bHrlMcD6f73EYcE+sPpQIwU7MP1jq8aNJUIzby5hVs/nVj3BezdQq6uWpIsviBt2e0v+95+NylqalWIbdFL1mfz8DMMQO4iTR0+Ug/DD1lhOjZ27hoxIVMiD+xzdGg89lsM+5XQACk8tuWkqHiGEwxmRvHmfFLvHs8P6MLYJEp9/rO5/4a3cvHdTYc/Apfqb7g460rDfFP4ouUewLFP4pWlU8v5Ye1fgfIU2biQ1XThkEev3V4BB3FQlwYELIeNZFil8O0S9ZDlj96B4umkOkZljIyhndhKFT/HhMwF7ylWD8DgfPd8XlGnHZdKmBMQs0Is/dAPj1KkaPdusyqv+NapfqIAAApqT6bLIjgjMF5orm/AMcxQkL13IIdlVqLzFAsd8ZSqRUnUXMa0FiTLRQmWBDItgQztvwdmru1EGK4ZaF5ITr0Z874AKVWH3AbU4D+5u2/Z8HkyFAaPYAdBsQw1bK9IEEmct5NrtClkoCXLU4k8tI0pD7EQ0UTO/sAYsO/jfta+VMTRFlpMgG8YilJMXgc6JZYJSW9Yyhx5x+AAB0dxmmjnj1Uo1+BPYB5QyI7sVCMgAyxa0ku/stIBuI2AiWqEcOerAtxKc9RzZmFtWhfhEDuio85n+RQKxNX8c4SICXw7H98Xy2EC+8YgGKyAysAABtuY8jNE7mJDuZaoDPGGCP9TdL9awTTGnmiGNg/9VtF9WUS0/YOtgWa1PEMql3WDIQF+TtkPCPM3rQ6iUurEbO50KEdrF+wZGufrQseDMTBTRseycie3qNeXE3d2ZVobMfjl8GHCmpSnEuJOD7oes3yQHj4dzvqdALc/a2FlL8AnqaFkMAAA6dF62eMUR41oZupwlWeFuoSDz/r5yhVGjMhX0QTvtHjtTRtxJzreyxFee5jxKlKa2PFc7ADk0LsoPd6+cHZ+FhEMZ0KWrELtCHZ7BdmaZ+axn0F8bdoUfBLyCYpqNCkRsFmE3PL/phVr9/+YKz7Qi25UFKiK8g3EpUrEPJNCwnF5N+sIKSnmc3yc5r2gbU7TNMJt2j71Mu0qRxF3Is9wUDF4LlQEJ2PZRTQldCgAAtABAb4kJEdcQx9z4f0OIsxhzjvfHOT/CFdfZ7SLVQ1JLOqNvQxNZBWyxGSy2RBFbsg4mTYH4Vi+SLnxdAE45M/haYL2YL42rSxU1BcP6EU7RqAbVIG/lwDoiTnyt7jZIFgcfl0QS4C3vLDeORYRc6GMOYJJ/yHkS2noBCpILHfhWwAjYPk5qmRvoDB9xgt2wSnZ9SoSthhOVsJt00axBE0IWQiFGpZsLDQ3mts7XXR+endFvvyHcVV3NgB7b0+5kF53Gk7cqV42H42xhZXzeZPAAAIEg4IKOuHMYB8OgDlsVAFQnbAKoa1k3uT8yOm9YH/No8cEmr0LImo2x0w13VgBYeCdRStJt0JWjtfotEmYoZS3Q8CxciKHEwcVzhTV2OF5by2MtaNB0SaPkbNreq5XJ0tgxHl+k+stfJmDoAfa1qNmjD9CtiQwPgTJH2ZZm9yNTGAyBQ6vFWLnBhVapO7JAkyO7m17t7G7J9SD22sAoGOgTnTOAU0/6bXcZPfTHwKpGeQbxJYn1cK+18pTV3+L592YU0LBeXIW30eg98s4d6lgW7x5dI0XCbeaTCzeaKihjM5NspnHBoCc4nXWlDhTwKGAAFDuWkt7D1vLkuMCLVtv4t0BJAu0boOWUtPc61OSw1+8Am9Ou90XQAW6nieCClB2g9/xnb78YuXHMzCfohfr9z91COcQNoxISqxMzodz6NJQh+7y6sphSFXBt4BwiYvnFyLBd5hWy7yJgmNc95K3F5PumWwgHSwZKg0o/MLQ+nJUWgJGQ0r49K4mYaepoXHRP8lnHEOPF60KrIhVvHbOmq9hR7/nLPvCEyuNMoEggxsyyb/wA+p+7aUxbWNreN1z3RmPqcETy6BkJ93LG7HOvVNZAoT0+OQ2HXQHwG88ESHDiX4WnkGFsw1p/4AvlwPV32szafPriEWNQonrnuyX/jxpSz/QF9dyAgpMEVqWRBbNgG6bNXBABEi3eZybyT3fKOkGX7aQN5feiPObYGkzwYxJX9XXwa7hy75f/akr/SwHfLMGrWbXgl4P+UqUqA1O7FWbcWwo+n28gs4+ZzqxwLXLradQKgERCN5/V+MVZnmpV7JmY85+aNRVKunS7quOsB7vpJI61GXfo+VxeadZYud0nWGZKzZVeK2r2erf3D5Y/JwABX0T7LOn7Ikim2z98NOkN3RbHta61gGdPeTZXlh/AGjPRdEHdp2Bfgj7xoYYRqNpmBORjE1ZbrsgNcmgAefOl1aNyZKSOO9epaaqrsVbmJXhrBcrmI4cQL7zoGT8aaReTLDW244Ro/MH9QRuC8VLuktHIz446UOYrWVYikNoTgtUN28PXOOi9ZU7UwO94QB6rAAAXeqIFGaymb1ic/d4N8oRkMLhSfJkXGWf3WNRl3boj56AXuPB8URybTjdqcwpBUF3VPI0EHsw3WHwHeAgagURUeb/U/h/y87T08wuQqdrn09YLN5ZUDmRW51aZfFEtrhMsqPdTr6gc4JfrRoTlDLGA8WQ1xg5WHPCpbgSXfXF0q0RWOxPtuq2SPimZPW4WmKD7DNiYjCEj7Fdytb0loMANvx1r6xtrdcFaq8BVUh/+LqGlXylYN2hFxOmeUjJ2T1d/H3B5NgNFRF6YolEz/Osgq4HnWuVDe2BV5l5TnvLT0X6fZrgYLrcaG1i3/GNymt6E+RL9i/a/5qrD5sN82qA3kCXTP11BH3LqWi6cj5AInRb70zoozAmMFxQICPgARZAgKSKsTCy4R7EfkydpCxs11C8Wa4tdhYtSH9R9q/u8uZIdBsJAVE5pg4VD10AFi17c9qKKqdcTQD624QWWF3Ivwcu5UJgH3aOmF9gUBp3JBZCpyy0IvRVufrqTzY6wJLLFZ0VKfdwnQDdAeN7H9nDBK00kJCa+KL7VRczMmEip00V+Ba8DSt83As22VUeXhUz/DEPZiJwRqtThc/lwxhWZi8EZjsjS9OsFQol7rQwIuB9FyKB0yAxNbqAWeC98h8AitIM3MpkcXy/nY1b864Tfl+EYxRQpgkFzPXPzkmBo24aKkLiFGudkU86oVz8il/+SFo8XsqxjykGX7sIGzAUygnfvMMYboC1hJ7cd1r4tKp20HnAC4HaB3fDeIFWrOo5LAUarRz+GK3++rMBgDALH5x1R2pPgwIAHEo4o1Kw8JI7XCeD6etcs7Gw05JTldARF14Sdy+jCx9VaIjPjJFQu7JozI8Eo7Q/p3i0uQ8BPigK3prLpHXoLkijv+Sg0kSkHm3lxZoKIbO5eyjt9pUT9v5DMdx4a24ZNPQWEWDMUTxwMJrcM/C4qme/mMAFmxODfGtShsfIabjCPp0vvfIpZWH76NdnJ+WTz65Xf2ZGQGwzOlozQ8iQebcxQZ0+N09ehLIQoD/X/lqMFwxPdoPw8qwbWz8HLXDlanvRbeDHj7qGJD7G7XaMY3GK8PopSIkZKnnkbUrqbUoHweEa8IeMAWmQefoGliKcDhjEVKkPKTp8CYv50YVExOCMUNM1Bl/X1SmShQDB7ngrM3KNbpvbnteyBKMj2AdNTf9/swq6xBIbMa7K2CTXIXKghrd5yEN3xJy1qTaKgU35FstCZwEIW89vMdXNCgTX3hADWfkPQ6Yge788zNxgW76US9wPfZ+QGKdXr7ZM35I+TkRxd9NnezQbO5AbzNQzwpKi1qyhzj6fsOOol+DgNdnMvQ89IF85bKtrqhXS5XqQEUG3ony1woYwiKiEBqVtrSPDD/vVoffnvbn/HJsKBeJ3pDPge42lrIfPL0kAEUCClt2/oTQa6Z92e2rJvSq3SRGL4rU2v1Hkxdyzevdf0m5N02aaZtvWOwqWzNyI5VYAABahR93AukgNLf3sYYcL16htER9YU9/YH/VBntx3FE8WAno/dow2vP+YKkeQVVmchEJ1fbJzOorDUYk1EeI/9gOjJkKnUnTlNviasQ8SPoLkqfGQjcuIAC4rzYIG8L8JWeIsFneO+CKkes4G/N6U9wFlmFMR+XBc5CNrOg1GV9Ico3jZwPOEOrxRcYXsFQM9DUh2Qz+H8jiDWs9CABN8b7wWkQ8U/AjEPxuY7W5AyY5TArbi0p4nWMIsJhHlKtTSQA6N/PIngwW0K7RJYvaQbiQngaFNPV8aSJC+LJZGeLQgkanIcBJLh66XSjy4AJv2i2NojiMJRM5YTlr5U55bBQ8H07u3aldXfg55CrBFMv6tuF6AmUGO8uYgp0yC1dLNL/oZ5/AIGBzn9r7n3uNu4l2Q1N0yT3gFH8aCRfcr/2INp/9N8xa6IBEVlv3R38FT98rx1Ce5D06qttoXpza7+0IYIPfDLHF4fGre0qCWEoajElZ9ckjt/jUwxLQ9pXQOM1g8RdbgG0euhovpKv6BUFBBxxPqhnZpipkslPOjhmXwdFCWbtXVimzkRJNV9+NOMdvQcXoFk4FdqSB9DRIRIProsppaC2Btgh4ImjLcqvYhVq/CuNM8ZrnKVzNTqGrkCjHV/mWMiM/PNl14AAocpavO+53PvWz4ctE/h04nUKXtDsKAlQSeWWZ4YVhNvc/6rzP9dP4TvYUz+1jeRKPRw58ysng2ycm+S9ZrElRkJK88CXht+lwMJ/T7yQK+qwkQHweZiCwP5WTfWCZc665B8Pc0MaHXlRWhSroHBkyJTiRlwDUPSW3LKCEYb0NvnvnmDt1IULRwY5dDb9gX6soa88vQVw8dLiLLfSsfvV2OytS4NdPyryawTMIzAAAAAUrAEowd4GnQzq5pYD49pw9CpZSO9aya1+kvkgOmq5sjur4Olcu+wlcdXD0YJ7qCzLQXXyogRzUT7q3blhq3YMg3zrTPoW3tRCaCtWHfv5tPMwHNsBNqza15CUmWc3KVXPuhGCuXm0f5wH9vM6Xn3Um2KCXFu6LS+5bJrY7qUrQZk2DQiahuEUmX7k5rquMgrB4l8KgOzqs2lS8X864Tuim53f8b7yqQLcAGVfobxtL7ebqufvxAi9PQLGwAB441d2AFesu3+IXHwdcE4IwxYILI6kNIReJ0suebAxpuKzrYEW8JvjTnMaz3jSKV0mplp9wyPON5IgV/Z45sNtlQNEmW9HOkHmrwEKLKNMhEXI5E6IVHxpfV8/X7XHWLoYi/NPGzfIpOc1OZin2V0GFuhn2wu5VjD6Q21r1Gxs7fZyQ4zCuTEL6hRTaMR/COWap39sgDJih2rlyVbCVxSkNOPiKYQ/hhW5HVpe844j7MbVfHsKMGAAAN97jpFRajy/lSn43wwerm0zyqYyKmx9Jw8wDyhKEnZDEL2+SDUIV3EYax6MRuSDJjd1cQb5t+qTdAtwuJOR5wfqfrmgDWhmRyhoJnzGFru2P/V+cM2FueoTj/ejVQJjxQzch1P1tYgu/53iD6AKALzF6HQHAv6zvV73B7xNEm19CWBH4NRQN4e5rpWnEHPiRRKewKI8OXikvQ2/oVkAITZ/+gB9ur964V0FUsCSYGVoy8tT3yi9PCva4fdDJ+eNwkKJnbCNLMwJnI58+vFuoVhajUOhWNzKje/Mlmawu4P2+V3yTyEZbQcfuviI18WgwFCh3nXs5wEd54J0wNMuPyNtB8aBOqfyzuoebNbwoePFsprnswv4Tcl/41cSFsh48PLyhIJqiV7dZqMEZlkJ/nl7UZrKa3L8ThxIywKI1USL33Jlf9+6+YDH1lLC1Bcn+UX4UUP+gj5AAAABS6NAlHloIrjxLLSB8w+Q6GhCHXH/JBa/GI06WZKVLl9+5M++5x9Ypwg6bPpH52VTU4CoGNu3eHzg2VPMyMAmCEQbWcbU0PWyYDQr5K7WvtYGj0hgsyBjv3nfE4ArItaLAvD5Rck3l+mrU5qMiQbH0d/JPFKv3XM4hLUl+dOY1gpBTxnHJJrrTmGy2Ixy4vrZ+PhFJFO2XNPJAqZLpDY4hrAnHfbW4GpwHQ4EMsGahzLihIRwQt9u+XwEmBjlXFHKAsm33AdbHp5OmlgIN4AHQv9mg2XlqbPLT0XEY0TuT413guGr5vr4AUzslPSr+6loZWyX1217bDEKZ0fXTDg41M3XshNhbAgyYTzAxSZYKFF76vFDhYYYFVa5hfAq5rWeUfeMph8QxKw9227HWhBsv+04LUFmQH1rAUGDGx/x8u10piksx3xDPoLMT6Gq1DBPL/z/NbftvI/I2pyMol/Vv9M//VE4HnQn3Fb42ATrb+LOgrpRJxGN1cTqETatJi1V8ibxcsvtQvWZDXzZv/ydXodKHvW54DwkqrAABZ/wv8zO3r0Nv8e+ufVBACt3CujYD7Hnlz7MdwCyKkML+f3IBxJTykboBrGggtSJITHIFzk8JpBtmcHsCtvf0DL3NNvzdAmOJKGetc6v3V1ipjeeOu+WT9YS6Bu7MMhjYSFWAq+eFj3Yaj1PC++dNQXgBSEAfVnzownUTBPAVdI3Z0KtjzIZyAEymntiEVeLUjKVBimMeKoAT8h5+kgxVQkbTh4ctthsfiB9oAZZNPe0jBhDIe/HSkv4LOge+pttn1c0X6ssqWVX8VU4CCAir/TItCIv63Rl1G8+uepSFbiwhzmjxdDLJqob9Gd5HEomdFckcKHCcwAPfc5wA22a2pRq1g6NjM4+ij/DUUM3hSW3zua5Lx8VkZSg8wKhhjzATC+l3i4A8GSxH9lNsdw0ghbVb+FZ4boHvPUYHXcV61pEEvsM+KqvYQBeVcj1huXbUS5qLCdwaLgOKZb28pIpBf5mD6a9s5Qf6j03om/d3oIUWoR53d0diJzYjueBZ+h6jg5vOVdAHqWGYsRuIV4ZlKwidWn7Z5G7iwlvwaG57ZyBKCWEIfYF+bFdFwrw2c1X2ywy5XelBUhLXzykxR6Ow1+gpNedh++LUv3b24bNN0hJFXzf8q0f1YtAFAhj2uPiAAAABPq6N88a6644B/miiklWJIh4xnCsVje/ShtGPF+Ry4Tuj9UNXc5FI9O+mzZXaqHT1RjhXIbR5BYWAtG9y/4rAM9ld/WHLzI4MEKZDRJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==","w":1307,"h":1067,"e":1},{"id":"3","layers":[{"ddd":0,"refId":"A","ind":4,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[653.5,533.5],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":592,"s":[0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":628,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]}},{"t":716,"s":[100],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":764,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"A","u":"","p":"data:image/png;base64,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","w":1307,"h":1067,"e":1},{"id":"B","layers":[{"ddd":0,"refId":"C","w":344,"h":54,"ind":81,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1},{"t":604,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":82,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[78,60],"ix":2},"p":{"a":0,"k":[36,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"4","layers":[{"ddd":0,"ind":83,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[74.01,-31.72],[-31.26,-31.72],[-31.26,75],[74.01,75],[74.01,-31.72]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"B","w":346,"h":58,"ind":7,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"C","layers":[{"ddd":0,"ind":84,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":85,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":86,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":87,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"D","layers":[{"ddd":0,"refId":"E","w":344,"h":54,"ind":88,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1},{"t":604,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":89,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[107,108],"ix":2},"p":{"a":0,"k":[21.5,22],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"5","layers":[{"ddd":0,"ind":90,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[74.01,-31.72],[-31.26,-31.72],[-31.26,75],[74.01,75],[74.01,-31.72]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"D","w":107,"h":108,"ind":9,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21.5,22],"ix":2},"a":{"a":0,"k":[21.5,22],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"E","layers":[{"ddd":0,"ind":91,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":92,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":93,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":94,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"F","layers":[{"ddd":0,"refId":"G","w":344,"h":54,"ind":95,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1},{"t":512,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":96,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[69,54],"ix":2},"p":{"a":0,"k":[32.5,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"6","layers":[{"ddd":0,"ind":97,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[66.55,-14.39],[-24.84,-14.39],[-24.84,67.77],[66.55,67.77],[66.55,-14.39]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"F","w":343,"h":53,"ind":12,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[172.5,26.5],"ix":2},"a":{"a":0,"k":[172.5,26.5],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"G","layers":[{"ddd":0,"refId":"H","w":266,"h":29,"ind":98,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[78,13],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":99,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"H","layers":[{"ddd":0,"ind":100,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-182,189],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"I","w":266,"h":29,"ind":98,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[182,-189],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":100}]},{"id":"I","layers":[{"ddd":0,"ind":101,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-182,189],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"J","layers":[{"ddd":0,"refId":"K","w":344,"h":54,"ind":102,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1},{"t":512,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":103,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[92,83],"ix":2},"p":{"a":0,"k":[21,26.5],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"7","layers":[{"ddd":0,"ind":104,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[66.55,-14.39],[-24.84,-14.39],[-24.84,67.77],[66.55,67.77],[66.55,-14.39]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"J","w":92,"h":83,"ind":14,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,26.5],"ix":2},"a":{"a":0,"k":[21,26.5],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"K","layers":[{"ddd":0,"refId":"L","w":0,"h":0,"ind":105,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":106,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"L","layers":[{"ddd":0,"refId":"M","w":0,"h":0,"ind":105,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"M","layers":[{"ddd":0,"ind":107,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"8","layers":[{"ddd":0,"refId":"N","w":45,"h":45,"ind":108,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[276,17],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":109,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[348.53,-181.7],[344.59,-181.7],[351.23,-191.29],[345.1,-200.08],[349.15,-200.08],[353.24,-194.17],[357.32,-200.08],[361.33,-200.08],[355.24,-191.32],[361.88,-181.7],[357.9,-181.7],[353.24,-188.44],[348.53,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[334.41,-184.51],[340.24,-190.89],[334.41,-197.27],[328.54,-190.89],[334.41,-184.51]],"i":[[0,0],[0,3.756],[3.464,0],[0,-3.756],[-3.501,0]],"o":[[3.464,0],[0,-3.756],[-3.501,0],[0,3.756],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[334.41,-181.41],[324.93,-190.89],[334.41,-200.37],[343.85,-190.89],[334.41,-181.41]],"i":[[0,0],[0,5.507],[-5.507,0],[0,-5.507],[5.507,0]],"o":[[-5.507,0],[0,-5.507],[5.507,0],[0,5.507],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[312.91,-184.51],[318.57,-190.89],[312.91,-197.27],[307.26,-190.89],[312.91,-184.51]],"i":[[0,0],[0,3.829],[3.391,0],[0,-3.829],[-3.391,0]],"o":[[3.391,0],[0,-3.829],[-3.391,0],[0,3.829],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[313.46,-181.41],[307.55,-184.43],[307.55,-181.7],[304.02,-181.7],[304.02,-207.77],[307.55,-207.77],[307.55,-197.38],[313.43,-200.37],[322.14,-190.89],[313.46,-181.41]],"i":[[0,0],[1.094,1.823],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.443,0],[0,-5.434],[5.507,0]],"o":[[-2.48,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.13,-1.823],[5.543,0],[0,5.433],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[284.82,-181.7],[284.82,-207.77],[288.36,-207.77],[288.36,-192.71],[296.38,-200.08],[300.98,-200.08],[293.25,-192.89],[301.67,-181.7],[297.29,-181.7],[290.73,-190.52],[288.36,-188.34],[288.36,-181.7],[284.82,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[272.44,-181.41],[263.36,-190.89],[272.44,-200.37],[280.97,-193.66],[277.43,-193.66],[272.51,-197.27],[267.04,-190.89],[272.55,-184.51],[277.47,-187.9],[280.97,-187.9],[272.44,-181.41]],"i":[[0,0],[0,5.069],[-5.762,0],[-0.511,-4.157],[0,0],[2.516,0],[0,-3.538],[-3.647,0],[-0.584,2.079],[0,0],[4.704,0]],"o":[[-5.762,0],[0,-5.069],[4.303,0],[0,0],[-0.329,-2.078],[-3.647,0],[0,3.537],[2.516,0],[0,0],[-0.584,3.866],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[246.49,-192.97],[256.88,-192.97],[251.77,-197.52],[246.49,-192.97]],"i":[[0,0],[0,0],[3.027,0],[0.547,-2.99]],"o":[[0,0],[-0.219,-2.808],[-2.844,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[252.1,-181.41],[242.91,-191],[251.77,-200.37],[260.45,-191.65],[260.38,-190.23],[246.38,-190.23],[252.1,-184.43],[257.06,-187.68],[260.6,-187.68],[252.1,-181.41]],"i":[[0,0],[0,5.105],[-5.652,0],[0,-4.668],[0.036,-0.329],[0,0],[-3.172,0],[-0.51,2.078],[0,0],[4.559,0]],"o":[[-5.689,0],[0,-5.142],[5.652,0],[0,0.474],[0,0],[0.292,3.428],[2.699,0],[0,0],[-0.62,3.792],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[222.93,-181.7],[222.93,-207.77],[226.47,-207.77],[226.47,-196.83],[232.37,-200.37],[239.23,-193],[239.23,-181.7],[235.69,-181.7],[235.69,-192.31],[231.39,-197.2],[226.47,-191.65],[226.47,-181.7],[222.93,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.735,0],[0,-4.376],[0,0],[0,0],[0,0],[2.589,0],[0,-3.209],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.984,-2.297],[4.157,0],[0,0],[0,0],[0,0],[0,-2.918],[-2.881,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[207.92,-181.41],[195.45,-194.46],[207.92,-207.52],[218.97,-199.02],[214.99,-199.02],[207.88,-204.16],[199.31,-194.46],[207.92,-184.76],[215.07,-189.9],[218.93,-189.9],[207.92,-181.41]],"i":[[0,0],[0,8.752],[-6.528,0],[-0.656,-4.959],[0,0],[3.683,0],[0,-6.308],[-4.996,0],[-0.401,2.99],[0,0],[5.871,0]],"o":[[-6.6,0],[0,-8.752],[5.762,0],[0,0],[-0.401,-2.99],[-4.959,0],[0,6.309],[3.756,0],[0,0],[-0.547,4.959],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-109,370],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":110,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[307.4,-283.23],[307.4,-261.32],[305.26,-256.15],[300.1,-254.01],[256.27,-254.01],[251.11,-256.15],[248.97,-261.32],[248.97,-305.14],[251.11,-310.3],[256.27,-312.44],[289.14,-312.44]],"i":[[0,0],[0,0],[1.37,-1.37],[1.937,0],[0,0],[1.37,1.37],[0,1.937],[0,0],[-1.37,1.37],[-1.937,0],[0,0]],"o":[[0,0],[0,1.937],[-1.37,1.37],[0,0],[-1.937,0],[-1.37,-1.37],[0,0],[0,-1.937],[1.37,-1.37],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[267.23,-286.88],[278.19,-275.93],[307.4,-305.14]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-109,370],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":111,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[338,237],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[169,118.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"N","layers":[{"ddd":0,"ind":108,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-385,353],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":112,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":108},{"ddd":0,"refId":"O","w":45,"h":45,"ind":113,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[385,-353],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":112}]},{"id":"O","layers":[{"ddd":0,"ind":114,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-385,353],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394,-343.42],[401.94,-324.91],[420.45,-316.98],[412.52,-335.49],[394,-343.42]],"i":[[0,0],[-7.304,-7.293],[-2.922,2.921],[7.304,7.293],[2.923,-2.921]],"o":[[-2.921,2.921],[7.303,7.303],[2.919,-2.921],[-7.303,-7.303],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[420.45,-343.42],[401.94,-335.49],[394,-316.97],[412.52,-324.91],[420.45,-343.42]],"i":[[0,0],[7.293,-7.305],[-2.921,-2.923],[-7.293,7.305],[2.921,2.923]],"o":[[-2.921,-2.921],[-7.303,7.303],[2.921,2.919],[7.303,-7.303],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[407.23,-330.2],[407.23,-330.18]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"9","layers":[{"ddd":0,"ind":17,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":200,"s":[282,203],"i":{"x":[0.292],"y":[1]},"o":{"x":[0.483],"y":[0]}},{"t":228,"s":[282,212.03],"i":{"x":[0],"y":[1]},"o":{"x":[0.585],"y":[0]}},{"t":272,"s":[282,97],"i":{"x":[0.293],"y":[1]},"o":{"x":[0.694],"y":[0]}},{"t":308,"s":[282,103],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":348,"s":[282,103],"i":{"x":[0],"y":[1]},"o":{"x":[0.517],"y":[0]}},{"t":416,"s":[282,39],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":456,"s":[282,39],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":492,"s":[282,54]}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"r":{"a":1,"k":[{"t":200,"s":[0],"i":{"x":[0.326],"y":[1]},"o":{"x":[0.759],"y":[0]}},{"t":228,"s":[3],"i":{"x":[0],"y":[1]},"o":{"x":[0.311],"y":[0]}},{"t":272,"s":[-1.1],"i":{"x":[0],"y":[1]},"o":{"x":[0.572],"y":[0]}},{"t":292,"s":[0]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":115,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":17},{"ddd":0,"refId":"P","w":24,"h":8,"ind":116,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":115},{"ddd":0,"ind":117,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":17,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":118,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":17,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"P","layers":[{"ddd":0,"ind":119,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"a","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"b","layers":[{"ddd":0,"refId":"Q","w":51,"h":51,"ind":120,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[323,21],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":121,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-542.66,-39.25],[-542.66,-60.74],[-538.52,-60.74],[-538.52,-56.95],[-532.08,-61.08],[-525.21,-56.65],[-518.22,-61.08],[-510.67,-52.9],[-510.67,-39.25],[-514.81,-39.25],[-514.81,-51.74],[-519.37,-57.46],[-524.62,-50.98],[-524.62,-39.25],[-528.75,-39.25],[-528.75,-51.74],[-533.27,-57.46],[-538.52,-50.98],[-538.52,-39.25],[-542.66,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.199,0],[-0.853,-2.815],[-3.113,0],[0,-4.99],[0,0],[0,0],[0,0],[2.857,0],[0,-3.411],[0,0],[0,0],[0,0],[2.815,0],[0,-3.411],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.896,-2.431],[3.284,0],[0.896,-2.558],[4.649,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.284,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.284,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-558.69,-39.25],[-558.69,-60.74],[-554.55,-60.74],[-554.55,-56.6],[-548.84,-60.74],[-546.24,-60.74],[-546.24,-57.16],[-549.35,-57.16],[-554.55,-48.97],[-554.55,-39.25],[-558.69,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.028,0],[0,0],[0,0],[0,0],[0,-4.691],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.981,-2.857],[0,0],[0,0],[0,0],[-3.923,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-574.33,-42.53],[-567.51,-49.99],[-574.33,-57.46],[-581.2,-49.99],[-574.33,-42.53]],"i":[[0,0],[0,4.393],[4.051,0],[0,-4.392],[-4.094,0]],"o":[[4.051,0],[0,-4.392],[-4.094,0],[0,4.393],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-574.33,-38.91],[-585.42,-49.99],[-574.33,-61.08],[-563.29,-49.99],[-574.33,-38.91]],"i":[[0,0],[0,6.44],[-6.44,0],[0,-6.439],[6.44,0]],"o":[[-6.44,0],[0,-6.439],[6.44,0],[0,6.44],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-605.41,-39.25],[-605.41,-69.1],[-586.26,-69.1],[-586.26,-65.18],[-600.97,-65.18],[-600.97,-56.26],[-589.08,-56.26],[-589.08,-52.34],[-600.97,-52.34],[-600.97,-39.25],[-605.41,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.35,199.91],"ix":2},"a":{"a":0,"k":[-558.04,-54],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":122,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-37.02,-7.43],[37.02,-7.43],[37.66,-6.79],[37.66,6.79],[37.02,7.43],[-37.02,7.43],[-37.66,6.79],[-37.66,-6.79],[-37.02,-7.43]],"i":[[0,0],[0,0],[0,-0.356],[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0]],"o":[[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0],[0,0],[0,-0.356],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.48,104.52],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":123,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-37.02,-7.43],[37.02,-7.43],[37.66,-6.79],[37.66,6.79],[37.02,7.43],[-37.02,7.43],[-37.66,6.79],[-37.66,-6.79],[-37.02,-7.43]],"i":[[0,0],[0,0],[0,-0.356],[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0]],"o":[[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0],[0,0],[0,-0.356],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.47,76.91],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":124,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,276],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":15,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.5,138],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"Q","layers":[{"ddd":0,"ind":125,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[25.37,25.32],"ix":2},"a":{"a":0,"k":[-407.02,-207.6],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"R","w":50,"h":51,"ind":120,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-432,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":125}]},{"id":"R","layers":[{"ddd":0,"ind":126,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[432,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-422.49,-223.06],[-413.21,-201.41],[-391.55,-192.13],[-400.83,-213.78],[-422.49,-223.06]],"i":[[0,0],[-8.542,-8.529],[-3.418,3.416],[8.542,8.529],[3.418,-3.416]],"o":[[-3.416,3.416],[8.54,8.54],[3.414,-3.416],[-8.54,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-391.56,-223.06],[-413.21,-213.78],[-422.49,-192.13],[-400.83,-201.41],[-391.56,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.529,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.54,8.54],[3.417,3.414],[8.54,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-407.02,-207.6],[-407.02,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"c","layers":[{"ddd":0,"ind":127,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[0,-30.62],[0,30.62]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.53,101.33],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":128,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-22.96,0],[22.96,0]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.54,70.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"S","w":51,"h":51,"ind":129,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[323,21],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":130,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-103.84,-39.25],[-103.84,-69.74],[-99.71,-69.74],[-99.71,-39.25],[-103.84,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-124.98,-52.43],[-112.82,-52.43],[-118.79,-57.76],[-124.98,-52.43]],"i":[[0,0],[0,0],[3.541,0],[0.639,-3.497]],"o":[[0,0],[-0.254,-3.284],[-3.326,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-118.41,-38.91],[-129.16,-50.12],[-118.79,-61.08],[-108.64,-50.89],[-108.73,-49.23],[-125.11,-49.23],[-118.41,-42.45],[-112.61,-46.24],[-108.47,-46.24],[-118.41,-38.91]],"i":[[0,0],[0,5.971],[-6.61,0],[0,-5.458],[0.038,-0.384],[0,0],[-3.712,0],[-0.592,2.431],[0,0],[5.331,0]],"o":[[-6.655,0],[0,-6.013],[6.614,0],[0,0.555],[0,0],[0.341,4.009],[3.155,0],[0,0],[-0.725,4.436],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-143.21,-42.53],[-136.6,-49.99],[-143.21,-57.46],[-149.82,-49.99],[-143.21,-42.53]],"i":[[0,0],[0,4.478],[3.966,0],[0,-4.478],[-3.966,0]],"o":[[3.966,0],[0,-4.478],[-3.966,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-142.57,-38.91],[-149.47,-42.45],[-149.47,-39.25],[-153.61,-39.25],[-153.61,-69.74],[-149.47,-69.74],[-149.47,-57.59],[-142.61,-61.08],[-132.42,-49.99],[-142.57,-38.91]],"i":[[0,0],[1.279,2.133],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.857,0],[0,-6.354],[6.44,0]],"o":[[-2.9,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.322,-2.132],[6.483,0],[0,6.355],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-169.65,-42.19],[-163.46,-48.67],[-163.46,-49.06],[-169.01,-49.06],[-173.66,-45.47],[-169.65,-42.19]],"i":[[0,0],[0,3.966],[0,0],[0,0],[0,-2.26],[-2.431,0]],"o":[[3.881,0],[0,0],[0,0],[-2.815,0],[0,1.962],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-170.46,-38.91],[-177.79,-45.39],[-169.43,-52.26],[-164.91,-52.26],[-163.46,-53.36],[-168.66,-57.76],[-173.95,-53.7],[-177.79,-53.7],[-168.54,-61.08],[-159.37,-53.11],[-159.37,-39.25],[-163.46,-39.25],[-163.46,-42.79],[-170.46,-38.91]],"i":[[0,0],[0,3.838],[-5.032,0],[0,0],[0,0.768],[3.284,0],[0.128,-2.175],[0,0],[-5.118,0],[0,-4.777],[0,0],[0,0],[0,0],[3.241,0]],"o":[[-4.393,0],[0,-4.137],[0,0],[0.981,0],[0,-2.602],[-3.028,0],[0,0],[0.341,-4.222],[5.544,0],[0,0],[0,0],[0,0],[-1.066,2.345],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-199.12,-39.25],[-199.12,-69.1],[-194.69,-69.1],[-194.69,-43.17],[-180.15,-43.17],[-180.15,-39.25],[-199.12,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[346,254],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":131,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":15,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.5,138.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"S","layers":[{"ddd":0,"ind":132,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[23,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"T","w":51,"h":51,"ind":129,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-23,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":132}]},{"id":"T","layers":[{"ddd":0,"ind":133,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[23,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.02,-223.06],[-3.74,-201.41],[17.91,-192.13],[8.62,-213.78],[-13.02,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.543,8.529],[3.416,-3.416]],"o":[[-3.416,3.416],[8.536,8.54],[3.409,-3.416],[-8.537,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[17.9,-223.06],[-3.75,-213.78],[-13.02,-192.13],[8.63,-201.41],[17.9,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.537,8.54],[3.416,3.414],[8.536,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[2.44,-207.6],[2.44,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"d","layers":[{"ddd":0,"ind":24,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":0,"s":[133.24,473.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":104,"s":[507.08,94.91]}],"ix":2},"a":{"a":0,"k":[257,-116],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":134,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":24},{"ddd":0,"refId":"U","w":50,"h":51,"ind":135,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[387,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":134},{"ddd":0,"ind":136,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[305.62,-39.25],[298.46,-46.28],[298.46,-57.16],[294.06,-57.16],[294.06,-60.74],[298.46,-60.74],[298.46,-67.48],[302.59,-67.48],[302.59,-60.74],[308.94,-60.74],[308.94,-57.16],[302.59,-57.16],[302.59,-46.41],[305.92,-42.83],[308.94,-42.83],[308.94,-39.25],[305.62,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.048,0],[0,0],[0,0],[0,0]],"o":[[-4.351,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.52,-38.91],[271.5,-47.52],[271.5,-60.74],[275.64,-60.74],[275.64,-48.33],[280.67,-42.62],[286.47,-49.1],[286.47,-60.74],[290.61,-60.74],[290.61,-39.25],[286.47,-39.25],[286.47,-43.04],[279.52,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.86,0],[0,0],[0,0],[0,0],[0,3.412],[3.371,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[256.3,-42.53],[262.91,-49.99],[256.3,-57.46],[249.69,-49.99],[256.3,-42.53]],"i":[[0,0],[0,4.478],[3.963,0],[0,-4.478],[-3.969,0]],"o":[[3.963,0],[0,-4.478],[-3.969,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[245.9,-30.55],[245.9,-60.74],[250.03,-60.74],[250.03,-57.59],[256.9,-61.08],[267.09,-49.99],[256.94,-38.91],[250.03,-42.45],[250.03,-30.55],[245.9,-30.55]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.862,0],[0,-6.354],[6.444,0],[1.279,2.133],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.323,-2.132],[6.482,0],[0,6.355],[-2.901,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[221.07,-39.25],[221.07,-60.74],[225.21,-60.74],[225.21,-56.95],[232.12,-61.08],[240.14,-52.47],[240.14,-39.25],[236,-39.25],[236,-51.66],[230.97,-57.37],[225.21,-50.89],[225.21,-39.25],[221.07,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[0,-5.118],[0,0],[0,0],[0,0],[3.028,0],[0,-3.752],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.151,-2.687],[4.86,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.365,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[210.34,-39.25],[210.34,-69.1],[214.77,-69.1],[214.77,-39.25],[210.34,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":137,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[234.2,-171.8],[230.37,-171.8],[227.67,-170.68],[226.55,-167.98],[226.55,-137.36],[227.67,-134.65],[230.37,-133.53],[234.2,-133.53]],"i":[[0,0],[0,0],[0.719,-0.718],[0,-1.015],[0,0],[-0.719,-0.718],[-1.011,0],[0,0]],"o":[[0,0],[-1.011,0],[-0.719,0.717],[0,0],[0,1.015],[0.719,0.718],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[264.82,-171.8],[291.61,-171.8],[294.32,-170.68],[295.44,-167.98],[295.44,-137.36],[294.32,-134.65],[291.61,-133.53],[264.82,-133.53]],"i":[[0,0],[0,0],[-0.719,-0.718],[0,-1.015],[0,0],[0.712,-0.718],[1.018,0],[0,0]],"o":[[0,0],[1.018,0],[0.712,0.717],[0,0],[0,1.015],[-0.719,0.718],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-129.7],[246.15,-121.58],[238.03,-118.22]],"i":[[0,0],[2.15,-2.153],[3.041,0]],"o":[[0,3.045],[-2.156,2.154],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-129.7],[252.87,-121.58],[261,-118.22]],"i":[[0,0],[-2.15,-2.153],[-3.047,0]],"o":[[0,3.045],[2.156,2.154],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-175.63],[246.15,-183.75],[238.03,-187.11]],"i":[[0,0],[2.15,2.153],[3.041,0]],"o":[[0,-3.045],[-2.156,-2.153],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-175.63],[249.51,-129.7]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[261,-187.11],[252.87,-183.75],[249.51,-175.63]],"i":[[0,0],[2.156,-2.153],[0,-3.045]],"o":[[-3.047,0],[-2.15,2.153],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":138,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[257,-116],"ix":2},"s":{"a":0,"k":[99,99],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"U","layers":[{"ddd":0,"ind":139,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-387,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[396.44,-223.06],[405.72,-201.41],[427.37,-192.13],[418.09,-213.78],[396.44,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.537,8.529],[3.416,-3.416]],"o":[[-3.416,3.416],[8.536,8.54],[3.41,-3.416],[-8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[427.36,-223.06],[405.72,-213.78],[396.44,-192.13],[418.09,-201.41],[427.36,-223.06]],"i":[[0,0],[8.524,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.543,8.54],[3.416,3.414],[8.537,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[411.9,-207.6],[411.9,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"e","layers":[{"ddd":0,"ind":25,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":-4,"s":[132.4,473.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":100,"s":[506.24,94.91]}],"ix":2},"a":{"a":0,"k":[670.85,-116],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":140,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":25},{"ddd":0,"refId":"V","w":51,"h":51,"ind":141,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[796,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":140},{"ddd":0,"ind":142,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[787.54,-39.25],[787.54,-60.74],[791.68,-60.74],[791.68,-56.95],[798.59,-61.08],[806.6,-52.47],[806.6,-39.25],[802.47,-39.25],[802.47,-51.66],[797.43,-57.37],[791.68,-50.89],[791.68,-39.25],[787.54,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[0,-5.118],[0,0],[0,0],[0,0],[3.028,0],[0,-3.752],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.151,-2.687],[4.86,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.371,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[771.89,-42.53],[778.72,-49.99],[771.89,-57.46],[765.03,-49.99],[771.89,-42.53]],"i":[[0,0],[0,4.393],[4.052,0],[0,-4.392],[-4.09,0]],"o":[[4.052,0],[0,-4.392],[-4.09,0],[0,4.393],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[771.89,-38.91],[760.81,-49.99],[771.89,-61.08],[782.94,-49.99],[771.89,-38.91]],"i":[[0,0],[0,6.44],[-6.437,0],[0,-6.439],[6.444,0]],"o":[[-6.437,0],[0,-6.439],[6.444,0],[0,6.44],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[755.25,-39.25],[748.09,-46.28],[748.09,-57.16],[738.37,-57.16],[738.37,-46.41],[741.69,-42.83],[744.72,-42.83],[744.72,-39.25],[741.39,-39.25],[734.23,-46.28],[734.23,-57.16],[729.84,-57.16],[729.84,-60.74],[734.23,-60.74],[734.23,-67.48],[738.37,-67.48],[738.37,-60.74],[748.09,-60.74],[748.09,-67.48],[752.23,-67.48],[752.23,-60.74],[758.58,-60.74],[758.58,-57.16],[752.23,-57.16],[752.23,-46.41],[755.55,-42.83],[758.58,-42.83],[758.58,-39.25],[755.25,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[-2.042,0],[0,0],[0,0],[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.042,0],[0,0],[0,0],[0,0]],"o":[[-4.345,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[-4.345,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[715.29,-38.91],[707.28,-47.52],[707.28,-60.74],[711.41,-60.74],[711.41,-48.33],[716.45,-42.62],[722.25,-49.1],[722.25,-60.74],[726.38,-60.74],[726.38,-39.25],[722.25,-39.25],[722.25,-43.04],[715.29,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.86,0],[0,0],[0,0],[0,0],[0,3.412],[3.371,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[685.66,-57.03],[692.1,-57.03],[697.22,-61.21],[692.05,-65.39],[685.66,-65.39],[685.66,-57.03]],"i":[[0,0],[0,0],[0,2.772],[3.371,0],[0,0],[0,0]],"o":[[0,0],[3.327,0],[0,-2.73],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[685.66,-43.17],[692.27,-43.17],[698.53,-48.16],[692.27,-53.15],[685.66,-53.15],[685.66,-43.17]],"i":[[0,0],[0,0],[0,3.242],[4.179,0],[0,0],[0,0]],"o":[[0,0],[4.179,0],[0,-3.241],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[681.26,-39.25],[681.26,-69.1],[692.31,-69.1],[701.52,-61.81],[697.68,-55.58],[702.88,-47.95],[692.87,-39.25],[681.26,-39.25]],"i":[[0,0],[0,0],[0,0],[0,-4.478],[2.137,-1.024],[0,-4.137],[6.183,0],[0,0]],"o":[[0,0],[0,0],[5.585,0],[0,3.198],[2.99,1.066],[0,5.373],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[663.6,-39.25],[656.44,-46.28],[656.44,-57.16],[652.04,-57.16],[652.04,-60.74],[656.44,-60.74],[656.44,-67.48],[660.57,-67.48],[660.57,-60.74],[666.92,-60.74],[666.92,-57.16],[660.57,-57.16],[660.57,-46.41],[663.9,-42.83],[666.92,-42.83],[666.92,-39.25],[663.6,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.048,0],[0,0],[0,0],[0,0]],"o":[[-4.351,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[644.18,-69.74],[648.79,-69.74],[648.79,-64.54],[644.18,-64.54],[644.18,-69.74]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[644.44,-39.25],[644.44,-60.74],[648.57,-60.74],[648.57,-39.25],[644.44,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[606.71,-39.25],[606.71,-60.74],[610.84,-60.74],[610.84,-56.95],[617.28,-61.08],[624.15,-56.65],[631.14,-61.08],[638.69,-52.9],[638.69,-39.25],[634.55,-39.25],[634.55,-51.74],[629.99,-57.46],[624.75,-50.98],[624.75,-39.25],[620.61,-39.25],[620.61,-51.74],[616.09,-57.46],[610.84,-50.98],[610.84,-39.25],[606.71,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[-0.852,-2.815],[-3.117,0],[0,-4.99],[0,0],[0,0],[0,0],[2.856,0],[0,-3.411],[0,0],[0,0],[0,0],[2.812,0],[0,-3.411],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.897,-2.431],[3.282,0],[0.897,-2.558],[4.644,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.289,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.282,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[591.2,-42.53],[597.82,-49.99],[591.2,-57.46],[584.59,-49.99],[591.2,-42.53]],"i":[[0,0],[0,4.478],[3.969,0],[0,-4.478],[-3.963,0]],"o":[[3.969,0],[0,-4.478],[-3.963,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[591.85,-38.91],[584.94,-42.45],[584.94,-39.25],[580.8,-39.25],[580.8,-69.74],[584.94,-69.74],[584.94,-57.59],[591.8,-61.08],[602,-49.99],[591.85,-38.91]],"i":[[0,0],[1.279,2.133],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.856,0],[0,-6.354],[6.437,0]],"o":[[-2.901,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.323,-2.132],[6.482,0],[0,6.355],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[563.7,-38.91],[555.68,-47.52],[555.68,-60.74],[559.82,-60.74],[559.82,-48.33],[564.85,-42.62],[570.65,-49.1],[570.65,-60.74],[574.78,-60.74],[574.78,-39.25],[570.65,-39.25],[570.65,-43.04],[563.7,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.866,0],[0,0],[0,0],[0,0],[0,3.412],[3.365,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[540.47,-38.91],[529,-49.14],[533.3,-49.14],[540.47,-42.83],[546.87,-47.52],[529.9,-61.3],[540.13,-69.44],[550.79,-60.44],[546.49,-60.44],[540.13,-65.52],[534.37,-61.34],[551.39,-47.56],[540.47,-38.91]],"i":[[0,0],[0.344,6.184],[0,0],[-4.567,0],[0,3.241],[0,11.216],[-6.011,0],[-0.382,-5.458],[0,0],[3.67,0],[0,-2.558],[0,-11.685],[6.393,0]],"o":[[-7.08,0],[0,0],[0.344,3.838],[3.753,0],[0,-7.463],[0,-4.862],[6.1,0],[0,0],[-0.299,-3.07],[-3.581,0],[0,7.506],[0,5.459],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":143,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[677.09,-136.49],[676.84,-138.96],[678.4,-140.89],[680.87,-141.14],[682.8,-139.58],[684.34,-136.73]],"i":[[0,0],[-0.242,0.824],[-0.757,0.409],[-0.821,-0.246],[-0.407,-0.756],[0,0]],"o":[[-0.407,-0.756],[0.248,-0.824],[0.757,-0.409],[0.827,0.246],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[672.41,-131.51],[670.36,-135.31],[669.99,-136.52],[670.11,-137.78],[670.7,-138.9],[671.67,-139.7],[672.88,-140.08],[674.14,-139.96],[675.26,-139.37],[676.07,-138.39],[678.64,-133.64]],"i":[[0,0],[0,0],[0.045,0.424],[-0.121,0.408],[-0.267,0.331],[-0.375,0.202],[-0.426,0.044],[-0.407,-0.121],[-0.331,-0.268],[-0.204,-0.375],[0,0]],"o":[[0,0],[-0.204,-0.374],[-0.045,-0.424],[0.121,-0.408],[0.267,-0.33],[0.375,-0.203],[0.42,-0.044],[0.407,0.121],[0.331,0.268],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[672.93,-130.56],[665.22,-144.81],[663.29,-146.38],[660.83,-146.12],[659.26,-144.2],[659.51,-141.73],[668.25,-125.57],[663.95,-126.85],[661.33,-126.74],[659.33,-125.04],[658.97,-122.63],[660.39,-120.64],[672.53,-113.13],[673.21,-112.76],[679.36,-111.22],[685.51,-112.79],[685.12,-112.57],[688.92,-114.63],[695.18,-122.33],[694.16,-132.21],[689.53,-140.76],[687.61,-142.33],[685.14,-142.07],[683.57,-140.15],[683.83,-137.68]],"i":[[0,0],[0,0],[0.821,0.246],[0.757,-0.409],[0.242,-0.824],[-0.407,-0.756],[0,0],[0,0],[0.84,-0.328],[0.458,-0.774],[-0.197,-0.821],[-0.712,-0.45],[-1.088,-0.59],[-0.229,-0.123],[-2.144,0.004],[-1.889,1.022],[0,0],[0,0],[-0.986,3.297],[1.635,3.025],[0,0],[0.821,0.245],[0.751,-0.41],[0.242,-0.824],[-0.413,-0.756]],"o":[[0,0],[-0.413,-0.756],[-0.827,-0.246],[-0.757,0.409],[-0.248,0.824],[0,0],[0,0],[-0.859,-0.256],[-0.84,0.328],[-0.432,0.726],[0.197,0.821],[7.01,4.417],[0.223,0.123],[1.889,1.015],[2.15,-0.004],[0,0],[0,0],[3.022,-1.637],[0.98,-3.296],[0,0],[-0.407,-0.756],[-0.827,-0.246],[-0.757,0.409],[-0.248,0.824],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[677.3,-128.87],"ix":2},"a":{"a":0,"k":[677.3,-128.87],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":144,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[695.61,-130.39],[697.27,-130.39],[710.4,-143.51],[710.4,-159.9],[697.27,-173.02],[643.65,-173.02],[630.53,-159.9],[630.53,-143.51],[643.65,-130.39],[663.41,-130.39]],"i":[[0,0],[0,0],[0,7.248],[0,0],[7.245,0],[0,0],[0,-7.248],[0,0],[-7.245,0],[0,0]],"o":[[0,0],[7.245,0],[0,0],[0,-7.248],[0,0],[-7.245,0],[0,0],[0,7.248],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":1,"ml":4},{"ty":"tr","p":{"a":0,"k":[670.46,-151.71],"ix":2},"a":{"a":0,"k":[670.46,-151.71],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":145,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[670.85,-116],"ix":2},"s":{"a":0,"k":[99,99],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"V","layers":[{"ddd":0,"ind":146,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-796,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[805.9,-223.06],[815.18,-201.41],[836.83,-192.13],[827.55,-213.78],[805.9,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.543,8.529],[3.422,-3.416]],"o":[[-3.416,3.416],[8.543,8.54],[3.409,-3.416],[-8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[836.83,-223.06],[815.18,-213.78],[805.9,-192.13],[827.55,-201.41],[836.83,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.543,8.54],[3.416,3.414],[8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[821.36,-207.6],[821.36,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"f","layers":[{"ddd":0,"refId":"W","ind":27,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[147.95,140.95],"ix":2},"a":{"a":0,"k":[653.29,801.29],"ix":2},"s":{"a":1,"k":[{"t":-8,"s":[0,0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":216,"s":[25,25]}],"ix":2},"o":{"a":1,"k":[{"t":592,"s":[100],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":628,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"W","u":"","p":"data:image/png;base64,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YO93u/3hzjnHOOcdFHXTPD/NI1eAqmmhZ8WVD9kQECtfliQEgJASAkBH62PdUgyd0/bacDFTw0TLZkXhzjnHOObNBScsM2NKhx9te61C2urmvASAkBICQEgJASAkBMgLcYEd0Hh4T5hQJmawfHKMtmReHOOcc45tJlHoiT/h/hYRBB8kHfzMahUgJASAkBICQEgJASAZ4FgHk3F49bzoCBWvyxICQEgJASAZn9TgEYhs1RvhmDa70KtuqAgVr8sSAkBH6bGppY78cPfnfLDWzrZkXhzjnHOOcc45xzi4RY1H7kTiS59MAwrFwAOLsyLw5xzjjhgOMogFR2X7Rzm4qxMGJASAkBICQEgJASAkBKLOATd4LQYc9tJJSKV73R9oyqyBICMrOSUCcwGrLZ5brhfUuiFEnOoy2ZF4c45xzjnHOOcc45xzjnHX40lTOgNDdN+b/MHuGoZfg9qPuWbvjI93axj+8Occ45xzjnHOOcc45xzjnHOOcc45xzjnHxZJevyxICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJALgAA/u2oAAAAABRvZe8svGFYehUK/Bkb/o3ZD5Y8qXX/PKuZ8AccPKT3xcqfJG1GK3kEYalY5qthz7z9FU1OaXwbmWgjaVqCrJX2oDvYkW2yKU3uN+Vd6CJf+62r8TpCsj7DW1u3H9MpnPbB8TB9hsDHC67iNHFddxGjiuu4XAWl2kCAJGz2rMnxvfm9up/7ltRiG8+v/5Xv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","w":1307,"h":1067,"e":1}],"layers":[{"ddd":0,"refId":"0","w":225,"h":113,"ind":1,"ty":0,"nm":"lottielab.com","sr":1,"ks":{"p":{"a":0,"k":[35,17],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"1","w":1184,"h":592,"ind":2,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[592,296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":816,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"2","w":296,"h":148,"ind":3,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":716,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"3","w":296,"h":148,"ind":4,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":592,"s":[100],"h":1},{"t":856,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":5,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":176,"s":[22.5,22.5],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":248,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":6,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-137.23,51.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":5},{"ddd":0,"refId":"4","w":346,"h":58,"ind":7,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":6},{"ddd":0,"ind":8,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-255.49,52.06],"ix":2},"a":{"a":0,"k":[25.34,27.62],"ix":2},"s":{"a":1,"k":[{"t":512,"s":[70,70],"i":{"x":[0],"y":[3.063]},"o":{"x":[0],"y":[0]}},{"t":548,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":5},{"ddd":0,"refId":"5","w":107,"h":108,"ind":9,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-32,-32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":8},{"ddd":0,"ind":10,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[111.85,87.11],"ix":2},"s":{"a":1,"k":[{"t":444,"s":[21,21],"i":{"x":[0.288],"y":[1]},"o":{"x":[0.478],"y":[0]}},{"t":460,"s":[26.25,26.25],"i":{"x":[0.629],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":480,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":11,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[7.38,-0.79],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":448,"s":[75,75],"i":{"x":[0.833],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":508,"s":[76,76]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":10},{"ddd":0,"refId":"6","w":343,"h":53,"ind":12,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":11},{"ddd":0,"ind":13,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-110.31,-1.7],"ix":2},"a":{"a":0,"k":[27.34,25.87],"ix":2},"s":{"a":1,"k":[{"t":496,"s":[81,81],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":512,"s":[67,67]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":10},{"ddd":0,"refId":"7","w":92,"h":83,"ind":14,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-25,-15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":13},{"ddd":0,"refId":"8","w":338,"h":237,"ind":15,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":336,"s":[-40.48,107.77],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":408,"s":[77.02,102.77]}],"ix":2},"a":{"a":0,"k":[169,118.5],"ix":2},"s":{"a":1,"k":[{"t":428,"s":[19.75,19.75],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":452,"s":[16.25,16.25]}],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1},{"t":448,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":16,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":176,"s":[22.5,22.5],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":248,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"9","w":563,"h":283,"ind":17,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-282,-203],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":16},{"ddd":0,"ind":18,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"parent":16,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":248,"s":[0,0],"i":{"x":[0.437],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":284,"s":[0,100],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":348,"s":[0,100],"i":{"x":[0],"y":[1]},"o":{"x":[0.517],"y":[0]}},{"t":416,"s":[0,36],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":448,"s":[0,36],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":484,"s":[0,51]}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":19,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"parent":16,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"a","ind":20,"ty":2,"sr":1,"ks":{"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":16},{"ddd":0,"ind":21,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":148,"s":[25,25],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":176,"s":[18.25,18.25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"b","w":395,"h":276,"ind":22,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":16,"s":[-762.81,389.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":136,"s":[-388.97,10.9]}],"ix":2},"a":{"a":0,"k":[197.5,138],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"c","w":395,"h":277,"ind":23,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":8,"s":[-499.64,389.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":124,"s":[-125.81,10.9]}],"ix":2},"a":{"a":0,"k":[197.5,138.5],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":8,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"d","w":640,"h":490,"ind":24,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-371,-84],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"e","w":639,"h":490,"ind":25,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-107,-84],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"ind":26,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":64,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"t":12,"s":[0,0],"i":{"x":[0],"y":[1]},"o":{"x":[0.454],"y":[0]}},{"t":152,"s":[885.4,463.6],"i":{"x":[0],"y":[1]},"o":{"x":[0.34],"y":[0]}},{"t":204,"s":[967.32,506.16]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"st","c":{"a":0,"k":[0.855,0.22,0.891],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","p":{"a":0,"k":[-1.84,-2.42],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[148.46,74.6],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"f","w":296,"h":148,"ind":27,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":36,"s":[100],"h":1},{"t":668,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":28,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[1184,592],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0.965,0.965,0.965],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","a":{"a":0,"k":[-592,-296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]}'); | |
| 1593 | - | |
| 1594 | -/***/ }), | |
| 1595 | - | |
| 1596 | -/***/ "../modules/promotions/assets/js/react/atomic-promotion-media.js": | |
| 1597 | -/*!***********************************************************************!*\ | |
| 1598 | - !*** ../modules/promotions/assets/js/react/atomic-promotion-media.js ***! | |
| 1599 | - \***********************************************************************/ | |
| 1600 | -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { | |
| 1601 | - | |
| 1602 | -"use strict"; | |
| 1603 | - | |
| 1604 | - | |
| 1605 | -var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); | |
| 1606 | -var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); | |
| 1607 | -Object.defineProperty(exports, "__esModule", ({ | |
| 1608 | - value: true | |
| 1609 | -})); | |
| 1610 | -exports.AtomicPromotionMedia = AtomicPromotionMedia; | |
| 1611 | -exports.resolvePromotionAnimation = resolvePromotionAnimation; | |
| 1612 | -var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); | |
| 1613 | -var _lottieReact = _interopRequireDefault(__webpack_require__(/*! lottie-react */ "../node_modules/lottie-react/build/index.umd.js")); | |
| 1614 | -var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js")); | |
| 1615 | -var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 1616 | -var atomicFormAnimationData = _interopRequireWildcard(__webpack_require__(/*! ./assets/atomic-form-animation.json */ "../modules/promotions/assets/js/react/assets/atomic-form-animation.json")); | |
| 1617 | -function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } | |
| 1618 | -var CARD_WIDTH = 296; | |
| 1619 | -var IMAGE_HEIGHT = 176; | |
| 1620 | -var ANIMATION_HEIGHT = 150; | |
| 1621 | -var PROMOTION_ANIMATIONS = { | |
| 1622 | - 'atomic-form-animation': atomicFormAnimationData | |
| 1623 | -}; | |
| 1624 | -function resolvePromotionAnimation(animationKey) { | |
| 1625 | - var _PROMOTION_ANIMATIONS; | |
| 1626 | - return (_PROMOTION_ANIMATIONS = PROMOTION_ANIMATIONS[animationKey]) !== null && _PROMOTION_ANIMATIONS !== void 0 ? _PROMOTION_ANIMATIONS : null; | |
| 1627 | -} | |
| 1628 | -function AtomicPromotionMedia(_ref) { | |
| 1629 | - var image = _ref.image, | |
| 1630 | - animationData = _ref.animationData; | |
| 1631 | - if (image) { | |
| 1632 | - return /*#__PURE__*/_react.default.createElement(_ui.Image, { | |
| 1633 | - src: image, | |
| 1634 | - alt: "", | |
| 1635 | - sx: { | |
| 1636 | - width: CARD_WIDTH, | |
| 1637 | - height: IMAGE_HEIGHT | |
| 1638 | - } | |
| 1639 | - }); | |
| 1640 | - } | |
| 1641 | - if (animationData) { | |
| 1642 | - return /*#__PURE__*/_react.default.createElement(_ui.Box, { | |
| 1643 | - sx: { | |
| 1644 | - height: ANIMATION_HEIGHT, | |
| 1645 | - width: '100%', | |
| 1646 | - overflow: 'hidden' | |
| 1647 | - }, | |
| 1648 | - "data-testid": "e-atomic-form-animation" | |
| 1649 | - }, /*#__PURE__*/_react.default.createElement(_lottieReact.default, { | |
| 1650 | - animationData: animationData, | |
| 1651 | - loop: true, | |
| 1652 | - autoplay: true, | |
| 1653 | - rendererSettings: { | |
| 1654 | - preserveAspectRatio: 'xMidYMid slice' | |
| 1655 | - }, | |
| 1656 | - style: { | |
| 1657 | - width: '100%', | |
| 1658 | - height: '100%' | |
| 1659 | - } | |
| 1660 | - })); | |
| 1661 | - } | |
| 1662 | - return null; | |
| 1663 | -} | |
| 1664 | -AtomicPromotionMedia.propTypes = { | |
| 1665 | - animationData: _propTypes.default.object, | |
| 1666 | - image: _propTypes.default.string | |
| 1667 | -}; | |
| 1668 | - | |
| 1669 | -/***/ }), | |
| 1670 | - | |
| 1671 | -/***/ "../modules/promotions/assets/js/react/components/atomic-promotion-card.js": | |
| 1672 | -/*!*********************************************************************************!*\ | |
| 1673 | - !*** ../modules/promotions/assets/js/react/components/atomic-promotion-card.js ***! | |
| 1674 | - \*********************************************************************************/ | |
| 1675 | -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { | |
| 1676 | - | |
| 1677 | -"use strict"; | |
| 1678 | - | |
| 1679 | - | |
| 1680 | -var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); | |
| 1681 | -Object.defineProperty(exports, "__esModule", ({ | |
| 1682 | - value: true | |
| 1683 | -})); | |
| 1684 | -exports["default"] = void 0; | |
| 1685 | -var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); | |
| 1686 | -var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js")); | |
| 1687 | -var _icons = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 1688 | -var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 1689 | -var _atomicPromotionMedia = __webpack_require__(/*! ../atomic-promotion-media */ "../modules/promotions/assets/js/react/atomic-promotion-media.js"); | |
| 1690 | -var CARD_WIDTH = 296; | |
| 1691 | -var AtomicPromotionCard = function AtomicPromotionCard(_ref) { | |
| 1692 | - var doClose = _ref.doClose, | |
| 1693 | - promotionData = _ref.promotionData; | |
| 1694 | - var _ref2 = promotionData !== null && promotionData !== void 0 ? promotionData : {}, | |
| 1695 | - title = _ref2.title, | |
| 1696 | - content = _ref2.content, | |
| 1697 | - ctaText = _ref2.ctaText, | |
| 1698 | - ctaUrl = _ref2.ctaUrl, | |
| 1699 | - image = _ref2.image, | |
| 1700 | - animationData = _ref2.animationData; | |
| 1701 | - return /*#__PURE__*/_react.default.createElement(_ui.ClickAwayListener, { | |
| 1702 | - disableReactTree: true, | |
| 1703 | - mouseEvent: "onMouseDown", | |
| 1704 | - touchEvent: "onTouchStart", | |
| 1705 | - onClickAway: doClose | |
| 1706 | - }, /*#__PURE__*/_react.default.createElement(_ui.Box, { | |
| 1707 | - sx: { | |
| 1708 | - width: CARD_WIDTH | |
| 1709 | - } | |
| 1710 | - }, /*#__PURE__*/_react.default.createElement(_ui.Stack, { | |
| 1711 | - direction: "row", | |
| 1712 | - alignItems: "center", | |
| 1713 | - py: 1, | |
| 1714 | - px: 2 | |
| 1715 | - }, /*#__PURE__*/_react.default.createElement(_ui.Typography, { | |
| 1716 | - variant: "subtitle2" | |
| 1717 | - }, title), /*#__PURE__*/_react.default.createElement(_ui.CloseButton, { | |
| 1718 | - edge: "end", | |
| 1719 | - sx: { | |
| 1720 | - ml: 'auto' | |
| 1721 | - }, | |
| 1722 | - slotProps: { | |
| 1723 | - icon: { | |
| 1724 | - fontSize: 'small' | |
| 1725 | - } | |
| 1726 | - }, | |
| 1727 | - onClick: doClose | |
| 1728 | - })), /*#__PURE__*/_react.default.createElement(_atomicPromotionMedia.AtomicPromotionMedia, { | |
| 1729 | - image: image, | |
| 1730 | - animationData: animationData | |
| 1731 | - }), /*#__PURE__*/_react.default.createElement(_ui.Stack, { | |
| 1732 | - px: 2 | |
| 1733 | - }, /*#__PURE__*/_react.default.createElement(_ui.Typography, { | |
| 1734 | - variant: "body2", | |
| 1735 | - color: "secondary", | |
| 1736 | - sx: { | |
| 1737 | - pt: 1.5, | |
| 1738 | - pb: 1 | |
| 1739 | - } | |
| 1740 | - }, content)), /*#__PURE__*/_react.default.createElement(_ui.Stack, { | |
| 1741 | - direction: "row", | |
| 1742 | - pt: 1, | |
| 1743 | - pb: 1.5, | |
| 1744 | - px: 2 | |
| 1745 | - }, /*#__PURE__*/_react.default.createElement(_ui.Button, { | |
| 1746 | - variant: "contained", | |
| 1747 | - size: "small", | |
| 1748 | - color: "promotion", | |
| 1749 | - startIcon: /*#__PURE__*/_react.default.createElement(_icons.CrownFilledIcon, null), | |
| 1750 | - href: ctaUrl, | |
| 1751 | - target: "_blank", | |
| 1752 | - rel: "noopener noreferrer" | |
| 1753 | - }, ctaText)))); | |
| 1754 | -}; | |
| 1755 | -AtomicPromotionCard.propTypes = { | |
| 1756 | - doClose: _propTypes.default.func, | |
| 1757 | - promotionData: _propTypes.default.object | |
| 1758 | -}; | |
| 1759 | -var _default = exports["default"] = AtomicPromotionCard; | |
| 1760 | - | |
| 1761 | -/***/ }), | |
| 1762 | - | |
| 1763 | 1384 | /***/ "../modules/promotions/assets/js/react/components/promotion-card.js": |
| 1764 | 1385 | /*!**************************************************************************!*\ |
| 1765 | 1386 | !*** ../modules/promotions/assets/js/react/components/promotion-card.js ***! |
| 1766 | 1387 | \**************************************************************************/ |
| @@ -1881,115 +1502,8 @@ | ||
| 1881 | 1502 | var _default = exports["default"] = PromotionCard; |
| 1882 | 1503 | |
| 1883 | 1504 | /***/ }), |
| 1884 | 1505 | |
| 1885 | -/***/ "../modules/promotions/assets/js/react/components/widget-promotion-card.js": | |
| 1886 | -/*!*********************************************************************************!*\ | |
| 1887 | - !*** ../modules/promotions/assets/js/react/components/widget-promotion-card.js ***! | |
| 1888 | - \*********************************************************************************/ | |
| 1889 | -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { | |
| 1890 | - | |
| 1891 | -"use strict"; | |
| 1892 | - | |
| 1893 | - | |
| 1894 | -var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); | |
| 1895 | -Object.defineProperty(exports, "__esModule", ({ | |
| 1896 | - value: true | |
| 1897 | -})); | |
| 1898 | -exports["default"] = void 0; | |
| 1899 | -var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); | |
| 1900 | -var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 1901 | -var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 1902 | -var _icons = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 1903 | -var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js")); | |
| 1904 | -var CARD_WIDTH = 296; | |
| 1905 | -var IMAGE_HEIGHT = 176; | |
| 1906 | -var DEFAULT_CTA_TEXT = (0, _i18n.__)('Upgrade Now', 'elementor'); | |
| 1907 | -var WidgetPromotionCard = function WidgetPromotionCard(_ref) { | |
| 1908 | - var doClose = _ref.doClose, | |
| 1909 | - promotionData = _ref.promotionData; | |
| 1910 | - var title = promotionData.title, | |
| 1911 | - content = promotionData.content, | |
| 1912 | - image = promotionData.image, | |
| 1913 | - ctaUrl = promotionData.ctaUrl, | |
| 1914 | - ctaText = promotionData.ctaText, | |
| 1915 | - hideProTag = promotionData.hideProTag; | |
| 1916 | - return /*#__PURE__*/_react.default.createElement(_ui.ClickAwayListener, { | |
| 1917 | - disableReactTree: true, | |
| 1918 | - mouseEvent: "onMouseDown", | |
| 1919 | - touchEvent: "onTouchStart", | |
| 1920 | - onClickAway: doClose | |
| 1921 | - }, /*#__PURE__*/_react.default.createElement(_ui.Box, { | |
| 1922 | - sx: { | |
| 1923 | - width: CARD_WIDTH | |
| 1924 | - } | |
| 1925 | - }, /*#__PURE__*/_react.default.createElement(_ui.Stack, { | |
| 1926 | - direction: "row", | |
| 1927 | - alignItems: "center", | |
| 1928 | - py: 1, | |
| 1929 | - px: 2 | |
| 1930 | - }, /*#__PURE__*/_react.default.createElement(_ui.Typography, { | |
| 1931 | - variant: "subtitle2" | |
| 1932 | - }, title), hideProTag && /*#__PURE__*/_react.default.createElement(_ui.Chip, { | |
| 1933 | - label: (0, _i18n.__)('Free', 'elementor'), | |
| 1934 | - size: "tiny", | |
| 1935 | - variant: "standard", | |
| 1936 | - color: "secondary", | |
| 1937 | - sx: { | |
| 1938 | - ml: 1 | |
| 1939 | - } | |
| 1940 | - }), /*#__PURE__*/_react.default.createElement(_ui.CloseButton, { | |
| 1941 | - edge: "end", | |
| 1942 | - sx: { | |
| 1943 | - ml: 'auto' | |
| 1944 | - }, | |
| 1945 | - slotProps: { | |
| 1946 | - icon: { | |
| 1947 | - fontSize: 'small' | |
| 1948 | - } | |
| 1949 | - }, | |
| 1950 | - onClick: doClose | |
| 1951 | - })), image && /*#__PURE__*/_react.default.createElement(_ui.Image, { | |
| 1952 | - src: image, | |
| 1953 | - alt: "", | |
| 1954 | - sx: { | |
| 1955 | - width: CARD_WIDTH, | |
| 1956 | - height: IMAGE_HEIGHT | |
| 1957 | - } | |
| 1958 | - }), /*#__PURE__*/_react.default.createElement(_ui.Stack, { | |
| 1959 | - px: 2 | |
| 1960 | - }, /*#__PURE__*/_react.default.createElement(_ui.Typography, { | |
| 1961 | - variant: "body2", | |
| 1962 | - color: "secondary", | |
| 1963 | - sx: { | |
| 1964 | - pt: 1.5, | |
| 1965 | - pb: 1 | |
| 1966 | - } | |
| 1967 | - }, content)), /*#__PURE__*/_react.default.createElement(_ui.Stack, { | |
| 1968 | - pt: 1, | |
| 1969 | - pb: 1.5, | |
| 1970 | - px: 2 | |
| 1971 | - }, /*#__PURE__*/_react.default.createElement(_ui.Button, { | |
| 1972 | - variant: "contained", | |
| 1973 | - size: "small", | |
| 1974 | - color: hideProTag ? 'info' : 'promotion', | |
| 1975 | - href: ctaUrl, | |
| 1976 | - target: "_blank", | |
| 1977 | - rel: "noopener noreferrer", | |
| 1978 | - startIcon: hideProTag ? null : /*#__PURE__*/_react.default.createElement(_icons.CrownFilledIcon, null), | |
| 1979 | - sx: { | |
| 1980 | - ml: 'auto' | |
| 1981 | - } | |
| 1982 | - }, ctaText || DEFAULT_CTA_TEXT)))); | |
| 1983 | -}; | |
| 1984 | -WidgetPromotionCard.propTypes = { | |
| 1985 | - doClose: _propTypes.default.func, | |
| 1986 | - promotionData: _propTypes.default.object | |
| 1987 | -}; | |
| 1988 | -var _default = exports["default"] = WidgetPromotionCard; | |
| 1989 | - | |
| 1990 | -/***/ }), | |
| 1991 | - | |
| 1992 | 1506 | /***/ "../modules/promotions/assets/js/react/controls/promotion.js": |
| 1993 | 1507 | /*!*******************************************************************!*\ |
| 1994 | 1508 | !*** ../modules/promotions/assets/js/react/controls/promotion.js ***! |
| 1995 | 1509 | \*******************************************************************/ |
| @@ -2075,9 +1589,8 @@ | ||
| 2075 | 1589 | var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); |
| 2076 | 1590 | var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js")); |
| 2077 | 1591 | var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js")); |
| 2078 | 1592 | var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js")); |
| 2079 | -var _appManager = __webpack_require__(/*! ./app-manager */ "../modules/promotions/assets/js/react/app-manager.js"); | |
| 2080 | 1593 | var _promotion = _interopRequireDefault(__webpack_require__(/*! ./controls/promotion */ "../modules/promotions/assets/js/react/controls/promotion.js")); |
| 2081 | 1594 | function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); } |
| 2082 | 1595 | function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } |
| 2083 | 1596 | var Module = exports["default"] = /*#__PURE__*/function (_elementorModules$edi) { |
| @@ -2089,9 +1602,8 @@ | ||
| 2089 | 1602 | return (0, _createClass2.default)(Module, [{ |
| 2090 | 1603 | key: "onElementorInit", |
| 2091 | 1604 | value: function onElementorInit() { |
| 2092 | 1605 | elementor.addControlView('promotion_control', _promotion.default); |
| 2093 | - new _appManager.AppManager(); | |
| 2094 | 1606 | } |
| 2095 | 1607 | }]); |
| 2096 | 1608 | }(elementorModules.editor.utils.Module); |
| 2097 | 1609 | |
| @@ -2192,27 +1704,8 @@ | ||
| 2192 | 1704 | module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports; |
| 2193 | 1705 | |
| 2194 | 1706 | /***/ }), |
| 2195 | 1707 | |
| 2196 | -/***/ "../node_modules/@babel/runtime/helpers/extends.js": | |
| 2197 | -/*!*********************************************************!*\ | |
| 2198 | - !*** ../node_modules/@babel/runtime/helpers/extends.js ***! | |
| 2199 | - \*********************************************************/ | |
| 2200 | -/***/ ((module) => { | |
| 2201 | - | |
| 2202 | -function _extends() { | |
| 2203 | - return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) { | |
| 2204 | - for (var e = 1; e < arguments.length; e++) { | |
| 2205 | - var t = arguments[e]; | |
| 2206 | - for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); | |
| 2207 | - } | |
| 2208 | - return n; | |
| 2209 | - }, module.exports.__esModule = true, module.exports["default"] = module.exports, _extends.apply(null, arguments); | |
| 2210 | -} | |
| 2211 | -module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports; | |
| 2212 | - | |
| 2213 | -/***/ }), | |
| 2214 | - | |
| 2215 | 1708 | /***/ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js": |
| 2216 | 1709 | /*!****************************************************************!*\ |
| 2217 | 1710 | !*** ../node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! |
| 2218 | 1711 | \****************************************************************/ |
| @@ -2314,49 +1807,8 @@ | ||
| 2314 | 1807 | module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports; |
| 2315 | 1808 | |
| 2316 | 1809 | /***/ }), |
| 2317 | 1810 | |
| 2318 | -/***/ "../node_modules/@babel/runtime/helpers/objectWithoutProperties.js": | |
| 2319 | -/*!*************************************************************************!*\ | |
| 2320 | - !*** ../node_modules/@babel/runtime/helpers/objectWithoutProperties.js ***! | |
| 2321 | - \*************************************************************************/ | |
| 2322 | -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { | |
| 2323 | - | |
| 2324 | -var objectWithoutPropertiesLoose = __webpack_require__(/*! ./objectWithoutPropertiesLoose.js */ "../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js"); | |
| 2325 | -function _objectWithoutProperties(e, t) { | |
| 2326 | - if (null == e) return {}; | |
| 2327 | - var o, | |
| 2328 | - r, | |
| 2329 | - i = objectWithoutPropertiesLoose(e, t); | |
| 2330 | - if (Object.getOwnPropertySymbols) { | |
| 2331 | - var n = Object.getOwnPropertySymbols(e); | |
| 2332 | - for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); | |
| 2333 | - } | |
| 2334 | - return i; | |
| 2335 | -} | |
| 2336 | -module.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports["default"] = module.exports; | |
| 2337 | - | |
| 2338 | -/***/ }), | |
| 2339 | - | |
| 2340 | -/***/ "../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js": | |
| 2341 | -/*!******************************************************************************!*\ | |
| 2342 | - !*** ../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js ***! | |
| 2343 | - \******************************************************************************/ | |
| 2344 | -/***/ ((module) => { | |
| 2345 | - | |
| 2346 | -function _objectWithoutPropertiesLoose(r, e) { | |
| 2347 | - if (null == r) return {}; | |
| 2348 | - var t = {}; | |
| 2349 | - for (var n in r) if ({}.hasOwnProperty.call(r, n)) { | |
| 2350 | - if (-1 !== e.indexOf(n)) continue; | |
| 2351 | - t[n] = r[n]; | |
| 2352 | - } | |
| 2353 | - return t; | |
| 2354 | -} | |
| 2355 | -module.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports["default"] = module.exports; | |
| 2356 | - | |
| 2357 | -/***/ }), | |
| 2358 | - | |
| 2359 | 1811 | /***/ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": |
| 2360 | 1812 | /*!***************************************************************************!*\ |
| 2361 | 1813 | !*** ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! |
| 2362 | 1814 | \***************************************************************************/ |
| @@ -2478,17758 +1930,8 @@ | ||
| 2478 | 1930 | module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; |
| 2479 | 1931 | |
| 2480 | 1932 | /***/ }), |
| 2481 | 1933 | |
| 2482 | -/***/ "../node_modules/lottie-react/build/index.umd.js": | |
| 2483 | -/*!*******************************************************!*\ | |
| 2484 | - !*** ../node_modules/lottie-react/build/index.umd.js ***! | |
| 2485 | - \*******************************************************/ | |
| 2486 | -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { | |
| 2487 | - | |
| 2488 | -(function (global, factory) { | |
| 2489 | - true ? factory(exports, __webpack_require__(/*! lottie-web */ "../node_modules/lottie-web/build/player/lottie.js"), __webpack_require__(/*! react */ "react")) : | |
| 2490 | - 0; | |
| 2491 | -})(this, (function (exports, lottie, React) { 'use strict'; | |
| 2492 | - | |
| 2493 | - function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | |
| 2494 | - | |
| 2495 | - var lottie__default = /*#__PURE__*/_interopDefaultLegacy(lottie); | |
| 2496 | - var React__default = /*#__PURE__*/_interopDefaultLegacy(React); | |
| 2497 | - | |
| 2498 | - function _arrayLikeToArray(r, a) { | |
| 2499 | - (null == a || a > r.length) && (a = r.length); | |
| 2500 | - for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; | |
| 2501 | - return n; | |
| 2502 | - } | |
| 2503 | - function _arrayWithHoles(r) { | |
| 2504 | - if (Array.isArray(r)) return r; | |
| 2505 | - } | |
| 2506 | - function _defineProperty(e, r, t) { | |
| 2507 | - return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { | |
| 2508 | - value: t, | |
| 2509 | - enumerable: !0, | |
| 2510 | - configurable: !0, | |
| 2511 | - writable: !0 | |
| 2512 | - }) : e[r] = t, e; | |
| 2513 | - } | |
| 2514 | - function _iterableToArrayLimit(r, l) { | |
| 2515 | - var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; | |
| 2516 | - if (null != t) { | |
| 2517 | - var e, | |
| 2518 | - n, | |
| 2519 | - i, | |
| 2520 | - u, | |
| 2521 | - a = [], | |
| 2522 | - f = !0, | |
| 2523 | - o = !1; | |
| 2524 | - try { | |
| 2525 | - if (i = (t = t.call(r)).next, 0 === l) { | |
| 2526 | - if (Object(t) !== t) return; | |
| 2527 | - f = !1; | |
| 2528 | - } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); | |
| 2529 | - } catch (r) { | |
| 2530 | - o = !0, n = r; | |
| 2531 | - } finally { | |
| 2532 | - try { | |
| 2533 | - if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; | |
| 2534 | - } finally { | |
| 2535 | - if (o) throw n; | |
| 2536 | - } | |
| 2537 | - } | |
| 2538 | - return a; | |
| 2539 | - } | |
| 2540 | - } | |
| 2541 | - function _nonIterableRest() { | |
| 2542 | - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); | |
| 2543 | - } | |
| 2544 | - function ownKeys(e, r) { | |
| 2545 | - var t = Object.keys(e); | |
| 2546 | - if (Object.getOwnPropertySymbols) { | |
| 2547 | - var o = Object.getOwnPropertySymbols(e); | |
| 2548 | - r && (o = o.filter(function (r) { | |
| 2549 | - return Object.getOwnPropertyDescriptor(e, r).enumerable; | |
| 2550 | - })), t.push.apply(t, o); | |
| 2551 | - } | |
| 2552 | - return t; | |
| 2553 | - } | |
| 2554 | - function _objectSpread2(e) { | |
| 2555 | - for (var r = 1; r < arguments.length; r++) { | |
| 2556 | - var t = null != arguments[r] ? arguments[r] : {}; | |
| 2557 | - r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { | |
| 2558 | - _defineProperty(e, r, t[r]); | |
| 2559 | - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { | |
| 2560 | - Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); | |
| 2561 | - }); | |
| 2562 | - } | |
| 2563 | - return e; | |
| 2564 | - } | |
| 2565 | - function _objectWithoutProperties(e, t) { | |
| 2566 | - if (null == e) return {}; | |
| 2567 | - var o, | |
| 2568 | - r, | |
| 2569 | - i = _objectWithoutPropertiesLoose(e, t); | |
| 2570 | - if (Object.getOwnPropertySymbols) { | |
| 2571 | - var s = Object.getOwnPropertySymbols(e); | |
| 2572 | - for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); | |
| 2573 | - } | |
| 2574 | - return i; | |
| 2575 | - } | |
| 2576 | - function _objectWithoutPropertiesLoose(r, e) { | |
| 2577 | - if (null == r) return {}; | |
| 2578 | - var t = {}; | |
| 2579 | - for (var n in r) if ({}.hasOwnProperty.call(r, n)) { | |
| 2580 | - if (e.includes(n)) continue; | |
| 2581 | - t[n] = r[n]; | |
| 2582 | - } | |
| 2583 | - return t; | |
| 2584 | - } | |
| 2585 | - function _slicedToArray(r, e) { | |
| 2586 | - return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); | |
| 2587 | - } | |
| 2588 | - function _toPrimitive(t, r) { | |
| 2589 | - if ("object" != typeof t || !t) return t; | |
| 2590 | - var e = t[Symbol.toPrimitive]; | |
| 2591 | - if (void 0 !== e) { | |
| 2592 | - var i = e.call(t, r || "default"); | |
| 2593 | - if ("object" != typeof i) return i; | |
| 2594 | - throw new TypeError("@@toPrimitive must return a primitive value."); | |
| 2595 | - } | |
| 2596 | - return ("string" === r ? String : Number)(t); | |
| 2597 | - } | |
| 2598 | - function _toPropertyKey(t) { | |
| 2599 | - var i = _toPrimitive(t, "string"); | |
| 2600 | - return "symbol" == typeof i ? i : i + ""; | |
| 2601 | - } | |
| 2602 | - function _unsupportedIterableToArray(r, a) { | |
| 2603 | - if (r) { | |
| 2604 | - if ("string" == typeof r) return _arrayLikeToArray(r, a); | |
| 2605 | - var t = {}.toString.call(r).slice(8, -1); | |
| 2606 | - 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; | |
| 2607 | - } | |
| 2608 | - } | |
| 2609 | - | |
| 2610 | - var _excluded$1 = ["animationData", "loop", "autoplay", "initialSegment", "onComplete", "onLoopComplete", "onEnterFrame", "onSegmentStart", "onConfigReady", "onDataReady", "onDataFailed", "onLoadedImages", "onDOMLoaded", "onDestroy", "lottieRef", "renderer", "name", "assetsPath", "rendererSettings"]; | |
| 2611 | - var useLottie = function useLottie(props, style) { | |
| 2612 | - var animationData = props.animationData, | |
| 2613 | - loop = props.loop, | |
| 2614 | - autoplay = props.autoplay, | |
| 2615 | - initialSegment = props.initialSegment, | |
| 2616 | - onComplete = props.onComplete, | |
| 2617 | - onLoopComplete = props.onLoopComplete, | |
| 2618 | - onEnterFrame = props.onEnterFrame, | |
| 2619 | - onSegmentStart = props.onSegmentStart, | |
| 2620 | - onConfigReady = props.onConfigReady, | |
| 2621 | - onDataReady = props.onDataReady, | |
| 2622 | - onDataFailed = props.onDataFailed, | |
| 2623 | - onLoadedImages = props.onLoadedImages, | |
| 2624 | - onDOMLoaded = props.onDOMLoaded, | |
| 2625 | - onDestroy = props.onDestroy; | |
| 2626 | - props.lottieRef; | |
| 2627 | - props.renderer; | |
| 2628 | - props.name; | |
| 2629 | - props.assetsPath; | |
| 2630 | - props.rendererSettings; | |
| 2631 | - var rest = _objectWithoutProperties(props, _excluded$1); | |
| 2632 | - var _useState = React.useState(false), | |
| 2633 | - _useState2 = _slicedToArray(_useState, 2), | |
| 2634 | - animationLoaded = _useState2[0], | |
| 2635 | - setAnimationLoaded = _useState2[1]; | |
| 2636 | - var animationInstanceRef = React.useRef(); | |
| 2637 | - var animationContainer = React.useRef(null); | |
| 2638 | - /* | |
| 2639 | - ====================================== | |
| 2640 | - INTERACTION METHODS | |
| 2641 | - ====================================== | |
| 2642 | - */ | |
| 2643 | - /** | |
| 2644 | - * Play | |
| 2645 | - */ | |
| 2646 | - var play = function play() { | |
| 2647 | - var _a; | |
| 2648 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.play(); | |
| 2649 | - }; | |
| 2650 | - /** | |
| 2651 | - * Stop | |
| 2652 | - */ | |
| 2653 | - var stop = function stop() { | |
| 2654 | - var _a; | |
| 2655 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.stop(); | |
| 2656 | - }; | |
| 2657 | - /** | |
| 2658 | - * Pause | |
| 2659 | - */ | |
| 2660 | - var pause = function pause() { | |
| 2661 | - var _a; | |
| 2662 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.pause(); | |
| 2663 | - }; | |
| 2664 | - /** | |
| 2665 | - * Set animation speed | |
| 2666 | - * @param speed | |
| 2667 | - */ | |
| 2668 | - var setSpeed = function setSpeed(speed) { | |
| 2669 | - var _a; | |
| 2670 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSpeed(speed); | |
| 2671 | - }; | |
| 2672 | - /** | |
| 2673 | - * Got to frame and play | |
| 2674 | - * @param value | |
| 2675 | - * @param isFrame | |
| 2676 | - */ | |
| 2677 | - var goToAndPlay = function goToAndPlay(value, isFrame) { | |
| 2678 | - var _a; | |
| 2679 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndPlay(value, isFrame); | |
| 2680 | - }; | |
| 2681 | - /** | |
| 2682 | - * Got to frame and stop | |
| 2683 | - * @param value | |
| 2684 | - * @param isFrame | |
| 2685 | - */ | |
| 2686 | - var goToAndStop = function goToAndStop(value, isFrame) { | |
| 2687 | - var _a; | |
| 2688 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndStop(value, isFrame); | |
| 2689 | - }; | |
| 2690 | - /** | |
| 2691 | - * Set animation direction | |
| 2692 | - * @param direction | |
| 2693 | - */ | |
| 2694 | - var setDirection = function setDirection(direction) { | |
| 2695 | - var _a; | |
| 2696 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setDirection(direction); | |
| 2697 | - }; | |
| 2698 | - /** | |
| 2699 | - * Play animation segments | |
| 2700 | - * @param segments | |
| 2701 | - * @param forceFlag | |
| 2702 | - */ | |
| 2703 | - var playSegments = function playSegments(segments, forceFlag) { | |
| 2704 | - var _a; | |
| 2705 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.playSegments(segments, forceFlag); | |
| 2706 | - }; | |
| 2707 | - /** | |
| 2708 | - * Set sub frames | |
| 2709 | - * @param useSubFrames | |
| 2710 | - */ | |
| 2711 | - var setSubframe = function setSubframe(useSubFrames) { | |
| 2712 | - var _a; | |
| 2713 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSubframe(useSubFrames); | |
| 2714 | - }; | |
| 2715 | - /** | |
| 2716 | - * Get animation duration | |
| 2717 | - * @param inFrames | |
| 2718 | - */ | |
| 2719 | - var getDuration = function getDuration(inFrames) { | |
| 2720 | - var _a; | |
| 2721 | - return (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.getDuration(inFrames); | |
| 2722 | - }; | |
| 2723 | - /** | |
| 2724 | - * Destroy animation | |
| 2725 | - */ | |
| 2726 | - var destroy = function destroy() { | |
| 2727 | - var _a; | |
| 2728 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy(); | |
| 2729 | - // Removing the reference to the animation so separate cleanups are skipped. | |
| 2730 | - // Without it the internal `lottie-react` instance throws exceptions as it already cleared itself on destroy. | |
| 2731 | - animationInstanceRef.current = undefined; | |
| 2732 | - }; | |
| 2733 | - /* | |
| 2734 | - ====================================== | |
| 2735 | - LOTTIE | |
| 2736 | - ====================================== | |
| 2737 | - */ | |
| 2738 | - /** | |
| 2739 | - * Load a new animation, and if it's the case, destroy the previous one | |
| 2740 | - * @param {Object} forcedConfigs | |
| 2741 | - */ | |
| 2742 | - var loadAnimation = function loadAnimation() { | |
| 2743 | - var forcedConfigs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | |
| 2744 | - var _a; | |
| 2745 | - // Return if the container ref is null | |
| 2746 | - if (!animationContainer.current) { | |
| 2747 | - return; | |
| 2748 | - } | |
| 2749 | - // Destroy any previous instance | |
| 2750 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy(); | |
| 2751 | - // Build the animation configuration | |
| 2752 | - var config = _objectSpread2(_objectSpread2(_objectSpread2({}, props), forcedConfigs), {}, { | |
| 2753 | - container: animationContainer.current | |
| 2754 | - }); | |
| 2755 | - // Save the animation instance | |
| 2756 | - animationInstanceRef.current = lottie__default["default"].loadAnimation(config); | |
| 2757 | - setAnimationLoaded(!!animationInstanceRef.current); | |
| 2758 | - // Return a function that will clean up | |
| 2759 | - return function () { | |
| 2760 | - var _a; | |
| 2761 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy(); | |
| 2762 | - animationInstanceRef.current = undefined; | |
| 2763 | - }; | |
| 2764 | - }; | |
| 2765 | - /** | |
| 2766 | - * (Re)Initialize when animation data changed | |
| 2767 | - */ | |
| 2768 | - React.useEffect(function () { | |
| 2769 | - var onUnmount = loadAnimation(); | |
| 2770 | - // Clean up on unmount | |
| 2771 | - return function () { | |
| 2772 | - return onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount(); | |
| 2773 | - }; | |
| 2774 | - // eslint-disable-next-line react-hooks/exhaustive-deps | |
| 2775 | - }, [animationData, loop]); | |
| 2776 | - // Update the autoplay state | |
| 2777 | - React.useEffect(function () { | |
| 2778 | - if (!animationInstanceRef.current) { | |
| 2779 | - return; | |
| 2780 | - } | |
| 2781 | - animationInstanceRef.current.autoplay = !!autoplay; | |
| 2782 | - }, [autoplay]); | |
| 2783 | - // Update the initial segment state | |
| 2784 | - React.useEffect(function () { | |
| 2785 | - if (!animationInstanceRef.current) { | |
| 2786 | - return; | |
| 2787 | - } | |
| 2788 | - // When null should reset to default animation length | |
| 2789 | - if (!initialSegment) { | |
| 2790 | - animationInstanceRef.current.resetSegments(true); | |
| 2791 | - return; | |
| 2792 | - } | |
| 2793 | - // If it's not a valid segment, do nothing | |
| 2794 | - if (!Array.isArray(initialSegment) || !initialSegment.length) { | |
| 2795 | - return; | |
| 2796 | - } | |
| 2797 | - // If the current position it's not in the new segment | |
| 2798 | - // set the current position to start | |
| 2799 | - if (animationInstanceRef.current.currentRawFrame < initialSegment[0] || animationInstanceRef.current.currentRawFrame > initialSegment[1]) { | |
| 2800 | - animationInstanceRef.current.currentRawFrame = initialSegment[0]; | |
| 2801 | - } | |
| 2802 | - // Update the segment | |
| 2803 | - animationInstanceRef.current.setSegment(initialSegment[0], initialSegment[1]); | |
| 2804 | - }, [initialSegment]); | |
| 2805 | - /* | |
| 2806 | - ====================================== | |
| 2807 | - EVENTS | |
| 2808 | - ====================================== | |
| 2809 | - */ | |
| 2810 | - /** | |
| 2811 | - * Reinitialize listener on change | |
| 2812 | - */ | |
| 2813 | - React.useEffect(function () { | |
| 2814 | - var partialListeners = [{ | |
| 2815 | - name: "complete", | |
| 2816 | - handler: onComplete | |
| 2817 | - }, { | |
| 2818 | - name: "loopComplete", | |
| 2819 | - handler: onLoopComplete | |
| 2820 | - }, { | |
| 2821 | - name: "enterFrame", | |
| 2822 | - handler: onEnterFrame | |
| 2823 | - }, { | |
| 2824 | - name: "segmentStart", | |
| 2825 | - handler: onSegmentStart | |
| 2826 | - }, { | |
| 2827 | - name: "config_ready", | |
| 2828 | - handler: onConfigReady | |
| 2829 | - }, { | |
| 2830 | - name: "data_ready", | |
| 2831 | - handler: onDataReady | |
| 2832 | - }, { | |
| 2833 | - name: "data_failed", | |
| 2834 | - handler: onDataFailed | |
| 2835 | - }, { | |
| 2836 | - name: "loaded_images", | |
| 2837 | - handler: onLoadedImages | |
| 2838 | - }, { | |
| 2839 | - name: "DOMLoaded", | |
| 2840 | - handler: onDOMLoaded | |
| 2841 | - }, { | |
| 2842 | - name: "destroy", | |
| 2843 | - handler: onDestroy | |
| 2844 | - }]; | |
| 2845 | - var listeners = partialListeners.filter(function (listener) { | |
| 2846 | - return listener.handler != null; | |
| 2847 | - }); | |
| 2848 | - if (!listeners.length) { | |
| 2849 | - return; | |
| 2850 | - } | |
| 2851 | - var deregisterList = listeners.map( | |
| 2852 | - /** | |
| 2853 | - * Handle the process of adding an event listener | |
| 2854 | - * @param {Listener} listener | |
| 2855 | - * @return {Function} Function that deregister the listener | |
| 2856 | - */ | |
| 2857 | - function (listener) { | |
| 2858 | - var _a; | |
| 2859 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener(listener.name, listener.handler); | |
| 2860 | - // Return a function to deregister this listener | |
| 2861 | - return function () { | |
| 2862 | - var _a; | |
| 2863 | - (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(listener.name, listener.handler); | |
| 2864 | - }; | |
| 2865 | - }); | |
| 2866 | - // Deregister listeners on unmount | |
| 2867 | - return function () { | |
| 2868 | - deregisterList.forEach(function (deregister) { | |
| 2869 | - return deregister(); | |
| 2870 | - }); | |
| 2871 | - }; | |
| 2872 | - }, [onComplete, onLoopComplete, onEnterFrame, onSegmentStart, onConfigReady, onDataReady, onDataFailed, onLoadedImages, onDOMLoaded, onDestroy]); | |
| 2873 | - /** | |
| 2874 | - * Build the animation view | |
| 2875 | - */ | |
| 2876 | - var View = /*#__PURE__*/React__default["default"].createElement("div", _objectSpread2({ | |
| 2877 | - style: style, | |
| 2878 | - ref: animationContainer | |
| 2879 | - }, rest)); | |
| 2880 | - return { | |
| 2881 | - View: View, | |
| 2882 | - play: play, | |
| 2883 | - stop: stop, | |
| 2884 | - pause: pause, | |
| 2885 | - setSpeed: setSpeed, | |
| 2886 | - goToAndStop: goToAndStop, | |
| 2887 | - goToAndPlay: goToAndPlay, | |
| 2888 | - setDirection: setDirection, | |
| 2889 | - playSegments: playSegments, | |
| 2890 | - setSubframe: setSubframe, | |
| 2891 | - getDuration: getDuration, | |
| 2892 | - destroy: destroy, | |
| 2893 | - animationContainerRef: animationContainer, | |
| 2894 | - animationLoaded: animationLoaded, | |
| 2895 | - animationItem: animationInstanceRef.current | |
| 2896 | - }; | |
| 2897 | - }; | |
| 2898 | - | |
| 2899 | - // helpers | |
| 2900 | - function getContainerVisibility(container) { | |
| 2901 | - var _container$getBoundin = container.getBoundingClientRect(), | |
| 2902 | - top = _container$getBoundin.top, | |
| 2903 | - height = _container$getBoundin.height; | |
| 2904 | - var current = window.innerHeight - top; | |
| 2905 | - var max = window.innerHeight + height; | |
| 2906 | - return current / max; | |
| 2907 | - } | |
| 2908 | - function getContainerCursorPosition(container, cursorX, cursorY) { | |
| 2909 | - var _container$getBoundin2 = container.getBoundingClientRect(), | |
| 2910 | - top = _container$getBoundin2.top, | |
| 2911 | - left = _container$getBoundin2.left, | |
| 2912 | - width = _container$getBoundin2.width, | |
| 2913 | - height = _container$getBoundin2.height; | |
| 2914 | - var x = (cursorX - left) / width; | |
| 2915 | - var y = (cursorY - top) / height; | |
| 2916 | - return { | |
| 2917 | - x: x, | |
| 2918 | - y: y | |
| 2919 | - }; | |
| 2920 | - } | |
| 2921 | - var useInitInteractivity = function useInitInteractivity(_ref) { | |
| 2922 | - var wrapperRef = _ref.wrapperRef, | |
| 2923 | - animationItem = _ref.animationItem, | |
| 2924 | - mode = _ref.mode, | |
| 2925 | - actions = _ref.actions; | |
| 2926 | - React.useEffect(function () { | |
| 2927 | - var wrapper = wrapperRef.current; | |
| 2928 | - if (!wrapper || !animationItem || !actions.length) { | |
| 2929 | - return; | |
| 2930 | - } | |
| 2931 | - animationItem.stop(); | |
| 2932 | - var scrollModeHandler = function scrollModeHandler() { | |
| 2933 | - var assignedSegment = null; | |
| 2934 | - var scrollHandler = function scrollHandler() { | |
| 2935 | - var currentPercent = getContainerVisibility(wrapper); | |
| 2936 | - // Find the first action that satisfies the current position conditions | |
| 2937 | - var action = actions.find(function (_ref2) { | |
| 2938 | - var visibility = _ref2.visibility; | |
| 2939 | - return visibility && currentPercent >= visibility[0] && currentPercent <= visibility[1]; | |
| 2940 | - }); | |
| 2941 | - // Skip if no matching action was found! | |
| 2942 | - if (!action) { | |
| 2943 | - return; | |
| 2944 | - } | |
| 2945 | - if (action.type === "seek" && action.visibility && action.frames.length === 2) { | |
| 2946 | - // Seek: Go to a frame based on player scroll position action | |
| 2947 | - var frameToGo = action.frames[0] + Math.ceil((currentPercent - action.visibility[0]) / (action.visibility[1] - action.visibility[0]) * action.frames[1]); | |
| 2948 | - //! goToAndStop must be relative to the start of the current segment | |
| 2949 | - animationItem.goToAndStop(frameToGo - animationItem.firstFrame - 1, true); | |
| 2950 | - } | |
| 2951 | - if (action.type === "loop") { | |
| 2952 | - // Loop: Loop a given frames | |
| 2953 | - if (assignedSegment === null) { | |
| 2954 | - // if not playing any segments currently. play those segments and save to state | |
| 2955 | - animationItem.playSegments(action.frames, true); | |
| 2956 | - assignedSegment = action.frames; | |
| 2957 | - } else { | |
| 2958 | - // if playing any segments currently. | |
| 2959 | - //check if segments in state are equal to the frames selected by action | |
| 2960 | - if (assignedSegment !== action.frames) { | |
| 2961 | - // if they are not equal. new segments are to be loaded | |
| 2962 | - animationItem.playSegments(action.frames, true); | |
| 2963 | - assignedSegment = action.frames; | |
| 2964 | - } else if (animationItem.isPaused) { | |
| 2965 | - // if they are equal the play method must be called only if lottie is paused | |
| 2966 | - animationItem.playSegments(action.frames, true); | |
| 2967 | - assignedSegment = action.frames; | |
| 2968 | - } | |
| 2969 | - } | |
| 2970 | - } | |
| 2971 | - if (action.type === "play" && animationItem.isPaused) { | |
| 2972 | - // Play: Reset segments and continue playing full animation from current position | |
| 2973 | - animationItem.resetSegments(true); | |
| 2974 | - animationItem.play(); | |
| 2975 | - } | |
| 2976 | - if (action.type === "stop") { | |
| 2977 | - // Stop: Stop playback | |
| 2978 | - animationItem.goToAndStop(action.frames[0] - animationItem.firstFrame - 1, true); | |
| 2979 | - } | |
| 2980 | - }; | |
| 2981 | - document.addEventListener("scroll", scrollHandler); | |
| 2982 | - return function () { | |
| 2983 | - document.removeEventListener("scroll", scrollHandler); | |
| 2984 | - }; | |
| 2985 | - }; | |
| 2986 | - var cursorModeHandler = function cursorModeHandler() { | |
| 2987 | - var handleCursor = function handleCursor(_x, _y) { | |
| 2988 | - var x = _x; | |
| 2989 | - var y = _y; | |
| 2990 | - // Resolve cursor position if cursor is inside container | |
| 2991 | - if (x !== -1 && y !== -1) { | |
| 2992 | - // Get container cursor position | |
| 2993 | - var pos = getContainerCursorPosition(wrapper, x, y); | |
| 2994 | - // Use the resolved position | |
| 2995 | - x = pos.x; | |
| 2996 | - y = pos.y; | |
| 2997 | - } | |
| 2998 | - // Find the first action that satisfies the current position conditions | |
| 2999 | - var action = actions.find(function (_ref3) { | |
| 3000 | - var position = _ref3.position; | |
| 3001 | - if (position && Array.isArray(position.x) && Array.isArray(position.y)) { | |
| 3002 | - return x >= position.x[0] && x <= position.x[1] && y >= position.y[0] && y <= position.y[1]; | |
| 3003 | - } | |
| 3004 | - if (position && !Number.isNaN(position.x) && !Number.isNaN(position.y)) { | |
| 3005 | - return x === position.x && y === position.y; | |
| 3006 | - } | |
| 3007 | - return false; | |
| 3008 | - }); | |
| 3009 | - // Skip if no matching action was found! | |
| 3010 | - if (!action) { | |
| 3011 | - return; | |
| 3012 | - } | |
| 3013 | - // Process action types: | |
| 3014 | - if (action.type === "seek" && action.position && Array.isArray(action.position.x) && Array.isArray(action.position.y) && action.frames.length === 2) { | |
| 3015 | - // Seek: Go to a frame based on player scroll position action | |
| 3016 | - var xPercent = (x - action.position.x[0]) / (action.position.x[1] - action.position.x[0]); | |
| 3017 | - var yPercent = (y - action.position.y[0]) / (action.position.y[1] - action.position.y[0]); | |
| 3018 | - animationItem.playSegments(action.frames, true); | |
| 3019 | - animationItem.goToAndStop(Math.ceil((xPercent + yPercent) / 2 * (action.frames[1] - action.frames[0])), true); | |
| 3020 | - } | |
| 3021 | - if (action.type === "loop") { | |
| 3022 | - animationItem.playSegments(action.frames, true); | |
| 3023 | - } | |
| 3024 | - if (action.type === "play") { | |
| 3025 | - // Play: Reset segments and continue playing full animation from current position | |
| 3026 | - if (animationItem.isPaused) { | |
| 3027 | - animationItem.resetSegments(false); | |
| 3028 | - } | |
| 3029 | - animationItem.playSegments(action.frames); | |
| 3030 | - } | |
| 3031 | - if (action.type === "stop") { | |
| 3032 | - animationItem.goToAndStop(action.frames[0], true); | |
| 3033 | - } | |
| 3034 | - }; | |
| 3035 | - var mouseMoveHandler = function mouseMoveHandler(ev) { | |
| 3036 | - handleCursor(ev.clientX, ev.clientY); | |
| 3037 | - }; | |
| 3038 | - var mouseOutHandler = function mouseOutHandler() { | |
| 3039 | - handleCursor(-1, -1); | |
| 3040 | - }; | |
| 3041 | - wrapper.addEventListener("mousemove", mouseMoveHandler); | |
| 3042 | - wrapper.addEventListener("mouseout", mouseOutHandler); | |
| 3043 | - return function () { | |
| 3044 | - wrapper.removeEventListener("mousemove", mouseMoveHandler); | |
| 3045 | - wrapper.removeEventListener("mouseout", mouseOutHandler); | |
| 3046 | - }; | |
| 3047 | - }; | |
| 3048 | - switch (mode) { | |
| 3049 | - case "scroll": | |
| 3050 | - return scrollModeHandler(); | |
| 3051 | - case "cursor": | |
| 3052 | - return cursorModeHandler(); | |
| 3053 | - } | |
| 3054 | - // eslint-disable-next-line react-hooks/exhaustive-deps | |
| 3055 | - }, [mode, animationItem]); | |
| 3056 | - }; | |
| 3057 | - var useLottieInteractivity = function useLottieInteractivity(_ref4) { | |
| 3058 | - var actions = _ref4.actions, | |
| 3059 | - mode = _ref4.mode, | |
| 3060 | - lottieObj = _ref4.lottieObj; | |
| 3061 | - var animationItem = lottieObj.animationItem, | |
| 3062 | - View = lottieObj.View, | |
| 3063 | - animationContainerRef = lottieObj.animationContainerRef; | |
| 3064 | - useInitInteractivity({ | |
| 3065 | - actions: actions, | |
| 3066 | - animationItem: animationItem, | |
| 3067 | - mode: mode, | |
| 3068 | - wrapperRef: animationContainerRef | |
| 3069 | - }); | |
| 3070 | - return View; | |
| 3071 | - }; | |
| 3072 | - | |
| 3073 | - var _excluded = ["style", "interactivity"]; | |
| 3074 | - var Lottie = function Lottie(props) { | |
| 3075 | - var _a, _b, _c; | |
| 3076 | - var style = props.style, | |
| 3077 | - interactivity = props.interactivity, | |
| 3078 | - lottieProps = _objectWithoutProperties(props, _excluded); | |
| 3079 | - /** | |
| 3080 | - * Initialize the 'useLottie' hook | |
| 3081 | - */ | |
| 3082 | - var _useLottie = useLottie(lottieProps, style), | |
| 3083 | - View = _useLottie.View, | |
| 3084 | - play = _useLottie.play, | |
| 3085 | - stop = _useLottie.stop, | |
| 3086 | - pause = _useLottie.pause, | |
| 3087 | - setSpeed = _useLottie.setSpeed, | |
| 3088 | - goToAndStop = _useLottie.goToAndStop, | |
| 3089 | - goToAndPlay = _useLottie.goToAndPlay, | |
| 3090 | - setDirection = _useLottie.setDirection, | |
| 3091 | - playSegments = _useLottie.playSegments, | |
| 3092 | - setSubframe = _useLottie.setSubframe, | |
| 3093 | - getDuration = _useLottie.getDuration, | |
| 3094 | - destroy = _useLottie.destroy, | |
| 3095 | - animationContainerRef = _useLottie.animationContainerRef, | |
| 3096 | - animationLoaded = _useLottie.animationLoaded, | |
| 3097 | - animationItem = _useLottie.animationItem; | |
| 3098 | - /** | |
| 3099 | - * Make the hook variables/methods available through the provided 'lottieRef' | |
| 3100 | - */ | |
| 3101 | - React.useEffect(function () { | |
| 3102 | - if (props.lottieRef) { | |
| 3103 | - props.lottieRef.current = { | |
| 3104 | - play: play, | |
| 3105 | - stop: stop, | |
| 3106 | - pause: pause, | |
| 3107 | - setSpeed: setSpeed, | |
| 3108 | - goToAndPlay: goToAndPlay, | |
| 3109 | - goToAndStop: goToAndStop, | |
| 3110 | - setDirection: setDirection, | |
| 3111 | - playSegments: playSegments, | |
| 3112 | - setSubframe: setSubframe, | |
| 3113 | - getDuration: getDuration, | |
| 3114 | - destroy: destroy, | |
| 3115 | - animationContainerRef: animationContainerRef, | |
| 3116 | - animationLoaded: animationLoaded, | |
| 3117 | - animationItem: animationItem | |
| 3118 | - }; | |
| 3119 | - } | |
| 3120 | - // eslint-disable-next-line react-hooks/exhaustive-deps | |
| 3121 | - }, [(_a = props.lottieRef) === null || _a === void 0 ? void 0 : _a.current]); | |
| 3122 | - return useLottieInteractivity({ | |
| 3123 | - lottieObj: { | |
| 3124 | - View: View, | |
| 3125 | - play: play, | |
| 3126 | - stop: stop, | |
| 3127 | - pause: pause, | |
| 3128 | - setSpeed: setSpeed, | |
| 3129 | - goToAndStop: goToAndStop, | |
| 3130 | - goToAndPlay: goToAndPlay, | |
| 3131 | - setDirection: setDirection, | |
| 3132 | - playSegments: playSegments, | |
| 3133 | - setSubframe: setSubframe, | |
| 3134 | - getDuration: getDuration, | |
| 3135 | - destroy: destroy, | |
| 3136 | - animationContainerRef: animationContainerRef, | |
| 3137 | - animationLoaded: animationLoaded, | |
| 3138 | - animationItem: animationItem | |
| 3139 | - }, | |
| 3140 | - actions: (_b = interactivity === null || interactivity === void 0 ? void 0 : interactivity.actions) !== null && _b !== void 0 ? _b : [], | |
| 3141 | - mode: (_c = interactivity === null || interactivity === void 0 ? void 0 : interactivity.mode) !== null && _c !== void 0 ? _c : "scroll" | |
| 3142 | - }); | |
| 3143 | - }; | |
| 3144 | - | |
| 3145 | - Object.defineProperty(exports, 'LottiePlayer', { | |
| 3146 | - enumerable: true, | |
| 3147 | - get: function () { return lottie__default["default"]; } | |
| 3148 | - }); | |
| 3149 | - exports["default"] = Lottie; | |
| 3150 | - exports.useLottie = useLottie; | |
| 3151 | - exports.useLottieInteractivity = useLottieInteractivity; | |
| 3152 | - | |
| 3153 | - Object.defineProperty(exports, '__esModule', { value: true }); | |
| 3154 | - | |
| 3155 | -})); | |
| 3156 | -//# sourceMappingURL=index.umd.js.map | |
| 3157 | - | |
| 3158 | - | |
| 3159 | -/***/ }), | |
| 3160 | - | |
| 3161 | -/***/ "../node_modules/lottie-web/build/player/lottie.js": | |
| 3162 | -/*!*********************************************************!*\ | |
| 3163 | - !*** ../node_modules/lottie-web/build/player/lottie.js ***! | |
| 3164 | - \*********************************************************/ | |
| 3165 | -/***/ (function(module, exports, __webpack_require__) { | |
| 3166 | - | |
| 3167 | -(typeof document !== "undefined") && (typeof navigator !== "undefined") && (function (global, factory) { | |
| 3168 | - true ? module.exports = factory() : | |
| 3169 | - 0; | |
| 3170 | -})(this, (function () { 'use strict'; | |
| 3171 | - | |
| 3172 | - var svgNS = 'http://www.w3.org/2000/svg'; | |
| 3173 | - var locationHref = ''; | |
| 3174 | - var _useWebWorker = false; | |
| 3175 | - var initialDefaultFrame = -999999; | |
| 3176 | - var setWebWorker = function setWebWorker(flag) { | |
| 3177 | - _useWebWorker = !!flag; | |
| 3178 | - }; | |
| 3179 | - var getWebWorker = function getWebWorker() { | |
| 3180 | - return _useWebWorker; | |
| 3181 | - }; | |
| 3182 | - var setLocationHref = function setLocationHref(value) { | |
| 3183 | - locationHref = value; | |
| 3184 | - }; | |
| 3185 | - var getLocationHref = function getLocationHref() { | |
| 3186 | - return locationHref; | |
| 3187 | - }; | |
| 3188 | - | |
| 3189 | - function createTag(type) { | |
| 3190 | - // return {appendChild:function(){},setAttribute:function(){},style:{}} | |
| 3191 | - return document.createElement(type); | |
| 3192 | - } | |
| 3193 | - | |
| 3194 | - function extendPrototype(sources, destination) { | |
| 3195 | - var i; | |
| 3196 | - var len = sources.length; | |
| 3197 | - var sourcePrototype; | |
| 3198 | - for (i = 0; i < len; i += 1) { | |
| 3199 | - sourcePrototype = sources[i].prototype; | |
| 3200 | - for (var attr in sourcePrototype) { | |
| 3201 | - if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr]; | |
| 3202 | - } | |
| 3203 | - } | |
| 3204 | - } | |
| 3205 | - function getDescriptor(object, prop) { | |
| 3206 | - return Object.getOwnPropertyDescriptor(object, prop); | |
| 3207 | - } | |
| 3208 | - function createProxyFunction(prototype) { | |
| 3209 | - function ProxyFunction() {} | |
| 3210 | - ProxyFunction.prototype = prototype; | |
| 3211 | - return ProxyFunction; | |
| 3212 | - } | |
| 3213 | - | |
| 3214 | - // import Howl from '../../3rd_party/howler'; | |
| 3215 | - | |
| 3216 | - var audioControllerFactory = function () { | |
| 3217 | - function AudioController(audioFactory) { | |
| 3218 | - this.audios = []; | |
| 3219 | - this.audioFactory = audioFactory; | |
| 3220 | - this._volume = 1; | |
| 3221 | - this._isMuted = false; | |
| 3222 | - } | |
| 3223 | - AudioController.prototype = { | |
| 3224 | - addAudio: function addAudio(audio) { | |
| 3225 | - this.audios.push(audio); | |
| 3226 | - }, | |
| 3227 | - pause: function pause() { | |
| 3228 | - var i; | |
| 3229 | - var len = this.audios.length; | |
| 3230 | - for (i = 0; i < len; i += 1) { | |
| 3231 | - this.audios[i].pause(); | |
| 3232 | - } | |
| 3233 | - }, | |
| 3234 | - resume: function resume() { | |
| 3235 | - var i; | |
| 3236 | - var len = this.audios.length; | |
| 3237 | - for (i = 0; i < len; i += 1) { | |
| 3238 | - this.audios[i].resume(); | |
| 3239 | - } | |
| 3240 | - }, | |
| 3241 | - setRate: function setRate(rateValue) { | |
| 3242 | - var i; | |
| 3243 | - var len = this.audios.length; | |
| 3244 | - for (i = 0; i < len; i += 1) { | |
| 3245 | - this.audios[i].setRate(rateValue); | |
| 3246 | - } | |
| 3247 | - }, | |
| 3248 | - createAudio: function createAudio(assetPath) { | |
| 3249 | - if (this.audioFactory) { | |
| 3250 | - return this.audioFactory(assetPath); | |
| 3251 | - } | |
| 3252 | - if (window.Howl) { | |
| 3253 | - return new window.Howl({ | |
| 3254 | - src: [assetPath] | |
| 3255 | - }); | |
| 3256 | - } | |
| 3257 | - return { | |
| 3258 | - isPlaying: false, | |
| 3259 | - play: function play() { | |
| 3260 | - this.isPlaying = true; | |
| 3261 | - }, | |
| 3262 | - seek: function seek() { | |
| 3263 | - this.isPlaying = false; | |
| 3264 | - }, | |
| 3265 | - playing: function playing() {}, | |
| 3266 | - rate: function rate() {}, | |
| 3267 | - setVolume: function setVolume() {} | |
| 3268 | - }; | |
| 3269 | - }, | |
| 3270 | - setAudioFactory: function setAudioFactory(audioFactory) { | |
| 3271 | - this.audioFactory = audioFactory; | |
| 3272 | - }, | |
| 3273 | - setVolume: function setVolume(value) { | |
| 3274 | - this._volume = value; | |
| 3275 | - this._updateVolume(); | |
| 3276 | - }, | |
| 3277 | - mute: function mute() { | |
| 3278 | - this._isMuted = true; | |
| 3279 | - this._updateVolume(); | |
| 3280 | - }, | |
| 3281 | - unmute: function unmute() { | |
| 3282 | - this._isMuted = false; | |
| 3283 | - this._updateVolume(); | |
| 3284 | - }, | |
| 3285 | - getVolume: function getVolume() { | |
| 3286 | - return this._volume; | |
| 3287 | - }, | |
| 3288 | - _updateVolume: function _updateVolume() { | |
| 3289 | - var i; | |
| 3290 | - var len = this.audios.length; | |
| 3291 | - for (i = 0; i < len; i += 1) { | |
| 3292 | - this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1)); | |
| 3293 | - } | |
| 3294 | - } | |
| 3295 | - }; | |
| 3296 | - return function () { | |
| 3297 | - return new AudioController(); | |
| 3298 | - }; | |
| 3299 | - }(); | |
| 3300 | - | |
| 3301 | - var createTypedArray = function () { | |
| 3302 | - function createRegularArray(type, len) { | |
| 3303 | - var i = 0; | |
| 3304 | - var arr = []; | |
| 3305 | - var value; | |
| 3306 | - switch (type) { | |
| 3307 | - case 'int16': | |
| 3308 | - case 'uint8c': | |
| 3309 | - value = 1; | |
| 3310 | - break; | |
| 3311 | - default: | |
| 3312 | - value = 1.1; | |
| 3313 | - break; | |
| 3314 | - } | |
| 3315 | - for (i = 0; i < len; i += 1) { | |
| 3316 | - arr.push(value); | |
| 3317 | - } | |
| 3318 | - return arr; | |
| 3319 | - } | |
| 3320 | - function createTypedArrayFactory(type, len) { | |
| 3321 | - if (type === 'float32') { | |
| 3322 | - return new Float32Array(len); | |
| 3323 | - } | |
| 3324 | - if (type === 'int16') { | |
| 3325 | - return new Int16Array(len); | |
| 3326 | - } | |
| 3327 | - if (type === 'uint8c') { | |
| 3328 | - return new Uint8ClampedArray(len); | |
| 3329 | - } | |
| 3330 | - return createRegularArray(type, len); | |
| 3331 | - } | |
| 3332 | - if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') { | |
| 3333 | - return createTypedArrayFactory; | |
| 3334 | - } | |
| 3335 | - return createRegularArray; | |
| 3336 | - }(); | |
| 3337 | - function createSizedArray(len) { | |
| 3338 | - return Array.apply(null, { | |
| 3339 | - length: len | |
| 3340 | - }); | |
| 3341 | - } | |
| 3342 | - | |
| 3343 | - function _typeof$6(o) { "@babel/helpers - typeof"; return _typeof$6 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$6(o); } | |
| 3344 | - var subframeEnabled = true; | |
| 3345 | - var expressionsPlugin = null; | |
| 3346 | - var expressionsInterfaces = null; | |
| 3347 | - var idPrefix$1 = ''; | |
| 3348 | - var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); | |
| 3349 | - var _shouldRoundValues = false; | |
| 3350 | - var bmPow = Math.pow; | |
| 3351 | - var bmSqrt = Math.sqrt; | |
| 3352 | - var bmFloor = Math.floor; | |
| 3353 | - var bmMax = Math.max; | |
| 3354 | - var bmMin = Math.min; | |
| 3355 | - var BMMath = {}; | |
| 3356 | - (function () { | |
| 3357 | - var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2']; | |
| 3358 | - var i; | |
| 3359 | - var len = propertyNames.length; | |
| 3360 | - for (i = 0; i < len; i += 1) { | |
| 3361 | - BMMath[propertyNames[i]] = Math[propertyNames[i]]; | |
| 3362 | - } | |
| 3363 | - })(); | |
| 3364 | - function ProjectInterface$1() { | |
| 3365 | - return {}; | |
| 3366 | - } | |
| 3367 | - BMMath.random = Math.random; | |
| 3368 | - BMMath.abs = function (val) { | |
| 3369 | - var tOfVal = _typeof$6(val); | |
| 3370 | - if (tOfVal === 'object' && val.length) { | |
| 3371 | - var absArr = createSizedArray(val.length); | |
| 3372 | - var i; | |
| 3373 | - var len = val.length; | |
| 3374 | - for (i = 0; i < len; i += 1) { | |
| 3375 | - absArr[i] = Math.abs(val[i]); | |
| 3376 | - } | |
| 3377 | - return absArr; | |
| 3378 | - } | |
| 3379 | - return Math.abs(val); | |
| 3380 | - }; | |
| 3381 | - var defaultCurveSegments = 150; | |
| 3382 | - var degToRads = Math.PI / 180; | |
| 3383 | - var roundCorner = 0.5519; | |
| 3384 | - function roundValues(flag) { | |
| 3385 | - _shouldRoundValues = !!flag; | |
| 3386 | - } | |
| 3387 | - function bmRnd(value) { | |
| 3388 | - if (_shouldRoundValues) { | |
| 3389 | - return Math.round(value); | |
| 3390 | - } | |
| 3391 | - return value; | |
| 3392 | - } | |
| 3393 | - function styleDiv(element) { | |
| 3394 | - element.style.position = 'absolute'; | |
| 3395 | - element.style.top = 0; | |
| 3396 | - element.style.left = 0; | |
| 3397 | - element.style.display = 'block'; | |
| 3398 | - element.style.transformOrigin = '0 0'; | |
| 3399 | - element.style.webkitTransformOrigin = '0 0'; | |
| 3400 | - element.style.backfaceVisibility = 'visible'; | |
| 3401 | - element.style.webkitBackfaceVisibility = 'visible'; | |
| 3402 | - element.style.transformStyle = 'preserve-3d'; | |
| 3403 | - element.style.webkitTransformStyle = 'preserve-3d'; | |
| 3404 | - element.style.mozTransformStyle = 'preserve-3d'; | |
| 3405 | - } | |
| 3406 | - function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) { | |
| 3407 | - this.type = type; | |
| 3408 | - this.currentTime = currentTime; | |
| 3409 | - this.totalTime = totalTime; | |
| 3410 | - this.direction = frameMultiplier < 0 ? -1 : 1; | |
| 3411 | - } | |
| 3412 | - function BMCompleteEvent(type, frameMultiplier) { | |
| 3413 | - this.type = type; | |
| 3414 | - this.direction = frameMultiplier < 0 ? -1 : 1; | |
| 3415 | - } | |
| 3416 | - function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) { | |
| 3417 | - this.type = type; | |
| 3418 | - this.currentLoop = currentLoop; | |
| 3419 | - this.totalLoops = totalLoops; | |
| 3420 | - this.direction = frameMultiplier < 0 ? -1 : 1; | |
| 3421 | - } | |
| 3422 | - function BMSegmentStartEvent(type, firstFrame, totalFrames) { | |
| 3423 | - this.type = type; | |
| 3424 | - this.firstFrame = firstFrame; | |
| 3425 | - this.totalFrames = totalFrames; | |
| 3426 | - } | |
| 3427 | - function BMDestroyEvent(type, target) { | |
| 3428 | - this.type = type; | |
| 3429 | - this.target = target; | |
| 3430 | - } | |
| 3431 | - function BMRenderFrameErrorEvent(nativeError, currentTime) { | |
| 3432 | - this.type = 'renderFrameError'; | |
| 3433 | - this.nativeError = nativeError; | |
| 3434 | - this.currentTime = currentTime; | |
| 3435 | - } | |
| 3436 | - function BMConfigErrorEvent(nativeError) { | |
| 3437 | - this.type = 'configError'; | |
| 3438 | - this.nativeError = nativeError; | |
| 3439 | - } | |
| 3440 | - function BMAnimationConfigErrorEvent(type, nativeError) { | |
| 3441 | - this.type = type; | |
| 3442 | - this.nativeError = nativeError; | |
| 3443 | - } | |
| 3444 | - var createElementID = function () { | |
| 3445 | - var _count = 0; | |
| 3446 | - return function createID() { | |
| 3447 | - _count += 1; | |
| 3448 | - return idPrefix$1 + '__lottie_element_' + _count; | |
| 3449 | - }; | |
| 3450 | - }(); | |
| 3451 | - function HSVtoRGB(h, s, v) { | |
| 3452 | - var r; | |
| 3453 | - var g; | |
| 3454 | - var b; | |
| 3455 | - var i; | |
| 3456 | - var f; | |
| 3457 | - var p; | |
| 3458 | - var q; | |
| 3459 | - var t; | |
| 3460 | - i = Math.floor(h * 6); | |
| 3461 | - f = h * 6 - i; | |
| 3462 | - p = v * (1 - s); | |
| 3463 | - q = v * (1 - f * s); | |
| 3464 | - t = v * (1 - (1 - f) * s); | |
| 3465 | - switch (i % 6) { | |
| 3466 | - case 0: | |
| 3467 | - r = v; | |
| 3468 | - g = t; | |
| 3469 | - b = p; | |
| 3470 | - break; | |
| 3471 | - case 1: | |
| 3472 | - r = q; | |
| 3473 | - g = v; | |
| 3474 | - b = p; | |
| 3475 | - break; | |
| 3476 | - case 2: | |
| 3477 | - r = p; | |
| 3478 | - g = v; | |
| 3479 | - b = t; | |
| 3480 | - break; | |
| 3481 | - case 3: | |
| 3482 | - r = p; | |
| 3483 | - g = q; | |
| 3484 | - b = v; | |
| 3485 | - break; | |
| 3486 | - case 4: | |
| 3487 | - r = t; | |
| 3488 | - g = p; | |
| 3489 | - b = v; | |
| 3490 | - break; | |
| 3491 | - case 5: | |
| 3492 | - r = v; | |
| 3493 | - g = p; | |
| 3494 | - b = q; | |
| 3495 | - break; | |
| 3496 | - default: | |
| 3497 | - break; | |
| 3498 | - } | |
| 3499 | - return [r, g, b]; | |
| 3500 | - } | |
| 3501 | - function RGBtoHSV(r, g, b) { | |
| 3502 | - var max = Math.max(r, g, b); | |
| 3503 | - var min = Math.min(r, g, b); | |
| 3504 | - var d = max - min; | |
| 3505 | - var h; | |
| 3506 | - var s = max === 0 ? 0 : d / max; | |
| 3507 | - var v = max / 255; | |
| 3508 | - switch (max) { | |
| 3509 | - case min: | |
| 3510 | - h = 0; | |
| 3511 | - break; | |
| 3512 | - case r: | |
| 3513 | - h = g - b + d * (g < b ? 6 : 0); | |
| 3514 | - h /= 6 * d; | |
| 3515 | - break; | |
| 3516 | - case g: | |
| 3517 | - h = b - r + d * 2; | |
| 3518 | - h /= 6 * d; | |
| 3519 | - break; | |
| 3520 | - case b: | |
| 3521 | - h = r - g + d * 4; | |
| 3522 | - h /= 6 * d; | |
| 3523 | - break; | |
| 3524 | - default: | |
| 3525 | - break; | |
| 3526 | - } | |
| 3527 | - return [h, s, v]; | |
| 3528 | - } | |
| 3529 | - function addSaturationToRGB(color, offset) { | |
| 3530 | - var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); | |
| 3531 | - hsv[1] += offset; | |
| 3532 | - if (hsv[1] > 1) { | |
| 3533 | - hsv[1] = 1; | |
| 3534 | - } else if (hsv[1] <= 0) { | |
| 3535 | - hsv[1] = 0; | |
| 3536 | - } | |
| 3537 | - return HSVtoRGB(hsv[0], hsv[1], hsv[2]); | |
| 3538 | - } | |
| 3539 | - function addBrightnessToRGB(color, offset) { | |
| 3540 | - var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); | |
| 3541 | - hsv[2] += offset; | |
| 3542 | - if (hsv[2] > 1) { | |
| 3543 | - hsv[2] = 1; | |
| 3544 | - } else if (hsv[2] < 0) { | |
| 3545 | - hsv[2] = 0; | |
| 3546 | - } | |
| 3547 | - return HSVtoRGB(hsv[0], hsv[1], hsv[2]); | |
| 3548 | - } | |
| 3549 | - function addHueToRGB(color, offset) { | |
| 3550 | - var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); | |
| 3551 | - hsv[0] += offset / 360; | |
| 3552 | - if (hsv[0] > 1) { | |
| 3553 | - hsv[0] -= 1; | |
| 3554 | - } else if (hsv[0] < 0) { | |
| 3555 | - hsv[0] += 1; | |
| 3556 | - } | |
| 3557 | - return HSVtoRGB(hsv[0], hsv[1], hsv[2]); | |
| 3558 | - } | |
| 3559 | - var rgbToHex = function () { | |
| 3560 | - var colorMap = []; | |
| 3561 | - var i; | |
| 3562 | - var hex; | |
| 3563 | - for (i = 0; i < 256; i += 1) { | |
| 3564 | - hex = i.toString(16); | |
| 3565 | - colorMap[i] = hex.length === 1 ? '0' + hex : hex; | |
| 3566 | - } | |
| 3567 | - return function (r, g, b) { | |
| 3568 | - if (r < 0) { | |
| 3569 | - r = 0; | |
| 3570 | - } | |
| 3571 | - if (g < 0) { | |
| 3572 | - g = 0; | |
| 3573 | - } | |
| 3574 | - if (b < 0) { | |
| 3575 | - b = 0; | |
| 3576 | - } | |
| 3577 | - return '#' + colorMap[r] + colorMap[g] + colorMap[b]; | |
| 3578 | - }; | |
| 3579 | - }(); | |
| 3580 | - var setSubframeEnabled = function setSubframeEnabled(flag) { | |
| 3581 | - subframeEnabled = !!flag; | |
| 3582 | - }; | |
| 3583 | - var getSubframeEnabled = function getSubframeEnabled() { | |
| 3584 | - return subframeEnabled; | |
| 3585 | - }; | |
| 3586 | - var setExpressionsPlugin = function setExpressionsPlugin(value) { | |
| 3587 | - expressionsPlugin = value; | |
| 3588 | - }; | |
| 3589 | - var getExpressionsPlugin = function getExpressionsPlugin() { | |
| 3590 | - return expressionsPlugin; | |
| 3591 | - }; | |
| 3592 | - var setExpressionInterfaces = function setExpressionInterfaces(value) { | |
| 3593 | - expressionsInterfaces = value; | |
| 3594 | - }; | |
| 3595 | - var getExpressionInterfaces = function getExpressionInterfaces() { | |
| 3596 | - return expressionsInterfaces; | |
| 3597 | - }; | |
| 3598 | - var setDefaultCurveSegments = function setDefaultCurveSegments(value) { | |
| 3599 | - defaultCurveSegments = value; | |
| 3600 | - }; | |
| 3601 | - var getDefaultCurveSegments = function getDefaultCurveSegments() { | |
| 3602 | - return defaultCurveSegments; | |
| 3603 | - }; | |
| 3604 | - var setIdPrefix = function setIdPrefix(value) { | |
| 3605 | - idPrefix$1 = value; | |
| 3606 | - }; | |
| 3607 | - var getIdPrefix = function getIdPrefix() { | |
| 3608 | - return idPrefix$1; | |
| 3609 | - }; | |
| 3610 | - | |
| 3611 | - function createNS(type) { | |
| 3612 | - // return {appendChild:function(){},setAttribute:function(){},style:{}} | |
| 3613 | - return document.createElementNS(svgNS, type); | |
| 3614 | - } | |
| 3615 | - | |
| 3616 | - function _typeof$5(o) { "@babel/helpers - typeof"; return _typeof$5 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$5(o); } | |
| 3617 | - var dataManager = function () { | |
| 3618 | - var _counterId = 1; | |
| 3619 | - var processes = []; | |
| 3620 | - var workerFn; | |
| 3621 | - var workerInstance; | |
| 3622 | - var workerProxy = { | |
| 3623 | - onmessage: function onmessage() {}, | |
| 3624 | - postMessage: function postMessage(path) { | |
| 3625 | - workerFn({ | |
| 3626 | - data: path | |
| 3627 | - }); | |
| 3628 | - } | |
| 3629 | - }; | |
| 3630 | - var _workerSelf = { | |
| 3631 | - postMessage: function postMessage(data) { | |
| 3632 | - workerProxy.onmessage({ | |
| 3633 | - data: data | |
| 3634 | - }); | |
| 3635 | - } | |
| 3636 | - }; | |
| 3637 | - function createWorker(fn) { | |
| 3638 | - if (window.Worker && window.Blob && getWebWorker()) { | |
| 3639 | - var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], { | |
| 3640 | - type: 'text/javascript' | |
| 3641 | - }); | |
| 3642 | - // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' }); | |
| 3643 | - var url = URL.createObjectURL(blob); | |
| 3644 | - return new Worker(url); | |
| 3645 | - } | |
| 3646 | - workerFn = fn; | |
| 3647 | - return workerProxy; | |
| 3648 | - } | |
| 3649 | - function setupWorker() { | |
| 3650 | - if (!workerInstance) { | |
| 3651 | - workerInstance = createWorker(function workerStart(e) { | |
| 3652 | - function dataFunctionManager() { | |
| 3653 | - function completeLayers(layers, comps) { | |
| 3654 | - var layerData; | |
| 3655 | - var i; | |
| 3656 | - var len = layers.length; | |
| 3657 | - var j; | |
| 3658 | - var jLen; | |
| 3659 | - var k; | |
| 3660 | - var kLen; | |
| 3661 | - for (i = 0; i < len; i += 1) { | |
| 3662 | - layerData = layers[i]; | |
| 3663 | - if ('ks' in layerData && !layerData.completed) { | |
| 3664 | - layerData.completed = true; | |
| 3665 | - if (layerData.hasMask) { | |
| 3666 | - var maskProps = layerData.masksProperties; | |
| 3667 | - jLen = maskProps.length; | |
| 3668 | - for (j = 0; j < jLen; j += 1) { | |
| 3669 | - if (maskProps[j].pt.k.i) { | |
| 3670 | - convertPathsToAbsoluteValues(maskProps[j].pt.k); | |
| 3671 | - } else { | |
| 3672 | - kLen = maskProps[j].pt.k.length; | |
| 3673 | - for (k = 0; k < kLen; k += 1) { | |
| 3674 | - if (maskProps[j].pt.k[k].s) { | |
| 3675 | - convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]); | |
| 3676 | - } | |
| 3677 | - if (maskProps[j].pt.k[k].e) { | |
| 3678 | - convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]); | |
| 3679 | - } | |
| 3680 | - } | |
| 3681 | - } | |
| 3682 | - } | |
| 3683 | - } | |
| 3684 | - if (layerData.ty === 0) { | |
| 3685 | - layerData.layers = findCompLayers(layerData.refId, comps); | |
| 3686 | - completeLayers(layerData.layers, comps); | |
| 3687 | - } else if (layerData.ty === 4) { | |
| 3688 | - completeShapes(layerData.shapes); | |
| 3689 | - } else if (layerData.ty === 5) { | |
| 3690 | - completeText(layerData); | |
| 3691 | - } | |
| 3692 | - } | |
| 3693 | - } | |
| 3694 | - } | |
| 3695 | - function completeChars(chars, assets) { | |
| 3696 | - if (chars) { | |
| 3697 | - var i = 0; | |
| 3698 | - var len = chars.length; | |
| 3699 | - for (i = 0; i < len; i += 1) { | |
| 3700 | - if (chars[i].t === 1) { | |
| 3701 | - // var compData = findComp(chars[i].data.refId, assets); | |
| 3702 | - chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); | |
| 3703 | - // chars[i].data.ip = 0; | |
| 3704 | - // chars[i].data.op = 99999; | |
| 3705 | - // chars[i].data.st = 0; | |
| 3706 | - // chars[i].data.sr = 1; | |
| 3707 | - // chars[i].w = compData.w; | |
| 3708 | - // chars[i].data.ks = { | |
| 3709 | - // a: { k: [0, 0, 0], a: 0 }, | |
| 3710 | - // p: { k: [0, -compData.h, 0], a: 0 }, | |
| 3711 | - // r: { k: 0, a: 0 }, | |
| 3712 | - // s: { k: [100, 100], a: 0 }, | |
| 3713 | - // o: { k: 100, a: 0 }, | |
| 3714 | - // }; | |
| 3715 | - completeLayers(chars[i].data.layers, assets); | |
| 3716 | - } | |
| 3717 | - } | |
| 3718 | - } | |
| 3719 | - } | |
| 3720 | - function findComp(id, comps) { | |
| 3721 | - var i = 0; | |
| 3722 | - var len = comps.length; | |
| 3723 | - while (i < len) { | |
| 3724 | - if (comps[i].id === id) { | |
| 3725 | - return comps[i]; | |
| 3726 | - } | |
| 3727 | - i += 1; | |
| 3728 | - } | |
| 3729 | - return null; | |
| 3730 | - } | |
| 3731 | - function findCompLayers(id, comps) { | |
| 3732 | - var comp = findComp(id, comps); | |
| 3733 | - if (comp) { | |
| 3734 | - if (!comp.layers.__used) { | |
| 3735 | - comp.layers.__used = true; | |
| 3736 | - return comp.layers; | |
| 3737 | - } | |
| 3738 | - return JSON.parse(JSON.stringify(comp.layers)); | |
| 3739 | - } | |
| 3740 | - return null; | |
| 3741 | - } | |
| 3742 | - function completeShapes(arr) { | |
| 3743 | - var i; | |
| 3744 | - var len = arr.length; | |
| 3745 | - var j; | |
| 3746 | - var jLen; | |
| 3747 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 3748 | - if (arr[i].ty === 'sh') { | |
| 3749 | - if (arr[i].ks.k.i) { | |
| 3750 | - convertPathsToAbsoluteValues(arr[i].ks.k); | |
| 3751 | - } else { | |
| 3752 | - jLen = arr[i].ks.k.length; | |
| 3753 | - for (j = 0; j < jLen; j += 1) { | |
| 3754 | - if (arr[i].ks.k[j].s) { | |
| 3755 | - convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]); | |
| 3756 | - } | |
| 3757 | - if (arr[i].ks.k[j].e) { | |
| 3758 | - convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]); | |
| 3759 | - } | |
| 3760 | - } | |
| 3761 | - } | |
| 3762 | - } else if (arr[i].ty === 'gr') { | |
| 3763 | - completeShapes(arr[i].it); | |
| 3764 | - } | |
| 3765 | - } | |
| 3766 | - } | |
| 3767 | - function convertPathsToAbsoluteValues(path) { | |
| 3768 | - var i; | |
| 3769 | - var len = path.i.length; | |
| 3770 | - for (i = 0; i < len; i += 1) { | |
| 3771 | - path.i[i][0] += path.v[i][0]; | |
| 3772 | - path.i[i][1] += path.v[i][1]; | |
| 3773 | - path.o[i][0] += path.v[i][0]; | |
| 3774 | - path.o[i][1] += path.v[i][1]; | |
| 3775 | - } | |
| 3776 | - } | |
| 3777 | - function checkVersion(minimum, animVersionString) { | |
| 3778 | - var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100]; | |
| 3779 | - if (minimum[0] > animVersion[0]) { | |
| 3780 | - return true; | |
| 3781 | - } | |
| 3782 | - if (animVersion[0] > minimum[0]) { | |
| 3783 | - return false; | |
| 3784 | - } | |
| 3785 | - if (minimum[1] > animVersion[1]) { | |
| 3786 | - return true; | |
| 3787 | - } | |
| 3788 | - if (animVersion[1] > minimum[1]) { | |
| 3789 | - return false; | |
| 3790 | - } | |
| 3791 | - if (minimum[2] > animVersion[2]) { | |
| 3792 | - return true; | |
| 3793 | - } | |
| 3794 | - if (animVersion[2] > minimum[2]) { | |
| 3795 | - return false; | |
| 3796 | - } | |
| 3797 | - return null; | |
| 3798 | - } | |
| 3799 | - var checkText = function () { | |
| 3800 | - var minimumVersion = [4, 4, 14]; | |
| 3801 | - function updateTextLayer(textLayer) { | |
| 3802 | - var documentData = textLayer.t.d; | |
| 3803 | - textLayer.t.d = { | |
| 3804 | - k: [{ | |
| 3805 | - s: documentData, | |
| 3806 | - t: 0 | |
| 3807 | - }] | |
| 3808 | - }; | |
| 3809 | - } | |
| 3810 | - function iterateLayers(layers) { | |
| 3811 | - var i; | |
| 3812 | - var len = layers.length; | |
| 3813 | - for (i = 0; i < len; i += 1) { | |
| 3814 | - if (layers[i].ty === 5) { | |
| 3815 | - updateTextLayer(layers[i]); | |
| 3816 | - } | |
| 3817 | - } | |
| 3818 | - } | |
| 3819 | - return function (animationData) { | |
| 3820 | - if (checkVersion(minimumVersion, animationData.v)) { | |
| 3821 | - iterateLayers(animationData.layers); | |
| 3822 | - if (animationData.assets) { | |
| 3823 | - var i; | |
| 3824 | - var len = animationData.assets.length; | |
| 3825 | - for (i = 0; i < len; i += 1) { | |
| 3826 | - if (animationData.assets[i].layers) { | |
| 3827 | - iterateLayers(animationData.assets[i].layers); | |
| 3828 | - } | |
| 3829 | - } | |
| 3830 | - } | |
| 3831 | - } | |
| 3832 | - }; | |
| 3833 | - }(); | |
| 3834 | - var checkChars = function () { | |
| 3835 | - var minimumVersion = [4, 7, 99]; | |
| 3836 | - return function (animationData) { | |
| 3837 | - if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) { | |
| 3838 | - var i; | |
| 3839 | - var len = animationData.chars.length; | |
| 3840 | - for (i = 0; i < len; i += 1) { | |
| 3841 | - var charData = animationData.chars[i]; | |
| 3842 | - if (charData.data && charData.data.shapes) { | |
| 3843 | - completeShapes(charData.data.shapes); | |
| 3844 | - charData.data.ip = 0; | |
| 3845 | - charData.data.op = 99999; | |
| 3846 | - charData.data.st = 0; | |
| 3847 | - charData.data.sr = 1; | |
| 3848 | - charData.data.ks = { | |
| 3849 | - p: { | |
| 3850 | - k: [0, 0], | |
| 3851 | - a: 0 | |
| 3852 | - }, | |
| 3853 | - s: { | |
| 3854 | - k: [100, 100], | |
| 3855 | - a: 0 | |
| 3856 | - }, | |
| 3857 | - a: { | |
| 3858 | - k: [0, 0], | |
| 3859 | - a: 0 | |
| 3860 | - }, | |
| 3861 | - r: { | |
| 3862 | - k: 0, | |
| 3863 | - a: 0 | |
| 3864 | - }, | |
| 3865 | - o: { | |
| 3866 | - k: 100, | |
| 3867 | - a: 0 | |
| 3868 | - } | |
| 3869 | - }; | |
| 3870 | - if (!animationData.chars[i].t) { | |
| 3871 | - charData.data.shapes.push({ | |
| 3872 | - ty: 'no' | |
| 3873 | - }); | |
| 3874 | - charData.data.shapes[0].it.push({ | |
| 3875 | - p: { | |
| 3876 | - k: [0, 0], | |
| 3877 | - a: 0 | |
| 3878 | - }, | |
| 3879 | - s: { | |
| 3880 | - k: [100, 100], | |
| 3881 | - a: 0 | |
| 3882 | - }, | |
| 3883 | - a: { | |
| 3884 | - k: [0, 0], | |
| 3885 | - a: 0 | |
| 3886 | - }, | |
| 3887 | - r: { | |
| 3888 | - k: 0, | |
| 3889 | - a: 0 | |
| 3890 | - }, | |
| 3891 | - o: { | |
| 3892 | - k: 100, | |
| 3893 | - a: 0 | |
| 3894 | - }, | |
| 3895 | - sk: { | |
| 3896 | - k: 0, | |
| 3897 | - a: 0 | |
| 3898 | - }, | |
| 3899 | - sa: { | |
| 3900 | - k: 0, | |
| 3901 | - a: 0 | |
| 3902 | - }, | |
| 3903 | - ty: 'tr' | |
| 3904 | - }); | |
| 3905 | - } | |
| 3906 | - } | |
| 3907 | - } | |
| 3908 | - } | |
| 3909 | - }; | |
| 3910 | - }(); | |
| 3911 | - var checkPathProperties = function () { | |
| 3912 | - var minimumVersion = [5, 7, 15]; | |
| 3913 | - function updateTextLayer(textLayer) { | |
| 3914 | - var pathData = textLayer.t.p; | |
| 3915 | - if (typeof pathData.a === 'number') { | |
| 3916 | - pathData.a = { | |
| 3917 | - a: 0, | |
| 3918 | - k: pathData.a | |
| 3919 | - }; | |
| 3920 | - } | |
| 3921 | - if (typeof pathData.p === 'number') { | |
| 3922 | - pathData.p = { | |
| 3923 | - a: 0, | |
| 3924 | - k: pathData.p | |
| 3925 | - }; | |
| 3926 | - } | |
| 3927 | - if (typeof pathData.r === 'number') { | |
| 3928 | - pathData.r = { | |
| 3929 | - a: 0, | |
| 3930 | - k: pathData.r | |
| 3931 | - }; | |
| 3932 | - } | |
| 3933 | - } | |
| 3934 | - function iterateLayers(layers) { | |
| 3935 | - var i; | |
| 3936 | - var len = layers.length; | |
| 3937 | - for (i = 0; i < len; i += 1) { | |
| 3938 | - if (layers[i].ty === 5) { | |
| 3939 | - updateTextLayer(layers[i]); | |
| 3940 | - } | |
| 3941 | - } | |
| 3942 | - } | |
| 3943 | - return function (animationData) { | |
| 3944 | - if (checkVersion(minimumVersion, animationData.v)) { | |
| 3945 | - iterateLayers(animationData.layers); | |
| 3946 | - if (animationData.assets) { | |
| 3947 | - var i; | |
| 3948 | - var len = animationData.assets.length; | |
| 3949 | - for (i = 0; i < len; i += 1) { | |
| 3950 | - if (animationData.assets[i].layers) { | |
| 3951 | - iterateLayers(animationData.assets[i].layers); | |
| 3952 | - } | |
| 3953 | - } | |
| 3954 | - } | |
| 3955 | - } | |
| 3956 | - }; | |
| 3957 | - }(); | |
| 3958 | - var checkColors = function () { | |
| 3959 | - var minimumVersion = [4, 1, 9]; | |
| 3960 | - function iterateShapes(shapes) { | |
| 3961 | - var i; | |
| 3962 | - var len = shapes.length; | |
| 3963 | - var j; | |
| 3964 | - var jLen; | |
| 3965 | - for (i = 0; i < len; i += 1) { | |
| 3966 | - if (shapes[i].ty === 'gr') { | |
| 3967 | - iterateShapes(shapes[i].it); | |
| 3968 | - } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') { | |
| 3969 | - if (shapes[i].c.k && shapes[i].c.k[0].i) { | |
| 3970 | - jLen = shapes[i].c.k.length; | |
| 3971 | - for (j = 0; j < jLen; j += 1) { | |
| 3972 | - if (shapes[i].c.k[j].s) { | |
| 3973 | - shapes[i].c.k[j].s[0] /= 255; | |
| 3974 | - shapes[i].c.k[j].s[1] /= 255; | |
| 3975 | - shapes[i].c.k[j].s[2] /= 255; | |
| 3976 | - shapes[i].c.k[j].s[3] /= 255; | |
| 3977 | - } | |
| 3978 | - if (shapes[i].c.k[j].e) { | |
| 3979 | - shapes[i].c.k[j].e[0] /= 255; | |
| 3980 | - shapes[i].c.k[j].e[1] /= 255; | |
| 3981 | - shapes[i].c.k[j].e[2] /= 255; | |
| 3982 | - shapes[i].c.k[j].e[3] /= 255; | |
| 3983 | - } | |
| 3984 | - } | |
| 3985 | - } else { | |
| 3986 | - shapes[i].c.k[0] /= 255; | |
| 3987 | - shapes[i].c.k[1] /= 255; | |
| 3988 | - shapes[i].c.k[2] /= 255; | |
| 3989 | - shapes[i].c.k[3] /= 255; | |
| 3990 | - } | |
| 3991 | - } | |
| 3992 | - } | |
| 3993 | - } | |
| 3994 | - function iterateLayers(layers) { | |
| 3995 | - var i; | |
| 3996 | - var len = layers.length; | |
| 3997 | - for (i = 0; i < len; i += 1) { | |
| 3998 | - if (layers[i].ty === 4) { | |
| 3999 | - iterateShapes(layers[i].shapes); | |
| 4000 | - } | |
| 4001 | - } | |
| 4002 | - } | |
| 4003 | - return function (animationData) { | |
| 4004 | - if (checkVersion(minimumVersion, animationData.v)) { | |
| 4005 | - iterateLayers(animationData.layers); | |
| 4006 | - if (animationData.assets) { | |
| 4007 | - var i; | |
| 4008 | - var len = animationData.assets.length; | |
| 4009 | - for (i = 0; i < len; i += 1) { | |
| 4010 | - if (animationData.assets[i].layers) { | |
| 4011 | - iterateLayers(animationData.assets[i].layers); | |
| 4012 | - } | |
| 4013 | - } | |
| 4014 | - } | |
| 4015 | - } | |
| 4016 | - }; | |
| 4017 | - }(); | |
| 4018 | - var checkShapes = function () { | |
| 4019 | - var minimumVersion = [4, 4, 18]; | |
| 4020 | - function completeClosingShapes(arr) { | |
| 4021 | - var i; | |
| 4022 | - var len = arr.length; | |
| 4023 | - var j; | |
| 4024 | - var jLen; | |
| 4025 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 4026 | - if (arr[i].ty === 'sh') { | |
| 4027 | - if (arr[i].ks.k.i) { | |
| 4028 | - arr[i].ks.k.c = arr[i].closed; | |
| 4029 | - } else { | |
| 4030 | - jLen = arr[i].ks.k.length; | |
| 4031 | - for (j = 0; j < jLen; j += 1) { | |
| 4032 | - if (arr[i].ks.k[j].s) { | |
| 4033 | - arr[i].ks.k[j].s[0].c = arr[i].closed; | |
| 4034 | - } | |
| 4035 | - if (arr[i].ks.k[j].e) { | |
| 4036 | - arr[i].ks.k[j].e[0].c = arr[i].closed; | |
| 4037 | - } | |
| 4038 | - } | |
| 4039 | - } | |
| 4040 | - } else if (arr[i].ty === 'gr') { | |
| 4041 | - completeClosingShapes(arr[i].it); | |
| 4042 | - } | |
| 4043 | - } | |
| 4044 | - } | |
| 4045 | - function iterateLayers(layers) { | |
| 4046 | - var layerData; | |
| 4047 | - var i; | |
| 4048 | - var len = layers.length; | |
| 4049 | - var j; | |
| 4050 | - var jLen; | |
| 4051 | - var k; | |
| 4052 | - var kLen; | |
| 4053 | - for (i = 0; i < len; i += 1) { | |
| 4054 | - layerData = layers[i]; | |
| 4055 | - if (layerData.hasMask) { | |
| 4056 | - var maskProps = layerData.masksProperties; | |
| 4057 | - jLen = maskProps.length; | |
| 4058 | - for (j = 0; j < jLen; j += 1) { | |
| 4059 | - if (maskProps[j].pt.k.i) { | |
| 4060 | - maskProps[j].pt.k.c = maskProps[j].cl; | |
| 4061 | - } else { | |
| 4062 | - kLen = maskProps[j].pt.k.length; | |
| 4063 | - for (k = 0; k < kLen; k += 1) { | |
| 4064 | - if (maskProps[j].pt.k[k].s) { | |
| 4065 | - maskProps[j].pt.k[k].s[0].c = maskProps[j].cl; | |
| 4066 | - } | |
| 4067 | - if (maskProps[j].pt.k[k].e) { | |
| 4068 | - maskProps[j].pt.k[k].e[0].c = maskProps[j].cl; | |
| 4069 | - } | |
| 4070 | - } | |
| 4071 | - } | |
| 4072 | - } | |
| 4073 | - } | |
| 4074 | - if (layerData.ty === 4) { | |
| 4075 | - completeClosingShapes(layerData.shapes); | |
| 4076 | - } | |
| 4077 | - } | |
| 4078 | - } | |
| 4079 | - return function (animationData) { | |
| 4080 | - if (checkVersion(minimumVersion, animationData.v)) { | |
| 4081 | - iterateLayers(animationData.layers); | |
| 4082 | - if (animationData.assets) { | |
| 4083 | - var i; | |
| 4084 | - var len = animationData.assets.length; | |
| 4085 | - for (i = 0; i < len; i += 1) { | |
| 4086 | - if (animationData.assets[i].layers) { | |
| 4087 | - iterateLayers(animationData.assets[i].layers); | |
| 4088 | - } | |
| 4089 | - } | |
| 4090 | - } | |
| 4091 | - } | |
| 4092 | - }; | |
| 4093 | - }(); | |
| 4094 | - function completeData(animationData) { | |
| 4095 | - if (animationData.__complete) { | |
| 4096 | - return; | |
| 4097 | - } | |
| 4098 | - checkColors(animationData); | |
| 4099 | - checkText(animationData); | |
| 4100 | - checkChars(animationData); | |
| 4101 | - checkPathProperties(animationData); | |
| 4102 | - checkShapes(animationData); | |
| 4103 | - completeLayers(animationData.layers, animationData.assets); | |
| 4104 | - completeChars(animationData.chars, animationData.assets); | |
| 4105 | - animationData.__complete = true; | |
| 4106 | - } | |
| 4107 | - function completeText(data) { | |
| 4108 | - if (data.t.a.length === 0 && !('m' in data.t.p)) { | |
| 4109 | - // data.singleShape = true; | |
| 4110 | - } | |
| 4111 | - } | |
| 4112 | - var moduleOb = {}; | |
| 4113 | - moduleOb.completeData = completeData; | |
| 4114 | - moduleOb.checkColors = checkColors; | |
| 4115 | - moduleOb.checkChars = checkChars; | |
| 4116 | - moduleOb.checkPathProperties = checkPathProperties; | |
| 4117 | - moduleOb.checkShapes = checkShapes; | |
| 4118 | - moduleOb.completeLayers = completeLayers; | |
| 4119 | - return moduleOb; | |
| 4120 | - } | |
| 4121 | - if (!_workerSelf.dataManager) { | |
| 4122 | - _workerSelf.dataManager = dataFunctionManager(); | |
| 4123 | - } | |
| 4124 | - if (!_workerSelf.assetLoader) { | |
| 4125 | - _workerSelf.assetLoader = function () { | |
| 4126 | - function formatResponse(xhr) { | |
| 4127 | - // using typeof doubles the time of execution of this method, | |
| 4128 | - // so if available, it's better to use the header to validate the type | |
| 4129 | - var contentTypeHeader = xhr.getResponseHeader('content-type'); | |
| 4130 | - if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) { | |
| 4131 | - return xhr.response; | |
| 4132 | - } | |
| 4133 | - if (xhr.response && _typeof$5(xhr.response) === 'object') { | |
| 4134 | - return xhr.response; | |
| 4135 | - } | |
| 4136 | - if (xhr.response && typeof xhr.response === 'string') { | |
| 4137 | - return JSON.parse(xhr.response); | |
| 4138 | - } | |
| 4139 | - if (xhr.responseText) { | |
| 4140 | - return JSON.parse(xhr.responseText); | |
| 4141 | - } | |
| 4142 | - return null; | |
| 4143 | - } | |
| 4144 | - function loadAsset(path, fullPath, callback, errorCallback) { | |
| 4145 | - var response; | |
| 4146 | - var xhr = new XMLHttpRequest(); | |
| 4147 | - // set responseType after calling open or IE will break. | |
| 4148 | - try { | |
| 4149 | - // This crashes on Android WebView prior to KitKat | |
| 4150 | - xhr.responseType = 'json'; | |
| 4151 | - } catch (err) {} // eslint-disable-line no-empty | |
| 4152 | - xhr.onreadystatechange = function () { | |
| 4153 | - if (xhr.readyState === 4) { | |
| 4154 | - if (xhr.status === 200) { | |
| 4155 | - response = formatResponse(xhr); | |
| 4156 | - callback(response); | |
| 4157 | - } else { | |
| 4158 | - try { | |
| 4159 | - response = formatResponse(xhr); | |
| 4160 | - callback(response); | |
| 4161 | - } catch (err) { | |
| 4162 | - if (errorCallback) { | |
| 4163 | - errorCallback(err); | |
| 4164 | - } | |
| 4165 | - } | |
| 4166 | - } | |
| 4167 | - } | |
| 4168 | - }; | |
| 4169 | - try { | |
| 4170 | - // Hack to workaround banner validation | |
| 4171 | - xhr.open(['G', 'E', 'T'].join(''), path, true); | |
| 4172 | - } catch (error) { | |
| 4173 | - // Hack to workaround banner validation | |
| 4174 | - xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true); | |
| 4175 | - } | |
| 4176 | - xhr.send(); | |
| 4177 | - } | |
| 4178 | - return { | |
| 4179 | - load: loadAsset | |
| 4180 | - }; | |
| 4181 | - }(); | |
| 4182 | - } | |
| 4183 | - if (e.data.type === 'loadAnimation') { | |
| 4184 | - _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) { | |
| 4185 | - _workerSelf.dataManager.completeData(data); | |
| 4186 | - _workerSelf.postMessage({ | |
| 4187 | - id: e.data.id, | |
| 4188 | - payload: data, | |
| 4189 | - status: 'success' | |
| 4190 | - }); | |
| 4191 | - }, function () { | |
| 4192 | - _workerSelf.postMessage({ | |
| 4193 | - id: e.data.id, | |
| 4194 | - status: 'error' | |
| 4195 | - }); | |
| 4196 | - }); | |
| 4197 | - } else if (e.data.type === 'complete') { | |
| 4198 | - var animation = e.data.animation; | |
| 4199 | - _workerSelf.dataManager.completeData(animation); | |
| 4200 | - _workerSelf.postMessage({ | |
| 4201 | - id: e.data.id, | |
| 4202 | - payload: animation, | |
| 4203 | - status: 'success' | |
| 4204 | - }); | |
| 4205 | - } else if (e.data.type === 'loadData') { | |
| 4206 | - _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) { | |
| 4207 | - _workerSelf.postMessage({ | |
| 4208 | - id: e.data.id, | |
| 4209 | - payload: data, | |
| 4210 | - status: 'success' | |
| 4211 | - }); | |
| 4212 | - }, function () { | |
| 4213 | - _workerSelf.postMessage({ | |
| 4214 | - id: e.data.id, | |
| 4215 | - status: 'error' | |
| 4216 | - }); | |
| 4217 | - }); | |
| 4218 | - } | |
| 4219 | - }); | |
| 4220 | - workerInstance.onmessage = function (event) { | |
| 4221 | - var data = event.data; | |
| 4222 | - var id = data.id; | |
| 4223 | - var process = processes[id]; | |
| 4224 | - processes[id] = null; | |
| 4225 | - if (data.status === 'success') { | |
| 4226 | - process.onComplete(data.payload); | |
| 4227 | - } else if (process.onError) { | |
| 4228 | - process.onError(); | |
| 4229 | - } | |
| 4230 | - }; | |
| 4231 | - } | |
| 4232 | - } | |
| 4233 | - function createProcess(onComplete, onError) { | |
| 4234 | - _counterId += 1; | |
| 4235 | - var id = 'processId_' + _counterId; | |
| 4236 | - processes[id] = { | |
| 4237 | - onComplete: onComplete, | |
| 4238 | - onError: onError | |
| 4239 | - }; | |
| 4240 | - return id; | |
| 4241 | - } | |
| 4242 | - function loadAnimation(path, onComplete, onError) { | |
| 4243 | - setupWorker(); | |
| 4244 | - var processId = createProcess(onComplete, onError); | |
| 4245 | - workerInstance.postMessage({ | |
| 4246 | - type: 'loadAnimation', | |
| 4247 | - path: path, | |
| 4248 | - fullPath: window.location.origin + window.location.pathname, | |
| 4249 | - id: processId | |
| 4250 | - }); | |
| 4251 | - } | |
| 4252 | - function loadData(path, onComplete, onError) { | |
| 4253 | - setupWorker(); | |
| 4254 | - var processId = createProcess(onComplete, onError); | |
| 4255 | - workerInstance.postMessage({ | |
| 4256 | - type: 'loadData', | |
| 4257 | - path: path, | |
| 4258 | - fullPath: window.location.origin + window.location.pathname, | |
| 4259 | - id: processId | |
| 4260 | - }); | |
| 4261 | - } | |
| 4262 | - function completeAnimation(anim, onComplete, onError) { | |
| 4263 | - setupWorker(); | |
| 4264 | - var processId = createProcess(onComplete, onError); | |
| 4265 | - workerInstance.postMessage({ | |
| 4266 | - type: 'complete', | |
| 4267 | - animation: anim, | |
| 4268 | - id: processId | |
| 4269 | - }); | |
| 4270 | - } | |
| 4271 | - return { | |
| 4272 | - loadAnimation: loadAnimation, | |
| 4273 | - loadData: loadData, | |
| 4274 | - completeAnimation: completeAnimation | |
| 4275 | - }; | |
| 4276 | - }(); | |
| 4277 | - | |
| 4278 | - var ImagePreloader = function () { | |
| 4279 | - var proxyImage = function () { | |
| 4280 | - var canvas = createTag('canvas'); | |
| 4281 | - canvas.width = 1; | |
| 4282 | - canvas.height = 1; | |
| 4283 | - var ctx = canvas.getContext('2d'); | |
| 4284 | - ctx.fillStyle = 'rgba(0,0,0,0)'; | |
| 4285 | - ctx.fillRect(0, 0, 1, 1); | |
| 4286 | - return canvas; | |
| 4287 | - }(); | |
| 4288 | - function imageLoaded() { | |
| 4289 | - this.loadedAssets += 1; | |
| 4290 | - if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { | |
| 4291 | - if (this.imagesLoadedCb) { | |
| 4292 | - this.imagesLoadedCb(null); | |
| 4293 | - } | |
| 4294 | - } | |
| 4295 | - } | |
| 4296 | - function footageLoaded() { | |
| 4297 | - this.loadedFootagesCount += 1; | |
| 4298 | - if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { | |
| 4299 | - if (this.imagesLoadedCb) { | |
| 4300 | - this.imagesLoadedCb(null); | |
| 4301 | - } | |
| 4302 | - } | |
| 4303 | - } | |
| 4304 | - function getAssetsPath(assetData, assetsPath, originalPath) { | |
| 4305 | - var path = ''; | |
| 4306 | - if (assetData.e) { | |
| 4307 | - path = assetData.p; | |
| 4308 | - } else if (assetsPath) { | |
| 4309 | - var imagePath = assetData.p; | |
| 4310 | - if (imagePath.indexOf('images/') !== -1) { | |
| 4311 | - imagePath = imagePath.split('/')[1]; | |
| 4312 | - } | |
| 4313 | - path = assetsPath + imagePath; | |
| 4314 | - } else { | |
| 4315 | - path = originalPath; | |
| 4316 | - path += assetData.u ? assetData.u : ''; | |
| 4317 | - path += assetData.p; | |
| 4318 | - } | |
| 4319 | - return path; | |
| 4320 | - } | |
| 4321 | - function testImageLoaded(img) { | |
| 4322 | - var _count = 0; | |
| 4323 | - var intervalId = setInterval(function () { | |
| 4324 | - var box = img.getBBox(); | |
| 4325 | - if (box.width || _count > 500) { | |
| 4326 | - this._imageLoaded(); | |
| 4327 | - clearInterval(intervalId); | |
| 4328 | - } | |
| 4329 | - _count += 1; | |
| 4330 | - }.bind(this), 50); | |
| 4331 | - } | |
| 4332 | - function createImageData(assetData) { | |
| 4333 | - var path = getAssetsPath(assetData, this.assetsPath, this.path); | |
| 4334 | - var img = createNS('image'); | |
| 4335 | - if (isSafari) { | |
| 4336 | - this.testImageLoaded(img); | |
| 4337 | - } else { | |
| 4338 | - img.addEventListener('load', this._imageLoaded, false); | |
| 4339 | - } | |
| 4340 | - img.addEventListener('error', function () { | |
| 4341 | - ob.img = proxyImage; | |
| 4342 | - this._imageLoaded(); | |
| 4343 | - }.bind(this), false); | |
| 4344 | - img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path); | |
| 4345 | - if (this._elementHelper.append) { | |
| 4346 | - this._elementHelper.append(img); | |
| 4347 | - } else { | |
| 4348 | - this._elementHelper.appendChild(img); | |
| 4349 | - } | |
| 4350 | - var ob = { | |
| 4351 | - img: img, | |
| 4352 | - assetData: assetData | |
| 4353 | - }; | |
| 4354 | - return ob; | |
| 4355 | - } | |
| 4356 | - function createImgData(assetData) { | |
| 4357 | - var path = getAssetsPath(assetData, this.assetsPath, this.path); | |
| 4358 | - var img = createTag('img'); | |
| 4359 | - img.crossOrigin = 'anonymous'; | |
| 4360 | - img.addEventListener('load', this._imageLoaded, false); | |
| 4361 | - img.addEventListener('error', function () { | |
| 4362 | - ob.img = proxyImage; | |
| 4363 | - this._imageLoaded(); | |
| 4364 | - }.bind(this), false); | |
| 4365 | - img.src = path; | |
| 4366 | - var ob = { | |
| 4367 | - img: img, | |
| 4368 | - assetData: assetData | |
| 4369 | - }; | |
| 4370 | - return ob; | |
| 4371 | - } | |
| 4372 | - function createFootageData(data) { | |
| 4373 | - var ob = { | |
| 4374 | - assetData: data | |
| 4375 | - }; | |
| 4376 | - var path = getAssetsPath(data, this.assetsPath, this.path); | |
| 4377 | - dataManager.loadData(path, function (footageData) { | |
| 4378 | - ob.img = footageData; | |
| 4379 | - this._footageLoaded(); | |
| 4380 | - }.bind(this), function () { | |
| 4381 | - ob.img = {}; | |
| 4382 | - this._footageLoaded(); | |
| 4383 | - }.bind(this)); | |
| 4384 | - return ob; | |
| 4385 | - } | |
| 4386 | - function loadAssets(assets, cb) { | |
| 4387 | - this.imagesLoadedCb = cb; | |
| 4388 | - var i; | |
| 4389 | - var len = assets.length; | |
| 4390 | - for (i = 0; i < len; i += 1) { | |
| 4391 | - if (!assets[i].layers) { | |
| 4392 | - if (!assets[i].t || assets[i].t === 'seq') { | |
| 4393 | - this.totalImages += 1; | |
| 4394 | - this.images.push(this._createImageData(assets[i])); | |
| 4395 | - } else if (assets[i].t === 3) { | |
| 4396 | - this.totalFootages += 1; | |
| 4397 | - this.images.push(this.createFootageData(assets[i])); | |
| 4398 | - } | |
| 4399 | - } | |
| 4400 | - } | |
| 4401 | - } | |
| 4402 | - function setPath(path) { | |
| 4403 | - this.path = path || ''; | |
| 4404 | - } | |
| 4405 | - function setAssetsPath(path) { | |
| 4406 | - this.assetsPath = path || ''; | |
| 4407 | - } | |
| 4408 | - function getAsset(assetData) { | |
| 4409 | - var i = 0; | |
| 4410 | - var len = this.images.length; | |
| 4411 | - while (i < len) { | |
| 4412 | - if (this.images[i].assetData === assetData) { | |
| 4413 | - return this.images[i].img; | |
| 4414 | - } | |
| 4415 | - i += 1; | |
| 4416 | - } | |
| 4417 | - return null; | |
| 4418 | - } | |
| 4419 | - function destroy() { | |
| 4420 | - this.imagesLoadedCb = null; | |
| 4421 | - this.images.length = 0; | |
| 4422 | - } | |
| 4423 | - function loadedImages() { | |
| 4424 | - return this.totalImages === this.loadedAssets; | |
| 4425 | - } | |
| 4426 | - function loadedFootages() { | |
| 4427 | - return this.totalFootages === this.loadedFootagesCount; | |
| 4428 | - } | |
| 4429 | - function setCacheType(type, elementHelper) { | |
| 4430 | - if (type === 'svg') { | |
| 4431 | - this._elementHelper = elementHelper; | |
| 4432 | - this._createImageData = this.createImageData.bind(this); | |
| 4433 | - } else { | |
| 4434 | - this._createImageData = this.createImgData.bind(this); | |
| 4435 | - } | |
| 4436 | - } | |
| 4437 | - function ImagePreloaderFactory() { | |
| 4438 | - this._imageLoaded = imageLoaded.bind(this); | |
| 4439 | - this._footageLoaded = footageLoaded.bind(this); | |
| 4440 | - this.testImageLoaded = testImageLoaded.bind(this); | |
| 4441 | - this.createFootageData = createFootageData.bind(this); | |
| 4442 | - this.assetsPath = ''; | |
| 4443 | - this.path = ''; | |
| 4444 | - this.totalImages = 0; | |
| 4445 | - this.totalFootages = 0; | |
| 4446 | - this.loadedAssets = 0; | |
| 4447 | - this.loadedFootagesCount = 0; | |
| 4448 | - this.imagesLoadedCb = null; | |
| 4449 | - this.images = []; | |
| 4450 | - } | |
| 4451 | - ImagePreloaderFactory.prototype = { | |
| 4452 | - loadAssets: loadAssets, | |
| 4453 | - setAssetsPath: setAssetsPath, | |
| 4454 | - setPath: setPath, | |
| 4455 | - loadedImages: loadedImages, | |
| 4456 | - loadedFootages: loadedFootages, | |
| 4457 | - destroy: destroy, | |
| 4458 | - getAsset: getAsset, | |
| 4459 | - createImgData: createImgData, | |
| 4460 | - createImageData: createImageData, | |
| 4461 | - imageLoaded: imageLoaded, | |
| 4462 | - footageLoaded: footageLoaded, | |
| 4463 | - setCacheType: setCacheType | |
| 4464 | - }; | |
| 4465 | - return ImagePreloaderFactory; | |
| 4466 | - }(); | |
| 4467 | - | |
| 4468 | - function BaseEvent() {} | |
| 4469 | - BaseEvent.prototype = { | |
| 4470 | - triggerEvent: function triggerEvent(eventName, args) { | |
| 4471 | - if (this._cbs[eventName]) { | |
| 4472 | - var callbacks = this._cbs[eventName]; | |
| 4473 | - for (var i = 0; i < callbacks.length; i += 1) { | |
| 4474 | - callbacks[i](args); | |
| 4475 | - } | |
| 4476 | - } | |
| 4477 | - }, | |
| 4478 | - addEventListener: function addEventListener(eventName, callback) { | |
| 4479 | - if (!this._cbs[eventName]) { | |
| 4480 | - this._cbs[eventName] = []; | |
| 4481 | - } | |
| 4482 | - this._cbs[eventName].push(callback); | |
| 4483 | - return function () { | |
| 4484 | - this.removeEventListener(eventName, callback); | |
| 4485 | - }.bind(this); | |
| 4486 | - }, | |
| 4487 | - removeEventListener: function removeEventListener(eventName, callback) { | |
| 4488 | - if (!callback) { | |
| 4489 | - this._cbs[eventName] = null; | |
| 4490 | - } else if (this._cbs[eventName]) { | |
| 4491 | - var i = 0; | |
| 4492 | - var len = this._cbs[eventName].length; | |
| 4493 | - while (i < len) { | |
| 4494 | - if (this._cbs[eventName][i] === callback) { | |
| 4495 | - this._cbs[eventName].splice(i, 1); | |
| 4496 | - i -= 1; | |
| 4497 | - len -= 1; | |
| 4498 | - } | |
| 4499 | - i += 1; | |
| 4500 | - } | |
| 4501 | - if (!this._cbs[eventName].length) { | |
| 4502 | - this._cbs[eventName] = null; | |
| 4503 | - } | |
| 4504 | - } | |
| 4505 | - } | |
| 4506 | - }; | |
| 4507 | - | |
| 4508 | - var markerParser = function () { | |
| 4509 | - function parsePayloadLines(payload) { | |
| 4510 | - var lines = payload.split('\r\n'); | |
| 4511 | - var keys = {}; | |
| 4512 | - var line; | |
| 4513 | - var keysCount = 0; | |
| 4514 | - for (var i = 0; i < lines.length; i += 1) { | |
| 4515 | - line = lines[i].split(':'); | |
| 4516 | - if (line.length === 2) { | |
| 4517 | - keys[line[0]] = line[1].trim(); | |
| 4518 | - keysCount += 1; | |
| 4519 | - } | |
| 4520 | - } | |
| 4521 | - if (keysCount === 0) { | |
| 4522 | - throw new Error(); | |
| 4523 | - } | |
| 4524 | - return keys; | |
| 4525 | - } | |
| 4526 | - return function (_markers) { | |
| 4527 | - var markers = []; | |
| 4528 | - for (var i = 0; i < _markers.length; i += 1) { | |
| 4529 | - var _marker = _markers[i]; | |
| 4530 | - var markerData = { | |
| 4531 | - time: _marker.tm, | |
| 4532 | - duration: _marker.dr | |
| 4533 | - }; | |
| 4534 | - try { | |
| 4535 | - markerData.payload = JSON.parse(_markers[i].cm); | |
| 4536 | - } catch (_) { | |
| 4537 | - try { | |
| 4538 | - markerData.payload = parsePayloadLines(_markers[i].cm); | |
| 4539 | - } catch (__) { | |
| 4540 | - markerData.payload = { | |
| 4541 | - name: _markers[i].cm | |
| 4542 | - }; | |
| 4543 | - } | |
| 4544 | - } | |
| 4545 | - markers.push(markerData); | |
| 4546 | - } | |
| 4547 | - return markers; | |
| 4548 | - }; | |
| 4549 | - }(); | |
| 4550 | - | |
| 4551 | - var ProjectInterface = function () { | |
| 4552 | - function registerComposition(comp) { | |
| 4553 | - this.compositions.push(comp); | |
| 4554 | - } | |
| 4555 | - return function () { | |
| 4556 | - function _thisProjectFunction(name) { | |
| 4557 | - var i = 0; | |
| 4558 | - var len = this.compositions.length; | |
| 4559 | - while (i < len) { | |
| 4560 | - if (this.compositions[i].data && this.compositions[i].data.nm === name) { | |
| 4561 | - if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) { | |
| 4562 | - this.compositions[i].prepareFrame(this.currentFrame); | |
| 4563 | - } | |
| 4564 | - return this.compositions[i].compInterface; | |
| 4565 | - } | |
| 4566 | - i += 1; | |
| 4567 | - } | |
| 4568 | - return null; | |
| 4569 | - } | |
| 4570 | - _thisProjectFunction.compositions = []; | |
| 4571 | - _thisProjectFunction.currentFrame = 0; | |
| 4572 | - _thisProjectFunction.registerComposition = registerComposition; | |
| 4573 | - return _thisProjectFunction; | |
| 4574 | - }; | |
| 4575 | - }(); | |
| 4576 | - | |
| 4577 | - var renderers = {}; | |
| 4578 | - var registerRenderer = function registerRenderer(key, value) { | |
| 4579 | - renderers[key] = value; | |
| 4580 | - }; | |
| 4581 | - function getRenderer(key) { | |
| 4582 | - return renderers[key]; | |
| 4583 | - } | |
| 4584 | - function getRegisteredRenderer() { | |
| 4585 | - // Returns canvas by default for compatibility | |
| 4586 | - if (renderers.canvas) { | |
| 4587 | - return 'canvas'; | |
| 4588 | - } | |
| 4589 | - // Returns any renderer that is registered | |
| 4590 | - for (var key in renderers) { | |
| 4591 | - if (renderers[key]) { | |
| 4592 | - return key; | |
| 4593 | - } | |
| 4594 | - } | |
| 4595 | - return ''; | |
| 4596 | - } | |
| 4597 | - | |
| 4598 | - function _typeof$4(o) { "@babel/helpers - typeof"; return _typeof$4 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$4(o); } | |
| 4599 | - var AnimationItem = function AnimationItem() { | |
| 4600 | - this._cbs = []; | |
| 4601 | - this.name = ''; | |
| 4602 | - this.path = ''; | |
| 4603 | - this.isLoaded = false; | |
| 4604 | - this.currentFrame = 0; | |
| 4605 | - this.currentRawFrame = 0; | |
| 4606 | - this.firstFrame = 0; | |
| 4607 | - this.totalFrames = 0; | |
| 4608 | - this.frameRate = 0; | |
| 4609 | - this.frameMult = 0; | |
| 4610 | - this.playSpeed = 1; | |
| 4611 | - this.playDirection = 1; | |
| 4612 | - this.playCount = 0; | |
| 4613 | - this.animationData = {}; | |
| 4614 | - this.assets = []; | |
| 4615 | - this.isPaused = true; | |
| 4616 | - this.autoplay = false; | |
| 4617 | - this.loop = true; | |
| 4618 | - this.renderer = null; | |
| 4619 | - this.animationID = createElementID(); | |
| 4620 | - this.assetsPath = ''; | |
| 4621 | - this.timeCompleted = 0; | |
| 4622 | - this.segmentPos = 0; | |
| 4623 | - this.isSubframeEnabled = getSubframeEnabled(); | |
| 4624 | - this.segments = []; | |
| 4625 | - this._idle = true; | |
| 4626 | - this._completedLoop = false; | |
| 4627 | - this.projectInterface = ProjectInterface(); | |
| 4628 | - this.imagePreloader = new ImagePreloader(); | |
| 4629 | - this.audioController = audioControllerFactory(); | |
| 4630 | - this.markers = []; | |
| 4631 | - this.configAnimation = this.configAnimation.bind(this); | |
| 4632 | - this.onSetupError = this.onSetupError.bind(this); | |
| 4633 | - this.onSegmentComplete = this.onSegmentComplete.bind(this); | |
| 4634 | - this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0); | |
| 4635 | - this.expressionsPlugin = getExpressionsPlugin(); | |
| 4636 | - }; | |
| 4637 | - extendPrototype([BaseEvent], AnimationItem); | |
| 4638 | - AnimationItem.prototype.setParams = function (params) { | |
| 4639 | - if (params.wrapper || params.container) { | |
| 4640 | - this.wrapper = params.wrapper || params.container; | |
| 4641 | - } | |
| 4642 | - var animType = 'svg'; | |
| 4643 | - if (params.animType) { | |
| 4644 | - animType = params.animType; | |
| 4645 | - } else if (params.renderer) { | |
| 4646 | - animType = params.renderer; | |
| 4647 | - } | |
| 4648 | - var RendererClass = getRenderer(animType); | |
| 4649 | - this.renderer = new RendererClass(this, params.rendererSettings); | |
| 4650 | - this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs); | |
| 4651 | - this.renderer.setProjectInterface(this.projectInterface); | |
| 4652 | - this.animType = animType; | |
| 4653 | - if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) { | |
| 4654 | - this.loop = true; | |
| 4655 | - } else if (params.loop === false) { | |
| 4656 | - this.loop = false; | |
| 4657 | - } else { | |
| 4658 | - this.loop = parseInt(params.loop, 10); | |
| 4659 | - } | |
| 4660 | - this.autoplay = 'autoplay' in params ? params.autoplay : true; | |
| 4661 | - this.name = params.name ? params.name : ''; | |
| 4662 | - this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true; | |
| 4663 | - this.assetsPath = params.assetsPath; | |
| 4664 | - this.initialSegment = params.initialSegment; | |
| 4665 | - if (params.audioFactory) { | |
| 4666 | - this.audioController.setAudioFactory(params.audioFactory); | |
| 4667 | - } | |
| 4668 | - if (params.animationData) { | |
| 4669 | - this.setupAnimation(params.animationData); | |
| 4670 | - } else if (params.path) { | |
| 4671 | - if (params.path.lastIndexOf('\\') !== -1) { | |
| 4672 | - this.path = params.path.substr(0, params.path.lastIndexOf('\\') + 1); | |
| 4673 | - } else { | |
| 4674 | - this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1); | |
| 4675 | - } | |
| 4676 | - this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1); | |
| 4677 | - this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json')); | |
| 4678 | - dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError); | |
| 4679 | - } | |
| 4680 | - }; | |
| 4681 | - AnimationItem.prototype.onSetupError = function () { | |
| 4682 | - this.trigger('data_failed'); | |
| 4683 | - }; | |
| 4684 | - AnimationItem.prototype.setupAnimation = function (data) { | |
| 4685 | - dataManager.completeAnimation(data, this.configAnimation); | |
| 4686 | - }; | |
| 4687 | - AnimationItem.prototype.setData = function (wrapper, animationData) { | |
| 4688 | - if (animationData) { | |
| 4689 | - if (_typeof$4(animationData) !== 'object') { | |
| 4690 | - animationData = JSON.parse(animationData); | |
| 4691 | - } | |
| 4692 | - } | |
| 4693 | - var params = { | |
| 4694 | - wrapper: wrapper, | |
| 4695 | - animationData: animationData | |
| 4696 | - }; | |
| 4697 | - var wrapperAttributes = wrapper.attributes; | |
| 4698 | - params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary | |
| 4699 | - ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary | |
| 4700 | - ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : ''; | |
| 4701 | - params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary | |
| 4702 | - ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary | |
| 4703 | - ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary | |
| 4704 | - ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary | |
| 4705 | - ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas'; | |
| 4706 | - var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary | |
| 4707 | - ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary | |
| 4708 | - ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : ''; | |
| 4709 | - if (loop === 'false') { | |
| 4710 | - params.loop = false; | |
| 4711 | - } else if (loop === 'true') { | |
| 4712 | - params.loop = true; | |
| 4713 | - } else if (loop !== '') { | |
| 4714 | - params.loop = parseInt(loop, 10); | |
| 4715 | - } | |
| 4716 | - var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary | |
| 4717 | - ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary | |
| 4718 | - ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true; | |
| 4719 | - params.autoplay = autoplay !== 'false'; | |
| 4720 | - params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary | |
| 4721 | - ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary | |
| 4722 | - ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : ''; | |
| 4723 | - var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary | |
| 4724 | - ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary | |
| 4725 | - ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : ''; | |
| 4726 | - if (prerender === 'false') { | |
| 4727 | - params.prerender = false; | |
| 4728 | - } | |
| 4729 | - if (!params.path) { | |
| 4730 | - this.trigger('destroy'); | |
| 4731 | - } else { | |
| 4732 | - this.setParams(params); | |
| 4733 | - } | |
| 4734 | - }; | |
| 4735 | - AnimationItem.prototype.includeLayers = function (data) { | |
| 4736 | - if (data.op > this.animationData.op) { | |
| 4737 | - this.animationData.op = data.op; | |
| 4738 | - this.totalFrames = Math.floor(data.op - this.animationData.ip); | |
| 4739 | - } | |
| 4740 | - var layers = this.animationData.layers; | |
| 4741 | - var i; | |
| 4742 | - var len = layers.length; | |
| 4743 | - var newLayers = data.layers; | |
| 4744 | - var j; | |
| 4745 | - var jLen = newLayers.length; | |
| 4746 | - for (j = 0; j < jLen; j += 1) { | |
| 4747 | - i = 0; | |
| 4748 | - while (i < len) { | |
| 4749 | - if (layers[i].id === newLayers[j].id) { | |
| 4750 | - layers[i] = newLayers[j]; | |
| 4751 | - break; | |
| 4752 | - } | |
| 4753 | - i += 1; | |
| 4754 | - } | |
| 4755 | - } | |
| 4756 | - if (data.chars || data.fonts) { | |
| 4757 | - this.renderer.globalData.fontManager.addChars(data.chars); | |
| 4758 | - this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs); | |
| 4759 | - } | |
| 4760 | - if (data.assets) { | |
| 4761 | - len = data.assets.length; | |
| 4762 | - for (i = 0; i < len; i += 1) { | |
| 4763 | - this.animationData.assets.push(data.assets[i]); | |
| 4764 | - } | |
| 4765 | - } | |
| 4766 | - this.animationData.__complete = false; | |
| 4767 | - dataManager.completeAnimation(this.animationData, this.onSegmentComplete); | |
| 4768 | - }; | |
| 4769 | - AnimationItem.prototype.onSegmentComplete = function (data) { | |
| 4770 | - this.animationData = data; | |
| 4771 | - var expressionsPlugin = getExpressionsPlugin(); | |
| 4772 | - if (expressionsPlugin) { | |
| 4773 | - expressionsPlugin.initExpressions(this); | |
| 4774 | - } | |
| 4775 | - this.loadNextSegment(); | |
| 4776 | - }; | |
| 4777 | - AnimationItem.prototype.loadNextSegment = function () { | |
| 4778 | - var segments = this.animationData.segments; | |
| 4779 | - if (!segments || segments.length === 0 || !this.autoloadSegments) { | |
| 4780 | - this.trigger('data_ready'); | |
| 4781 | - this.timeCompleted = this.totalFrames; | |
| 4782 | - return; | |
| 4783 | - } | |
| 4784 | - var segment = segments.shift(); | |
| 4785 | - this.timeCompleted = segment.time * this.frameRate; | |
| 4786 | - var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json'; | |
| 4787 | - this.segmentPos += 1; | |
| 4788 | - dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () { | |
| 4789 | - this.trigger('data_failed'); | |
| 4790 | - }.bind(this)); | |
| 4791 | - }; | |
| 4792 | - AnimationItem.prototype.loadSegments = function () { | |
| 4793 | - var segments = this.animationData.segments; | |
| 4794 | - if (!segments) { | |
| 4795 | - this.timeCompleted = this.totalFrames; | |
| 4796 | - } | |
| 4797 | - this.loadNextSegment(); | |
| 4798 | - }; | |
| 4799 | - AnimationItem.prototype.imagesLoaded = function () { | |
| 4800 | - this.trigger('loaded_images'); | |
| 4801 | - this.checkLoaded(); | |
| 4802 | - }; | |
| 4803 | - AnimationItem.prototype.preloadImages = function () { | |
| 4804 | - this.imagePreloader.setAssetsPath(this.assetsPath); | |
| 4805 | - this.imagePreloader.setPath(this.path); | |
| 4806 | - this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this)); | |
| 4807 | - }; | |
| 4808 | - AnimationItem.prototype.configAnimation = function (animData) { | |
| 4809 | - if (!this.renderer) { | |
| 4810 | - return; | |
| 4811 | - } | |
| 4812 | - try { | |
| 4813 | - this.animationData = animData; | |
| 4814 | - if (this.initialSegment) { | |
| 4815 | - this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]); | |
| 4816 | - this.firstFrame = Math.round(this.initialSegment[0]); | |
| 4817 | - } else { | |
| 4818 | - this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip); | |
| 4819 | - this.firstFrame = Math.round(this.animationData.ip); | |
| 4820 | - } | |
| 4821 | - this.renderer.configAnimation(animData); | |
| 4822 | - if (!animData.assets) { | |
| 4823 | - animData.assets = []; | |
| 4824 | - } | |
| 4825 | - this.assets = this.animationData.assets; | |
| 4826 | - this.frameRate = this.animationData.fr; | |
| 4827 | - this.frameMult = this.animationData.fr / 1000; | |
| 4828 | - this.renderer.searchExtraCompositions(animData.assets); | |
| 4829 | - this.markers = markerParser(animData.markers || []); | |
| 4830 | - this.trigger('config_ready'); | |
| 4831 | - this.preloadImages(); | |
| 4832 | - this.loadSegments(); | |
| 4833 | - this.updaFrameModifier(); | |
| 4834 | - this.waitForFontsLoaded(); | |
| 4835 | - if (this.isPaused) { | |
| 4836 | - this.audioController.pause(); | |
| 4837 | - } | |
| 4838 | - } catch (error) { | |
| 4839 | - this.triggerConfigError(error); | |
| 4840 | - } | |
| 4841 | - }; | |
| 4842 | - AnimationItem.prototype.waitForFontsLoaded = function () { | |
| 4843 | - if (!this.renderer) { | |
| 4844 | - return; | |
| 4845 | - } | |
| 4846 | - if (this.renderer.globalData.fontManager.isLoaded) { | |
| 4847 | - this.checkLoaded(); | |
| 4848 | - } else { | |
| 4849 | - setTimeout(this.waitForFontsLoaded.bind(this), 20); | |
| 4850 | - } | |
| 4851 | - }; | |
| 4852 | - AnimationItem.prototype.checkLoaded = function () { | |
| 4853 | - if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) { | |
| 4854 | - this.isLoaded = true; | |
| 4855 | - var expressionsPlugin = getExpressionsPlugin(); | |
| 4856 | - if (expressionsPlugin) { | |
| 4857 | - expressionsPlugin.initExpressions(this); | |
| 4858 | - } | |
| 4859 | - this.renderer.initItems(); | |
| 4860 | - setTimeout(function () { | |
| 4861 | - this.trigger('DOMLoaded'); | |
| 4862 | - }.bind(this), 0); | |
| 4863 | - this.gotoFrame(); | |
| 4864 | - if (this.autoplay) { | |
| 4865 | - this.play(); | |
| 4866 | - } | |
| 4867 | - } | |
| 4868 | - }; | |
| 4869 | - AnimationItem.prototype.resize = function (width, height) { | |
| 4870 | - // Adding this validation for backwards compatibility in case an event object was being passed down | |
| 4871 | - var _width = typeof width === 'number' ? width : undefined; | |
| 4872 | - var _height = typeof height === 'number' ? height : undefined; | |
| 4873 | - this.renderer.updateContainerSize(_width, _height); | |
| 4874 | - }; | |
| 4875 | - AnimationItem.prototype.setSubframe = function (flag) { | |
| 4876 | - this.isSubframeEnabled = !!flag; | |
| 4877 | - }; | |
| 4878 | - AnimationItem.prototype.gotoFrame = function () { | |
| 4879 | - this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise | |
| 4880 | - | |
| 4881 | - if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) { | |
| 4882 | - this.currentFrame = this.timeCompleted; | |
| 4883 | - } | |
| 4884 | - this.trigger('enterFrame'); | |
| 4885 | - this.renderFrame(); | |
| 4886 | - this.trigger('drawnFrame'); | |
| 4887 | - }; | |
| 4888 | - AnimationItem.prototype.renderFrame = function () { | |
| 4889 | - if (this.isLoaded === false || !this.renderer) { | |
| 4890 | - return; | |
| 4891 | - } | |
| 4892 | - try { | |
| 4893 | - if (this.expressionsPlugin) { | |
| 4894 | - this.expressionsPlugin.resetFrame(); | |
| 4895 | - } | |
| 4896 | - this.renderer.renderFrame(this.currentFrame + this.firstFrame); | |
| 4897 | - } catch (error) { | |
| 4898 | - this.triggerRenderFrameError(error); | |
| 4899 | - } | |
| 4900 | - }; | |
| 4901 | - AnimationItem.prototype.play = function (name) { | |
| 4902 | - if (name && this.name !== name) { | |
| 4903 | - return; | |
| 4904 | - } | |
| 4905 | - if (this.isPaused === true) { | |
| 4906 | - this.isPaused = false; | |
| 4907 | - this.trigger('_play'); | |
| 4908 | - this.audioController.resume(); | |
| 4909 | - if (this._idle) { | |
| 4910 | - this._idle = false; | |
| 4911 | - this.trigger('_active'); | |
| 4912 | - } | |
| 4913 | - } | |
| 4914 | - }; | |
| 4915 | - AnimationItem.prototype.pause = function (name) { | |
| 4916 | - if (name && this.name !== name) { | |
| 4917 | - return; | |
| 4918 | - } | |
| 4919 | - if (this.isPaused === false) { | |
| 4920 | - this.isPaused = true; | |
| 4921 | - this.trigger('_pause'); | |
| 4922 | - this._idle = true; | |
| 4923 | - this.trigger('_idle'); | |
| 4924 | - this.audioController.pause(); | |
| 4925 | - } | |
| 4926 | - }; | |
| 4927 | - AnimationItem.prototype.togglePause = function (name) { | |
| 4928 | - if (name && this.name !== name) { | |
| 4929 | - return; | |
| 4930 | - } | |
| 4931 | - if (this.isPaused === true) { | |
| 4932 | - this.play(); | |
| 4933 | - } else { | |
| 4934 | - this.pause(); | |
| 4935 | - } | |
| 4936 | - }; | |
| 4937 | - AnimationItem.prototype.stop = function (name) { | |
| 4938 | - if (name && this.name !== name) { | |
| 4939 | - return; | |
| 4940 | - } | |
| 4941 | - this.pause(); | |
| 4942 | - this.playCount = 0; | |
| 4943 | - this._completedLoop = false; | |
| 4944 | - this.setCurrentRawFrameValue(0); | |
| 4945 | - }; | |
| 4946 | - AnimationItem.prototype.getMarkerData = function (markerName) { | |
| 4947 | - var marker; | |
| 4948 | - for (var i = 0; i < this.markers.length; i += 1) { | |
| 4949 | - marker = this.markers[i]; | |
| 4950 | - if (marker.payload && marker.payload.name === markerName) { | |
| 4951 | - return marker; | |
| 4952 | - } | |
| 4953 | - } | |
| 4954 | - return null; | |
| 4955 | - }; | |
| 4956 | - AnimationItem.prototype.goToAndStop = function (value, isFrame, name) { | |
| 4957 | - if (name && this.name !== name) { | |
| 4958 | - return; | |
| 4959 | - } | |
| 4960 | - var numValue = Number(value); | |
| 4961 | - if (isNaN(numValue)) { | |
| 4962 | - var marker = this.getMarkerData(value); | |
| 4963 | - if (marker) { | |
| 4964 | - this.goToAndStop(marker.time, true); | |
| 4965 | - } | |
| 4966 | - } else if (isFrame) { | |
| 4967 | - this.setCurrentRawFrameValue(value); | |
| 4968 | - } else { | |
| 4969 | - this.setCurrentRawFrameValue(value * this.frameModifier); | |
| 4970 | - } | |
| 4971 | - this.pause(); | |
| 4972 | - }; | |
| 4973 | - AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) { | |
| 4974 | - if (name && this.name !== name) { | |
| 4975 | - return; | |
| 4976 | - } | |
| 4977 | - var numValue = Number(value); | |
| 4978 | - if (isNaN(numValue)) { | |
| 4979 | - var marker = this.getMarkerData(value); | |
| 4980 | - if (marker) { | |
| 4981 | - if (!marker.duration) { | |
| 4982 | - this.goToAndStop(marker.time, true); | |
| 4983 | - } else { | |
| 4984 | - this.playSegments([marker.time, marker.time + marker.duration], true); | |
| 4985 | - } | |
| 4986 | - } | |
| 4987 | - } else { | |
| 4988 | - this.goToAndStop(numValue, isFrame, name); | |
| 4989 | - } | |
| 4990 | - this.play(); | |
| 4991 | - }; | |
| 4992 | - AnimationItem.prototype.advanceTime = function (value) { | |
| 4993 | - if (this.isPaused === true || this.isLoaded === false) { | |
| 4994 | - return; | |
| 4995 | - } | |
| 4996 | - var nextValue = this.currentRawFrame + value * this.frameModifier; | |
| 4997 | - var _isComplete = false; | |
| 4998 | - // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations. | |
| 4999 | - // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop. | |
| 5000 | - if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) { | |
| 5001 | - if (!this.loop || this.playCount === this.loop) { | |
| 5002 | - if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) { | |
| 5003 | - _isComplete = true; | |
| 5004 | - nextValue = this.totalFrames - 1; | |
| 5005 | - } | |
| 5006 | - } else if (nextValue >= this.totalFrames) { | |
| 5007 | - this.playCount += 1; | |
| 5008 | - if (!this.checkSegments(nextValue % this.totalFrames)) { | |
| 5009 | - this.setCurrentRawFrameValue(nextValue % this.totalFrames); | |
| 5010 | - this._completedLoop = true; | |
| 5011 | - this.trigger('loopComplete'); | |
| 5012 | - } | |
| 5013 | - } else { | |
| 5014 | - this.setCurrentRawFrameValue(nextValue); | |
| 5015 | - } | |
| 5016 | - } else if (nextValue < 0) { | |
| 5017 | - if (!this.checkSegments(nextValue % this.totalFrames)) { | |
| 5018 | - if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { | |
| 5019 | - // eslint-disable-line no-plusplus | |
| 5020 | - this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames); | |
| 5021 | - if (!this._completedLoop) { | |
| 5022 | - this._completedLoop = true; | |
| 5023 | - } else { | |
| 5024 | - this.trigger('loopComplete'); | |
| 5025 | - } | |
| 5026 | - } else { | |
| 5027 | - _isComplete = true; | |
| 5028 | - nextValue = 0; | |
| 5029 | - } | |
| 5030 | - } | |
| 5031 | - } else { | |
| 5032 | - this.setCurrentRawFrameValue(nextValue); | |
| 5033 | - } | |
| 5034 | - if (_isComplete) { | |
| 5035 | - this.setCurrentRawFrameValue(nextValue); | |
| 5036 | - this.pause(); | |
| 5037 | - this.trigger('complete'); | |
| 5038 | - } | |
| 5039 | - }; | |
| 5040 | - AnimationItem.prototype.adjustSegment = function (arr, offset) { | |
| 5041 | - this.playCount = 0; | |
| 5042 | - if (arr[1] < arr[0]) { | |
| 5043 | - if (this.frameModifier > 0) { | |
| 5044 | - if (this.playSpeed < 0) { | |
| 5045 | - this.setSpeed(-this.playSpeed); | |
| 5046 | - } else { | |
| 5047 | - this.setDirection(-1); | |
| 5048 | - } | |
| 5049 | - } | |
| 5050 | - this.totalFrames = arr[0] - arr[1]; | |
| 5051 | - this.timeCompleted = this.totalFrames; | |
| 5052 | - this.firstFrame = arr[1]; | |
| 5053 | - this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset); | |
| 5054 | - } else if (arr[1] > arr[0]) { | |
| 5055 | - if (this.frameModifier < 0) { | |
| 5056 | - if (this.playSpeed < 0) { | |
| 5057 | - this.setSpeed(-this.playSpeed); | |
| 5058 | - } else { | |
| 5059 | - this.setDirection(1); | |
| 5060 | - } | |
| 5061 | - } | |
| 5062 | - this.totalFrames = arr[1] - arr[0]; | |
| 5063 | - this.timeCompleted = this.totalFrames; | |
| 5064 | - this.firstFrame = arr[0]; | |
| 5065 | - this.setCurrentRawFrameValue(0.001 + offset); | |
| 5066 | - } | |
| 5067 | - this.trigger('segmentStart'); | |
| 5068 | - }; | |
| 5069 | - AnimationItem.prototype.setSegment = function (init, end) { | |
| 5070 | - var pendingFrame = -1; | |
| 5071 | - if (this.isPaused) { | |
| 5072 | - if (this.currentRawFrame + this.firstFrame < init) { | |
| 5073 | - pendingFrame = init; | |
| 5074 | - } else if (this.currentRawFrame + this.firstFrame > end) { | |
| 5075 | - pendingFrame = end - init; | |
| 5076 | - } | |
| 5077 | - } | |
| 5078 | - this.firstFrame = init; | |
| 5079 | - this.totalFrames = end - init; | |
| 5080 | - this.timeCompleted = this.totalFrames; | |
| 5081 | - if (pendingFrame !== -1) { | |
| 5082 | - this.goToAndStop(pendingFrame, true); | |
| 5083 | - } | |
| 5084 | - }; | |
| 5085 | - AnimationItem.prototype.playSegments = function (arr, forceFlag) { | |
| 5086 | - if (forceFlag) { | |
| 5087 | - this.segments.length = 0; | |
| 5088 | - } | |
| 5089 | - if (_typeof$4(arr[0]) === 'object') { | |
| 5090 | - var i; | |
| 5091 | - var len = arr.length; | |
| 5092 | - for (i = 0; i < len; i += 1) { | |
| 5093 | - this.segments.push(arr[i]); | |
| 5094 | - } | |
| 5095 | - } else { | |
| 5096 | - this.segments.push(arr); | |
| 5097 | - } | |
| 5098 | - if (this.segments.length && forceFlag) { | |
| 5099 | - this.adjustSegment(this.segments.shift(), 0); | |
| 5100 | - } | |
| 5101 | - if (this.isPaused) { | |
| 5102 | - this.play(); | |
| 5103 | - } | |
| 5104 | - }; | |
| 5105 | - AnimationItem.prototype.resetSegments = function (forceFlag) { | |
| 5106 | - this.segments.length = 0; | |
| 5107 | - this.segments.push([this.animationData.ip, this.animationData.op]); | |
| 5108 | - if (forceFlag) { | |
| 5109 | - this.checkSegments(0); | |
| 5110 | - } | |
| 5111 | - }; | |
| 5112 | - AnimationItem.prototype.checkSegments = function (offset) { | |
| 5113 | - if (this.segments.length) { | |
| 5114 | - this.adjustSegment(this.segments.shift(), offset); | |
| 5115 | - return true; | |
| 5116 | - } | |
| 5117 | - return false; | |
| 5118 | - }; | |
| 5119 | - AnimationItem.prototype.destroy = function (name) { | |
| 5120 | - if (name && this.name !== name || !this.renderer) { | |
| 5121 | - return; | |
| 5122 | - } | |
| 5123 | - this.renderer.destroy(); | |
| 5124 | - this.imagePreloader.destroy(); | |
| 5125 | - this.trigger('destroy'); | |
| 5126 | - this._cbs = null; | |
| 5127 | - this.onEnterFrame = null; | |
| 5128 | - this.onLoopComplete = null; | |
| 5129 | - this.onComplete = null; | |
| 5130 | - this.onSegmentStart = null; | |
| 5131 | - this.onDestroy = null; | |
| 5132 | - this.renderer = null; | |
| 5133 | - this.expressionsPlugin = null; | |
| 5134 | - this.imagePreloader = null; | |
| 5135 | - this.projectInterface = null; | |
| 5136 | - }; | |
| 5137 | - AnimationItem.prototype.setCurrentRawFrameValue = function (value) { | |
| 5138 | - this.currentRawFrame = value; | |
| 5139 | - this.gotoFrame(); | |
| 5140 | - }; | |
| 5141 | - AnimationItem.prototype.setSpeed = function (val) { | |
| 5142 | - this.playSpeed = val; | |
| 5143 | - this.updaFrameModifier(); | |
| 5144 | - }; | |
| 5145 | - AnimationItem.prototype.setDirection = function (val) { | |
| 5146 | - this.playDirection = val < 0 ? -1 : 1; | |
| 5147 | - this.updaFrameModifier(); | |
| 5148 | - }; | |
| 5149 | - AnimationItem.prototype.setLoop = function (isLooping) { | |
| 5150 | - this.loop = isLooping; | |
| 5151 | - }; | |
| 5152 | - AnimationItem.prototype.setVolume = function (val, name) { | |
| 5153 | - if (name && this.name !== name) { | |
| 5154 | - return; | |
| 5155 | - } | |
| 5156 | - this.audioController.setVolume(val); | |
| 5157 | - }; | |
| 5158 | - AnimationItem.prototype.getVolume = function () { | |
| 5159 | - return this.audioController.getVolume(); | |
| 5160 | - }; | |
| 5161 | - AnimationItem.prototype.mute = function (name) { | |
| 5162 | - if (name && this.name !== name) { | |
| 5163 | - return; | |
| 5164 | - } | |
| 5165 | - this.audioController.mute(); | |
| 5166 | - }; | |
| 5167 | - AnimationItem.prototype.unmute = function (name) { | |
| 5168 | - if (name && this.name !== name) { | |
| 5169 | - return; | |
| 5170 | - } | |
| 5171 | - this.audioController.unmute(); | |
| 5172 | - }; | |
| 5173 | - AnimationItem.prototype.updaFrameModifier = function () { | |
| 5174 | - this.frameModifier = this.frameMult * this.playSpeed * this.playDirection; | |
| 5175 | - this.audioController.setRate(this.playSpeed * this.playDirection); | |
| 5176 | - }; | |
| 5177 | - AnimationItem.prototype.getPath = function () { | |
| 5178 | - return this.path; | |
| 5179 | - }; | |
| 5180 | - AnimationItem.prototype.getAssetsPath = function (assetData) { | |
| 5181 | - var path = ''; | |
| 5182 | - if (assetData.e) { | |
| 5183 | - path = assetData.p; | |
| 5184 | - } else if (this.assetsPath) { | |
| 5185 | - var imagePath = assetData.p; | |
| 5186 | - if (imagePath.indexOf('images/') !== -1) { | |
| 5187 | - imagePath = imagePath.split('/')[1]; | |
| 5188 | - } | |
| 5189 | - path = this.assetsPath + imagePath; | |
| 5190 | - } else { | |
| 5191 | - path = this.path; | |
| 5192 | - path += assetData.u ? assetData.u : ''; | |
| 5193 | - path += assetData.p; | |
| 5194 | - } | |
| 5195 | - return path; | |
| 5196 | - }; | |
| 5197 | - AnimationItem.prototype.getAssetData = function (id) { | |
| 5198 | - var i = 0; | |
| 5199 | - var len = this.assets.length; | |
| 5200 | - while (i < len) { | |
| 5201 | - if (id === this.assets[i].id) { | |
| 5202 | - return this.assets[i]; | |
| 5203 | - } | |
| 5204 | - i += 1; | |
| 5205 | - } | |
| 5206 | - return null; | |
| 5207 | - }; | |
| 5208 | - AnimationItem.prototype.hide = function () { | |
| 5209 | - this.renderer.hide(); | |
| 5210 | - }; | |
| 5211 | - AnimationItem.prototype.show = function () { | |
| 5212 | - this.renderer.show(); | |
| 5213 | - }; | |
| 5214 | - AnimationItem.prototype.getDuration = function (isFrame) { | |
| 5215 | - return isFrame ? this.totalFrames : this.totalFrames / this.frameRate; | |
| 5216 | - }; | |
| 5217 | - AnimationItem.prototype.updateDocumentData = function (path, documentData, index) { | |
| 5218 | - try { | |
| 5219 | - var element = this.renderer.getElementByPath(path); | |
| 5220 | - element.updateDocumentData(documentData, index); | |
| 5221 | - } catch (error) { | |
| 5222 | - // TODO: decide how to handle catch case | |
| 5223 | - } | |
| 5224 | - }; | |
| 5225 | - AnimationItem.prototype.trigger = function (name) { | |
| 5226 | - if (this._cbs && this._cbs[name]) { | |
| 5227 | - switch (name) { | |
| 5228 | - case 'enterFrame': | |
| 5229 | - this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier)); | |
| 5230 | - break; | |
| 5231 | - case 'drawnFrame': | |
| 5232 | - this.drawnFrameEvent.currentTime = this.currentFrame; | |
| 5233 | - this.drawnFrameEvent.totalTime = this.totalFrames; | |
| 5234 | - this.drawnFrameEvent.direction = this.frameModifier; | |
| 5235 | - this.triggerEvent(name, this.drawnFrameEvent); | |
| 5236 | - break; | |
| 5237 | - case 'loopComplete': | |
| 5238 | - this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult)); | |
| 5239 | - break; | |
| 5240 | - case 'complete': | |
| 5241 | - this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult)); | |
| 5242 | - break; | |
| 5243 | - case 'segmentStart': | |
| 5244 | - this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames)); | |
| 5245 | - break; | |
| 5246 | - case 'destroy': | |
| 5247 | - this.triggerEvent(name, new BMDestroyEvent(name, this)); | |
| 5248 | - break; | |
| 5249 | - default: | |
| 5250 | - this.triggerEvent(name); | |
| 5251 | - } | |
| 5252 | - } | |
| 5253 | - if (name === 'enterFrame' && this.onEnterFrame) { | |
| 5254 | - this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult)); | |
| 5255 | - } | |
| 5256 | - if (name === 'loopComplete' && this.onLoopComplete) { | |
| 5257 | - this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult)); | |
| 5258 | - } | |
| 5259 | - if (name === 'complete' && this.onComplete) { | |
| 5260 | - this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult)); | |
| 5261 | - } | |
| 5262 | - if (name === 'segmentStart' && this.onSegmentStart) { | |
| 5263 | - this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames)); | |
| 5264 | - } | |
| 5265 | - if (name === 'destroy' && this.onDestroy) { | |
| 5266 | - this.onDestroy.call(this, new BMDestroyEvent(name, this)); | |
| 5267 | - } | |
| 5268 | - }; | |
| 5269 | - AnimationItem.prototype.triggerRenderFrameError = function (nativeError) { | |
| 5270 | - var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame); | |
| 5271 | - this.triggerEvent('error', error); | |
| 5272 | - if (this.onError) { | |
| 5273 | - this.onError.call(this, error); | |
| 5274 | - } | |
| 5275 | - }; | |
| 5276 | - AnimationItem.prototype.triggerConfigError = function (nativeError) { | |
| 5277 | - var error = new BMConfigErrorEvent(nativeError, this.currentFrame); | |
| 5278 | - this.triggerEvent('error', error); | |
| 5279 | - if (this.onError) { | |
| 5280 | - this.onError.call(this, error); | |
| 5281 | - } | |
| 5282 | - }; | |
| 5283 | - | |
| 5284 | - var animationManager = function () { | |
| 5285 | - var moduleOb = {}; | |
| 5286 | - var registeredAnimations = []; | |
| 5287 | - var initTime = 0; | |
| 5288 | - var len = 0; | |
| 5289 | - var playingAnimationsNum = 0; | |
| 5290 | - var _stopped = true; | |
| 5291 | - var _isFrozen = false; | |
| 5292 | - function removeElement(ev) { | |
| 5293 | - var i = 0; | |
| 5294 | - var animItem = ev.target; | |
| 5295 | - while (i < len) { | |
| 5296 | - if (registeredAnimations[i].animation === animItem) { | |
| 5297 | - registeredAnimations.splice(i, 1); | |
| 5298 | - i -= 1; | |
| 5299 | - len -= 1; | |
| 5300 | - if (!animItem.isPaused) { | |
| 5301 | - subtractPlayingCount(); | |
| 5302 | - } | |
| 5303 | - } | |
| 5304 | - i += 1; | |
| 5305 | - } | |
| 5306 | - } | |
| 5307 | - function registerAnimation(element, animationData) { | |
| 5308 | - if (!element) { | |
| 5309 | - return null; | |
| 5310 | - } | |
| 5311 | - var i = 0; | |
| 5312 | - while (i < len) { | |
| 5313 | - if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) { | |
| 5314 | - return registeredAnimations[i].animation; | |
| 5315 | - } | |
| 5316 | - i += 1; | |
| 5317 | - } | |
| 5318 | - var animItem = new AnimationItem(); | |
| 5319 | - setupAnimation(animItem, element); | |
| 5320 | - animItem.setData(element, animationData); | |
| 5321 | - return animItem; | |
| 5322 | - } | |
| 5323 | - function getRegisteredAnimations() { | |
| 5324 | - var i; | |
| 5325 | - var lenAnims = registeredAnimations.length; | |
| 5326 | - var animations = []; | |
| 5327 | - for (i = 0; i < lenAnims; i += 1) { | |
| 5328 | - animations.push(registeredAnimations[i].animation); | |
| 5329 | - } | |
| 5330 | - return animations; | |
| 5331 | - } | |
| 5332 | - function addPlayingCount() { | |
| 5333 | - playingAnimationsNum += 1; | |
| 5334 | - activate(); | |
| 5335 | - } | |
| 5336 | - function subtractPlayingCount() { | |
| 5337 | - playingAnimationsNum -= 1; | |
| 5338 | - } | |
| 5339 | - function setupAnimation(animItem, element) { | |
| 5340 | - animItem.addEventListener('destroy', removeElement); | |
| 5341 | - animItem.addEventListener('_active', addPlayingCount); | |
| 5342 | - animItem.addEventListener('_idle', subtractPlayingCount); | |
| 5343 | - registeredAnimations.push({ | |
| 5344 | - elem: element, | |
| 5345 | - animation: animItem | |
| 5346 | - }); | |
| 5347 | - len += 1; | |
| 5348 | - } | |
| 5349 | - function loadAnimation(params) { | |
| 5350 | - var animItem = new AnimationItem(); | |
| 5351 | - setupAnimation(animItem, null); | |
| 5352 | - animItem.setParams(params); | |
| 5353 | - return animItem; | |
| 5354 | - } | |
| 5355 | - function setSpeed(val, animation) { | |
| 5356 | - var i; | |
| 5357 | - for (i = 0; i < len; i += 1) { | |
| 5358 | - registeredAnimations[i].animation.setSpeed(val, animation); | |
| 5359 | - } | |
| 5360 | - } | |
| 5361 | - function setDirection(val, animation) { | |
| 5362 | - var i; | |
| 5363 | - for (i = 0; i < len; i += 1) { | |
| 5364 | - registeredAnimations[i].animation.setDirection(val, animation); | |
| 5365 | - } | |
| 5366 | - } | |
| 5367 | - function play(animation) { | |
| 5368 | - var i; | |
| 5369 | - for (i = 0; i < len; i += 1) { | |
| 5370 | - registeredAnimations[i].animation.play(animation); | |
| 5371 | - } | |
| 5372 | - } | |
| 5373 | - function resume(nowTime) { | |
| 5374 | - var elapsedTime = nowTime - initTime; | |
| 5375 | - var i; | |
| 5376 | - for (i = 0; i < len; i += 1) { | |
| 5377 | - registeredAnimations[i].animation.advanceTime(elapsedTime); | |
| 5378 | - } | |
| 5379 | - initTime = nowTime; | |
| 5380 | - if (playingAnimationsNum && !_isFrozen) { | |
| 5381 | - window.requestAnimationFrame(resume); | |
| 5382 | - } else { | |
| 5383 | - _stopped = true; | |
| 5384 | - } | |
| 5385 | - } | |
| 5386 | - function first(nowTime) { | |
| 5387 | - initTime = nowTime; | |
| 5388 | - window.requestAnimationFrame(resume); | |
| 5389 | - } | |
| 5390 | - function pause(animation) { | |
| 5391 | - var i; | |
| 5392 | - for (i = 0; i < len; i += 1) { | |
| 5393 | - registeredAnimations[i].animation.pause(animation); | |
| 5394 | - } | |
| 5395 | - } | |
| 5396 | - function goToAndStop(value, isFrame, animation) { | |
| 5397 | - var i; | |
| 5398 | - for (i = 0; i < len; i += 1) { | |
| 5399 | - registeredAnimations[i].animation.goToAndStop(value, isFrame, animation); | |
| 5400 | - } | |
| 5401 | - } | |
| 5402 | - function stop(animation) { | |
| 5403 | - var i; | |
| 5404 | - for (i = 0; i < len; i += 1) { | |
| 5405 | - registeredAnimations[i].animation.stop(animation); | |
| 5406 | - } | |
| 5407 | - } | |
| 5408 | - function togglePause(animation) { | |
| 5409 | - var i; | |
| 5410 | - for (i = 0; i < len; i += 1) { | |
| 5411 | - registeredAnimations[i].animation.togglePause(animation); | |
| 5412 | - } | |
| 5413 | - } | |
| 5414 | - function destroy(animation) { | |
| 5415 | - var i; | |
| 5416 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 5417 | - registeredAnimations[i].animation.destroy(animation); | |
| 5418 | - } | |
| 5419 | - } | |
| 5420 | - function searchAnimations(animationData, standalone, renderer) { | |
| 5421 | - var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin'))); | |
| 5422 | - var i; | |
| 5423 | - var lenAnims = animElements.length; | |
| 5424 | - for (i = 0; i < lenAnims; i += 1) { | |
| 5425 | - if (renderer) { | |
| 5426 | - animElements[i].setAttribute('data-bm-type', renderer); | |
| 5427 | - } | |
| 5428 | - registerAnimation(animElements[i], animationData); | |
| 5429 | - } | |
| 5430 | - if (standalone && lenAnims === 0) { | |
| 5431 | - if (!renderer) { | |
| 5432 | - renderer = 'svg'; | |
| 5433 | - } | |
| 5434 | - var body = document.getElementsByTagName('body')[0]; | |
| 5435 | - body.innerText = ''; | |
| 5436 | - var div = createTag('div'); | |
| 5437 | - div.style.width = '100%'; | |
| 5438 | - div.style.height = '100%'; | |
| 5439 | - div.setAttribute('data-bm-type', renderer); | |
| 5440 | - body.appendChild(div); | |
| 5441 | - registerAnimation(div, animationData); | |
| 5442 | - } | |
| 5443 | - } | |
| 5444 | - function resize() { | |
| 5445 | - var i; | |
| 5446 | - for (i = 0; i < len; i += 1) { | |
| 5447 | - registeredAnimations[i].animation.resize(); | |
| 5448 | - } | |
| 5449 | - } | |
| 5450 | - function activate() { | |
| 5451 | - if (!_isFrozen && playingAnimationsNum) { | |
| 5452 | - if (_stopped) { | |
| 5453 | - window.requestAnimationFrame(first); | |
| 5454 | - _stopped = false; | |
| 5455 | - } | |
| 5456 | - } | |
| 5457 | - } | |
| 5458 | - function freeze() { | |
| 5459 | - _isFrozen = true; | |
| 5460 | - } | |
| 5461 | - function unfreeze() { | |
| 5462 | - _isFrozen = false; | |
| 5463 | - activate(); | |
| 5464 | - } | |
| 5465 | - function setVolume(val, animation) { | |
| 5466 | - var i; | |
| 5467 | - for (i = 0; i < len; i += 1) { | |
| 5468 | - registeredAnimations[i].animation.setVolume(val, animation); | |
| 5469 | - } | |
| 5470 | - } | |
| 5471 | - function mute(animation) { | |
| 5472 | - var i; | |
| 5473 | - for (i = 0; i < len; i += 1) { | |
| 5474 | - registeredAnimations[i].animation.mute(animation); | |
| 5475 | - } | |
| 5476 | - } | |
| 5477 | - function unmute(animation) { | |
| 5478 | - var i; | |
| 5479 | - for (i = 0; i < len; i += 1) { | |
| 5480 | - registeredAnimations[i].animation.unmute(animation); | |
| 5481 | - } | |
| 5482 | - } | |
| 5483 | - moduleOb.registerAnimation = registerAnimation; | |
| 5484 | - moduleOb.loadAnimation = loadAnimation; | |
| 5485 | - moduleOb.setSpeed = setSpeed; | |
| 5486 | - moduleOb.setDirection = setDirection; | |
| 5487 | - moduleOb.play = play; | |
| 5488 | - moduleOb.pause = pause; | |
| 5489 | - moduleOb.stop = stop; | |
| 5490 | - moduleOb.togglePause = togglePause; | |
| 5491 | - moduleOb.searchAnimations = searchAnimations; | |
| 5492 | - moduleOb.resize = resize; | |
| 5493 | - // moduleOb.start = start; | |
| 5494 | - moduleOb.goToAndStop = goToAndStop; | |
| 5495 | - moduleOb.destroy = destroy; | |
| 5496 | - moduleOb.freeze = freeze; | |
| 5497 | - moduleOb.unfreeze = unfreeze; | |
| 5498 | - moduleOb.setVolume = setVolume; | |
| 5499 | - moduleOb.mute = mute; | |
| 5500 | - moduleOb.unmute = unmute; | |
| 5501 | - moduleOb.getRegisteredAnimations = getRegisteredAnimations; | |
| 5502 | - return moduleOb; | |
| 5503 | - }(); | |
| 5504 | - | |
| 5505 | - /* eslint-disable */ | |
| 5506 | - var BezierFactory = function () { | |
| 5507 | - /** | |
| 5508 | - * BezierEasing - use bezier curve for transition easing function | |
| 5509 | - * by Gaëtan Renaudeau 2014 - 2015 – MIT License | |
| 5510 | - * | |
| 5511 | - * Credits: is based on Firefox's nsSMILKeySpline.cpp | |
| 5512 | - * Usage: | |
| 5513 | - * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ]) | |
| 5514 | - * spline.get(x) => returns the easing value | x must be in [0, 1] range | |
| 5515 | - * | |
| 5516 | - */ | |
| 5517 | - | |
| 5518 | - var ob = {}; | |
| 5519 | - ob.getBezierEasing = getBezierEasing; | |
| 5520 | - var beziers = {}; | |
| 5521 | - function getBezierEasing(a, b, c, d, nm) { | |
| 5522 | - var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\./g, 'p'); | |
| 5523 | - if (beziers[str]) { | |
| 5524 | - return beziers[str]; | |
| 5525 | - } | |
| 5526 | - var bezEasing = new BezierEasing([a, b, c, d]); | |
| 5527 | - beziers[str] = bezEasing; | |
| 5528 | - return bezEasing; | |
| 5529 | - } | |
| 5530 | - | |
| 5531 | - // These values are established by empiricism with tests (tradeoff: performance VS precision) | |
| 5532 | - var NEWTON_ITERATIONS = 4; | |
| 5533 | - var NEWTON_MIN_SLOPE = 0.001; | |
| 5534 | - var SUBDIVISION_PRECISION = 0.0000001; | |
| 5535 | - var SUBDIVISION_MAX_ITERATIONS = 10; | |
| 5536 | - var kSplineTableSize = 11; | |
| 5537 | - var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0); | |
| 5538 | - var float32ArraySupported = typeof Float32Array === 'function'; | |
| 5539 | - function A(aA1, aA2) { | |
| 5540 | - return 1.0 - 3.0 * aA2 + 3.0 * aA1; | |
| 5541 | - } | |
| 5542 | - function B(aA1, aA2) { | |
| 5543 | - return 3.0 * aA2 - 6.0 * aA1; | |
| 5544 | - } | |
| 5545 | - function C(aA1) { | |
| 5546 | - return 3.0 * aA1; | |
| 5547 | - } | |
| 5548 | - | |
| 5549 | - // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. | |
| 5550 | - function calcBezier(aT, aA1, aA2) { | |
| 5551 | - return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; | |
| 5552 | - } | |
| 5553 | - | |
| 5554 | - // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2. | |
| 5555 | - function getSlope(aT, aA1, aA2) { | |
| 5556 | - return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); | |
| 5557 | - } | |
| 5558 | - function binarySubdivide(aX, aA, aB, mX1, mX2) { | |
| 5559 | - var currentX, | |
| 5560 | - currentT, | |
| 5561 | - i = 0; | |
| 5562 | - do { | |
| 5563 | - currentT = aA + (aB - aA) / 2.0; | |
| 5564 | - currentX = calcBezier(currentT, mX1, mX2) - aX; | |
| 5565 | - if (currentX > 0.0) { | |
| 5566 | - aB = currentT; | |
| 5567 | - } else { | |
| 5568 | - aA = currentT; | |
| 5569 | - } | |
| 5570 | - } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); | |
| 5571 | - return currentT; | |
| 5572 | - } | |
| 5573 | - function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) { | |
| 5574 | - for (var i = 0; i < NEWTON_ITERATIONS; ++i) { | |
| 5575 | - var currentSlope = getSlope(aGuessT, mX1, mX2); | |
| 5576 | - if (currentSlope === 0.0) return aGuessT; | |
| 5577 | - var currentX = calcBezier(aGuessT, mX1, mX2) - aX; | |
| 5578 | - aGuessT -= currentX / currentSlope; | |
| 5579 | - } | |
| 5580 | - return aGuessT; | |
| 5581 | - } | |
| 5582 | - | |
| 5583 | - /** | |
| 5584 | - * points is an array of [ mX1, mY1, mX2, mY2 ] | |
| 5585 | - */ | |
| 5586 | - function BezierEasing(points) { | |
| 5587 | - this._p = points; | |
| 5588 | - this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); | |
| 5589 | - this._precomputed = false; | |
| 5590 | - this.get = this.get.bind(this); | |
| 5591 | - } | |
| 5592 | - BezierEasing.prototype = { | |
| 5593 | - get: function get(x) { | |
| 5594 | - var mX1 = this._p[0], | |
| 5595 | - mY1 = this._p[1], | |
| 5596 | - mX2 = this._p[2], | |
| 5597 | - mY2 = this._p[3]; | |
| 5598 | - if (!this._precomputed) this._precompute(); | |
| 5599 | - if (mX1 === mY1 && mX2 === mY2) return x; // linear | |
| 5600 | - // Because JavaScript number are imprecise, we should guarantee the extremes are right. | |
| 5601 | - if (x === 0) return 0; | |
| 5602 | - if (x === 1) return 1; | |
| 5603 | - return calcBezier(this._getTForX(x), mY1, mY2); | |
| 5604 | - }, | |
| 5605 | - // Private part | |
| 5606 | - | |
| 5607 | - _precompute: function _precompute() { | |
| 5608 | - var mX1 = this._p[0], | |
| 5609 | - mY1 = this._p[1], | |
| 5610 | - mX2 = this._p[2], | |
| 5611 | - mY2 = this._p[3]; | |
| 5612 | - this._precomputed = true; | |
| 5613 | - if (mX1 !== mY1 || mX2 !== mY2) { | |
| 5614 | - this._calcSampleValues(); | |
| 5615 | - } | |
| 5616 | - }, | |
| 5617 | - _calcSampleValues: function _calcSampleValues() { | |
| 5618 | - var mX1 = this._p[0], | |
| 5619 | - mX2 = this._p[2]; | |
| 5620 | - for (var i = 0; i < kSplineTableSize; ++i) { | |
| 5621 | - this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); | |
| 5622 | - } | |
| 5623 | - }, | |
| 5624 | - /** | |
| 5625 | - * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection. | |
| 5626 | - */ | |
| 5627 | - _getTForX: function _getTForX(aX) { | |
| 5628 | - var mX1 = this._p[0], | |
| 5629 | - mX2 = this._p[2], | |
| 5630 | - mSampleValues = this._mSampleValues; | |
| 5631 | - var intervalStart = 0.0; | |
| 5632 | - var currentSample = 1; | |
| 5633 | - var lastSample = kSplineTableSize - 1; | |
| 5634 | - for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { | |
| 5635 | - intervalStart += kSampleStepSize; | |
| 5636 | - } | |
| 5637 | - --currentSample; | |
| 5638 | - | |
| 5639 | - // Interpolate to provide an initial guess for t | |
| 5640 | - var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]); | |
| 5641 | - var guessForT = intervalStart + dist * kSampleStepSize; | |
| 5642 | - var initialSlope = getSlope(guessForT, mX1, mX2); | |
| 5643 | - if (initialSlope >= NEWTON_MIN_SLOPE) { | |
| 5644 | - return newtonRaphsonIterate(aX, guessForT, mX1, mX2); | |
| 5645 | - } | |
| 5646 | - if (initialSlope === 0.0) { | |
| 5647 | - return guessForT; | |
| 5648 | - } | |
| 5649 | - return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); | |
| 5650 | - } | |
| 5651 | - }; | |
| 5652 | - return ob; | |
| 5653 | - }(); | |
| 5654 | - | |
| 5655 | - var pooling = function () { | |
| 5656 | - function _double(arr) { | |
| 5657 | - return arr.concat(createSizedArray(arr.length)); | |
| 5658 | - } | |
| 5659 | - return { | |
| 5660 | - "double": _double | |
| 5661 | - }; | |
| 5662 | - }(); | |
| 5663 | - | |
| 5664 | - var poolFactory = function () { | |
| 5665 | - return function (initialLength, _create, _release) { | |
| 5666 | - var _length = 0; | |
| 5667 | - var _maxLength = initialLength; | |
| 5668 | - var pool = createSizedArray(_maxLength); | |
| 5669 | - var ob = { | |
| 5670 | - newElement: newElement, | |
| 5671 | - release: release | |
| 5672 | - }; | |
| 5673 | - function newElement() { | |
| 5674 | - var element; | |
| 5675 | - if (_length) { | |
| 5676 | - _length -= 1; | |
| 5677 | - element = pool[_length]; | |
| 5678 | - } else { | |
| 5679 | - element = _create(); | |
| 5680 | - } | |
| 5681 | - return element; | |
| 5682 | - } | |
| 5683 | - function release(element) { | |
| 5684 | - if (_length === _maxLength) { | |
| 5685 | - pool = pooling["double"](pool); | |
| 5686 | - _maxLength *= 2; | |
| 5687 | - } | |
| 5688 | - if (_release) { | |
| 5689 | - _release(element); | |
| 5690 | - } | |
| 5691 | - pool[_length] = element; | |
| 5692 | - _length += 1; | |
| 5693 | - } | |
| 5694 | - return ob; | |
| 5695 | - }; | |
| 5696 | - }(); | |
| 5697 | - | |
| 5698 | - var bezierLengthPool = function () { | |
| 5699 | - function create() { | |
| 5700 | - return { | |
| 5701 | - addedLength: 0, | |
| 5702 | - percents: createTypedArray('float32', getDefaultCurveSegments()), | |
| 5703 | - lengths: createTypedArray('float32', getDefaultCurveSegments()) | |
| 5704 | - }; | |
| 5705 | - } | |
| 5706 | - return poolFactory(8, create); | |
| 5707 | - }(); | |
| 5708 | - | |
| 5709 | - var segmentsLengthPool = function () { | |
| 5710 | - function create() { | |
| 5711 | - return { | |
| 5712 | - lengths: [], | |
| 5713 | - totalLength: 0 | |
| 5714 | - }; | |
| 5715 | - } | |
| 5716 | - function release(element) { | |
| 5717 | - var i; | |
| 5718 | - var len = element.lengths.length; | |
| 5719 | - for (i = 0; i < len; i += 1) { | |
| 5720 | - bezierLengthPool.release(element.lengths[i]); | |
| 5721 | - } | |
| 5722 | - element.lengths.length = 0; | |
| 5723 | - } | |
| 5724 | - return poolFactory(8, create, release); | |
| 5725 | - }(); | |
| 5726 | - | |
| 5727 | - function bezFunction() { | |
| 5728 | - var math = Math; | |
| 5729 | - function pointOnLine2D(x1, y1, x2, y2, x3, y3) { | |
| 5730 | - var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1; | |
| 5731 | - return det1 > -0.001 && det1 < 0.001; | |
| 5732 | - } | |
| 5733 | - function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) { | |
| 5734 | - if (z1 === 0 && z2 === 0 && z3 === 0) { | |
| 5735 | - return pointOnLine2D(x1, y1, x2, y2, x3, y3); | |
| 5736 | - } | |
| 5737 | - var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2)); | |
| 5738 | - var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2)); | |
| 5739 | - var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2)); | |
| 5740 | - var diffDist; | |
| 5741 | - if (dist1 > dist2) { | |
| 5742 | - if (dist1 > dist3) { | |
| 5743 | - diffDist = dist1 - dist2 - dist3; | |
| 5744 | - } else { | |
| 5745 | - diffDist = dist3 - dist2 - dist1; | |
| 5746 | - } | |
| 5747 | - } else if (dist3 > dist2) { | |
| 5748 | - diffDist = dist3 - dist2 - dist1; | |
| 5749 | - } else { | |
| 5750 | - diffDist = dist2 - dist1 - dist3; | |
| 5751 | - } | |
| 5752 | - return diffDist > -0.0001 && diffDist < 0.0001; | |
| 5753 | - } | |
| 5754 | - var getBezierLength = function () { | |
| 5755 | - return function (pt1, pt2, pt3, pt4) { | |
| 5756 | - var curveSegments = getDefaultCurveSegments(); | |
| 5757 | - var k; | |
| 5758 | - var i; | |
| 5759 | - var len; | |
| 5760 | - var ptCoord; | |
| 5761 | - var perc; | |
| 5762 | - var addedLength = 0; | |
| 5763 | - var ptDistance; | |
| 5764 | - var point = []; | |
| 5765 | - var lastPoint = []; | |
| 5766 | - var lengthData = bezierLengthPool.newElement(); | |
| 5767 | - len = pt3.length; | |
| 5768 | - for (k = 0; k < curveSegments; k += 1) { | |
| 5769 | - perc = k / (curveSegments - 1); | |
| 5770 | - ptDistance = 0; | |
| 5771 | - for (i = 0; i < len; i += 1) { | |
| 5772 | - 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]; | |
| 5773 | - point[i] = ptCoord; | |
| 5774 | - if (lastPoint[i] !== null) { | |
| 5775 | - ptDistance += bmPow(point[i] - lastPoint[i], 2); | |
| 5776 | - } | |
| 5777 | - lastPoint[i] = point[i]; | |
| 5778 | - } | |
| 5779 | - if (ptDistance) { | |
| 5780 | - ptDistance = bmSqrt(ptDistance); | |
| 5781 | - addedLength += ptDistance; | |
| 5782 | - } | |
| 5783 | - lengthData.percents[k] = perc; | |
| 5784 | - lengthData.lengths[k] = addedLength; | |
| 5785 | - } | |
| 5786 | - lengthData.addedLength = addedLength; | |
| 5787 | - return lengthData; | |
| 5788 | - }; | |
| 5789 | - }(); | |
| 5790 | - function getSegmentsLength(shapeData) { | |
| 5791 | - var segmentsLength = segmentsLengthPool.newElement(); | |
| 5792 | - var closed = shapeData.c; | |
| 5793 | - var pathV = shapeData.v; | |
| 5794 | - var pathO = shapeData.o; | |
| 5795 | - var pathI = shapeData.i; | |
| 5796 | - var i; | |
| 5797 | - var len = shapeData._length; | |
| 5798 | - var lengths = segmentsLength.lengths; | |
| 5799 | - var totalLength = 0; | |
| 5800 | - for (i = 0; i < len - 1; i += 1) { | |
| 5801 | - lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]); | |
| 5802 | - totalLength += lengths[i].addedLength; | |
| 5803 | - } | |
| 5804 | - if (closed && len) { | |
| 5805 | - lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]); | |
| 5806 | - totalLength += lengths[i].addedLength; | |
| 5807 | - } | |
| 5808 | - segmentsLength.totalLength = totalLength; | |
| 5809 | - return segmentsLength; | |
| 5810 | - } | |
| 5811 | - function BezierData(length) { | |
| 5812 | - this.segmentLength = 0; | |
| 5813 | - this.points = new Array(length); | |
| 5814 | - } | |
| 5815 | - function PointData(partial, point) { | |
| 5816 | - this.partialLength = partial; | |
| 5817 | - this.point = point; | |
| 5818 | - } | |
| 5819 | - var buildBezierData = function () { | |
| 5820 | - var storedData = {}; | |
| 5821 | - return function (pt1, pt2, pt3, pt4) { | |
| 5822 | - var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\./g, 'p'); | |
| 5823 | - if (!storedData[bezierName]) { | |
| 5824 | - var curveSegments = getDefaultCurveSegments(); | |
| 5825 | - var k; | |
| 5826 | - var i; | |
| 5827 | - var len; | |
| 5828 | - var ptCoord; | |
| 5829 | - var perc; | |
| 5830 | - var addedLength = 0; | |
| 5831 | - var ptDistance; | |
| 5832 | - var point; | |
| 5833 | - var lastPoint = null; | |
| 5834 | - 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])) { | |
| 5835 | - curveSegments = 2; | |
| 5836 | - } | |
| 5837 | - var bezierData = new BezierData(curveSegments); | |
| 5838 | - len = pt3.length; | |
| 5839 | - for (k = 0; k < curveSegments; k += 1) { | |
| 5840 | - point = createSizedArray(len); | |
| 5841 | - perc = k / (curveSegments - 1); | |
| 5842 | - ptDistance = 0; | |
| 5843 | - for (i = 0; i < len; i += 1) { | |
| 5844 | - 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]; | |
| 5845 | - point[i] = ptCoord; | |
| 5846 | - if (lastPoint !== null) { | |
| 5847 | - ptDistance += bmPow(point[i] - lastPoint[i], 2); | |
| 5848 | - } | |
| 5849 | - } | |
| 5850 | - ptDistance = bmSqrt(ptDistance); | |
| 5851 | - addedLength += ptDistance; | |
| 5852 | - bezierData.points[k] = new PointData(ptDistance, point); | |
| 5853 | - lastPoint = point; | |
| 5854 | - } | |
| 5855 | - bezierData.segmentLength = addedLength; | |
| 5856 | - storedData[bezierName] = bezierData; | |
| 5857 | - } | |
| 5858 | - return storedData[bezierName]; | |
| 5859 | - }; | |
| 5860 | - }(); | |
| 5861 | - function getDistancePerc(perc, bezierData) { | |
| 5862 | - var percents = bezierData.percents; | |
| 5863 | - var lengths = bezierData.lengths; | |
| 5864 | - var len = percents.length; | |
| 5865 | - var initPos = bmFloor((len - 1) * perc); | |
| 5866 | - var lengthPos = perc * bezierData.addedLength; | |
| 5867 | - var lPerc = 0; | |
| 5868 | - if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) { | |
| 5869 | - return percents[initPos]; | |
| 5870 | - } | |
| 5871 | - var dir = lengths[initPos] > lengthPos ? -1 : 1; | |
| 5872 | - var flag = true; | |
| 5873 | - while (flag) { | |
| 5874 | - if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) { | |
| 5875 | - lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]); | |
| 5876 | - flag = false; | |
| 5877 | - } else { | |
| 5878 | - initPos += dir; | |
| 5879 | - } | |
| 5880 | - if (initPos < 0 || initPos >= len - 1) { | |
| 5881 | - // FIX for TypedArrays that don't store floating point values with enough accuracy | |
| 5882 | - if (initPos === len - 1) { | |
| 5883 | - return percents[initPos]; | |
| 5884 | - } | |
| 5885 | - flag = false; | |
| 5886 | - } | |
| 5887 | - } | |
| 5888 | - return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc; | |
| 5889 | - } | |
| 5890 | - function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) { | |
| 5891 | - var t1 = getDistancePerc(percent, bezierData); | |
| 5892 | - var u1 = 1 - t1; | |
| 5893 | - var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000; | |
| 5894 | - var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000; | |
| 5895 | - return [ptX, ptY]; | |
| 5896 | - } | |
| 5897 | - var bezierSegmentPoints = createTypedArray('float32', 8); | |
| 5898 | - function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) { | |
| 5899 | - if (startPerc < 0) { | |
| 5900 | - startPerc = 0; | |
| 5901 | - } else if (startPerc > 1) { | |
| 5902 | - startPerc = 1; | |
| 5903 | - } | |
| 5904 | - var t0 = getDistancePerc(startPerc, bezierData); | |
| 5905 | - endPerc = endPerc > 1 ? 1 : endPerc; | |
| 5906 | - var t1 = getDistancePerc(endPerc, bezierData); | |
| 5907 | - var i; | |
| 5908 | - var len = pt1.length; | |
| 5909 | - var u0 = 1 - t0; | |
| 5910 | - var u1 = 1 - t1; | |
| 5911 | - var u0u0u0 = u0 * u0 * u0; | |
| 5912 | - var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase | |
| 5913 | - var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase | |
| 5914 | - var t0t0t0 = t0 * t0 * t0; | |
| 5915 | - // | |
| 5916 | - var u0u0u1 = u0 * u0 * u1; | |
| 5917 | - var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase | |
| 5918 | - var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase | |
| 5919 | - var t0t0t1 = t0 * t0 * t1; | |
| 5920 | - // | |
| 5921 | - var u0u1u1 = u0 * u1 * u1; | |
| 5922 | - var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase | |
| 5923 | - var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase | |
| 5924 | - var t0t1t1 = t0 * t1 * t1; | |
| 5925 | - // | |
| 5926 | - var u1u1u1 = u1 * u1 * u1; | |
| 5927 | - var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase | |
| 5928 | - var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase | |
| 5929 | - var t1t1t1 = t1 * t1 * t1; | |
| 5930 | - for (i = 0; i < len; i += 1) { | |
| 5931 | - bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase | |
| 5932 | - bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase | |
| 5933 | - bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase | |
| 5934 | - bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase | |
| 5935 | - } | |
| 5936 | - return bezierSegmentPoints; | |
| 5937 | - } | |
| 5938 | - return { | |
| 5939 | - getSegmentsLength: getSegmentsLength, | |
| 5940 | - getNewSegment: getNewSegment, | |
| 5941 | - getPointInSegment: getPointInSegment, | |
| 5942 | - buildBezierData: buildBezierData, | |
| 5943 | - pointOnLine2D: pointOnLine2D, | |
| 5944 | - pointOnLine3D: pointOnLine3D | |
| 5945 | - }; | |
| 5946 | - } | |
| 5947 | - var bez = bezFunction(); | |
| 5948 | - | |
| 5949 | - var initFrame = initialDefaultFrame; | |
| 5950 | - var mathAbs = Math.abs; | |
| 5951 | - function interpolateValue(frameNum, caching) { | |
| 5952 | - var offsetTime = this.offsetTime; | |
| 5953 | - var newValue; | |
| 5954 | - if (this.propType === 'multidimensional') { | |
| 5955 | - newValue = createTypedArray('float32', this.pv.length); | |
| 5956 | - } | |
| 5957 | - var iterationIndex = caching.lastIndex; | |
| 5958 | - var i = iterationIndex; | |
| 5959 | - var len = this.keyframes.length - 1; | |
| 5960 | - var flag = true; | |
| 5961 | - var keyData; | |
| 5962 | - var nextKeyData; | |
| 5963 | - var keyframeMetadata; | |
| 5964 | - while (flag) { | |
| 5965 | - keyData = this.keyframes[i]; | |
| 5966 | - nextKeyData = this.keyframes[i + 1]; | |
| 5967 | - if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) { | |
| 5968 | - if (keyData.h) { | |
| 5969 | - keyData = nextKeyData; | |
| 5970 | - } | |
| 5971 | - iterationIndex = 0; | |
| 5972 | - break; | |
| 5973 | - } | |
| 5974 | - if (nextKeyData.t - offsetTime > frameNum) { | |
| 5975 | - iterationIndex = i; | |
| 5976 | - break; | |
| 5977 | - } | |
| 5978 | - if (i < len - 1) { | |
| 5979 | - i += 1; | |
| 5980 | - } else { | |
| 5981 | - iterationIndex = 0; | |
| 5982 | - flag = false; | |
| 5983 | - } | |
| 5984 | - } | |
| 5985 | - keyframeMetadata = this.keyframesMetadata[i] || {}; | |
| 5986 | - var k; | |
| 5987 | - var kLen; | |
| 5988 | - var perc; | |
| 5989 | - var jLen; | |
| 5990 | - var j; | |
| 5991 | - var fnc; | |
| 5992 | - var nextKeyTime = nextKeyData.t - offsetTime; | |
| 5993 | - var keyTime = keyData.t - offsetTime; | |
| 5994 | - var endValue; | |
| 5995 | - if (keyData.to) { | |
| 5996 | - if (!keyframeMetadata.bezierData) { | |
| 5997 | - keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti); | |
| 5998 | - } | |
| 5999 | - var bezierData = keyframeMetadata.bezierData; | |
| 6000 | - if (frameNum >= nextKeyTime || frameNum < keyTime) { | |
| 6001 | - var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0; | |
| 6002 | - kLen = bezierData.points[ind].point.length; | |
| 6003 | - for (k = 0; k < kLen; k += 1) { | |
| 6004 | - newValue[k] = bezierData.points[ind].point[k]; | |
| 6005 | - } | |
| 6006 | - // caching._lastKeyframeIndex = -1; | |
| 6007 | - } else { | |
| 6008 | - if (keyframeMetadata.__fnct) { | |
| 6009 | - fnc = keyframeMetadata.__fnct; | |
| 6010 | - } else { | |
| 6011 | - fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get; | |
| 6012 | - keyframeMetadata.__fnct = fnc; | |
| 6013 | - } | |
| 6014 | - perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); | |
| 6015 | - var distanceInLine = bezierData.segmentLength * perc; | |
| 6016 | - var segmentPerc; | |
| 6017 | - var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0; | |
| 6018 | - j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0; | |
| 6019 | - flag = true; | |
| 6020 | - jLen = bezierData.points.length; | |
| 6021 | - while (flag) { | |
| 6022 | - addedLength += bezierData.points[j].partialLength; | |
| 6023 | - if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) { | |
| 6024 | - kLen = bezierData.points[j].point.length; | |
| 6025 | - for (k = 0; k < kLen; k += 1) { | |
| 6026 | - newValue[k] = bezierData.points[j].point[k]; | |
| 6027 | - } | |
| 6028 | - break; | |
| 6029 | - } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) { | |
| 6030 | - segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength; | |
| 6031 | - kLen = bezierData.points[j].point.length; | |
| 6032 | - for (k = 0; k < kLen; k += 1) { | |
| 6033 | - newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc; | |
| 6034 | - } | |
| 6035 | - break; | |
| 6036 | - } | |
| 6037 | - if (j < jLen - 1) { | |
| 6038 | - j += 1; | |
| 6039 | - } else { | |
| 6040 | - flag = false; | |
| 6041 | - } | |
| 6042 | - } | |
| 6043 | - caching._lastPoint = j; | |
| 6044 | - caching._lastAddedLength = addedLength - bezierData.points[j].partialLength; | |
| 6045 | - caching._lastKeyframeIndex = i; | |
| 6046 | - } | |
| 6047 | - } else { | |
| 6048 | - var outX; | |
| 6049 | - var outY; | |
| 6050 | - var inX; | |
| 6051 | - var inY; | |
| 6052 | - var keyValue; | |
| 6053 | - len = keyData.s.length; | |
| 6054 | - endValue = nextKeyData.s || keyData.e; | |
| 6055 | - if (this.sh && keyData.h !== 1) { | |
| 6056 | - if (frameNum >= nextKeyTime) { | |
| 6057 | - newValue[0] = endValue[0]; | |
| 6058 | - newValue[1] = endValue[1]; | |
| 6059 | - newValue[2] = endValue[2]; | |
| 6060 | - } else if (frameNum <= keyTime) { | |
| 6061 | - newValue[0] = keyData.s[0]; | |
| 6062 | - newValue[1] = keyData.s[1]; | |
| 6063 | - newValue[2] = keyData.s[2]; | |
| 6064 | - } else { | |
| 6065 | - var quatStart = createQuaternion(keyData.s); | |
| 6066 | - var quatEnd = createQuaternion(endValue); | |
| 6067 | - var time = (frameNum - keyTime) / (nextKeyTime - keyTime); | |
| 6068 | - quaternionToEuler(newValue, slerp(quatStart, quatEnd, time)); | |
| 6069 | - } | |
| 6070 | - } else { | |
| 6071 | - for (i = 0; i < len; i += 1) { | |
| 6072 | - if (keyData.h !== 1) { | |
| 6073 | - if (frameNum >= nextKeyTime) { | |
| 6074 | - perc = 1; | |
| 6075 | - } else if (frameNum < keyTime) { | |
| 6076 | - perc = 0; | |
| 6077 | - } else { | |
| 6078 | - if (keyData.o.x.constructor === Array) { | |
| 6079 | - if (!keyframeMetadata.__fnct) { | |
| 6080 | - keyframeMetadata.__fnct = []; | |
| 6081 | - } | |
| 6082 | - if (!keyframeMetadata.__fnct[i]) { | |
| 6083 | - outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i]; | |
| 6084 | - outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i]; | |
| 6085 | - inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i]; | |
| 6086 | - inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i]; | |
| 6087 | - fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; | |
| 6088 | - keyframeMetadata.__fnct[i] = fnc; | |
| 6089 | - } else { | |
| 6090 | - fnc = keyframeMetadata.__fnct[i]; | |
| 6091 | - } | |
| 6092 | - } else if (!keyframeMetadata.__fnct) { | |
| 6093 | - outX = keyData.o.x; | |
| 6094 | - outY = keyData.o.y; | |
| 6095 | - inX = keyData.i.x; | |
| 6096 | - inY = keyData.i.y; | |
| 6097 | - fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; | |
| 6098 | - keyData.keyframeMetadata = fnc; | |
| 6099 | - } else { | |
| 6100 | - fnc = keyframeMetadata.__fnct; | |
| 6101 | - } | |
| 6102 | - perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); | |
| 6103 | - } | |
| 6104 | - } | |
| 6105 | - endValue = nextKeyData.s || keyData.e; | |
| 6106 | - keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc; | |
| 6107 | - if (this.propType === 'multidimensional') { | |
| 6108 | - newValue[i] = keyValue; | |
| 6109 | - } else { | |
| 6110 | - newValue = keyValue; | |
| 6111 | - } | |
| 6112 | - } | |
| 6113 | - } | |
| 6114 | - } | |
| 6115 | - caching.lastIndex = iterationIndex; | |
| 6116 | - return newValue; | |
| 6117 | - } | |
| 6118 | - | |
| 6119 | - // based on @Toji's https://github.com/toji/gl-matrix/ | |
| 6120 | - function slerp(a, b, t) { | |
| 6121 | - var out = []; | |
| 6122 | - var ax = a[0]; | |
| 6123 | - var ay = a[1]; | |
| 6124 | - var az = a[2]; | |
| 6125 | - var aw = a[3]; | |
| 6126 | - var bx = b[0]; | |
| 6127 | - var by = b[1]; | |
| 6128 | - var bz = b[2]; | |
| 6129 | - var bw = b[3]; | |
| 6130 | - var omega; | |
| 6131 | - var cosom; | |
| 6132 | - var sinom; | |
| 6133 | - var scale0; | |
| 6134 | - var scale1; | |
| 6135 | - cosom = ax * bx + ay * by + az * bz + aw * bw; | |
| 6136 | - if (cosom < 0.0) { | |
| 6137 | - cosom = -cosom; | |
| 6138 | - bx = -bx; | |
| 6139 | - by = -by; | |
| 6140 | - bz = -bz; | |
| 6141 | - bw = -bw; | |
| 6142 | - } | |
| 6143 | - if (1.0 - cosom > 0.000001) { | |
| 6144 | - omega = Math.acos(cosom); | |
| 6145 | - sinom = Math.sin(omega); | |
| 6146 | - scale0 = Math.sin((1.0 - t) * omega) / sinom; | |
| 6147 | - scale1 = Math.sin(t * omega) / sinom; | |
| 6148 | - } else { | |
| 6149 | - scale0 = 1.0 - t; | |
| 6150 | - scale1 = t; | |
| 6151 | - } | |
| 6152 | - out[0] = scale0 * ax + scale1 * bx; | |
| 6153 | - out[1] = scale0 * ay + scale1 * by; | |
| 6154 | - out[2] = scale0 * az + scale1 * bz; | |
| 6155 | - out[3] = scale0 * aw + scale1 * bw; | |
| 6156 | - return out; | |
| 6157 | - } | |
| 6158 | - function quaternionToEuler(out, quat) { | |
| 6159 | - var qx = quat[0]; | |
| 6160 | - var qy = quat[1]; | |
| 6161 | - var qz = quat[2]; | |
| 6162 | - var qw = quat[3]; | |
| 6163 | - var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz); | |
| 6164 | - var attitude = Math.asin(2 * qx * qy + 2 * qz * qw); | |
| 6165 | - var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz); | |
| 6166 | - out[0] = heading / degToRads; | |
| 6167 | - out[1] = attitude / degToRads; | |
| 6168 | - out[2] = bank / degToRads; | |
| 6169 | - } | |
| 6170 | - function createQuaternion(values) { | |
| 6171 | - var heading = values[0] * degToRads; | |
| 6172 | - var attitude = values[1] * degToRads; | |
| 6173 | - var bank = values[2] * degToRads; | |
| 6174 | - var c1 = Math.cos(heading / 2); | |
| 6175 | - var c2 = Math.cos(attitude / 2); | |
| 6176 | - var c3 = Math.cos(bank / 2); | |
| 6177 | - var s1 = Math.sin(heading / 2); | |
| 6178 | - var s2 = Math.sin(attitude / 2); | |
| 6179 | - var s3 = Math.sin(bank / 2); | |
| 6180 | - var w = c1 * c2 * c3 - s1 * s2 * s3; | |
| 6181 | - var x = s1 * s2 * c3 + c1 * c2 * s3; | |
| 6182 | - var y = s1 * c2 * c3 + c1 * s2 * s3; | |
| 6183 | - var z = c1 * s2 * c3 - s1 * c2 * s3; | |
| 6184 | - return [x, y, z, w]; | |
| 6185 | - } | |
| 6186 | - function getValueAtCurrentTime() { | |
| 6187 | - var frameNum = this.comp.renderedFrame - this.offsetTime; | |
| 6188 | - var initTime = this.keyframes[0].t - this.offsetTime; | |
| 6189 | - var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; | |
| 6190 | - if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) { | |
| 6191 | - if (this._caching.lastFrame >= frameNum) { | |
| 6192 | - this._caching._lastKeyframeIndex = -1; | |
| 6193 | - this._caching.lastIndex = 0; | |
| 6194 | - } | |
| 6195 | - var renderResult = this.interpolateValue(frameNum, this._caching); | |
| 6196 | - this.pv = renderResult; | |
| 6197 | - } | |
| 6198 | - this._caching.lastFrame = frameNum; | |
| 6199 | - return this.pv; | |
| 6200 | - } | |
| 6201 | - function setVValue(val) { | |
| 6202 | - var multipliedValue; | |
| 6203 | - if (this.propType === 'unidimensional') { | |
| 6204 | - multipliedValue = val * this.mult; | |
| 6205 | - if (mathAbs(this.v - multipliedValue) > 0.00001) { | |
| 6206 | - this.v = multipliedValue; | |
| 6207 | - this._mdf = true; | |
| 6208 | - } | |
| 6209 | - } else { | |
| 6210 | - var i = 0; | |
| 6211 | - var len = this.v.length; | |
| 6212 | - while (i < len) { | |
| 6213 | - multipliedValue = val[i] * this.mult; | |
| 6214 | - if (mathAbs(this.v[i] - multipliedValue) > 0.00001) { | |
| 6215 | - this.v[i] = multipliedValue; | |
| 6216 | - this._mdf = true; | |
| 6217 | - } | |
| 6218 | - i += 1; | |
| 6219 | - } | |
| 6220 | - } | |
| 6221 | - } | |
| 6222 | - function processEffectsSequence() { | |
| 6223 | - if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) { | |
| 6224 | - return; | |
| 6225 | - } | |
| 6226 | - if (this.lock) { | |
| 6227 | - this.setVValue(this.pv); | |
| 6228 | - return; | |
| 6229 | - } | |
| 6230 | - this.lock = true; | |
| 6231 | - this._mdf = this._isFirstFrame; | |
| 6232 | - var i; | |
| 6233 | - var len = this.effectsSequence.length; | |
| 6234 | - var finalValue = this.kf ? this.pv : this.data.k; | |
| 6235 | - for (i = 0; i < len; i += 1) { | |
| 6236 | - finalValue = this.effectsSequence[i](finalValue); | |
| 6237 | - } | |
| 6238 | - this.setVValue(finalValue); | |
| 6239 | - this._isFirstFrame = false; | |
| 6240 | - this.lock = false; | |
| 6241 | - this.frameId = this.elem.globalData.frameId; | |
| 6242 | - } | |
| 6243 | - function addEffect(effectFunction) { | |
| 6244 | - this.effectsSequence.push(effectFunction); | |
| 6245 | - this.container.addDynamicProperty(this); | |
| 6246 | - } | |
| 6247 | - function ValueProperty(elem, data, mult, container) { | |
| 6248 | - this.propType = 'unidimensional'; | |
| 6249 | - this.mult = mult || 1; | |
| 6250 | - this.data = data; | |
| 6251 | - this.v = mult ? data.k * mult : data.k; | |
| 6252 | - this.pv = data.k; | |
| 6253 | - this._mdf = false; | |
| 6254 | - this.elem = elem; | |
| 6255 | - this.container = container; | |
| 6256 | - this.comp = elem.comp; | |
| 6257 | - this.k = false; | |
| 6258 | - this.kf = false; | |
| 6259 | - this.vel = 0; | |
| 6260 | - this.effectsSequence = []; | |
| 6261 | - this._isFirstFrame = true; | |
| 6262 | - this.getValue = processEffectsSequence; | |
| 6263 | - this.setVValue = setVValue; | |
| 6264 | - this.addEffect = addEffect; | |
| 6265 | - } | |
| 6266 | - function MultiDimensionalProperty(elem, data, mult, container) { | |
| 6267 | - this.propType = 'multidimensional'; | |
| 6268 | - this.mult = mult || 1; | |
| 6269 | - this.data = data; | |
| 6270 | - this._mdf = false; | |
| 6271 | - this.elem = elem; | |
| 6272 | - this.container = container; | |
| 6273 | - this.comp = elem.comp; | |
| 6274 | - this.k = false; | |
| 6275 | - this.kf = false; | |
| 6276 | - this.frameId = -1; | |
| 6277 | - var i; | |
| 6278 | - var len = data.k.length; | |
| 6279 | - this.v = createTypedArray('float32', len); | |
| 6280 | - this.pv = createTypedArray('float32', len); | |
| 6281 | - this.vel = createTypedArray('float32', len); | |
| 6282 | - for (i = 0; i < len; i += 1) { | |
| 6283 | - this.v[i] = data.k[i] * this.mult; | |
| 6284 | - this.pv[i] = data.k[i]; | |
| 6285 | - } | |
| 6286 | - this._isFirstFrame = true; | |
| 6287 | - this.effectsSequence = []; | |
| 6288 | - this.getValue = processEffectsSequence; | |
| 6289 | - this.setVValue = setVValue; | |
| 6290 | - this.addEffect = addEffect; | |
| 6291 | - } | |
| 6292 | - function KeyframedValueProperty(elem, data, mult, container) { | |
| 6293 | - this.propType = 'unidimensional'; | |
| 6294 | - this.keyframes = data.k; | |
| 6295 | - this.keyframesMetadata = []; | |
| 6296 | - this.offsetTime = elem.data.st; | |
| 6297 | - this.frameId = -1; | |
| 6298 | - this._caching = { | |
| 6299 | - lastFrame: initFrame, | |
| 6300 | - lastIndex: 0, | |
| 6301 | - value: 0, | |
| 6302 | - _lastKeyframeIndex: -1 | |
| 6303 | - }; | |
| 6304 | - this.k = true; | |
| 6305 | - this.kf = true; | |
| 6306 | - this.data = data; | |
| 6307 | - this.mult = mult || 1; | |
| 6308 | - this.elem = elem; | |
| 6309 | - this.container = container; | |
| 6310 | - this.comp = elem.comp; | |
| 6311 | - this.v = initFrame; | |
| 6312 | - this.pv = initFrame; | |
| 6313 | - this._isFirstFrame = true; | |
| 6314 | - this.getValue = processEffectsSequence; | |
| 6315 | - this.setVValue = setVValue; | |
| 6316 | - this.interpolateValue = interpolateValue; | |
| 6317 | - this.effectsSequence = [getValueAtCurrentTime.bind(this)]; | |
| 6318 | - this.addEffect = addEffect; | |
| 6319 | - } | |
| 6320 | - function KeyframedMultidimensionalProperty(elem, data, mult, container) { | |
| 6321 | - this.propType = 'multidimensional'; | |
| 6322 | - var i; | |
| 6323 | - var len = data.k.length; | |
| 6324 | - var s; | |
| 6325 | - var e; | |
| 6326 | - var to; | |
| 6327 | - var ti; | |
| 6328 | - for (i = 0; i < len - 1; i += 1) { | |
| 6329 | - if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) { | |
| 6330 | - s = data.k[i].s; | |
| 6331 | - e = data.k[i + 1].s; | |
| 6332 | - to = data.k[i].to; | |
| 6333 | - ti = data.k[i].ti; | |
| 6334 | - 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])) { | |
| 6335 | - data.k[i].to = null; | |
| 6336 | - data.k[i].ti = null; | |
| 6337 | - } | |
| 6338 | - if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) { | |
| 6339 | - if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) { | |
| 6340 | - data.k[i].to = null; | |
| 6341 | - data.k[i].ti = null; | |
| 6342 | - } | |
| 6343 | - } | |
| 6344 | - } | |
| 6345 | - } | |
| 6346 | - this.effectsSequence = [getValueAtCurrentTime.bind(this)]; | |
| 6347 | - this.data = data; | |
| 6348 | - this.keyframes = data.k; | |
| 6349 | - this.keyframesMetadata = []; | |
| 6350 | - this.offsetTime = elem.data.st; | |
| 6351 | - this.k = true; | |
| 6352 | - this.kf = true; | |
| 6353 | - this._isFirstFrame = true; | |
| 6354 | - this.mult = mult || 1; | |
| 6355 | - this.elem = elem; | |
| 6356 | - this.container = container; | |
| 6357 | - this.comp = elem.comp; | |
| 6358 | - this.getValue = processEffectsSequence; | |
| 6359 | - this.setVValue = setVValue; | |
| 6360 | - this.interpolateValue = interpolateValue; | |
| 6361 | - this.frameId = -1; | |
| 6362 | - var arrLen = data.k[0].s.length; | |
| 6363 | - this.v = createTypedArray('float32', arrLen); | |
| 6364 | - this.pv = createTypedArray('float32', arrLen); | |
| 6365 | - for (i = 0; i < arrLen; i += 1) { | |
| 6366 | - this.v[i] = initFrame; | |
| 6367 | - this.pv[i] = initFrame; | |
| 6368 | - } | |
| 6369 | - this._caching = { | |
| 6370 | - lastFrame: initFrame, | |
| 6371 | - lastIndex: 0, | |
| 6372 | - value: createTypedArray('float32', arrLen) | |
| 6373 | - }; | |
| 6374 | - this.addEffect = addEffect; | |
| 6375 | - } | |
| 6376 | - var PropertyFactory = function () { | |
| 6377 | - function getProp(elem, data, type, mult, container) { | |
| 6378 | - if (data.sid) { | |
| 6379 | - data = elem.globalData.slotManager.getProp(data); | |
| 6380 | - } | |
| 6381 | - var p; | |
| 6382 | - if (!data.k.length) { | |
| 6383 | - p = new ValueProperty(elem, data, mult, container); | |
| 6384 | - } else if (typeof data.k[0] === 'number') { | |
| 6385 | - p = new MultiDimensionalProperty(elem, data, mult, container); | |
| 6386 | - } else { | |
| 6387 | - switch (type) { | |
| 6388 | - case 0: | |
| 6389 | - p = new KeyframedValueProperty(elem, data, mult, container); | |
| 6390 | - break; | |
| 6391 | - case 1: | |
| 6392 | - p = new KeyframedMultidimensionalProperty(elem, data, mult, container); | |
| 6393 | - break; | |
| 6394 | - default: | |
| 6395 | - break; | |
| 6396 | - } | |
| 6397 | - } | |
| 6398 | - if (p.effectsSequence.length) { | |
| 6399 | - container.addDynamicProperty(p); | |
| 6400 | - } | |
| 6401 | - return p; | |
| 6402 | - } | |
| 6403 | - var ob = { | |
| 6404 | - getProp: getProp | |
| 6405 | - }; | |
| 6406 | - return ob; | |
| 6407 | - }(); | |
| 6408 | - | |
| 6409 | - function DynamicPropertyContainer() {} | |
| 6410 | - DynamicPropertyContainer.prototype = { | |
| 6411 | - addDynamicProperty: function addDynamicProperty(prop) { | |
| 6412 | - if (this.dynamicProperties.indexOf(prop) === -1) { | |
| 6413 | - this.dynamicProperties.push(prop); | |
| 6414 | - this.container.addDynamicProperty(this); | |
| 6415 | - this._isAnimated = true; | |
| 6416 | - } | |
| 6417 | - }, | |
| 6418 | - iterateDynamicProperties: function iterateDynamicProperties() { | |
| 6419 | - this._mdf = false; | |
| 6420 | - var i; | |
| 6421 | - var len = this.dynamicProperties.length; | |
| 6422 | - for (i = 0; i < len; i += 1) { | |
| 6423 | - this.dynamicProperties[i].getValue(); | |
| 6424 | - if (this.dynamicProperties[i]._mdf) { | |
| 6425 | - this._mdf = true; | |
| 6426 | - } | |
| 6427 | - } | |
| 6428 | - }, | |
| 6429 | - initDynamicPropertyContainer: function initDynamicPropertyContainer(container) { | |
| 6430 | - this.container = container; | |
| 6431 | - this.dynamicProperties = []; | |
| 6432 | - this._mdf = false; | |
| 6433 | - this._isAnimated = false; | |
| 6434 | - } | |
| 6435 | - }; | |
| 6436 | - | |
| 6437 | - var pointPool = function () { | |
| 6438 | - function create() { | |
| 6439 | - return createTypedArray('float32', 2); | |
| 6440 | - } | |
| 6441 | - return poolFactory(8, create); | |
| 6442 | - }(); | |
| 6443 | - | |
| 6444 | - function ShapePath() { | |
| 6445 | - this.c = false; | |
| 6446 | - this._length = 0; | |
| 6447 | - this._maxLength = 8; | |
| 6448 | - this.v = createSizedArray(this._maxLength); | |
| 6449 | - this.o = createSizedArray(this._maxLength); | |
| 6450 | - this.i = createSizedArray(this._maxLength); | |
| 6451 | - } | |
| 6452 | - ShapePath.prototype.setPathData = function (closed, len) { | |
| 6453 | - this.c = closed; | |
| 6454 | - this.setLength(len); | |
| 6455 | - var i = 0; | |
| 6456 | - while (i < len) { | |
| 6457 | - this.v[i] = pointPool.newElement(); | |
| 6458 | - this.o[i] = pointPool.newElement(); | |
| 6459 | - this.i[i] = pointPool.newElement(); | |
| 6460 | - i += 1; | |
| 6461 | - } | |
| 6462 | - }; | |
| 6463 | - ShapePath.prototype.setLength = function (len) { | |
| 6464 | - while (this._maxLength < len) { | |
| 6465 | - this.doubleArrayLength(); | |
| 6466 | - } | |
| 6467 | - this._length = len; | |
| 6468 | - }; | |
| 6469 | - ShapePath.prototype.doubleArrayLength = function () { | |
| 6470 | - this.v = this.v.concat(createSizedArray(this._maxLength)); | |
| 6471 | - this.i = this.i.concat(createSizedArray(this._maxLength)); | |
| 6472 | - this.o = this.o.concat(createSizedArray(this._maxLength)); | |
| 6473 | - this._maxLength *= 2; | |
| 6474 | - }; | |
| 6475 | - ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) { | |
| 6476 | - var arr; | |
| 6477 | - this._length = Math.max(this._length, pos + 1); | |
| 6478 | - if (this._length >= this._maxLength) { | |
| 6479 | - this.doubleArrayLength(); | |
| 6480 | - } | |
| 6481 | - switch (type) { | |
| 6482 | - case 'v': | |
| 6483 | - arr = this.v; | |
| 6484 | - break; | |
| 6485 | - case 'i': | |
| 6486 | - arr = this.i; | |
| 6487 | - break; | |
| 6488 | - case 'o': | |
| 6489 | - arr = this.o; | |
| 6490 | - break; | |
| 6491 | - default: | |
| 6492 | - arr = []; | |
| 6493 | - break; | |
| 6494 | - } | |
| 6495 | - if (!arr[pos] || arr[pos] && !replace) { | |
| 6496 | - arr[pos] = pointPool.newElement(); | |
| 6497 | - } | |
| 6498 | - arr[pos][0] = x; | |
| 6499 | - arr[pos][1] = y; | |
| 6500 | - }; | |
| 6501 | - ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) { | |
| 6502 | - this.setXYAt(vX, vY, 'v', pos, replace); | |
| 6503 | - this.setXYAt(oX, oY, 'o', pos, replace); | |
| 6504 | - this.setXYAt(iX, iY, 'i', pos, replace); | |
| 6505 | - }; | |
| 6506 | - ShapePath.prototype.reverse = function () { | |
| 6507 | - var newPath = new ShapePath(); | |
| 6508 | - newPath.setPathData(this.c, this._length); | |
| 6509 | - var vertices = this.v; | |
| 6510 | - var outPoints = this.o; | |
| 6511 | - var inPoints = this.i; | |
| 6512 | - var init = 0; | |
| 6513 | - if (this.c) { | |
| 6514 | - newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false); | |
| 6515 | - init = 1; | |
| 6516 | - } | |
| 6517 | - var cnt = this._length - 1; | |
| 6518 | - var len = this._length; | |
| 6519 | - var i; | |
| 6520 | - for (i = init; i < len; i += 1) { | |
| 6521 | - newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false); | |
| 6522 | - cnt -= 1; | |
| 6523 | - } | |
| 6524 | - return newPath; | |
| 6525 | - }; | |
| 6526 | - ShapePath.prototype.length = function () { | |
| 6527 | - return this._length; | |
| 6528 | - }; | |
| 6529 | - | |
| 6530 | - var shapePool = function () { | |
| 6531 | - function create() { | |
| 6532 | - return new ShapePath(); | |
| 6533 | - } | |
| 6534 | - function release(shapePath) { | |
| 6535 | - var len = shapePath._length; | |
| 6536 | - var i; | |
| 6537 | - for (i = 0; i < len; i += 1) { | |
| 6538 | - pointPool.release(shapePath.v[i]); | |
| 6539 | - pointPool.release(shapePath.i[i]); | |
| 6540 | - pointPool.release(shapePath.o[i]); | |
| 6541 | - shapePath.v[i] = null; | |
| 6542 | - shapePath.i[i] = null; | |
| 6543 | - shapePath.o[i] = null; | |
| 6544 | - } | |
| 6545 | - shapePath._length = 0; | |
| 6546 | - shapePath.c = false; | |
| 6547 | - } | |
| 6548 | - function clone(shape) { | |
| 6549 | - var cloned = factory.newElement(); | |
| 6550 | - var i; | |
| 6551 | - var len = shape._length === undefined ? shape.v.length : shape._length; | |
| 6552 | - cloned.setLength(len); | |
| 6553 | - cloned.c = shape.c; | |
| 6554 | - for (i = 0; i < len; i += 1) { | |
| 6555 | - 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); | |
| 6556 | - } | |
| 6557 | - return cloned; | |
| 6558 | - } | |
| 6559 | - var factory = poolFactory(4, create, release); | |
| 6560 | - factory.clone = clone; | |
| 6561 | - return factory; | |
| 6562 | - }(); | |
| 6563 | - | |
| 6564 | - function ShapeCollection() { | |
| 6565 | - this._length = 0; | |
| 6566 | - this._maxLength = 4; | |
| 6567 | - this.shapes = createSizedArray(this._maxLength); | |
| 6568 | - } | |
| 6569 | - ShapeCollection.prototype.addShape = function (shapeData) { | |
| 6570 | - if (this._length === this._maxLength) { | |
| 6571 | - this.shapes = this.shapes.concat(createSizedArray(this._maxLength)); | |
| 6572 | - this._maxLength *= 2; | |
| 6573 | - } | |
| 6574 | - this.shapes[this._length] = shapeData; | |
| 6575 | - this._length += 1; | |
| 6576 | - }; | |
| 6577 | - ShapeCollection.prototype.releaseShapes = function () { | |
| 6578 | - var i; | |
| 6579 | - for (i = 0; i < this._length; i += 1) { | |
| 6580 | - shapePool.release(this.shapes[i]); | |
| 6581 | - } | |
| 6582 | - this._length = 0; | |
| 6583 | - }; | |
| 6584 | - | |
| 6585 | - var shapeCollectionPool = function () { | |
| 6586 | - var ob = { | |
| 6587 | - newShapeCollection: newShapeCollection, | |
| 6588 | - release: release | |
| 6589 | - }; | |
| 6590 | - var _length = 0; | |
| 6591 | - var _maxLength = 4; | |
| 6592 | - var pool = createSizedArray(_maxLength); | |
| 6593 | - function newShapeCollection() { | |
| 6594 | - var shapeCollection; | |
| 6595 | - if (_length) { | |
| 6596 | - _length -= 1; | |
| 6597 | - shapeCollection = pool[_length]; | |
| 6598 | - } else { | |
| 6599 | - shapeCollection = new ShapeCollection(); | |
| 6600 | - } | |
| 6601 | - return shapeCollection; | |
| 6602 | - } | |
| 6603 | - function release(shapeCollection) { | |
| 6604 | - var i; | |
| 6605 | - var len = shapeCollection._length; | |
| 6606 | - for (i = 0; i < len; i += 1) { | |
| 6607 | - shapePool.release(shapeCollection.shapes[i]); | |
| 6608 | - } | |
| 6609 | - shapeCollection._length = 0; | |
| 6610 | - if (_length === _maxLength) { | |
| 6611 | - pool = pooling["double"](pool); | |
| 6612 | - _maxLength *= 2; | |
| 6613 | - } | |
| 6614 | - pool[_length] = shapeCollection; | |
| 6615 | - _length += 1; | |
| 6616 | - } | |
| 6617 | - return ob; | |
| 6618 | - }(); | |
| 6619 | - | |
| 6620 | - var ShapePropertyFactory = function () { | |
| 6621 | - var initFrame = -999999; | |
| 6622 | - function interpolateShape(frameNum, previousValue, caching) { | |
| 6623 | - var iterationIndex = caching.lastIndex; | |
| 6624 | - var keyPropS; | |
| 6625 | - var keyPropE; | |
| 6626 | - var isHold; | |
| 6627 | - var j; | |
| 6628 | - var k; | |
| 6629 | - var jLen; | |
| 6630 | - var kLen; | |
| 6631 | - var perc; | |
| 6632 | - var vertexValue; | |
| 6633 | - var kf = this.keyframes; | |
| 6634 | - if (frameNum < kf[0].t - this.offsetTime) { | |
| 6635 | - keyPropS = kf[0].s[0]; | |
| 6636 | - isHold = true; | |
| 6637 | - iterationIndex = 0; | |
| 6638 | - } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) { | |
| 6639 | - keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0]; | |
| 6640 | - /* if(kf[kf.length - 1].s){ | |
| 6641 | - keyPropS = kf[kf.length - 1].s[0]; | |
| 6642 | - }else{ | |
| 6643 | - keyPropS = kf[kf.length - 2].e[0]; | |
| 6644 | - } */ | |
| 6645 | - isHold = true; | |
| 6646 | - } else { | |
| 6647 | - var i = iterationIndex; | |
| 6648 | - var len = kf.length - 1; | |
| 6649 | - var flag = true; | |
| 6650 | - var keyData; | |
| 6651 | - var nextKeyData; | |
| 6652 | - var keyframeMetadata; | |
| 6653 | - while (flag) { | |
| 6654 | - keyData = kf[i]; | |
| 6655 | - nextKeyData = kf[i + 1]; | |
| 6656 | - if (nextKeyData.t - this.offsetTime > frameNum) { | |
| 6657 | - break; | |
| 6658 | - } | |
| 6659 | - if (i < len - 1) { | |
| 6660 | - i += 1; | |
| 6661 | - } else { | |
| 6662 | - flag = false; | |
| 6663 | - } | |
| 6664 | - } | |
| 6665 | - keyframeMetadata = this.keyframesMetadata[i] || {}; | |
| 6666 | - isHold = keyData.h === 1; | |
| 6667 | - iterationIndex = i; | |
| 6668 | - if (!isHold) { | |
| 6669 | - if (frameNum >= nextKeyData.t - this.offsetTime) { | |
| 6670 | - perc = 1; | |
| 6671 | - } else if (frameNum < keyData.t - this.offsetTime) { | |
| 6672 | - perc = 0; | |
| 6673 | - } else { | |
| 6674 | - var fnc; | |
| 6675 | - if (keyframeMetadata.__fnct) { | |
| 6676 | - fnc = keyframeMetadata.__fnct; | |
| 6677 | - } else { | |
| 6678 | - fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get; | |
| 6679 | - keyframeMetadata.__fnct = fnc; | |
| 6680 | - } | |
| 6681 | - perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime))); | |
| 6682 | - } | |
| 6683 | - keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0]; | |
| 6684 | - } | |
| 6685 | - keyPropS = keyData.s[0]; | |
| 6686 | - } | |
| 6687 | - jLen = previousValue._length; | |
| 6688 | - kLen = keyPropS.i[0].length; | |
| 6689 | - caching.lastIndex = iterationIndex; | |
| 6690 | - for (j = 0; j < jLen; j += 1) { | |
| 6691 | - for (k = 0; k < kLen; k += 1) { | |
| 6692 | - vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc; | |
| 6693 | - previousValue.i[j][k] = vertexValue; | |
| 6694 | - vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc; | |
| 6695 | - previousValue.o[j][k] = vertexValue; | |
| 6696 | - vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc; | |
| 6697 | - previousValue.v[j][k] = vertexValue; | |
| 6698 | - } | |
| 6699 | - } | |
| 6700 | - } | |
| 6701 | - function interpolateShapeCurrentTime() { | |
| 6702 | - var frameNum = this.comp.renderedFrame - this.offsetTime; | |
| 6703 | - var initTime = this.keyframes[0].t - this.offsetTime; | |
| 6704 | - var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; | |
| 6705 | - var lastFrame = this._caching.lastFrame; | |
| 6706 | - if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) { | |
| 6707 | - /// / | |
| 6708 | - this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0; | |
| 6709 | - this.interpolateShape(frameNum, this.pv, this._caching); | |
| 6710 | - /// / | |
| 6711 | - } | |
| 6712 | - this._caching.lastFrame = frameNum; | |
| 6713 | - return this.pv; | |
| 6714 | - } | |
| 6715 | - function resetShape() { | |
| 6716 | - this.paths = this.localShapeCollection; | |
| 6717 | - } | |
| 6718 | - function shapesEqual(shape1, shape2) { | |
| 6719 | - if (shape1._length !== shape2._length || shape1.c !== shape2.c) { | |
| 6720 | - return false; | |
| 6721 | - } | |
| 6722 | - var i; | |
| 6723 | - var len = shape1._length; | |
| 6724 | - for (i = 0; i < len; i += 1) { | |
| 6725 | - 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]) { | |
| 6726 | - return false; | |
| 6727 | - } | |
| 6728 | - } | |
| 6729 | - return true; | |
| 6730 | - } | |
| 6731 | - function setVValue(newPath) { | |
| 6732 | - if (!shapesEqual(this.v, newPath)) { | |
| 6733 | - this.v = shapePool.clone(newPath); | |
| 6734 | - this.localShapeCollection.releaseShapes(); | |
| 6735 | - this.localShapeCollection.addShape(this.v); | |
| 6736 | - this._mdf = true; | |
| 6737 | - this.paths = this.localShapeCollection; | |
| 6738 | - } | |
| 6739 | - } | |
| 6740 | - function processEffectsSequence() { | |
| 6741 | - if (this.elem.globalData.frameId === this.frameId) { | |
| 6742 | - return; | |
| 6743 | - } | |
| 6744 | - if (!this.effectsSequence.length) { | |
| 6745 | - this._mdf = false; | |
| 6746 | - return; | |
| 6747 | - } | |
| 6748 | - if (this.lock) { | |
| 6749 | - this.setVValue(this.pv); | |
| 6750 | - return; | |
| 6751 | - } | |
| 6752 | - this.lock = true; | |
| 6753 | - this._mdf = false; | |
| 6754 | - var finalValue; | |
| 6755 | - if (this.kf) { | |
| 6756 | - finalValue = this.pv; | |
| 6757 | - } else if (this.data.ks) { | |
| 6758 | - finalValue = this.data.ks.k; | |
| 6759 | - } else { | |
| 6760 | - finalValue = this.data.pt.k; | |
| 6761 | - } | |
| 6762 | - var i; | |
| 6763 | - var len = this.effectsSequence.length; | |
| 6764 | - for (i = 0; i < len; i += 1) { | |
| 6765 | - finalValue = this.effectsSequence[i](finalValue); | |
| 6766 | - } | |
| 6767 | - this.setVValue(finalValue); | |
| 6768 | - this.lock = false; | |
| 6769 | - this.frameId = this.elem.globalData.frameId; | |
| 6770 | - } | |
| 6771 | - function ShapeProperty(elem, data, type) { | |
| 6772 | - this.propType = 'shape'; | |
| 6773 | - this.comp = elem.comp; | |
| 6774 | - this.container = elem; | |
| 6775 | - this.elem = elem; | |
| 6776 | - this.data = data; | |
| 6777 | - this.k = false; | |
| 6778 | - this.kf = false; | |
| 6779 | - this._mdf = false; | |
| 6780 | - var pathData = type === 3 ? data.pt.k : data.ks.k; | |
| 6781 | - this.v = shapePool.clone(pathData); | |
| 6782 | - this.pv = shapePool.clone(this.v); | |
| 6783 | - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 6784 | - this.paths = this.localShapeCollection; | |
| 6785 | - this.paths.addShape(this.v); | |
| 6786 | - this.reset = resetShape; | |
| 6787 | - this.effectsSequence = []; | |
| 6788 | - } | |
| 6789 | - function addEffect(effectFunction) { | |
| 6790 | - this.effectsSequence.push(effectFunction); | |
| 6791 | - this.container.addDynamicProperty(this); | |
| 6792 | - } | |
| 6793 | - ShapeProperty.prototype.interpolateShape = interpolateShape; | |
| 6794 | - ShapeProperty.prototype.getValue = processEffectsSequence; | |
| 6795 | - ShapeProperty.prototype.setVValue = setVValue; | |
| 6796 | - ShapeProperty.prototype.addEffect = addEffect; | |
| 6797 | - function KeyframedShapeProperty(elem, data, type) { | |
| 6798 | - this.propType = 'shape'; | |
| 6799 | - this.comp = elem.comp; | |
| 6800 | - this.elem = elem; | |
| 6801 | - this.container = elem; | |
| 6802 | - this.offsetTime = elem.data.st; | |
| 6803 | - this.keyframes = type === 3 ? data.pt.k : data.ks.k; | |
| 6804 | - this.keyframesMetadata = []; | |
| 6805 | - this.k = true; | |
| 6806 | - this.kf = true; | |
| 6807 | - var len = this.keyframes[0].s[0].i.length; | |
| 6808 | - this.v = shapePool.newElement(); | |
| 6809 | - this.v.setPathData(this.keyframes[0].s[0].c, len); | |
| 6810 | - this.pv = shapePool.clone(this.v); | |
| 6811 | - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 6812 | - this.paths = this.localShapeCollection; | |
| 6813 | - this.paths.addShape(this.v); | |
| 6814 | - this.lastFrame = initFrame; | |
| 6815 | - this.reset = resetShape; | |
| 6816 | - this._caching = { | |
| 6817 | - lastFrame: initFrame, | |
| 6818 | - lastIndex: 0 | |
| 6819 | - }; | |
| 6820 | - this.effectsSequence = [interpolateShapeCurrentTime.bind(this)]; | |
| 6821 | - } | |
| 6822 | - KeyframedShapeProperty.prototype.getValue = processEffectsSequence; | |
| 6823 | - KeyframedShapeProperty.prototype.interpolateShape = interpolateShape; | |
| 6824 | - KeyframedShapeProperty.prototype.setVValue = setVValue; | |
| 6825 | - KeyframedShapeProperty.prototype.addEffect = addEffect; | |
| 6826 | - var EllShapeProperty = function () { | |
| 6827 | - var cPoint = roundCorner; | |
| 6828 | - function EllShapePropertyFactory(elem, data) { | |
| 6829 | - this.v = shapePool.newElement(); | |
| 6830 | - this.v.setPathData(true, 4); | |
| 6831 | - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 6832 | - this.paths = this.localShapeCollection; | |
| 6833 | - this.localShapeCollection.addShape(this.v); | |
| 6834 | - this.d = data.d; | |
| 6835 | - this.elem = elem; | |
| 6836 | - this.comp = elem.comp; | |
| 6837 | - this.frameId = -1; | |
| 6838 | - this.initDynamicPropertyContainer(elem); | |
| 6839 | - this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); | |
| 6840 | - this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this); | |
| 6841 | - if (this.dynamicProperties.length) { | |
| 6842 | - this.k = true; | |
| 6843 | - } else { | |
| 6844 | - this.k = false; | |
| 6845 | - this.convertEllToPath(); | |
| 6846 | - } | |
| 6847 | - } | |
| 6848 | - EllShapePropertyFactory.prototype = { | |
| 6849 | - reset: resetShape, | |
| 6850 | - getValue: function getValue() { | |
| 6851 | - if (this.elem.globalData.frameId === this.frameId) { | |
| 6852 | - return; | |
| 6853 | - } | |
| 6854 | - this.frameId = this.elem.globalData.frameId; | |
| 6855 | - this.iterateDynamicProperties(); | |
| 6856 | - if (this._mdf) { | |
| 6857 | - this.convertEllToPath(); | |
| 6858 | - } | |
| 6859 | - }, | |
| 6860 | - convertEllToPath: function convertEllToPath() { | |
| 6861 | - var p0 = this.p.v[0]; | |
| 6862 | - var p1 = this.p.v[1]; | |
| 6863 | - var s0 = this.s.v[0] / 2; | |
| 6864 | - var s1 = this.s.v[1] / 2; | |
| 6865 | - var _cw = this.d !== 3; | |
| 6866 | - var _v = this.v; | |
| 6867 | - _v.v[0][0] = p0; | |
| 6868 | - _v.v[0][1] = p1 - s1; | |
| 6869 | - _v.v[1][0] = _cw ? p0 + s0 : p0 - s0; | |
| 6870 | - _v.v[1][1] = p1; | |
| 6871 | - _v.v[2][0] = p0; | |
| 6872 | - _v.v[2][1] = p1 + s1; | |
| 6873 | - _v.v[3][0] = _cw ? p0 - s0 : p0 + s0; | |
| 6874 | - _v.v[3][1] = p1; | |
| 6875 | - _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; | |
| 6876 | - _v.i[0][1] = p1 - s1; | |
| 6877 | - _v.i[1][0] = _cw ? p0 + s0 : p0 - s0; | |
| 6878 | - _v.i[1][1] = p1 - s1 * cPoint; | |
| 6879 | - _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; | |
| 6880 | - _v.i[2][1] = p1 + s1; | |
| 6881 | - _v.i[3][0] = _cw ? p0 - s0 : p0 + s0; | |
| 6882 | - _v.i[3][1] = p1 + s1 * cPoint; | |
| 6883 | - _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; | |
| 6884 | - _v.o[0][1] = p1 - s1; | |
| 6885 | - _v.o[1][0] = _cw ? p0 + s0 : p0 - s0; | |
| 6886 | - _v.o[1][1] = p1 + s1 * cPoint; | |
| 6887 | - _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; | |
| 6888 | - _v.o[2][1] = p1 + s1; | |
| 6889 | - _v.o[3][0] = _cw ? p0 - s0 : p0 + s0; | |
| 6890 | - _v.o[3][1] = p1 - s1 * cPoint; | |
| 6891 | - } | |
| 6892 | - }; | |
| 6893 | - extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory); | |
| 6894 | - return EllShapePropertyFactory; | |
| 6895 | - }(); | |
| 6896 | - var StarShapeProperty = function () { | |
| 6897 | - function StarShapePropertyFactory(elem, data) { | |
| 6898 | - this.v = shapePool.newElement(); | |
| 6899 | - this.v.setPathData(true, 0); | |
| 6900 | - this.elem = elem; | |
| 6901 | - this.comp = elem.comp; | |
| 6902 | - this.data = data; | |
| 6903 | - this.frameId = -1; | |
| 6904 | - this.d = data.d; | |
| 6905 | - this.initDynamicPropertyContainer(elem); | |
| 6906 | - if (data.sy === 1) { | |
| 6907 | - this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this); | |
| 6908 | - this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this); | |
| 6909 | - this.convertToPath = this.convertStarToPath; | |
| 6910 | - } else { | |
| 6911 | - this.convertToPath = this.convertPolygonToPath; | |
| 6912 | - } | |
| 6913 | - this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this); | |
| 6914 | - this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); | |
| 6915 | - this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this); | |
| 6916 | - this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this); | |
| 6917 | - this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this); | |
| 6918 | - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 6919 | - this.localShapeCollection.addShape(this.v); | |
| 6920 | - this.paths = this.localShapeCollection; | |
| 6921 | - if (this.dynamicProperties.length) { | |
| 6922 | - this.k = true; | |
| 6923 | - } else { | |
| 6924 | - this.k = false; | |
| 6925 | - this.convertToPath(); | |
| 6926 | - } | |
| 6927 | - } | |
| 6928 | - StarShapePropertyFactory.prototype = { | |
| 6929 | - reset: resetShape, | |
| 6930 | - getValue: function getValue() { | |
| 6931 | - if (this.elem.globalData.frameId === this.frameId) { | |
| 6932 | - return; | |
| 6933 | - } | |
| 6934 | - this.frameId = this.elem.globalData.frameId; | |
| 6935 | - this.iterateDynamicProperties(); | |
| 6936 | - if (this._mdf) { | |
| 6937 | - this.convertToPath(); | |
| 6938 | - } | |
| 6939 | - }, | |
| 6940 | - convertStarToPath: function convertStarToPath() { | |
| 6941 | - var numPts = Math.floor(this.pt.v) * 2; | |
| 6942 | - var angle = Math.PI * 2 / numPts; | |
| 6943 | - /* this.v.v.length = numPts; | |
| 6944 | - this.v.i.length = numPts; | |
| 6945 | - this.v.o.length = numPts; */ | |
| 6946 | - var longFlag = true; | |
| 6947 | - var longRad = this.or.v; | |
| 6948 | - var shortRad = this.ir.v; | |
| 6949 | - var longRound = this.os.v; | |
| 6950 | - var shortRound = this.is.v; | |
| 6951 | - var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2); | |
| 6952 | - var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2); | |
| 6953 | - var i; | |
| 6954 | - var rad; | |
| 6955 | - var roundness; | |
| 6956 | - var perimSegment; | |
| 6957 | - var currentAng = -Math.PI / 2; | |
| 6958 | - currentAng += this.r.v; | |
| 6959 | - var dir = this.data.d === 3 ? -1 : 1; | |
| 6960 | - this.v._length = 0; | |
| 6961 | - for (i = 0; i < numPts; i += 1) { | |
| 6962 | - rad = longFlag ? longRad : shortRad; | |
| 6963 | - roundness = longFlag ? longRound : shortRound; | |
| 6964 | - perimSegment = longFlag ? longPerimSegment : shortPerimSegment; | |
| 6965 | - var x = rad * Math.cos(currentAng); | |
| 6966 | - var y = rad * Math.sin(currentAng); | |
| 6967 | - var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y); | |
| 6968 | - var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y); | |
| 6969 | - x += +this.p.v[0]; | |
| 6970 | - y += +this.p.v[1]; | |
| 6971 | - 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); | |
| 6972 | - | |
| 6973 | - /* this.v.v[i] = [x,y]; | |
| 6974 | - this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir]; | |
| 6975 | - this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir]; | |
| 6976 | - this.v._length = numPts; */ | |
| 6977 | - longFlag = !longFlag; | |
| 6978 | - currentAng += angle * dir; | |
| 6979 | - } | |
| 6980 | - }, | |
| 6981 | - convertPolygonToPath: function convertPolygonToPath() { | |
| 6982 | - var numPts = Math.floor(this.pt.v); | |
| 6983 | - var angle = Math.PI * 2 / numPts; | |
| 6984 | - var rad = this.or.v; | |
| 6985 | - var roundness = this.os.v; | |
| 6986 | - var perimSegment = 2 * Math.PI * rad / (numPts * 4); | |
| 6987 | - var i; | |
| 6988 | - var currentAng = -Math.PI * 0.5; | |
| 6989 | - var dir = this.data.d === 3 ? -1 : 1; | |
| 6990 | - currentAng += this.r.v; | |
| 6991 | - this.v._length = 0; | |
| 6992 | - for (i = 0; i < numPts; i += 1) { | |
| 6993 | - var x = rad * Math.cos(currentAng); | |
| 6994 | - var y = rad * Math.sin(currentAng); | |
| 6995 | - var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y); | |
| 6996 | - var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y); | |
| 6997 | - x += +this.p.v[0]; | |
| 6998 | - y += +this.p.v[1]; | |
| 6999 | - 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); | |
| 7000 | - currentAng += angle * dir; | |
| 7001 | - } | |
| 7002 | - this.paths.length = 0; | |
| 7003 | - this.paths[0] = this.v; | |
| 7004 | - } | |
| 7005 | - }; | |
| 7006 | - extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory); | |
| 7007 | - return StarShapePropertyFactory; | |
| 7008 | - }(); | |
| 7009 | - var RectShapeProperty = function () { | |
| 7010 | - function RectShapePropertyFactory(elem, data) { | |
| 7011 | - this.v = shapePool.newElement(); | |
| 7012 | - this.v.c = true; | |
| 7013 | - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); | |
| 7014 | - this.localShapeCollection.addShape(this.v); | |
| 7015 | - this.paths = this.localShapeCollection; | |
| 7016 | - this.elem = elem; | |
| 7017 | - this.comp = elem.comp; | |
| 7018 | - this.frameId = -1; | |
| 7019 | - this.d = data.d; | |
| 7020 | - this.initDynamicPropertyContainer(elem); | |
| 7021 | - this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); | |
| 7022 | - this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this); | |
| 7023 | - this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this); | |
| 7024 | - if (this.dynamicProperties.length) { | |
| 7025 | - this.k = true; | |
| 7026 | - } else { | |
| 7027 | - this.k = false; | |
| 7028 | - this.convertRectToPath(); | |
| 7029 | - } | |
| 7030 | - } | |
| 7031 | - RectShapePropertyFactory.prototype = { | |
| 7032 | - convertRectToPath: function convertRectToPath() { | |
| 7033 | - var p0 = this.p.v[0]; | |
| 7034 | - var p1 = this.p.v[1]; | |
| 7035 | - var v0 = this.s.v[0] / 2; | |
| 7036 | - var v1 = this.s.v[1] / 2; | |
| 7037 | - var round = bmMin(v0, v1, this.r.v); | |
| 7038 | - var cPoint = round * (1 - roundCorner); | |
| 7039 | - this.v._length = 0; | |
| 7040 | - if (this.d === 2 || this.d === 1) { | |
| 7041 | - this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true); | |
| 7042 | - this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true); | |
| 7043 | - if (round !== 0) { | |
| 7044 | - this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true); | |
| 7045 | - this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true); | |
| 7046 | - this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true); | |
| 7047 | - this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true); | |
| 7048 | - this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true); | |
| 7049 | - this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true); | |
| 7050 | - } else { | |
| 7051 | - this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2); | |
| 7052 | - this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3); | |
| 7053 | - } | |
| 7054 | - } else { | |
| 7055 | - this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true); | |
| 7056 | - if (round !== 0) { | |
| 7057 | - this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true); | |
| 7058 | - this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true); | |
| 7059 | - this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true); | |
| 7060 | - this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true); | |
| 7061 | - this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true); | |
| 7062 | - this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true); | |
| 7063 | - this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true); | |
| 7064 | - } else { | |
| 7065 | - this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true); | |
| 7066 | - this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true); | |
| 7067 | - this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true); | |
| 7068 | - } | |
| 7069 | - } | |
| 7070 | - }, | |
| 7071 | - getValue: function getValue() { | |
| 7072 | - if (this.elem.globalData.frameId === this.frameId) { | |
| 7073 | - return; | |
| 7074 | - } | |
| 7075 | - this.frameId = this.elem.globalData.frameId; | |
| 7076 | - this.iterateDynamicProperties(); | |
| 7077 | - if (this._mdf) { | |
| 7078 | - this.convertRectToPath(); | |
| 7079 | - } | |
| 7080 | - }, | |
| 7081 | - reset: resetShape | |
| 7082 | - }; | |
| 7083 | - extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory); | |
| 7084 | - return RectShapePropertyFactory; | |
| 7085 | - }(); | |
| 7086 | - function getShapeProp(elem, data, type) { | |
| 7087 | - var prop; | |
| 7088 | - if (type === 3 || type === 4) { | |
| 7089 | - var dataProp = type === 3 ? data.pt : data.ks; | |
| 7090 | - var keys = dataProp.k; | |
| 7091 | - if (keys.length) { | |
| 7092 | - prop = new KeyframedShapeProperty(elem, data, type); | |
| 7093 | - } else { | |
| 7094 | - prop = new ShapeProperty(elem, data, type); | |
| 7095 | - } | |
| 7096 | - } else if (type === 5) { | |
| 7097 | - prop = new RectShapeProperty(elem, data); | |
| 7098 | - } else if (type === 6) { | |
| 7099 | - prop = new EllShapeProperty(elem, data); | |
| 7100 | - } else if (type === 7) { | |
| 7101 | - prop = new StarShapeProperty(elem, data); | |
| 7102 | - } | |
| 7103 | - if (prop.k) { | |
| 7104 | - elem.addDynamicProperty(prop); | |
| 7105 | - } | |
| 7106 | - return prop; | |
| 7107 | - } | |
| 7108 | - function getConstructorFunction() { | |
| 7109 | - return ShapeProperty; | |
| 7110 | - } | |
| 7111 | - function getKeyframedConstructorFunction() { | |
| 7112 | - return KeyframedShapeProperty; | |
| 7113 | - } | |
| 7114 | - var ob = {}; | |
| 7115 | - ob.getShapeProp = getShapeProp; | |
| 7116 | - ob.getConstructorFunction = getConstructorFunction; | |
| 7117 | - ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction; | |
| 7118 | - return ob; | |
| 7119 | - }(); | |
| 7120 | - | |
| 7121 | - /*! | |
| 7122 | - Transformation Matrix v2.0 | |
| 7123 | - (c) Epistemex 2014-2015 | |
| 7124 | - www.epistemex.com | |
| 7125 | - By Ken Fyrstenberg | |
| 7126 | - Contributions by leeoniya. | |
| 7127 | - License: MIT, header required. | |
| 7128 | - */ | |
| 7129 | - | |
| 7130 | - /** | |
| 7131 | - * 2D transformation matrix object initialized with identity matrix. | |
| 7132 | - * | |
| 7133 | - * The matrix can synchronize a canvas context by supplying the context | |
| 7134 | - * as an argument, or later apply current absolute transform to an | |
| 7135 | - * existing context. | |
| 7136 | - * | |
| 7137 | - * All values are handled as floating point values. | |
| 7138 | - * | |
| 7139 | - * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix | |
| 7140 | - * @prop {number} a - scale x | |
| 7141 | - * @prop {number} b - shear y | |
| 7142 | - * @prop {number} c - shear x | |
| 7143 | - * @prop {number} d - scale y | |
| 7144 | - * @prop {number} e - translate x | |
| 7145 | - * @prop {number} f - translate y | |
| 7146 | - * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context | |
| 7147 | - * @constructor | |
| 7148 | - */ | |
| 7149 | - | |
| 7150 | - var Matrix = function () { | |
| 7151 | - var _cos = Math.cos; | |
| 7152 | - var _sin = Math.sin; | |
| 7153 | - var _tan = Math.tan; | |
| 7154 | - var _rnd = Math.round; | |
| 7155 | - function reset() { | |
| 7156 | - this.props[0] = 1; | |
| 7157 | - this.props[1] = 0; | |
| 7158 | - this.props[2] = 0; | |
| 7159 | - this.props[3] = 0; | |
| 7160 | - this.props[4] = 0; | |
| 7161 | - this.props[5] = 1; | |
| 7162 | - this.props[6] = 0; | |
| 7163 | - this.props[7] = 0; | |
| 7164 | - this.props[8] = 0; | |
| 7165 | - this.props[9] = 0; | |
| 7166 | - this.props[10] = 1; | |
| 7167 | - this.props[11] = 0; | |
| 7168 | - this.props[12] = 0; | |
| 7169 | - this.props[13] = 0; | |
| 7170 | - this.props[14] = 0; | |
| 7171 | - this.props[15] = 1; | |
| 7172 | - return this; | |
| 7173 | - } | |
| 7174 | - function rotate(angle) { | |
| 7175 | - if (angle === 0) { | |
| 7176 | - return this; | |
| 7177 | - } | |
| 7178 | - var mCos = _cos(angle); | |
| 7179 | - var mSin = _sin(angle); | |
| 7180 | - return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); | |
| 7181 | - } | |
| 7182 | - function rotateX(angle) { | |
| 7183 | - if (angle === 0) { | |
| 7184 | - return this; | |
| 7185 | - } | |
| 7186 | - var mCos = _cos(angle); | |
| 7187 | - var mSin = _sin(angle); | |
| 7188 | - return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1); | |
| 7189 | - } | |
| 7190 | - function rotateY(angle) { | |
| 7191 | - if (angle === 0) { | |
| 7192 | - return this; | |
| 7193 | - } | |
| 7194 | - var mCos = _cos(angle); | |
| 7195 | - var mSin = _sin(angle); | |
| 7196 | - return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1); | |
| 7197 | - } | |
| 7198 | - function rotateZ(angle) { | |
| 7199 | - if (angle === 0) { | |
| 7200 | - return this; | |
| 7201 | - } | |
| 7202 | - var mCos = _cos(angle); | |
| 7203 | - var mSin = _sin(angle); | |
| 7204 | - return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); | |
| 7205 | - } | |
| 7206 | - function shear(sx, sy) { | |
| 7207 | - return this._t(1, sy, sx, 1, 0, 0); | |
| 7208 | - } | |
| 7209 | - function skew(ax, ay) { | |
| 7210 | - return this.shear(_tan(ax), _tan(ay)); | |
| 7211 | - } | |
| 7212 | - function skewFromAxis(ax, angle) { | |
| 7213 | - var mCos = _cos(angle); | |
| 7214 | - var mSin = _sin(angle); | |
| 7215 | - 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); | |
| 7216 | - // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0); | |
| 7217 | - } | |
| 7218 | - function scale(sx, sy, sz) { | |
| 7219 | - if (!sz && sz !== 0) { | |
| 7220 | - sz = 1; | |
| 7221 | - } | |
| 7222 | - if (sx === 1 && sy === 1 && sz === 1) { | |
| 7223 | - return this; | |
| 7224 | - } | |
| 7225 | - return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1); | |
| 7226 | - } | |
| 7227 | - function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) { | |
| 7228 | - this.props[0] = a; | |
| 7229 | - this.props[1] = b; | |
| 7230 | - this.props[2] = c; | |
| 7231 | - this.props[3] = d; | |
| 7232 | - this.props[4] = e; | |
| 7233 | - this.props[5] = f; | |
| 7234 | - this.props[6] = g; | |
| 7235 | - this.props[7] = h; | |
| 7236 | - this.props[8] = i; | |
| 7237 | - this.props[9] = j; | |
| 7238 | - this.props[10] = k; | |
| 7239 | - this.props[11] = l; | |
| 7240 | - this.props[12] = m; | |
| 7241 | - this.props[13] = n; | |
| 7242 | - this.props[14] = o; | |
| 7243 | - this.props[15] = p; | |
| 7244 | - return this; | |
| 7245 | - } | |
| 7246 | - function translate(tx, ty, tz) { | |
| 7247 | - tz = tz || 0; | |
| 7248 | - if (tx !== 0 || ty !== 0 || tz !== 0) { | |
| 7249 | - return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1); | |
| 7250 | - } | |
| 7251 | - return this; | |
| 7252 | - } | |
| 7253 | - function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) { | |
| 7254 | - var _p = this.props; | |
| 7255 | - 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) { | |
| 7256 | - // NOTE: commenting this condition because TurboFan deoptimizes code when present | |
| 7257 | - // if(m2 !== 0 || n2 !== 0 || o2 !== 0){ | |
| 7258 | - _p[12] = _p[12] * a2 + _p[15] * m2; | |
| 7259 | - _p[13] = _p[13] * f2 + _p[15] * n2; | |
| 7260 | - _p[14] = _p[14] * k2 + _p[15] * o2; | |
| 7261 | - _p[15] *= p2; | |
| 7262 | - // } | |
| 7263 | - this._identityCalculated = false; | |
| 7264 | - return this; | |
| 7265 | - } | |
| 7266 | - var a1 = _p[0]; | |
| 7267 | - var b1 = _p[1]; | |
| 7268 | - var c1 = _p[2]; | |
| 7269 | - var d1 = _p[3]; | |
| 7270 | - var e1 = _p[4]; | |
| 7271 | - var f1 = _p[5]; | |
| 7272 | - var g1 = _p[6]; | |
| 7273 | - var h1 = _p[7]; | |
| 7274 | - var i1 = _p[8]; | |
| 7275 | - var j1 = _p[9]; | |
| 7276 | - var k1 = _p[10]; | |
| 7277 | - var l1 = _p[11]; | |
| 7278 | - var m1 = _p[12]; | |
| 7279 | - var n1 = _p[13]; | |
| 7280 | - var o1 = _p[14]; | |
| 7281 | - var p1 = _p[15]; | |
| 7282 | - | |
| 7283 | - /* matrix order (canvas compatible): | |
| 7284 | - * ace | |
| 7285 | - * bdf | |
| 7286 | - * 001 | |
| 7287 | - */ | |
| 7288 | - _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2; | |
| 7289 | - _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2; | |
| 7290 | - _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2; | |
| 7291 | - _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2; | |
| 7292 | - _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2; | |
| 7293 | - _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2; | |
| 7294 | - _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2; | |
| 7295 | - _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2; | |
| 7296 | - _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2; | |
| 7297 | - _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2; | |
| 7298 | - _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2; | |
| 7299 | - _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2; | |
| 7300 | - _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2; | |
| 7301 | - _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2; | |
| 7302 | - _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2; | |
| 7303 | - _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2; | |
| 7304 | - this._identityCalculated = false; | |
| 7305 | - return this; | |
| 7306 | - } | |
| 7307 | - function multiply(matrix) { | |
| 7308 | - var matrixProps = matrix.props; | |
| 7309 | - 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]); | |
| 7310 | - } | |
| 7311 | - function isIdentity() { | |
| 7312 | - if (!this._identityCalculated) { | |
| 7313 | - 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); | |
| 7314 | - this._identityCalculated = true; | |
| 7315 | - } | |
| 7316 | - return this._identity; | |
| 7317 | - } | |
| 7318 | - function equals(matr) { | |
| 7319 | - var i = 0; | |
| 7320 | - while (i < 16) { | |
| 7321 | - if (matr.props[i] !== this.props[i]) { | |
| 7322 | - return false; | |
| 7323 | - } | |
| 7324 | - i += 1; | |
| 7325 | - } | |
| 7326 | - return true; | |
| 7327 | - } | |
| 7328 | - function clone(matr) { | |
| 7329 | - var i; | |
| 7330 | - for (i = 0; i < 16; i += 1) { | |
| 7331 | - matr.props[i] = this.props[i]; | |
| 7332 | - } | |
| 7333 | - return matr; | |
| 7334 | - } | |
| 7335 | - function cloneFromProps(props) { | |
| 7336 | - var i; | |
| 7337 | - for (i = 0; i < 16; i += 1) { | |
| 7338 | - this.props[i] = props[i]; | |
| 7339 | - } | |
| 7340 | - } | |
| 7341 | - function applyToPoint(x, y, z) { | |
| 7342 | - return { | |
| 7343 | - x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], | |
| 7344 | - y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], | |
| 7345 | - z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14] | |
| 7346 | - }; | |
| 7347 | - /* return { | |
| 7348 | - x: x * me.a + y * me.c + me.e, | |
| 7349 | - y: x * me.b + y * me.d + me.f | |
| 7350 | - }; */ | |
| 7351 | - } | |
| 7352 | - function applyToX(x, y, z) { | |
| 7353 | - return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12]; | |
| 7354 | - } | |
| 7355 | - function applyToY(x, y, z) { | |
| 7356 | - return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13]; | |
| 7357 | - } | |
| 7358 | - function applyToZ(x, y, z) { | |
| 7359 | - return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]; | |
| 7360 | - } | |
| 7361 | - function getInverseMatrix() { | |
| 7362 | - var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4]; | |
| 7363 | - var a = this.props[5] / determinant; | |
| 7364 | - var b = -this.props[1] / determinant; | |
| 7365 | - var c = -this.props[4] / determinant; | |
| 7366 | - var d = this.props[0] / determinant; | |
| 7367 | - var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant; | |
| 7368 | - var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant; | |
| 7369 | - var inverseMatrix = new Matrix(); | |
| 7370 | - inverseMatrix.props[0] = a; | |
| 7371 | - inverseMatrix.props[1] = b; | |
| 7372 | - inverseMatrix.props[4] = c; | |
| 7373 | - inverseMatrix.props[5] = d; | |
| 7374 | - inverseMatrix.props[12] = e; | |
| 7375 | - inverseMatrix.props[13] = f; | |
| 7376 | - return inverseMatrix; | |
| 7377 | - } | |
| 7378 | - function inversePoint(pt) { | |
| 7379 | - var inverseMatrix = this.getInverseMatrix(); | |
| 7380 | - return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0); | |
| 7381 | - } | |
| 7382 | - function inversePoints(pts) { | |
| 7383 | - var i; | |
| 7384 | - var len = pts.length; | |
| 7385 | - var retPts = []; | |
| 7386 | - for (i = 0; i < len; i += 1) { | |
| 7387 | - retPts[i] = inversePoint(pts[i]); | |
| 7388 | - } | |
| 7389 | - return retPts; | |
| 7390 | - } | |
| 7391 | - function applyToTriplePoints(pt1, pt2, pt3) { | |
| 7392 | - var arr = createTypedArray('float32', 6); | |
| 7393 | - if (this.isIdentity()) { | |
| 7394 | - arr[0] = pt1[0]; | |
| 7395 | - arr[1] = pt1[1]; | |
| 7396 | - arr[2] = pt2[0]; | |
| 7397 | - arr[3] = pt2[1]; | |
| 7398 | - arr[4] = pt3[0]; | |
| 7399 | - arr[5] = pt3[1]; | |
| 7400 | - } else { | |
| 7401 | - var p0 = this.props[0]; | |
| 7402 | - var p1 = this.props[1]; | |
| 7403 | - var p4 = this.props[4]; | |
| 7404 | - var p5 = this.props[5]; | |
| 7405 | - var p12 = this.props[12]; | |
| 7406 | - var p13 = this.props[13]; | |
| 7407 | - arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12; | |
| 7408 | - arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13; | |
| 7409 | - arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12; | |
| 7410 | - arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13; | |
| 7411 | - arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12; | |
| 7412 | - arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13; | |
| 7413 | - } | |
| 7414 | - return arr; | |
| 7415 | - } | |
| 7416 | - function applyToPointArray(x, y, z) { | |
| 7417 | - var arr; | |
| 7418 | - if (this.isIdentity()) { | |
| 7419 | - arr = [x, y, z]; | |
| 7420 | - } else { | |
| 7421 | - arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]]; | |
| 7422 | - } | |
| 7423 | - return arr; | |
| 7424 | - } | |
| 7425 | - function applyToPointStringified(x, y) { | |
| 7426 | - if (this.isIdentity()) { | |
| 7427 | - return x + ',' + y; | |
| 7428 | - } | |
| 7429 | - var _p = this.props; | |
| 7430 | - 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; | |
| 7431 | - } | |
| 7432 | - function toCSS() { | |
| 7433 | - // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed. | |
| 7434 | - /* if(this.isIdentity()) { | |
| 7435 | - return ''; | |
| 7436 | - } */ | |
| 7437 | - var i = 0; | |
| 7438 | - var props = this.props; | |
| 7439 | - var cssValue = 'matrix3d('; | |
| 7440 | - var v = 10000; | |
| 7441 | - while (i < 16) { | |
| 7442 | - cssValue += _rnd(props[i] * v) / v; | |
| 7443 | - cssValue += i === 15 ? ')' : ','; | |
| 7444 | - i += 1; | |
| 7445 | - } | |
| 7446 | - return cssValue; | |
| 7447 | - } | |
| 7448 | - function roundMatrixProperty(val) { | |
| 7449 | - var v = 10000; | |
| 7450 | - if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) { | |
| 7451 | - return _rnd(val * v) / v; | |
| 7452 | - } | |
| 7453 | - return val; | |
| 7454 | - } | |
| 7455 | - function to2dCSS() { | |
| 7456 | - // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed. | |
| 7457 | - /* if(this.isIdentity()) { | |
| 7458 | - return ''; | |
| 7459 | - } */ | |
| 7460 | - var props = this.props; | |
| 7461 | - var _a = roundMatrixProperty(props[0]); | |
| 7462 | - var _b = roundMatrixProperty(props[1]); | |
| 7463 | - var _c = roundMatrixProperty(props[4]); | |
| 7464 | - var _d = roundMatrixProperty(props[5]); | |
| 7465 | - var _e = roundMatrixProperty(props[12]); | |
| 7466 | - var _f = roundMatrixProperty(props[13]); | |
| 7467 | - return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')'; | |
| 7468 | - } | |
| 7469 | - return function () { | |
| 7470 | - this.reset = reset; | |
| 7471 | - this.rotate = rotate; | |
| 7472 | - this.rotateX = rotateX; | |
| 7473 | - this.rotateY = rotateY; | |
| 7474 | - this.rotateZ = rotateZ; | |
| 7475 | - this.skew = skew; | |
| 7476 | - this.skewFromAxis = skewFromAxis; | |
| 7477 | - this.shear = shear; | |
| 7478 | - this.scale = scale; | |
| 7479 | - this.setTransform = setTransform; | |
| 7480 | - this.translate = translate; | |
| 7481 | - this.transform = transform; | |
| 7482 | - this.multiply = multiply; | |
| 7483 | - this.applyToPoint = applyToPoint; | |
| 7484 | - this.applyToX = applyToX; | |
| 7485 | - this.applyToY = applyToY; | |
| 7486 | - this.applyToZ = applyToZ; | |
| 7487 | - this.applyToPointArray = applyToPointArray; | |
| 7488 | - this.applyToTriplePoints = applyToTriplePoints; | |
| 7489 | - this.applyToPointStringified = applyToPointStringified; | |
| 7490 | - this.toCSS = toCSS; | |
| 7491 | - this.to2dCSS = to2dCSS; | |
| 7492 | - this.clone = clone; | |
| 7493 | - this.cloneFromProps = cloneFromProps; | |
| 7494 | - this.equals = equals; | |
| 7495 | - this.inversePoints = inversePoints; | |
| 7496 | - this.inversePoint = inversePoint; | |
| 7497 | - this.getInverseMatrix = getInverseMatrix; | |
| 7498 | - this._t = this.transform; | |
| 7499 | - this.isIdentity = isIdentity; | |
| 7500 | - this._identity = true; | |
| 7501 | - this._identityCalculated = false; | |
| 7502 | - this.props = createTypedArray('float32', 16); | |
| 7503 | - this.reset(); | |
| 7504 | - }; | |
| 7505 | - }(); | |
| 7506 | - | |
| 7507 | - function _typeof$3(o) { "@babel/helpers - typeof"; return _typeof$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$3(o); } | |
| 7508 | - var lottie = {}; | |
| 7509 | - var standalone = '__[STANDALONE]__'; | |
| 7510 | - var animationData = '__[ANIMATIONDATA]__'; | |
| 7511 | - var renderer = ''; | |
| 7512 | - function setLocation(href) { | |
| 7513 | - setLocationHref(href); | |
| 7514 | - } | |
| 7515 | - function searchAnimations() { | |
| 7516 | - if (standalone === true) { | |
| 7517 | - animationManager.searchAnimations(animationData, standalone, renderer); | |
| 7518 | - } else { | |
| 7519 | - animationManager.searchAnimations(); | |
| 7520 | - } | |
| 7521 | - } | |
| 7522 | - function setSubframeRendering(flag) { | |
| 7523 | - setSubframeEnabled(flag); | |
| 7524 | - } | |
| 7525 | - function setPrefix(prefix) { | |
| 7526 | - setIdPrefix(prefix); | |
| 7527 | - } | |
| 7528 | - function loadAnimation(params) { | |
| 7529 | - if (standalone === true) { | |
| 7530 | - params.animationData = JSON.parse(animationData); | |
| 7531 | - } | |
| 7532 | - return animationManager.loadAnimation(params); | |
| 7533 | - } | |
| 7534 | - function setQuality(value) { | |
| 7535 | - if (typeof value === 'string') { | |
| 7536 | - switch (value) { | |
| 7537 | - case 'high': | |
| 7538 | - setDefaultCurveSegments(200); | |
| 7539 | - break; | |
| 7540 | - default: | |
| 7541 | - case 'medium': | |
| 7542 | - setDefaultCurveSegments(50); | |
| 7543 | - break; | |
| 7544 | - case 'low': | |
| 7545 | - setDefaultCurveSegments(10); | |
| 7546 | - break; | |
| 7547 | - } | |
| 7548 | - } else if (!isNaN(value) && value > 1) { | |
| 7549 | - setDefaultCurveSegments(value); | |
| 7550 | - } | |
| 7551 | - if (getDefaultCurveSegments() >= 50) { | |
| 7552 | - roundValues(false); | |
| 7553 | - } else { | |
| 7554 | - roundValues(true); | |
| 7555 | - } | |
| 7556 | - } | |
| 7557 | - function inBrowser() { | |
| 7558 | - return typeof navigator !== 'undefined'; | |
| 7559 | - } | |
| 7560 | - function installPlugin(type, plugin) { | |
| 7561 | - if (type === 'expressions') { | |
| 7562 | - setExpressionsPlugin(plugin); | |
| 7563 | - } | |
| 7564 | - } | |
| 7565 | - function getFactory(name) { | |
| 7566 | - switch (name) { | |
| 7567 | - case 'propertyFactory': | |
| 7568 | - return PropertyFactory; | |
| 7569 | - case 'shapePropertyFactory': | |
| 7570 | - return ShapePropertyFactory; | |
| 7571 | - case 'matrix': | |
| 7572 | - return Matrix; | |
| 7573 | - default: | |
| 7574 | - return null; | |
| 7575 | - } | |
| 7576 | - } | |
| 7577 | - lottie.play = animationManager.play; | |
| 7578 | - lottie.pause = animationManager.pause; | |
| 7579 | - lottie.setLocationHref = setLocation; | |
| 7580 | - lottie.togglePause = animationManager.togglePause; | |
| 7581 | - lottie.setSpeed = animationManager.setSpeed; | |
| 7582 | - lottie.setDirection = animationManager.setDirection; | |
| 7583 | - lottie.stop = animationManager.stop; | |
| 7584 | - lottie.searchAnimations = searchAnimations; | |
| 7585 | - lottie.registerAnimation = animationManager.registerAnimation; | |
| 7586 | - lottie.loadAnimation = loadAnimation; | |
| 7587 | - lottie.setSubframeRendering = setSubframeRendering; | |
| 7588 | - lottie.resize = animationManager.resize; | |
| 7589 | - // lottie.start = start; | |
| 7590 | - lottie.goToAndStop = animationManager.goToAndStop; | |
| 7591 | - lottie.destroy = animationManager.destroy; | |
| 7592 | - lottie.setQuality = setQuality; | |
| 7593 | - lottie.inBrowser = inBrowser; | |
| 7594 | - lottie.installPlugin = installPlugin; | |
| 7595 | - lottie.freeze = animationManager.freeze; | |
| 7596 | - lottie.unfreeze = animationManager.unfreeze; | |
| 7597 | - lottie.setVolume = animationManager.setVolume; | |
| 7598 | - lottie.mute = animationManager.mute; | |
| 7599 | - lottie.unmute = animationManager.unmute; | |
| 7600 | - lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations; | |
| 7601 | - lottie.useWebWorker = setWebWorker; | |
| 7602 | - lottie.setIDPrefix = setPrefix; | |
| 7603 | - lottie.__getFactory = getFactory; | |
| 7604 | - lottie.version = '5.13.0'; | |
| 7605 | - function checkReady() { | |
| 7606 | - if (document.readyState === 'complete') { | |
| 7607 | - clearInterval(readyStateCheckInterval); | |
| 7608 | - searchAnimations(); | |
| 7609 | - } | |
| 7610 | - } | |
| 7611 | - function getQueryVariable(variable) { | |
| 7612 | - var vars = queryString.split('&'); | |
| 7613 | - for (var i = 0; i < vars.length; i += 1) { | |
| 7614 | - var pair = vars[i].split('='); | |
| 7615 | - if (decodeURIComponent(pair[0]) == variable) { | |
| 7616 | - // eslint-disable-line eqeqeq | |
| 7617 | - return decodeURIComponent(pair[1]); | |
| 7618 | - } | |
| 7619 | - } | |
| 7620 | - return null; | |
| 7621 | - } | |
| 7622 | - var queryString = ''; | |
| 7623 | - if (standalone) { | |
| 7624 | - var scripts = document.getElementsByTagName('script'); | |
| 7625 | - var index = scripts.length - 1; | |
| 7626 | - var myScript = scripts[index] || { | |
| 7627 | - src: '' | |
| 7628 | - }; | |
| 7629 | - queryString = myScript.src ? myScript.src.replace(/^[^\?]+\??/, '') : ''; // eslint-disable-line no-useless-escape | |
| 7630 | - renderer = getQueryVariable('renderer'); | |
| 7631 | - } | |
| 7632 | - var readyStateCheckInterval = setInterval(checkReady, 100); | |
| 7633 | - | |
| 7634 | - // this adds bodymovin to the window object for backwards compatibility | |
| 7635 | - try { | |
| 7636 | - if (!(( false ? 0 : _typeof$3(exports)) === 'object' && "object" !== 'undefined') && !( true && __webpack_require__.amdO) // eslint-disable-line no-undef | |
| 7637 | - ) // removed by dead control flow | |
| 7638 | -{} | |
| 7639 | - } catch (err) { | |
| 7640 | - // | |
| 7641 | - } | |
| 7642 | - | |
| 7643 | - var ShapeModifiers = function () { | |
| 7644 | - var ob = {}; | |
| 7645 | - var modifiers = {}; | |
| 7646 | - ob.registerModifier = registerModifier; | |
| 7647 | - ob.getModifier = getModifier; | |
| 7648 | - function registerModifier(nm, factory) { | |
| 7649 | - if (!modifiers[nm]) { | |
| 7650 | - modifiers[nm] = factory; | |
| 7651 | - } | |
| 7652 | - } | |
| 7653 | - function getModifier(nm, elem, data) { | |
| 7654 | - return new modifiers[nm](elem, data); | |
| 7655 | - } | |
| 7656 | - return ob; | |
| 7657 | - }(); | |
| 7658 | - function ShapeModifier() {} | |
| 7659 | - ShapeModifier.prototype.initModifierProperties = function () {}; | |
| 7660 | - ShapeModifier.prototype.addShapeToModifier = function () {}; | |
| 7661 | - ShapeModifier.prototype.addShape = function (data) { | |
| 7662 | - if (!this.closed) { | |
| 7663 | - // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick. | |
| 7664 | - data.sh.container.addDynamicProperty(data.sh); | |
| 7665 | - var shapeData = { | |
| 7666 | - shape: data.sh, | |
| 7667 | - data: data, | |
| 7668 | - localShapeCollection: shapeCollectionPool.newShapeCollection() | |
| 7669 | - }; | |
| 7670 | - this.shapes.push(shapeData); | |
| 7671 | - this.addShapeToModifier(shapeData); | |
| 7672 | - if (this._isAnimated) { | |
| 7673 | - data.setAsAnimated(); | |
| 7674 | - } | |
| 7675 | - } | |
| 7676 | - }; | |
| 7677 | - ShapeModifier.prototype.init = function (elem, data) { | |
| 7678 | - this.shapes = []; | |
| 7679 | - this.elem = elem; | |
| 7680 | - this.initDynamicPropertyContainer(elem); | |
| 7681 | - this.initModifierProperties(elem, data); | |
| 7682 | - this.frameId = initialDefaultFrame; | |
| 7683 | - this.closed = false; | |
| 7684 | - this.k = false; | |
| 7685 | - if (this.dynamicProperties.length) { | |
| 7686 | - this.k = true; | |
| 7687 | - } else { | |
| 7688 | - this.getValue(true); | |
| 7689 | - } | |
| 7690 | - }; | |
| 7691 | - ShapeModifier.prototype.processKeys = function () { | |
| 7692 | - if (this.elem.globalData.frameId === this.frameId) { | |
| 7693 | - return; | |
| 7694 | - } | |
| 7695 | - this.frameId = this.elem.globalData.frameId; | |
| 7696 | - this.iterateDynamicProperties(); | |
| 7697 | - }; | |
| 7698 | - extendPrototype([DynamicPropertyContainer], ShapeModifier); | |
| 7699 | - | |
| 7700 | - function TrimModifier() {} | |
| 7701 | - extendPrototype([ShapeModifier], TrimModifier); | |
| 7702 | - TrimModifier.prototype.initModifierProperties = function (elem, data) { | |
| 7703 | - this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this); | |
| 7704 | - this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this); | |
| 7705 | - this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this); | |
| 7706 | - this.sValue = 0; | |
| 7707 | - this.eValue = 0; | |
| 7708 | - this.getValue = this.processKeys; | |
| 7709 | - this.m = data.m; | |
| 7710 | - this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length; | |
| 7711 | - }; | |
| 7712 | - TrimModifier.prototype.addShapeToModifier = function (shapeData) { | |
| 7713 | - shapeData.pathsData = []; | |
| 7714 | - }; | |
| 7715 | - TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) { | |
| 7716 | - var segments = []; | |
| 7717 | - if (e <= 1) { | |
| 7718 | - segments.push({ | |
| 7719 | - s: s, | |
| 7720 | - e: e | |
| 7721 | - }); | |
| 7722 | - } else if (s >= 1) { | |
| 7723 | - segments.push({ | |
| 7724 | - s: s - 1, | |
| 7725 | - e: e - 1 | |
| 7726 | - }); | |
| 7727 | - } else { | |
| 7728 | - segments.push({ | |
| 7729 | - s: s, | |
| 7730 | - e: 1 | |
| 7731 | - }); | |
| 7732 | - segments.push({ | |
| 7733 | - s: 0, | |
| 7734 | - e: e - 1 | |
| 7735 | - }); | |
| 7736 | - } | |
| 7737 | - var shapeSegments = []; | |
| 7738 | - var i; | |
| 7739 | - var len = segments.length; | |
| 7740 | - var segmentOb; | |
| 7741 | - for (i = 0; i < len; i += 1) { | |
| 7742 | - segmentOb = segments[i]; | |
| 7743 | - if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) { | |
| 7744 | - var shapeS; | |
| 7745 | - var shapeE; | |
| 7746 | - if (segmentOb.s * totalModifierLength <= addedLength) { | |
| 7747 | - shapeS = 0; | |
| 7748 | - } else { | |
| 7749 | - shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength; | |
| 7750 | - } | |
| 7751 | - if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) { | |
| 7752 | - shapeE = 1; | |
| 7753 | - } else { | |
| 7754 | - shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength; | |
| 7755 | - } | |
| 7756 | - shapeSegments.push([shapeS, shapeE]); | |
| 7757 | - } | |
| 7758 | - } | |
| 7759 | - if (!shapeSegments.length) { | |
| 7760 | - shapeSegments.push([0, 0]); | |
| 7761 | - } | |
| 7762 | - return shapeSegments; | |
| 7763 | - }; | |
| 7764 | - TrimModifier.prototype.releasePathsData = function (pathsData) { | |
| 7765 | - var i; | |
| 7766 | - var len = pathsData.length; | |
| 7767 | - for (i = 0; i < len; i += 1) { | |
| 7768 | - segmentsLengthPool.release(pathsData[i]); | |
| 7769 | - } | |
| 7770 | - pathsData.length = 0; | |
| 7771 | - return pathsData; | |
| 7772 | - }; | |
| 7773 | - TrimModifier.prototype.processShapes = function (_isFirstFrame) { | |
| 7774 | - var s; | |
| 7775 | - var e; | |
| 7776 | - if (this._mdf || _isFirstFrame) { | |
| 7777 | - var o = this.o.v % 360 / 360; | |
| 7778 | - if (o < 0) { | |
| 7779 | - o += 1; | |
| 7780 | - } | |
| 7781 | - if (this.s.v > 1) { | |
| 7782 | - s = 1 + o; | |
| 7783 | - } else if (this.s.v < 0) { | |
| 7784 | - s = 0 + o; | |
| 7785 | - } else { | |
| 7786 | - s = this.s.v + o; | |
| 7787 | - } | |
| 7788 | - if (this.e.v > 1) { | |
| 7789 | - e = 1 + o; | |
| 7790 | - } else if (this.e.v < 0) { | |
| 7791 | - e = 0 + o; | |
| 7792 | - } else { | |
| 7793 | - e = this.e.v + o; | |
| 7794 | - } | |
| 7795 | - if (s > e) { | |
| 7796 | - var _s = s; | |
| 7797 | - s = e; | |
| 7798 | - e = _s; | |
| 7799 | - } | |
| 7800 | - s = Math.round(s * 10000) * 0.0001; | |
| 7801 | - e = Math.round(e * 10000) * 0.0001; | |
| 7802 | - this.sValue = s; | |
| 7803 | - this.eValue = e; | |
| 7804 | - } else { | |
| 7805 | - s = this.sValue; | |
| 7806 | - e = this.eValue; | |
| 7807 | - } | |
| 7808 | - var shapePaths; | |
| 7809 | - var i; | |
| 7810 | - var len = this.shapes.length; | |
| 7811 | - var j; | |
| 7812 | - var jLen; | |
| 7813 | - var pathsData; | |
| 7814 | - var pathData; | |
| 7815 | - var totalShapeLength; | |
| 7816 | - var totalModifierLength = 0; | |
| 7817 | - if (e === s) { | |
| 7818 | - for (i = 0; i < len; i += 1) { | |
| 7819 | - this.shapes[i].localShapeCollection.releaseShapes(); | |
| 7820 | - this.shapes[i].shape._mdf = true; | |
| 7821 | - this.shapes[i].shape.paths = this.shapes[i].localShapeCollection; | |
| 7822 | - if (this._mdf) { | |
| 7823 | - this.shapes[i].pathsData.length = 0; | |
| 7824 | - } | |
| 7825 | - } | |
| 7826 | - } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) { | |
| 7827 | - var segments = []; | |
| 7828 | - var shapeData; | |
| 7829 | - var localShapeCollection; | |
| 7830 | - for (i = 0; i < len; i += 1) { | |
| 7831 | - shapeData = this.shapes[i]; | |
| 7832 | - // if shape hasn't changed and trim properties haven't changed, cached previous path can be used | |
| 7833 | - if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) { | |
| 7834 | - shapeData.shape.paths = shapeData.localShapeCollection; | |
| 7835 | - } else { | |
| 7836 | - shapePaths = shapeData.shape.paths; | |
| 7837 | - jLen = shapePaths._length; | |
| 7838 | - totalShapeLength = 0; | |
| 7839 | - if (!shapeData.shape._mdf && shapeData.pathsData.length) { | |
| 7840 | - totalShapeLength = shapeData.totalShapeLength; | |
| 7841 | - } else { | |
| 7842 | - pathsData = this.releasePathsData(shapeData.pathsData); | |
| 7843 | - for (j = 0; j < jLen; j += 1) { | |
| 7844 | - pathData = bez.getSegmentsLength(shapePaths.shapes[j]); | |
| 7845 | - pathsData.push(pathData); | |
| 7846 | - totalShapeLength += pathData.totalLength; | |
| 7847 | - } | |
| 7848 | - shapeData.totalShapeLength = totalShapeLength; | |
| 7849 | - shapeData.pathsData = pathsData; | |
| 7850 | - } | |
| 7851 | - totalModifierLength += totalShapeLength; | |
| 7852 | - shapeData.shape._mdf = true; | |
| 7853 | - } | |
| 7854 | - } | |
| 7855 | - var shapeS = s; | |
| 7856 | - var shapeE = e; | |
| 7857 | - var addedLength = 0; | |
| 7858 | - var edges; | |
| 7859 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 7860 | - shapeData = this.shapes[i]; | |
| 7861 | - if (shapeData.shape._mdf) { | |
| 7862 | - localShapeCollection = shapeData.localShapeCollection; | |
| 7863 | - localShapeCollection.releaseShapes(); | |
| 7864 | - // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group | |
| 7865 | - if (this.m === 2 && len > 1) { | |
| 7866 | - edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength); | |
| 7867 | - addedLength += shapeData.totalShapeLength; | |
| 7868 | - } else { | |
| 7869 | - edges = [[shapeS, shapeE]]; | |
| 7870 | - } | |
| 7871 | - jLen = edges.length; | |
| 7872 | - for (j = 0; j < jLen; j += 1) { | |
| 7873 | - shapeS = edges[j][0]; | |
| 7874 | - shapeE = edges[j][1]; | |
| 7875 | - segments.length = 0; | |
| 7876 | - if (shapeE <= 1) { | |
| 7877 | - segments.push({ | |
| 7878 | - s: shapeData.totalShapeLength * shapeS, | |
| 7879 | - e: shapeData.totalShapeLength * shapeE | |
| 7880 | - }); | |
| 7881 | - } else if (shapeS >= 1) { | |
| 7882 | - segments.push({ | |
| 7883 | - s: shapeData.totalShapeLength * (shapeS - 1), | |
| 7884 | - e: shapeData.totalShapeLength * (shapeE - 1) | |
| 7885 | - }); | |
| 7886 | - } else { | |
| 7887 | - segments.push({ | |
| 7888 | - s: shapeData.totalShapeLength * shapeS, | |
| 7889 | - e: shapeData.totalShapeLength | |
| 7890 | - }); | |
| 7891 | - segments.push({ | |
| 7892 | - s: 0, | |
| 7893 | - e: shapeData.totalShapeLength * (shapeE - 1) | |
| 7894 | - }); | |
| 7895 | - } | |
| 7896 | - var newShapesData = this.addShapes(shapeData, segments[0]); | |
| 7897 | - if (segments[0].s !== segments[0].e) { | |
| 7898 | - if (segments.length > 1) { | |
| 7899 | - var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1]; | |
| 7900 | - if (lastShapeInCollection.c) { | |
| 7901 | - var lastShape = newShapesData.pop(); | |
| 7902 | - this.addPaths(newShapesData, localShapeCollection); | |
| 7903 | - newShapesData = this.addShapes(shapeData, segments[1], lastShape); | |
| 7904 | - } else { | |
| 7905 | - this.addPaths(newShapesData, localShapeCollection); | |
| 7906 | - newShapesData = this.addShapes(shapeData, segments[1]); | |
| 7907 | - } | |
| 7908 | - } | |
| 7909 | - this.addPaths(newShapesData, localShapeCollection); | |
| 7910 | - } | |
| 7911 | - } | |
| 7912 | - shapeData.shape.paths = localShapeCollection; | |
| 7913 | - } | |
| 7914 | - } | |
| 7915 | - } else if (this._mdf) { | |
| 7916 | - for (i = 0; i < len; i += 1) { | |
| 7917 | - // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween. | |
| 7918 | - // Don't remove this even if it's losing cached info. | |
| 7919 | - this.shapes[i].pathsData.length = 0; | |
| 7920 | - this.shapes[i].shape._mdf = true; | |
| 7921 | - } | |
| 7922 | - } | |
| 7923 | - }; | |
| 7924 | - TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) { | |
| 7925 | - var i; | |
| 7926 | - var len = newPaths.length; | |
| 7927 | - for (i = 0; i < len; i += 1) { | |
| 7928 | - localShapeCollection.addShape(newPaths[i]); | |
| 7929 | - } | |
| 7930 | - }; | |
| 7931 | - TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) { | |
| 7932 | - shapePath.setXYAt(pt2[0], pt2[1], 'o', pos); | |
| 7933 | - shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1); | |
| 7934 | - if (newShape) { | |
| 7935 | - shapePath.setXYAt(pt1[0], pt1[1], 'v', pos); | |
| 7936 | - } | |
| 7937 | - shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1); | |
| 7938 | - }; | |
| 7939 | - TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) { | |
| 7940 | - shapePath.setXYAt(points[1], points[5], 'o', pos); | |
| 7941 | - shapePath.setXYAt(points[2], points[6], 'i', pos + 1); | |
| 7942 | - if (newShape) { | |
| 7943 | - shapePath.setXYAt(points[0], points[4], 'v', pos); | |
| 7944 | - } | |
| 7945 | - shapePath.setXYAt(points[3], points[7], 'v', pos + 1); | |
| 7946 | - }; | |
| 7947 | - TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) { | |
| 7948 | - var pathsData = shapeData.pathsData; | |
| 7949 | - var shapePaths = shapeData.shape.paths.shapes; | |
| 7950 | - var i; | |
| 7951 | - var len = shapeData.shape.paths._length; | |
| 7952 | - var j; | |
| 7953 | - var jLen; | |
| 7954 | - var addedLength = 0; | |
| 7955 | - var currentLengthData; | |
| 7956 | - var segmentCount; | |
| 7957 | - var lengths; | |
| 7958 | - var segment; | |
| 7959 | - var shapes = []; | |
| 7960 | - var initPos; | |
| 7961 | - var newShape = true; | |
| 7962 | - if (!shapePath) { | |
| 7963 | - shapePath = shapePool.newElement(); | |
| 7964 | - segmentCount = 0; | |
| 7965 | - initPos = 0; | |
| 7966 | - } else { | |
| 7967 | - segmentCount = shapePath._length; | |
| 7968 | - initPos = shapePath._length; | |
| 7969 | - } | |
| 7970 | - shapes.push(shapePath); | |
| 7971 | - for (i = 0; i < len; i += 1) { | |
| 7972 | - lengths = pathsData[i].lengths; | |
| 7973 | - shapePath.c = shapePaths[i].c; | |
| 7974 | - jLen = shapePaths[i].c ? lengths.length : lengths.length + 1; | |
| 7975 | - for (j = 1; j < jLen; j += 1) { | |
| 7976 | - currentLengthData = lengths[j - 1]; | |
| 7977 | - if (addedLength + currentLengthData.addedLength < shapeSegment.s) { | |
| 7978 | - addedLength += currentLengthData.addedLength; | |
| 7979 | - shapePath.c = false; | |
| 7980 | - } else if (addedLength > shapeSegment.e) { | |
| 7981 | - shapePath.c = false; | |
| 7982 | - break; | |
| 7983 | - } else { | |
| 7984 | - if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) { | |
| 7985 | - this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape); | |
| 7986 | - newShape = false; | |
| 7987 | - } else { | |
| 7988 | - 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]); | |
| 7989 | - this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); | |
| 7990 | - // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape); | |
| 7991 | - newShape = false; | |
| 7992 | - shapePath.c = false; | |
| 7993 | - } | |
| 7994 | - addedLength += currentLengthData.addedLength; | |
| 7995 | - segmentCount += 1; | |
| 7996 | - } | |
| 7997 | - } | |
| 7998 | - if (shapePaths[i].c && lengths.length) { | |
| 7999 | - currentLengthData = lengths[j - 1]; | |
| 8000 | - if (addedLength <= shapeSegment.e) { | |
| 8001 | - var segmentLength = lengths[j - 1].addedLength; | |
| 8002 | - if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) { | |
| 8003 | - this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape); | |
| 8004 | - newShape = false; | |
| 8005 | - } else { | |
| 8006 | - 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]); | |
| 8007 | - this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); | |
| 8008 | - // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape); | |
| 8009 | - newShape = false; | |
| 8010 | - shapePath.c = false; | |
| 8011 | - } | |
| 8012 | - } else { | |
| 8013 | - shapePath.c = false; | |
| 8014 | - } | |
| 8015 | - addedLength += currentLengthData.addedLength; | |
| 8016 | - segmentCount += 1; | |
| 8017 | - } | |
| 8018 | - if (shapePath._length) { | |
| 8019 | - shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos); | |
| 8020 | - shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1); | |
| 8021 | - } | |
| 8022 | - if (addedLength > shapeSegment.e) { | |
| 8023 | - break; | |
| 8024 | - } | |
| 8025 | - if (i < len - 1) { | |
| 8026 | - shapePath = shapePool.newElement(); | |
| 8027 | - newShape = true; | |
| 8028 | - shapes.push(shapePath); | |
| 8029 | - segmentCount = 0; | |
| 8030 | - } | |
| 8031 | - } | |
| 8032 | - return shapes; | |
| 8033 | - }; | |
| 8034 | - | |
| 8035 | - function PuckerAndBloatModifier() {} | |
| 8036 | - extendPrototype([ShapeModifier], PuckerAndBloatModifier); | |
| 8037 | - PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) { | |
| 8038 | - this.getValue = this.processKeys; | |
| 8039 | - this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this); | |
| 8040 | - this._isAnimated = !!this.amount.effectsSequence.length; | |
| 8041 | - }; | |
| 8042 | - PuckerAndBloatModifier.prototype.processPath = function (path, amount) { | |
| 8043 | - var percent = amount / 100; | |
| 8044 | - var centerPoint = [0, 0]; | |
| 8045 | - var pathLength = path._length; | |
| 8046 | - var i = 0; | |
| 8047 | - for (i = 0; i < pathLength; i += 1) { | |
| 8048 | - centerPoint[0] += path.v[i][0]; | |
| 8049 | - centerPoint[1] += path.v[i][1]; | |
| 8050 | - } | |
| 8051 | - centerPoint[0] /= pathLength; | |
| 8052 | - centerPoint[1] /= pathLength; | |
| 8053 | - var clonedPath = shapePool.newElement(); | |
| 8054 | - clonedPath.c = path.c; | |
| 8055 | - var vX; | |
| 8056 | - var vY; | |
| 8057 | - var oX; | |
| 8058 | - var oY; | |
| 8059 | - var iX; | |
| 8060 | - var iY; | |
| 8061 | - for (i = 0; i < pathLength; i += 1) { | |
| 8062 | - vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent; | |
| 8063 | - vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent; | |
| 8064 | - oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent; | |
| 8065 | - oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent; | |
| 8066 | - iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent; | |
| 8067 | - iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent; | |
| 8068 | - clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i); | |
| 8069 | - } | |
| 8070 | - return clonedPath; | |
| 8071 | - }; | |
| 8072 | - PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) { | |
| 8073 | - var shapePaths; | |
| 8074 | - var i; | |
| 8075 | - var len = this.shapes.length; | |
| 8076 | - var j; | |
| 8077 | - var jLen; | |
| 8078 | - var amount = this.amount.v; | |
| 8079 | - if (amount !== 0) { | |
| 8080 | - var shapeData; | |
| 8081 | - var localShapeCollection; | |
| 8082 | - for (i = 0; i < len; i += 1) { | |
| 8083 | - shapeData = this.shapes[i]; | |
| 8084 | - localShapeCollection = shapeData.localShapeCollection; | |
| 8085 | - if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { | |
| 8086 | - localShapeCollection.releaseShapes(); | |
| 8087 | - shapeData.shape._mdf = true; | |
| 8088 | - shapePaths = shapeData.shape.paths.shapes; | |
| 8089 | - jLen = shapeData.shape.paths._length; | |
| 8090 | - for (j = 0; j < jLen; j += 1) { | |
| 8091 | - localShapeCollection.addShape(this.processPath(shapePaths[j], amount)); | |
| 8092 | - } | |
| 8093 | - } | |
| 8094 | - shapeData.shape.paths = shapeData.localShapeCollection; | |
| 8095 | - } | |
| 8096 | - } | |
| 8097 | - if (!this.dynamicProperties.length) { | |
| 8098 | - this._mdf = false; | |
| 8099 | - } | |
| 8100 | - }; | |
| 8101 | - | |
| 8102 | - var TransformPropertyFactory = function () { | |
| 8103 | - var defaultVector = [0, 0]; | |
| 8104 | - function applyToMatrix(mat) { | |
| 8105 | - var _mdf = this._mdf; | |
| 8106 | - this.iterateDynamicProperties(); | |
| 8107 | - this._mdf = this._mdf || _mdf; | |
| 8108 | - if (this.a) { | |
| 8109 | - mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); | |
| 8110 | - } | |
| 8111 | - if (this.s) { | |
| 8112 | - mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]); | |
| 8113 | - } | |
| 8114 | - if (this.sk) { | |
| 8115 | - mat.skewFromAxis(-this.sk.v, this.sa.v); | |
| 8116 | - } | |
| 8117 | - if (this.r) { | |
| 8118 | - mat.rotate(-this.r.v); | |
| 8119 | - } else { | |
| 8120 | - 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]); | |
| 8121 | - } | |
| 8122 | - if (this.data.p.s) { | |
| 8123 | - if (this.data.p.z) { | |
| 8124 | - mat.translate(this.px.v, this.py.v, -this.pz.v); | |
| 8125 | - } else { | |
| 8126 | - mat.translate(this.px.v, this.py.v, 0); | |
| 8127 | - } | |
| 8128 | - } else { | |
| 8129 | - mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); | |
| 8130 | - } | |
| 8131 | - } | |
| 8132 | - function processKeys(forceRender) { | |
| 8133 | - if (this.elem.globalData.frameId === this.frameId) { | |
| 8134 | - return; | |
| 8135 | - } | |
| 8136 | - if (this._isDirty) { | |
| 8137 | - this.precalculateMatrix(); | |
| 8138 | - this._isDirty = false; | |
| 8139 | - } | |
| 8140 | - this.iterateDynamicProperties(); | |
| 8141 | - if (this._mdf || forceRender) { | |
| 8142 | - var frameRate; | |
| 8143 | - this.v.cloneFromProps(this.pre.props); | |
| 8144 | - if (this.appliedTransformations < 1) { | |
| 8145 | - this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); | |
| 8146 | - } | |
| 8147 | - if (this.appliedTransformations < 2) { | |
| 8148 | - this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]); | |
| 8149 | - } | |
| 8150 | - if (this.sk && this.appliedTransformations < 3) { | |
| 8151 | - this.v.skewFromAxis(-this.sk.v, this.sa.v); | |
| 8152 | - } | |
| 8153 | - if (this.r && this.appliedTransformations < 4) { | |
| 8154 | - this.v.rotate(-this.r.v); | |
| 8155 | - } else if (!this.r && this.appliedTransformations < 4) { | |
| 8156 | - 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]); | |
| 8157 | - } | |
| 8158 | - if (this.autoOriented) { | |
| 8159 | - var v1; | |
| 8160 | - var v2; | |
| 8161 | - frameRate = this.elem.globalData.frameRate; | |
| 8162 | - if (this.p && this.p.keyframes && this.p.getValueAtTime) { | |
| 8163 | - if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) { | |
| 8164 | - v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0); | |
| 8165 | - v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0); | |
| 8166 | - } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) { | |
| 8167 | - v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0); | |
| 8168 | - v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0); | |
| 8169 | - } else { | |
| 8170 | - v1 = this.p.pv; | |
| 8171 | - v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime); | |
| 8172 | - } | |
| 8173 | - } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) { | |
| 8174 | - v1 = []; | |
| 8175 | - v2 = []; | |
| 8176 | - var px = this.px; | |
| 8177 | - var py = this.py; | |
| 8178 | - if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) { | |
| 8179 | - v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0); | |
| 8180 | - v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0); | |
| 8181 | - v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0); | |
| 8182 | - v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0); | |
| 8183 | - } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) { | |
| 8184 | - v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0); | |
| 8185 | - v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0); | |
| 8186 | - v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0); | |
| 8187 | - v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0); | |
| 8188 | - } else { | |
| 8189 | - v1 = [px.pv, py.pv]; | |
| 8190 | - v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime); | |
| 8191 | - v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime); | |
| 8192 | - } | |
| 8193 | - } else { | |
| 8194 | - v2 = defaultVector; | |
| 8195 | - v1 = v2; | |
| 8196 | - } | |
| 8197 | - this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0])); | |
| 8198 | - } | |
| 8199 | - if (this.data.p && this.data.p.s) { | |
| 8200 | - if (this.data.p.z) { | |
| 8201 | - this.v.translate(this.px.v, this.py.v, -this.pz.v); | |
| 8202 | - } else { | |
| 8203 | - this.v.translate(this.px.v, this.py.v, 0); | |
| 8204 | - } | |
| 8205 | - } else { | |
| 8206 | - this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); | |
| 8207 | - } | |
| 8208 | - } | |
| 8209 | - this.frameId = this.elem.globalData.frameId; | |
| 8210 | - } | |
| 8211 | - function precalculateMatrix() { | |
| 8212 | - this.appliedTransformations = 0; | |
| 8213 | - this.pre.reset(); | |
| 8214 | - if (!this.a.effectsSequence.length) { | |
| 8215 | - this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); | |
| 8216 | - this.appliedTransformations = 1; | |
| 8217 | - } else { | |
| 8218 | - return; | |
| 8219 | - } | |
| 8220 | - if (!this.s.effectsSequence.length) { | |
| 8221 | - this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]); | |
| 8222 | - this.appliedTransformations = 2; | |
| 8223 | - } else { | |
| 8224 | - return; | |
| 8225 | - } | |
| 8226 | - if (this.sk) { | |
| 8227 | - if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) { | |
| 8228 | - this.pre.skewFromAxis(-this.sk.v, this.sa.v); | |
| 8229 | - this.appliedTransformations = 3; | |
| 8230 | - } else { | |
| 8231 | - return; | |
| 8232 | - } | |
| 8233 | - } | |
| 8234 | - if (this.r) { | |
| 8235 | - if (!this.r.effectsSequence.length) { | |
| 8236 | - this.pre.rotate(-this.r.v); | |
| 8237 | - this.appliedTransformations = 4; | |
| 8238 | - } | |
| 8239 | - } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) { | |
| 8240 | - 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]); | |
| 8241 | - this.appliedTransformations = 4; | |
| 8242 | - } | |
| 8243 | - } | |
| 8244 | - function autoOrient() { | |
| 8245 | - // | |
| 8246 | - // var prevP = this.getValueAtTime(); | |
| 8247 | - } | |
| 8248 | - function addDynamicProperty(prop) { | |
| 8249 | - this._addDynamicProperty(prop); | |
| 8250 | - this.elem.addDynamicProperty(prop); | |
| 8251 | - this._isDirty = true; | |
| 8252 | - } | |
| 8253 | - function TransformProperty(elem, data, container) { | |
| 8254 | - this.elem = elem; | |
| 8255 | - this.frameId = -1; | |
| 8256 | - this.propType = 'transform'; | |
| 8257 | - this.data = data; | |
| 8258 | - this.v = new Matrix(); | |
| 8259 | - // Precalculated matrix with non animated properties | |
| 8260 | - this.pre = new Matrix(); | |
| 8261 | - this.appliedTransformations = 0; | |
| 8262 | - this.initDynamicPropertyContainer(container || elem); | |
| 8263 | - if (data.p && data.p.s) { | |
| 8264 | - this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this); | |
| 8265 | - this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this); | |
| 8266 | - if (data.p.z) { | |
| 8267 | - this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this); | |
| 8268 | - } | |
| 8269 | - } else { | |
| 8270 | - this.p = PropertyFactory.getProp(elem, data.p || { | |
| 8271 | - k: [0, 0, 0] | |
| 8272 | - }, 1, 0, this); | |
| 8273 | - } | |
| 8274 | - if (data.rx) { | |
| 8275 | - this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this); | |
| 8276 | - this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this); | |
| 8277 | - this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this); | |
| 8278 | - if (data.or.k[0].ti) { | |
| 8279 | - var i; | |
| 8280 | - var len = data.or.k.length; | |
| 8281 | - for (i = 0; i < len; i += 1) { | |
| 8282 | - data.or.k[i].to = null; | |
| 8283 | - data.or.k[i].ti = null; | |
| 8284 | - } | |
| 8285 | - } | |
| 8286 | - this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); | |
| 8287 | - // sh Indicates it needs to be capped between -180 and 180 | |
| 8288 | - this.or.sh = true; | |
| 8289 | - } else { | |
| 8290 | - this.r = PropertyFactory.getProp(elem, data.r || { | |
| 8291 | - k: 0 | |
| 8292 | - }, 0, degToRads, this); | |
| 8293 | - } | |
| 8294 | - if (data.sk) { | |
| 8295 | - this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this); | |
| 8296 | - this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this); | |
| 8297 | - } | |
| 8298 | - this.a = PropertyFactory.getProp(elem, data.a || { | |
| 8299 | - k: [0, 0, 0] | |
| 8300 | - }, 1, 0, this); | |
| 8301 | - this.s = PropertyFactory.getProp(elem, data.s || { | |
| 8302 | - k: [100, 100, 100] | |
| 8303 | - }, 1, 0.01, this); | |
| 8304 | - // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes. | |
| 8305 | - if (data.o) { | |
| 8306 | - this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem); | |
| 8307 | - } else { | |
| 8308 | - this.o = { | |
| 8309 | - _mdf: false, | |
| 8310 | - v: 1 | |
| 8311 | - }; | |
| 8312 | - } | |
| 8313 | - this._isDirty = true; | |
| 8314 | - if (!this.dynamicProperties.length) { | |
| 8315 | - this.getValue(true); | |
| 8316 | - } | |
| 8317 | - } | |
| 8318 | - TransformProperty.prototype = { | |
| 8319 | - applyToMatrix: applyToMatrix, | |
| 8320 | - getValue: processKeys, | |
| 8321 | - precalculateMatrix: precalculateMatrix, | |
| 8322 | - autoOrient: autoOrient | |
| 8323 | - }; | |
| 8324 | - extendPrototype([DynamicPropertyContainer], TransformProperty); | |
| 8325 | - TransformProperty.prototype.addDynamicProperty = addDynamicProperty; | |
| 8326 | - TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty; | |
| 8327 | - function getTransformProperty(elem, data, container) { | |
| 8328 | - return new TransformProperty(elem, data, container); | |
| 8329 | - } | |
| 8330 | - return { | |
| 8331 | - getTransformProperty: getTransformProperty | |
| 8332 | - }; | |
| 8333 | - }(); | |
| 8334 | - | |
| 8335 | - function RepeaterModifier() {} | |
| 8336 | - extendPrototype([ShapeModifier], RepeaterModifier); | |
| 8337 | - RepeaterModifier.prototype.initModifierProperties = function (elem, data) { | |
| 8338 | - this.getValue = this.processKeys; | |
| 8339 | - this.c = PropertyFactory.getProp(elem, data.c, 0, null, this); | |
| 8340 | - this.o = PropertyFactory.getProp(elem, data.o, 0, null, this); | |
| 8341 | - this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this); | |
| 8342 | - this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this); | |
| 8343 | - this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this); | |
| 8344 | - this.data = data; | |
| 8345 | - if (!this.dynamicProperties.length) { | |
| 8346 | - this.getValue(true); | |
| 8347 | - } | |
| 8348 | - this._isAnimated = !!this.dynamicProperties.length; | |
| 8349 | - this.pMatrix = new Matrix(); | |
| 8350 | - this.rMatrix = new Matrix(); | |
| 8351 | - this.sMatrix = new Matrix(); | |
| 8352 | - this.tMatrix = new Matrix(); | |
| 8353 | - this.matrix = new Matrix(); | |
| 8354 | - }; | |
| 8355 | - RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) { | |
| 8356 | - var dir = inv ? -1 : 1; | |
| 8357 | - var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc); | |
| 8358 | - var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc); | |
| 8359 | - pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]); | |
| 8360 | - rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]); | |
| 8361 | - rMatrix.rotate(-transform.r.v * dir * perc); | |
| 8362 | - rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]); | |
| 8363 | - sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]); | |
| 8364 | - sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY); | |
| 8365 | - sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]); | |
| 8366 | - }; | |
| 8367 | - RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) { | |
| 8368 | - this.elem = elem; | |
| 8369 | - this.arr = arr; | |
| 8370 | - this.pos = pos; | |
| 8371 | - this.elemsData = elemsData; | |
| 8372 | - this._currentCopies = 0; | |
| 8373 | - this._elements = []; | |
| 8374 | - this._groups = []; | |
| 8375 | - this.frameId = -1; | |
| 8376 | - this.initDynamicPropertyContainer(elem); | |
| 8377 | - this.initModifierProperties(elem, arr[pos]); | |
| 8378 | - while (pos > 0) { | |
| 8379 | - pos -= 1; | |
| 8380 | - // this._elements.unshift(arr.splice(pos,1)[0]); | |
| 8381 | - this._elements.unshift(arr[pos]); | |
| 8382 | - } | |
| 8383 | - if (this.dynamicProperties.length) { | |
| 8384 | - this.k = true; | |
| 8385 | - } else { | |
| 8386 | - this.getValue(true); | |
| 8387 | - } | |
| 8388 | - }; | |
| 8389 | - RepeaterModifier.prototype.resetElements = function (elements) { | |
| 8390 | - var i; | |
| 8391 | - var len = elements.length; | |
| 8392 | - for (i = 0; i < len; i += 1) { | |
| 8393 | - elements[i]._processed = false; | |
| 8394 | - if (elements[i].ty === 'gr') { | |
| 8395 | - this.resetElements(elements[i].it); | |
| 8396 | - } | |
| 8397 | - } | |
| 8398 | - }; | |
| 8399 | - RepeaterModifier.prototype.cloneElements = function (elements) { | |
| 8400 | - var newElements = JSON.parse(JSON.stringify(elements)); | |
| 8401 | - this.resetElements(newElements); | |
| 8402 | - return newElements; | |
| 8403 | - }; | |
| 8404 | - RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) { | |
| 8405 | - var i; | |
| 8406 | - var len = elements.length; | |
| 8407 | - for (i = 0; i < len; i += 1) { | |
| 8408 | - elements[i]._render = renderFlag; | |
| 8409 | - if (elements[i].ty === 'gr') { | |
| 8410 | - this.changeGroupRender(elements[i].it, renderFlag); | |
| 8411 | - } | |
| 8412 | - } | |
| 8413 | - }; | |
| 8414 | - RepeaterModifier.prototype.processShapes = function (_isFirstFrame) { | |
| 8415 | - var items; | |
| 8416 | - var itemsTransform; | |
| 8417 | - var i; | |
| 8418 | - var dir; | |
| 8419 | - var cont; | |
| 8420 | - var hasReloaded = false; | |
| 8421 | - if (this._mdf || _isFirstFrame) { | |
| 8422 | - var copies = Math.ceil(this.c.v); | |
| 8423 | - if (this._groups.length < copies) { | |
| 8424 | - while (this._groups.length < copies) { | |
| 8425 | - var group = { | |
| 8426 | - it: this.cloneElements(this._elements), | |
| 8427 | - ty: 'gr' | |
| 8428 | - }; | |
| 8429 | - group.it.push({ | |
| 8430 | - a: { | |
| 8431 | - a: 0, | |
| 8432 | - ix: 1, | |
| 8433 | - k: [0, 0] | |
| 8434 | - }, | |
| 8435 | - nm: 'Transform', | |
| 8436 | - o: { | |
| 8437 | - a: 0, | |
| 8438 | - ix: 7, | |
| 8439 | - k: 100 | |
| 8440 | - }, | |
| 8441 | - p: { | |
| 8442 | - a: 0, | |
| 8443 | - ix: 2, | |
| 8444 | - k: [0, 0] | |
| 8445 | - }, | |
| 8446 | - r: { | |
| 8447 | - a: 1, | |
| 8448 | - ix: 6, | |
| 8449 | - k: [{ | |
| 8450 | - s: 0, | |
| 8451 | - e: 0, | |
| 8452 | - t: 0 | |
| 8453 | - }, { | |
| 8454 | - s: 0, | |
| 8455 | - e: 0, | |
| 8456 | - t: 1 | |
| 8457 | - }] | |
| 8458 | - }, | |
| 8459 | - s: { | |
| 8460 | - a: 0, | |
| 8461 | - ix: 3, | |
| 8462 | - k: [100, 100] | |
| 8463 | - }, | |
| 8464 | - sa: { | |
| 8465 | - a: 0, | |
| 8466 | - ix: 5, | |
| 8467 | - k: 0 | |
| 8468 | - }, | |
| 8469 | - sk: { | |
| 8470 | - a: 0, | |
| 8471 | - ix: 4, | |
| 8472 | - k: 0 | |
| 8473 | - }, | |
| 8474 | - ty: 'tr' | |
| 8475 | - }); | |
| 8476 | - this.arr.splice(0, 0, group); | |
| 8477 | - this._groups.splice(0, 0, group); | |
| 8478 | - this._currentCopies += 1; | |
| 8479 | - } | |
| 8480 | - this.elem.reloadShapes(); | |
| 8481 | - hasReloaded = true; | |
| 8482 | - } | |
| 8483 | - cont = 0; | |
| 8484 | - var renderFlag; | |
| 8485 | - for (i = 0; i <= this._groups.length - 1; i += 1) { | |
| 8486 | - renderFlag = cont < copies; | |
| 8487 | - this._groups[i]._render = renderFlag; | |
| 8488 | - this.changeGroupRender(this._groups[i].it, renderFlag); | |
| 8489 | - if (!renderFlag) { | |
| 8490 | - var elems = this.elemsData[i].it; | |
| 8491 | - var transformData = elems[elems.length - 1]; | |
| 8492 | - if (transformData.transform.op.v !== 0) { | |
| 8493 | - transformData.transform.op._mdf = true; | |
| 8494 | - transformData.transform.op.v = 0; | |
| 8495 | - } else { | |
| 8496 | - transformData.transform.op._mdf = false; | |
| 8497 | - } | |
| 8498 | - } | |
| 8499 | - cont += 1; | |
| 8500 | - } | |
| 8501 | - this._currentCopies = copies; | |
| 8502 | - /// / | |
| 8503 | - | |
| 8504 | - var offset = this.o.v; | |
| 8505 | - var offsetModulo = offset % 1; | |
| 8506 | - var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset); | |
| 8507 | - var pProps = this.pMatrix.props; | |
| 8508 | - var rProps = this.rMatrix.props; | |
| 8509 | - var sProps = this.sMatrix.props; | |
| 8510 | - this.pMatrix.reset(); | |
| 8511 | - this.rMatrix.reset(); | |
| 8512 | - this.sMatrix.reset(); | |
| 8513 | - this.tMatrix.reset(); | |
| 8514 | - this.matrix.reset(); | |
| 8515 | - var iteration = 0; | |
| 8516 | - if (offset > 0) { | |
| 8517 | - while (iteration < roundOffset) { | |
| 8518 | - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); | |
| 8519 | - iteration += 1; | |
| 8520 | - } | |
| 8521 | - if (offsetModulo) { | |
| 8522 | - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false); | |
| 8523 | - iteration += offsetModulo; | |
| 8524 | - } | |
| 8525 | - } else if (offset < 0) { | |
| 8526 | - while (iteration > roundOffset) { | |
| 8527 | - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true); | |
| 8528 | - iteration -= 1; | |
| 8529 | - } | |
| 8530 | - if (offsetModulo) { | |
| 8531 | - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true); | |
| 8532 | - iteration -= offsetModulo; | |
| 8533 | - } | |
| 8534 | - } | |
| 8535 | - i = this.data.m === 1 ? 0 : this._currentCopies - 1; | |
| 8536 | - dir = this.data.m === 1 ? 1 : -1; | |
| 8537 | - cont = this._currentCopies; | |
| 8538 | - var j; | |
| 8539 | - var jLen; | |
| 8540 | - while (cont) { | |
| 8541 | - items = this.elemsData[i].it; | |
| 8542 | - itemsTransform = items[items.length - 1].transform.mProps.v.props; | |
| 8543 | - jLen = itemsTransform.length; | |
| 8544 | - items[items.length - 1].transform.mProps._mdf = true; | |
| 8545 | - items[items.length - 1].transform.op._mdf = true; | |
| 8546 | - 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)); | |
| 8547 | - if (iteration !== 0) { | |
| 8548 | - if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) { | |
| 8549 | - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); | |
| 8550 | - } | |
| 8551 | - 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]); | |
| 8552 | - 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]); | |
| 8553 | - 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]); | |
| 8554 | - for (j = 0; j < jLen; j += 1) { | |
| 8555 | - itemsTransform[j] = this.matrix.props[j]; | |
| 8556 | - } | |
| 8557 | - this.matrix.reset(); | |
| 8558 | - } else { | |
| 8559 | - this.matrix.reset(); | |
| 8560 | - for (j = 0; j < jLen; j += 1) { | |
| 8561 | - itemsTransform[j] = this.matrix.props[j]; | |
| 8562 | - } | |
| 8563 | - } | |
| 8564 | - iteration += 1; | |
| 8565 | - cont -= 1; | |
| 8566 | - i += dir; | |
| 8567 | - } | |
| 8568 | - } else { | |
| 8569 | - cont = this._currentCopies; | |
| 8570 | - i = 0; | |
| 8571 | - dir = 1; | |
| 8572 | - while (cont) { | |
| 8573 | - items = this.elemsData[i].it; | |
| 8574 | - itemsTransform = items[items.length - 1].transform.mProps.v.props; | |
| 8575 | - items[items.length - 1].transform.mProps._mdf = false; | |
| 8576 | - items[items.length - 1].transform.op._mdf = false; | |
| 8577 | - cont -= 1; | |
| 8578 | - i += dir; | |
| 8579 | - } | |
| 8580 | - } | |
| 8581 | - return hasReloaded; | |
| 8582 | - }; | |
| 8583 | - RepeaterModifier.prototype.addShape = function () {}; | |
| 8584 | - | |
| 8585 | - function RoundCornersModifier() {} | |
| 8586 | - extendPrototype([ShapeModifier], RoundCornersModifier); | |
| 8587 | - RoundCornersModifier.prototype.initModifierProperties = function (elem, data) { | |
| 8588 | - this.getValue = this.processKeys; | |
| 8589 | - this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this); | |
| 8590 | - this._isAnimated = !!this.rd.effectsSequence.length; | |
| 8591 | - }; | |
| 8592 | - RoundCornersModifier.prototype.processPath = function (path, round) { | |
| 8593 | - var clonedPath = shapePool.newElement(); | |
| 8594 | - clonedPath.c = path.c; | |
| 8595 | - var i; | |
| 8596 | - var len = path._length; | |
| 8597 | - var currentV; | |
| 8598 | - var currentI; | |
| 8599 | - var currentO; | |
| 8600 | - var closerV; | |
| 8601 | - var distance; | |
| 8602 | - var newPosPerc; | |
| 8603 | - var index = 0; | |
| 8604 | - var vX; | |
| 8605 | - var vY; | |
| 8606 | - var oX; | |
| 8607 | - var oY; | |
| 8608 | - var iX; | |
| 8609 | - var iY; | |
| 8610 | - for (i = 0; i < len; i += 1) { | |
| 8611 | - currentV = path.v[i]; | |
| 8612 | - currentO = path.o[i]; | |
| 8613 | - currentI = path.i[i]; | |
| 8614 | - if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) { | |
| 8615 | - if ((i === 0 || i === len - 1) && !path.c) { | |
| 8616 | - clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index); | |
| 8617 | - /* clonedPath.v[index] = currentV; | |
| 8618 | - clonedPath.o[index] = currentO; | |
| 8619 | - clonedPath.i[index] = currentI; */ | |
| 8620 | - index += 1; | |
| 8621 | - } else { | |
| 8622 | - if (i === 0) { | |
| 8623 | - closerV = path.v[len - 1]; | |
| 8624 | - } else { | |
| 8625 | - closerV = path.v[i - 1]; | |
| 8626 | - } | |
| 8627 | - distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); | |
| 8628 | - newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; | |
| 8629 | - iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; | |
| 8630 | - vX = iX; | |
| 8631 | - iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc; | |
| 8632 | - vY = iY; | |
| 8633 | - oX = vX - (vX - currentV[0]) * roundCorner; | |
| 8634 | - oY = vY - (vY - currentV[1]) * roundCorner; | |
| 8635 | - clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index); | |
| 8636 | - index += 1; | |
| 8637 | - if (i === len - 1) { | |
| 8638 | - closerV = path.v[0]; | |
| 8639 | - } else { | |
| 8640 | - closerV = path.v[i + 1]; | |
| 8641 | - } | |
| 8642 | - distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); | |
| 8643 | - newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; | |
| 8644 | - oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; | |
| 8645 | - vX = oX; | |
| 8646 | - oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc; | |
| 8647 | - vY = oY; | |
| 8648 | - iX = vX - (vX - currentV[0]) * roundCorner; | |
| 8649 | - iY = vY - (vY - currentV[1]) * roundCorner; | |
| 8650 | - clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index); | |
| 8651 | - index += 1; | |
| 8652 | - } | |
| 8653 | - } else { | |
| 8654 | - 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); | |
| 8655 | - index += 1; | |
| 8656 | - } | |
| 8657 | - } | |
| 8658 | - return clonedPath; | |
| 8659 | - }; | |
| 8660 | - RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) { | |
| 8661 | - var shapePaths; | |
| 8662 | - var i; | |
| 8663 | - var len = this.shapes.length; | |
| 8664 | - var j; | |
| 8665 | - var jLen; | |
| 8666 | - var rd = this.rd.v; | |
| 8667 | - if (rd !== 0) { | |
| 8668 | - var shapeData; | |
| 8669 | - var localShapeCollection; | |
| 8670 | - for (i = 0; i < len; i += 1) { | |
| 8671 | - shapeData = this.shapes[i]; | |
| 8672 | - localShapeCollection = shapeData.localShapeCollection; | |
| 8673 | - if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { | |
| 8674 | - localShapeCollection.releaseShapes(); | |
| 8675 | - shapeData.shape._mdf = true; | |
| 8676 | - shapePaths = shapeData.shape.paths.shapes; | |
| 8677 | - jLen = shapeData.shape.paths._length; | |
| 8678 | - for (j = 0; j < jLen; j += 1) { | |
| 8679 | - localShapeCollection.addShape(this.processPath(shapePaths[j], rd)); | |
| 8680 | - } | |
| 8681 | - } | |
| 8682 | - shapeData.shape.paths = shapeData.localShapeCollection; | |
| 8683 | - } | |
| 8684 | - } | |
| 8685 | - if (!this.dynamicProperties.length) { | |
| 8686 | - this._mdf = false; | |
| 8687 | - } | |
| 8688 | - }; | |
| 8689 | - | |
| 8690 | - function floatEqual(a, b) { | |
| 8691 | - return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b)); | |
| 8692 | - } | |
| 8693 | - function floatZero(f) { | |
| 8694 | - return Math.abs(f) <= 0.00001; | |
| 8695 | - } | |
| 8696 | - function lerp(p0, p1, amount) { | |
| 8697 | - return p0 * (1 - amount) + p1 * amount; | |
| 8698 | - } | |
| 8699 | - function lerpPoint(p0, p1, amount) { | |
| 8700 | - return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)]; | |
| 8701 | - } | |
| 8702 | - function quadRoots(a, b, c) { | |
| 8703 | - // no root | |
| 8704 | - if (a === 0) return []; | |
| 8705 | - var s = b * b - 4 * a * c; | |
| 8706 | - // Complex roots | |
| 8707 | - if (s < 0) return []; | |
| 8708 | - var singleRoot = -b / (2 * a); | |
| 8709 | - // 1 root | |
| 8710 | - if (s === 0) return [singleRoot]; | |
| 8711 | - var delta = Math.sqrt(s) / (2 * a); | |
| 8712 | - // 2 roots | |
| 8713 | - return [singleRoot - delta, singleRoot + delta]; | |
| 8714 | - } | |
| 8715 | - function polynomialCoefficients(p0, p1, p2, p3) { | |
| 8716 | - return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0]; | |
| 8717 | - } | |
| 8718 | - function singlePoint(p) { | |
| 8719 | - return new PolynomialBezier(p, p, p, p, false); | |
| 8720 | - } | |
| 8721 | - function PolynomialBezier(p0, p1, p2, p3, linearize) { | |
| 8722 | - if (linearize && pointEqual(p0, p1)) { | |
| 8723 | - p1 = lerpPoint(p0, p3, 1 / 3); | |
| 8724 | - } | |
| 8725 | - if (linearize && pointEqual(p2, p3)) { | |
| 8726 | - p2 = lerpPoint(p0, p3, 2 / 3); | |
| 8727 | - } | |
| 8728 | - var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]); | |
| 8729 | - var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]); | |
| 8730 | - this.a = [coeffx[0], coeffy[0]]; | |
| 8731 | - this.b = [coeffx[1], coeffy[1]]; | |
| 8732 | - this.c = [coeffx[2], coeffy[2]]; | |
| 8733 | - this.d = [coeffx[3], coeffy[3]]; | |
| 8734 | - this.points = [p0, p1, p2, p3]; | |
| 8735 | - } | |
| 8736 | - PolynomialBezier.prototype.point = function (t) { | |
| 8737 | - 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]]; | |
| 8738 | - }; | |
| 8739 | - PolynomialBezier.prototype.derivative = function (t) { | |
| 8740 | - 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]]; | |
| 8741 | - }; | |
| 8742 | - PolynomialBezier.prototype.tangentAngle = function (t) { | |
| 8743 | - var p = this.derivative(t); | |
| 8744 | - return Math.atan2(p[1], p[0]); | |
| 8745 | - }; | |
| 8746 | - PolynomialBezier.prototype.normalAngle = function (t) { | |
| 8747 | - var p = this.derivative(t); | |
| 8748 | - return Math.atan2(p[0], p[1]); | |
| 8749 | - }; | |
| 8750 | - PolynomialBezier.prototype.inflectionPoints = function () { | |
| 8751 | - var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1]; | |
| 8752 | - if (floatZero(denom)) return []; | |
| 8753 | - var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom; | |
| 8754 | - var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom; | |
| 8755 | - if (square < 0) return []; | |
| 8756 | - var root = Math.sqrt(square); | |
| 8757 | - if (floatZero(root)) { | |
| 8758 | - if (root > 0 && root < 1) return [tcusp]; | |
| 8759 | - return []; | |
| 8760 | - } | |
| 8761 | - return [tcusp - root, tcusp + root].filter(function (r) { | |
| 8762 | - return r > 0 && r < 1; | |
| 8763 | - }); | |
| 8764 | - }; | |
| 8765 | - PolynomialBezier.prototype.split = function (t) { | |
| 8766 | - if (t <= 0) return [singlePoint(this.points[0]), this]; | |
| 8767 | - if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])]; | |
| 8768 | - var p10 = lerpPoint(this.points[0], this.points[1], t); | |
| 8769 | - var p11 = lerpPoint(this.points[1], this.points[2], t); | |
| 8770 | - var p12 = lerpPoint(this.points[2], this.points[3], t); | |
| 8771 | - var p20 = lerpPoint(p10, p11, t); | |
| 8772 | - var p21 = lerpPoint(p11, p12, t); | |
| 8773 | - var p3 = lerpPoint(p20, p21, t); | |
| 8774 | - return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)]; | |
| 8775 | - }; | |
| 8776 | - function extrema(bez, comp) { | |
| 8777 | - var min = bez.points[0][comp]; | |
| 8778 | - var max = bez.points[bez.points.length - 1][comp]; | |
| 8779 | - if (min > max) { | |
| 8780 | - var e = max; | |
| 8781 | - max = min; | |
| 8782 | - min = e; | |
| 8783 | - } | |
| 8784 | - // Derivative roots to find min/max | |
| 8785 | - var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]); | |
| 8786 | - for (var i = 0; i < f.length; i += 1) { | |
| 8787 | - if (f[i] > 0 && f[i] < 1) { | |
| 8788 | - var val = bez.point(f[i])[comp]; | |
| 8789 | - if (val < min) min = val;else if (val > max) max = val; | |
| 8790 | - } | |
| 8791 | - } | |
| 8792 | - return { | |
| 8793 | - min: min, | |
| 8794 | - max: max | |
| 8795 | - }; | |
| 8796 | - } | |
| 8797 | - PolynomialBezier.prototype.bounds = function () { | |
| 8798 | - return { | |
| 8799 | - x: extrema(this, 0), | |
| 8800 | - y: extrema(this, 1) | |
| 8801 | - }; | |
| 8802 | - }; | |
| 8803 | - PolynomialBezier.prototype.boundingBox = function () { | |
| 8804 | - var bounds = this.bounds(); | |
| 8805 | - return { | |
| 8806 | - left: bounds.x.min, | |
| 8807 | - right: bounds.x.max, | |
| 8808 | - top: bounds.y.min, | |
| 8809 | - bottom: bounds.y.max, | |
| 8810 | - width: bounds.x.max - bounds.x.min, | |
| 8811 | - height: bounds.y.max - bounds.y.min, | |
| 8812 | - cx: (bounds.x.max + bounds.x.min) / 2, | |
| 8813 | - cy: (bounds.y.max + bounds.y.min) / 2 | |
| 8814 | - }; | |
| 8815 | - }; | |
| 8816 | - function intersectData(bez, t1, t2) { | |
| 8817 | - var box = bez.boundingBox(); | |
| 8818 | - return { | |
| 8819 | - cx: box.cx, | |
| 8820 | - cy: box.cy, | |
| 8821 | - width: box.width, | |
| 8822 | - height: box.height, | |
| 8823 | - bez: bez, | |
| 8824 | - t: (t1 + t2) / 2, | |
| 8825 | - t1: t1, | |
| 8826 | - t2: t2 | |
| 8827 | - }; | |
| 8828 | - } | |
| 8829 | - function splitData(data) { | |
| 8830 | - var split = data.bez.split(0.5); | |
| 8831 | - return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)]; | |
| 8832 | - } | |
| 8833 | - function boxIntersect(b1, b2) { | |
| 8834 | - return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height; | |
| 8835 | - } | |
| 8836 | - function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) { | |
| 8837 | - if (!boxIntersect(d1, d2)) return; | |
| 8838 | - if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) { | |
| 8839 | - intersections.push([d1.t, d2.t]); | |
| 8840 | - return; | |
| 8841 | - } | |
| 8842 | - var d1s = splitData(d1); | |
| 8843 | - var d2s = splitData(d2); | |
| 8844 | - intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion); | |
| 8845 | - intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion); | |
| 8846 | - intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion); | |
| 8847 | - intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion); | |
| 8848 | - } | |
| 8849 | - PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) { | |
| 8850 | - if (tolerance === undefined) tolerance = 2; | |
| 8851 | - if (maxRecursion === undefined) maxRecursion = 7; | |
| 8852 | - var intersections = []; | |
| 8853 | - intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion); | |
| 8854 | - return intersections; | |
| 8855 | - }; | |
| 8856 | - PolynomialBezier.shapeSegment = function (shapePath, index) { | |
| 8857 | - var nextIndex = (index + 1) % shapePath.length(); | |
| 8858 | - return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true); | |
| 8859 | - }; | |
| 8860 | - PolynomialBezier.shapeSegmentInverted = function (shapePath, index) { | |
| 8861 | - var nextIndex = (index + 1) % shapePath.length(); | |
| 8862 | - return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true); | |
| 8863 | - }; | |
| 8864 | - function crossProduct(a, b) { | |
| 8865 | - return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; | |
| 8866 | - } | |
| 8867 | - function lineIntersection(start1, end1, start2, end2) { | |
| 8868 | - var v1 = [start1[0], start1[1], 1]; | |
| 8869 | - var v2 = [end1[0], end1[1], 1]; | |
| 8870 | - var v3 = [start2[0], start2[1], 1]; | |
| 8871 | - var v4 = [end2[0], end2[1], 1]; | |
| 8872 | - var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4)); | |
| 8873 | - if (floatZero(r[2])) return null; | |
| 8874 | - return [r[0] / r[2], r[1] / r[2]]; | |
| 8875 | - } | |
| 8876 | - function polarOffset(p, angle, length) { | |
| 8877 | - return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length]; | |
| 8878 | - } | |
| 8879 | - function pointDistance(p1, p2) { | |
| 8880 | - return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]); | |
| 8881 | - } | |
| 8882 | - function pointEqual(p1, p2) { | |
| 8883 | - return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]); | |
| 8884 | - } | |
| 8885 | - | |
| 8886 | - function ZigZagModifier() {} | |
| 8887 | - extendPrototype([ShapeModifier], ZigZagModifier); | |
| 8888 | - ZigZagModifier.prototype.initModifierProperties = function (elem, data) { | |
| 8889 | - this.getValue = this.processKeys; | |
| 8890 | - this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this); | |
| 8891 | - this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this); | |
| 8892 | - this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this); | |
| 8893 | - this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0; | |
| 8894 | - }; | |
| 8895 | - function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) { | |
| 8896 | - var angO = angle - Math.PI / 2; | |
| 8897 | - var angI = angle + Math.PI / 2; | |
| 8898 | - var px = point[0] + Math.cos(angle) * direction * amplitude; | |
| 8899 | - var py = point[1] - Math.sin(angle) * direction * amplitude; | |
| 8900 | - 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()); | |
| 8901 | - } | |
| 8902 | - function getPerpendicularVector(pt1, pt2) { | |
| 8903 | - var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]]; | |
| 8904 | - var rot = -Math.PI * 0.5; | |
| 8905 | - var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]]; | |
| 8906 | - return rotatedVector; | |
| 8907 | - } | |
| 8908 | - function getProjectingAngle(path, cur) { | |
| 8909 | - var prevIndex = cur === 0 ? path.length() - 1 : cur - 1; | |
| 8910 | - var nextIndex = (cur + 1) % path.length(); | |
| 8911 | - var prevPoint = path.v[prevIndex]; | |
| 8912 | - var nextPoint = path.v[nextIndex]; | |
| 8913 | - var pVector = getPerpendicularVector(prevPoint, nextPoint); | |
| 8914 | - return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]); | |
| 8915 | - } | |
| 8916 | - function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) { | |
| 8917 | - var angle = getProjectingAngle(path, cur); | |
| 8918 | - var point = path.v[cur % path._length]; | |
| 8919 | - var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1]; | |
| 8920 | - var nextPoint = path.v[(cur + 1) % path._length]; | |
| 8921 | - var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0; | |
| 8922 | - var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0; | |
| 8923 | - setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType); | |
| 8924 | - } | |
| 8925 | - function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) { | |
| 8926 | - for (var i = 0; i < frequency; i += 1) { | |
| 8927 | - var t = (i + 1) / (frequency + 1); | |
| 8928 | - 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; | |
| 8929 | - var angle = segment.normalAngle(t); | |
| 8930 | - var point = segment.point(t); | |
| 8931 | - setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType); | |
| 8932 | - direction = -direction; | |
| 8933 | - } | |
| 8934 | - return direction; | |
| 8935 | - } | |
| 8936 | - ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) { | |
| 8937 | - var count = path._length; | |
| 8938 | - var clonedPath = shapePool.newElement(); | |
| 8939 | - clonedPath.c = path.c; | |
| 8940 | - if (!path.c) { | |
| 8941 | - count -= 1; | |
| 8942 | - } | |
| 8943 | - if (count === 0) return clonedPath; | |
| 8944 | - var direction = -1; | |
| 8945 | - var segment = PolynomialBezier.shapeSegment(path, 0); | |
| 8946 | - zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction); | |
| 8947 | - for (var i = 0; i < count; i += 1) { | |
| 8948 | - direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction); | |
| 8949 | - if (i === count - 1 && !path.c) { | |
| 8950 | - segment = null; | |
| 8951 | - } else { | |
| 8952 | - segment = PolynomialBezier.shapeSegment(path, (i + 1) % count); | |
| 8953 | - } | |
| 8954 | - zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction); | |
| 8955 | - } | |
| 8956 | - return clonedPath; | |
| 8957 | - }; | |
| 8958 | - ZigZagModifier.prototype.processShapes = function (_isFirstFrame) { | |
| 8959 | - var shapePaths; | |
| 8960 | - var i; | |
| 8961 | - var len = this.shapes.length; | |
| 8962 | - var j; | |
| 8963 | - var jLen; | |
| 8964 | - var amplitude = this.amplitude.v; | |
| 8965 | - var frequency = Math.max(0, Math.round(this.frequency.v)); | |
| 8966 | - var pointType = this.pointsType.v; | |
| 8967 | - if (amplitude !== 0) { | |
| 8968 | - var shapeData; | |
| 8969 | - var localShapeCollection; | |
| 8970 | - for (i = 0; i < len; i += 1) { | |
| 8971 | - shapeData = this.shapes[i]; | |
| 8972 | - localShapeCollection = shapeData.localShapeCollection; | |
| 8973 | - if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { | |
| 8974 | - localShapeCollection.releaseShapes(); | |
| 8975 | - shapeData.shape._mdf = true; | |
| 8976 | - shapePaths = shapeData.shape.paths.shapes; | |
| 8977 | - jLen = shapeData.shape.paths._length; | |
| 8978 | - for (j = 0; j < jLen; j += 1) { | |
| 8979 | - localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType)); | |
| 8980 | - } | |
| 8981 | - } | |
| 8982 | - shapeData.shape.paths = shapeData.localShapeCollection; | |
| 8983 | - } | |
| 8984 | - } | |
| 8985 | - if (!this.dynamicProperties.length) { | |
| 8986 | - this._mdf = false; | |
| 8987 | - } | |
| 8988 | - }; | |
| 8989 | - | |
| 8990 | - function linearOffset(p1, p2, amount) { | |
| 8991 | - var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]); | |
| 8992 | - return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)]; | |
| 8993 | - } | |
| 8994 | - function offsetSegment(segment, amount) { | |
| 8995 | - var p0; | |
| 8996 | - var p1a; | |
| 8997 | - var p1b; | |
| 8998 | - var p2b; | |
| 8999 | - var p2a; | |
| 9000 | - var p3; | |
| 9001 | - var e; | |
| 9002 | - e = linearOffset(segment.points[0], segment.points[1], amount); | |
| 9003 | - p0 = e[0]; | |
| 9004 | - p1a = e[1]; | |
| 9005 | - e = linearOffset(segment.points[1], segment.points[2], amount); | |
| 9006 | - p1b = e[0]; | |
| 9007 | - p2b = e[1]; | |
| 9008 | - e = linearOffset(segment.points[2], segment.points[3], amount); | |
| 9009 | - p2a = e[0]; | |
| 9010 | - p3 = e[1]; | |
| 9011 | - var p1 = lineIntersection(p0, p1a, p1b, p2b); | |
| 9012 | - if (p1 === null) p1 = p1a; | |
| 9013 | - var p2 = lineIntersection(p2a, p3, p1b, p2b); | |
| 9014 | - if (p2 === null) p2 = p2a; | |
| 9015 | - return new PolynomialBezier(p0, p1, p2, p3); | |
| 9016 | - } | |
| 9017 | - function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) { | |
| 9018 | - var p0 = seg1.points[3]; | |
| 9019 | - var p1 = seg2.points[0]; | |
| 9020 | - | |
| 9021 | - // Bevel | |
| 9022 | - if (lineJoin === 3) return p0; | |
| 9023 | - | |
| 9024 | - // Connected, they don't need a joint | |
| 9025 | - if (pointEqual(p0, p1)) return p0; | |
| 9026 | - | |
| 9027 | - // Round | |
| 9028 | - if (lineJoin === 2) { | |
| 9029 | - var angleOut = -seg1.tangentAngle(1); | |
| 9030 | - var angleIn = -seg2.tangentAngle(0) + Math.PI; | |
| 9031 | - var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100)); | |
| 9032 | - var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2; | |
| 9033 | - var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner); | |
| 9034 | - outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1); | |
| 9035 | - tan = polarOffset(p1, angleIn, 2 * radius * roundCorner); | |
| 9036 | - outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length()); | |
| 9037 | - return p1; | |
| 9038 | - } | |
| 9039 | - | |
| 9040 | - // Miter | |
| 9041 | - var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2]; | |
| 9042 | - var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1]; | |
| 9043 | - var intersection = lineIntersection(t0, p0, p1, t1); | |
| 9044 | - if (intersection && pointDistance(intersection, p0) < miterLimit) { | |
| 9045 | - outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length()); | |
| 9046 | - return intersection; | |
| 9047 | - } | |
| 9048 | - return p0; | |
| 9049 | - } | |
| 9050 | - function getIntersection(a, b) { | |
| 9051 | - var intersect = a.intersections(b); | |
| 9052 | - if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift(); | |
| 9053 | - if (intersect.length) return intersect[0]; | |
| 9054 | - return null; | |
| 9055 | - } | |
| 9056 | - function pruneSegmentIntersection(a, b) { | |
| 9057 | - var outa = a.slice(); | |
| 9058 | - var outb = b.slice(); | |
| 9059 | - var intersect = getIntersection(a[a.length - 1], b[0]); | |
| 9060 | - if (intersect) { | |
| 9061 | - outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0]; | |
| 9062 | - outb[0] = b[0].split(intersect[1])[1]; | |
| 9063 | - } | |
| 9064 | - if (a.length > 1 && b.length > 1) { | |
| 9065 | - intersect = getIntersection(a[0], b[b.length - 1]); | |
| 9066 | - if (intersect) { | |
| 9067 | - return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]]; | |
| 9068 | - } | |
| 9069 | - } | |
| 9070 | - return [outa, outb]; | |
| 9071 | - } | |
| 9072 | - function pruneIntersections(segments) { | |
| 9073 | - var e; | |
| 9074 | - for (var i = 1; i < segments.length; i += 1) { | |
| 9075 | - e = pruneSegmentIntersection(segments[i - 1], segments[i]); | |
| 9076 | - segments[i - 1] = e[0]; | |
| 9077 | - segments[i] = e[1]; | |
| 9078 | - } | |
| 9079 | - if (segments.length > 1) { | |
| 9080 | - e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]); | |
| 9081 | - segments[segments.length - 1] = e[0]; | |
| 9082 | - segments[0] = e[1]; | |
| 9083 | - } | |
| 9084 | - return segments; | |
| 9085 | - } | |
| 9086 | - function offsetSegmentSplit(segment, amount) { | |
| 9087 | - /* | |
| 9088 | - We split each bezier segment into smaller pieces based | |
| 9089 | - on inflection points, this ensures the control point | |
| 9090 | - polygon is convex. | |
| 9091 | - (A cubic bezier can have none, one, or two inflection points) | |
| 9092 | - */ | |
| 9093 | - var flex = segment.inflectionPoints(); | |
| 9094 | - var left; | |
| 9095 | - var right; | |
| 9096 | - var split; | |
| 9097 | - var mid; | |
| 9098 | - if (flex.length === 0) { | |
| 9099 | - return [offsetSegment(segment, amount)]; | |
| 9100 | - } | |
| 9101 | - if (flex.length === 1 || floatEqual(flex[1], 1)) { | |
| 9102 | - split = segment.split(flex[0]); | |
| 9103 | - left = split[0]; | |
| 9104 | - right = split[1]; | |
| 9105 | - return [offsetSegment(left, amount), offsetSegment(right, amount)]; | |
| 9106 | - } | |
| 9107 | - split = segment.split(flex[0]); | |
| 9108 | - left = split[0]; | |
| 9109 | - var t = (flex[1] - flex[0]) / (1 - flex[0]); | |
| 9110 | - split = split[1].split(t); | |
| 9111 | - mid = split[0]; | |
| 9112 | - right = split[1]; | |
| 9113 | - return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)]; | |
| 9114 | - } | |
| 9115 | - function OffsetPathModifier() {} | |
| 9116 | - extendPrototype([ShapeModifier], OffsetPathModifier); | |
| 9117 | - OffsetPathModifier.prototype.initModifierProperties = function (elem, data) { | |
| 9118 | - this.getValue = this.processKeys; | |
| 9119 | - this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this); | |
| 9120 | - this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this); | |
| 9121 | - this.lineJoin = data.lj; | |
| 9122 | - this._isAnimated = this.amount.effectsSequence.length !== 0; | |
| 9123 | - }; | |
| 9124 | - OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) { | |
| 9125 | - var outputBezier = shapePool.newElement(); | |
| 9126 | - outputBezier.c = inputBezier.c; | |
| 9127 | - var count = inputBezier.length(); | |
| 9128 | - if (!inputBezier.c) { | |
| 9129 | - count -= 1; | |
| 9130 | - } | |
| 9131 | - var i; | |
| 9132 | - var j; | |
| 9133 | - var segment; | |
| 9134 | - var multiSegments = []; | |
| 9135 | - for (i = 0; i < count; i += 1) { | |
| 9136 | - segment = PolynomialBezier.shapeSegment(inputBezier, i); | |
| 9137 | - multiSegments.push(offsetSegmentSplit(segment, amount)); | |
| 9138 | - } | |
| 9139 | - if (!inputBezier.c) { | |
| 9140 | - for (i = count - 1; i >= 0; i -= 1) { | |
| 9141 | - segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i); | |
| 9142 | - multiSegments.push(offsetSegmentSplit(segment, amount)); | |
| 9143 | - } | |
| 9144 | - } | |
| 9145 | - multiSegments = pruneIntersections(multiSegments); | |
| 9146 | - | |
| 9147 | - // Add bezier segments to the output and apply line joints | |
| 9148 | - var lastPoint = null; | |
| 9149 | - var lastSeg = null; | |
| 9150 | - for (i = 0; i < multiSegments.length; i += 1) { | |
| 9151 | - var multiSegment = multiSegments[i]; | |
| 9152 | - if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit); | |
| 9153 | - lastSeg = multiSegment[multiSegment.length - 1]; | |
| 9154 | - for (j = 0; j < multiSegment.length; j += 1) { | |
| 9155 | - segment = multiSegment[j]; | |
| 9156 | - if (lastPoint && pointEqual(segment.points[0], lastPoint)) { | |
| 9157 | - outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1); | |
| 9158 | - } else { | |
| 9159 | - 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()); | |
| 9160 | - } | |
| 9161 | - 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()); | |
| 9162 | - lastPoint = segment.points[3]; | |
| 9163 | - } | |
| 9164 | - } | |
| 9165 | - if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit); | |
| 9166 | - return outputBezier; | |
| 9167 | - }; | |
| 9168 | - OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) { | |
| 9169 | - var shapePaths; | |
| 9170 | - var i; | |
| 9171 | - var len = this.shapes.length; | |
| 9172 | - var j; | |
| 9173 | - var jLen; | |
| 9174 | - var amount = this.amount.v; | |
| 9175 | - var miterLimit = this.miterLimit.v; | |
| 9176 | - var lineJoin = this.lineJoin; | |
| 9177 | - if (amount !== 0) { | |
| 9178 | - var shapeData; | |
| 9179 | - var localShapeCollection; | |
| 9180 | - for (i = 0; i < len; i += 1) { | |
| 9181 | - shapeData = this.shapes[i]; | |
| 9182 | - localShapeCollection = shapeData.localShapeCollection; | |
| 9183 | - if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { | |
| 9184 | - localShapeCollection.releaseShapes(); | |
| 9185 | - shapeData.shape._mdf = true; | |
| 9186 | - shapePaths = shapeData.shape.paths.shapes; | |
| 9187 | - jLen = shapeData.shape.paths._length; | |
| 9188 | - for (j = 0; j < jLen; j += 1) { | |
| 9189 | - localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit)); | |
| 9190 | - } | |
| 9191 | - } | |
| 9192 | - shapeData.shape.paths = shapeData.localShapeCollection; | |
| 9193 | - } | |
| 9194 | - } | |
| 9195 | - if (!this.dynamicProperties.length) { | |
| 9196 | - this._mdf = false; | |
| 9197 | - } | |
| 9198 | - }; | |
| 9199 | - | |
| 9200 | - function getFontProperties(fontData) { | |
| 9201 | - var styles = fontData.fStyle ? fontData.fStyle.split(' ') : []; | |
| 9202 | - var fWeight = 'normal'; | |
| 9203 | - var fStyle = 'normal'; | |
| 9204 | - var len = styles.length; | |
| 9205 | - var styleName; | |
| 9206 | - for (var i = 0; i < len; i += 1) { | |
| 9207 | - styleName = styles[i].toLowerCase(); | |
| 9208 | - switch (styleName) { | |
| 9209 | - case 'italic': | |
| 9210 | - fStyle = 'italic'; | |
| 9211 | - break; | |
| 9212 | - case 'bold': | |
| 9213 | - fWeight = '700'; | |
| 9214 | - break; | |
| 9215 | - case 'black': | |
| 9216 | - fWeight = '900'; | |
| 9217 | - break; | |
| 9218 | - case 'medium': | |
| 9219 | - fWeight = '500'; | |
| 9220 | - break; | |
| 9221 | - case 'regular': | |
| 9222 | - case 'normal': | |
| 9223 | - fWeight = '400'; | |
| 9224 | - break; | |
| 9225 | - case 'light': | |
| 9226 | - case 'thin': | |
| 9227 | - fWeight = '200'; | |
| 9228 | - break; | |
| 9229 | - default: | |
| 9230 | - break; | |
| 9231 | - } | |
| 9232 | - } | |
| 9233 | - return { | |
| 9234 | - style: fStyle, | |
| 9235 | - weight: fontData.fWeight || fWeight | |
| 9236 | - }; | |
| 9237 | - } | |
| 9238 | - | |
| 9239 | - var FontManager = function () { | |
| 9240 | - var maxWaitingTime = 5000; | |
| 9241 | - var emptyChar = { | |
| 9242 | - w: 0, | |
| 9243 | - size: 0, | |
| 9244 | - shapes: [], | |
| 9245 | - data: { | |
| 9246 | - shapes: [] | |
| 9247 | - } | |
| 9248 | - }; | |
| 9249 | - var combinedCharacters = []; | |
| 9250 | - // Hindi characters | |
| 9251 | - combinedCharacters = combinedCharacters.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]); | |
| 9252 | - var BLACK_FLAG_CODE_POINT = 127988; | |
| 9253 | - var CANCEL_TAG_CODE_POINT = 917631; | |
| 9254 | - var A_TAG_CODE_POINT = 917601; | |
| 9255 | - var Z_TAG_CODE_POINT = 917626; | |
| 9256 | - var VARIATION_SELECTOR_16_CODE_POINT = 65039; | |
| 9257 | - var ZERO_WIDTH_JOINER_CODE_POINT = 8205; | |
| 9258 | - var REGIONAL_CHARACTER_A_CODE_POINT = 127462; | |
| 9259 | - var REGIONAL_CHARACTER_Z_CODE_POINT = 127487; | |
| 9260 | - var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff']; | |
| 9261 | - function trimFontOptions(font) { | |
| 9262 | - var familyArray = font.split(','); | |
| 9263 | - var i; | |
| 9264 | - var len = familyArray.length; | |
| 9265 | - var enabledFamilies = []; | |
| 9266 | - for (i = 0; i < len; i += 1) { | |
| 9267 | - if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') { | |
| 9268 | - enabledFamilies.push(familyArray[i]); | |
| 9269 | - } | |
| 9270 | - } | |
| 9271 | - return enabledFamilies.join(','); | |
| 9272 | - } | |
| 9273 | - function setUpNode(font, family) { | |
| 9274 | - var parentNode = createTag('span'); | |
| 9275 | - // Node is invisible to screen readers. | |
| 9276 | - parentNode.setAttribute('aria-hidden', true); | |
| 9277 | - parentNode.style.fontFamily = family; | |
| 9278 | - var node = createTag('span'); | |
| 9279 | - // Characters that vary significantly among different fonts | |
| 9280 | - node.innerText = 'giItT1WQy@!-/#'; | |
| 9281 | - // Visible - so we can measure it - but not on the screen | |
| 9282 | - parentNode.style.position = 'absolute'; | |
| 9283 | - parentNode.style.left = '-10000px'; | |
| 9284 | - parentNode.style.top = '-10000px'; | |
| 9285 | - // Large font size makes even subtle changes obvious | |
| 9286 | - parentNode.style.fontSize = '300px'; | |
| 9287 | - // Reset any font properties | |
| 9288 | - parentNode.style.fontVariant = 'normal'; | |
| 9289 | - parentNode.style.fontStyle = 'normal'; | |
| 9290 | - parentNode.style.fontWeight = 'normal'; | |
| 9291 | - parentNode.style.letterSpacing = '0'; | |
| 9292 | - parentNode.appendChild(node); | |
| 9293 | - document.body.appendChild(parentNode); | |
| 9294 | - | |
| 9295 | - // Remember width with no applied web font | |
| 9296 | - var width = node.offsetWidth; | |
| 9297 | - node.style.fontFamily = trimFontOptions(font) + ', ' + family; | |
| 9298 | - return { | |
| 9299 | - node: node, | |
| 9300 | - w: width, | |
| 9301 | - parent: parentNode | |
| 9302 | - }; | |
| 9303 | - } | |
| 9304 | - function checkLoadedFonts() { | |
| 9305 | - var i; | |
| 9306 | - var len = this.fonts.length; | |
| 9307 | - var node; | |
| 9308 | - var w; | |
| 9309 | - var loadedCount = len; | |
| 9310 | - for (i = 0; i < len; i += 1) { | |
| 9311 | - if (this.fonts[i].loaded) { | |
| 9312 | - loadedCount -= 1; | |
| 9313 | - } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) { | |
| 9314 | - this.fonts[i].loaded = true; | |
| 9315 | - } else { | |
| 9316 | - node = this.fonts[i].monoCase.node; | |
| 9317 | - w = this.fonts[i].monoCase.w; | |
| 9318 | - if (node.offsetWidth !== w) { | |
| 9319 | - loadedCount -= 1; | |
| 9320 | - this.fonts[i].loaded = true; | |
| 9321 | - } else { | |
| 9322 | - node = this.fonts[i].sansCase.node; | |
| 9323 | - w = this.fonts[i].sansCase.w; | |
| 9324 | - if (node.offsetWidth !== w) { | |
| 9325 | - loadedCount -= 1; | |
| 9326 | - this.fonts[i].loaded = true; | |
| 9327 | - } | |
| 9328 | - } | |
| 9329 | - if (this.fonts[i].loaded) { | |
| 9330 | - this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent); | |
| 9331 | - this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent); | |
| 9332 | - } | |
| 9333 | - } | |
| 9334 | - } | |
| 9335 | - if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) { | |
| 9336 | - setTimeout(this.checkLoadedFontsBinded, 20); | |
| 9337 | - } else { | |
| 9338 | - setTimeout(this.setIsLoadedBinded, 10); | |
| 9339 | - } | |
| 9340 | - } | |
| 9341 | - function createHelper(fontData, def) { | |
| 9342 | - var engine = document.body && def ? 'svg' : 'canvas'; | |
| 9343 | - var helper; | |
| 9344 | - var fontProps = getFontProperties(fontData); | |
| 9345 | - if (engine === 'svg') { | |
| 9346 | - var tHelper = createNS('text'); | |
| 9347 | - tHelper.style.fontSize = '100px'; | |
| 9348 | - // tHelper.style.fontFamily = fontData.fFamily; | |
| 9349 | - tHelper.setAttribute('font-family', fontData.fFamily); | |
| 9350 | - tHelper.setAttribute('font-style', fontProps.style); | |
| 9351 | - tHelper.setAttribute('font-weight', fontProps.weight); | |
| 9352 | - tHelper.textContent = '1'; | |
| 9353 | - if (fontData.fClass) { | |
| 9354 | - tHelper.style.fontFamily = 'inherit'; | |
| 9355 | - tHelper.setAttribute('class', fontData.fClass); | |
| 9356 | - } else { | |
| 9357 | - tHelper.style.fontFamily = fontData.fFamily; | |
| 9358 | - } | |
| 9359 | - def.appendChild(tHelper); | |
| 9360 | - helper = tHelper; | |
| 9361 | - } else { | |
| 9362 | - var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d'); | |
| 9363 | - tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily; | |
| 9364 | - helper = tCanvasHelper; | |
| 9365 | - } | |
| 9366 | - function measure(text) { | |
| 9367 | - if (engine === 'svg') { | |
| 9368 | - helper.textContent = text; | |
| 9369 | - return helper.getComputedTextLength(); | |
| 9370 | - } | |
| 9371 | - return helper.measureText(text).width; | |
| 9372 | - } | |
| 9373 | - return { | |
| 9374 | - measureText: measure | |
| 9375 | - }; | |
| 9376 | - } | |
| 9377 | - function addFonts(fontData, defs) { | |
| 9378 | - if (!fontData) { | |
| 9379 | - this.isLoaded = true; | |
| 9380 | - return; | |
| 9381 | - } | |
| 9382 | - if (this.chars) { | |
| 9383 | - this.isLoaded = true; | |
| 9384 | - this.fonts = fontData.list; | |
| 9385 | - return; | |
| 9386 | - } | |
| 9387 | - if (!document.body) { | |
| 9388 | - this.isLoaded = true; | |
| 9389 | - fontData.list.forEach(function (data) { | |
| 9390 | - data.helper = createHelper(data); | |
| 9391 | - data.cache = {}; | |
| 9392 | - }); | |
| 9393 | - this.fonts = fontData.list; | |
| 9394 | - return; | |
| 9395 | - } | |
| 9396 | - var fontArr = fontData.list; | |
| 9397 | - var i; | |
| 9398 | - var len = fontArr.length; | |
| 9399 | - var _pendingFonts = len; | |
| 9400 | - for (i = 0; i < len; i += 1) { | |
| 9401 | - var shouldLoadFont = true; | |
| 9402 | - var loadedSelector; | |
| 9403 | - var j; | |
| 9404 | - fontArr[i].loaded = false; | |
| 9405 | - fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace'); | |
| 9406 | - fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif'); | |
| 9407 | - if (!fontArr[i].fPath) { | |
| 9408 | - fontArr[i].loaded = true; | |
| 9409 | - _pendingFonts -= 1; | |
| 9410 | - } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) { | |
| 9411 | - loadedSelector = document.querySelectorAll('style[f-forigin="p"][f-family="' + fontArr[i].fFamily + '"], style[f-origin="3"][f-family="' + fontArr[i].fFamily + '"]'); | |
| 9412 | - if (loadedSelector.length > 0) { | |
| 9413 | - shouldLoadFont = false; | |
| 9414 | - } | |
| 9415 | - if (shouldLoadFont) { | |
| 9416 | - var s = createTag('style'); | |
| 9417 | - s.setAttribute('f-forigin', fontArr[i].fOrigin); | |
| 9418 | - s.setAttribute('f-origin', fontArr[i].origin); | |
| 9419 | - s.setAttribute('f-family', fontArr[i].fFamily); | |
| 9420 | - s.type = 'text/css'; | |
| 9421 | - s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + "; font-style: normal; src: url('" + fontArr[i].fPath + "');}"; | |
| 9422 | - defs.appendChild(s); | |
| 9423 | - } | |
| 9424 | - } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) { | |
| 9425 | - loadedSelector = document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'); | |
| 9426 | - for (j = 0; j < loadedSelector.length; j += 1) { | |
| 9427 | - if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) { | |
| 9428 | - // Font is already loaded | |
| 9429 | - shouldLoadFont = false; | |
| 9430 | - } | |
| 9431 | - } | |
| 9432 | - if (shouldLoadFont) { | |
| 9433 | - var l = createTag('link'); | |
| 9434 | - l.setAttribute('f-forigin', fontArr[i].fOrigin); | |
| 9435 | - l.setAttribute('f-origin', fontArr[i].origin); | |
| 9436 | - l.type = 'text/css'; | |
| 9437 | - l.rel = 'stylesheet'; | |
| 9438 | - l.href = fontArr[i].fPath; | |
| 9439 | - document.body.appendChild(l); | |
| 9440 | - } | |
| 9441 | - } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) { | |
| 9442 | - loadedSelector = document.querySelectorAll('script[f-forigin="t"], script[f-origin="2"]'); | |
| 9443 | - for (j = 0; j < loadedSelector.length; j += 1) { | |
| 9444 | - if (fontArr[i].fPath === loadedSelector[j].src) { | |
| 9445 | - // Font is already loaded | |
| 9446 | - shouldLoadFont = false; | |
| 9447 | - } | |
| 9448 | - } | |
| 9449 | - if (shouldLoadFont) { | |
| 9450 | - var sc = createTag('link'); | |
| 9451 | - sc.setAttribute('f-forigin', fontArr[i].fOrigin); | |
| 9452 | - sc.setAttribute('f-origin', fontArr[i].origin); | |
| 9453 | - sc.setAttribute('rel', 'stylesheet'); | |
| 9454 | - sc.setAttribute('href', fontArr[i].fPath); | |
| 9455 | - defs.appendChild(sc); | |
| 9456 | - } | |
| 9457 | - } | |
| 9458 | - fontArr[i].helper = createHelper(fontArr[i], defs); | |
| 9459 | - fontArr[i].cache = {}; | |
| 9460 | - this.fonts.push(fontArr[i]); | |
| 9461 | - } | |
| 9462 | - if (_pendingFonts === 0) { | |
| 9463 | - this.isLoaded = true; | |
| 9464 | - } else { | |
| 9465 | - // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas. | |
| 9466 | - // Adding this timeout seems to fix it | |
| 9467 | - setTimeout(this.checkLoadedFonts.bind(this), 100); | |
| 9468 | - } | |
| 9469 | - } | |
| 9470 | - function addChars(chars) { | |
| 9471 | - if (!chars) { | |
| 9472 | - return; | |
| 9473 | - } | |
| 9474 | - if (!this.chars) { | |
| 9475 | - this.chars = []; | |
| 9476 | - } | |
| 9477 | - var i; | |
| 9478 | - var len = chars.length; | |
| 9479 | - var j; | |
| 9480 | - var jLen = this.chars.length; | |
| 9481 | - var found; | |
| 9482 | - for (i = 0; i < len; i += 1) { | |
| 9483 | - j = 0; | |
| 9484 | - found = false; | |
| 9485 | - while (j < jLen) { | |
| 9486 | - if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) { | |
| 9487 | - found = true; | |
| 9488 | - } | |
| 9489 | - j += 1; | |
| 9490 | - } | |
| 9491 | - if (!found) { | |
| 9492 | - this.chars.push(chars[i]); | |
| 9493 | - jLen += 1; | |
| 9494 | - } | |
| 9495 | - } | |
| 9496 | - } | |
| 9497 | - function getCharData(_char, style, font) { | |
| 9498 | - var i = 0; | |
| 9499 | - var len = this.chars.length; | |
| 9500 | - while (i < len) { | |
| 9501 | - if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) { | |
| 9502 | - return this.chars[i]; | |
| 9503 | - } | |
| 9504 | - i += 1; | |
| 9505 | - } | |
| 9506 | - if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console | |
| 9507 | - && !this._warned) { | |
| 9508 | - this._warned = true; | |
| 9509 | - console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console | |
| 9510 | - } | |
| 9511 | - return emptyChar; | |
| 9512 | - } | |
| 9513 | - function measureText(_char2, fontName, size) { | |
| 9514 | - var fontData = this.getFontByName(fontName); | |
| 9515 | - // Using the char instead of char.charCodeAt(0) | |
| 9516 | - // to avoid collisions between equal chars | |
| 9517 | - var index = _char2; | |
| 9518 | - if (!fontData.cache[index]) { | |
| 9519 | - var tHelper = fontData.helper; | |
| 9520 | - if (_char2 === ' ') { | |
| 9521 | - var doubleSize = tHelper.measureText('|' + _char2 + '|'); | |
| 9522 | - var singleSize = tHelper.measureText('||'); | |
| 9523 | - fontData.cache[index] = (doubleSize - singleSize) / 100; | |
| 9524 | - } else { | |
| 9525 | - fontData.cache[index] = tHelper.measureText(_char2) / 100; | |
| 9526 | - } | |
| 9527 | - } | |
| 9528 | - return fontData.cache[index] * size; | |
| 9529 | - } | |
| 9530 | - function getFontByName(name) { | |
| 9531 | - var i = 0; | |
| 9532 | - var len = this.fonts.length; | |
| 9533 | - while (i < len) { | |
| 9534 | - if (this.fonts[i].fName === name) { | |
| 9535 | - return this.fonts[i]; | |
| 9536 | - } | |
| 9537 | - i += 1; | |
| 9538 | - } | |
| 9539 | - return this.fonts[0]; | |
| 9540 | - } | |
| 9541 | - function getCodePoint(string) { | |
| 9542 | - var codePoint = 0; | |
| 9543 | - var first = string.charCodeAt(0); | |
| 9544 | - if (first >= 0xD800 && first <= 0xDBFF) { | |
| 9545 | - var second = string.charCodeAt(1); | |
| 9546 | - if (second >= 0xDC00 && second <= 0xDFFF) { | |
| 9547 | - codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; | |
| 9548 | - } | |
| 9549 | - } | |
| 9550 | - return codePoint; | |
| 9551 | - } | |
| 9552 | - | |
| 9553 | - // Skin tone modifiers | |
| 9554 | - function isModifier(firstCharCode, secondCharCode) { | |
| 9555 | - var sum = firstCharCode.toString(16) + secondCharCode.toString(16); | |
| 9556 | - return surrogateModifiers.indexOf(sum) !== -1; | |
| 9557 | - } | |
| 9558 | - function isZeroWidthJoiner(charCode) { | |
| 9559 | - return charCode === ZERO_WIDTH_JOINER_CODE_POINT; | |
| 9560 | - } | |
| 9561 | - | |
| 9562 | - // This codepoint may change the appearance of the preceding character. | |
| 9563 | - // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered | |
| 9564 | - // as a colorful image as compared to a monochrome text variant. | |
| 9565 | - function isVariationSelector(charCode) { | |
| 9566 | - return charCode === VARIATION_SELECTOR_16_CODE_POINT; | |
| 9567 | - } | |
| 9568 | - | |
| 9569 | - // The regional indicator symbols are a set of 26 alphabetic Unicode | |
| 9570 | - /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2 | |
| 9571 | - // two-letter country codes in a way that allows optional special treatment. | |
| 9572 | - function isRegionalCode(string) { | |
| 9573 | - var codePoint = getCodePoint(string); | |
| 9574 | - if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) { | |
| 9575 | - return true; | |
| 9576 | - } | |
| 9577 | - return false; | |
| 9578 | - } | |
| 9579 | - | |
| 9580 | - // Some Emoji implementations represent combinations of | |
| 9581 | - // two “regional indicator” letters as a single flag symbol. | |
| 9582 | - function isFlagEmoji(string) { | |
| 9583 | - return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2)); | |
| 9584 | - } | |
| 9585 | - function isCombinedCharacter(_char3) { | |
| 9586 | - return combinedCharacters.indexOf(_char3) !== -1; | |
| 9587 | - } | |
| 9588 | - | |
| 9589 | - // Regional flags start with a BLACK_FLAG_CODE_POINT | |
| 9590 | - // folowed by 5 chars in the TAG range | |
| 9591 | - // and end with a CANCEL_TAG_CODE_POINT | |
| 9592 | - function isRegionalFlag(text, index) { | |
| 9593 | - var codePoint = getCodePoint(text.substr(index, 2)); | |
| 9594 | - if (codePoint !== BLACK_FLAG_CODE_POINT) { | |
| 9595 | - return false; | |
| 9596 | - } | |
| 9597 | - var count = 0; | |
| 9598 | - index += 2; | |
| 9599 | - while (count < 5) { | |
| 9600 | - codePoint = getCodePoint(text.substr(index, 2)); | |
| 9601 | - if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) { | |
| 9602 | - return false; | |
| 9603 | - } | |
| 9604 | - count += 1; | |
| 9605 | - index += 2; | |
| 9606 | - } | |
| 9607 | - return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT; | |
| 9608 | - } | |
| 9609 | - function setIsLoaded() { | |
| 9610 | - this.isLoaded = true; | |
| 9611 | - } | |
| 9612 | - var Font = function Font() { | |
| 9613 | - this.fonts = []; | |
| 9614 | - this.chars = null; | |
| 9615 | - this.typekitLoaded = 0; | |
| 9616 | - this.isLoaded = false; | |
| 9617 | - this._warned = false; | |
| 9618 | - this.initTime = Date.now(); | |
| 9619 | - this.setIsLoadedBinded = this.setIsLoaded.bind(this); | |
| 9620 | - this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this); | |
| 9621 | - }; | |
| 9622 | - Font.isModifier = isModifier; | |
| 9623 | - Font.isZeroWidthJoiner = isZeroWidthJoiner; | |
| 9624 | - Font.isFlagEmoji = isFlagEmoji; | |
| 9625 | - Font.isRegionalCode = isRegionalCode; | |
| 9626 | - Font.isCombinedCharacter = isCombinedCharacter; | |
| 9627 | - Font.isRegionalFlag = isRegionalFlag; | |
| 9628 | - Font.isVariationSelector = isVariationSelector; | |
| 9629 | - Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT; | |
| 9630 | - var fontPrototype = { | |
| 9631 | - addChars: addChars, | |
| 9632 | - addFonts: addFonts, | |
| 9633 | - getCharData: getCharData, | |
| 9634 | - getFontByName: getFontByName, | |
| 9635 | - measureText: measureText, | |
| 9636 | - checkLoadedFonts: checkLoadedFonts, | |
| 9637 | - setIsLoaded: setIsLoaded | |
| 9638 | - }; | |
| 9639 | - Font.prototype = fontPrototype; | |
| 9640 | - return Font; | |
| 9641 | - }(); | |
| 9642 | - | |
| 9643 | - function SlotManager(animationData) { | |
| 9644 | - this.animationData = animationData; | |
| 9645 | - } | |
| 9646 | - SlotManager.prototype.getProp = function (data) { | |
| 9647 | - if (this.animationData.slots && this.animationData.slots[data.sid]) { | |
| 9648 | - return Object.assign(data, this.animationData.slots[data.sid].p); | |
| 9649 | - } | |
| 9650 | - return data; | |
| 9651 | - }; | |
| 9652 | - function slotFactory(animationData) { | |
| 9653 | - return new SlotManager(animationData); | |
| 9654 | - } | |
| 9655 | - | |
| 9656 | - function RenderableElement() {} | |
| 9657 | - RenderableElement.prototype = { | |
| 9658 | - initRenderable: function initRenderable() { | |
| 9659 | - // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange | |
| 9660 | - this.isInRange = false; | |
| 9661 | - // layer's display state | |
| 9662 | - this.hidden = false; | |
| 9663 | - // If layer's transparency equals 0, it can be hidden | |
| 9664 | - this.isTransparent = false; | |
| 9665 | - // list of animated components | |
| 9666 | - this.renderableComponents = []; | |
| 9667 | - }, | |
| 9668 | - addRenderableComponent: function addRenderableComponent(component) { | |
| 9669 | - if (this.renderableComponents.indexOf(component) === -1) { | |
| 9670 | - this.renderableComponents.push(component); | |
| 9671 | - } | |
| 9672 | - }, | |
| 9673 | - removeRenderableComponent: function removeRenderableComponent(component) { | |
| 9674 | - if (this.renderableComponents.indexOf(component) !== -1) { | |
| 9675 | - this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1); | |
| 9676 | - } | |
| 9677 | - }, | |
| 9678 | - prepareRenderableFrame: function prepareRenderableFrame(num) { | |
| 9679 | - this.checkLayerLimits(num); | |
| 9680 | - }, | |
| 9681 | - checkTransparency: function checkTransparency() { | |
| 9682 | - if (this.finalTransform.mProp.o.v <= 0) { | |
| 9683 | - if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) { | |
| 9684 | - this.isTransparent = true; | |
| 9685 | - this.hide(); | |
| 9686 | - } | |
| 9687 | - } else if (this.isTransparent) { | |
| 9688 | - this.isTransparent = false; | |
| 9689 | - this.show(); | |
| 9690 | - } | |
| 9691 | - }, | |
| 9692 | - /** | |
| 9693 | - * @function | |
| 9694 | - * Initializes frame related properties. | |
| 9695 | - * | |
| 9696 | - * @param {number} num | |
| 9697 | - * current frame number in Layer's time | |
| 9698 | - * | |
| 9699 | - */ | |
| 9700 | - checkLayerLimits: function checkLayerLimits(num) { | |
| 9701 | - if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) { | |
| 9702 | - if (this.isInRange !== true) { | |
| 9703 | - this.globalData._mdf = true; | |
| 9704 | - this._mdf = true; | |
| 9705 | - this.isInRange = true; | |
| 9706 | - this.show(); | |
| 9707 | - } | |
| 9708 | - } else if (this.isInRange !== false) { | |
| 9709 | - this.globalData._mdf = true; | |
| 9710 | - this.isInRange = false; | |
| 9711 | - this.hide(); | |
| 9712 | - } | |
| 9713 | - }, | |
| 9714 | - renderRenderable: function renderRenderable() { | |
| 9715 | - var i; | |
| 9716 | - var len = this.renderableComponents.length; | |
| 9717 | - for (i = 0; i < len; i += 1) { | |
| 9718 | - this.renderableComponents[i].renderFrame(this._isFirstFrame); | |
| 9719 | - } | |
| 9720 | - /* this.maskManager.renderFrame(this.finalTransform.mat); | |
| 9721 | - this.renderableEffectsManager.renderFrame(this._isFirstFrame); */ | |
| 9722 | - }, | |
| 9723 | - sourceRectAtTime: function sourceRectAtTime() { | |
| 9724 | - return { | |
| 9725 | - top: 0, | |
| 9726 | - left: 0, | |
| 9727 | - width: 100, | |
| 9728 | - height: 100 | |
| 9729 | - }; | |
| 9730 | - }, | |
| 9731 | - getLayerSize: function getLayerSize() { | |
| 9732 | - if (this.data.ty === 5) { | |
| 9733 | - return { | |
| 9734 | - w: this.data.textData.width, | |
| 9735 | - h: this.data.textData.height | |
| 9736 | - }; | |
| 9737 | - } | |
| 9738 | - return { | |
| 9739 | - w: this.data.width, | |
| 9740 | - h: this.data.height | |
| 9741 | - }; | |
| 9742 | - } | |
| 9743 | - }; | |
| 9744 | - | |
| 9745 | - var getBlendMode = function () { | |
| 9746 | - var blendModeEnums = { | |
| 9747 | - 0: 'source-over', | |
| 9748 | - 1: 'multiply', | |
| 9749 | - 2: 'screen', | |
| 9750 | - 3: 'overlay', | |
| 9751 | - 4: 'darken', | |
| 9752 | - 5: 'lighten', | |
| 9753 | - 6: 'color-dodge', | |
| 9754 | - 7: 'color-burn', | |
| 9755 | - 8: 'hard-light', | |
| 9756 | - 9: 'soft-light', | |
| 9757 | - 10: 'difference', | |
| 9758 | - 11: 'exclusion', | |
| 9759 | - 12: 'hue', | |
| 9760 | - 13: 'saturation', | |
| 9761 | - 14: 'color', | |
| 9762 | - 15: 'luminosity' | |
| 9763 | - }; | |
| 9764 | - return function (mode) { | |
| 9765 | - return blendModeEnums[mode] || ''; | |
| 9766 | - }; | |
| 9767 | - }(); | |
| 9768 | - | |
| 9769 | - function SliderEffect(data, elem, container) { | |
| 9770 | - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 9771 | - } | |
| 9772 | - function AngleEffect(data, elem, container) { | |
| 9773 | - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 9774 | - } | |
| 9775 | - function ColorEffect(data, elem, container) { | |
| 9776 | - this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container); | |
| 9777 | - } | |
| 9778 | - function PointEffect(data, elem, container) { | |
| 9779 | - this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container); | |
| 9780 | - } | |
| 9781 | - function LayerIndexEffect(data, elem, container) { | |
| 9782 | - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 9783 | - } | |
| 9784 | - function MaskIndexEffect(data, elem, container) { | |
| 9785 | - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 9786 | - } | |
| 9787 | - function CheckboxEffect(data, elem, container) { | |
| 9788 | - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); | |
| 9789 | - } | |
| 9790 | - function NoValueEffect() { | |
| 9791 | - this.p = {}; | |
| 9792 | - } | |
| 9793 | - | |
| 9794 | - function EffectsManager(data, element) { | |
| 9795 | - var effects = data.ef || []; | |
| 9796 | - this.effectElements = []; | |
| 9797 | - var i; | |
| 9798 | - var len = effects.length; | |
| 9799 | - var effectItem; | |
| 9800 | - for (i = 0; i < len; i += 1) { | |
| 9801 | - effectItem = new GroupEffect(effects[i], element); | |
| 9802 | - this.effectElements.push(effectItem); | |
| 9803 | - } | |
| 9804 | - } | |
| 9805 | - function GroupEffect(data, element) { | |
| 9806 | - this.init(data, element); | |
| 9807 | - } | |
| 9808 | - extendPrototype([DynamicPropertyContainer], GroupEffect); | |
| 9809 | - GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties; | |
| 9810 | - GroupEffect.prototype.init = function (data, element) { | |
| 9811 | - this.data = data; | |
| 9812 | - this.effectElements = []; | |
| 9813 | - this.initDynamicPropertyContainer(element); | |
| 9814 | - var i; | |
| 9815 | - var len = this.data.ef.length; | |
| 9816 | - var eff; | |
| 9817 | - var effects = this.data.ef; | |
| 9818 | - for (i = 0; i < len; i += 1) { | |
| 9819 | - eff = null; | |
| 9820 | - switch (effects[i].ty) { | |
| 9821 | - case 0: | |
| 9822 | - eff = new SliderEffect(effects[i], element, this); | |
| 9823 | - break; | |
| 9824 | - case 1: | |
| 9825 | - eff = new AngleEffect(effects[i], element, this); | |
| 9826 | - break; | |
| 9827 | - case 2: | |
| 9828 | - eff = new ColorEffect(effects[i], element, this); | |
| 9829 | - break; | |
| 9830 | - case 3: | |
| 9831 | - eff = new PointEffect(effects[i], element, this); | |
| 9832 | - break; | |
| 9833 | - case 4: | |
| 9834 | - case 7: | |
| 9835 | - eff = new CheckboxEffect(effects[i], element, this); | |
| 9836 | - break; | |
| 9837 | - case 10: | |
| 9838 | - eff = new LayerIndexEffect(effects[i], element, this); | |
| 9839 | - break; | |
| 9840 | - case 11: | |
| 9841 | - eff = new MaskIndexEffect(effects[i], element, this); | |
| 9842 | - break; | |
| 9843 | - case 5: | |
| 9844 | - eff = new EffectsManager(effects[i], element, this); | |
| 9845 | - break; | |
| 9846 | - // case 6: | |
| 9847 | - default: | |
| 9848 | - eff = new NoValueEffect(effects[i], element, this); | |
| 9849 | - break; | |
| 9850 | - } | |
| 9851 | - if (eff) { | |
| 9852 | - this.effectElements.push(eff); | |
| 9853 | - } | |
| 9854 | - } | |
| 9855 | - }; | |
| 9856 | - | |
| 9857 | - function BaseElement() {} | |
| 9858 | - BaseElement.prototype = { | |
| 9859 | - checkMasks: function checkMasks() { | |
| 9860 | - if (!this.data.hasMask) { | |
| 9861 | - return false; | |
| 9862 | - } | |
| 9863 | - var i = 0; | |
| 9864 | - var len = this.data.masksProperties.length; | |
| 9865 | - while (i < len) { | |
| 9866 | - if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) { | |
| 9867 | - return true; | |
| 9868 | - } | |
| 9869 | - i += 1; | |
| 9870 | - } | |
| 9871 | - return false; | |
| 9872 | - }, | |
| 9873 | - initExpressions: function initExpressions() { | |
| 9874 | - var expressionsInterfaces = getExpressionInterfaces(); | |
| 9875 | - if (!expressionsInterfaces) { | |
| 9876 | - return; | |
| 9877 | - } | |
| 9878 | - var LayerExpressionInterface = expressionsInterfaces('layer'); | |
| 9879 | - var EffectsExpressionInterface = expressionsInterfaces('effects'); | |
| 9880 | - var ShapeExpressionInterface = expressionsInterfaces('shape'); | |
| 9881 | - var TextExpressionInterface = expressionsInterfaces('text'); | |
| 9882 | - var CompExpressionInterface = expressionsInterfaces('comp'); | |
| 9883 | - this.layerInterface = LayerExpressionInterface(this); | |
| 9884 | - if (this.data.hasMask && this.maskManager) { | |
| 9885 | - this.layerInterface.registerMaskInterface(this.maskManager); | |
| 9886 | - } | |
| 9887 | - var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface); | |
| 9888 | - this.layerInterface.registerEffectsInterface(effectsInterface); | |
| 9889 | - if (this.data.ty === 0 || this.data.xt) { | |
| 9890 | - this.compInterface = CompExpressionInterface(this); | |
| 9891 | - } else if (this.data.ty === 4) { | |
| 9892 | - this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface); | |
| 9893 | - this.layerInterface.content = this.layerInterface.shapeInterface; | |
| 9894 | - } else if (this.data.ty === 5) { | |
| 9895 | - this.layerInterface.textInterface = TextExpressionInterface(this); | |
| 9896 | - this.layerInterface.text = this.layerInterface.textInterface; | |
| 9897 | - } | |
| 9898 | - }, | |
| 9899 | - setBlendMode: function setBlendMode() { | |
| 9900 | - var blendModeValue = getBlendMode(this.data.bm); | |
| 9901 | - var elem = this.baseElement || this.layerElement; | |
| 9902 | - elem.style['mix-blend-mode'] = blendModeValue; | |
| 9903 | - }, | |
| 9904 | - initBaseData: function initBaseData(data, globalData, comp) { | |
| 9905 | - this.globalData = globalData; | |
| 9906 | - this.comp = comp; | |
| 9907 | - this.data = data; | |
| 9908 | - this.layerId = createElementID(); | |
| 9909 | - | |
| 9910 | - // Stretch factor for old animations missing this property. | |
| 9911 | - if (!this.data.sr) { | |
| 9912 | - this.data.sr = 1; | |
| 9913 | - } | |
| 9914 | - // effects manager | |
| 9915 | - this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties); | |
| 9916 | - }, | |
| 9917 | - getType: function getType() { | |
| 9918 | - return this.type; | |
| 9919 | - }, | |
| 9920 | - sourceRectAtTime: function sourceRectAtTime() {} | |
| 9921 | - }; | |
| 9922 | - | |
| 9923 | - /** | |
| 9924 | - * @file | |
| 9925 | - * Handles element's layer frame update. | |
| 9926 | - * Checks layer in point and out point | |
| 9927 | - * | |
| 9928 | - */ | |
| 9929 | - | |
| 9930 | - function FrameElement() {} | |
| 9931 | - FrameElement.prototype = { | |
| 9932 | - /** | |
| 9933 | - * @function | |
| 9934 | - * Initializes frame related properties. | |
| 9935 | - * | |
| 9936 | - */ | |
| 9937 | - initFrame: function initFrame() { | |
| 9938 | - // set to true when inpoint is rendered | |
| 9939 | - this._isFirstFrame = false; | |
| 9940 | - // list of animated properties | |
| 9941 | - this.dynamicProperties = []; | |
| 9942 | - // If layer has been modified in current tick this will be true | |
| 9943 | - this._mdf = false; | |
| 9944 | - }, | |
| 9945 | - /** | |
| 9946 | - * @function | |
| 9947 | - * Calculates all dynamic values | |
| 9948 | - * | |
| 9949 | - * @param {number} num | |
| 9950 | - * current frame number in Layer's time | |
| 9951 | - * @param {boolean} isVisible | |
| 9952 | - * if layers is currently in range | |
| 9953 | - * | |
| 9954 | - */ | |
| 9955 | - prepareProperties: function prepareProperties(num, isVisible) { | |
| 9956 | - var i; | |
| 9957 | - var len = this.dynamicProperties.length; | |
| 9958 | - for (i = 0; i < len; i += 1) { | |
| 9959 | - if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') { | |
| 9960 | - this.dynamicProperties[i].getValue(); | |
| 9961 | - if (this.dynamicProperties[i]._mdf) { | |
| 9962 | - this.globalData._mdf = true; | |
| 9963 | - this._mdf = true; | |
| 9964 | - } | |
| 9965 | - } | |
| 9966 | - } | |
| 9967 | - }, | |
| 9968 | - addDynamicProperty: function addDynamicProperty(prop) { | |
| 9969 | - if (this.dynamicProperties.indexOf(prop) === -1) { | |
| 9970 | - this.dynamicProperties.push(prop); | |
| 9971 | - } | |
| 9972 | - } | |
| 9973 | - }; | |
| 9974 | - | |
| 9975 | - function FootageElement(data, globalData, comp) { | |
| 9976 | - this.initFrame(); | |
| 9977 | - this.initRenderable(); | |
| 9978 | - this.assetData = globalData.getAssetData(data.refId); | |
| 9979 | - this.footageData = globalData.imageLoader.getAsset(this.assetData); | |
| 9980 | - this.initBaseData(data, globalData, comp); | |
| 9981 | - } | |
| 9982 | - FootageElement.prototype.prepareFrame = function () {}; | |
| 9983 | - extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement); | |
| 9984 | - FootageElement.prototype.getBaseElement = function () { | |
| 9985 | - return null; | |
| 9986 | - }; | |
| 9987 | - FootageElement.prototype.renderFrame = function () {}; | |
| 9988 | - FootageElement.prototype.destroy = function () {}; | |
| 9989 | - FootageElement.prototype.initExpressions = function () { | |
| 9990 | - var expressionsInterfaces = getExpressionInterfaces(); | |
| 9991 | - if (!expressionsInterfaces) { | |
| 9992 | - return; | |
| 9993 | - } | |
| 9994 | - var FootageInterface = expressionsInterfaces('footage'); | |
| 9995 | - this.layerInterface = FootageInterface(this); | |
| 9996 | - }; | |
| 9997 | - FootageElement.prototype.getFootageData = function () { | |
| 9998 | - return this.footageData; | |
| 9999 | - }; | |
| 10000 | - | |
| 10001 | - function AudioElement(data, globalData, comp) { | |
| 10002 | - this.initFrame(); | |
| 10003 | - this.initRenderable(); | |
| 10004 | - this.assetData = globalData.getAssetData(data.refId); | |
| 10005 | - this.initBaseData(data, globalData, comp); | |
| 10006 | - this._isPlaying = false; | |
| 10007 | - this._canPlay = false; | |
| 10008 | - var assetPath = this.globalData.getAssetsPath(this.assetData); | |
| 10009 | - this.audio = this.globalData.audioController.createAudio(assetPath); | |
| 10010 | - this._currentTime = 0; | |
| 10011 | - this.globalData.audioController.addAudio(this); | |
| 10012 | - this._volumeMultiplier = 1; | |
| 10013 | - this._volume = 1; | |
| 10014 | - this._previousVolume = null; | |
| 10015 | - this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { | |
| 10016 | - _placeholder: true | |
| 10017 | - }; | |
| 10018 | - this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : { | |
| 10019 | - k: [100] | |
| 10020 | - }, 1, 0.01, this); | |
| 10021 | - } | |
| 10022 | - AudioElement.prototype.prepareFrame = function (num) { | |
| 10023 | - this.prepareRenderableFrame(num, true); | |
| 10024 | - this.prepareProperties(num, true); | |
| 10025 | - if (!this.tm._placeholder) { | |
| 10026 | - var timeRemapped = this.tm.v; | |
| 10027 | - this._currentTime = timeRemapped; | |
| 10028 | - } else { | |
| 10029 | - this._currentTime = num / this.data.sr; | |
| 10030 | - } | |
| 10031 | - this._volume = this.lv.v[0]; | |
| 10032 | - var totalVolume = this._volume * this._volumeMultiplier; | |
| 10033 | - if (this._previousVolume !== totalVolume) { | |
| 10034 | - this._previousVolume = totalVolume; | |
| 10035 | - this.audio.volume(totalVolume); | |
| 10036 | - } | |
| 10037 | - }; | |
| 10038 | - extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement); | |
| 10039 | - AudioElement.prototype.renderFrame = function () { | |
| 10040 | - if (this.isInRange && this._canPlay) { | |
| 10041 | - if (!this._isPlaying) { | |
| 10042 | - this.audio.play(); | |
| 10043 | - this.audio.seek(this._currentTime / this.globalData.frameRate); | |
| 10044 | - this._isPlaying = true; | |
| 10045 | - } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) { | |
| 10046 | - this.audio.seek(this._currentTime / this.globalData.frameRate); | |
| 10047 | - } | |
| 10048 | - } | |
| 10049 | - }; | |
| 10050 | - AudioElement.prototype.show = function () { | |
| 10051 | - // this.audio.play() | |
| 10052 | - }; | |
| 10053 | - AudioElement.prototype.hide = function () { | |
| 10054 | - this.audio.pause(); | |
| 10055 | - this._isPlaying = false; | |
| 10056 | - }; | |
| 10057 | - AudioElement.prototype.pause = function () { | |
| 10058 | - this.audio.pause(); | |
| 10059 | - this._isPlaying = false; | |
| 10060 | - this._canPlay = false; | |
| 10061 | - }; | |
| 10062 | - AudioElement.prototype.resume = function () { | |
| 10063 | - this._canPlay = true; | |
| 10064 | - }; | |
| 10065 | - AudioElement.prototype.setRate = function (rateValue) { | |
| 10066 | - this.audio.rate(rateValue); | |
| 10067 | - }; | |
| 10068 | - AudioElement.prototype.volume = function (volumeValue) { | |
| 10069 | - this._volumeMultiplier = volumeValue; | |
| 10070 | - this._previousVolume = volumeValue * this._volume; | |
| 10071 | - this.audio.volume(this._previousVolume); | |
| 10072 | - }; | |
| 10073 | - AudioElement.prototype.getBaseElement = function () { | |
| 10074 | - return null; | |
| 10075 | - }; | |
| 10076 | - AudioElement.prototype.destroy = function () {}; | |
| 10077 | - AudioElement.prototype.sourceRectAtTime = function () {}; | |
| 10078 | - AudioElement.prototype.initExpressions = function () {}; | |
| 10079 | - | |
| 10080 | - function BaseRenderer() {} | |
| 10081 | - BaseRenderer.prototype.checkLayers = function (num) { | |
| 10082 | - var i; | |
| 10083 | - var len = this.layers.length; | |
| 10084 | - var data; | |
| 10085 | - this.completeLayers = true; | |
| 10086 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 10087 | - if (!this.elements[i]) { | |
| 10088 | - data = this.layers[i]; | |
| 10089 | - if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) { | |
| 10090 | - this.buildItem(i); | |
| 10091 | - } | |
| 10092 | - } | |
| 10093 | - this.completeLayers = this.elements[i] ? this.completeLayers : false; | |
| 10094 | - } | |
| 10095 | - this.checkPendingElements(); | |
| 10096 | - }; | |
| 10097 | - BaseRenderer.prototype.createItem = function (layer) { | |
| 10098 | - switch (layer.ty) { | |
| 10099 | - case 2: | |
| 10100 | - return this.createImage(layer); | |
| 10101 | - case 0: | |
| 10102 | - return this.createComp(layer); | |
| 10103 | - case 1: | |
| 10104 | - return this.createSolid(layer); | |
| 10105 | - case 3: | |
| 10106 | - return this.createNull(layer); | |
| 10107 | - case 4: | |
| 10108 | - return this.createShape(layer); | |
| 10109 | - case 5: | |
| 10110 | - return this.createText(layer); | |
| 10111 | - case 6: | |
| 10112 | - return this.createAudio(layer); | |
| 10113 | - case 13: | |
| 10114 | - return this.createCamera(layer); | |
| 10115 | - case 15: | |
| 10116 | - return this.createFootage(layer); | |
| 10117 | - default: | |
| 10118 | - return this.createNull(layer); | |
| 10119 | - } | |
| 10120 | - }; | |
| 10121 | - BaseRenderer.prototype.createCamera = function () { | |
| 10122 | - throw new Error('You\'re using a 3d camera. Try the html renderer.'); | |
| 10123 | - }; | |
| 10124 | - BaseRenderer.prototype.createAudio = function (data) { | |
| 10125 | - return new AudioElement(data, this.globalData, this); | |
| 10126 | - }; | |
| 10127 | - BaseRenderer.prototype.createFootage = function (data) { | |
| 10128 | - return new FootageElement(data, this.globalData, this); | |
| 10129 | - }; | |
| 10130 | - BaseRenderer.prototype.buildAllItems = function () { | |
| 10131 | - var i; | |
| 10132 | - var len = this.layers.length; | |
| 10133 | - for (i = 0; i < len; i += 1) { | |
| 10134 | - this.buildItem(i); | |
| 10135 | - } | |
| 10136 | - this.checkPendingElements(); | |
| 10137 | - }; | |
| 10138 | - BaseRenderer.prototype.includeLayers = function (newLayers) { | |
| 10139 | - this.completeLayers = false; | |
| 10140 | - var i; | |
| 10141 | - var len = newLayers.length; | |
| 10142 | - var j; | |
| 10143 | - var jLen = this.layers.length; | |
| 10144 | - for (i = 0; i < len; i += 1) { | |
| 10145 | - j = 0; | |
| 10146 | - while (j < jLen) { | |
| 10147 | - if (this.layers[j].id === newLayers[i].id) { | |
| 10148 | - this.layers[j] = newLayers[i]; | |
| 10149 | - break; | |
| 10150 | - } | |
| 10151 | - j += 1; | |
| 10152 | - } | |
| 10153 | - } | |
| 10154 | - }; | |
| 10155 | - BaseRenderer.prototype.setProjectInterface = function (pInterface) { | |
| 10156 | - this.globalData.projectInterface = pInterface; | |
| 10157 | - }; | |
| 10158 | - BaseRenderer.prototype.initItems = function () { | |
| 10159 | - if (!this.globalData.progressiveLoad) { | |
| 10160 | - this.buildAllItems(); | |
| 10161 | - } | |
| 10162 | - }; | |
| 10163 | - BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) { | |
| 10164 | - var elements = this.elements; | |
| 10165 | - var layers = this.layers; | |
| 10166 | - var i = 0; | |
| 10167 | - var len = layers.length; | |
| 10168 | - while (i < len) { | |
| 10169 | - if (layers[i].ind == parentName) { | |
| 10170 | - // eslint-disable-line eqeqeq | |
| 10171 | - if (!elements[i] || elements[i] === true) { | |
| 10172 | - this.buildItem(i); | |
| 10173 | - this.addPendingElement(element); | |
| 10174 | - } else { | |
| 10175 | - hierarchy.push(elements[i]); | |
| 10176 | - elements[i].setAsParent(); | |
| 10177 | - if (layers[i].parent !== undefined) { | |
| 10178 | - this.buildElementParenting(element, layers[i].parent, hierarchy); | |
| 10179 | - } else { | |
| 10180 | - element.setHierarchy(hierarchy); | |
| 10181 | - } | |
| 10182 | - } | |
| 10183 | - } | |
| 10184 | - i += 1; | |
| 10185 | - } | |
| 10186 | - }; | |
| 10187 | - BaseRenderer.prototype.addPendingElement = function (element) { | |
| 10188 | - this.pendingElements.push(element); | |
| 10189 | - }; | |
| 10190 | - BaseRenderer.prototype.searchExtraCompositions = function (assets) { | |
| 10191 | - var i; | |
| 10192 | - var len = assets.length; | |
| 10193 | - for (i = 0; i < len; i += 1) { | |
| 10194 | - if (assets[i].xt) { | |
| 10195 | - var comp = this.createComp(assets[i]); | |
| 10196 | - comp.initExpressions(); | |
| 10197 | - this.globalData.projectInterface.registerComposition(comp); | |
| 10198 | - } | |
| 10199 | - } | |
| 10200 | - }; | |
| 10201 | - BaseRenderer.prototype.getElementById = function (ind) { | |
| 10202 | - var i; | |
| 10203 | - var len = this.elements.length; | |
| 10204 | - for (i = 0; i < len; i += 1) { | |
| 10205 | - if (this.elements[i].data.ind === ind) { | |
| 10206 | - return this.elements[i]; | |
| 10207 | - } | |
| 10208 | - } | |
| 10209 | - return null; | |
| 10210 | - }; | |
| 10211 | - BaseRenderer.prototype.getElementByPath = function (path) { | |
| 10212 | - var pathValue = path.shift(); | |
| 10213 | - var element; | |
| 10214 | - if (typeof pathValue === 'number') { | |
| 10215 | - element = this.elements[pathValue]; | |
| 10216 | - } else { | |
| 10217 | - var i; | |
| 10218 | - var len = this.elements.length; | |
| 10219 | - for (i = 0; i < len; i += 1) { | |
| 10220 | - if (this.elements[i].data.nm === pathValue) { | |
| 10221 | - element = this.elements[i]; | |
| 10222 | - break; | |
| 10223 | - } | |
| 10224 | - } | |
| 10225 | - } | |
| 10226 | - if (path.length === 0) { | |
| 10227 | - return element; | |
| 10228 | - } | |
| 10229 | - return element.getElementByPath(path); | |
| 10230 | - }; | |
| 10231 | - BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) { | |
| 10232 | - this.globalData.fontManager = new FontManager(); | |
| 10233 | - this.globalData.slotManager = slotFactory(animData); | |
| 10234 | - this.globalData.fontManager.addChars(animData.chars); | |
| 10235 | - this.globalData.fontManager.addFonts(animData.fonts, fontsContainer); | |
| 10236 | - this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem); | |
| 10237 | - this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem); | |
| 10238 | - this.globalData.imageLoader = this.animationItem.imagePreloader; | |
| 10239 | - this.globalData.audioController = this.animationItem.audioController; | |
| 10240 | - this.globalData.frameId = 0; | |
| 10241 | - this.globalData.frameRate = animData.fr; | |
| 10242 | - this.globalData.nm = animData.nm; | |
| 10243 | - this.globalData.compSize = { | |
| 10244 | - w: animData.w, | |
| 10245 | - h: animData.h | |
| 10246 | - }; | |
| 10247 | - }; | |
| 10248 | - | |
| 10249 | - var effectTypes = { | |
| 10250 | - TRANSFORM_EFFECT: 'transformEFfect' | |
| 10251 | - }; | |
| 10252 | - | |
| 10253 | - function TransformElement() {} | |
| 10254 | - TransformElement.prototype = { | |
| 10255 | - initTransform: function initTransform() { | |
| 10256 | - var mat = new Matrix(); | |
| 10257 | - this.finalTransform = { | |
| 10258 | - mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { | |
| 10259 | - o: 0 | |
| 10260 | - }, | |
| 10261 | - _matMdf: false, | |
| 10262 | - _localMatMdf: false, | |
| 10263 | - _opMdf: false, | |
| 10264 | - mat: mat, | |
| 10265 | - localMat: mat, | |
| 10266 | - localOpacity: 1 | |
| 10267 | - }; | |
| 10268 | - if (this.data.ao) { | |
| 10269 | - this.finalTransform.mProp.autoOriented = true; | |
| 10270 | - } | |
| 10271 | - | |
| 10272 | - // TODO: check TYPE 11: Guided elements | |
| 10273 | - if (this.data.ty !== 11) { | |
| 10274 | - // this.createElements(); | |
| 10275 | - } | |
| 10276 | - }, | |
| 10277 | - renderTransform: function renderTransform() { | |
| 10278 | - this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame; | |
| 10279 | - this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame; | |
| 10280 | - if (this.hierarchy) { | |
| 10281 | - var mat; | |
| 10282 | - var finalMat = this.finalTransform.mat; | |
| 10283 | - var i = 0; | |
| 10284 | - var len = this.hierarchy.length; | |
| 10285 | - // Checking if any of the transformation matrices in the hierarchy chain has changed. | |
| 10286 | - if (!this.finalTransform._matMdf) { | |
| 10287 | - while (i < len) { | |
| 10288 | - if (this.hierarchy[i].finalTransform.mProp._mdf) { | |
| 10289 | - this.finalTransform._matMdf = true; | |
| 10290 | - break; | |
| 10291 | - } | |
| 10292 | - i += 1; | |
| 10293 | - } | |
| 10294 | - } | |
| 10295 | - if (this.finalTransform._matMdf) { | |
| 10296 | - mat = this.finalTransform.mProp.v.props; | |
| 10297 | - finalMat.cloneFromProps(mat); | |
| 10298 | - for (i = 0; i < len; i += 1) { | |
| 10299 | - finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v); | |
| 10300 | - } | |
| 10301 | - } | |
| 10302 | - } | |
| 10303 | - if (!this.localTransforms || this.finalTransform._matMdf) { | |
| 10304 | - this.finalTransform._localMatMdf = this.finalTransform._matMdf; | |
| 10305 | - } | |
| 10306 | - if (this.finalTransform._opMdf) { | |
| 10307 | - this.finalTransform.localOpacity = this.finalTransform.mProp.o.v; | |
| 10308 | - } | |
| 10309 | - }, | |
| 10310 | - renderLocalTransform: function renderLocalTransform() { | |
| 10311 | - if (this.localTransforms) { | |
| 10312 | - var i = 0; | |
| 10313 | - var len = this.localTransforms.length; | |
| 10314 | - this.finalTransform._localMatMdf = this.finalTransform._matMdf; | |
| 10315 | - if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) { | |
| 10316 | - while (i < len) { | |
| 10317 | - if (this.localTransforms[i]._mdf) { | |
| 10318 | - this.finalTransform._localMatMdf = true; | |
| 10319 | - } | |
| 10320 | - if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) { | |
| 10321 | - this.finalTransform.localOpacity = this.finalTransform.mProp.o.v; | |
| 10322 | - this.finalTransform._opMdf = true; | |
| 10323 | - } | |
| 10324 | - i += 1; | |
| 10325 | - } | |
| 10326 | - } | |
| 10327 | - if (this.finalTransform._localMatMdf) { | |
| 10328 | - var localMat = this.finalTransform.localMat; | |
| 10329 | - this.localTransforms[0].matrix.clone(localMat); | |
| 10330 | - for (i = 1; i < len; i += 1) { | |
| 10331 | - var lmat = this.localTransforms[i].matrix; | |
| 10332 | - localMat.multiply(lmat); | |
| 10333 | - } | |
| 10334 | - localMat.multiply(this.finalTransform.mat); | |
| 10335 | - } | |
| 10336 | - if (this.finalTransform._opMdf) { | |
| 10337 | - var localOp = this.finalTransform.localOpacity; | |
| 10338 | - for (i = 0; i < len; i += 1) { | |
| 10339 | - localOp *= this.localTransforms[i].opacity * 0.01; | |
| 10340 | - } | |
| 10341 | - this.finalTransform.localOpacity = localOp; | |
| 10342 | - } | |
| 10343 | - } | |
| 10344 | - }, | |
| 10345 | - searchEffectTransforms: function searchEffectTransforms() { | |
| 10346 | - if (this.renderableEffectsManager) { | |
| 10347 | - var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT); | |
| 10348 | - if (transformEffects.length) { | |
| 10349 | - this.localTransforms = []; | |
| 10350 | - this.finalTransform.localMat = new Matrix(); | |
| 10351 | - var i = 0; | |
| 10352 | - var len = transformEffects.length; | |
| 10353 | - for (i = 0; i < len; i += 1) { | |
| 10354 | - this.localTransforms.push(transformEffects[i]); | |
| 10355 | - } | |
| 10356 | - } | |
| 10357 | - } | |
| 10358 | - }, | |
| 10359 | - globalToLocal: function globalToLocal(pt) { | |
| 10360 | - var transforms = []; | |
| 10361 | - transforms.push(this.finalTransform); | |
| 10362 | - var flag = true; | |
| 10363 | - var comp = this.comp; | |
| 10364 | - while (flag) { | |
| 10365 | - if (comp.finalTransform) { | |
| 10366 | - if (comp.data.hasMask) { | |
| 10367 | - transforms.splice(0, 0, comp.finalTransform); | |
| 10368 | - } | |
| 10369 | - comp = comp.comp; | |
| 10370 | - } else { | |
| 10371 | - flag = false; | |
| 10372 | - } | |
| 10373 | - } | |
| 10374 | - var i; | |
| 10375 | - var len = transforms.length; | |
| 10376 | - var ptNew; | |
| 10377 | - for (i = 0; i < len; i += 1) { | |
| 10378 | - ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); | |
| 10379 | - // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]); | |
| 10380 | - pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0]; | |
| 10381 | - } | |
| 10382 | - return pt; | |
| 10383 | - }, | |
| 10384 | - mHelper: new Matrix() | |
| 10385 | - }; | |
| 10386 | - | |
| 10387 | - function MaskElement(data, element, globalData) { | |
| 10388 | - this.data = data; | |
| 10389 | - this.element = element; | |
| 10390 | - this.globalData = globalData; | |
| 10391 | - this.storedData = []; | |
| 10392 | - this.masksProperties = this.data.masksProperties || []; | |
| 10393 | - this.maskElement = null; | |
| 10394 | - var defs = this.globalData.defs; | |
| 10395 | - var i; | |
| 10396 | - var len = this.masksProperties ? this.masksProperties.length : 0; | |
| 10397 | - this.viewData = createSizedArray(len); | |
| 10398 | - this.solidPath = ''; | |
| 10399 | - var path; | |
| 10400 | - var properties = this.masksProperties; | |
| 10401 | - var count = 0; | |
| 10402 | - var currentMasks = []; | |
| 10403 | - var j; | |
| 10404 | - var jLen; | |
| 10405 | - var layerId = createElementID(); | |
| 10406 | - var rect; | |
| 10407 | - var expansor; | |
| 10408 | - var feMorph; | |
| 10409 | - var x; | |
| 10410 | - var maskType = 'clipPath'; | |
| 10411 | - var maskRef = 'clip-path'; | |
| 10412 | - for (i = 0; i < len; i += 1) { | |
| 10413 | - if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) { | |
| 10414 | - maskType = 'mask'; | |
| 10415 | - maskRef = 'mask'; | |
| 10416 | - } | |
| 10417 | - if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) { | |
| 10418 | - rect = createNS('rect'); | |
| 10419 | - rect.setAttribute('fill', '#ffffff'); | |
| 10420 | - rect.setAttribute('width', this.element.comp.data.w || 0); | |
| 10421 | - rect.setAttribute('height', this.element.comp.data.h || 0); | |
| 10422 | - currentMasks.push(rect); | |
| 10423 | - } else { | |
| 10424 | - rect = null; | |
| 10425 | - } | |
| 10426 | - path = createNS('path'); | |
| 10427 | - if (properties[i].mode === 'n') { | |
| 10428 | - // TODO move this to a factory or to a constructor | |
| 10429 | - this.viewData[i] = { | |
| 10430 | - op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element), | |
| 10431 | - prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), | |
| 10432 | - elem: path, | |
| 10433 | - lastPath: '' | |
| 10434 | - }; | |
| 10435 | - defs.appendChild(path); | |
| 10436 | - } else { | |
| 10437 | - count += 1; | |
| 10438 | - path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff'); | |
| 10439 | - path.setAttribute('clip-rule', 'nonzero'); | |
| 10440 | - var filterID; | |
| 10441 | - if (properties[i].x.k !== 0) { | |
| 10442 | - maskType = 'mask'; | |
| 10443 | - maskRef = 'mask'; | |
| 10444 | - x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element); | |
| 10445 | - filterID = createElementID(); | |
| 10446 | - expansor = createNS('filter'); | |
| 10447 | - expansor.setAttribute('id', filterID); | |
| 10448 | - feMorph = createNS('feMorphology'); | |
| 10449 | - feMorph.setAttribute('operator', 'erode'); | |
| 10450 | - feMorph.setAttribute('in', 'SourceGraphic'); | |
| 10451 | - feMorph.setAttribute('radius', '0'); | |
| 10452 | - expansor.appendChild(feMorph); | |
| 10453 | - defs.appendChild(expansor); | |
| 10454 | - path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff'); | |
| 10455 | - } else { | |
| 10456 | - feMorph = null; | |
| 10457 | - x = null; | |
| 10458 | - } | |
| 10459 | - | |
| 10460 | - // TODO move this to a factory or to a constructor | |
| 10461 | - this.storedData[i] = { | |
| 10462 | - elem: path, | |
| 10463 | - x: x, | |
| 10464 | - expan: feMorph, | |
| 10465 | - lastPath: '', | |
| 10466 | - lastOperator: '', | |
| 10467 | - filterId: filterID, | |
| 10468 | - lastRadius: 0 | |
| 10469 | - }; | |
| 10470 | - if (properties[i].mode === 'i') { | |
| 10471 | - jLen = currentMasks.length; | |
| 10472 | - var g = createNS('g'); | |
| 10473 | - for (j = 0; j < jLen; j += 1) { | |
| 10474 | - g.appendChild(currentMasks[j]); | |
| 10475 | - } | |
| 10476 | - var mask = createNS('mask'); | |
| 10477 | - mask.setAttribute('mask-type', 'alpha'); | |
| 10478 | - mask.setAttribute('id', layerId + '_' + count); | |
| 10479 | - mask.appendChild(path); | |
| 10480 | - defs.appendChild(mask); | |
| 10481 | - g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')'); | |
| 10482 | - currentMasks.length = 0; | |
| 10483 | - currentMasks.push(g); | |
| 10484 | - } else { | |
| 10485 | - currentMasks.push(path); | |
| 10486 | - } | |
| 10487 | - if (properties[i].inv && !this.solidPath) { | |
| 10488 | - this.solidPath = this.createLayerSolidPath(); | |
| 10489 | - } | |
| 10490 | - // TODO move this to a factory or to a constructor | |
| 10491 | - this.viewData[i] = { | |
| 10492 | - elem: path, | |
| 10493 | - lastPath: '', | |
| 10494 | - op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element), | |
| 10495 | - prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), | |
| 10496 | - invRect: rect | |
| 10497 | - }; | |
| 10498 | - if (!this.viewData[i].prop.k) { | |
| 10499 | - this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]); | |
| 10500 | - } | |
| 10501 | - } | |
| 10502 | - } | |
| 10503 | - this.maskElement = createNS(maskType); | |
| 10504 | - len = currentMasks.length; | |
| 10505 | - for (i = 0; i < len; i += 1) { | |
| 10506 | - this.maskElement.appendChild(currentMasks[i]); | |
| 10507 | - } | |
| 10508 | - if (count > 0) { | |
| 10509 | - this.maskElement.setAttribute('id', layerId); | |
| 10510 | - this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')'); | |
| 10511 | - defs.appendChild(this.maskElement); | |
| 10512 | - } | |
| 10513 | - if (this.viewData.length) { | |
| 10514 | - this.element.addRenderableComponent(this); | |
| 10515 | - } | |
| 10516 | - } | |
| 10517 | - MaskElement.prototype.getMaskProperty = function (pos) { | |
| 10518 | - return this.viewData[pos].prop; | |
| 10519 | - }; | |
| 10520 | - MaskElement.prototype.renderFrame = function (isFirstFrame) { | |
| 10521 | - var finalMat = this.element.finalTransform.mat; | |
| 10522 | - var i; | |
| 10523 | - var len = this.masksProperties.length; | |
| 10524 | - for (i = 0; i < len; i += 1) { | |
| 10525 | - if (this.viewData[i].prop._mdf || isFirstFrame) { | |
| 10526 | - this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]); | |
| 10527 | - } | |
| 10528 | - if (this.viewData[i].op._mdf || isFirstFrame) { | |
| 10529 | - this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v); | |
| 10530 | - } | |
| 10531 | - if (this.masksProperties[i].mode !== 'n') { | |
| 10532 | - if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) { | |
| 10533 | - this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS()); | |
| 10534 | - } | |
| 10535 | - if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) { | |
| 10536 | - var feMorph = this.storedData[i].expan; | |
| 10537 | - if (this.storedData[i].x.v < 0) { | |
| 10538 | - if (this.storedData[i].lastOperator !== 'erode') { | |
| 10539 | - this.storedData[i].lastOperator = 'erode'; | |
| 10540 | - this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')'); | |
| 10541 | - } | |
| 10542 | - feMorph.setAttribute('radius', -this.storedData[i].x.v); | |
| 10543 | - } else { | |
| 10544 | - if (this.storedData[i].lastOperator !== 'dilate') { | |
| 10545 | - this.storedData[i].lastOperator = 'dilate'; | |
| 10546 | - this.storedData[i].elem.setAttribute('filter', null); | |
| 10547 | - } | |
| 10548 | - this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2); | |
| 10549 | - } | |
| 10550 | - } | |
| 10551 | - } | |
| 10552 | - } | |
| 10553 | - }; | |
| 10554 | - MaskElement.prototype.getMaskelement = function () { | |
| 10555 | - return this.maskElement; | |
| 10556 | - }; | |
| 10557 | - MaskElement.prototype.createLayerSolidPath = function () { | |
| 10558 | - var path = 'M0,0 '; | |
| 10559 | - path += ' h' + this.globalData.compSize.w; | |
| 10560 | - path += ' v' + this.globalData.compSize.h; | |
| 10561 | - path += ' h-' + this.globalData.compSize.w; | |
| 10562 | - path += ' v-' + this.globalData.compSize.h + ' '; | |
| 10563 | - return path; | |
| 10564 | - }; | |
| 10565 | - MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) { | |
| 10566 | - var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1]; | |
| 10567 | - var i; | |
| 10568 | - var len; | |
| 10569 | - len = pathNodes._length; | |
| 10570 | - for (i = 1; i < len; i += 1) { | |
| 10571 | - // 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]; | |
| 10572 | - 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]; | |
| 10573 | - } | |
| 10574 | - // 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]; | |
| 10575 | - if (pathNodes.c && len > 1) { | |
| 10576 | - 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]; | |
| 10577 | - } | |
| 10578 | - // pathNodes.__renderedString = pathString; | |
| 10579 | - | |
| 10580 | - if (viewData.lastPath !== pathString) { | |
| 10581 | - var pathShapeValue = ''; | |
| 10582 | - if (viewData.elem) { | |
| 10583 | - if (pathNodes.c) { | |
| 10584 | - pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString; | |
| 10585 | - } | |
| 10586 | - viewData.elem.setAttribute('d', pathShapeValue); | |
| 10587 | - } | |
| 10588 | - viewData.lastPath = pathString; | |
| 10589 | - } | |
| 10590 | - }; | |
| 10591 | - MaskElement.prototype.destroy = function () { | |
| 10592 | - this.element = null; | |
| 10593 | - this.globalData = null; | |
| 10594 | - this.maskElement = null; | |
| 10595 | - this.data = null; | |
| 10596 | - this.masksProperties = null; | |
| 10597 | - }; | |
| 10598 | - | |
| 10599 | - var filtersFactory = function () { | |
| 10600 | - var ob = {}; | |
| 10601 | - ob.createFilter = createFilter; | |
| 10602 | - ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter; | |
| 10603 | - function createFilter(filId, skipCoordinates) { | |
| 10604 | - var fil = createNS('filter'); | |
| 10605 | - fil.setAttribute('id', filId); | |
| 10606 | - if (skipCoordinates !== true) { | |
| 10607 | - fil.setAttribute('filterUnits', 'objectBoundingBox'); | |
| 10608 | - fil.setAttribute('x', '0%'); | |
| 10609 | - fil.setAttribute('y', '0%'); | |
| 10610 | - fil.setAttribute('width', '100%'); | |
| 10611 | - fil.setAttribute('height', '100%'); | |
| 10612 | - } | |
| 10613 | - return fil; | |
| 10614 | - } | |
| 10615 | - function createAlphaToLuminanceFilter() { | |
| 10616 | - var feColorMatrix = createNS('feColorMatrix'); | |
| 10617 | - feColorMatrix.setAttribute('type', 'matrix'); | |
| 10618 | - feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB'); | |
| 10619 | - feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1'); | |
| 10620 | - return feColorMatrix; | |
| 10621 | - } | |
| 10622 | - return ob; | |
| 10623 | - }(); | |
| 10624 | - | |
| 10625 | - var featureSupport = function () { | |
| 10626 | - var ob = { | |
| 10627 | - maskType: true, | |
| 10628 | - svgLumaHidden: true, | |
| 10629 | - offscreenCanvas: typeof OffscreenCanvas !== 'undefined' | |
| 10630 | - }; | |
| 10631 | - 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)) { | |
| 10632 | - ob.maskType = false; | |
| 10633 | - } | |
| 10634 | - if (/firefox/i.test(navigator.userAgent)) { | |
| 10635 | - ob.svgLumaHidden = false; | |
| 10636 | - } | |
| 10637 | - return ob; | |
| 10638 | - }(); | |
| 10639 | - | |
| 10640 | - var registeredEffects$1 = {}; | |
| 10641 | - var idPrefix = 'filter_result_'; | |
| 10642 | - function SVGEffects(elem) { | |
| 10643 | - var i; | |
| 10644 | - var source = 'SourceGraphic'; | |
| 10645 | - var len = elem.data.ef ? elem.data.ef.length : 0; | |
| 10646 | - var filId = createElementID(); | |
| 10647 | - var fil = filtersFactory.createFilter(filId, true); | |
| 10648 | - var count = 0; | |
| 10649 | - this.filters = []; | |
| 10650 | - var filterManager; | |
| 10651 | - for (i = 0; i < len; i += 1) { | |
| 10652 | - filterManager = null; | |
| 10653 | - var type = elem.data.ef[i].ty; | |
| 10654 | - if (registeredEffects$1[type]) { | |
| 10655 | - var Effect = registeredEffects$1[type].effect; | |
| 10656 | - filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source); | |
| 10657 | - source = idPrefix + count; | |
| 10658 | - if (registeredEffects$1[type].countsAsEffect) { | |
| 10659 | - count += 1; | |
| 10660 | - } | |
| 10661 | - } | |
| 10662 | - if (filterManager) { | |
| 10663 | - this.filters.push(filterManager); | |
| 10664 | - } | |
| 10665 | - } | |
| 10666 | - if (count) { | |
| 10667 | - elem.globalData.defs.appendChild(fil); | |
| 10668 | - elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')'); | |
| 10669 | - } | |
| 10670 | - if (this.filters.length) { | |
| 10671 | - elem.addRenderableComponent(this); | |
| 10672 | - } | |
| 10673 | - } | |
| 10674 | - SVGEffects.prototype.renderFrame = function (_isFirstFrame) { | |
| 10675 | - var i; | |
| 10676 | - var len = this.filters.length; | |
| 10677 | - for (i = 0; i < len; i += 1) { | |
| 10678 | - this.filters[i].renderFrame(_isFirstFrame); | |
| 10679 | - } | |
| 10680 | - }; | |
| 10681 | - SVGEffects.prototype.getEffects = function (type) { | |
| 10682 | - var i; | |
| 10683 | - var len = this.filters.length; | |
| 10684 | - var effects = []; | |
| 10685 | - for (i = 0; i < len; i += 1) { | |
| 10686 | - if (this.filters[i].type === type) { | |
| 10687 | - effects.push(this.filters[i]); | |
| 10688 | - } | |
| 10689 | - } | |
| 10690 | - return effects; | |
| 10691 | - }; | |
| 10692 | - function registerEffect$1(id, effect, countsAsEffect) { | |
| 10693 | - registeredEffects$1[id] = { | |
| 10694 | - effect: effect, | |
| 10695 | - countsAsEffect: countsAsEffect | |
| 10696 | - }; | |
| 10697 | - } | |
| 10698 | - | |
| 10699 | - function SVGBaseElement() {} | |
| 10700 | - SVGBaseElement.prototype = { | |
| 10701 | - initRendererElement: function initRendererElement() { | |
| 10702 | - this.layerElement = createNS('g'); | |
| 10703 | - }, | |
| 10704 | - createContainerElements: function createContainerElements() { | |
| 10705 | - this.matteElement = createNS('g'); | |
| 10706 | - this.transformedElement = this.layerElement; | |
| 10707 | - this.maskedElement = this.layerElement; | |
| 10708 | - this._sizeChanged = false; | |
| 10709 | - var layerElementParent = null; | |
| 10710 | - // If this layer acts as a mask for the following layer | |
| 10711 | - if (this.data.td) { | |
| 10712 | - this.matteMasks = {}; | |
| 10713 | - var gg = createNS('g'); | |
| 10714 | - gg.setAttribute('id', this.layerId); | |
| 10715 | - gg.appendChild(this.layerElement); | |
| 10716 | - layerElementParent = gg; | |
| 10717 | - this.globalData.defs.appendChild(gg); | |
| 10718 | - } else if (this.data.tt) { | |
| 10719 | - this.matteElement.appendChild(this.layerElement); | |
| 10720 | - layerElementParent = this.matteElement; | |
| 10721 | - this.baseElement = this.matteElement; | |
| 10722 | - } else { | |
| 10723 | - this.baseElement = this.layerElement; | |
| 10724 | - } | |
| 10725 | - if (this.data.ln) { | |
| 10726 | - this.layerElement.setAttribute('id', this.data.ln); | |
| 10727 | - } | |
| 10728 | - if (this.data.cl) { | |
| 10729 | - this.layerElement.setAttribute('class', this.data.cl); | |
| 10730 | - } | |
| 10731 | - // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped | |
| 10732 | - if (this.data.ty === 0 && !this.data.hd) { | |
| 10733 | - var cp = createNS('clipPath'); | |
| 10734 | - var pt = createNS('path'); | |
| 10735 | - pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z'); | |
| 10736 | - var clipId = createElementID(); | |
| 10737 | - cp.setAttribute('id', clipId); | |
| 10738 | - cp.appendChild(pt); | |
| 10739 | - this.globalData.defs.appendChild(cp); | |
| 10740 | - if (this.checkMasks()) { | |
| 10741 | - var cpGroup = createNS('g'); | |
| 10742 | - cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')'); | |
| 10743 | - cpGroup.appendChild(this.layerElement); | |
| 10744 | - this.transformedElement = cpGroup; | |
| 10745 | - if (layerElementParent) { | |
| 10746 | - layerElementParent.appendChild(this.transformedElement); | |
| 10747 | - } else { | |
| 10748 | - this.baseElement = this.transformedElement; | |
| 10749 | - } | |
| 10750 | - } else { | |
| 10751 | - this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')'); | |
| 10752 | - } | |
| 10753 | - } | |
| 10754 | - if (this.data.bm !== 0) { | |
| 10755 | - this.setBlendMode(); | |
| 10756 | - } | |
| 10757 | - }, | |
| 10758 | - renderElement: function renderElement() { | |
| 10759 | - if (this.finalTransform._localMatMdf) { | |
| 10760 | - this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS()); | |
| 10761 | - } | |
| 10762 | - if (this.finalTransform._opMdf) { | |
| 10763 | - this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity); | |
| 10764 | - } | |
| 10765 | - }, | |
| 10766 | - destroyBaseElement: function destroyBaseElement() { | |
| 10767 | - this.layerElement = null; | |
| 10768 | - this.matteElement = null; | |
| 10769 | - this.maskManager.destroy(); | |
| 10770 | - }, | |
| 10771 | - getBaseElement: function getBaseElement() { | |
| 10772 | - if (this.data.hd) { | |
| 10773 | - return null; | |
| 10774 | - } | |
| 10775 | - return this.baseElement; | |
| 10776 | - }, | |
| 10777 | - createRenderableComponents: function createRenderableComponents() { | |
| 10778 | - this.maskManager = new MaskElement(this.data, this, this.globalData); | |
| 10779 | - this.renderableEffectsManager = new SVGEffects(this); | |
| 10780 | - this.searchEffectTransforms(); | |
| 10781 | - }, | |
| 10782 | - getMatte: function getMatte(matteType) { | |
| 10783 | - // This should not be a common case. But for backward compatibility, we'll create the matte object. | |
| 10784 | - // It solves animations that have two consecutive layers marked as matte masks. | |
| 10785 | - // Which is an undefined behavior in AE. | |
| 10786 | - if (!this.matteMasks) { | |
| 10787 | - this.matteMasks = {}; | |
| 10788 | - } | |
| 10789 | - if (!this.matteMasks[matteType]) { | |
| 10790 | - var id = this.layerId + '_' + matteType; | |
| 10791 | - var filId; | |
| 10792 | - var fil; | |
| 10793 | - var useElement; | |
| 10794 | - var gg; | |
| 10795 | - if (matteType === 1 || matteType === 3) { | |
| 10796 | - var masker = createNS('mask'); | |
| 10797 | - masker.setAttribute('id', id); | |
| 10798 | - masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha'); | |
| 10799 | - useElement = createNS('use'); | |
| 10800 | - useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId); | |
| 10801 | - masker.appendChild(useElement); | |
| 10802 | - this.globalData.defs.appendChild(masker); | |
| 10803 | - if (!featureSupport.maskType && matteType === 1) { | |
| 10804 | - masker.setAttribute('mask-type', 'luminance'); | |
| 10805 | - filId = createElementID(); | |
| 10806 | - fil = filtersFactory.createFilter(filId); | |
| 10807 | - this.globalData.defs.appendChild(fil); | |
| 10808 | - fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); | |
| 10809 | - gg = createNS('g'); | |
| 10810 | - gg.appendChild(useElement); | |
| 10811 | - masker.appendChild(gg); | |
| 10812 | - gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')'); | |
| 10813 | - } | |
| 10814 | - } else if (matteType === 2) { | |
| 10815 | - var maskGroup = createNS('mask'); | |
| 10816 | - maskGroup.setAttribute('id', id); | |
| 10817 | - maskGroup.setAttribute('mask-type', 'alpha'); | |
| 10818 | - var maskGrouper = createNS('g'); | |
| 10819 | - maskGroup.appendChild(maskGrouper); | |
| 10820 | - filId = createElementID(); | |
| 10821 | - fil = filtersFactory.createFilter(filId); | |
| 10822 | - /// / | |
| 10823 | - var feCTr = createNS('feComponentTransfer'); | |
| 10824 | - feCTr.setAttribute('in', 'SourceGraphic'); | |
| 10825 | - fil.appendChild(feCTr); | |
| 10826 | - var feFunc = createNS('feFuncA'); | |
| 10827 | - feFunc.setAttribute('type', 'table'); | |
| 10828 | - feFunc.setAttribute('tableValues', '1.0 0.0'); | |
| 10829 | - feCTr.appendChild(feFunc); | |
| 10830 | - /// / | |
| 10831 | - this.globalData.defs.appendChild(fil); | |
| 10832 | - var alphaRect = createNS('rect'); | |
| 10833 | - alphaRect.setAttribute('width', this.comp.data.w); | |
| 10834 | - alphaRect.setAttribute('height', this.comp.data.h); | |
| 10835 | - alphaRect.setAttribute('x', '0'); | |
| 10836 | - alphaRect.setAttribute('y', '0'); | |
| 10837 | - alphaRect.setAttribute('fill', '#ffffff'); | |
| 10838 | - alphaRect.setAttribute('opacity', '0'); | |
| 10839 | - maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')'); | |
| 10840 | - maskGrouper.appendChild(alphaRect); | |
| 10841 | - useElement = createNS('use'); | |
| 10842 | - useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId); | |
| 10843 | - maskGrouper.appendChild(useElement); | |
| 10844 | - if (!featureSupport.maskType) { | |
| 10845 | - maskGroup.setAttribute('mask-type', 'luminance'); | |
| 10846 | - fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); | |
| 10847 | - gg = createNS('g'); | |
| 10848 | - maskGrouper.appendChild(alphaRect); | |
| 10849 | - gg.appendChild(this.layerElement); | |
| 10850 | - maskGrouper.appendChild(gg); | |
| 10851 | - } | |
| 10852 | - this.globalData.defs.appendChild(maskGroup); | |
| 10853 | - } | |
| 10854 | - this.matteMasks[matteType] = id; | |
| 10855 | - } | |
| 10856 | - return this.matteMasks[matteType]; | |
| 10857 | - }, | |
| 10858 | - setMatte: function setMatte(id) { | |
| 10859 | - if (!this.matteElement) { | |
| 10860 | - return; | |
| 10861 | - } | |
| 10862 | - this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')'); | |
| 10863 | - } | |
| 10864 | - }; | |
| 10865 | - | |
| 10866 | - /** | |
| 10867 | - * @file | |
| 10868 | - * Handles AE's layer parenting property. | |
| 10869 | - * | |
| 10870 | - */ | |
| 10871 | - | |
| 10872 | - function HierarchyElement() {} | |
| 10873 | - HierarchyElement.prototype = { | |
| 10874 | - /** | |
| 10875 | - * @function | |
| 10876 | - * Initializes hierarchy properties | |
| 10877 | - * | |
| 10878 | - */ | |
| 10879 | - initHierarchy: function initHierarchy() { | |
| 10880 | - // element's parent list | |
| 10881 | - this.hierarchy = []; | |
| 10882 | - // if element is parent of another layer _isParent will be true | |
| 10883 | - this._isParent = false; | |
| 10884 | - this.checkParenting(); | |
| 10885 | - }, | |
| 10886 | - /** | |
| 10887 | - * @function | |
| 10888 | - * Sets layer's hierarchy. | |
| 10889 | - * @param {array} hierarch | |
| 10890 | - * layer's parent list | |
| 10891 | - * | |
| 10892 | - */ | |
| 10893 | - setHierarchy: function setHierarchy(hierarchy) { | |
| 10894 | - this.hierarchy = hierarchy; | |
| 10895 | - }, | |
| 10896 | - /** | |
| 10897 | - * @function | |
| 10898 | - * Sets layer as parent. | |
| 10899 | - * | |
| 10900 | - */ | |
| 10901 | - setAsParent: function setAsParent() { | |
| 10902 | - this._isParent = true; | |
| 10903 | - }, | |
| 10904 | - /** | |
| 10905 | - * @function | |
| 10906 | - * Searches layer's parenting chain | |
| 10907 | - * | |
| 10908 | - */ | |
| 10909 | - checkParenting: function checkParenting() { | |
| 10910 | - if (this.data.parent !== undefined) { | |
| 10911 | - this.comp.buildElementParenting(this, this.data.parent, []); | |
| 10912 | - } | |
| 10913 | - } | |
| 10914 | - }; | |
| 10915 | - | |
| 10916 | - function RenderableDOMElement() {} | |
| 10917 | - (function () { | |
| 10918 | - var _prototype = { | |
| 10919 | - initElement: function initElement(data, globalData, comp) { | |
| 10920 | - this.initFrame(); | |
| 10921 | - this.initBaseData(data, globalData, comp); | |
| 10922 | - this.initTransform(data, globalData, comp); | |
| 10923 | - this.initHierarchy(); | |
| 10924 | - this.initRenderable(); | |
| 10925 | - this.initRendererElement(); | |
| 10926 | - this.createContainerElements(); | |
| 10927 | - this.createRenderableComponents(); | |
| 10928 | - this.createContent(); | |
| 10929 | - this.hide(); | |
| 10930 | - }, | |
| 10931 | - hide: function hide() { | |
| 10932 | - // console.log('HIDE', this); | |
| 10933 | - if (!this.hidden && (!this.isInRange || this.isTransparent)) { | |
| 10934 | - var elem = this.baseElement || this.layerElement; | |
| 10935 | - elem.style.display = 'none'; | |
| 10936 | - this.hidden = true; | |
| 10937 | - } | |
| 10938 | - }, | |
| 10939 | - show: function show() { | |
| 10940 | - // console.log('SHOW', this); | |
| 10941 | - if (this.isInRange && !this.isTransparent) { | |
| 10942 | - if (!this.data.hd) { | |
| 10943 | - var elem = this.baseElement || this.layerElement; | |
| 10944 | - elem.style.display = 'block'; | |
| 10945 | - } | |
| 10946 | - this.hidden = false; | |
| 10947 | - this._isFirstFrame = true; | |
| 10948 | - } | |
| 10949 | - }, | |
| 10950 | - renderFrame: function renderFrame() { | |
| 10951 | - // If it is exported as hidden (data.hd === true) no need to render | |
| 10952 | - // If it is not visible no need to render | |
| 10953 | - if (this.data.hd || this.hidden) { | |
| 10954 | - return; | |
| 10955 | - } | |
| 10956 | - this.renderTransform(); | |
| 10957 | - this.renderRenderable(); | |
| 10958 | - this.renderLocalTransform(); | |
| 10959 | - this.renderElement(); | |
| 10960 | - this.renderInnerContent(); | |
| 10961 | - if (this._isFirstFrame) { | |
| 10962 | - this._isFirstFrame = false; | |
| 10963 | - } | |
| 10964 | - }, | |
| 10965 | - renderInnerContent: function renderInnerContent() {}, | |
| 10966 | - prepareFrame: function prepareFrame(num) { | |
| 10967 | - this._mdf = false; | |
| 10968 | - this.prepareRenderableFrame(num); | |
| 10969 | - this.prepareProperties(num, this.isInRange); | |
| 10970 | - this.checkTransparency(); | |
| 10971 | - }, | |
| 10972 | - destroy: function destroy() { | |
| 10973 | - this.innerElem = null; | |
| 10974 | - this.destroyBaseElement(); | |
| 10975 | - } | |
| 10976 | - }; | |
| 10977 | - extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement); | |
| 10978 | - })(); | |
| 10979 | - | |
| 10980 | - function IImageElement(data, globalData, comp) { | |
| 10981 | - this.assetData = globalData.getAssetData(data.refId); | |
| 10982 | - if (this.assetData && this.assetData.sid) { | |
| 10983 | - this.assetData = globalData.slotManager.getProp(this.assetData); | |
| 10984 | - } | |
| 10985 | - this.initElement(data, globalData, comp); | |
| 10986 | - this.sourceRect = { | |
| 10987 | - top: 0, | |
| 10988 | - left: 0, | |
| 10989 | - width: this.assetData.w, | |
| 10990 | - height: this.assetData.h | |
| 10991 | - }; | |
| 10992 | - } | |
| 10993 | - extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement); | |
| 10994 | - IImageElement.prototype.createContent = function () { | |
| 10995 | - var assetPath = this.globalData.getAssetsPath(this.assetData); | |
| 10996 | - this.innerElem = createNS('image'); | |
| 10997 | - this.innerElem.setAttribute('width', this.assetData.w + 'px'); | |
| 10998 | - this.innerElem.setAttribute('height', this.assetData.h + 'px'); | |
| 10999 | - this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio); | |
| 11000 | - this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath); | |
| 11001 | - this.layerElement.appendChild(this.innerElem); | |
| 11002 | - }; | |
| 11003 | - IImageElement.prototype.sourceRectAtTime = function () { | |
| 11004 | - return this.sourceRect; | |
| 11005 | - }; | |
| 11006 | - | |
| 11007 | - function ProcessedElement(element, position) { | |
| 11008 | - this.elem = element; | |
| 11009 | - this.pos = position; | |
| 11010 | - } | |
| 11011 | - | |
| 11012 | - function IShapeElement() {} | |
| 11013 | - IShapeElement.prototype = { | |
| 11014 | - addShapeToModifiers: function addShapeToModifiers(data) { | |
| 11015 | - var i; | |
| 11016 | - var len = this.shapeModifiers.length; | |
| 11017 | - for (i = 0; i < len; i += 1) { | |
| 11018 | - this.shapeModifiers[i].addShape(data); | |
| 11019 | - } | |
| 11020 | - }, | |
| 11021 | - isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) { | |
| 11022 | - var i = 0; | |
| 11023 | - var len = this.shapeModifiers.length; | |
| 11024 | - while (i < len) { | |
| 11025 | - if (this.shapeModifiers[i].isAnimatedWithShape(data)) { | |
| 11026 | - return true; | |
| 11027 | - } | |
| 11028 | - } | |
| 11029 | - return false; | |
| 11030 | - }, | |
| 11031 | - renderModifiers: function renderModifiers() { | |
| 11032 | - if (!this.shapeModifiers.length) { | |
| 11033 | - return; | |
| 11034 | - } | |
| 11035 | - var i; | |
| 11036 | - var len = this.shapes.length; | |
| 11037 | - for (i = 0; i < len; i += 1) { | |
| 11038 | - this.shapes[i].sh.reset(); | |
| 11039 | - } | |
| 11040 | - len = this.shapeModifiers.length; | |
| 11041 | - var shouldBreakProcess; | |
| 11042 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 11043 | - shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); | |
| 11044 | - // workaround to fix cases where a repeater resets the shape so the following processes get called twice | |
| 11045 | - // TODO: find a better solution for this | |
| 11046 | - if (shouldBreakProcess) { | |
| 11047 | - break; | |
| 11048 | - } | |
| 11049 | - } | |
| 11050 | - }, | |
| 11051 | - searchProcessedElement: function searchProcessedElement(elem) { | |
| 11052 | - var elements = this.processedElements; | |
| 11053 | - var i = 0; | |
| 11054 | - var len = elements.length; | |
| 11055 | - while (i < len) { | |
| 11056 | - if (elements[i].elem === elem) { | |
| 11057 | - return elements[i].pos; | |
| 11058 | - } | |
| 11059 | - i += 1; | |
| 11060 | - } | |
| 11061 | - return 0; | |
| 11062 | - }, | |
| 11063 | - addProcessedElement: function addProcessedElement(elem, pos) { | |
| 11064 | - var elements = this.processedElements; | |
| 11065 | - var i = elements.length; | |
| 11066 | - while (i) { | |
| 11067 | - i -= 1; | |
| 11068 | - if (elements[i].elem === elem) { | |
| 11069 | - elements[i].pos = pos; | |
| 11070 | - return; | |
| 11071 | - } | |
| 11072 | - } | |
| 11073 | - elements.push(new ProcessedElement(elem, pos)); | |
| 11074 | - }, | |
| 11075 | - prepareFrame: function prepareFrame(num) { | |
| 11076 | - this.prepareRenderableFrame(num); | |
| 11077 | - this.prepareProperties(num, this.isInRange); | |
| 11078 | - } | |
| 11079 | - }; | |
| 11080 | - | |
| 11081 | - var lineCapEnum = { | |
| 11082 | - 1: 'butt', | |
| 11083 | - 2: 'round', | |
| 11084 | - 3: 'square' | |
| 11085 | - }; | |
| 11086 | - var lineJoinEnum = { | |
| 11087 | - 1: 'miter', | |
| 11088 | - 2: 'round', | |
| 11089 | - 3: 'bevel' | |
| 11090 | - }; | |
| 11091 | - | |
| 11092 | - function SVGShapeData(transformers, level, shape) { | |
| 11093 | - this.caches = []; | |
| 11094 | - this.styles = []; | |
| 11095 | - this.transformers = transformers; | |
| 11096 | - this.lStr = ''; | |
| 11097 | - this.sh = shape; | |
| 11098 | - this.lvl = level; | |
| 11099 | - // TODO find if there are some cases where _isAnimated can be false. | |
| 11100 | - // For now, since shapes add up with other shapes. They have to be calculated every time. | |
| 11101 | - // One way of finding out is checking if all styles associated to this shape depend only of this shape | |
| 11102 | - this._isAnimated = !!shape.k; | |
| 11103 | - // TODO: commenting this for now since all shapes are animated | |
| 11104 | - var i = 0; | |
| 11105 | - var len = transformers.length; | |
| 11106 | - while (i < len) { | |
| 11107 | - if (transformers[i].mProps.dynamicProperties.length) { | |
| 11108 | - this._isAnimated = true; | |
| 11109 | - break; | |
| 11110 | - } | |
| 11111 | - i += 1; | |
| 11112 | - } | |
| 11113 | - } | |
| 11114 | - SVGShapeData.prototype.setAsAnimated = function () { | |
| 11115 | - this._isAnimated = true; | |
| 11116 | - }; | |
| 11117 | - | |
| 11118 | - function SVGStyleData(data, level) { | |
| 11119 | - this.data = data; | |
| 11120 | - this.type = data.ty; | |
| 11121 | - this.d = ''; | |
| 11122 | - this.lvl = level; | |
| 11123 | - this._mdf = false; | |
| 11124 | - this.closed = data.hd === true; | |
| 11125 | - this.pElem = createNS('path'); | |
| 11126 | - this.msElem = null; | |
| 11127 | - } | |
| 11128 | - SVGStyleData.prototype.reset = function () { | |
| 11129 | - this.d = ''; | |
| 11130 | - this._mdf = false; | |
| 11131 | - }; | |
| 11132 | - | |
| 11133 | - function DashProperty(elem, data, renderer, container) { | |
| 11134 | - this.elem = elem; | |
| 11135 | - this.frameId = -1; | |
| 11136 | - this.dataProps = createSizedArray(data.length); | |
| 11137 | - this.renderer = renderer; | |
| 11138 | - this.k = false; | |
| 11139 | - this.dashStr = ''; | |
| 11140 | - this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0); | |
| 11141 | - this.dashoffset = createTypedArray('float32', 1); | |
| 11142 | - this.initDynamicPropertyContainer(container); | |
| 11143 | - var i; | |
| 11144 | - var len = data.length || 0; | |
| 11145 | - var prop; | |
| 11146 | - for (i = 0; i < len; i += 1) { | |
| 11147 | - prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this); | |
| 11148 | - this.k = prop.k || this.k; | |
| 11149 | - this.dataProps[i] = { | |
| 11150 | - n: data[i].n, | |
| 11151 | - p: prop | |
| 11152 | - }; | |
| 11153 | - } | |
| 11154 | - if (!this.k) { | |
| 11155 | - this.getValue(true); | |
| 11156 | - } | |
| 11157 | - this._isAnimated = this.k; | |
| 11158 | - } | |
| 11159 | - DashProperty.prototype.getValue = function (forceRender) { | |
| 11160 | - if (this.elem.globalData.frameId === this.frameId && !forceRender) { | |
| 11161 | - return; | |
| 11162 | - } | |
| 11163 | - this.frameId = this.elem.globalData.frameId; | |
| 11164 | - this.iterateDynamicProperties(); | |
| 11165 | - this._mdf = this._mdf || forceRender; | |
| 11166 | - if (this._mdf) { | |
| 11167 | - var i = 0; | |
| 11168 | - var len = this.dataProps.length; | |
| 11169 | - if (this.renderer === 'svg') { | |
| 11170 | - this.dashStr = ''; | |
| 11171 | - } | |
| 11172 | - for (i = 0; i < len; i += 1) { | |
| 11173 | - if (this.dataProps[i].n !== 'o') { | |
| 11174 | - if (this.renderer === 'svg') { | |
| 11175 | - this.dashStr += ' ' + this.dataProps[i].p.v; | |
| 11176 | - } else { | |
| 11177 | - this.dashArray[i] = this.dataProps[i].p.v; | |
| 11178 | - } | |
| 11179 | - } else { | |
| 11180 | - this.dashoffset[0] = this.dataProps[i].p.v; | |
| 11181 | - } | |
| 11182 | - } | |
| 11183 | - } | |
| 11184 | - }; | |
| 11185 | - extendPrototype([DynamicPropertyContainer], DashProperty); | |
| 11186 | - | |
| 11187 | - function SVGStrokeStyleData(elem, data, styleOb) { | |
| 11188 | - this.initDynamicPropertyContainer(elem); | |
| 11189 | - this.getValue = this.iterateDynamicProperties; | |
| 11190 | - this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this); | |
| 11191 | - this.w = PropertyFactory.getProp(elem, data.w, 0, null, this); | |
| 11192 | - this.d = new DashProperty(elem, data.d || {}, 'svg', this); | |
| 11193 | - this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this); | |
| 11194 | - this.style = styleOb; | |
| 11195 | - this._isAnimated = !!this._isAnimated; | |
| 11196 | - } | |
| 11197 | - extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData); | |
| 11198 | - | |
| 11199 | - function SVGFillStyleData(elem, data, styleOb) { | |
| 11200 | - this.initDynamicPropertyContainer(elem); | |
| 11201 | - this.getValue = this.iterateDynamicProperties; | |
| 11202 | - this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this); | |
| 11203 | - this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this); | |
| 11204 | - this.style = styleOb; | |
| 11205 | - } | |
| 11206 | - extendPrototype([DynamicPropertyContainer], SVGFillStyleData); | |
| 11207 | - | |
| 11208 | - function SVGNoStyleData(elem, data, styleOb) { | |
| 11209 | - this.initDynamicPropertyContainer(elem); | |
| 11210 | - this.getValue = this.iterateDynamicProperties; | |
| 11211 | - this.style = styleOb; | |
| 11212 | - } | |
| 11213 | - extendPrototype([DynamicPropertyContainer], SVGNoStyleData); | |
| 11214 | - | |
| 11215 | - function GradientProperty(elem, data, container) { | |
| 11216 | - this.data = data; | |
| 11217 | - this.c = createTypedArray('uint8c', data.p * 4); | |
| 11218 | - var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4; | |
| 11219 | - this.o = createTypedArray('float32', cLength); | |
| 11220 | - this._cmdf = false; | |
| 11221 | - this._omdf = false; | |
| 11222 | - this._collapsable = this.checkCollapsable(); | |
| 11223 | - this._hasOpacity = cLength; | |
| 11224 | - this.initDynamicPropertyContainer(container); | |
| 11225 | - this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this); | |
| 11226 | - this.k = this.prop.k; | |
| 11227 | - this.getValue(true); | |
| 11228 | - } | |
| 11229 | - GradientProperty.prototype.comparePoints = function (values, points) { | |
| 11230 | - var i = 0; | |
| 11231 | - var len = this.o.length / 2; | |
| 11232 | - var diff; | |
| 11233 | - while (i < len) { | |
| 11234 | - diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]); | |
| 11235 | - if (diff > 0.01) { | |
| 11236 | - return false; | |
| 11237 | - } | |
| 11238 | - i += 1; | |
| 11239 | - } | |
| 11240 | - return true; | |
| 11241 | - }; | |
| 11242 | - GradientProperty.prototype.checkCollapsable = function () { | |
| 11243 | - if (this.o.length / 2 !== this.c.length / 4) { | |
| 11244 | - return false; | |
| 11245 | - } | |
| 11246 | - if (this.data.k.k[0].s) { | |
| 11247 | - var i = 0; | |
| 11248 | - var len = this.data.k.k.length; | |
| 11249 | - while (i < len) { | |
| 11250 | - if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) { | |
| 11251 | - return false; | |
| 11252 | - } | |
| 11253 | - i += 1; | |
| 11254 | - } | |
| 11255 | - } else if (!this.comparePoints(this.data.k.k, this.data.p)) { | |
| 11256 | - return false; | |
| 11257 | - } | |
| 11258 | - return true; | |
| 11259 | - }; | |
| 11260 | - GradientProperty.prototype.getValue = function (forceRender) { | |
| 11261 | - this.prop.getValue(); | |
| 11262 | - this._mdf = false; | |
| 11263 | - this._cmdf = false; | |
| 11264 | - this._omdf = false; | |
| 11265 | - if (this.prop._mdf || forceRender) { | |
| 11266 | - var i; | |
| 11267 | - var len = this.data.p * 4; | |
| 11268 | - var mult; | |
| 11269 | - var val; | |
| 11270 | - for (i = 0; i < len; i += 1) { | |
| 11271 | - mult = i % 4 === 0 ? 100 : 255; | |
| 11272 | - val = Math.round(this.prop.v[i] * mult); | |
| 11273 | - if (this.c[i] !== val) { | |
| 11274 | - this.c[i] = val; | |
| 11275 | - this._cmdf = !forceRender; | |
| 11276 | - } | |
| 11277 | - } | |
| 11278 | - if (this.o.length) { | |
| 11279 | - len = this.prop.v.length; | |
| 11280 | - for (i = this.data.p * 4; i < len; i += 1) { | |
| 11281 | - mult = i % 2 === 0 ? 100 : 1; | |
| 11282 | - val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i]; | |
| 11283 | - if (this.o[i - this.data.p * 4] !== val) { | |
| 11284 | - this.o[i - this.data.p * 4] = val; | |
| 11285 | - this._omdf = !forceRender; | |
| 11286 | - } | |
| 11287 | - } | |
| 11288 | - } | |
| 11289 | - this._mdf = !forceRender; | |
| 11290 | - } | |
| 11291 | - }; | |
| 11292 | - extendPrototype([DynamicPropertyContainer], GradientProperty); | |
| 11293 | - | |
| 11294 | - function SVGGradientFillStyleData(elem, data, styleOb) { | |
| 11295 | - this.initDynamicPropertyContainer(elem); | |
| 11296 | - this.getValue = this.iterateDynamicProperties; | |
| 11297 | - this.initGradientData(elem, data, styleOb); | |
| 11298 | - } | |
| 11299 | - SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) { | |
| 11300 | - this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this); | |
| 11301 | - this.s = PropertyFactory.getProp(elem, data.s, 1, null, this); | |
| 11302 | - this.e = PropertyFactory.getProp(elem, data.e, 1, null, this); | |
| 11303 | - this.h = PropertyFactory.getProp(elem, data.h || { | |
| 11304 | - k: 0 | |
| 11305 | - }, 0, 0.01, this); | |
| 11306 | - this.a = PropertyFactory.getProp(elem, data.a || { | |
| 11307 | - k: 0 | |
| 11308 | - }, 0, degToRads, this); | |
| 11309 | - this.g = new GradientProperty(elem, data.g, this); | |
| 11310 | - this.style = styleOb; | |
| 11311 | - this.stops = []; | |
| 11312 | - this.setGradientData(styleOb.pElem, data); | |
| 11313 | - this.setGradientOpacity(data, styleOb); | |
| 11314 | - this._isAnimated = !!this._isAnimated; | |
| 11315 | - }; | |
| 11316 | - SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) { | |
| 11317 | - var gradientId = createElementID(); | |
| 11318 | - var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient'); | |
| 11319 | - gfill.setAttribute('id', gradientId); | |
| 11320 | - gfill.setAttribute('spreadMethod', 'pad'); | |
| 11321 | - gfill.setAttribute('gradientUnits', 'userSpaceOnUse'); | |
| 11322 | - var stops = []; | |
| 11323 | - var stop; | |
| 11324 | - var j; | |
| 11325 | - var jLen; | |
| 11326 | - jLen = data.g.p * 4; | |
| 11327 | - for (j = 0; j < jLen; j += 4) { | |
| 11328 | - stop = createNS('stop'); | |
| 11329 | - gfill.appendChild(stop); | |
| 11330 | - stops.push(stop); | |
| 11331 | - } | |
| 11332 | - pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')'); | |
| 11333 | - this.gf = gfill; | |
| 11334 | - this.cst = stops; | |
| 11335 | - }; | |
| 11336 | - SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) { | |
| 11337 | - if (this.g._hasOpacity && !this.g._collapsable) { | |
| 11338 | - var stop; | |
| 11339 | - var j; | |
| 11340 | - var jLen; | |
| 11341 | - var mask = createNS('mask'); | |
| 11342 | - var maskElement = createNS('path'); | |
| 11343 | - mask.appendChild(maskElement); | |
| 11344 | - var opacityId = createElementID(); | |
| 11345 | - var maskId = createElementID(); | |
| 11346 | - mask.setAttribute('id', maskId); | |
| 11347 | - var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient'); | |
| 11348 | - opFill.setAttribute('id', opacityId); | |
| 11349 | - opFill.setAttribute('spreadMethod', 'pad'); | |
| 11350 | - opFill.setAttribute('gradientUnits', 'userSpaceOnUse'); | |
| 11351 | - jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length; | |
| 11352 | - var stops = this.stops; | |
| 11353 | - for (j = data.g.p * 4; j < jLen; j += 2) { | |
| 11354 | - stop = createNS('stop'); | |
| 11355 | - stop.setAttribute('stop-color', 'rgb(255,255,255)'); | |
| 11356 | - opFill.appendChild(stop); | |
| 11357 | - stops.push(stop); | |
| 11358 | - } | |
| 11359 | - maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')'); | |
| 11360 | - if (data.ty === 'gs') { | |
| 11361 | - maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]); | |
| 11362 | - maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]); | |
| 11363 | - if (data.lj === 1) { | |
| 11364 | - maskElement.setAttribute('stroke-miterlimit', data.ml); | |
| 11365 | - } | |
| 11366 | - } | |
| 11367 | - this.of = opFill; | |
| 11368 | - this.ms = mask; | |
| 11369 | - this.ost = stops; | |
| 11370 | - this.maskId = maskId; | |
| 11371 | - styleOb.msElem = maskElement; | |
| 11372 | - } | |
| 11373 | - }; | |
| 11374 | - extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData); | |
| 11375 | - | |
| 11376 | - function SVGGradientStrokeStyleData(elem, data, styleOb) { | |
| 11377 | - this.initDynamicPropertyContainer(elem); | |
| 11378 | - this.getValue = this.iterateDynamicProperties; | |
| 11379 | - this.w = PropertyFactory.getProp(elem, data.w, 0, null, this); | |
| 11380 | - this.d = new DashProperty(elem, data.d || {}, 'svg', this); | |
| 11381 | - this.initGradientData(elem, data, styleOb); | |
| 11382 | - this._isAnimated = !!this._isAnimated; | |
| 11383 | - } | |
| 11384 | - extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData); | |
| 11385 | - | |
| 11386 | - function ShapeGroupData() { | |
| 11387 | - this.it = []; | |
| 11388 | - this.prevViewData = []; | |
| 11389 | - this.gr = createNS('g'); | |
| 11390 | - } | |
| 11391 | - | |
| 11392 | - function SVGTransformData(mProps, op, container) { | |
| 11393 | - this.transform = { | |
| 11394 | - mProps: mProps, | |
| 11395 | - op: op, | |
| 11396 | - container: container | |
| 11397 | - }; | |
| 11398 | - this.elements = []; | |
| 11399 | - this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length; | |
| 11400 | - } | |
| 11401 | - | |
| 11402 | - var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) { | |
| 11403 | - if (length === 0) { | |
| 11404 | - return ''; | |
| 11405 | - } | |
| 11406 | - var _o = pathNodes.o; | |
| 11407 | - var _i = pathNodes.i; | |
| 11408 | - var _v = pathNodes.v; | |
| 11409 | - var i; | |
| 11410 | - var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]); | |
| 11411 | - for (i = 1; i < length; i += 1) { | |
| 11412 | - 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]); | |
| 11413 | - } | |
| 11414 | - if (closed && length) { | |
| 11415 | - 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]); | |
| 11416 | - shapeString += 'z'; | |
| 11417 | - } | |
| 11418 | - return shapeString; | |
| 11419 | - }; | |
| 11420 | - | |
| 11421 | - var SVGElementsRenderer = function () { | |
| 11422 | - var _identityMatrix = new Matrix(); | |
| 11423 | - var _matrixHelper = new Matrix(); | |
| 11424 | - var ob = { | |
| 11425 | - createRenderFunction: createRenderFunction | |
| 11426 | - }; | |
| 11427 | - function createRenderFunction(data) { | |
| 11428 | - switch (data.ty) { | |
| 11429 | - case 'fl': | |
| 11430 | - return renderFill; | |
| 11431 | - case 'gf': | |
| 11432 | - return renderGradient; | |
| 11433 | - case 'gs': | |
| 11434 | - return renderGradientStroke; | |
| 11435 | - case 'st': | |
| 11436 | - return renderStroke; | |
| 11437 | - case 'sh': | |
| 11438 | - case 'el': | |
| 11439 | - case 'rc': | |
| 11440 | - case 'sr': | |
| 11441 | - return renderPath; | |
| 11442 | - case 'tr': | |
| 11443 | - return renderContentTransform; | |
| 11444 | - case 'no': | |
| 11445 | - return renderNoop; | |
| 11446 | - default: | |
| 11447 | - return null; | |
| 11448 | - } | |
| 11449 | - } | |
| 11450 | - function renderContentTransform(styleData, itemData, isFirstFrame) { | |
| 11451 | - if (isFirstFrame || itemData.transform.op._mdf) { | |
| 11452 | - itemData.transform.container.setAttribute('opacity', itemData.transform.op.v); | |
| 11453 | - } | |
| 11454 | - if (isFirstFrame || itemData.transform.mProps._mdf) { | |
| 11455 | - itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS()); | |
| 11456 | - } | |
| 11457 | - } | |
| 11458 | - function renderNoop() {} | |
| 11459 | - function renderPath(styleData, itemData, isFirstFrame) { | |
| 11460 | - var j; | |
| 11461 | - var jLen; | |
| 11462 | - var pathStringTransformed; | |
| 11463 | - var redraw; | |
| 11464 | - var pathNodes; | |
| 11465 | - var l; | |
| 11466 | - var lLen = itemData.styles.length; | |
| 11467 | - var lvl = itemData.lvl; | |
| 11468 | - var paths; | |
| 11469 | - var mat; | |
| 11470 | - var iterations; | |
| 11471 | - var k; | |
| 11472 | - for (l = 0; l < lLen; l += 1) { | |
| 11473 | - redraw = itemData.sh._mdf || isFirstFrame; | |
| 11474 | - if (itemData.styles[l].lvl < lvl) { | |
| 11475 | - mat = _matrixHelper.reset(); | |
| 11476 | - iterations = lvl - itemData.styles[l].lvl; | |
| 11477 | - k = itemData.transformers.length - 1; | |
| 11478 | - while (!redraw && iterations > 0) { | |
| 11479 | - redraw = itemData.transformers[k].mProps._mdf || redraw; | |
| 11480 | - iterations -= 1; | |
| 11481 | - k -= 1; | |
| 11482 | - } | |
| 11483 | - if (redraw) { | |
| 11484 | - iterations = lvl - itemData.styles[l].lvl; | |
| 11485 | - k = itemData.transformers.length - 1; | |
| 11486 | - while (iterations > 0) { | |
| 11487 | - mat.multiply(itemData.transformers[k].mProps.v); | |
| 11488 | - iterations -= 1; | |
| 11489 | - k -= 1; | |
| 11490 | - } | |
| 11491 | - } | |
| 11492 | - } else { | |
| 11493 | - mat = _identityMatrix; | |
| 11494 | - } | |
| 11495 | - paths = itemData.sh.paths; | |
| 11496 | - jLen = paths._length; | |
| 11497 | - if (redraw) { | |
| 11498 | - pathStringTransformed = ''; | |
| 11499 | - for (j = 0; j < jLen; j += 1) { | |
| 11500 | - pathNodes = paths.shapes[j]; | |
| 11501 | - if (pathNodes && pathNodes._length) { | |
| 11502 | - pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat); | |
| 11503 | - } | |
| 11504 | - } | |
| 11505 | - itemData.caches[l] = pathStringTransformed; | |
| 11506 | - } else { | |
| 11507 | - pathStringTransformed = itemData.caches[l]; | |
| 11508 | - } | |
| 11509 | - itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed; | |
| 11510 | - itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf; | |
| 11511 | - } | |
| 11512 | - } | |
| 11513 | - function renderFill(styleData, itemData, isFirstFrame) { | |
| 11514 | - var styleElem = itemData.style; | |
| 11515 | - if (itemData.c._mdf || isFirstFrame) { | |
| 11516 | - styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'); | |
| 11517 | - } | |
| 11518 | - if (itemData.o._mdf || isFirstFrame) { | |
| 11519 | - styleElem.pElem.setAttribute('fill-opacity', itemData.o.v); | |
| 11520 | - } | |
| 11521 | - } | |
| 11522 | - function renderGradientStroke(styleData, itemData, isFirstFrame) { | |
| 11523 | - renderGradient(styleData, itemData, isFirstFrame); | |
| 11524 | - renderStroke(styleData, itemData, isFirstFrame); | |
| 11525 | - } | |
| 11526 | - function renderGradient(styleData, itemData, isFirstFrame) { | |
| 11527 | - var gfill = itemData.gf; | |
| 11528 | - var hasOpacity = itemData.g._hasOpacity; | |
| 11529 | - var pt1 = itemData.s.v; | |
| 11530 | - var pt2 = itemData.e.v; | |
| 11531 | - if (itemData.o._mdf || isFirstFrame) { | |
| 11532 | - var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity'; | |
| 11533 | - itemData.style.pElem.setAttribute(attr, itemData.o.v); | |
| 11534 | - } | |
| 11535 | - if (itemData.s._mdf || isFirstFrame) { | |
| 11536 | - var attr1 = styleData.t === 1 ? 'x1' : 'cx'; | |
| 11537 | - var attr2 = attr1 === 'x1' ? 'y1' : 'cy'; | |
| 11538 | - gfill.setAttribute(attr1, pt1[0]); | |
| 11539 | - gfill.setAttribute(attr2, pt1[1]); | |
| 11540 | - if (hasOpacity && !itemData.g._collapsable) { | |
| 11541 | - itemData.of.setAttribute(attr1, pt1[0]); | |
| 11542 | - itemData.of.setAttribute(attr2, pt1[1]); | |
| 11543 | - } | |
| 11544 | - } | |
| 11545 | - var stops; | |
| 11546 | - var i; | |
| 11547 | - var len; | |
| 11548 | - var stop; | |
| 11549 | - if (itemData.g._cmdf || isFirstFrame) { | |
| 11550 | - stops = itemData.cst; | |
| 11551 | - var cValues = itemData.g.c; | |
| 11552 | - len = stops.length; | |
| 11553 | - for (i = 0; i < len; i += 1) { | |
| 11554 | - stop = stops[i]; | |
| 11555 | - stop.setAttribute('offset', cValues[i * 4] + '%'); | |
| 11556 | - stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')'); | |
| 11557 | - } | |
| 11558 | - } | |
| 11559 | - if (hasOpacity && (itemData.g._omdf || isFirstFrame)) { | |
| 11560 | - var oValues = itemData.g.o; | |
| 11561 | - if (itemData.g._collapsable) { | |
| 11562 | - stops = itemData.cst; | |
| 11563 | - } else { | |
| 11564 | - stops = itemData.ost; | |
| 11565 | - } | |
| 11566 | - len = stops.length; | |
| 11567 | - for (i = 0; i < len; i += 1) { | |
| 11568 | - stop = stops[i]; | |
| 11569 | - if (!itemData.g._collapsable) { | |
| 11570 | - stop.setAttribute('offset', oValues[i * 2] + '%'); | |
| 11571 | - } | |
| 11572 | - stop.setAttribute('stop-opacity', oValues[i * 2 + 1]); | |
| 11573 | - } | |
| 11574 | - } | |
| 11575 | - if (styleData.t === 1) { | |
| 11576 | - if (itemData.e._mdf || isFirstFrame) { | |
| 11577 | - gfill.setAttribute('x2', pt2[0]); | |
| 11578 | - gfill.setAttribute('y2', pt2[1]); | |
| 11579 | - if (hasOpacity && !itemData.g._collapsable) { | |
| 11580 | - itemData.of.setAttribute('x2', pt2[0]); | |
| 11581 | - itemData.of.setAttribute('y2', pt2[1]); | |
| 11582 | - } | |
| 11583 | - } | |
| 11584 | - } else { | |
| 11585 | - var rad; | |
| 11586 | - if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) { | |
| 11587 | - rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); | |
| 11588 | - gfill.setAttribute('r', rad); | |
| 11589 | - if (hasOpacity && !itemData.g._collapsable) { | |
| 11590 | - itemData.of.setAttribute('r', rad); | |
| 11591 | - } | |
| 11592 | - } | |
| 11593 | - if (itemData.s._mdf || itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) { | |
| 11594 | - if (!rad) { | |
| 11595 | - rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); | |
| 11596 | - } | |
| 11597 | - var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); | |
| 11598 | - var percent = itemData.h.v; | |
| 11599 | - if (percent >= 1) { | |
| 11600 | - percent = 0.99; | |
| 11601 | - } else if (percent <= -1) { | |
| 11602 | - percent = -0.99; | |
| 11603 | - } | |
| 11604 | - var dist = rad * percent; | |
| 11605 | - var x = Math.cos(ang + itemData.a.v) * dist + pt1[0]; | |
| 11606 | - var y = Math.sin(ang + itemData.a.v) * dist + pt1[1]; | |
| 11607 | - gfill.setAttribute('fx', x); | |
| 11608 | - gfill.setAttribute('fy', y); | |
| 11609 | - if (hasOpacity && !itemData.g._collapsable) { | |
| 11610 | - itemData.of.setAttribute('fx', x); | |
| 11611 | - itemData.of.setAttribute('fy', y); | |
| 11612 | - } | |
| 11613 | - } | |
| 11614 | - // gfill.setAttribute('fy','200'); | |
| 11615 | - } | |
| 11616 | - } | |
| 11617 | - function renderStroke(styleData, itemData, isFirstFrame) { | |
| 11618 | - var styleElem = itemData.style; | |
| 11619 | - var d = itemData.d; | |
| 11620 | - if (d && (d._mdf || isFirstFrame) && d.dashStr) { | |
| 11621 | - styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr); | |
| 11622 | - styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]); | |
| 11623 | - } | |
| 11624 | - if (itemData.c && (itemData.c._mdf || isFirstFrame)) { | |
| 11625 | - styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'); | |
| 11626 | - } | |
| 11627 | - if (itemData.o._mdf || isFirstFrame) { | |
| 11628 | - styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v); | |
| 11629 | - } | |
| 11630 | - if (itemData.w._mdf || isFirstFrame) { | |
| 11631 | - styleElem.pElem.setAttribute('stroke-width', itemData.w.v); | |
| 11632 | - if (styleElem.msElem) { | |
| 11633 | - styleElem.msElem.setAttribute('stroke-width', itemData.w.v); | |
| 11634 | - } | |
| 11635 | - } | |
| 11636 | - } | |
| 11637 | - return ob; | |
| 11638 | - }(); | |
| 11639 | - | |
| 11640 | - function SVGShapeElement(data, globalData, comp) { | |
| 11641 | - // List of drawable elements | |
| 11642 | - this.shapes = []; | |
| 11643 | - // Full shape data | |
| 11644 | - this.shapesData = data.shapes; | |
| 11645 | - // List of styles that will be applied to shapes | |
| 11646 | - this.stylesList = []; | |
| 11647 | - // List of modifiers that will be applied to shapes | |
| 11648 | - this.shapeModifiers = []; | |
| 11649 | - // List of items in shape tree | |
| 11650 | - this.itemsData = []; | |
| 11651 | - // List of items in previous shape tree | |
| 11652 | - this.processedElements = []; | |
| 11653 | - // List of animated components | |
| 11654 | - this.animatedContents = []; | |
| 11655 | - this.initElement(data, globalData, comp); | |
| 11656 | - // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties. | |
| 11657 | - // List of elements that have been created | |
| 11658 | - this.prevViewData = []; | |
| 11659 | - // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties. | |
| 11660 | - } | |
| 11661 | - extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement); | |
| 11662 | - SVGShapeElement.prototype.initSecondaryElement = function () {}; | |
| 11663 | - SVGShapeElement.prototype.identityMatrix = new Matrix(); | |
| 11664 | - SVGShapeElement.prototype.buildExpressionInterface = function () {}; | |
| 11665 | - SVGShapeElement.prototype.createContent = function () { | |
| 11666 | - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); | |
| 11667 | - this.filterUniqueShapes(); | |
| 11668 | - }; | |
| 11669 | - | |
| 11670 | - /* | |
| 11671 | - This method searches for multiple shapes that affect a single element and one of them is animated | |
| 11672 | - */ | |
| 11673 | - SVGShapeElement.prototype.filterUniqueShapes = function () { | |
| 11674 | - var i; | |
| 11675 | - var len = this.shapes.length; | |
| 11676 | - var shape; | |
| 11677 | - var j; | |
| 11678 | - var jLen = this.stylesList.length; | |
| 11679 | - var style; | |
| 11680 | - var tempShapes = []; | |
| 11681 | - var areAnimated = false; | |
| 11682 | - for (j = 0; j < jLen; j += 1) { | |
| 11683 | - style = this.stylesList[j]; | |
| 11684 | - areAnimated = false; | |
| 11685 | - tempShapes.length = 0; | |
| 11686 | - for (i = 0; i < len; i += 1) { | |
| 11687 | - shape = this.shapes[i]; | |
| 11688 | - if (shape.styles.indexOf(style) !== -1) { | |
| 11689 | - tempShapes.push(shape); | |
| 11690 | - areAnimated = shape._isAnimated || areAnimated; | |
| 11691 | - } | |
| 11692 | - } | |
| 11693 | - if (tempShapes.length > 1 && areAnimated) { | |
| 11694 | - this.setShapesAsAnimated(tempShapes); | |
| 11695 | - } | |
| 11696 | - } | |
| 11697 | - }; | |
| 11698 | - SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) { | |
| 11699 | - var i; | |
| 11700 | - var len = shapes.length; | |
| 11701 | - for (i = 0; i < len; i += 1) { | |
| 11702 | - shapes[i].setAsAnimated(); | |
| 11703 | - } | |
| 11704 | - }; | |
| 11705 | - SVGShapeElement.prototype.createStyleElement = function (data, level) { | |
| 11706 | - // TODO: prevent drawing of hidden styles | |
| 11707 | - var elementData; | |
| 11708 | - var styleOb = new SVGStyleData(data, level); | |
| 11709 | - var pathElement = styleOb.pElem; | |
| 11710 | - if (data.ty === 'st') { | |
| 11711 | - elementData = new SVGStrokeStyleData(this, data, styleOb); | |
| 11712 | - } else if (data.ty === 'fl') { | |
| 11713 | - elementData = new SVGFillStyleData(this, data, styleOb); | |
| 11714 | - } else if (data.ty === 'gf' || data.ty === 'gs') { | |
| 11715 | - var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData; | |
| 11716 | - elementData = new GradientConstructor(this, data, styleOb); | |
| 11717 | - this.globalData.defs.appendChild(elementData.gf); | |
| 11718 | - if (elementData.maskId) { | |
| 11719 | - this.globalData.defs.appendChild(elementData.ms); | |
| 11720 | - this.globalData.defs.appendChild(elementData.of); | |
| 11721 | - pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')'); | |
| 11722 | - } | |
| 11723 | - } else if (data.ty === 'no') { | |
| 11724 | - elementData = new SVGNoStyleData(this, data, styleOb); | |
| 11725 | - } | |
| 11726 | - if (data.ty === 'st' || data.ty === 'gs') { | |
| 11727 | - pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]); | |
| 11728 | - pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]); | |
| 11729 | - pathElement.setAttribute('fill-opacity', '0'); | |
| 11730 | - if (data.lj === 1) { | |
| 11731 | - pathElement.setAttribute('stroke-miterlimit', data.ml); | |
| 11732 | - } | |
| 11733 | - } | |
| 11734 | - if (data.r === 2) { | |
| 11735 | - pathElement.setAttribute('fill-rule', 'evenodd'); | |
| 11736 | - } | |
| 11737 | - if (data.ln) { | |
| 11738 | - pathElement.setAttribute('id', data.ln); | |
| 11739 | - } | |
| 11740 | - if (data.cl) { | |
| 11741 | - pathElement.setAttribute('class', data.cl); | |
| 11742 | - } | |
| 11743 | - if (data.bm) { | |
| 11744 | - pathElement.style['mix-blend-mode'] = getBlendMode(data.bm); | |
| 11745 | - } | |
| 11746 | - this.stylesList.push(styleOb); | |
| 11747 | - this.addToAnimatedContents(data, elementData); | |
| 11748 | - return elementData; | |
| 11749 | - }; | |
| 11750 | - SVGShapeElement.prototype.createGroupElement = function (data) { | |
| 11751 | - var elementData = new ShapeGroupData(); | |
| 11752 | - if (data.ln) { | |
| 11753 | - elementData.gr.setAttribute('id', data.ln); | |
| 11754 | - } | |
| 11755 | - if (data.cl) { | |
| 11756 | - elementData.gr.setAttribute('class', data.cl); | |
| 11757 | - } | |
| 11758 | - if (data.bm) { | |
| 11759 | - elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm); | |
| 11760 | - } | |
| 11761 | - return elementData; | |
| 11762 | - }; | |
| 11763 | - SVGShapeElement.prototype.createTransformElement = function (data, container) { | |
| 11764 | - var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this); | |
| 11765 | - var elementData = new SVGTransformData(transformProperty, transformProperty.o, container); | |
| 11766 | - this.addToAnimatedContents(data, elementData); | |
| 11767 | - return elementData; | |
| 11768 | - }; | |
| 11769 | - SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) { | |
| 11770 | - var ty = 4; | |
| 11771 | - if (data.ty === 'rc') { | |
| 11772 | - ty = 5; | |
| 11773 | - } else if (data.ty === 'el') { | |
| 11774 | - ty = 6; | |
| 11775 | - } else if (data.ty === 'sr') { | |
| 11776 | - ty = 7; | |
| 11777 | - } | |
| 11778 | - var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this); | |
| 11779 | - var elementData = new SVGShapeData(ownTransformers, level, shapeProperty); | |
| 11780 | - this.shapes.push(elementData); | |
| 11781 | - this.addShapeToModifiers(elementData); | |
| 11782 | - this.addToAnimatedContents(data, elementData); | |
| 11783 | - return elementData; | |
| 11784 | - }; | |
| 11785 | - SVGShapeElement.prototype.addToAnimatedContents = function (data, element) { | |
| 11786 | - var i = 0; | |
| 11787 | - var len = this.animatedContents.length; | |
| 11788 | - while (i < len) { | |
| 11789 | - if (this.animatedContents[i].element === element) { | |
| 11790 | - return; | |
| 11791 | - } | |
| 11792 | - i += 1; | |
| 11793 | - } | |
| 11794 | - this.animatedContents.push({ | |
| 11795 | - fn: SVGElementsRenderer.createRenderFunction(data), | |
| 11796 | - element: element, | |
| 11797 | - data: data | |
| 11798 | - }); | |
| 11799 | - }; | |
| 11800 | - SVGShapeElement.prototype.setElementStyles = function (elementData) { | |
| 11801 | - var arr = elementData.styles; | |
| 11802 | - var j; | |
| 11803 | - var jLen = this.stylesList.length; | |
| 11804 | - for (j = 0; j < jLen; j += 1) { | |
| 11805 | - if (arr.indexOf(this.stylesList[j]) === -1 && !this.stylesList[j].closed) { | |
| 11806 | - arr.push(this.stylesList[j]); | |
| 11807 | - } | |
| 11808 | - } | |
| 11809 | - }; | |
| 11810 | - SVGShapeElement.prototype.reloadShapes = function () { | |
| 11811 | - this._isFirstFrame = true; | |
| 11812 | - var i; | |
| 11813 | - var len = this.itemsData.length; | |
| 11814 | - for (i = 0; i < len; i += 1) { | |
| 11815 | - this.prevViewData[i] = this.itemsData[i]; | |
| 11816 | - } | |
| 11817 | - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); | |
| 11818 | - this.filterUniqueShapes(); | |
| 11819 | - len = this.dynamicProperties.length; | |
| 11820 | - for (i = 0; i < len; i += 1) { | |
| 11821 | - this.dynamicProperties[i].getValue(); | |
| 11822 | - } | |
| 11823 | - this.renderModifiers(); | |
| 11824 | - }; | |
| 11825 | - SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) { | |
| 11826 | - var ownTransformers = [].concat(transformers); | |
| 11827 | - var i; | |
| 11828 | - var len = arr.length - 1; | |
| 11829 | - var j; | |
| 11830 | - var jLen; | |
| 11831 | - var ownStyles = []; | |
| 11832 | - var ownModifiers = []; | |
| 11833 | - var currentTransform; | |
| 11834 | - var modifier; | |
| 11835 | - var processedPos; | |
| 11836 | - for (i = len; i >= 0; i -= 1) { | |
| 11837 | - processedPos = this.searchProcessedElement(arr[i]); | |
| 11838 | - if (!processedPos) { | |
| 11839 | - arr[i]._render = render; | |
| 11840 | - } else { | |
| 11841 | - itemsData[i] = prevViewData[processedPos - 1]; | |
| 11842 | - } | |
| 11843 | - if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') { | |
| 11844 | - if (!processedPos) { | |
| 11845 | - itemsData[i] = this.createStyleElement(arr[i], level); | |
| 11846 | - } else { | |
| 11847 | - itemsData[i].style.closed = arr[i].hd; | |
| 11848 | - } | |
| 11849 | - if (arr[i]._render) { | |
| 11850 | - if (itemsData[i].style.pElem.parentNode !== container) { | |
| 11851 | - container.appendChild(itemsData[i].style.pElem); | |
| 11852 | - } | |
| 11853 | - } | |
| 11854 | - ownStyles.push(itemsData[i].style); | |
| 11855 | - } else if (arr[i].ty === 'gr') { | |
| 11856 | - if (!processedPos) { | |
| 11857 | - itemsData[i] = this.createGroupElement(arr[i]); | |
| 11858 | - } else { | |
| 11859 | - jLen = itemsData[i].it.length; | |
| 11860 | - for (j = 0; j < jLen; j += 1) { | |
| 11861 | - itemsData[i].prevViewData[j] = itemsData[i].it[j]; | |
| 11862 | - } | |
| 11863 | - } | |
| 11864 | - this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render); | |
| 11865 | - if (arr[i]._render) { | |
| 11866 | - if (itemsData[i].gr.parentNode !== container) { | |
| 11867 | - container.appendChild(itemsData[i].gr); | |
| 11868 | - } | |
| 11869 | - } | |
| 11870 | - } else if (arr[i].ty === 'tr') { | |
| 11871 | - if (!processedPos) { | |
| 11872 | - itemsData[i] = this.createTransformElement(arr[i], container); | |
| 11873 | - } | |
| 11874 | - currentTransform = itemsData[i].transform; | |
| 11875 | - ownTransformers.push(currentTransform); | |
| 11876 | - } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') { | |
| 11877 | - if (!processedPos) { | |
| 11878 | - itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level); | |
| 11879 | - } | |
| 11880 | - this.setElementStyles(itemsData[i]); | |
| 11881 | - } 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') { | |
| 11882 | - if (!processedPos) { | |
| 11883 | - modifier = ShapeModifiers.getModifier(arr[i].ty); | |
| 11884 | - modifier.init(this, arr[i]); | |
| 11885 | - itemsData[i] = modifier; | |
| 11886 | - this.shapeModifiers.push(modifier); | |
| 11887 | - } else { | |
| 11888 | - modifier = itemsData[i]; | |
| 11889 | - modifier.closed = false; | |
| 11890 | - } | |
| 11891 | - ownModifiers.push(modifier); | |
| 11892 | - } else if (arr[i].ty === 'rp') { | |
| 11893 | - if (!processedPos) { | |
| 11894 | - modifier = ShapeModifiers.getModifier(arr[i].ty); | |
| 11895 | - itemsData[i] = modifier; | |
| 11896 | - modifier.init(this, arr, i, itemsData); | |
| 11897 | - this.shapeModifiers.push(modifier); | |
| 11898 | - render = false; | |
| 11899 | - } else { | |
| 11900 | - modifier = itemsData[i]; | |
| 11901 | - modifier.closed = true; | |
| 11902 | - } | |
| 11903 | - ownModifiers.push(modifier); | |
| 11904 | - } | |
| 11905 | - this.addProcessedElement(arr[i], i + 1); | |
| 11906 | - } | |
| 11907 | - len = ownStyles.length; | |
| 11908 | - for (i = 0; i < len; i += 1) { | |
| 11909 | - ownStyles[i].closed = true; | |
| 11910 | - } | |
| 11911 | - len = ownModifiers.length; | |
| 11912 | - for (i = 0; i < len; i += 1) { | |
| 11913 | - ownModifiers[i].closed = true; | |
| 11914 | - } | |
| 11915 | - }; | |
| 11916 | - SVGShapeElement.prototype.renderInnerContent = function () { | |
| 11917 | - this.renderModifiers(); | |
| 11918 | - var i; | |
| 11919 | - var len = this.stylesList.length; | |
| 11920 | - for (i = 0; i < len; i += 1) { | |
| 11921 | - this.stylesList[i].reset(); | |
| 11922 | - } | |
| 11923 | - this.renderShape(); | |
| 11924 | - for (i = 0; i < len; i += 1) { | |
| 11925 | - if (this.stylesList[i]._mdf || this._isFirstFrame) { | |
| 11926 | - if (this.stylesList[i].msElem) { | |
| 11927 | - this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); | |
| 11928 | - // Adding M0 0 fixes same mask bug on all browsers | |
| 11929 | - this.stylesList[i].d = 'M0 0' + this.stylesList[i].d; | |
| 11930 | - } | |
| 11931 | - this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0'); | |
| 11932 | - } | |
| 11933 | - } | |
| 11934 | - }; | |
| 11935 | - SVGShapeElement.prototype.renderShape = function () { | |
| 11936 | - var i; | |
| 11937 | - var len = this.animatedContents.length; | |
| 11938 | - var animatedContent; | |
| 11939 | - for (i = 0; i < len; i += 1) { | |
| 11940 | - animatedContent = this.animatedContents[i]; | |
| 11941 | - if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) { | |
| 11942 | - animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame); | |
| 11943 | - } | |
| 11944 | - } | |
| 11945 | - }; | |
| 11946 | - SVGShapeElement.prototype.destroy = function () { | |
| 11947 | - this.destroyBaseElement(); | |
| 11948 | - this.shapesData = null; | |
| 11949 | - this.itemsData = null; | |
| 11950 | - }; | |
| 11951 | - | |
| 11952 | - function LetterProps(o, sw, sc, fc, m, p) { | |
| 11953 | - this.o = o; | |
| 11954 | - this.sw = sw; | |
| 11955 | - this.sc = sc; | |
| 11956 | - this.fc = fc; | |
| 11957 | - this.m = m; | |
| 11958 | - this.p = p; | |
| 11959 | - this._mdf = { | |
| 11960 | - o: true, | |
| 11961 | - sw: !!sw, | |
| 11962 | - sc: !!sc, | |
| 11963 | - fc: !!fc, | |
| 11964 | - m: true, | |
| 11965 | - p: true | |
| 11966 | - }; | |
| 11967 | - } | |
| 11968 | - LetterProps.prototype.update = function (o, sw, sc, fc, m, p) { | |
| 11969 | - this._mdf.o = false; | |
| 11970 | - this._mdf.sw = false; | |
| 11971 | - this._mdf.sc = false; | |
| 11972 | - this._mdf.fc = false; | |
| 11973 | - this._mdf.m = false; | |
| 11974 | - this._mdf.p = false; | |
| 11975 | - var updated = false; | |
| 11976 | - if (this.o !== o) { | |
| 11977 | - this.o = o; | |
| 11978 | - this._mdf.o = true; | |
| 11979 | - updated = true; | |
| 11980 | - } | |
| 11981 | - if (this.sw !== sw) { | |
| 11982 | - this.sw = sw; | |
| 11983 | - this._mdf.sw = true; | |
| 11984 | - updated = true; | |
| 11985 | - } | |
| 11986 | - if (this.sc !== sc) { | |
| 11987 | - this.sc = sc; | |
| 11988 | - this._mdf.sc = true; | |
| 11989 | - updated = true; | |
| 11990 | - } | |
| 11991 | - if (this.fc !== fc) { | |
| 11992 | - this.fc = fc; | |
| 11993 | - this._mdf.fc = true; | |
| 11994 | - updated = true; | |
| 11995 | - } | |
| 11996 | - if (this.m !== m) { | |
| 11997 | - this.m = m; | |
| 11998 | - this._mdf.m = true; | |
| 11999 | - updated = true; | |
| 12000 | - } | |
| 12001 | - 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])) { | |
| 12002 | - this.p = p; | |
| 12003 | - this._mdf.p = true; | |
| 12004 | - updated = true; | |
| 12005 | - } | |
| 12006 | - return updated; | |
| 12007 | - }; | |
| 12008 | - | |
| 12009 | - function TextProperty(elem, data) { | |
| 12010 | - this._frameId = initialDefaultFrame; | |
| 12011 | - this.pv = ''; | |
| 12012 | - this.v = ''; | |
| 12013 | - this.kf = false; | |
| 12014 | - this._isFirstFrame = true; | |
| 12015 | - this._mdf = false; | |
| 12016 | - if (data.d && data.d.sid) { | |
| 12017 | - data.d = elem.globalData.slotManager.getProp(data.d); | |
| 12018 | - } | |
| 12019 | - this.data = data; | |
| 12020 | - this.elem = elem; | |
| 12021 | - this.comp = this.elem.comp; | |
| 12022 | - this.keysIndex = 0; | |
| 12023 | - this.canResize = false; | |
| 12024 | - this.minimumFontSize = 1; | |
| 12025 | - this.effectsSequence = []; | |
| 12026 | - this.currentData = { | |
| 12027 | - ascent: 0, | |
| 12028 | - boxWidth: this.defaultBoxWidth, | |
| 12029 | - f: '', | |
| 12030 | - fStyle: '', | |
| 12031 | - fWeight: '', | |
| 12032 | - fc: '', | |
| 12033 | - j: '', | |
| 12034 | - justifyOffset: '', | |
| 12035 | - l: [], | |
| 12036 | - lh: 0, | |
| 12037 | - lineWidths: [], | |
| 12038 | - ls: '', | |
| 12039 | - of: '', | |
| 12040 | - s: '', | |
| 12041 | - sc: '', | |
| 12042 | - sw: 0, | |
| 12043 | - t: 0, | |
| 12044 | - tr: 0, | |
| 12045 | - sz: 0, | |
| 12046 | - ps: null, | |
| 12047 | - fillColorAnim: false, | |
| 12048 | - strokeColorAnim: false, | |
| 12049 | - strokeWidthAnim: false, | |
| 12050 | - yOffset: 0, | |
| 12051 | - finalSize: 0, | |
| 12052 | - finalText: [], | |
| 12053 | - finalLineHeight: 0, | |
| 12054 | - __complete: false | |
| 12055 | - }; | |
| 12056 | - this.copyData(this.currentData, this.data.d.k[0].s); | |
| 12057 | - if (!this.searchProperty()) { | |
| 12058 | - this.completeTextData(this.currentData); | |
| 12059 | - } | |
| 12060 | - } | |
| 12061 | - TextProperty.prototype.defaultBoxWidth = [0, 0]; | |
| 12062 | - TextProperty.prototype.copyData = function (obj, data) { | |
| 12063 | - for (var s in data) { | |
| 12064 | - if (Object.prototype.hasOwnProperty.call(data, s)) { | |
| 12065 | - obj[s] = data[s]; | |
| 12066 | - } | |
| 12067 | - } | |
| 12068 | - return obj; | |
| 12069 | - }; | |
| 12070 | - TextProperty.prototype.setCurrentData = function (data) { | |
| 12071 | - if (!data.__complete) { | |
| 12072 | - this.completeTextData(data); | |
| 12073 | - } | |
| 12074 | - this.currentData = data; | |
| 12075 | - this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth; | |
| 12076 | - this._mdf = true; | |
| 12077 | - }; | |
| 12078 | - TextProperty.prototype.searchProperty = function () { | |
| 12079 | - return this.searchKeyframes(); | |
| 12080 | - }; | |
| 12081 | - TextProperty.prototype.searchKeyframes = function () { | |
| 12082 | - this.kf = this.data.d.k.length > 1; | |
| 12083 | - if (this.kf) { | |
| 12084 | - this.addEffect(this.getKeyframeValue.bind(this)); | |
| 12085 | - } | |
| 12086 | - return this.kf; | |
| 12087 | - }; | |
| 12088 | - TextProperty.prototype.addEffect = function (effectFunction) { | |
| 12089 | - this.effectsSequence.push(effectFunction); | |
| 12090 | - this.elem.addDynamicProperty(this); | |
| 12091 | - }; | |
| 12092 | - TextProperty.prototype.getValue = function (_finalValue) { | |
| 12093 | - if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) { | |
| 12094 | - return; | |
| 12095 | - } | |
| 12096 | - this.currentData.t = this.data.d.k[this.keysIndex].s.t; | |
| 12097 | - var currentValue = this.currentData; | |
| 12098 | - var currentIndex = this.keysIndex; | |
| 12099 | - if (this.lock) { | |
| 12100 | - this.setCurrentData(this.currentData); | |
| 12101 | - return; | |
| 12102 | - } | |
| 12103 | - this.lock = true; | |
| 12104 | - this._mdf = false; | |
| 12105 | - var i; | |
| 12106 | - var len = this.effectsSequence.length; | |
| 12107 | - var finalValue = _finalValue || this.data.d.k[this.keysIndex].s; | |
| 12108 | - for (i = 0; i < len; i += 1) { | |
| 12109 | - // Checking if index changed to prevent creating a new object every time the expression updates. | |
| 12110 | - if (currentIndex !== this.keysIndex) { | |
| 12111 | - finalValue = this.effectsSequence[i](finalValue, finalValue.t); | |
| 12112 | - } else { | |
| 12113 | - finalValue = this.effectsSequence[i](this.currentData, finalValue.t); | |
| 12114 | - } | |
| 12115 | - } | |
| 12116 | - if (currentValue !== finalValue) { | |
| 12117 | - this.setCurrentData(finalValue); | |
| 12118 | - } | |
| 12119 | - this.v = this.currentData; | |
| 12120 | - this.pv = this.v; | |
| 12121 | - this.lock = false; | |
| 12122 | - this.frameId = this.elem.globalData.frameId; | |
| 12123 | - }; | |
| 12124 | - TextProperty.prototype.getKeyframeValue = function () { | |
| 12125 | - var textKeys = this.data.d.k; | |
| 12126 | - var frameNum = this.elem.comp.renderedFrame; | |
| 12127 | - var i = 0; | |
| 12128 | - var len = textKeys.length; | |
| 12129 | - while (i <= len - 1) { | |
| 12130 | - if (i === len - 1 || textKeys[i + 1].t > frameNum) { | |
| 12131 | - break; | |
| 12132 | - } | |
| 12133 | - i += 1; | |
| 12134 | - } | |
| 12135 | - if (this.keysIndex !== i) { | |
| 12136 | - this.keysIndex = i; | |
| 12137 | - } | |
| 12138 | - return this.data.d.k[this.keysIndex].s; | |
| 12139 | - }; | |
| 12140 | - TextProperty.prototype.buildFinalText = function (text) { | |
| 12141 | - var charactersArray = []; | |
| 12142 | - var i = 0; | |
| 12143 | - var len = text.length; | |
| 12144 | - var charCode; | |
| 12145 | - var secondCharCode; | |
| 12146 | - var shouldCombine = false; | |
| 12147 | - var shouldCombineNext = false; | |
| 12148 | - var currentChars = ''; | |
| 12149 | - while (i < len) { | |
| 12150 | - shouldCombine = shouldCombineNext; | |
| 12151 | - shouldCombineNext = false; | |
| 12152 | - charCode = text.charCodeAt(i); | |
| 12153 | - currentChars = text.charAt(i); | |
| 12154 | - if (FontManager.isCombinedCharacter(charCode)) { | |
| 12155 | - shouldCombine = true; | |
| 12156 | - // It's a potential surrogate pair (this is the High surrogate) | |
| 12157 | - } else if (charCode >= 0xD800 && charCode <= 0xDBFF) { | |
| 12158 | - if (FontManager.isRegionalFlag(text, i)) { | |
| 12159 | - currentChars = text.substr(i, 14); | |
| 12160 | - } else { | |
| 12161 | - secondCharCode = text.charCodeAt(i + 1); | |
| 12162 | - // It's a surrogate pair (this is the Low surrogate) | |
| 12163 | - if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) { | |
| 12164 | - if (FontManager.isModifier(charCode, secondCharCode)) { | |
| 12165 | - currentChars = text.substr(i, 2); | |
| 12166 | - shouldCombine = true; | |
| 12167 | - } else if (FontManager.isFlagEmoji(text.substr(i, 4))) { | |
| 12168 | - currentChars = text.substr(i, 4); | |
| 12169 | - } else { | |
| 12170 | - currentChars = text.substr(i, 2); | |
| 12171 | - } | |
| 12172 | - } | |
| 12173 | - } | |
| 12174 | - } else if (charCode > 0xDBFF) { | |
| 12175 | - secondCharCode = text.charCodeAt(i + 1); | |
| 12176 | - if (FontManager.isVariationSelector(charCode)) { | |
| 12177 | - shouldCombine = true; | |
| 12178 | - } | |
| 12179 | - } else if (FontManager.isZeroWidthJoiner(charCode)) { | |
| 12180 | - shouldCombine = true; | |
| 12181 | - shouldCombineNext = true; | |
| 12182 | - } | |
| 12183 | - if (shouldCombine) { | |
| 12184 | - charactersArray[charactersArray.length - 1] += currentChars; | |
| 12185 | - shouldCombine = false; | |
| 12186 | - } else { | |
| 12187 | - charactersArray.push(currentChars); | |
| 12188 | - } | |
| 12189 | - i += currentChars.length; | |
| 12190 | - } | |
| 12191 | - return charactersArray; | |
| 12192 | - }; | |
| 12193 | - TextProperty.prototype.completeTextData = function (documentData) { | |
| 12194 | - documentData.__complete = true; | |
| 12195 | - var fontManager = this.elem.globalData.fontManager; | |
| 12196 | - var data = this.data; | |
| 12197 | - var letters = []; | |
| 12198 | - var i; | |
| 12199 | - var len; | |
| 12200 | - var newLineFlag; | |
| 12201 | - var index = 0; | |
| 12202 | - var val; | |
| 12203 | - var anchorGrouping = data.m.g; | |
| 12204 | - var currentSize = 0; | |
| 12205 | - var currentPos = 0; | |
| 12206 | - var currentLine = 0; | |
| 12207 | - var lineWidths = []; | |
| 12208 | - var lineWidth = 0; | |
| 12209 | - var maxLineWidth = 0; | |
| 12210 | - var j; | |
| 12211 | - var jLen; | |
| 12212 | - var fontData = fontManager.getFontByName(documentData.f); | |
| 12213 | - var charData; | |
| 12214 | - var cLength = 0; | |
| 12215 | - var fontProps = getFontProperties(fontData); | |
| 12216 | - documentData.fWeight = fontProps.weight; | |
| 12217 | - documentData.fStyle = fontProps.style; | |
| 12218 | - documentData.finalSize = documentData.s; | |
| 12219 | - documentData.finalText = this.buildFinalText(documentData.t); | |
| 12220 | - len = documentData.finalText.length; | |
| 12221 | - documentData.finalLineHeight = documentData.lh; | |
| 12222 | - var trackingOffset = documentData.tr / 1000 * documentData.finalSize; | |
| 12223 | - var charCode; | |
| 12224 | - if (documentData.sz) { | |
| 12225 | - var flag = true; | |
| 12226 | - var boxWidth = documentData.sz[0]; | |
| 12227 | - var boxHeight = documentData.sz[1]; | |
| 12228 | - var currentHeight; | |
| 12229 | - var finalText; | |
| 12230 | - while (flag) { | |
| 12231 | - finalText = this.buildFinalText(documentData.t); | |
| 12232 | - currentHeight = 0; | |
| 12233 | - lineWidth = 0; | |
| 12234 | - len = finalText.length; | |
| 12235 | - trackingOffset = documentData.tr / 1000 * documentData.finalSize; | |
| 12236 | - var lastSpaceIndex = -1; | |
| 12237 | - for (i = 0; i < len; i += 1) { | |
| 12238 | - charCode = finalText[i].charCodeAt(0); | |
| 12239 | - newLineFlag = false; | |
| 12240 | - if (finalText[i] === ' ') { | |
| 12241 | - lastSpaceIndex = i; | |
| 12242 | - } else if (charCode === 13 || charCode === 3) { | |
| 12243 | - lineWidth = 0; | |
| 12244 | - newLineFlag = true; | |
| 12245 | - currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; | |
| 12246 | - } | |
| 12247 | - if (fontManager.chars) { | |
| 12248 | - charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily); | |
| 12249 | - cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; | |
| 12250 | - } else { | |
| 12251 | - // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily; | |
| 12252 | - cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize); | |
| 12253 | - } | |
| 12254 | - if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') { | |
| 12255 | - if (lastSpaceIndex === -1) { | |
| 12256 | - len += 1; | |
| 12257 | - } else { | |
| 12258 | - i = lastSpaceIndex; | |
| 12259 | - } | |
| 12260 | - currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; | |
| 12261 | - finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\r'); | |
| 12262 | - // finalText = finalText.substr(0,i) + "\r" + finalText.substr(i === lastSpaceIndex ? i + 1 : i); | |
| 12263 | - lastSpaceIndex = -1; | |
| 12264 | - lineWidth = 0; | |
| 12265 | - } else { | |
| 12266 | - lineWidth += cLength; | |
| 12267 | - lineWidth += trackingOffset; | |
| 12268 | - } | |
| 12269 | - } | |
| 12270 | - currentHeight += fontData.ascent * documentData.finalSize / 100; | |
| 12271 | - if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) { | |
| 12272 | - documentData.finalSize -= 1; | |
| 12273 | - documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s; | |
| 12274 | - } else { | |
| 12275 | - documentData.finalText = finalText; | |
| 12276 | - len = documentData.finalText.length; | |
| 12277 | - flag = false; | |
| 12278 | - } | |
| 12279 | - } | |
| 12280 | - } | |
| 12281 | - lineWidth = -trackingOffset; | |
| 12282 | - cLength = 0; | |
| 12283 | - var uncollapsedSpaces = 0; | |
| 12284 | - var currentChar; | |
| 12285 | - for (i = 0; i < len; i += 1) { | |
| 12286 | - newLineFlag = false; | |
| 12287 | - currentChar = documentData.finalText[i]; | |
| 12288 | - charCode = currentChar.charCodeAt(0); | |
| 12289 | - if (charCode === 13 || charCode === 3) { | |
| 12290 | - uncollapsedSpaces = 0; | |
| 12291 | - lineWidths.push(lineWidth); | |
| 12292 | - maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; | |
| 12293 | - lineWidth = -2 * trackingOffset; | |
| 12294 | - val = ''; | |
| 12295 | - newLineFlag = true; | |
| 12296 | - currentLine += 1; | |
| 12297 | - } else { | |
| 12298 | - val = currentChar; | |
| 12299 | - } | |
| 12300 | - if (fontManager.chars) { | |
| 12301 | - charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily); | |
| 12302 | - cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; | |
| 12303 | - } else { | |
| 12304 | - // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize); | |
| 12305 | - // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily; | |
| 12306 | - cLength = fontManager.measureText(val, documentData.f, documentData.finalSize); | |
| 12307 | - } | |
| 12308 | - | |
| 12309 | - // | |
| 12310 | - if (currentChar === ' ') { | |
| 12311 | - uncollapsedSpaces += cLength + trackingOffset; | |
| 12312 | - } else { | |
| 12313 | - lineWidth += cLength + trackingOffset + uncollapsedSpaces; | |
| 12314 | - uncollapsedSpaces = 0; | |
| 12315 | - } | |
| 12316 | - letters.push({ | |
| 12317 | - l: cLength, | |
| 12318 | - an: cLength, | |
| 12319 | - add: currentSize, | |
| 12320 | - n: newLineFlag, | |
| 12321 | - anIndexes: [], | |
| 12322 | - val: val, | |
| 12323 | - line: currentLine, | |
| 12324 | - animatorJustifyOffset: 0 | |
| 12325 | - }); | |
| 12326 | - if (anchorGrouping == 2) { | |
| 12327 | - // eslint-disable-line eqeqeq | |
| 12328 | - currentSize += cLength; | |
| 12329 | - if (val === '' || val === ' ' || i === len - 1) { | |
| 12330 | - if (val === '' || val === ' ') { | |
| 12331 | - currentSize -= cLength; | |
| 12332 | - } | |
| 12333 | - while (currentPos <= i) { | |
| 12334 | - letters[currentPos].an = currentSize; | |
| 12335 | - letters[currentPos].ind = index; | |
| 12336 | - letters[currentPos].extra = cLength; | |
| 12337 | - currentPos += 1; | |
| 12338 | - } | |
| 12339 | - index += 1; | |
| 12340 | - currentSize = 0; | |
| 12341 | - } | |
| 12342 | - } else if (anchorGrouping == 3) { | |
| 12343 | - // eslint-disable-line eqeqeq | |
| 12344 | - currentSize += cLength; | |
| 12345 | - if (val === '' || i === len - 1) { | |
| 12346 | - if (val === '') { | |
| 12347 | - currentSize -= cLength; | |
| 12348 | - } | |
| 12349 | - while (currentPos <= i) { | |
| 12350 | - letters[currentPos].an = currentSize; | |
| 12351 | - letters[currentPos].ind = index; | |
| 12352 | - letters[currentPos].extra = cLength; | |
| 12353 | - currentPos += 1; | |
| 12354 | - } | |
| 12355 | - currentSize = 0; | |
| 12356 | - index += 1; | |
| 12357 | - } | |
| 12358 | - } else { | |
| 12359 | - letters[index].ind = index; | |
| 12360 | - letters[index].extra = 0; | |
| 12361 | - index += 1; | |
| 12362 | - } | |
| 12363 | - } | |
| 12364 | - documentData.l = letters; | |
| 12365 | - maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; | |
| 12366 | - lineWidths.push(lineWidth); | |
| 12367 | - if (documentData.sz) { | |
| 12368 | - documentData.boxWidth = documentData.sz[0]; | |
| 12369 | - documentData.justifyOffset = 0; | |
| 12370 | - } else { | |
| 12371 | - documentData.boxWidth = maxLineWidth; | |
| 12372 | - switch (documentData.j) { | |
| 12373 | - case 1: | |
| 12374 | - documentData.justifyOffset = -documentData.boxWidth; | |
| 12375 | - break; | |
| 12376 | - case 2: | |
| 12377 | - documentData.justifyOffset = -documentData.boxWidth / 2; | |
| 12378 | - break; | |
| 12379 | - default: | |
| 12380 | - documentData.justifyOffset = 0; | |
| 12381 | - } | |
| 12382 | - } | |
| 12383 | - documentData.lineWidths = lineWidths; | |
| 12384 | - var animators = data.a; | |
| 12385 | - var animatorData; | |
| 12386 | - var letterData; | |
| 12387 | - jLen = animators.length; | |
| 12388 | - var based; | |
| 12389 | - var ind; | |
| 12390 | - var indexes = []; | |
| 12391 | - for (j = 0; j < jLen; j += 1) { | |
| 12392 | - animatorData = animators[j]; | |
| 12393 | - if (animatorData.a.sc) { | |
| 12394 | - documentData.strokeColorAnim = true; | |
| 12395 | - } | |
| 12396 | - if (animatorData.a.sw) { | |
| 12397 | - documentData.strokeWidthAnim = true; | |
| 12398 | - } | |
| 12399 | - if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) { | |
| 12400 | - documentData.fillColorAnim = true; | |
| 12401 | - } | |
| 12402 | - ind = 0; | |
| 12403 | - based = animatorData.s.b; | |
| 12404 | - for (i = 0; i < len; i += 1) { | |
| 12405 | - letterData = letters[i]; | |
| 12406 | - letterData.anIndexes[j] = ind; | |
| 12407 | - 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)) { | |
| 12408 | - // eslint-disable-line eqeqeq | |
| 12409 | - if (animatorData.s.rn === 1) { | |
| 12410 | - indexes.push(ind); | |
| 12411 | - } | |
| 12412 | - ind += 1; | |
| 12413 | - } | |
| 12414 | - } | |
| 12415 | - data.a[j].s.totalChars = ind; | |
| 12416 | - var currentInd = -1; | |
| 12417 | - var newInd; | |
| 12418 | - if (animatorData.s.rn === 1) { | |
| 12419 | - for (i = 0; i < len; i += 1) { | |
| 12420 | - letterData = letters[i]; | |
| 12421 | - if (currentInd != letterData.anIndexes[j]) { | |
| 12422 | - // eslint-disable-line eqeqeq | |
| 12423 | - currentInd = letterData.anIndexes[j]; | |
| 12424 | - newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0]; | |
| 12425 | - } | |
| 12426 | - letterData.anIndexes[j] = newInd; | |
| 12427 | - } | |
| 12428 | - } | |
| 12429 | - } | |
| 12430 | - documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2; | |
| 12431 | - documentData.ls = documentData.ls || 0; | |
| 12432 | - documentData.ascent = fontData.ascent * documentData.finalSize / 100; | |
| 12433 | - }; | |
| 12434 | - TextProperty.prototype.updateDocumentData = function (newData, index) { | |
| 12435 | - index = index === undefined ? this.keysIndex : index; | |
| 12436 | - var dData = this.copyData({}, this.data.d.k[index].s); | |
| 12437 | - dData = this.copyData(dData, newData); | |
| 12438 | - this.data.d.k[index].s = dData; | |
| 12439 | - this.recalculate(index); | |
| 12440 | - this.setCurrentData(dData); | |
| 12441 | - this.elem.addDynamicProperty(this); | |
| 12442 | - }; | |
| 12443 | - TextProperty.prototype.recalculate = function (index) { | |
| 12444 | - var dData = this.data.d.k[index].s; | |
| 12445 | - dData.__complete = false; | |
| 12446 | - this.keysIndex = 0; | |
| 12447 | - this._isFirstFrame = true; | |
| 12448 | - this.getValue(dData); | |
| 12449 | - }; | |
| 12450 | - TextProperty.prototype.canResizeFont = function (_canResize) { | |
| 12451 | - this.canResize = _canResize; | |
| 12452 | - this.recalculate(this.keysIndex); | |
| 12453 | - this.elem.addDynamicProperty(this); | |
| 12454 | - }; | |
| 12455 | - TextProperty.prototype.setMinimumFontSize = function (_fontValue) { | |
| 12456 | - this.minimumFontSize = Math.floor(_fontValue) || 1; | |
| 12457 | - this.recalculate(this.keysIndex); | |
| 12458 | - this.elem.addDynamicProperty(this); | |
| 12459 | - }; | |
| 12460 | - | |
| 12461 | - var TextSelectorProp = function () { | |
| 12462 | - var max = Math.max; | |
| 12463 | - var min = Math.min; | |
| 12464 | - var floor = Math.floor; | |
| 12465 | - function TextSelectorPropFactory(elem, data) { | |
| 12466 | - this._currentTextLength = -1; | |
| 12467 | - this.k = false; | |
| 12468 | - this.data = data; | |
| 12469 | - this.elem = elem; | |
| 12470 | - this.comp = elem.comp; | |
| 12471 | - this.finalS = 0; | |
| 12472 | - this.finalE = 0; | |
| 12473 | - this.initDynamicPropertyContainer(elem); | |
| 12474 | - this.s = PropertyFactory.getProp(elem, data.s || { | |
| 12475 | - k: 0 | |
| 12476 | - }, 0, 0, this); | |
| 12477 | - if ('e' in data) { | |
| 12478 | - this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this); | |
| 12479 | - } else { | |
| 12480 | - this.e = { | |
| 12481 | - v: 100 | |
| 12482 | - }; | |
| 12483 | - } | |
| 12484 | - this.o = PropertyFactory.getProp(elem, data.o || { | |
| 12485 | - k: 0 | |
| 12486 | - }, 0, 0, this); | |
| 12487 | - this.xe = PropertyFactory.getProp(elem, data.xe || { | |
| 12488 | - k: 0 | |
| 12489 | - }, 0, 0, this); | |
| 12490 | - this.ne = PropertyFactory.getProp(elem, data.ne || { | |
| 12491 | - k: 0 | |
| 12492 | - }, 0, 0, this); | |
| 12493 | - this.sm = PropertyFactory.getProp(elem, data.sm || { | |
| 12494 | - k: 100 | |
| 12495 | - }, 0, 0, this); | |
| 12496 | - this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this); | |
| 12497 | - if (!this.dynamicProperties.length) { | |
| 12498 | - this.getValue(); | |
| 12499 | - } | |
| 12500 | - } | |
| 12501 | - TextSelectorPropFactory.prototype = { | |
| 12502 | - getMult: function getMult(ind) { | |
| 12503 | - if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) { | |
| 12504 | - this.getValue(); | |
| 12505 | - } | |
| 12506 | - var x1 = 0; | |
| 12507 | - var y1 = 0; | |
| 12508 | - var x2 = 1; | |
| 12509 | - var y2 = 1; | |
| 12510 | - if (this.ne.v > 0) { | |
| 12511 | - x1 = this.ne.v / 100.0; | |
| 12512 | - } else { | |
| 12513 | - y1 = -this.ne.v / 100.0; | |
| 12514 | - } | |
| 12515 | - if (this.xe.v > 0) { | |
| 12516 | - x2 = 1.0 - this.xe.v / 100.0; | |
| 12517 | - } else { | |
| 12518 | - y2 = 1.0 + this.xe.v / 100.0; | |
| 12519 | - } | |
| 12520 | - var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get; | |
| 12521 | - var mult = 0; | |
| 12522 | - var s = this.finalS; | |
| 12523 | - var e = this.finalE; | |
| 12524 | - var type = this.data.sh; | |
| 12525 | - if (type === 2) { | |
| 12526 | - if (e === s) { | |
| 12527 | - mult = ind >= e ? 1 : 0; | |
| 12528 | - } else { | |
| 12529 | - mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); | |
| 12530 | - } | |
| 12531 | - mult = easer(mult); | |
| 12532 | - } else if (type === 3) { | |
| 12533 | - if (e === s) { | |
| 12534 | - mult = ind >= e ? 0 : 1; | |
| 12535 | - } else { | |
| 12536 | - mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); | |
| 12537 | - } | |
| 12538 | - mult = easer(mult); | |
| 12539 | - } else if (type === 4) { | |
| 12540 | - if (e === s) { | |
| 12541 | - mult = 0; | |
| 12542 | - } else { | |
| 12543 | - mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); | |
| 12544 | - if (mult < 0.5) { | |
| 12545 | - mult *= 2; | |
| 12546 | - } else { | |
| 12547 | - mult = 1 - 2 * (mult - 0.5); | |
| 12548 | - } | |
| 12549 | - } | |
| 12550 | - mult = easer(mult); | |
| 12551 | - } else if (type === 5) { | |
| 12552 | - if (e === s) { | |
| 12553 | - mult = 0; | |
| 12554 | - } else { | |
| 12555 | - var tot = e - s; | |
| 12556 | - /* ind += 0.5; | |
| 12557 | - mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */ | |
| 12558 | - ind = min(max(0, ind + 0.5 - s), e - s); | |
| 12559 | - var x = -tot / 2 + ind; | |
| 12560 | - var a = tot / 2; | |
| 12561 | - mult = Math.sqrt(1 - x * x / (a * a)); | |
| 12562 | - } | |
| 12563 | - mult = easer(mult); | |
| 12564 | - } else if (type === 6) { | |
| 12565 | - if (e === s) { | |
| 12566 | - mult = 0; | |
| 12567 | - } else { | |
| 12568 | - ind = min(max(0, ind + 0.5 - s), e - s); | |
| 12569 | - mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line | |
| 12570 | - } | |
| 12571 | - mult = easer(mult); | |
| 12572 | - } else { | |
| 12573 | - if (ind >= floor(s)) { | |
| 12574 | - if (ind - s < 0) { | |
| 12575 | - mult = max(0, min(min(e, 1) - (s - ind), 1)); | |
| 12576 | - } else { | |
| 12577 | - mult = max(0, min(e - ind, 1)); | |
| 12578 | - } | |
| 12579 | - } | |
| 12580 | - mult = easer(mult); | |
| 12581 | - } | |
| 12582 | - // Smoothness implementation. | |
| 12583 | - // The smoothness represents a reduced range of the original [0; 1] range. | |
| 12584 | - // if smoothness is 25%, the new range will be [0.375; 0.625] | |
| 12585 | - // Steps are: | |
| 12586 | - // - find the lower value of the new range (threshold) | |
| 12587 | - // - if multiplier is smaller than that value, floor it to 0 | |
| 12588 | - // - if it is larger, | |
| 12589 | - // - subtract the threshold | |
| 12590 | - // - divide it by the smoothness (this will return the range to [0; 1]) | |
| 12591 | - // Note: If it doesn't work on some scenarios, consider applying it before the easer. | |
| 12592 | - if (this.sm.v !== 100) { | |
| 12593 | - var smoothness = this.sm.v * 0.01; | |
| 12594 | - if (smoothness === 0) { | |
| 12595 | - smoothness = 0.00000001; | |
| 12596 | - } | |
| 12597 | - var threshold = 0.5 - smoothness * 0.5; | |
| 12598 | - if (mult < threshold) { | |
| 12599 | - mult = 0; | |
| 12600 | - } else { | |
| 12601 | - mult = (mult - threshold) / smoothness; | |
| 12602 | - if (mult > 1) { | |
| 12603 | - mult = 1; | |
| 12604 | - } | |
| 12605 | - } | |
| 12606 | - } | |
| 12607 | - return mult * this.a.v; | |
| 12608 | - }, | |
| 12609 | - getValue: function getValue(newCharsFlag) { | |
| 12610 | - this.iterateDynamicProperties(); | |
| 12611 | - this._mdf = newCharsFlag || this._mdf; | |
| 12612 | - this._currentTextLength = this.elem.textProperty.currentData.l.length || 0; | |
| 12613 | - if (newCharsFlag && this.data.r === 2) { | |
| 12614 | - this.e.v = this._currentTextLength; | |
| 12615 | - } | |
| 12616 | - var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars; | |
| 12617 | - var o = this.o.v / divisor; | |
| 12618 | - var s = this.s.v / divisor + o; | |
| 12619 | - var e = this.e.v / divisor + o; | |
| 12620 | - if (s > e) { | |
| 12621 | - var _s = s; | |
| 12622 | - s = e; | |
| 12623 | - e = _s; | |
| 12624 | - } | |
| 12625 | - this.finalS = s; | |
| 12626 | - this.finalE = e; | |
| 12627 | - } | |
| 12628 | - }; | |
| 12629 | - extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory); | |
| 12630 | - function getTextSelectorProp(elem, data, arr) { | |
| 12631 | - return new TextSelectorPropFactory(elem, data, arr); | |
| 12632 | - } | |
| 12633 | - return { | |
| 12634 | - getTextSelectorProp: getTextSelectorProp | |
| 12635 | - }; | |
| 12636 | - }(); | |
| 12637 | - | |
| 12638 | - function TextAnimatorDataProperty(elem, animatorProps, container) { | |
| 12639 | - var defaultData = { | |
| 12640 | - propType: false | |
| 12641 | - }; | |
| 12642 | - var getProp = PropertyFactory.getProp; | |
| 12643 | - var textAnimatorAnimatables = animatorProps.a; | |
| 12644 | - this.a = { | |
| 12645 | - r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData, | |
| 12646 | - rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData, | |
| 12647 | - ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData, | |
| 12648 | - sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData, | |
| 12649 | - sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData, | |
| 12650 | - s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData, | |
| 12651 | - a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData, | |
| 12652 | - o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData, | |
| 12653 | - p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData, | |
| 12654 | - sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData, | |
| 12655 | - sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData, | |
| 12656 | - fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData, | |
| 12657 | - fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData, | |
| 12658 | - fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData, | |
| 12659 | - fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData, | |
| 12660 | - t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData | |
| 12661 | - }; | |
| 12662 | - this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container); | |
| 12663 | - this.s.t = animatorProps.s.t; | |
| 12664 | - } | |
| 12665 | - | |
| 12666 | - function TextAnimatorProperty(textData, renderType, elem) { | |
| 12667 | - this._isFirstFrame = true; | |
| 12668 | - this._hasMaskedPath = false; | |
| 12669 | - this._frameId = -1; | |
| 12670 | - this._textData = textData; | |
| 12671 | - this._renderType = renderType; | |
| 12672 | - this._elem = elem; | |
| 12673 | - this._animatorsData = createSizedArray(this._textData.a.length); | |
| 12674 | - this._pathData = {}; | |
| 12675 | - this._moreOptions = { | |
| 12676 | - alignment: {} | |
| 12677 | - }; | |
| 12678 | - this.renderedLetters = []; | |
| 12679 | - this.lettersChangedFlag = false; | |
| 12680 | - this.initDynamicPropertyContainer(elem); | |
| 12681 | - } | |
| 12682 | - TextAnimatorProperty.prototype.searchProperties = function () { | |
| 12683 | - var i; | |
| 12684 | - var len = this._textData.a.length; | |
| 12685 | - var animatorProps; | |
| 12686 | - var getProp = PropertyFactory.getProp; | |
| 12687 | - for (i = 0; i < len; i += 1) { | |
| 12688 | - animatorProps = this._textData.a[i]; | |
| 12689 | - this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this); | |
| 12690 | - } | |
| 12691 | - if (this._textData.p && 'm' in this._textData.p) { | |
| 12692 | - this._pathData = { | |
| 12693 | - a: getProp(this._elem, this._textData.p.a, 0, 0, this), | |
| 12694 | - f: getProp(this._elem, this._textData.p.f, 0, 0, this), | |
| 12695 | - l: getProp(this._elem, this._textData.p.l, 0, 0, this), | |
| 12696 | - r: getProp(this._elem, this._textData.p.r, 0, 0, this), | |
| 12697 | - p: getProp(this._elem, this._textData.p.p, 0, 0, this), | |
| 12698 | - m: this._elem.maskManager.getMaskProperty(this._textData.p.m) | |
| 12699 | - }; | |
| 12700 | - this._hasMaskedPath = true; | |
| 12701 | - } else { | |
| 12702 | - this._hasMaskedPath = false; | |
| 12703 | - } | |
| 12704 | - this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this); | |
| 12705 | - }; | |
| 12706 | - TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) { | |
| 12707 | - this.lettersChangedFlag = lettersChangedFlag; | |
| 12708 | - if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) { | |
| 12709 | - return; | |
| 12710 | - } | |
| 12711 | - this._isFirstFrame = false; | |
| 12712 | - var alignment = this._moreOptions.alignment.v; | |
| 12713 | - var animators = this._animatorsData; | |
| 12714 | - var textData = this._textData; | |
| 12715 | - var matrixHelper = this.mHelper; | |
| 12716 | - var renderType = this._renderType; | |
| 12717 | - var renderedLettersCount = this.renderedLetters.length; | |
| 12718 | - var xPos; | |
| 12719 | - var yPos; | |
| 12720 | - var i; | |
| 12721 | - var len; | |
| 12722 | - var letters = documentData.l; | |
| 12723 | - var pathInfo; | |
| 12724 | - var currentLength; | |
| 12725 | - var currentPoint; | |
| 12726 | - var segmentLength; | |
| 12727 | - var flag; | |
| 12728 | - var pointInd; | |
| 12729 | - var segmentInd; | |
| 12730 | - var prevPoint; | |
| 12731 | - var points; | |
| 12732 | - var segments; | |
| 12733 | - var partialLength; | |
| 12734 | - var totalLength; | |
| 12735 | - var perc; | |
| 12736 | - var tanAngle; | |
| 12737 | - var mask; | |
| 12738 | - if (this._hasMaskedPath) { | |
| 12739 | - mask = this._pathData.m; | |
| 12740 | - if (!this._pathData.n || this._pathData._mdf) { | |
| 12741 | - var paths = mask.v; | |
| 12742 | - if (this._pathData.r.v) { | |
| 12743 | - paths = paths.reverse(); | |
| 12744 | - } | |
| 12745 | - // TODO: release bezier data cached from previous pathInfo: this._pathData.pi | |
| 12746 | - pathInfo = { | |
| 12747 | - tLength: 0, | |
| 12748 | - segments: [] | |
| 12749 | - }; | |
| 12750 | - len = paths._length - 1; | |
| 12751 | - var bezierData; | |
| 12752 | - totalLength = 0; | |
| 12753 | - for (i = 0; i < len; i += 1) { | |
| 12754 | - 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]]); | |
| 12755 | - pathInfo.tLength += bezierData.segmentLength; | |
| 12756 | - pathInfo.segments.push(bezierData); | |
| 12757 | - totalLength += bezierData.segmentLength; | |
| 12758 | - } | |
| 12759 | - i = len; | |
| 12760 | - if (mask.v.c) { | |
| 12761 | - 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]]); | |
| 12762 | - pathInfo.tLength += bezierData.segmentLength; | |
| 12763 | - pathInfo.segments.push(bezierData); | |
| 12764 | - totalLength += bezierData.segmentLength; | |
| 12765 | - } | |
| 12766 | - this._pathData.pi = pathInfo; | |
| 12767 | - } | |
| 12768 | - pathInfo = this._pathData.pi; | |
| 12769 | - currentLength = this._pathData.f.v; | |
| 12770 | - segmentInd = 0; | |
| 12771 | - pointInd = 1; | |
| 12772 | - segmentLength = 0; | |
| 12773 | - flag = true; | |
| 12774 | - segments = pathInfo.segments; | |
| 12775 | - if (currentLength < 0 && mask.v.c) { | |
| 12776 | - if (pathInfo.tLength < Math.abs(currentLength)) { | |
| 12777 | - currentLength = -Math.abs(currentLength) % pathInfo.tLength; | |
| 12778 | - } | |
| 12779 | - segmentInd = segments.length - 1; | |
| 12780 | - points = segments[segmentInd].points; | |
| 12781 | - pointInd = points.length - 1; | |
| 12782 | - while (currentLength < 0) { | |
| 12783 | - currentLength += points[pointInd].partialLength; | |
| 12784 | - pointInd -= 1; | |
| 12785 | - if (pointInd < 0) { | |
| 12786 | - segmentInd -= 1; | |
| 12787 | - points = segments[segmentInd].points; | |
| 12788 | - pointInd = points.length - 1; | |
| 12789 | - } | |
| 12790 | - } | |
| 12791 | - } | |
| 12792 | - points = segments[segmentInd].points; | |
| 12793 | - prevPoint = points[pointInd - 1]; | |
| 12794 | - currentPoint = points[pointInd]; | |
| 12795 | - partialLength = currentPoint.partialLength; | |
| 12796 | - } | |
| 12797 | - len = letters.length; | |
| 12798 | - xPos = 0; | |
| 12799 | - yPos = 0; | |
| 12800 | - var yOff = documentData.finalSize * 1.2 * 0.714; | |
| 12801 | - var firstLine = true; | |
| 12802 | - var animatorProps; | |
| 12803 | - var animatorSelector; | |
| 12804 | - var j; | |
| 12805 | - var jLen; | |
| 12806 | - var letterValue; | |
| 12807 | - jLen = animators.length; | |
| 12808 | - var mult; | |
| 12809 | - var ind = -1; | |
| 12810 | - var offf; | |
| 12811 | - var xPathPos; | |
| 12812 | - var yPathPos; | |
| 12813 | - var initPathPos = currentLength; | |
| 12814 | - var initSegmentInd = segmentInd; | |
| 12815 | - var initPointInd = pointInd; | |
| 12816 | - var currentLine = -1; | |
| 12817 | - var elemOpacity; | |
| 12818 | - var sc; | |
| 12819 | - var sw; | |
| 12820 | - var fc; | |
| 12821 | - var k; | |
| 12822 | - var letterSw; | |
| 12823 | - var letterSc; | |
| 12824 | - var letterFc; | |
| 12825 | - var letterM = ''; | |
| 12826 | - var letterP = this.defaultPropsArray; | |
| 12827 | - var letterO; | |
| 12828 | - | |
| 12829 | - // | |
| 12830 | - if (documentData.j === 2 || documentData.j === 1) { | |
| 12831 | - var animatorJustifyOffset = 0; | |
| 12832 | - var animatorFirstCharOffset = 0; | |
| 12833 | - var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1; | |
| 12834 | - var lastIndex = 0; | |
| 12835 | - var isNewLine = true; | |
| 12836 | - for (i = 0; i < len; i += 1) { | |
| 12837 | - if (letters[i].n) { | |
| 12838 | - if (animatorJustifyOffset) { | |
| 12839 | - animatorJustifyOffset += animatorFirstCharOffset; | |
| 12840 | - } | |
| 12841 | - while (lastIndex < i) { | |
| 12842 | - letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; | |
| 12843 | - lastIndex += 1; | |
| 12844 | - } | |
| 12845 | - animatorJustifyOffset = 0; | |
| 12846 | - isNewLine = true; | |
| 12847 | - } else { | |
| 12848 | - for (j = 0; j < jLen; j += 1) { | |
| 12849 | - animatorProps = animators[j].a; | |
| 12850 | - if (animatorProps.t.propType) { | |
| 12851 | - if (isNewLine && documentData.j === 2) { | |
| 12852 | - animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult; | |
| 12853 | - } | |
| 12854 | - animatorSelector = animators[j].s; | |
| 12855 | - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 12856 | - if (mult.length) { | |
| 12857 | - animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult; | |
| 12858 | - } else { | |
| 12859 | - animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult; | |
| 12860 | - } | |
| 12861 | - } | |
| 12862 | - } | |
| 12863 | - isNewLine = false; | |
| 12864 | - } | |
| 12865 | - } | |
| 12866 | - if (animatorJustifyOffset) { | |
| 12867 | - animatorJustifyOffset += animatorFirstCharOffset; | |
| 12868 | - } | |
| 12869 | - while (lastIndex < i) { | |
| 12870 | - letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; | |
| 12871 | - lastIndex += 1; | |
| 12872 | - } | |
| 12873 | - } | |
| 12874 | - // | |
| 12875 | - | |
| 12876 | - for (i = 0; i < len; i += 1) { | |
| 12877 | - matrixHelper.reset(); | |
| 12878 | - elemOpacity = 1; | |
| 12879 | - if (letters[i].n) { | |
| 12880 | - xPos = 0; | |
| 12881 | - yPos += documentData.yOffset; | |
| 12882 | - yPos += firstLine ? 1 : 0; | |
| 12883 | - currentLength = initPathPos; | |
| 12884 | - firstLine = false; | |
| 12885 | - if (this._hasMaskedPath) { | |
| 12886 | - segmentInd = initSegmentInd; | |
| 12887 | - pointInd = initPointInd; | |
| 12888 | - points = segments[segmentInd].points; | |
| 12889 | - prevPoint = points[pointInd - 1]; | |
| 12890 | - currentPoint = points[pointInd]; | |
| 12891 | - partialLength = currentPoint.partialLength; | |
| 12892 | - segmentLength = 0; | |
| 12893 | - } | |
| 12894 | - letterM = ''; | |
| 12895 | - letterFc = ''; | |
| 12896 | - letterSw = ''; | |
| 12897 | - letterO = ''; | |
| 12898 | - letterP = this.defaultPropsArray; | |
| 12899 | - } else { | |
| 12900 | - if (this._hasMaskedPath) { | |
| 12901 | - if (currentLine !== letters[i].line) { | |
| 12902 | - switch (documentData.j) { | |
| 12903 | - case 1: | |
| 12904 | - currentLength += totalLength - documentData.lineWidths[letters[i].line]; | |
| 12905 | - break; | |
| 12906 | - case 2: | |
| 12907 | - currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2; | |
| 12908 | - break; | |
| 12909 | - default: | |
| 12910 | - break; | |
| 12911 | - } | |
| 12912 | - currentLine = letters[i].line; | |
| 12913 | - } | |
| 12914 | - if (ind !== letters[i].ind) { | |
| 12915 | - if (letters[ind]) { | |
| 12916 | - currentLength += letters[ind].extra; | |
| 12917 | - } | |
| 12918 | - currentLength += letters[i].an / 2; | |
| 12919 | - ind = letters[i].ind; | |
| 12920 | - } | |
| 12921 | - currentLength += alignment[0] * letters[i].an * 0.005; | |
| 12922 | - var animatorOffset = 0; | |
| 12923 | - for (j = 0; j < jLen; j += 1) { | |
| 12924 | - animatorProps = animators[j].a; | |
| 12925 | - if (animatorProps.p.propType) { | |
| 12926 | - animatorSelector = animators[j].s; | |
| 12927 | - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 12928 | - if (mult.length) { | |
| 12929 | - animatorOffset += animatorProps.p.v[0] * mult[0]; | |
| 12930 | - } else { | |
| 12931 | - animatorOffset += animatorProps.p.v[0] * mult; | |
| 12932 | - } | |
| 12933 | - } | |
| 12934 | - if (animatorProps.a.propType) { | |
| 12935 | - animatorSelector = animators[j].s; | |
| 12936 | - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 12937 | - if (mult.length) { | |
| 12938 | - animatorOffset += animatorProps.a.v[0] * mult[0]; | |
| 12939 | - } else { | |
| 12940 | - animatorOffset += animatorProps.a.v[0] * mult; | |
| 12941 | - } | |
| 12942 | - } | |
| 12943 | - } | |
| 12944 | - flag = true; | |
| 12945 | - // Force alignment only works with a single line for now | |
| 12946 | - if (this._pathData.a.v) { | |
| 12947 | - currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1); | |
| 12948 | - currentLength += this._pathData.f.v; | |
| 12949 | - } | |
| 12950 | - while (flag) { | |
| 12951 | - if (segmentLength + partialLength >= currentLength + animatorOffset || !points) { | |
| 12952 | - perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength; | |
| 12953 | - xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc; | |
| 12954 | - yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc; | |
| 12955 | - matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01); | |
| 12956 | - flag = false; | |
| 12957 | - } else if (points) { | |
| 12958 | - segmentLength += currentPoint.partialLength; | |
| 12959 | - pointInd += 1; | |
| 12960 | - if (pointInd >= points.length) { | |
| 12961 | - pointInd = 0; | |
| 12962 | - segmentInd += 1; | |
| 12963 | - if (!segments[segmentInd]) { | |
| 12964 | - if (mask.v.c) { | |
| 12965 | - pointInd = 0; | |
| 12966 | - segmentInd = 0; | |
| 12967 | - points = segments[segmentInd].points; | |
| 12968 | - } else { | |
| 12969 | - segmentLength -= currentPoint.partialLength; | |
| 12970 | - points = null; | |
| 12971 | - } | |
| 12972 | - } else { | |
| 12973 | - points = segments[segmentInd].points; | |
| 12974 | - } | |
| 12975 | - } | |
| 12976 | - if (points) { | |
| 12977 | - prevPoint = currentPoint; | |
| 12978 | - currentPoint = points[pointInd]; | |
| 12979 | - partialLength = currentPoint.partialLength; | |
| 12980 | - } | |
| 12981 | - } | |
| 12982 | - } | |
| 12983 | - offf = letters[i].an / 2 - letters[i].add; | |
| 12984 | - matrixHelper.translate(-offf, 0, 0); | |
| 12985 | - } else { | |
| 12986 | - offf = letters[i].an / 2 - letters[i].add; | |
| 12987 | - matrixHelper.translate(-offf, 0, 0); | |
| 12988 | - | |
| 12989 | - // Grouping alignment | |
| 12990 | - matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0); | |
| 12991 | - } | |
| 12992 | - for (j = 0; j < jLen; j += 1) { | |
| 12993 | - animatorProps = animators[j].a; | |
| 12994 | - if (animatorProps.t.propType) { | |
| 12995 | - animatorSelector = animators[j].s; | |
| 12996 | - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 12997 | - // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean "isNewLine" | |
| 12998 | - if (xPos !== 0 || documentData.j !== 0) { | |
| 12999 | - if (this._hasMaskedPath) { | |
| 13000 | - if (mult.length) { | |
| 13001 | - currentLength += animatorProps.t.v * mult[0]; | |
| 13002 | - } else { | |
| 13003 | - currentLength += animatorProps.t.v * mult; | |
| 13004 | - } | |
| 13005 | - } else if (mult.length) { | |
| 13006 | - xPos += animatorProps.t.v * mult[0]; | |
| 13007 | - } else { | |
| 13008 | - xPos += animatorProps.t.v * mult; | |
| 13009 | - } | |
| 13010 | - } | |
| 13011 | - } | |
| 13012 | - } | |
| 13013 | - if (documentData.strokeWidthAnim) { | |
| 13014 | - sw = documentData.sw || 0; | |
| 13015 | - } | |
| 13016 | - if (documentData.strokeColorAnim) { | |
| 13017 | - if (documentData.sc) { | |
| 13018 | - sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]]; | |
| 13019 | - } else { | |
| 13020 | - sc = [0, 0, 0]; | |
| 13021 | - } | |
| 13022 | - } | |
| 13023 | - if (documentData.fillColorAnim && documentData.fc) { | |
| 13024 | - fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]]; | |
| 13025 | - } | |
| 13026 | - for (j = 0; j < jLen; j += 1) { | |
| 13027 | - animatorProps = animators[j].a; | |
| 13028 | - if (animatorProps.a.propType) { | |
| 13029 | - animatorSelector = animators[j].s; | |
| 13030 | - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 13031 | - if (mult.length) { | |
| 13032 | - matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]); | |
| 13033 | - } else { | |
| 13034 | - matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult); | |
| 13035 | - } | |
| 13036 | - } | |
| 13037 | - } | |
| 13038 | - for (j = 0; j < jLen; j += 1) { | |
| 13039 | - animatorProps = animators[j].a; | |
| 13040 | - if (animatorProps.s.propType) { | |
| 13041 | - animatorSelector = animators[j].s; | |
| 13042 | - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 13043 | - if (mult.length) { | |
| 13044 | - matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1); | |
| 13045 | - } else { | |
| 13046 | - matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1); | |
| 13047 | - } | |
| 13048 | - } | |
| 13049 | - } | |
| 13050 | - for (j = 0; j < jLen; j += 1) { | |
| 13051 | - animatorProps = animators[j].a; | |
| 13052 | - animatorSelector = animators[j].s; | |
| 13053 | - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 13054 | - if (animatorProps.sk.propType) { | |
| 13055 | - if (mult.length) { | |
| 13056 | - matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]); | |
| 13057 | - } else { | |
| 13058 | - matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult); | |
| 13059 | - } | |
| 13060 | - } | |
| 13061 | - if (animatorProps.r.propType) { | |
| 13062 | - if (mult.length) { | |
| 13063 | - matrixHelper.rotateZ(-animatorProps.r.v * mult[2]); | |
| 13064 | - } else { | |
| 13065 | - matrixHelper.rotateZ(-animatorProps.r.v * mult); | |
| 13066 | - } | |
| 13067 | - } | |
| 13068 | - if (animatorProps.ry.propType) { | |
| 13069 | - if (mult.length) { | |
| 13070 | - matrixHelper.rotateY(animatorProps.ry.v * mult[1]); | |
| 13071 | - } else { | |
| 13072 | - matrixHelper.rotateY(animatorProps.ry.v * mult); | |
| 13073 | - } | |
| 13074 | - } | |
| 13075 | - if (animatorProps.rx.propType) { | |
| 13076 | - if (mult.length) { | |
| 13077 | - matrixHelper.rotateX(animatorProps.rx.v * mult[0]); | |
| 13078 | - } else { | |
| 13079 | - matrixHelper.rotateX(animatorProps.rx.v * mult); | |
| 13080 | - } | |
| 13081 | - } | |
| 13082 | - if (animatorProps.o.propType) { | |
| 13083 | - if (mult.length) { | |
| 13084 | - elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0]; | |
| 13085 | - } else { | |
| 13086 | - elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult; | |
| 13087 | - } | |
| 13088 | - } | |
| 13089 | - if (documentData.strokeWidthAnim && animatorProps.sw.propType) { | |
| 13090 | - if (mult.length) { | |
| 13091 | - sw += animatorProps.sw.v * mult[0]; | |
| 13092 | - } else { | |
| 13093 | - sw += animatorProps.sw.v * mult; | |
| 13094 | - } | |
| 13095 | - } | |
| 13096 | - if (documentData.strokeColorAnim && animatorProps.sc.propType) { | |
| 13097 | - for (k = 0; k < 3; k += 1) { | |
| 13098 | - if (mult.length) { | |
| 13099 | - sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0]; | |
| 13100 | - } else { | |
| 13101 | - sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult; | |
| 13102 | - } | |
| 13103 | - } | |
| 13104 | - } | |
| 13105 | - if (documentData.fillColorAnim && documentData.fc) { | |
| 13106 | - if (animatorProps.fc.propType) { | |
| 13107 | - for (k = 0; k < 3; k += 1) { | |
| 13108 | - if (mult.length) { | |
| 13109 | - fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0]; | |
| 13110 | - } else { | |
| 13111 | - fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult; | |
| 13112 | - } | |
| 13113 | - } | |
| 13114 | - } | |
| 13115 | - if (animatorProps.fh.propType) { | |
| 13116 | - if (mult.length) { | |
| 13117 | - fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]); | |
| 13118 | - } else { | |
| 13119 | - fc = addHueToRGB(fc, animatorProps.fh.v * mult); | |
| 13120 | - } | |
| 13121 | - } | |
| 13122 | - if (animatorProps.fs.propType) { | |
| 13123 | - if (mult.length) { | |
| 13124 | - fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]); | |
| 13125 | - } else { | |
| 13126 | - fc = addSaturationToRGB(fc, animatorProps.fs.v * mult); | |
| 13127 | - } | |
| 13128 | - } | |
| 13129 | - if (animatorProps.fb.propType) { | |
| 13130 | - if (mult.length) { | |
| 13131 | - fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]); | |
| 13132 | - } else { | |
| 13133 | - fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult); | |
| 13134 | - } | |
| 13135 | - } | |
| 13136 | - } | |
| 13137 | - } | |
| 13138 | - for (j = 0; j < jLen; j += 1) { | |
| 13139 | - animatorProps = animators[j].a; | |
| 13140 | - if (animatorProps.p.propType) { | |
| 13141 | - animatorSelector = animators[j].s; | |
| 13142 | - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); | |
| 13143 | - if (this._hasMaskedPath) { | |
| 13144 | - if (mult.length) { | |
| 13145 | - matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]); | |
| 13146 | - } else { | |
| 13147 | - matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); | |
| 13148 | - } | |
| 13149 | - } else if (mult.length) { | |
| 13150 | - matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]); | |
| 13151 | - } else { | |
| 13152 | - matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); | |
| 13153 | - } | |
| 13154 | - } | |
| 13155 | - } | |
| 13156 | - if (documentData.strokeWidthAnim) { | |
| 13157 | - letterSw = sw < 0 ? 0 : sw; | |
| 13158 | - } | |
| 13159 | - if (documentData.strokeColorAnim) { | |
| 13160 | - letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')'; | |
| 13161 | - } | |
| 13162 | - if (documentData.fillColorAnim && documentData.fc) { | |
| 13163 | - letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')'; | |
| 13164 | - } | |
| 13165 | - if (this._hasMaskedPath) { | |
| 13166 | - matrixHelper.translate(0, -documentData.ls); | |
| 13167 | - matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0); | |
| 13168 | - if (this._pathData.p.v) { | |
| 13169 | - tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]); | |
| 13170 | - var rot = Math.atan(tanAngle) * 180 / Math.PI; | |
| 13171 | - if (currentPoint.point[0] < prevPoint.point[0]) { | |
| 13172 | - rot += 180; | |
| 13173 | - } | |
| 13174 | - matrixHelper.rotate(-rot * Math.PI / 180); | |
| 13175 | - } | |
| 13176 | - matrixHelper.translate(xPathPos, yPathPos, 0); | |
| 13177 | - currentLength -= alignment[0] * letters[i].an * 0.005; | |
| 13178 | - if (letters[i + 1] && ind !== letters[i + 1].ind) { | |
| 13179 | - currentLength += letters[i].an / 2; | |
| 13180 | - currentLength += documentData.tr * 0.001 * documentData.finalSize; | |
| 13181 | - } | |
| 13182 | - } else { | |
| 13183 | - matrixHelper.translate(xPos, yPos, 0); | |
| 13184 | - if (documentData.ps) { | |
| 13185 | - // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0); | |
| 13186 | - matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); | |
| 13187 | - } | |
| 13188 | - switch (documentData.j) { | |
| 13189 | - case 1: | |
| 13190 | - matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0); | |
| 13191 | - break; | |
| 13192 | - case 2: | |
| 13193 | - matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0); | |
| 13194 | - break; | |
| 13195 | - default: | |
| 13196 | - break; | |
| 13197 | - } | |
| 13198 | - matrixHelper.translate(0, -documentData.ls); | |
| 13199 | - matrixHelper.translate(offf, 0, 0); | |
| 13200 | - matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0); | |
| 13201 | - xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize; | |
| 13202 | - } | |
| 13203 | - if (renderType === 'html') { | |
| 13204 | - letterM = matrixHelper.toCSS(); | |
| 13205 | - } else if (renderType === 'svg') { | |
| 13206 | - letterM = matrixHelper.to2dCSS(); | |
| 13207 | - } else { | |
| 13208 | - letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]]; | |
| 13209 | - } | |
| 13210 | - letterO = elemOpacity; | |
| 13211 | - } | |
| 13212 | - if (renderedLettersCount <= i) { | |
| 13213 | - letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP); | |
| 13214 | - this.renderedLetters.push(letterValue); | |
| 13215 | - renderedLettersCount += 1; | |
| 13216 | - this.lettersChangedFlag = true; | |
| 13217 | - } else { | |
| 13218 | - letterValue = this.renderedLetters[i]; | |
| 13219 | - this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag; | |
| 13220 | - } | |
| 13221 | - } | |
| 13222 | - }; | |
| 13223 | - TextAnimatorProperty.prototype.getValue = function () { | |
| 13224 | - if (this._elem.globalData.frameId === this._frameId) { | |
| 13225 | - return; | |
| 13226 | - } | |
| 13227 | - this._frameId = this._elem.globalData.frameId; | |
| 13228 | - this.iterateDynamicProperties(); | |
| 13229 | - }; | |
| 13230 | - TextAnimatorProperty.prototype.mHelper = new Matrix(); | |
| 13231 | - TextAnimatorProperty.prototype.defaultPropsArray = []; | |
| 13232 | - extendPrototype([DynamicPropertyContainer], TextAnimatorProperty); | |
| 13233 | - | |
| 13234 | - function ITextElement() {} | |
| 13235 | - ITextElement.prototype.initElement = function (data, globalData, comp) { | |
| 13236 | - this.lettersChangedFlag = true; | |
| 13237 | - this.initFrame(); | |
| 13238 | - this.initBaseData(data, globalData, comp); | |
| 13239 | - this.textProperty = new TextProperty(this, data.t, this.dynamicProperties); | |
| 13240 | - this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this); | |
| 13241 | - this.initTransform(data, globalData, comp); | |
| 13242 | - this.initHierarchy(); | |
| 13243 | - this.initRenderable(); | |
| 13244 | - this.initRendererElement(); | |
| 13245 | - this.createContainerElements(); | |
| 13246 | - this.createRenderableComponents(); | |
| 13247 | - this.createContent(); | |
| 13248 | - this.hide(); | |
| 13249 | - this.textAnimator.searchProperties(this.dynamicProperties); | |
| 13250 | - }; | |
| 13251 | - ITextElement.prototype.prepareFrame = function (num) { | |
| 13252 | - this._mdf = false; | |
| 13253 | - this.prepareRenderableFrame(num); | |
| 13254 | - this.prepareProperties(num, this.isInRange); | |
| 13255 | - }; | |
| 13256 | - ITextElement.prototype.createPathShape = function (matrixHelper, shapes) { | |
| 13257 | - var j; | |
| 13258 | - var jLen = shapes.length; | |
| 13259 | - var pathNodes; | |
| 13260 | - var shapeStr = ''; | |
| 13261 | - for (j = 0; j < jLen; j += 1) { | |
| 13262 | - if (shapes[j].ty === 'sh') { | |
| 13263 | - pathNodes = shapes[j].ks.k; | |
| 13264 | - shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper); | |
| 13265 | - } | |
| 13266 | - } | |
| 13267 | - return shapeStr; | |
| 13268 | - }; | |
| 13269 | - ITextElement.prototype.updateDocumentData = function (newData, index) { | |
| 13270 | - this.textProperty.updateDocumentData(newData, index); | |
| 13271 | - }; | |
| 13272 | - ITextElement.prototype.canResizeFont = function (_canResize) { | |
| 13273 | - this.textProperty.canResizeFont(_canResize); | |
| 13274 | - }; | |
| 13275 | - ITextElement.prototype.setMinimumFontSize = function (_fontSize) { | |
| 13276 | - this.textProperty.setMinimumFontSize(_fontSize); | |
| 13277 | - }; | |
| 13278 | - ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) { | |
| 13279 | - if (documentData.ps) { | |
| 13280 | - matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); | |
| 13281 | - } | |
| 13282 | - matrixHelper.translate(0, -documentData.ls, 0); | |
| 13283 | - switch (documentData.j) { | |
| 13284 | - case 1: | |
| 13285 | - matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0); | |
| 13286 | - break; | |
| 13287 | - case 2: | |
| 13288 | - matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0); | |
| 13289 | - break; | |
| 13290 | - default: | |
| 13291 | - break; | |
| 13292 | - } | |
| 13293 | - matrixHelper.translate(xPos, yPos, 0); | |
| 13294 | - }; | |
| 13295 | - ITextElement.prototype.buildColor = function (colorData) { | |
| 13296 | - return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')'; | |
| 13297 | - }; | |
| 13298 | - ITextElement.prototype.emptyProp = new LetterProps(); | |
| 13299 | - ITextElement.prototype.destroy = function () {}; | |
| 13300 | - ITextElement.prototype.validateText = function () { | |
| 13301 | - if (this.textProperty._mdf || this.textProperty._isFirstFrame) { | |
| 13302 | - this.buildNewText(); | |
| 13303 | - this.textProperty._isFirstFrame = false; | |
| 13304 | - this.textProperty._mdf = false; | |
| 13305 | - } | |
| 13306 | - }; | |
| 13307 | - | |
| 13308 | - var emptyShapeData = { | |
| 13309 | - shapes: [] | |
| 13310 | - }; | |
| 13311 | - function SVGTextLottieElement(data, globalData, comp) { | |
| 13312 | - this.textSpans = []; | |
| 13313 | - this.renderType = 'svg'; | |
| 13314 | - this.initElement(data, globalData, comp); | |
| 13315 | - } | |
| 13316 | - extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement); | |
| 13317 | - SVGTextLottieElement.prototype.createContent = function () { | |
| 13318 | - if (this.data.singleShape && !this.globalData.fontManager.chars) { | |
| 13319 | - this.textContainer = createNS('text'); | |
| 13320 | - } | |
| 13321 | - }; | |
| 13322 | - SVGTextLottieElement.prototype.buildTextContents = function (textArray) { | |
| 13323 | - var i = 0; | |
| 13324 | - var len = textArray.length; | |
| 13325 | - var textContents = []; | |
| 13326 | - var currentTextContent = ''; | |
| 13327 | - while (i < len) { | |
| 13328 | - if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) { | |
| 13329 | - textContents.push(currentTextContent); | |
| 13330 | - currentTextContent = ''; | |
| 13331 | - } else { | |
| 13332 | - currentTextContent += textArray[i]; | |
| 13333 | - } | |
| 13334 | - i += 1; | |
| 13335 | - } | |
| 13336 | - textContents.push(currentTextContent); | |
| 13337 | - return textContents; | |
| 13338 | - }; | |
| 13339 | - SVGTextLottieElement.prototype.buildShapeData = function (data, scale) { | |
| 13340 | - // data should probably be cloned to apply scale separately to each instance of a text on different layers | |
| 13341 | - // but since text internal content gets only rendered once and then it's never rerendered, | |
| 13342 | - // it's probably safe not to clone data and reuse always the same instance even if the object is mutated. | |
| 13343 | - // Avoiding cloning is preferred since cloning each character shape data is expensive | |
| 13344 | - if (data.shapes && data.shapes.length) { | |
| 13345 | - var shape = data.shapes[0]; | |
| 13346 | - if (shape.it) { | |
| 13347 | - var shapeItem = shape.it[shape.it.length - 1]; | |
| 13348 | - if (shapeItem.s) { | |
| 13349 | - shapeItem.s.k[0] = scale; | |
| 13350 | - shapeItem.s.k[1] = scale; | |
| 13351 | - } | |
| 13352 | - } | |
| 13353 | - } | |
| 13354 | - return data; | |
| 13355 | - }; | |
| 13356 | - SVGTextLottieElement.prototype.buildNewText = function () { | |
| 13357 | - this.addDynamicProperty(this); | |
| 13358 | - var i; | |
| 13359 | - var len; | |
| 13360 | - var documentData = this.textProperty.currentData; | |
| 13361 | - this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0); | |
| 13362 | - if (documentData.fc) { | |
| 13363 | - this.layerElement.setAttribute('fill', this.buildColor(documentData.fc)); | |
| 13364 | - } else { | |
| 13365 | - this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)'); | |
| 13366 | - } | |
| 13367 | - if (documentData.sc) { | |
| 13368 | - this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc)); | |
| 13369 | - this.layerElement.setAttribute('stroke-width', documentData.sw); | |
| 13370 | - } | |
| 13371 | - this.layerElement.setAttribute('font-size', documentData.finalSize); | |
| 13372 | - var fontData = this.globalData.fontManager.getFontByName(documentData.f); | |
| 13373 | - if (fontData.fClass) { | |
| 13374 | - this.layerElement.setAttribute('class', fontData.fClass); | |
| 13375 | - } else { | |
| 13376 | - this.layerElement.setAttribute('font-family', fontData.fFamily); | |
| 13377 | - var fWeight = documentData.fWeight; | |
| 13378 | - var fStyle = documentData.fStyle; | |
| 13379 | - this.layerElement.setAttribute('font-style', fStyle); | |
| 13380 | - this.layerElement.setAttribute('font-weight', fWeight); | |
| 13381 | - } | |
| 13382 | - this.layerElement.setAttribute('aria-label', documentData.t); | |
| 13383 | - var letters = documentData.l || []; | |
| 13384 | - var usesGlyphs = !!this.globalData.fontManager.chars; | |
| 13385 | - len = letters.length; | |
| 13386 | - var tSpan; | |
| 13387 | - var matrixHelper = this.mHelper; | |
| 13388 | - var shapeStr = ''; | |
| 13389 | - var singleShape = this.data.singleShape; | |
| 13390 | - var xPos = 0; | |
| 13391 | - var yPos = 0; | |
| 13392 | - var firstLine = true; | |
| 13393 | - var trackingOffset = documentData.tr * 0.001 * documentData.finalSize; | |
| 13394 | - if (singleShape && !usesGlyphs && !documentData.sz) { | |
| 13395 | - var tElement = this.textContainer; | |
| 13396 | - var justify = 'start'; | |
| 13397 | - switch (documentData.j) { | |
| 13398 | - case 1: | |
| 13399 | - justify = 'end'; | |
| 13400 | - break; | |
| 13401 | - case 2: | |
| 13402 | - justify = 'middle'; | |
| 13403 | - break; | |
| 13404 | - default: | |
| 13405 | - justify = 'start'; | |
| 13406 | - break; | |
| 13407 | - } | |
| 13408 | - tElement.setAttribute('text-anchor', justify); | |
| 13409 | - tElement.setAttribute('letter-spacing', trackingOffset); | |
| 13410 | - var textContent = this.buildTextContents(documentData.finalText); | |
| 13411 | - len = textContent.length; | |
| 13412 | - yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0; | |
| 13413 | - for (i = 0; i < len; i += 1) { | |
| 13414 | - tSpan = this.textSpans[i].span || createNS('tspan'); | |
| 13415 | - tSpan.textContent = textContent[i]; | |
| 13416 | - tSpan.setAttribute('x', 0); | |
| 13417 | - tSpan.setAttribute('y', yPos); | |
| 13418 | - tSpan.style.display = 'inherit'; | |
| 13419 | - tElement.appendChild(tSpan); | |
| 13420 | - if (!this.textSpans[i]) { | |
| 13421 | - this.textSpans[i] = { | |
| 13422 | - span: null, | |
| 13423 | - glyph: null | |
| 13424 | - }; | |
| 13425 | - } | |
| 13426 | - this.textSpans[i].span = tSpan; | |
| 13427 | - yPos += documentData.finalLineHeight; | |
| 13428 | - } | |
| 13429 | - this.layerElement.appendChild(tElement); | |
| 13430 | - } else { | |
| 13431 | - var cachedSpansLength = this.textSpans.length; | |
| 13432 | - var charData; | |
| 13433 | - for (i = 0; i < len; i += 1) { | |
| 13434 | - if (!this.textSpans[i]) { | |
| 13435 | - this.textSpans[i] = { | |
| 13436 | - span: null, | |
| 13437 | - childSpan: null, | |
| 13438 | - glyph: null | |
| 13439 | - }; | |
| 13440 | - } | |
| 13441 | - if (!usesGlyphs || !singleShape || i === 0) { | |
| 13442 | - tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text'); | |
| 13443 | - if (cachedSpansLength <= i) { | |
| 13444 | - tSpan.setAttribute('stroke-linecap', 'butt'); | |
| 13445 | - tSpan.setAttribute('stroke-linejoin', 'round'); | |
| 13446 | - tSpan.setAttribute('stroke-miterlimit', '4'); | |
| 13447 | - this.textSpans[i].span = tSpan; | |
| 13448 | - if (usesGlyphs) { | |
| 13449 | - var childSpan = createNS('g'); | |
| 13450 | - tSpan.appendChild(childSpan); | |
| 13451 | - this.textSpans[i].childSpan = childSpan; | |
| 13452 | - } | |
| 13453 | - this.textSpans[i].span = tSpan; | |
| 13454 | - this.layerElement.appendChild(tSpan); | |
| 13455 | - } | |
| 13456 | - tSpan.style.display = 'inherit'; | |
| 13457 | - } | |
| 13458 | - matrixHelper.reset(); | |
| 13459 | - if (singleShape) { | |
| 13460 | - if (letters[i].n) { | |
| 13461 | - xPos = -trackingOffset; | |
| 13462 | - yPos += documentData.yOffset; | |
| 13463 | - yPos += firstLine ? 1 : 0; | |
| 13464 | - firstLine = false; | |
| 13465 | - } | |
| 13466 | - this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); | |
| 13467 | - xPos += letters[i].l || 0; | |
| 13468 | - // xPos += letters[i].val === ' ' ? 0 : trackingOffset; | |
| 13469 | - xPos += trackingOffset; | |
| 13470 | - } | |
| 13471 | - if (usesGlyphs) { | |
| 13472 | - charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); | |
| 13473 | - var glyphElement; | |
| 13474 | - // t === 1 means the character has been replaced with an animated shaped | |
| 13475 | - if (charData.t === 1) { | |
| 13476 | - glyphElement = new SVGCompElement(charData.data, this.globalData, this); | |
| 13477 | - } else { | |
| 13478 | - var data = emptyShapeData; | |
| 13479 | - if (charData.data && charData.data.shapes) { | |
| 13480 | - data = this.buildShapeData(charData.data, documentData.finalSize); | |
| 13481 | - } | |
| 13482 | - glyphElement = new SVGShapeElement(data, this.globalData, this); | |
| 13483 | - } | |
| 13484 | - if (this.textSpans[i].glyph) { | |
| 13485 | - var glyph = this.textSpans[i].glyph; | |
| 13486 | - this.textSpans[i].childSpan.removeChild(glyph.layerElement); | |
| 13487 | - glyph.destroy(); | |
| 13488 | - } | |
| 13489 | - this.textSpans[i].glyph = glyphElement; | |
| 13490 | - glyphElement._debug = true; | |
| 13491 | - glyphElement.prepareFrame(0); | |
| 13492 | - glyphElement.renderFrame(); | |
| 13493 | - this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); | |
| 13494 | - // when using animated shapes, the layer will be scaled instead of replacing the internal scale | |
| 13495 | - // this might have issues with strokes and might need a different solution | |
| 13496 | - if (charData.t === 1) { | |
| 13497 | - this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')'); | |
| 13498 | - } | |
| 13499 | - } else { | |
| 13500 | - if (singleShape) { | |
| 13501 | - tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')'); | |
| 13502 | - } | |
| 13503 | - tSpan.textContent = letters[i].val; | |
| 13504 | - tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); | |
| 13505 | - } | |
| 13506 | - // | |
| 13507 | - } | |
| 13508 | - if (singleShape && tSpan) { | |
| 13509 | - tSpan.setAttribute('d', shapeStr); | |
| 13510 | - } | |
| 13511 | - } | |
| 13512 | - while (i < this.textSpans.length) { | |
| 13513 | - this.textSpans[i].span.style.display = 'none'; | |
| 13514 | - i += 1; | |
| 13515 | - } | |
| 13516 | - this._sizeChanged = true; | |
| 13517 | - }; | |
| 13518 | - SVGTextLottieElement.prototype.sourceRectAtTime = function () { | |
| 13519 | - this.prepareFrame(this.comp.renderedFrame - this.data.st); | |
| 13520 | - this.renderInnerContent(); | |
| 13521 | - if (this._sizeChanged) { | |
| 13522 | - this._sizeChanged = false; | |
| 13523 | - var textBox = this.layerElement.getBBox(); | |
| 13524 | - this.bbox = { | |
| 13525 | - top: textBox.y, | |
| 13526 | - left: textBox.x, | |
| 13527 | - width: textBox.width, | |
| 13528 | - height: textBox.height | |
| 13529 | - }; | |
| 13530 | - } | |
| 13531 | - return this.bbox; | |
| 13532 | - }; | |
| 13533 | - SVGTextLottieElement.prototype.getValue = function () { | |
| 13534 | - var i; | |
| 13535 | - var len = this.textSpans.length; | |
| 13536 | - var glyphElement; | |
| 13537 | - this.renderedFrame = this.comp.renderedFrame; | |
| 13538 | - for (i = 0; i < len; i += 1) { | |
| 13539 | - glyphElement = this.textSpans[i].glyph; | |
| 13540 | - if (glyphElement) { | |
| 13541 | - glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st); | |
| 13542 | - if (glyphElement._mdf) { | |
| 13543 | - this._mdf = true; | |
| 13544 | - } | |
| 13545 | - } | |
| 13546 | - } | |
| 13547 | - }; | |
| 13548 | - SVGTextLottieElement.prototype.renderInnerContent = function () { | |
| 13549 | - this.validateText(); | |
| 13550 | - if (!this.data.singleShape || this._mdf) { | |
| 13551 | - this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); | |
| 13552 | - if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) { | |
| 13553 | - this._sizeChanged = true; | |
| 13554 | - var i; | |
| 13555 | - var len; | |
| 13556 | - var renderedLetters = this.textAnimator.renderedLetters; | |
| 13557 | - var letters = this.textProperty.currentData.l; | |
| 13558 | - len = letters.length; | |
| 13559 | - var renderedLetter; | |
| 13560 | - var textSpan; | |
| 13561 | - var glyphElement; | |
| 13562 | - for (i = 0; i < len; i += 1) { | |
| 13563 | - if (!letters[i].n) { | |
| 13564 | - renderedLetter = renderedLetters[i]; | |
| 13565 | - textSpan = this.textSpans[i].span; | |
| 13566 | - glyphElement = this.textSpans[i].glyph; | |
| 13567 | - if (glyphElement) { | |
| 13568 | - glyphElement.renderFrame(); | |
| 13569 | - } | |
| 13570 | - if (renderedLetter._mdf.m) { | |
| 13571 | - textSpan.setAttribute('transform', renderedLetter.m); | |
| 13572 | - } | |
| 13573 | - if (renderedLetter._mdf.o) { | |
| 13574 | - textSpan.setAttribute('opacity', renderedLetter.o); | |
| 13575 | - } | |
| 13576 | - if (renderedLetter._mdf.sw) { | |
| 13577 | - textSpan.setAttribute('stroke-width', renderedLetter.sw); | |
| 13578 | - } | |
| 13579 | - if (renderedLetter._mdf.sc) { | |
| 13580 | - textSpan.setAttribute('stroke', renderedLetter.sc); | |
| 13581 | - } | |
| 13582 | - if (renderedLetter._mdf.fc) { | |
| 13583 | - textSpan.setAttribute('fill', renderedLetter.fc); | |
| 13584 | - } | |
| 13585 | - } | |
| 13586 | - } | |
| 13587 | - } | |
| 13588 | - } | |
| 13589 | - }; | |
| 13590 | - | |
| 13591 | - function ISolidElement(data, globalData, comp) { | |
| 13592 | - this.initElement(data, globalData, comp); | |
| 13593 | - } | |
| 13594 | - extendPrototype([IImageElement], ISolidElement); | |
| 13595 | - ISolidElement.prototype.createContent = function () { | |
| 13596 | - var rect = createNS('rect'); | |
| 13597 | - /// /rect.style.width = this.data.sw; | |
| 13598 | - /// /rect.style.height = this.data.sh; | |
| 13599 | - /// /rect.style.fill = this.data.sc; | |
| 13600 | - rect.setAttribute('width', this.data.sw); | |
| 13601 | - rect.setAttribute('height', this.data.sh); | |
| 13602 | - rect.setAttribute('fill', this.data.sc); | |
| 13603 | - this.layerElement.appendChild(rect); | |
| 13604 | - }; | |
| 13605 | - | |
| 13606 | - function NullElement(data, globalData, comp) { | |
| 13607 | - this.initFrame(); | |
| 13608 | - this.initBaseData(data, globalData, comp); | |
| 13609 | - this.initFrame(); | |
| 13610 | - this.initTransform(data, globalData, comp); | |
| 13611 | - this.initHierarchy(); | |
| 13612 | - } | |
| 13613 | - NullElement.prototype.prepareFrame = function (num) { | |
| 13614 | - this.prepareProperties(num, true); | |
| 13615 | - }; | |
| 13616 | - NullElement.prototype.renderFrame = function () {}; | |
| 13617 | - NullElement.prototype.getBaseElement = function () { | |
| 13618 | - return null; | |
| 13619 | - }; | |
| 13620 | - NullElement.prototype.destroy = function () {}; | |
| 13621 | - NullElement.prototype.sourceRectAtTime = function () {}; | |
| 13622 | - NullElement.prototype.hide = function () {}; | |
| 13623 | - extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement); | |
| 13624 | - | |
| 13625 | - function SVGRendererBase() {} | |
| 13626 | - extendPrototype([BaseRenderer], SVGRendererBase); | |
| 13627 | - SVGRendererBase.prototype.createNull = function (data) { | |
| 13628 | - return new NullElement(data, this.globalData, this); | |
| 13629 | - }; | |
| 13630 | - SVGRendererBase.prototype.createShape = function (data) { | |
| 13631 | - return new SVGShapeElement(data, this.globalData, this); | |
| 13632 | - }; | |
| 13633 | - SVGRendererBase.prototype.createText = function (data) { | |
| 13634 | - return new SVGTextLottieElement(data, this.globalData, this); | |
| 13635 | - }; | |
| 13636 | - SVGRendererBase.prototype.createImage = function (data) { | |
| 13637 | - return new IImageElement(data, this.globalData, this); | |
| 13638 | - }; | |
| 13639 | - SVGRendererBase.prototype.createSolid = function (data) { | |
| 13640 | - return new ISolidElement(data, this.globalData, this); | |
| 13641 | - }; | |
| 13642 | - SVGRendererBase.prototype.configAnimation = function (animData) { | |
| 13643 | - this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); | |
| 13644 | - this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); | |
| 13645 | - if (this.renderConfig.viewBoxSize) { | |
| 13646 | - this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize); | |
| 13647 | - } else { | |
| 13648 | - this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h); | |
| 13649 | - } | |
| 13650 | - if (!this.renderConfig.viewBoxOnly) { | |
| 13651 | - this.svgElement.setAttribute('width', animData.w); | |
| 13652 | - this.svgElement.setAttribute('height', animData.h); | |
| 13653 | - this.svgElement.style.width = '100%'; | |
| 13654 | - this.svgElement.style.height = '100%'; | |
| 13655 | - this.svgElement.style.transform = 'translate3d(0,0,0)'; | |
| 13656 | - this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility; | |
| 13657 | - } | |
| 13658 | - if (this.renderConfig.width) { | |
| 13659 | - this.svgElement.setAttribute('width', this.renderConfig.width); | |
| 13660 | - } | |
| 13661 | - if (this.renderConfig.height) { | |
| 13662 | - this.svgElement.setAttribute('height', this.renderConfig.height); | |
| 13663 | - } | |
| 13664 | - if (this.renderConfig.className) { | |
| 13665 | - this.svgElement.setAttribute('class', this.renderConfig.className); | |
| 13666 | - } | |
| 13667 | - if (this.renderConfig.id) { | |
| 13668 | - this.svgElement.setAttribute('id', this.renderConfig.id); | |
| 13669 | - } | |
| 13670 | - if (this.renderConfig.focusable !== undefined) { | |
| 13671 | - this.svgElement.setAttribute('focusable', this.renderConfig.focusable); | |
| 13672 | - } | |
| 13673 | - this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); | |
| 13674 | - // this.layerElement.style.transform = 'translate3d(0,0,0)'; | |
| 13675 | - // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = "0px 0px 0px"; | |
| 13676 | - this.animationItem.wrapper.appendChild(this.svgElement); | |
| 13677 | - // Mask animation | |
| 13678 | - var defs = this.globalData.defs; | |
| 13679 | - this.setupGlobalData(animData, defs); | |
| 13680 | - this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; | |
| 13681 | - this.data = animData; | |
| 13682 | - var maskElement = createNS('clipPath'); | |
| 13683 | - var rect = createNS('rect'); | |
| 13684 | - rect.setAttribute('width', animData.w); | |
| 13685 | - rect.setAttribute('height', animData.h); | |
| 13686 | - rect.setAttribute('x', 0); | |
| 13687 | - rect.setAttribute('y', 0); | |
| 13688 | - var maskId = createElementID(); | |
| 13689 | - maskElement.setAttribute('id', maskId); | |
| 13690 | - maskElement.appendChild(rect); | |
| 13691 | - this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')'); | |
| 13692 | - defs.appendChild(maskElement); | |
| 13693 | - this.layers = animData.layers; | |
| 13694 | - this.elements = createSizedArray(animData.layers.length); | |
| 13695 | - }; | |
| 13696 | - SVGRendererBase.prototype.destroy = function () { | |
| 13697 | - if (this.animationItem.wrapper) { | |
| 13698 | - this.animationItem.wrapper.innerText = ''; | |
| 13699 | - } | |
| 13700 | - this.layerElement = null; | |
| 13701 | - this.globalData.defs = null; | |
| 13702 | - var i; | |
| 13703 | - var len = this.layers ? this.layers.length : 0; | |
| 13704 | - for (i = 0; i < len; i += 1) { | |
| 13705 | - if (this.elements[i] && this.elements[i].destroy) { | |
| 13706 | - this.elements[i].destroy(); | |
| 13707 | - } | |
| 13708 | - } | |
| 13709 | - this.elements.length = 0; | |
| 13710 | - this.destroyed = true; | |
| 13711 | - this.animationItem = null; | |
| 13712 | - }; | |
| 13713 | - SVGRendererBase.prototype.updateContainerSize = function () {}; | |
| 13714 | - SVGRendererBase.prototype.findIndexByInd = function (ind) { | |
| 13715 | - var i = 0; | |
| 13716 | - var len = this.layers.length; | |
| 13717 | - for (i = 0; i < len; i += 1) { | |
| 13718 | - if (this.layers[i].ind === ind) { | |
| 13719 | - return i; | |
| 13720 | - } | |
| 13721 | - } | |
| 13722 | - return -1; | |
| 13723 | - }; | |
| 13724 | - SVGRendererBase.prototype.buildItem = function (pos) { | |
| 13725 | - var elements = this.elements; | |
| 13726 | - if (elements[pos] || this.layers[pos].ty === 99) { | |
| 13727 | - return; | |
| 13728 | - } | |
| 13729 | - elements[pos] = true; | |
| 13730 | - var element = this.createItem(this.layers[pos]); | |
| 13731 | - elements[pos] = element; | |
| 13732 | - if (getExpressionsPlugin()) { | |
| 13733 | - if (this.layers[pos].ty === 0) { | |
| 13734 | - this.globalData.projectInterface.registerComposition(element); | |
| 13735 | - } | |
| 13736 | - element.initExpressions(); | |
| 13737 | - } | |
| 13738 | - this.appendElementInPos(element, pos); | |
| 13739 | - if (this.layers[pos].tt) { | |
| 13740 | - var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1; | |
| 13741 | - if (elementIndex === -1) { | |
| 13742 | - return; | |
| 13743 | - } | |
| 13744 | - if (!this.elements[elementIndex] || this.elements[elementIndex] === true) { | |
| 13745 | - this.buildItem(elementIndex); | |
| 13746 | - this.addPendingElement(element); | |
| 13747 | - } else { | |
| 13748 | - var matteElement = elements[elementIndex]; | |
| 13749 | - var matteMask = matteElement.getMatte(this.layers[pos].tt); | |
| 13750 | - element.setMatte(matteMask); | |
| 13751 | - } | |
| 13752 | - } | |
| 13753 | - }; | |
| 13754 | - SVGRendererBase.prototype.checkPendingElements = function () { | |
| 13755 | - while (this.pendingElements.length) { | |
| 13756 | - var element = this.pendingElements.pop(); | |
| 13757 | - element.checkParenting(); | |
| 13758 | - if (element.data.tt) { | |
| 13759 | - var i = 0; | |
| 13760 | - var len = this.elements.length; | |
| 13761 | - while (i < len) { | |
| 13762 | - if (this.elements[i] === element) { | |
| 13763 | - var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1; | |
| 13764 | - var matteElement = this.elements[elementIndex]; | |
| 13765 | - var matteMask = matteElement.getMatte(this.layers[i].tt); | |
| 13766 | - element.setMatte(matteMask); | |
| 13767 | - break; | |
| 13768 | - } | |
| 13769 | - i += 1; | |
| 13770 | - } | |
| 13771 | - } | |
| 13772 | - } | |
| 13773 | - }; | |
| 13774 | - SVGRendererBase.prototype.renderFrame = function (num) { | |
| 13775 | - if (this.renderedFrame === num || this.destroyed) { | |
| 13776 | - return; | |
| 13777 | - } | |
| 13778 | - if (num === null) { | |
| 13779 | - num = this.renderedFrame; | |
| 13780 | - } else { | |
| 13781 | - this.renderedFrame = num; | |
| 13782 | - } | |
| 13783 | - // console.log('-------'); | |
| 13784 | - // console.log('FRAME ',num); | |
| 13785 | - this.globalData.frameNum = num; | |
| 13786 | - this.globalData.frameId += 1; | |
| 13787 | - this.globalData.projectInterface.currentFrame = num; | |
| 13788 | - this.globalData._mdf = false; | |
| 13789 | - var i; | |
| 13790 | - var len = this.layers.length; | |
| 13791 | - if (!this.completeLayers) { | |
| 13792 | - this.checkLayers(num); | |
| 13793 | - } | |
| 13794 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 13795 | - if (this.completeLayers || this.elements[i]) { | |
| 13796 | - this.elements[i].prepareFrame(num - this.layers[i].st); | |
| 13797 | - } | |
| 13798 | - } | |
| 13799 | - if (this.globalData._mdf) { | |
| 13800 | - for (i = 0; i < len; i += 1) { | |
| 13801 | - if (this.completeLayers || this.elements[i]) { | |
| 13802 | - this.elements[i].renderFrame(); | |
| 13803 | - } | |
| 13804 | - } | |
| 13805 | - } | |
| 13806 | - }; | |
| 13807 | - SVGRendererBase.prototype.appendElementInPos = function (element, pos) { | |
| 13808 | - var newElement = element.getBaseElement(); | |
| 13809 | - if (!newElement) { | |
| 13810 | - return; | |
| 13811 | - } | |
| 13812 | - var i = 0; | |
| 13813 | - var nextElement; | |
| 13814 | - while (i < pos) { | |
| 13815 | - if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) { | |
| 13816 | - nextElement = this.elements[i].getBaseElement(); | |
| 13817 | - } | |
| 13818 | - i += 1; | |
| 13819 | - } | |
| 13820 | - if (nextElement) { | |
| 13821 | - this.layerElement.insertBefore(newElement, nextElement); | |
| 13822 | - } else { | |
| 13823 | - this.layerElement.appendChild(newElement); | |
| 13824 | - } | |
| 13825 | - }; | |
| 13826 | - SVGRendererBase.prototype.hide = function () { | |
| 13827 | - this.layerElement.style.display = 'none'; | |
| 13828 | - }; | |
| 13829 | - SVGRendererBase.prototype.show = function () { | |
| 13830 | - this.layerElement.style.display = 'block'; | |
| 13831 | - }; | |
| 13832 | - | |
| 13833 | - function ICompElement() {} | |
| 13834 | - extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement); | |
| 13835 | - ICompElement.prototype.initElement = function (data, globalData, comp) { | |
| 13836 | - this.initFrame(); | |
| 13837 | - this.initBaseData(data, globalData, comp); | |
| 13838 | - this.initTransform(data, globalData, comp); | |
| 13839 | - this.initRenderable(); | |
| 13840 | - this.initHierarchy(); | |
| 13841 | - this.initRendererElement(); | |
| 13842 | - this.createContainerElements(); | |
| 13843 | - this.createRenderableComponents(); | |
| 13844 | - if (this.data.xt || !globalData.progressiveLoad) { | |
| 13845 | - this.buildAllItems(); | |
| 13846 | - } | |
| 13847 | - this.hide(); | |
| 13848 | - }; | |
| 13849 | - | |
| 13850 | - /* ICompElement.prototype.hide = function(){ | |
| 13851 | - if(!this.hidden){ | |
| 13852 | - this.hideElement(); | |
| 13853 | - var i,len = this.elements.length; | |
| 13854 | - for( i = 0; i < len; i+=1 ){ | |
| 13855 | - if(this.elements[i]){ | |
| 13856 | - this.elements[i].hide(); | |
| 13857 | - } | |
| 13858 | - } | |
| 13859 | - } | |
| 13860 | - }; */ | |
| 13861 | - | |
| 13862 | - ICompElement.prototype.prepareFrame = function (num) { | |
| 13863 | - this._mdf = false; | |
| 13864 | - this.prepareRenderableFrame(num); | |
| 13865 | - this.prepareProperties(num, this.isInRange); | |
| 13866 | - if (!this.isInRange && !this.data.xt) { | |
| 13867 | - return; | |
| 13868 | - } | |
| 13869 | - if (!this.tm._placeholder) { | |
| 13870 | - var timeRemapped = this.tm.v; | |
| 13871 | - if (timeRemapped === this.data.op) { | |
| 13872 | - timeRemapped = this.data.op - 1; | |
| 13873 | - } | |
| 13874 | - this.renderedFrame = timeRemapped; | |
| 13875 | - } else { | |
| 13876 | - this.renderedFrame = num / this.data.sr; | |
| 13877 | - } | |
| 13878 | - var i; | |
| 13879 | - var len = this.elements.length; | |
| 13880 | - if (!this.completeLayers) { | |
| 13881 | - this.checkLayers(this.renderedFrame); | |
| 13882 | - } | |
| 13883 | - // This iteration needs to be backwards because of how expressions connect between each other | |
| 13884 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 13885 | - if (this.completeLayers || this.elements[i]) { | |
| 13886 | - this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st); | |
| 13887 | - if (this.elements[i]._mdf) { | |
| 13888 | - this._mdf = true; | |
| 13889 | - } | |
| 13890 | - } | |
| 13891 | - } | |
| 13892 | - }; | |
| 13893 | - ICompElement.prototype.renderInnerContent = function () { | |
| 13894 | - var i; | |
| 13895 | - var len = this.layers.length; | |
| 13896 | - for (i = 0; i < len; i += 1) { | |
| 13897 | - if (this.completeLayers || this.elements[i]) { | |
| 13898 | - this.elements[i].renderFrame(); | |
| 13899 | - } | |
| 13900 | - } | |
| 13901 | - }; | |
| 13902 | - ICompElement.prototype.setElements = function (elems) { | |
| 13903 | - this.elements = elems; | |
| 13904 | - }; | |
| 13905 | - ICompElement.prototype.getElements = function () { | |
| 13906 | - return this.elements; | |
| 13907 | - }; | |
| 13908 | - ICompElement.prototype.destroyElements = function () { | |
| 13909 | - var i; | |
| 13910 | - var len = this.layers.length; | |
| 13911 | - for (i = 0; i < len; i += 1) { | |
| 13912 | - if (this.elements[i]) { | |
| 13913 | - this.elements[i].destroy(); | |
| 13914 | - } | |
| 13915 | - } | |
| 13916 | - }; | |
| 13917 | - ICompElement.prototype.destroy = function () { | |
| 13918 | - this.destroyElements(); | |
| 13919 | - this.destroyBaseElement(); | |
| 13920 | - }; | |
| 13921 | - | |
| 13922 | - function SVGCompElement(data, globalData, comp) { | |
| 13923 | - this.layers = data.layers; | |
| 13924 | - this.supports3d = true; | |
| 13925 | - this.completeLayers = false; | |
| 13926 | - this.pendingElements = []; | |
| 13927 | - this.elements = this.layers ? createSizedArray(this.layers.length) : []; | |
| 13928 | - this.initElement(data, globalData, comp); | |
| 13929 | - this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { | |
| 13930 | - _placeholder: true | |
| 13931 | - }; | |
| 13932 | - } | |
| 13933 | - extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement); | |
| 13934 | - SVGCompElement.prototype.createComp = function (data) { | |
| 13935 | - return new SVGCompElement(data, this.globalData, this); | |
| 13936 | - }; | |
| 13937 | - | |
| 13938 | - function SVGRenderer(animationItem, config) { | |
| 13939 | - this.animationItem = animationItem; | |
| 13940 | - this.layers = null; | |
| 13941 | - this.renderedFrame = -1; | |
| 13942 | - this.svgElement = createNS('svg'); | |
| 13943 | - var ariaLabel = ''; | |
| 13944 | - if (config && config.title) { | |
| 13945 | - var titleElement = createNS('title'); | |
| 13946 | - var titleId = createElementID(); | |
| 13947 | - titleElement.setAttribute('id', titleId); | |
| 13948 | - titleElement.textContent = config.title; | |
| 13949 | - this.svgElement.appendChild(titleElement); | |
| 13950 | - ariaLabel += titleId; | |
| 13951 | - } | |
| 13952 | - if (config && config.description) { | |
| 13953 | - var descElement = createNS('desc'); | |
| 13954 | - var descId = createElementID(); | |
| 13955 | - descElement.setAttribute('id', descId); | |
| 13956 | - descElement.textContent = config.description; | |
| 13957 | - this.svgElement.appendChild(descElement); | |
| 13958 | - ariaLabel += ' ' + descId; | |
| 13959 | - } | |
| 13960 | - if (ariaLabel) { | |
| 13961 | - this.svgElement.setAttribute('aria-labelledby', ariaLabel); | |
| 13962 | - } | |
| 13963 | - var defs = createNS('defs'); | |
| 13964 | - this.svgElement.appendChild(defs); | |
| 13965 | - var maskElement = createNS('g'); | |
| 13966 | - this.svgElement.appendChild(maskElement); | |
| 13967 | - this.layerElement = maskElement; | |
| 13968 | - this.renderConfig = { | |
| 13969 | - preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet', | |
| 13970 | - imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice', | |
| 13971 | - contentVisibility: config && config.contentVisibility || 'visible', | |
| 13972 | - progressiveLoad: config && config.progressiveLoad || false, | |
| 13973 | - hideOnTransparent: !(config && config.hideOnTransparent === false), | |
| 13974 | - viewBoxOnly: config && config.viewBoxOnly || false, | |
| 13975 | - viewBoxSize: config && config.viewBoxSize || false, | |
| 13976 | - className: config && config.className || '', | |
| 13977 | - id: config && config.id || '', | |
| 13978 | - focusable: config && config.focusable, | |
| 13979 | - filterSize: { | |
| 13980 | - width: config && config.filterSize && config.filterSize.width || '100%', | |
| 13981 | - height: config && config.filterSize && config.filterSize.height || '100%', | |
| 13982 | - x: config && config.filterSize && config.filterSize.x || '0%', | |
| 13983 | - y: config && config.filterSize && config.filterSize.y || '0%' | |
| 13984 | - }, | |
| 13985 | - width: config && config.width, | |
| 13986 | - height: config && config.height, | |
| 13987 | - runExpressions: !config || config.runExpressions === undefined || config.runExpressions | |
| 13988 | - }; | |
| 13989 | - this.globalData = { | |
| 13990 | - _mdf: false, | |
| 13991 | - frameNum: -1, | |
| 13992 | - defs: defs, | |
| 13993 | - renderConfig: this.renderConfig | |
| 13994 | - }; | |
| 13995 | - this.elements = []; | |
| 13996 | - this.pendingElements = []; | |
| 13997 | - this.destroyed = false; | |
| 13998 | - this.rendererType = 'svg'; | |
| 13999 | - } | |
| 14000 | - extendPrototype([SVGRendererBase], SVGRenderer); | |
| 14001 | - SVGRenderer.prototype.createComp = function (data) { | |
| 14002 | - return new SVGCompElement(data, this.globalData, this); | |
| 14003 | - }; | |
| 14004 | - | |
| 14005 | - function ShapeTransformManager() { | |
| 14006 | - this.sequences = {}; | |
| 14007 | - this.sequenceList = []; | |
| 14008 | - this.transform_key_count = 0; | |
| 14009 | - } | |
| 14010 | - ShapeTransformManager.prototype = { | |
| 14011 | - addTransformSequence: function addTransformSequence(transforms) { | |
| 14012 | - var i; | |
| 14013 | - var len = transforms.length; | |
| 14014 | - var key = '_'; | |
| 14015 | - for (i = 0; i < len; i += 1) { | |
| 14016 | - key += transforms[i].transform.key + '_'; | |
| 14017 | - } | |
| 14018 | - var sequence = this.sequences[key]; | |
| 14019 | - if (!sequence) { | |
| 14020 | - sequence = { | |
| 14021 | - transforms: [].concat(transforms), | |
| 14022 | - finalTransform: new Matrix(), | |
| 14023 | - _mdf: false | |
| 14024 | - }; | |
| 14025 | - this.sequences[key] = sequence; | |
| 14026 | - this.sequenceList.push(sequence); | |
| 14027 | - } | |
| 14028 | - return sequence; | |
| 14029 | - }, | |
| 14030 | - processSequence: function processSequence(sequence, isFirstFrame) { | |
| 14031 | - var i = 0; | |
| 14032 | - var len = sequence.transforms.length; | |
| 14033 | - var _mdf = isFirstFrame; | |
| 14034 | - while (i < len && !isFirstFrame) { | |
| 14035 | - if (sequence.transforms[i].transform.mProps._mdf) { | |
| 14036 | - _mdf = true; | |
| 14037 | - break; | |
| 14038 | - } | |
| 14039 | - i += 1; | |
| 14040 | - } | |
| 14041 | - if (_mdf) { | |
| 14042 | - sequence.finalTransform.reset(); | |
| 14043 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 14044 | - sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v); | |
| 14045 | - } | |
| 14046 | - } | |
| 14047 | - sequence._mdf = _mdf; | |
| 14048 | - }, | |
| 14049 | - processSequences: function processSequences(isFirstFrame) { | |
| 14050 | - var i; | |
| 14051 | - var len = this.sequenceList.length; | |
| 14052 | - for (i = 0; i < len; i += 1) { | |
| 14053 | - this.processSequence(this.sequenceList[i], isFirstFrame); | |
| 14054 | - } | |
| 14055 | - }, | |
| 14056 | - getNewKey: function getNewKey() { | |
| 14057 | - this.transform_key_count += 1; | |
| 14058 | - return '_' + this.transform_key_count; | |
| 14059 | - } | |
| 14060 | - }; | |
| 14061 | - | |
| 14062 | - var lumaLoader = function lumaLoader() { | |
| 14063 | - var id = '__lottie_element_luma_buffer'; | |
| 14064 | - var lumaBuffer = null; | |
| 14065 | - var lumaBufferCtx = null; | |
| 14066 | - var svg = null; | |
| 14067 | - | |
| 14068 | - // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame. | |
| 14069 | - // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used. | |
| 14070 | - // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask. | |
| 14071 | - // Naming it solution 2 to mark the extra comment lines. | |
| 14072 | - /* | |
| 14073 | - var svgString = [ | |
| 14074 | - '<svg xmlns="http://www.w3.org/2000/svg">', | |
| 14075 | - '<filter id="' + id + '">', | |
| 14076 | - '<feColorMatrix type="matrix" color-interpolation-filters="sRGB" values="', | |
| 14077 | - '0.3, 0.3, 0.3, 0, 0, ', | |
| 14078 | - '0.3, 0.3, 0.3, 0, 0, ', | |
| 14079 | - '0.3, 0.3, 0.3, 0, 0, ', | |
| 14080 | - '0.3, 0.3, 0.3, 0, 0', | |
| 14081 | - '"/>', | |
| 14082 | - '</filter>', | |
| 14083 | - '</svg>', | |
| 14084 | - ].join(''); | |
| 14085 | - var blob = new Blob([svgString], { type: 'image/svg+xml' }); | |
| 14086 | - var url = URL.createObjectURL(blob); | |
| 14087 | - */ | |
| 14088 | - | |
| 14089 | - function createLumaSvgFilter() { | |
| 14090 | - var _svg = createNS('svg'); | |
| 14091 | - var fil = createNS('filter'); | |
| 14092 | - var matrix = createNS('feColorMatrix'); | |
| 14093 | - fil.setAttribute('id', id); | |
| 14094 | - matrix.setAttribute('type', 'matrix'); | |
| 14095 | - matrix.setAttribute('color-interpolation-filters', 'sRGB'); | |
| 14096 | - 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'); | |
| 14097 | - fil.appendChild(matrix); | |
| 14098 | - _svg.appendChild(fil); | |
| 14099 | - _svg.setAttribute('id', id + '_svg'); | |
| 14100 | - if (featureSupport.svgLumaHidden) { | |
| 14101 | - _svg.style.display = 'none'; | |
| 14102 | - } | |
| 14103 | - return _svg; | |
| 14104 | - } | |
| 14105 | - function loadLuma() { | |
| 14106 | - if (!lumaBuffer) { | |
| 14107 | - svg = createLumaSvgFilter(); | |
| 14108 | - document.body.appendChild(svg); | |
| 14109 | - lumaBuffer = createTag('canvas'); | |
| 14110 | - lumaBufferCtx = lumaBuffer.getContext('2d'); | |
| 14111 | - // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2 | |
| 14112 | - lumaBufferCtx.filter = 'url(#' + id + ')'; | |
| 14113 | - lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)'; | |
| 14114 | - lumaBufferCtx.fillRect(0, 0, 1, 1); | |
| 14115 | - } | |
| 14116 | - } | |
| 14117 | - function getLuma(canvas) { | |
| 14118 | - if (!lumaBuffer) { | |
| 14119 | - loadLuma(); | |
| 14120 | - } | |
| 14121 | - lumaBuffer.width = canvas.width; | |
| 14122 | - lumaBuffer.height = canvas.height; | |
| 14123 | - // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2 | |
| 14124 | - lumaBufferCtx.filter = 'url(#' + id + ')'; | |
| 14125 | - return lumaBuffer; | |
| 14126 | - } | |
| 14127 | - return { | |
| 14128 | - load: loadLuma, | |
| 14129 | - get: getLuma | |
| 14130 | - }; | |
| 14131 | - }; | |
| 14132 | - function createCanvas(width, height) { | |
| 14133 | - if (featureSupport.offscreenCanvas) { | |
| 14134 | - return new OffscreenCanvas(width, height); | |
| 14135 | - } | |
| 14136 | - var canvas = createTag('canvas'); | |
| 14137 | - canvas.width = width; | |
| 14138 | - canvas.height = height; | |
| 14139 | - return canvas; | |
| 14140 | - } | |
| 14141 | - var assetLoader = function () { | |
| 14142 | - return { | |
| 14143 | - loadLumaCanvas: lumaLoader.load, | |
| 14144 | - getLumaCanvas: lumaLoader.get, | |
| 14145 | - createCanvas: createCanvas | |
| 14146 | - }; | |
| 14147 | - }(); | |
| 14148 | - | |
| 14149 | - var registeredEffects = {}; | |
| 14150 | - function CVEffects(elem) { | |
| 14151 | - var i; | |
| 14152 | - var len = elem.data.ef ? elem.data.ef.length : 0; | |
| 14153 | - this.filters = []; | |
| 14154 | - var filterManager; | |
| 14155 | - for (i = 0; i < len; i += 1) { | |
| 14156 | - filterManager = null; | |
| 14157 | - var type = elem.data.ef[i].ty; | |
| 14158 | - if (registeredEffects[type]) { | |
| 14159 | - var Effect = registeredEffects[type].effect; | |
| 14160 | - filterManager = new Effect(elem.effectsManager.effectElements[i], elem); | |
| 14161 | - } | |
| 14162 | - if (filterManager) { | |
| 14163 | - this.filters.push(filterManager); | |
| 14164 | - } | |
| 14165 | - } | |
| 14166 | - if (this.filters.length) { | |
| 14167 | - elem.addRenderableComponent(this); | |
| 14168 | - } | |
| 14169 | - } | |
| 14170 | - CVEffects.prototype.renderFrame = function (_isFirstFrame) { | |
| 14171 | - var i; | |
| 14172 | - var len = this.filters.length; | |
| 14173 | - for (i = 0; i < len; i += 1) { | |
| 14174 | - this.filters[i].renderFrame(_isFirstFrame); | |
| 14175 | - } | |
| 14176 | - }; | |
| 14177 | - CVEffects.prototype.getEffects = function (type) { | |
| 14178 | - var i; | |
| 14179 | - var len = this.filters.length; | |
| 14180 | - var effects = []; | |
| 14181 | - for (i = 0; i < len; i += 1) { | |
| 14182 | - if (this.filters[i].type === type) { | |
| 14183 | - effects.push(this.filters[i]); | |
| 14184 | - } | |
| 14185 | - } | |
| 14186 | - return effects; | |
| 14187 | - }; | |
| 14188 | - function registerEffect(id, effect) { | |
| 14189 | - registeredEffects[id] = { | |
| 14190 | - effect: effect | |
| 14191 | - }; | |
| 14192 | - } | |
| 14193 | - | |
| 14194 | - function CVMaskElement(data, element) { | |
| 14195 | - this.data = data; | |
| 14196 | - this.element = element; | |
| 14197 | - this.masksProperties = this.data.masksProperties || []; | |
| 14198 | - this.viewData = createSizedArray(this.masksProperties.length); | |
| 14199 | - var i; | |
| 14200 | - var len = this.masksProperties.length; | |
| 14201 | - var hasMasks = false; | |
| 14202 | - for (i = 0; i < len; i += 1) { | |
| 14203 | - if (this.masksProperties[i].mode !== 'n') { | |
| 14204 | - hasMasks = true; | |
| 14205 | - } | |
| 14206 | - this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3); | |
| 14207 | - } | |
| 14208 | - this.hasMasks = hasMasks; | |
| 14209 | - if (hasMasks) { | |
| 14210 | - this.element.addRenderableComponent(this); | |
| 14211 | - } | |
| 14212 | - } | |
| 14213 | - CVMaskElement.prototype.renderFrame = function () { | |
| 14214 | - if (!this.hasMasks) { | |
| 14215 | - return; | |
| 14216 | - } | |
| 14217 | - var transform = this.element.finalTransform.mat; | |
| 14218 | - var ctx = this.element.canvasContext; | |
| 14219 | - var i; | |
| 14220 | - var len = this.masksProperties.length; | |
| 14221 | - var pt; | |
| 14222 | - var pts; | |
| 14223 | - var data; | |
| 14224 | - ctx.beginPath(); | |
| 14225 | - for (i = 0; i < len; i += 1) { | |
| 14226 | - if (this.masksProperties[i].mode !== 'n') { | |
| 14227 | - if (this.masksProperties[i].inv) { | |
| 14228 | - ctx.moveTo(0, 0); | |
| 14229 | - ctx.lineTo(this.element.globalData.compSize.w, 0); | |
| 14230 | - ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h); | |
| 14231 | - ctx.lineTo(0, this.element.globalData.compSize.h); | |
| 14232 | - ctx.lineTo(0, 0); | |
| 14233 | - } | |
| 14234 | - data = this.viewData[i].v; | |
| 14235 | - pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0); | |
| 14236 | - ctx.moveTo(pt[0], pt[1]); | |
| 14237 | - var j; | |
| 14238 | - var jLen = data._length; | |
| 14239 | - for (j = 1; j < jLen; j += 1) { | |
| 14240 | - pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]); | |
| 14241 | - ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); | |
| 14242 | - } | |
| 14243 | - pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]); | |
| 14244 | - ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); | |
| 14245 | - } | |
| 14246 | - } | |
| 14247 | - this.element.globalData.renderer.save(true); | |
| 14248 | - ctx.clip(); | |
| 14249 | - }; | |
| 14250 | - CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty; | |
| 14251 | - CVMaskElement.prototype.destroy = function () { | |
| 14252 | - this.element = null; | |
| 14253 | - }; | |
| 14254 | - | |
| 14255 | - function CVBaseElement() {} | |
| 14256 | - var operationsMap = { | |
| 14257 | - 1: 'source-in', | |
| 14258 | - 2: 'source-out', | |
| 14259 | - 3: 'source-in', | |
| 14260 | - 4: 'source-out' | |
| 14261 | - }; | |
| 14262 | - CVBaseElement.prototype = { | |
| 14263 | - createElements: function createElements() {}, | |
| 14264 | - initRendererElement: function initRendererElement() {}, | |
| 14265 | - createContainerElements: function createContainerElements() { | |
| 14266 | - // If the layer is masked we will use two buffers to store each different states of the drawing | |
| 14267 | - // This solution is not ideal for several reason. But unfortunately, because of the recursive | |
| 14268 | - // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask. | |
| 14269 | - // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer | |
| 14270 | - // It might be challenging because the layer most likely is transformed in some way | |
| 14271 | - if (this.data.tt >= 1) { | |
| 14272 | - this.buffers = []; | |
| 14273 | - var canvasContext = this.globalData.canvasContext; | |
| 14274 | - var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height); | |
| 14275 | - this.buffers.push(bufferCanvas); | |
| 14276 | - var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height); | |
| 14277 | - this.buffers.push(bufferCanvas2); | |
| 14278 | - if (this.data.tt >= 3 && !document._isProxy) { | |
| 14279 | - assetLoader.loadLumaCanvas(); | |
| 14280 | - } | |
| 14281 | - } | |
| 14282 | - this.canvasContext = this.globalData.canvasContext; | |
| 14283 | - this.transformCanvas = this.globalData.transformCanvas; | |
| 14284 | - this.renderableEffectsManager = new CVEffects(this); | |
| 14285 | - this.searchEffectTransforms(); | |
| 14286 | - }, | |
| 14287 | - createContent: function createContent() {}, | |
| 14288 | - setBlendMode: function setBlendMode() { | |
| 14289 | - var globalData = this.globalData; | |
| 14290 | - if (globalData.blendMode !== this.data.bm) { | |
| 14291 | - globalData.blendMode = this.data.bm; | |
| 14292 | - var blendModeValue = getBlendMode(this.data.bm); | |
| 14293 | - globalData.canvasContext.globalCompositeOperation = blendModeValue; | |
| 14294 | - } | |
| 14295 | - }, | |
| 14296 | - createRenderableComponents: function createRenderableComponents() { | |
| 14297 | - this.maskManager = new CVMaskElement(this.data, this); | |
| 14298 | - this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT); | |
| 14299 | - }, | |
| 14300 | - hideElement: function hideElement() { | |
| 14301 | - if (!this.hidden && (!this.isInRange || this.isTransparent)) { | |
| 14302 | - this.hidden = true; | |
| 14303 | - } | |
| 14304 | - }, | |
| 14305 | - showElement: function showElement() { | |
| 14306 | - if (this.isInRange && !this.isTransparent) { | |
| 14307 | - this.hidden = false; | |
| 14308 | - this._isFirstFrame = true; | |
| 14309 | - this.maskManager._isFirstFrame = true; | |
| 14310 | - } | |
| 14311 | - }, | |
| 14312 | - clearCanvas: function clearCanvas(canvasContext) { | |
| 14313 | - canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy); | |
| 14314 | - }, | |
| 14315 | - prepareLayer: function prepareLayer() { | |
| 14316 | - if (this.data.tt >= 1) { | |
| 14317 | - var buffer = this.buffers[0]; | |
| 14318 | - var bufferCtx = buffer.getContext('2d'); | |
| 14319 | - this.clearCanvas(bufferCtx); | |
| 14320 | - // on the first buffer we store the current state of the global drawing | |
| 14321 | - bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); | |
| 14322 | - // The next four lines are to clear the canvas | |
| 14323 | - // TODO: Check if there is a way to clear the canvas without resetting the transform | |
| 14324 | - this.currentTransform = this.canvasContext.getTransform(); | |
| 14325 | - this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); | |
| 14326 | - this.clearCanvas(this.canvasContext); | |
| 14327 | - this.canvasContext.setTransform(this.currentTransform); | |
| 14328 | - } | |
| 14329 | - }, | |
| 14330 | - exitLayer: function exitLayer() { | |
| 14331 | - if (this.data.tt >= 1) { | |
| 14332 | - var buffer = this.buffers[1]; | |
| 14333 | - // On the second buffer we store the current state of the global drawing | |
| 14334 | - // that only contains the content of this layer | |
| 14335 | - // (if it is a composition, it also includes the nested layers) | |
| 14336 | - var bufferCtx = buffer.getContext('2d'); | |
| 14337 | - this.clearCanvas(bufferCtx); | |
| 14338 | - bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); | |
| 14339 | - // We clear the canvas again | |
| 14340 | - this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); | |
| 14341 | - this.clearCanvas(this.canvasContext); | |
| 14342 | - this.canvasContext.setTransform(this.currentTransform); | |
| 14343 | - // We draw the mask | |
| 14344 | - var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1); | |
| 14345 | - mask.renderFrame(true); | |
| 14346 | - // We draw the second buffer (that contains the content of this layer) | |
| 14347 | - this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); | |
| 14348 | - | |
| 14349 | - // If the mask is a Luma matte, we need to do two extra painting operations | |
| 14350 | - // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error | |
| 14351 | - if (this.data.tt >= 3 && !document._isProxy) { | |
| 14352 | - // We copy the painted mask to a buffer that has a color matrix filter applied to it | |
| 14353 | - // that applies the rgb values to the alpha channel | |
| 14354 | - var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas); | |
| 14355 | - var lumaBufferCtx = lumaBuffer.getContext('2d'); | |
| 14356 | - lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0); | |
| 14357 | - this.clearCanvas(this.canvasContext); | |
| 14358 | - // we repaint the context with the mask applied to it | |
| 14359 | - this.canvasContext.drawImage(lumaBuffer, 0, 0); | |
| 14360 | - } | |
| 14361 | - this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt]; | |
| 14362 | - this.canvasContext.drawImage(buffer, 0, 0); | |
| 14363 | - // We finally draw the first buffer (that contains the content of the global drawing) | |
| 14364 | - // We use destination-over to draw the global drawing below the current layer | |
| 14365 | - this.canvasContext.globalCompositeOperation = 'destination-over'; | |
| 14366 | - this.canvasContext.drawImage(this.buffers[0], 0, 0); | |
| 14367 | - this.canvasContext.setTransform(this.currentTransform); | |
| 14368 | - // We reset the globalCompositeOperation to source-over, the standard type of operation | |
| 14369 | - this.canvasContext.globalCompositeOperation = 'source-over'; | |
| 14370 | - } | |
| 14371 | - }, | |
| 14372 | - renderFrame: function renderFrame(forceRender) { | |
| 14373 | - if (this.hidden || this.data.hd) { | |
| 14374 | - return; | |
| 14375 | - } | |
| 14376 | - if (this.data.td === 1 && !forceRender) { | |
| 14377 | - return; | |
| 14378 | - } | |
| 14379 | - this.renderTransform(); | |
| 14380 | - this.renderRenderable(); | |
| 14381 | - this.renderLocalTransform(); | |
| 14382 | - this.setBlendMode(); | |
| 14383 | - var forceRealStack = this.data.ty === 0; | |
| 14384 | - this.prepareLayer(); | |
| 14385 | - this.globalData.renderer.save(forceRealStack); | |
| 14386 | - this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props); | |
| 14387 | - this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity); | |
| 14388 | - this.renderInnerContent(); | |
| 14389 | - this.globalData.renderer.restore(forceRealStack); | |
| 14390 | - this.exitLayer(); | |
| 14391 | - if (this.maskManager.hasMasks) { | |
| 14392 | - this.globalData.renderer.restore(true); | |
| 14393 | - } | |
| 14394 | - if (this._isFirstFrame) { | |
| 14395 | - this._isFirstFrame = false; | |
| 14396 | - } | |
| 14397 | - }, | |
| 14398 | - destroy: function destroy() { | |
| 14399 | - this.canvasContext = null; | |
| 14400 | - this.data = null; | |
| 14401 | - this.globalData = null; | |
| 14402 | - this.maskManager.destroy(); | |
| 14403 | - }, | |
| 14404 | - mHelper: new Matrix() | |
| 14405 | - }; | |
| 14406 | - CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement; | |
| 14407 | - CVBaseElement.prototype.show = CVBaseElement.prototype.showElement; | |
| 14408 | - | |
| 14409 | - function CVShapeData(element, data, styles, transformsManager) { | |
| 14410 | - this.styledShapes = []; | |
| 14411 | - this.tr = [0, 0, 0, 0, 0, 0]; | |
| 14412 | - var ty = 4; | |
| 14413 | - if (data.ty === 'rc') { | |
| 14414 | - ty = 5; | |
| 14415 | - } else if (data.ty === 'el') { | |
| 14416 | - ty = 6; | |
| 14417 | - } else if (data.ty === 'sr') { | |
| 14418 | - ty = 7; | |
| 14419 | - } | |
| 14420 | - this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element); | |
| 14421 | - var i; | |
| 14422 | - var len = styles.length; | |
| 14423 | - var styledShape; | |
| 14424 | - for (i = 0; i < len; i += 1) { | |
| 14425 | - if (!styles[i].closed) { | |
| 14426 | - styledShape = { | |
| 14427 | - transforms: transformsManager.addTransformSequence(styles[i].transforms), | |
| 14428 | - trNodes: [] | |
| 14429 | - }; | |
| 14430 | - this.styledShapes.push(styledShape); | |
| 14431 | - styles[i].elements.push(styledShape); | |
| 14432 | - } | |
| 14433 | - } | |
| 14434 | - } | |
| 14435 | - CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated; | |
| 14436 | - | |
| 14437 | - function CVShapeElement(data, globalData, comp) { | |
| 14438 | - this.shapes = []; | |
| 14439 | - this.shapesData = data.shapes; | |
| 14440 | - this.stylesList = []; | |
| 14441 | - this.itemsData = []; | |
| 14442 | - this.prevViewData = []; | |
| 14443 | - this.shapeModifiers = []; | |
| 14444 | - this.processedElements = []; | |
| 14445 | - this.transformsManager = new ShapeTransformManager(); | |
| 14446 | - this.initElement(data, globalData, comp); | |
| 14447 | - } | |
| 14448 | - extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement); | |
| 14449 | - CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement; | |
| 14450 | - CVShapeElement.prototype.transformHelper = { | |
| 14451 | - opacity: 1, | |
| 14452 | - _opMdf: false | |
| 14453 | - }; | |
| 14454 | - CVShapeElement.prototype.dashResetter = []; | |
| 14455 | - CVShapeElement.prototype.createContent = function () { | |
| 14456 | - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); | |
| 14457 | - }; | |
| 14458 | - CVShapeElement.prototype.createStyleElement = function (data, transforms) { | |
| 14459 | - var styleElem = { | |
| 14460 | - data: data, | |
| 14461 | - type: data.ty, | |
| 14462 | - preTransforms: this.transformsManager.addTransformSequence(transforms), | |
| 14463 | - transforms: [], | |
| 14464 | - elements: [], | |
| 14465 | - closed: data.hd === true | |
| 14466 | - }; | |
| 14467 | - var elementData = {}; | |
| 14468 | - if (data.ty === 'fl' || data.ty === 'st') { | |
| 14469 | - elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this); | |
| 14470 | - if (!elementData.c.k) { | |
| 14471 | - styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')'; | |
| 14472 | - } | |
| 14473 | - } else if (data.ty === 'gf' || data.ty === 'gs') { | |
| 14474 | - elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this); | |
| 14475 | - elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this); | |
| 14476 | - elementData.h = PropertyFactory.getProp(this, data.h || { | |
| 14477 | - k: 0 | |
| 14478 | - }, 0, 0.01, this); | |
| 14479 | - elementData.a = PropertyFactory.getProp(this, data.a || { | |
| 14480 | - k: 0 | |
| 14481 | - }, 0, degToRads, this); | |
| 14482 | - elementData.g = new GradientProperty(this, data.g, this); | |
| 14483 | - } | |
| 14484 | - elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this); | |
| 14485 | - if (data.ty === 'st' || data.ty === 'gs') { | |
| 14486 | - styleElem.lc = lineCapEnum[data.lc || 2]; | |
| 14487 | - styleElem.lj = lineJoinEnum[data.lj || 2]; | |
| 14488 | - if (data.lj == 1) { | |
| 14489 | - // eslint-disable-line eqeqeq | |
| 14490 | - styleElem.ml = data.ml; | |
| 14491 | - } | |
| 14492 | - elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this); | |
| 14493 | - if (!elementData.w.k) { | |
| 14494 | - styleElem.wi = elementData.w.v; | |
| 14495 | - } | |
| 14496 | - if (data.d) { | |
| 14497 | - var d = new DashProperty(this, data.d, 'canvas', this); | |
| 14498 | - elementData.d = d; | |
| 14499 | - if (!elementData.d.k) { | |
| 14500 | - styleElem.da = elementData.d.dashArray; | |
| 14501 | - styleElem["do"] = elementData.d.dashoffset[0]; | |
| 14502 | - } | |
| 14503 | - } | |
| 14504 | - } else { | |
| 14505 | - styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero'; | |
| 14506 | - } | |
| 14507 | - this.stylesList.push(styleElem); | |
| 14508 | - elementData.style = styleElem; | |
| 14509 | - return elementData; | |
| 14510 | - }; | |
| 14511 | - CVShapeElement.prototype.createGroupElement = function () { | |
| 14512 | - var elementData = { | |
| 14513 | - it: [], | |
| 14514 | - prevViewData: [] | |
| 14515 | - }; | |
| 14516 | - return elementData; | |
| 14517 | - }; | |
| 14518 | - CVShapeElement.prototype.createTransformElement = function (data) { | |
| 14519 | - var elementData = { | |
| 14520 | - transform: { | |
| 14521 | - opacity: 1, | |
| 14522 | - _opMdf: false, | |
| 14523 | - key: this.transformsManager.getNewKey(), | |
| 14524 | - op: PropertyFactory.getProp(this, data.o, 0, 0.01, this), | |
| 14525 | - mProps: TransformPropertyFactory.getTransformProperty(this, data, this) | |
| 14526 | - } | |
| 14527 | - }; | |
| 14528 | - return elementData; | |
| 14529 | - }; | |
| 14530 | - CVShapeElement.prototype.createShapeElement = function (data) { | |
| 14531 | - var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager); | |
| 14532 | - this.shapes.push(elementData); | |
| 14533 | - this.addShapeToModifiers(elementData); | |
| 14534 | - return elementData; | |
| 14535 | - }; | |
| 14536 | - CVShapeElement.prototype.reloadShapes = function () { | |
| 14537 | - this._isFirstFrame = true; | |
| 14538 | - var i; | |
| 14539 | - var len = this.itemsData.length; | |
| 14540 | - for (i = 0; i < len; i += 1) { | |
| 14541 | - this.prevViewData[i] = this.itemsData[i]; | |
| 14542 | - } | |
| 14543 | - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); | |
| 14544 | - len = this.dynamicProperties.length; | |
| 14545 | - for (i = 0; i < len; i += 1) { | |
| 14546 | - this.dynamicProperties[i].getValue(); | |
| 14547 | - } | |
| 14548 | - this.renderModifiers(); | |
| 14549 | - this.transformsManager.processSequences(this._isFirstFrame); | |
| 14550 | - }; | |
| 14551 | - CVShapeElement.prototype.addTransformToStyleList = function (transform) { | |
| 14552 | - var i; | |
| 14553 | - var len = this.stylesList.length; | |
| 14554 | - for (i = 0; i < len; i += 1) { | |
| 14555 | - if (!this.stylesList[i].closed) { | |
| 14556 | - this.stylesList[i].transforms.push(transform); | |
| 14557 | - } | |
| 14558 | - } | |
| 14559 | - }; | |
| 14560 | - CVShapeElement.prototype.removeTransformFromStyleList = function () { | |
| 14561 | - var i; | |
| 14562 | - var len = this.stylesList.length; | |
| 14563 | - for (i = 0; i < len; i += 1) { | |
| 14564 | - if (!this.stylesList[i].closed) { | |
| 14565 | - this.stylesList[i].transforms.pop(); | |
| 14566 | - } | |
| 14567 | - } | |
| 14568 | - }; | |
| 14569 | - CVShapeElement.prototype.closeStyles = function (styles) { | |
| 14570 | - var i; | |
| 14571 | - var len = styles.length; | |
| 14572 | - for (i = 0; i < len; i += 1) { | |
| 14573 | - styles[i].closed = true; | |
| 14574 | - } | |
| 14575 | - }; | |
| 14576 | - CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) { | |
| 14577 | - var i; | |
| 14578 | - var len = arr.length - 1; | |
| 14579 | - var j; | |
| 14580 | - var jLen; | |
| 14581 | - var ownStyles = []; | |
| 14582 | - var ownModifiers = []; | |
| 14583 | - var processedPos; | |
| 14584 | - var modifier; | |
| 14585 | - var currentTransform; | |
| 14586 | - var ownTransforms = [].concat(transforms); | |
| 14587 | - for (i = len; i >= 0; i -= 1) { | |
| 14588 | - processedPos = this.searchProcessedElement(arr[i]); | |
| 14589 | - if (!processedPos) { | |
| 14590 | - arr[i]._shouldRender = shouldRender; | |
| 14591 | - } else { | |
| 14592 | - itemsData[i] = prevViewData[processedPos - 1]; | |
| 14593 | - } | |
| 14594 | - if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') { | |
| 14595 | - if (!processedPos) { | |
| 14596 | - itemsData[i] = this.createStyleElement(arr[i], ownTransforms); | |
| 14597 | - } else { | |
| 14598 | - itemsData[i].style.closed = false; | |
| 14599 | - } | |
| 14600 | - ownStyles.push(itemsData[i].style); | |
| 14601 | - } else if (arr[i].ty === 'gr') { | |
| 14602 | - if (!processedPos) { | |
| 14603 | - itemsData[i] = this.createGroupElement(arr[i]); | |
| 14604 | - } else { | |
| 14605 | - jLen = itemsData[i].it.length; | |
| 14606 | - for (j = 0; j < jLen; j += 1) { | |
| 14607 | - itemsData[i].prevViewData[j] = itemsData[i].it[j]; | |
| 14608 | - } | |
| 14609 | - } | |
| 14610 | - this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms); | |
| 14611 | - } else if (arr[i].ty === 'tr') { | |
| 14612 | - if (!processedPos) { | |
| 14613 | - currentTransform = this.createTransformElement(arr[i]); | |
| 14614 | - itemsData[i] = currentTransform; | |
| 14615 | - } | |
| 14616 | - ownTransforms.push(itemsData[i]); | |
| 14617 | - this.addTransformToStyleList(itemsData[i]); | |
| 14618 | - } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') { | |
| 14619 | - if (!processedPos) { | |
| 14620 | - itemsData[i] = this.createShapeElement(arr[i]); | |
| 14621 | - } | |
| 14622 | - } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') { | |
| 14623 | - if (!processedPos) { | |
| 14624 | - modifier = ShapeModifiers.getModifier(arr[i].ty); | |
| 14625 | - modifier.init(this, arr[i]); | |
| 14626 | - itemsData[i] = modifier; | |
| 14627 | - this.shapeModifiers.push(modifier); | |
| 14628 | - } else { | |
| 14629 | - modifier = itemsData[i]; | |
| 14630 | - modifier.closed = false; | |
| 14631 | - } | |
| 14632 | - ownModifiers.push(modifier); | |
| 14633 | - } else if (arr[i].ty === 'rp') { | |
| 14634 | - if (!processedPos) { | |
| 14635 | - modifier = ShapeModifiers.getModifier(arr[i].ty); | |
| 14636 | - itemsData[i] = modifier; | |
| 14637 | - modifier.init(this, arr, i, itemsData); | |
| 14638 | - this.shapeModifiers.push(modifier); | |
| 14639 | - shouldRender = false; | |
| 14640 | - } else { | |
| 14641 | - modifier = itemsData[i]; | |
| 14642 | - modifier.closed = true; | |
| 14643 | - } | |
| 14644 | - ownModifiers.push(modifier); | |
| 14645 | - } | |
| 14646 | - this.addProcessedElement(arr[i], i + 1); | |
| 14647 | - } | |
| 14648 | - this.removeTransformFromStyleList(); | |
| 14649 | - this.closeStyles(ownStyles); | |
| 14650 | - len = ownModifiers.length; | |
| 14651 | - for (i = 0; i < len; i += 1) { | |
| 14652 | - ownModifiers[i].closed = true; | |
| 14653 | - } | |
| 14654 | - }; | |
| 14655 | - CVShapeElement.prototype.renderInnerContent = function () { | |
| 14656 | - this.transformHelper.opacity = 1; | |
| 14657 | - this.transformHelper._opMdf = false; | |
| 14658 | - this.renderModifiers(); | |
| 14659 | - this.transformsManager.processSequences(this._isFirstFrame); | |
| 14660 | - this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true); | |
| 14661 | - }; | |
| 14662 | - CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) { | |
| 14663 | - if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) { | |
| 14664 | - groupTransform.opacity = parentTransform.opacity; | |
| 14665 | - groupTransform.opacity *= groupTransform.op.v; | |
| 14666 | - groupTransform._opMdf = true; | |
| 14667 | - } | |
| 14668 | - }; | |
| 14669 | - CVShapeElement.prototype.drawLayer = function () { | |
| 14670 | - var i; | |
| 14671 | - var len = this.stylesList.length; | |
| 14672 | - var j; | |
| 14673 | - var jLen; | |
| 14674 | - var k; | |
| 14675 | - var kLen; | |
| 14676 | - var elems; | |
| 14677 | - var nodes; | |
| 14678 | - var renderer = this.globalData.renderer; | |
| 14679 | - var ctx = this.globalData.canvasContext; | |
| 14680 | - var type; | |
| 14681 | - var currentStyle; | |
| 14682 | - for (i = 0; i < len; i += 1) { | |
| 14683 | - currentStyle = this.stylesList[i]; | |
| 14684 | - type = currentStyle.type; | |
| 14685 | - | |
| 14686 | - // Skipping style when | |
| 14687 | - // Stroke width equals 0 | |
| 14688 | - // style should not be rendered (extra unused repeaters) | |
| 14689 | - // current opacity equals 0 | |
| 14690 | - // global opacity equals 0 | |
| 14691 | - if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) { | |
| 14692 | - renderer.save(); | |
| 14693 | - elems = currentStyle.elements; | |
| 14694 | - if (type === 'st' || type === 'gs') { | |
| 14695 | - renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); | |
| 14696 | - // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd; | |
| 14697 | - renderer.ctxLineWidth(currentStyle.wi); | |
| 14698 | - // ctx.lineWidth = currentStyle.wi; | |
| 14699 | - renderer.ctxLineCap(currentStyle.lc); | |
| 14700 | - // ctx.lineCap = currentStyle.lc; | |
| 14701 | - renderer.ctxLineJoin(currentStyle.lj); | |
| 14702 | - // ctx.lineJoin = currentStyle.lj; | |
| 14703 | - renderer.ctxMiterLimit(currentStyle.ml || 0); | |
| 14704 | - // ctx.miterLimit = currentStyle.ml || 0; | |
| 14705 | - } else { | |
| 14706 | - renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); | |
| 14707 | - // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd; | |
| 14708 | - } | |
| 14709 | - renderer.ctxOpacity(currentStyle.coOp); | |
| 14710 | - if (type !== 'st' && type !== 'gs') { | |
| 14711 | - ctx.beginPath(); | |
| 14712 | - } | |
| 14713 | - renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props); | |
| 14714 | - jLen = elems.length; | |
| 14715 | - for (j = 0; j < jLen; j += 1) { | |
| 14716 | - if (type === 'st' || type === 'gs') { | |
| 14717 | - ctx.beginPath(); | |
| 14718 | - if (currentStyle.da) { | |
| 14719 | - ctx.setLineDash(currentStyle.da); | |
| 14720 | - ctx.lineDashOffset = currentStyle["do"]; | |
| 14721 | - } | |
| 14722 | - } | |
| 14723 | - nodes = elems[j].trNodes; | |
| 14724 | - kLen = nodes.length; | |
| 14725 | - for (k = 0; k < kLen; k += 1) { | |
| 14726 | - if (nodes[k].t === 'm') { | |
| 14727 | - ctx.moveTo(nodes[k].p[0], nodes[k].p[1]); | |
| 14728 | - } else if (nodes[k].t === 'c') { | |
| 14729 | - 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]); | |
| 14730 | - } else { | |
| 14731 | - ctx.closePath(); | |
| 14732 | - } | |
| 14733 | - } | |
| 14734 | - if (type === 'st' || type === 'gs') { | |
| 14735 | - // ctx.stroke(); | |
| 14736 | - renderer.ctxStroke(); | |
| 14737 | - if (currentStyle.da) { | |
| 14738 | - ctx.setLineDash(this.dashResetter); | |
| 14739 | - } | |
| 14740 | - } | |
| 14741 | - } | |
| 14742 | - if (type !== 'st' && type !== 'gs') { | |
| 14743 | - // ctx.fill(currentStyle.r); | |
| 14744 | - this.globalData.renderer.ctxFill(currentStyle.r); | |
| 14745 | - } | |
| 14746 | - renderer.restore(); | |
| 14747 | - } | |
| 14748 | - } | |
| 14749 | - }; | |
| 14750 | - CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) { | |
| 14751 | - var i; | |
| 14752 | - var len = items.length - 1; | |
| 14753 | - var groupTransform; | |
| 14754 | - groupTransform = parentTransform; | |
| 14755 | - for (i = len; i >= 0; i -= 1) { | |
| 14756 | - if (items[i].ty === 'tr') { | |
| 14757 | - groupTransform = data[i].transform; | |
| 14758 | - this.renderShapeTransform(parentTransform, groupTransform); | |
| 14759 | - } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') { | |
| 14760 | - this.renderPath(items[i], data[i]); | |
| 14761 | - } else if (items[i].ty === 'fl') { | |
| 14762 | - this.renderFill(items[i], data[i], groupTransform); | |
| 14763 | - } else if (items[i].ty === 'st') { | |
| 14764 | - this.renderStroke(items[i], data[i], groupTransform); | |
| 14765 | - } else if (items[i].ty === 'gf' || items[i].ty === 'gs') { | |
| 14766 | - this.renderGradientFill(items[i], data[i], groupTransform); | |
| 14767 | - } else if (items[i].ty === 'gr') { | |
| 14768 | - this.renderShape(groupTransform, items[i].it, data[i].it); | |
| 14769 | - } else if (items[i].ty === 'tm') { | |
| 14770 | - // | |
| 14771 | - } | |
| 14772 | - } | |
| 14773 | - if (isMain) { | |
| 14774 | - this.drawLayer(); | |
| 14775 | - } | |
| 14776 | - }; | |
| 14777 | - CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) { | |
| 14778 | - if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) { | |
| 14779 | - var shapeNodes = styledShape.trNodes; | |
| 14780 | - var paths = shape.paths; | |
| 14781 | - var i; | |
| 14782 | - var len; | |
| 14783 | - var j; | |
| 14784 | - var jLen = paths._length; | |
| 14785 | - shapeNodes.length = 0; | |
| 14786 | - var groupTransformMat = styledShape.transforms.finalTransform; | |
| 14787 | - for (j = 0; j < jLen; j += 1) { | |
| 14788 | - var pathNodes = paths.shapes[j]; | |
| 14789 | - if (pathNodes && pathNodes.v) { | |
| 14790 | - len = pathNodes._length; | |
| 14791 | - for (i = 1; i < len; i += 1) { | |
| 14792 | - if (i === 1) { | |
| 14793 | - shapeNodes.push({ | |
| 14794 | - t: 'm', | |
| 14795 | - p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) | |
| 14796 | - }); | |
| 14797 | - } | |
| 14798 | - shapeNodes.push({ | |
| 14799 | - t: 'c', | |
| 14800 | - pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]) | |
| 14801 | - }); | |
| 14802 | - } | |
| 14803 | - if (len === 1) { | |
| 14804 | - shapeNodes.push({ | |
| 14805 | - t: 'm', | |
| 14806 | - p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) | |
| 14807 | - }); | |
| 14808 | - } | |
| 14809 | - if (pathNodes.c && len) { | |
| 14810 | - shapeNodes.push({ | |
| 14811 | - t: 'c', | |
| 14812 | - pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]) | |
| 14813 | - }); | |
| 14814 | - shapeNodes.push({ | |
| 14815 | - t: 'z' | |
| 14816 | - }); | |
| 14817 | - } | |
| 14818 | - } | |
| 14819 | - } | |
| 14820 | - styledShape.trNodes = shapeNodes; | |
| 14821 | - } | |
| 14822 | - }; | |
| 14823 | - CVShapeElement.prototype.renderPath = function (pathData, itemData) { | |
| 14824 | - if (pathData.hd !== true && pathData._shouldRender) { | |
| 14825 | - var i; | |
| 14826 | - var len = itemData.styledShapes.length; | |
| 14827 | - for (i = 0; i < len; i += 1) { | |
| 14828 | - this.renderStyledShape(itemData.styledShapes[i], itemData.sh); | |
| 14829 | - } | |
| 14830 | - } | |
| 14831 | - }; | |
| 14832 | - CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) { | |
| 14833 | - var styleElem = itemData.style; | |
| 14834 | - if (itemData.c._mdf || this._isFirstFrame) { | |
| 14835 | - styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'; | |
| 14836 | - } | |
| 14837 | - if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) { | |
| 14838 | - styleElem.coOp = itemData.o.v * groupTransform.opacity; | |
| 14839 | - } | |
| 14840 | - }; | |
| 14841 | - CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) { | |
| 14842 | - var styleElem = itemData.style; | |
| 14843 | - var grd; | |
| 14844 | - if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) { | |
| 14845 | - var ctx = this.globalData.canvasContext; | |
| 14846 | - var pt1 = itemData.s.v; | |
| 14847 | - var pt2 = itemData.e.v; | |
| 14848 | - if (styleData.t === 1) { | |
| 14849 | - grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]); | |
| 14850 | - } else { | |
| 14851 | - var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); | |
| 14852 | - var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); | |
| 14853 | - var percent = itemData.h.v; | |
| 14854 | - if (percent >= 1) { | |
| 14855 | - percent = 0.99; | |
| 14856 | - } else if (percent <= -1) { | |
| 14857 | - percent = -0.99; | |
| 14858 | - } | |
| 14859 | - var dist = rad * percent; | |
| 14860 | - var x = Math.cos(ang + itemData.a.v) * dist + pt1[0]; | |
| 14861 | - var y = Math.sin(ang + itemData.a.v) * dist + pt1[1]; | |
| 14862 | - grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad); | |
| 14863 | - } | |
| 14864 | - var i; | |
| 14865 | - var len = styleData.g.p; | |
| 14866 | - var cValues = itemData.g.c; | |
| 14867 | - var opacity = 1; | |
| 14868 | - for (i = 0; i < len; i += 1) { | |
| 14869 | - if (itemData.g._hasOpacity && itemData.g._collapsable) { | |
| 14870 | - opacity = itemData.g.o[i * 2 + 1]; | |
| 14871 | - } | |
| 14872 | - grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')'); | |
| 14873 | - } | |
| 14874 | - styleElem.grd = grd; | |
| 14875 | - } | |
| 14876 | - styleElem.coOp = itemData.o.v * groupTransform.opacity; | |
| 14877 | - }; | |
| 14878 | - CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) { | |
| 14879 | - var styleElem = itemData.style; | |
| 14880 | - var d = itemData.d; | |
| 14881 | - if (d && (d._mdf || this._isFirstFrame)) { | |
| 14882 | - styleElem.da = d.dashArray; | |
| 14883 | - styleElem["do"] = d.dashoffset[0]; | |
| 14884 | - } | |
| 14885 | - if (itemData.c._mdf || this._isFirstFrame) { | |
| 14886 | - styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'; | |
| 14887 | - } | |
| 14888 | - if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) { | |
| 14889 | - styleElem.coOp = itemData.o.v * groupTransform.opacity; | |
| 14890 | - } | |
| 14891 | - if (itemData.w._mdf || this._isFirstFrame) { | |
| 14892 | - styleElem.wi = itemData.w.v; | |
| 14893 | - } | |
| 14894 | - }; | |
| 14895 | - CVShapeElement.prototype.destroy = function () { | |
| 14896 | - this.shapesData = null; | |
| 14897 | - this.globalData = null; | |
| 14898 | - this.canvasContext = null; | |
| 14899 | - this.stylesList.length = 0; | |
| 14900 | - this.itemsData.length = 0; | |
| 14901 | - }; | |
| 14902 | - | |
| 14903 | - function CVTextElement(data, globalData, comp) { | |
| 14904 | - this.textSpans = []; | |
| 14905 | - this.yOffset = 0; | |
| 14906 | - this.fillColorAnim = false; | |
| 14907 | - this.strokeColorAnim = false; | |
| 14908 | - this.strokeWidthAnim = false; | |
| 14909 | - this.stroke = false; | |
| 14910 | - this.fill = false; | |
| 14911 | - this.justifyOffset = 0; | |
| 14912 | - this.currentRender = null; | |
| 14913 | - this.renderType = 'canvas'; | |
| 14914 | - this.values = { | |
| 14915 | - fill: 'rgba(0,0,0,0)', | |
| 14916 | - stroke: 'rgba(0,0,0,0)', | |
| 14917 | - sWidth: 0, | |
| 14918 | - fValue: '' | |
| 14919 | - }; | |
| 14920 | - this.initElement(data, globalData, comp); | |
| 14921 | - } | |
| 14922 | - extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement); | |
| 14923 | - CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d'); | |
| 14924 | - CVTextElement.prototype.buildNewText = function () { | |
| 14925 | - var documentData = this.textProperty.currentData; | |
| 14926 | - this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); | |
| 14927 | - var hasFill = false; | |
| 14928 | - if (documentData.fc) { | |
| 14929 | - hasFill = true; | |
| 14930 | - this.values.fill = this.buildColor(documentData.fc); | |
| 14931 | - } else { | |
| 14932 | - this.values.fill = 'rgba(0,0,0,0)'; | |
| 14933 | - } | |
| 14934 | - this.fill = hasFill; | |
| 14935 | - var hasStroke = false; | |
| 14936 | - if (documentData.sc) { | |
| 14937 | - hasStroke = true; | |
| 14938 | - this.values.stroke = this.buildColor(documentData.sc); | |
| 14939 | - this.values.sWidth = documentData.sw; | |
| 14940 | - } | |
| 14941 | - var fontData = this.globalData.fontManager.getFontByName(documentData.f); | |
| 14942 | - var i; | |
| 14943 | - var len; | |
| 14944 | - var letters = documentData.l; | |
| 14945 | - var matrixHelper = this.mHelper; | |
| 14946 | - this.stroke = hasStroke; | |
| 14947 | - this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily; | |
| 14948 | - len = documentData.finalText.length; | |
| 14949 | - // this.tHelper.font = this.values.fValue; | |
| 14950 | - var charData; | |
| 14951 | - var shapeData; | |
| 14952 | - var k; | |
| 14953 | - var kLen; | |
| 14954 | - var shapes; | |
| 14955 | - var j; | |
| 14956 | - var jLen; | |
| 14957 | - var pathNodes; | |
| 14958 | - var commands; | |
| 14959 | - var pathArr; | |
| 14960 | - var singleShape = this.data.singleShape; | |
| 14961 | - var trackingOffset = documentData.tr * 0.001 * documentData.finalSize; | |
| 14962 | - var xPos = 0; | |
| 14963 | - var yPos = 0; | |
| 14964 | - var firstLine = true; | |
| 14965 | - var cnt = 0; | |
| 14966 | - for (i = 0; i < len; i += 1) { | |
| 14967 | - charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); | |
| 14968 | - shapeData = charData && charData.data || {}; | |
| 14969 | - matrixHelper.reset(); | |
| 14970 | - if (singleShape && letters[i].n) { | |
| 14971 | - xPos = -trackingOffset; | |
| 14972 | - yPos += documentData.yOffset; | |
| 14973 | - yPos += firstLine ? 1 : 0; | |
| 14974 | - firstLine = false; | |
| 14975 | - } | |
| 14976 | - shapes = shapeData.shapes ? shapeData.shapes[0].it : []; | |
| 14977 | - jLen = shapes.length; | |
| 14978 | - matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); | |
| 14979 | - if (singleShape) { | |
| 14980 | - this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); | |
| 14981 | - } | |
| 14982 | - commands = createSizedArray(jLen - 1); | |
| 14983 | - var commandsCounter = 0; | |
| 14984 | - for (j = 0; j < jLen; j += 1) { | |
| 14985 | - if (shapes[j].ty === 'sh') { | |
| 14986 | - kLen = shapes[j].ks.k.i.length; | |
| 14987 | - pathNodes = shapes[j].ks.k; | |
| 14988 | - pathArr = []; | |
| 14989 | - for (k = 1; k < kLen; k += 1) { | |
| 14990 | - if (k === 1) { | |
| 14991 | - pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)); | |
| 14992 | - } | |
| 14993 | - 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)); | |
| 14994 | - } | |
| 14995 | - 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)); | |
| 14996 | - commands[commandsCounter] = pathArr; | |
| 14997 | - commandsCounter += 1; | |
| 14998 | - } | |
| 14999 | - } | |
| 15000 | - if (singleShape) { | |
| 15001 | - xPos += letters[i].l; | |
| 15002 | - xPos += trackingOffset; | |
| 15003 | - } | |
| 15004 | - if (this.textSpans[cnt]) { | |
| 15005 | - this.textSpans[cnt].elem = commands; | |
| 15006 | - } else { | |
| 15007 | - this.textSpans[cnt] = { | |
| 15008 | - elem: commands | |
| 15009 | - }; | |
| 15010 | - } | |
| 15011 | - cnt += 1; | |
| 15012 | - } | |
| 15013 | - }; | |
| 15014 | - CVTextElement.prototype.renderInnerContent = function () { | |
| 15015 | - this.validateText(); | |
| 15016 | - var ctx = this.canvasContext; | |
| 15017 | - ctx.font = this.values.fValue; | |
| 15018 | - this.globalData.renderer.ctxLineCap('butt'); | |
| 15019 | - // ctx.lineCap = 'butt'; | |
| 15020 | - this.globalData.renderer.ctxLineJoin('miter'); | |
| 15021 | - // ctx.lineJoin = 'miter'; | |
| 15022 | - this.globalData.renderer.ctxMiterLimit(4); | |
| 15023 | - // ctx.miterLimit = 4; | |
| 15024 | - | |
| 15025 | - if (!this.data.singleShape) { | |
| 15026 | - this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); | |
| 15027 | - } | |
| 15028 | - var i; | |
| 15029 | - var len; | |
| 15030 | - var j; | |
| 15031 | - var jLen; | |
| 15032 | - var k; | |
| 15033 | - var kLen; | |
| 15034 | - var renderedLetters = this.textAnimator.renderedLetters; | |
| 15035 | - var letters = this.textProperty.currentData.l; | |
| 15036 | - len = letters.length; | |
| 15037 | - var renderedLetter; | |
| 15038 | - var lastFill = null; | |
| 15039 | - var lastStroke = null; | |
| 15040 | - var lastStrokeW = null; | |
| 15041 | - var commands; | |
| 15042 | - var pathArr; | |
| 15043 | - var renderer = this.globalData.renderer; | |
| 15044 | - for (i = 0; i < len; i += 1) { | |
| 15045 | - if (!letters[i].n) { | |
| 15046 | - renderedLetter = renderedLetters[i]; | |
| 15047 | - if (renderedLetter) { | |
| 15048 | - renderer.save(); | |
| 15049 | - renderer.ctxTransform(renderedLetter.p); | |
| 15050 | - renderer.ctxOpacity(renderedLetter.o); | |
| 15051 | - } | |
| 15052 | - if (this.fill) { | |
| 15053 | - if (renderedLetter && renderedLetter.fc) { | |
| 15054 | - if (lastFill !== renderedLetter.fc) { | |
| 15055 | - renderer.ctxFillStyle(renderedLetter.fc); | |
| 15056 | - lastFill = renderedLetter.fc; | |
| 15057 | - // ctx.fillStyle = renderedLetter.fc; | |
| 15058 | - } | |
| 15059 | - } else if (lastFill !== this.values.fill) { | |
| 15060 | - lastFill = this.values.fill; | |
| 15061 | - renderer.ctxFillStyle(this.values.fill); | |
| 15062 | - // ctx.fillStyle = this.values.fill; | |
| 15063 | - } | |
| 15064 | - commands = this.textSpans[i].elem; | |
| 15065 | - jLen = commands.length; | |
| 15066 | - this.globalData.canvasContext.beginPath(); | |
| 15067 | - for (j = 0; j < jLen; j += 1) { | |
| 15068 | - pathArr = commands[j]; | |
| 15069 | - kLen = pathArr.length; | |
| 15070 | - this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); | |
| 15071 | - for (k = 2; k < kLen; k += 6) { | |
| 15072 | - this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]); | |
| 15073 | - } | |
| 15074 | - } | |
| 15075 | - this.globalData.canvasContext.closePath(); | |
| 15076 | - renderer.ctxFill(); | |
| 15077 | - // this.globalData.canvasContext.fill(); | |
| 15078 | - /// ctx.fillText(this.textSpans[i].val,0,0); | |
| 15079 | - } | |
| 15080 | - if (this.stroke) { | |
| 15081 | - if (renderedLetter && renderedLetter.sw) { | |
| 15082 | - if (lastStrokeW !== renderedLetter.sw) { | |
| 15083 | - lastStrokeW = renderedLetter.sw; | |
| 15084 | - renderer.ctxLineWidth(renderedLetter.sw); | |
| 15085 | - // ctx.lineWidth = renderedLetter.sw; | |
| 15086 | - } | |
| 15087 | - } else if (lastStrokeW !== this.values.sWidth) { | |
| 15088 | - lastStrokeW = this.values.sWidth; | |
| 15089 | - renderer.ctxLineWidth(this.values.sWidth); | |
| 15090 | - // ctx.lineWidth = this.values.sWidth; | |
| 15091 | - } | |
| 15092 | - if (renderedLetter && renderedLetter.sc) { | |
| 15093 | - if (lastStroke !== renderedLetter.sc) { | |
| 15094 | - lastStroke = renderedLetter.sc; | |
| 15095 | - renderer.ctxStrokeStyle(renderedLetter.sc); | |
| 15096 | - // ctx.strokeStyle = renderedLetter.sc; | |
| 15097 | - } | |
| 15098 | - } else if (lastStroke !== this.values.stroke) { | |
| 15099 | - lastStroke = this.values.stroke; | |
| 15100 | - renderer.ctxStrokeStyle(this.values.stroke); | |
| 15101 | - // ctx.strokeStyle = this.values.stroke; | |
| 15102 | - } | |
| 15103 | - commands = this.textSpans[i].elem; | |
| 15104 | - jLen = commands.length; | |
| 15105 | - this.globalData.canvasContext.beginPath(); | |
| 15106 | - for (j = 0; j < jLen; j += 1) { | |
| 15107 | - pathArr = commands[j]; | |
| 15108 | - kLen = pathArr.length; | |
| 15109 | - this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); | |
| 15110 | - for (k = 2; k < kLen; k += 6) { | |
| 15111 | - this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]); | |
| 15112 | - } | |
| 15113 | - } | |
| 15114 | - this.globalData.canvasContext.closePath(); | |
| 15115 | - renderer.ctxStroke(); | |
| 15116 | - // this.globalData.canvasContext.stroke(); | |
| 15117 | - /// ctx.strokeText(letters[i].val,0,0); | |
| 15118 | - } | |
| 15119 | - if (renderedLetter) { | |
| 15120 | - this.globalData.renderer.restore(); | |
| 15121 | - } | |
| 15122 | - } | |
| 15123 | - } | |
| 15124 | - }; | |
| 15125 | - | |
| 15126 | - function CVImageElement(data, globalData, comp) { | |
| 15127 | - this.assetData = globalData.getAssetData(data.refId); | |
| 15128 | - this.img = globalData.imageLoader.getAsset(this.assetData); | |
| 15129 | - this.initElement(data, globalData, comp); | |
| 15130 | - } | |
| 15131 | - extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement); | |
| 15132 | - CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement; | |
| 15133 | - CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; | |
| 15134 | - CVImageElement.prototype.createContent = function () { | |
| 15135 | - if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) { | |
| 15136 | - var canvas = createTag('canvas'); | |
| 15137 | - canvas.width = this.assetData.w; | |
| 15138 | - canvas.height = this.assetData.h; | |
| 15139 | - var ctx = canvas.getContext('2d'); | |
| 15140 | - var imgW = this.img.width; | |
| 15141 | - var imgH = this.img.height; | |
| 15142 | - var imgRel = imgW / imgH; | |
| 15143 | - var canvasRel = this.assetData.w / this.assetData.h; | |
| 15144 | - var widthCrop; | |
| 15145 | - var heightCrop; | |
| 15146 | - var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio; | |
| 15147 | - if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') { | |
| 15148 | - heightCrop = imgH; | |
| 15149 | - widthCrop = heightCrop * canvasRel; | |
| 15150 | - } else { | |
| 15151 | - widthCrop = imgW; | |
| 15152 | - heightCrop = widthCrop / canvasRel; | |
| 15153 | - } | |
| 15154 | - ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h); | |
| 15155 | - this.img = canvas; | |
| 15156 | - } | |
| 15157 | - }; | |
| 15158 | - CVImageElement.prototype.renderInnerContent = function () { | |
| 15159 | - this.canvasContext.drawImage(this.img, 0, 0); | |
| 15160 | - }; | |
| 15161 | - CVImageElement.prototype.destroy = function () { | |
| 15162 | - this.img = null; | |
| 15163 | - }; | |
| 15164 | - | |
| 15165 | - function CVSolidElement(data, globalData, comp) { | |
| 15166 | - this.initElement(data, globalData, comp); | |
| 15167 | - } | |
| 15168 | - extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement); | |
| 15169 | - CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement; | |
| 15170 | - CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; | |
| 15171 | - CVSolidElement.prototype.renderInnerContent = function () { | |
| 15172 | - // var ctx = this.canvasContext; | |
| 15173 | - this.globalData.renderer.ctxFillStyle(this.data.sc); | |
| 15174 | - // ctx.fillStyle = this.data.sc; | |
| 15175 | - this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); | |
| 15176 | - // ctx.fillRect(0, 0, this.data.sw, this.data.sh); | |
| 15177 | - // | |
| 15178 | - }; | |
| 15179 | - | |
| 15180 | - function CanvasRendererBase() {} | |
| 15181 | - extendPrototype([BaseRenderer], CanvasRendererBase); | |
| 15182 | - CanvasRendererBase.prototype.createShape = function (data) { | |
| 15183 | - return new CVShapeElement(data, this.globalData, this); | |
| 15184 | - }; | |
| 15185 | - CanvasRendererBase.prototype.createText = function (data) { | |
| 15186 | - return new CVTextElement(data, this.globalData, this); | |
| 15187 | - }; | |
| 15188 | - CanvasRendererBase.prototype.createImage = function (data) { | |
| 15189 | - return new CVImageElement(data, this.globalData, this); | |
| 15190 | - }; | |
| 15191 | - CanvasRendererBase.prototype.createSolid = function (data) { | |
| 15192 | - return new CVSolidElement(data, this.globalData, this); | |
| 15193 | - }; | |
| 15194 | - CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; | |
| 15195 | - CanvasRendererBase.prototype.ctxTransform = function (props) { | |
| 15196 | - if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) { | |
| 15197 | - return; | |
| 15198 | - } | |
| 15199 | - this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]); | |
| 15200 | - }; | |
| 15201 | - CanvasRendererBase.prototype.ctxOpacity = function (op) { | |
| 15202 | - this.canvasContext.globalAlpha *= op < 0 ? 0 : op; | |
| 15203 | - }; | |
| 15204 | - CanvasRendererBase.prototype.ctxFillStyle = function (value) { | |
| 15205 | - this.canvasContext.fillStyle = value; | |
| 15206 | - }; | |
| 15207 | - CanvasRendererBase.prototype.ctxStrokeStyle = function (value) { | |
| 15208 | - this.canvasContext.strokeStyle = value; | |
| 15209 | - }; | |
| 15210 | - CanvasRendererBase.prototype.ctxLineWidth = function (value) { | |
| 15211 | - this.canvasContext.lineWidth = value; | |
| 15212 | - }; | |
| 15213 | - CanvasRendererBase.prototype.ctxLineCap = function (value) { | |
| 15214 | - this.canvasContext.lineCap = value; | |
| 15215 | - }; | |
| 15216 | - CanvasRendererBase.prototype.ctxLineJoin = function (value) { | |
| 15217 | - this.canvasContext.lineJoin = value; | |
| 15218 | - }; | |
| 15219 | - CanvasRendererBase.prototype.ctxMiterLimit = function (value) { | |
| 15220 | - this.canvasContext.miterLimit = value; | |
| 15221 | - }; | |
| 15222 | - CanvasRendererBase.prototype.ctxFill = function (rule) { | |
| 15223 | - this.canvasContext.fill(rule); | |
| 15224 | - }; | |
| 15225 | - CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) { | |
| 15226 | - this.canvasContext.fillRect(x, y, w, h); | |
| 15227 | - }; | |
| 15228 | - CanvasRendererBase.prototype.ctxStroke = function () { | |
| 15229 | - this.canvasContext.stroke(); | |
| 15230 | - }; | |
| 15231 | - CanvasRendererBase.prototype.reset = function () { | |
| 15232 | - if (!this.renderConfig.clearCanvas) { | |
| 15233 | - this.canvasContext.restore(); | |
| 15234 | - return; | |
| 15235 | - } | |
| 15236 | - this.contextData.reset(); | |
| 15237 | - }; | |
| 15238 | - CanvasRendererBase.prototype.save = function () { | |
| 15239 | - this.canvasContext.save(); | |
| 15240 | - }; | |
| 15241 | - CanvasRendererBase.prototype.restore = function (actionFlag) { | |
| 15242 | - if (!this.renderConfig.clearCanvas) { | |
| 15243 | - this.canvasContext.restore(); | |
| 15244 | - return; | |
| 15245 | - } | |
| 15246 | - if (actionFlag) { | |
| 15247 | - this.globalData.blendMode = 'source-over'; | |
| 15248 | - } | |
| 15249 | - this.contextData.restore(actionFlag); | |
| 15250 | - }; | |
| 15251 | - CanvasRendererBase.prototype.configAnimation = function (animData) { | |
| 15252 | - if (this.animationItem.wrapper) { | |
| 15253 | - this.animationItem.container = createTag('canvas'); | |
| 15254 | - var containerStyle = this.animationItem.container.style; | |
| 15255 | - containerStyle.width = '100%'; | |
| 15256 | - containerStyle.height = '100%'; | |
| 15257 | - var origin = '0px 0px 0px'; | |
| 15258 | - containerStyle.transformOrigin = origin; | |
| 15259 | - containerStyle.mozTransformOrigin = origin; | |
| 15260 | - containerStyle.webkitTransformOrigin = origin; | |
| 15261 | - containerStyle['-webkit-transform'] = origin; | |
| 15262 | - containerStyle.contentVisibility = this.renderConfig.contentVisibility; | |
| 15263 | - this.animationItem.wrapper.appendChild(this.animationItem.container); | |
| 15264 | - this.canvasContext = this.animationItem.container.getContext('2d'); | |
| 15265 | - if (this.renderConfig.className) { | |
| 15266 | - this.animationItem.container.setAttribute('class', this.renderConfig.className); | |
| 15267 | - } | |
| 15268 | - if (this.renderConfig.id) { | |
| 15269 | - this.animationItem.container.setAttribute('id', this.renderConfig.id); | |
| 15270 | - } | |
| 15271 | - } else { | |
| 15272 | - this.canvasContext = this.renderConfig.context; | |
| 15273 | - } | |
| 15274 | - this.contextData.setContext(this.canvasContext); | |
| 15275 | - this.data = animData; | |
| 15276 | - this.layers = animData.layers; | |
| 15277 | - this.transformCanvas = { | |
| 15278 | - w: animData.w, | |
| 15279 | - h: animData.h, | |
| 15280 | - sx: 0, | |
| 15281 | - sy: 0, | |
| 15282 | - tx: 0, | |
| 15283 | - ty: 0 | |
| 15284 | - }; | |
| 15285 | - this.setupGlobalData(animData, document.body); | |
| 15286 | - this.globalData.canvasContext = this.canvasContext; | |
| 15287 | - this.globalData.renderer = this; | |
| 15288 | - this.globalData.isDashed = false; | |
| 15289 | - this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; | |
| 15290 | - this.globalData.transformCanvas = this.transformCanvas; | |
| 15291 | - this.elements = createSizedArray(animData.layers.length); | |
| 15292 | - this.updateContainerSize(); | |
| 15293 | - }; | |
| 15294 | - CanvasRendererBase.prototype.updateContainerSize = function (width, height) { | |
| 15295 | - this.reset(); | |
| 15296 | - var elementWidth; | |
| 15297 | - var elementHeight; | |
| 15298 | - if (width) { | |
| 15299 | - elementWidth = width; | |
| 15300 | - elementHeight = height; | |
| 15301 | - this.canvasContext.canvas.width = elementWidth; | |
| 15302 | - this.canvasContext.canvas.height = elementHeight; | |
| 15303 | - } else { | |
| 15304 | - if (this.animationItem.wrapper && this.animationItem.container) { | |
| 15305 | - elementWidth = this.animationItem.wrapper.offsetWidth; | |
| 15306 | - elementHeight = this.animationItem.wrapper.offsetHeight; | |
| 15307 | - } else { | |
| 15308 | - elementWidth = this.canvasContext.canvas.width; | |
| 15309 | - elementHeight = this.canvasContext.canvas.height; | |
| 15310 | - } | |
| 15311 | - this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr; | |
| 15312 | - this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr; | |
| 15313 | - } | |
| 15314 | - var elementRel; | |
| 15315 | - var animationRel; | |
| 15316 | - if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) { | |
| 15317 | - var par = this.renderConfig.preserveAspectRatio.split(' '); | |
| 15318 | - var fillType = par[1] || 'meet'; | |
| 15319 | - var pos = par[0] || 'xMidYMid'; | |
| 15320 | - var xPos = pos.substr(0, 4); | |
| 15321 | - var yPos = pos.substr(4); | |
| 15322 | - elementRel = elementWidth / elementHeight; | |
| 15323 | - animationRel = this.transformCanvas.w / this.transformCanvas.h; | |
| 15324 | - if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') { | |
| 15325 | - this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); | |
| 15326 | - this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); | |
| 15327 | - } else { | |
| 15328 | - this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); | |
| 15329 | - this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); | |
| 15330 | - } | |
| 15331 | - if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) { | |
| 15332 | - this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr; | |
| 15333 | - } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) { | |
| 15334 | - this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr; | |
| 15335 | - } else { | |
| 15336 | - this.transformCanvas.tx = 0; | |
| 15337 | - } | |
| 15338 | - if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) { | |
| 15339 | - this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr; | |
| 15340 | - } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) { | |
| 15341 | - this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr; | |
| 15342 | - } else { | |
| 15343 | - this.transformCanvas.ty = 0; | |
| 15344 | - } | |
| 15345 | - } else if (this.renderConfig.preserveAspectRatio === 'none') { | |
| 15346 | - this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); | |
| 15347 | - this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); | |
| 15348 | - this.transformCanvas.tx = 0; | |
| 15349 | - this.transformCanvas.ty = 0; | |
| 15350 | - } else { | |
| 15351 | - this.transformCanvas.sx = this.renderConfig.dpr; | |
| 15352 | - this.transformCanvas.sy = this.renderConfig.dpr; | |
| 15353 | - this.transformCanvas.tx = 0; | |
| 15354 | - this.transformCanvas.ty = 0; | |
| 15355 | - } | |
| 15356 | - 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]; | |
| 15357 | - /* var i, len = this.elements.length; | |
| 15358 | - for(i=0;i<len;i+=1){ | |
| 15359 | - if(this.elements[i] && this.elements[i].data.ty === 0){ | |
| 15360 | - this.elements[i].resize(this.globalData.transformCanvas); | |
| 15361 | - } | |
| 15362 | - } */ | |
| 15363 | - this.ctxTransform(this.transformCanvas.props); | |
| 15364 | - this.canvasContext.beginPath(); | |
| 15365 | - this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h); | |
| 15366 | - this.canvasContext.closePath(); | |
| 15367 | - this.canvasContext.clip(); | |
| 15368 | - this.renderFrame(this.renderedFrame, true); | |
| 15369 | - }; | |
| 15370 | - CanvasRendererBase.prototype.destroy = function () { | |
| 15371 | - if (this.renderConfig.clearCanvas && this.animationItem.wrapper) { | |
| 15372 | - this.animationItem.wrapper.innerText = ''; | |
| 15373 | - } | |
| 15374 | - var i; | |
| 15375 | - var len = this.layers ? this.layers.length : 0; | |
| 15376 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 15377 | - if (this.elements[i] && this.elements[i].destroy) { | |
| 15378 | - this.elements[i].destroy(); | |
| 15379 | - } | |
| 15380 | - } | |
| 15381 | - this.elements.length = 0; | |
| 15382 | - this.globalData.canvasContext = null; | |
| 15383 | - this.animationItem.container = null; | |
| 15384 | - this.destroyed = true; | |
| 15385 | - }; | |
| 15386 | - CanvasRendererBase.prototype.renderFrame = function (num, forceRender) { | |
| 15387 | - if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) { | |
| 15388 | - return; | |
| 15389 | - } | |
| 15390 | - this.renderedFrame = num; | |
| 15391 | - this.globalData.frameNum = num - this.animationItem._isFirstFrame; | |
| 15392 | - this.globalData.frameId += 1; | |
| 15393 | - this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender; | |
| 15394 | - this.globalData.projectInterface.currentFrame = num; | |
| 15395 | - | |
| 15396 | - // console.log('--------'); | |
| 15397 | - // console.log('NEW: ',num); | |
| 15398 | - var i; | |
| 15399 | - var len = this.layers.length; | |
| 15400 | - if (!this.completeLayers) { | |
| 15401 | - this.checkLayers(num); | |
| 15402 | - } | |
| 15403 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 15404 | - if (this.completeLayers || this.elements[i]) { | |
| 15405 | - this.elements[i].prepareFrame(num - this.layers[i].st); | |
| 15406 | - } | |
| 15407 | - } | |
| 15408 | - if (this.globalData._mdf) { | |
| 15409 | - if (this.renderConfig.clearCanvas === true) { | |
| 15410 | - this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h); | |
| 15411 | - } else { | |
| 15412 | - this.save(); | |
| 15413 | - } | |
| 15414 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 15415 | - if (this.completeLayers || this.elements[i]) { | |
| 15416 | - this.elements[i].renderFrame(); | |
| 15417 | - } | |
| 15418 | - } | |
| 15419 | - if (this.renderConfig.clearCanvas !== true) { | |
| 15420 | - this.restore(); | |
| 15421 | - } | |
| 15422 | - } | |
| 15423 | - }; | |
| 15424 | - CanvasRendererBase.prototype.buildItem = function (pos) { | |
| 15425 | - var elements = this.elements; | |
| 15426 | - if (elements[pos] || this.layers[pos].ty === 99) { | |
| 15427 | - return; | |
| 15428 | - } | |
| 15429 | - var element = this.createItem(this.layers[pos], this, this.globalData); | |
| 15430 | - elements[pos] = element; | |
| 15431 | - element.initExpressions(); | |
| 15432 | - /* if(this.layers[pos].ty === 0){ | |
| 15433 | - element.resize(this.globalData.transformCanvas); | |
| 15434 | - } */ | |
| 15435 | - }; | |
| 15436 | - CanvasRendererBase.prototype.checkPendingElements = function () { | |
| 15437 | - while (this.pendingElements.length) { | |
| 15438 | - var element = this.pendingElements.pop(); | |
| 15439 | - element.checkParenting(); | |
| 15440 | - } | |
| 15441 | - }; | |
| 15442 | - CanvasRendererBase.prototype.hide = function () { | |
| 15443 | - this.animationItem.container.style.display = 'none'; | |
| 15444 | - }; | |
| 15445 | - CanvasRendererBase.prototype.show = function () { | |
| 15446 | - this.animationItem.container.style.display = 'block'; | |
| 15447 | - }; | |
| 15448 | - | |
| 15449 | - function CanvasContext() { | |
| 15450 | - this.opacity = -1; | |
| 15451 | - this.transform = createTypedArray('float32', 16); | |
| 15452 | - this.fillStyle = ''; | |
| 15453 | - this.strokeStyle = ''; | |
| 15454 | - this.lineWidth = ''; | |
| 15455 | - this.lineCap = ''; | |
| 15456 | - this.lineJoin = ''; | |
| 15457 | - this.miterLimit = ''; | |
| 15458 | - this.id = Math.random(); | |
| 15459 | - } | |
| 15460 | - function CVContextData() { | |
| 15461 | - this.stack = []; | |
| 15462 | - this.cArrPos = 0; | |
| 15463 | - this.cTr = new Matrix(); | |
| 15464 | - var i; | |
| 15465 | - var len = 15; | |
| 15466 | - for (i = 0; i < len; i += 1) { | |
| 15467 | - var canvasContext = new CanvasContext(); | |
| 15468 | - this.stack[i] = canvasContext; | |
| 15469 | - } | |
| 15470 | - this._length = len; | |
| 15471 | - this.nativeContext = null; | |
| 15472 | - this.transformMat = new Matrix(); | |
| 15473 | - this.currentOpacity = 1; | |
| 15474 | - // | |
| 15475 | - this.currentFillStyle = ''; | |
| 15476 | - this.appliedFillStyle = ''; | |
| 15477 | - // | |
| 15478 | - this.currentStrokeStyle = ''; | |
| 15479 | - this.appliedStrokeStyle = ''; | |
| 15480 | - // | |
| 15481 | - this.currentLineWidth = ''; | |
| 15482 | - this.appliedLineWidth = ''; | |
| 15483 | - // | |
| 15484 | - this.currentLineCap = ''; | |
| 15485 | - this.appliedLineCap = ''; | |
| 15486 | - // | |
| 15487 | - this.currentLineJoin = ''; | |
| 15488 | - this.appliedLineJoin = ''; | |
| 15489 | - // | |
| 15490 | - this.appliedMiterLimit = ''; | |
| 15491 | - this.currentMiterLimit = ''; | |
| 15492 | - } | |
| 15493 | - CVContextData.prototype.duplicate = function () { | |
| 15494 | - var newLength = this._length * 2; | |
| 15495 | - var i = 0; | |
| 15496 | - for (i = this._length; i < newLength; i += 1) { | |
| 15497 | - this.stack[i] = new CanvasContext(); | |
| 15498 | - } | |
| 15499 | - this._length = newLength; | |
| 15500 | - }; | |
| 15501 | - CVContextData.prototype.reset = function () { | |
| 15502 | - this.cArrPos = 0; | |
| 15503 | - this.cTr.reset(); | |
| 15504 | - this.stack[this.cArrPos].opacity = 1; | |
| 15505 | - }; | |
| 15506 | - CVContextData.prototype.restore = function (forceRestore) { | |
| 15507 | - this.cArrPos -= 1; | |
| 15508 | - var currentContext = this.stack[this.cArrPos]; | |
| 15509 | - var transform = currentContext.transform; | |
| 15510 | - var i; | |
| 15511 | - var arr = this.cTr.props; | |
| 15512 | - for (i = 0; i < 16; i += 1) { | |
| 15513 | - arr[i] = transform[i]; | |
| 15514 | - } | |
| 15515 | - if (forceRestore) { | |
| 15516 | - this.nativeContext.restore(); | |
| 15517 | - var prevStack = this.stack[this.cArrPos + 1]; | |
| 15518 | - this.appliedFillStyle = prevStack.fillStyle; | |
| 15519 | - this.appliedStrokeStyle = prevStack.strokeStyle; | |
| 15520 | - this.appliedLineWidth = prevStack.lineWidth; | |
| 15521 | - this.appliedLineCap = prevStack.lineCap; | |
| 15522 | - this.appliedLineJoin = prevStack.lineJoin; | |
| 15523 | - this.appliedMiterLimit = prevStack.miterLimit; | |
| 15524 | - } | |
| 15525 | - this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]); | |
| 15526 | - if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) { | |
| 15527 | - this.nativeContext.globalAlpha = currentContext.opacity; | |
| 15528 | - this.currentOpacity = currentContext.opacity; | |
| 15529 | - } | |
| 15530 | - this.currentFillStyle = currentContext.fillStyle; | |
| 15531 | - this.currentStrokeStyle = currentContext.strokeStyle; | |
| 15532 | - this.currentLineWidth = currentContext.lineWidth; | |
| 15533 | - this.currentLineCap = currentContext.lineCap; | |
| 15534 | - this.currentLineJoin = currentContext.lineJoin; | |
| 15535 | - this.currentMiterLimit = currentContext.miterLimit; | |
| 15536 | - }; | |
| 15537 | - CVContextData.prototype.save = function (saveOnNativeFlag) { | |
| 15538 | - if (saveOnNativeFlag) { | |
| 15539 | - this.nativeContext.save(); | |
| 15540 | - } | |
| 15541 | - var props = this.cTr.props; | |
| 15542 | - if (this._length <= this.cArrPos) { | |
| 15543 | - this.duplicate(); | |
| 15544 | - } | |
| 15545 | - var currentStack = this.stack[this.cArrPos]; | |
| 15546 | - var i; | |
| 15547 | - for (i = 0; i < 16; i += 1) { | |
| 15548 | - currentStack.transform[i] = props[i]; | |
| 15549 | - } | |
| 15550 | - this.cArrPos += 1; | |
| 15551 | - var newStack = this.stack[this.cArrPos]; | |
| 15552 | - newStack.opacity = currentStack.opacity; | |
| 15553 | - newStack.fillStyle = currentStack.fillStyle; | |
| 15554 | - newStack.strokeStyle = currentStack.strokeStyle; | |
| 15555 | - newStack.lineWidth = currentStack.lineWidth; | |
| 15556 | - newStack.lineCap = currentStack.lineCap; | |
| 15557 | - newStack.lineJoin = currentStack.lineJoin; | |
| 15558 | - newStack.miterLimit = currentStack.miterLimit; | |
| 15559 | - }; | |
| 15560 | - CVContextData.prototype.setOpacity = function (value) { | |
| 15561 | - this.stack[this.cArrPos].opacity = value; | |
| 15562 | - }; | |
| 15563 | - CVContextData.prototype.setContext = function (value) { | |
| 15564 | - this.nativeContext = value; | |
| 15565 | - }; | |
| 15566 | - CVContextData.prototype.fillStyle = function (value) { | |
| 15567 | - if (this.stack[this.cArrPos].fillStyle !== value) { | |
| 15568 | - this.currentFillStyle = value; | |
| 15569 | - this.stack[this.cArrPos].fillStyle = value; | |
| 15570 | - } | |
| 15571 | - }; | |
| 15572 | - CVContextData.prototype.strokeStyle = function (value) { | |
| 15573 | - if (this.stack[this.cArrPos].strokeStyle !== value) { | |
| 15574 | - this.currentStrokeStyle = value; | |
| 15575 | - this.stack[this.cArrPos].strokeStyle = value; | |
| 15576 | - } | |
| 15577 | - }; | |
| 15578 | - CVContextData.prototype.lineWidth = function (value) { | |
| 15579 | - if (this.stack[this.cArrPos].lineWidth !== value) { | |
| 15580 | - this.currentLineWidth = value; | |
| 15581 | - this.stack[this.cArrPos].lineWidth = value; | |
| 15582 | - } | |
| 15583 | - }; | |
| 15584 | - CVContextData.prototype.lineCap = function (value) { | |
| 15585 | - if (this.stack[this.cArrPos].lineCap !== value) { | |
| 15586 | - this.currentLineCap = value; | |
| 15587 | - this.stack[this.cArrPos].lineCap = value; | |
| 15588 | - } | |
| 15589 | - }; | |
| 15590 | - CVContextData.prototype.lineJoin = function (value) { | |
| 15591 | - if (this.stack[this.cArrPos].lineJoin !== value) { | |
| 15592 | - this.currentLineJoin = value; | |
| 15593 | - this.stack[this.cArrPos].lineJoin = value; | |
| 15594 | - } | |
| 15595 | - }; | |
| 15596 | - CVContextData.prototype.miterLimit = function (value) { | |
| 15597 | - if (this.stack[this.cArrPos].miterLimit !== value) { | |
| 15598 | - this.currentMiterLimit = value; | |
| 15599 | - this.stack[this.cArrPos].miterLimit = value; | |
| 15600 | - } | |
| 15601 | - }; | |
| 15602 | - CVContextData.prototype.transform = function (props) { | |
| 15603 | - this.transformMat.cloneFromProps(props); | |
| 15604 | - // Taking the last transform value from the stored stack of transforms | |
| 15605 | - var currentTransform = this.cTr; | |
| 15606 | - // Applying the last transform value after the new transform to respect the order of transformations | |
| 15607 | - this.transformMat.multiply(currentTransform); | |
| 15608 | - // Storing the new transformed value in the stored transform | |
| 15609 | - currentTransform.cloneFromProps(this.transformMat.props); | |
| 15610 | - var trProps = currentTransform.props; | |
| 15611 | - // Applying the new transform to the canvas | |
| 15612 | - this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]); | |
| 15613 | - }; | |
| 15614 | - CVContextData.prototype.opacity = function (op) { | |
| 15615 | - var currentOpacity = this.stack[this.cArrPos].opacity; | |
| 15616 | - currentOpacity *= op < 0 ? 0 : op; | |
| 15617 | - if (this.stack[this.cArrPos].opacity !== currentOpacity) { | |
| 15618 | - if (this.currentOpacity !== op) { | |
| 15619 | - this.nativeContext.globalAlpha = op; | |
| 15620 | - this.currentOpacity = op; | |
| 15621 | - } | |
| 15622 | - this.stack[this.cArrPos].opacity = currentOpacity; | |
| 15623 | - } | |
| 15624 | - }; | |
| 15625 | - CVContextData.prototype.fill = function (rule) { | |
| 15626 | - if (this.appliedFillStyle !== this.currentFillStyle) { | |
| 15627 | - this.appliedFillStyle = this.currentFillStyle; | |
| 15628 | - this.nativeContext.fillStyle = this.appliedFillStyle; | |
| 15629 | - } | |
| 15630 | - this.nativeContext.fill(rule); | |
| 15631 | - }; | |
| 15632 | - CVContextData.prototype.fillRect = function (x, y, w, h) { | |
| 15633 | - if (this.appliedFillStyle !== this.currentFillStyle) { | |
| 15634 | - this.appliedFillStyle = this.currentFillStyle; | |
| 15635 | - this.nativeContext.fillStyle = this.appliedFillStyle; | |
| 15636 | - } | |
| 15637 | - this.nativeContext.fillRect(x, y, w, h); | |
| 15638 | - }; | |
| 15639 | - CVContextData.prototype.stroke = function () { | |
| 15640 | - if (this.appliedStrokeStyle !== this.currentStrokeStyle) { | |
| 15641 | - this.appliedStrokeStyle = this.currentStrokeStyle; | |
| 15642 | - this.nativeContext.strokeStyle = this.appliedStrokeStyle; | |
| 15643 | - } | |
| 15644 | - if (this.appliedLineWidth !== this.currentLineWidth) { | |
| 15645 | - this.appliedLineWidth = this.currentLineWidth; | |
| 15646 | - this.nativeContext.lineWidth = this.appliedLineWidth; | |
| 15647 | - } | |
| 15648 | - if (this.appliedLineCap !== this.currentLineCap) { | |
| 15649 | - this.appliedLineCap = this.currentLineCap; | |
| 15650 | - this.nativeContext.lineCap = this.appliedLineCap; | |
| 15651 | - } | |
| 15652 | - if (this.appliedLineJoin !== this.currentLineJoin) { | |
| 15653 | - this.appliedLineJoin = this.currentLineJoin; | |
| 15654 | - this.nativeContext.lineJoin = this.appliedLineJoin; | |
| 15655 | - } | |
| 15656 | - if (this.appliedMiterLimit !== this.currentMiterLimit) { | |
| 15657 | - this.appliedMiterLimit = this.currentMiterLimit; | |
| 15658 | - this.nativeContext.miterLimit = this.appliedMiterLimit; | |
| 15659 | - } | |
| 15660 | - this.nativeContext.stroke(); | |
| 15661 | - }; | |
| 15662 | - | |
| 15663 | - function CVCompElement(data, globalData, comp) { | |
| 15664 | - this.completeLayers = false; | |
| 15665 | - this.layers = data.layers; | |
| 15666 | - this.pendingElements = []; | |
| 15667 | - this.elements = createSizedArray(this.layers.length); | |
| 15668 | - this.initElement(data, globalData, comp); | |
| 15669 | - this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { | |
| 15670 | - _placeholder: true | |
| 15671 | - }; | |
| 15672 | - } | |
| 15673 | - extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement); | |
| 15674 | - CVCompElement.prototype.renderInnerContent = function () { | |
| 15675 | - var ctx = this.canvasContext; | |
| 15676 | - ctx.beginPath(); | |
| 15677 | - ctx.moveTo(0, 0); | |
| 15678 | - ctx.lineTo(this.data.w, 0); | |
| 15679 | - ctx.lineTo(this.data.w, this.data.h); | |
| 15680 | - ctx.lineTo(0, this.data.h); | |
| 15681 | - ctx.lineTo(0, 0); | |
| 15682 | - ctx.clip(); | |
| 15683 | - var i; | |
| 15684 | - var len = this.layers.length; | |
| 15685 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 15686 | - if (this.completeLayers || this.elements[i]) { | |
| 15687 | - this.elements[i].renderFrame(); | |
| 15688 | - } | |
| 15689 | - } | |
| 15690 | - }; | |
| 15691 | - CVCompElement.prototype.destroy = function () { | |
| 15692 | - var i; | |
| 15693 | - var len = this.layers.length; | |
| 15694 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 15695 | - if (this.elements[i]) { | |
| 15696 | - this.elements[i].destroy(); | |
| 15697 | - } | |
| 15698 | - } | |
| 15699 | - this.layers = null; | |
| 15700 | - this.elements = null; | |
| 15701 | - }; | |
| 15702 | - CVCompElement.prototype.createComp = function (data) { | |
| 15703 | - return new CVCompElement(data, this.globalData, this); | |
| 15704 | - }; | |
| 15705 | - | |
| 15706 | - function CanvasRenderer(animationItem, config) { | |
| 15707 | - this.animationItem = animationItem; | |
| 15708 | - this.renderConfig = { | |
| 15709 | - clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true, | |
| 15710 | - context: config && config.context || null, | |
| 15711 | - progressiveLoad: config && config.progressiveLoad || false, | |
| 15712 | - preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet', | |
| 15713 | - imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice', | |
| 15714 | - contentVisibility: config && config.contentVisibility || 'visible', | |
| 15715 | - className: config && config.className || '', | |
| 15716 | - id: config && config.id || '', | |
| 15717 | - runExpressions: !config || config.runExpressions === undefined || config.runExpressions | |
| 15718 | - }; | |
| 15719 | - this.renderConfig.dpr = config && config.dpr || 1; | |
| 15720 | - if (this.animationItem.wrapper) { | |
| 15721 | - this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; | |
| 15722 | - } | |
| 15723 | - this.renderedFrame = -1; | |
| 15724 | - this.globalData = { | |
| 15725 | - frameNum: -1, | |
| 15726 | - _mdf: false, | |
| 15727 | - renderConfig: this.renderConfig, | |
| 15728 | - currentGlobalAlpha: -1 | |
| 15729 | - }; | |
| 15730 | - this.contextData = new CVContextData(); | |
| 15731 | - this.elements = []; | |
| 15732 | - this.pendingElements = []; | |
| 15733 | - this.transformMat = new Matrix(); | |
| 15734 | - this.completeLayers = false; | |
| 15735 | - this.rendererType = 'canvas'; | |
| 15736 | - if (this.renderConfig.clearCanvas) { | |
| 15737 | - this.ctxTransform = this.contextData.transform.bind(this.contextData); | |
| 15738 | - this.ctxOpacity = this.contextData.opacity.bind(this.contextData); | |
| 15739 | - this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData); | |
| 15740 | - this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData); | |
| 15741 | - this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData); | |
| 15742 | - this.ctxLineCap = this.contextData.lineCap.bind(this.contextData); | |
| 15743 | - this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData); | |
| 15744 | - this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData); | |
| 15745 | - this.ctxFill = this.contextData.fill.bind(this.contextData); | |
| 15746 | - this.ctxFillRect = this.contextData.fillRect.bind(this.contextData); | |
| 15747 | - this.ctxStroke = this.contextData.stroke.bind(this.contextData); | |
| 15748 | - this.save = this.contextData.save.bind(this.contextData); | |
| 15749 | - } | |
| 15750 | - } | |
| 15751 | - extendPrototype([CanvasRendererBase], CanvasRenderer); | |
| 15752 | - CanvasRenderer.prototype.createComp = function (data) { | |
| 15753 | - return new CVCompElement(data, this.globalData, this); | |
| 15754 | - }; | |
| 15755 | - | |
| 15756 | - function HBaseElement() {} | |
| 15757 | - HBaseElement.prototype = { | |
| 15758 | - checkBlendMode: function checkBlendMode() {}, | |
| 15759 | - initRendererElement: function initRendererElement() { | |
| 15760 | - this.baseElement = createTag(this.data.tg || 'div'); | |
| 15761 | - if (this.data.hasMask) { | |
| 15762 | - this.svgElement = createNS('svg'); | |
| 15763 | - this.layerElement = createNS('g'); | |
| 15764 | - this.maskedElement = this.layerElement; | |
| 15765 | - this.svgElement.appendChild(this.layerElement); | |
| 15766 | - this.baseElement.appendChild(this.svgElement); | |
| 15767 | - } else { | |
| 15768 | - this.layerElement = this.baseElement; | |
| 15769 | - } | |
| 15770 | - styleDiv(this.baseElement); | |
| 15771 | - }, | |
| 15772 | - createContainerElements: function createContainerElements() { | |
| 15773 | - this.renderableEffectsManager = new CVEffects(this); | |
| 15774 | - this.transformedElement = this.baseElement; | |
| 15775 | - this.maskedElement = this.layerElement; | |
| 15776 | - if (this.data.ln) { | |
| 15777 | - this.layerElement.setAttribute('id', this.data.ln); | |
| 15778 | - } | |
| 15779 | - if (this.data.cl) { | |
| 15780 | - this.layerElement.setAttribute('class', this.data.cl); | |
| 15781 | - } | |
| 15782 | - if (this.data.bm !== 0) { | |
| 15783 | - this.setBlendMode(); | |
| 15784 | - } | |
| 15785 | - }, | |
| 15786 | - renderElement: function renderElement() { | |
| 15787 | - var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {}; | |
| 15788 | - if (this.finalTransform._matMdf) { | |
| 15789 | - var matrixValue = this.finalTransform.mat.toCSS(); | |
| 15790 | - transformedElementStyle.transform = matrixValue; | |
| 15791 | - transformedElementStyle.webkitTransform = matrixValue; | |
| 15792 | - } | |
| 15793 | - if (this.finalTransform._opMdf) { | |
| 15794 | - transformedElementStyle.opacity = this.finalTransform.mProp.o.v; | |
| 15795 | - } | |
| 15796 | - }, | |
| 15797 | - renderFrame: function renderFrame() { | |
| 15798 | - // If it is exported as hidden (data.hd === true) no need to render | |
| 15799 | - // If it is not visible no need to render | |
| 15800 | - if (this.data.hd || this.hidden) { | |
| 15801 | - return; | |
| 15802 | - } | |
| 15803 | - this.renderTransform(); | |
| 15804 | - this.renderRenderable(); | |
| 15805 | - this.renderElement(); | |
| 15806 | - this.renderInnerContent(); | |
| 15807 | - if (this._isFirstFrame) { | |
| 15808 | - this._isFirstFrame = false; | |
| 15809 | - } | |
| 15810 | - }, | |
| 15811 | - destroy: function destroy() { | |
| 15812 | - this.layerElement = null; | |
| 15813 | - this.transformedElement = null; | |
| 15814 | - if (this.matteElement) { | |
| 15815 | - this.matteElement = null; | |
| 15816 | - } | |
| 15817 | - if (this.maskManager) { | |
| 15818 | - this.maskManager.destroy(); | |
| 15819 | - this.maskManager = null; | |
| 15820 | - } | |
| 15821 | - }, | |
| 15822 | - createRenderableComponents: function createRenderableComponents() { | |
| 15823 | - this.maskManager = new MaskElement(this.data, this, this.globalData); | |
| 15824 | - }, | |
| 15825 | - addEffects: function addEffects() {}, | |
| 15826 | - setMatte: function setMatte() {} | |
| 15827 | - }; | |
| 15828 | - HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement; | |
| 15829 | - HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy; | |
| 15830 | - HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting; | |
| 15831 | - | |
| 15832 | - function HSolidElement(data, globalData, comp) { | |
| 15833 | - this.initElement(data, globalData, comp); | |
| 15834 | - } | |
| 15835 | - extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement); | |
| 15836 | - HSolidElement.prototype.createContent = function () { | |
| 15837 | - var rect; | |
| 15838 | - if (this.data.hasMask) { | |
| 15839 | - rect = createNS('rect'); | |
| 15840 | - rect.setAttribute('width', this.data.sw); | |
| 15841 | - rect.setAttribute('height', this.data.sh); | |
| 15842 | - rect.setAttribute('fill', this.data.sc); | |
| 15843 | - this.svgElement.setAttribute('width', this.data.sw); | |
| 15844 | - this.svgElement.setAttribute('height', this.data.sh); | |
| 15845 | - } else { | |
| 15846 | - rect = createTag('div'); | |
| 15847 | - rect.style.width = this.data.sw + 'px'; | |
| 15848 | - rect.style.height = this.data.sh + 'px'; | |
| 15849 | - rect.style.backgroundColor = this.data.sc; | |
| 15850 | - } | |
| 15851 | - this.layerElement.appendChild(rect); | |
| 15852 | - }; | |
| 15853 | - | |
| 15854 | - function HShapeElement(data, globalData, comp) { | |
| 15855 | - // List of drawable elements | |
| 15856 | - this.shapes = []; | |
| 15857 | - // Full shape data | |
| 15858 | - this.shapesData = data.shapes; | |
| 15859 | - // List of styles that will be applied to shapes | |
| 15860 | - this.stylesList = []; | |
| 15861 | - // List of modifiers that will be applied to shapes | |
| 15862 | - this.shapeModifiers = []; | |
| 15863 | - // List of items in shape tree | |
| 15864 | - this.itemsData = []; | |
| 15865 | - // List of items in previous shape tree | |
| 15866 | - this.processedElements = []; | |
| 15867 | - // List of animated components | |
| 15868 | - this.animatedContents = []; | |
| 15869 | - this.shapesContainer = createNS('g'); | |
| 15870 | - this.initElement(data, globalData, comp); | |
| 15871 | - // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties. | |
| 15872 | - // List of elements that have been created | |
| 15873 | - this.prevViewData = []; | |
| 15874 | - this.currentBBox = { | |
| 15875 | - x: 999999, | |
| 15876 | - y: -999999, | |
| 15877 | - h: 0, | |
| 15878 | - w: 0 | |
| 15879 | - }; | |
| 15880 | - } | |
| 15881 | - extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement); | |
| 15882 | - HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent; | |
| 15883 | - HShapeElement.prototype.createContent = function () { | |
| 15884 | - var cont; | |
| 15885 | - this.baseElement.style.fontSize = 0; | |
| 15886 | - if (this.data.hasMask) { | |
| 15887 | - this.layerElement.appendChild(this.shapesContainer); | |
| 15888 | - cont = this.svgElement; | |
| 15889 | - } else { | |
| 15890 | - cont = createNS('svg'); | |
| 15891 | - var size = this.comp.data ? this.comp.data : this.globalData.compSize; | |
| 15892 | - cont.setAttribute('width', size.w); | |
| 15893 | - cont.setAttribute('height', size.h); | |
| 15894 | - cont.appendChild(this.shapesContainer); | |
| 15895 | - this.layerElement.appendChild(cont); | |
| 15896 | - } | |
| 15897 | - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true); | |
| 15898 | - this.filterUniqueShapes(); | |
| 15899 | - this.shapeCont = cont; | |
| 15900 | - }; | |
| 15901 | - HShapeElement.prototype.getTransformedPoint = function (transformers, point) { | |
| 15902 | - var i; | |
| 15903 | - var len = transformers.length; | |
| 15904 | - for (i = 0; i < len; i += 1) { | |
| 15905 | - point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0); | |
| 15906 | - } | |
| 15907 | - return point; | |
| 15908 | - }; | |
| 15909 | - HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) { | |
| 15910 | - var shape = item.sh.v; | |
| 15911 | - var transformers = item.transformers; | |
| 15912 | - var i; | |
| 15913 | - var len = shape._length; | |
| 15914 | - var vPoint; | |
| 15915 | - var oPoint; | |
| 15916 | - var nextIPoint; | |
| 15917 | - var nextVPoint; | |
| 15918 | - if (len <= 1) { | |
| 15919 | - return; | |
| 15920 | - } | |
| 15921 | - for (i = 0; i < len - 1; i += 1) { | |
| 15922 | - vPoint = this.getTransformedPoint(transformers, shape.v[i]); | |
| 15923 | - oPoint = this.getTransformedPoint(transformers, shape.o[i]); | |
| 15924 | - nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]); | |
| 15925 | - nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]); | |
| 15926 | - this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox); | |
| 15927 | - } | |
| 15928 | - if (shape.c) { | |
| 15929 | - vPoint = this.getTransformedPoint(transformers, shape.v[i]); | |
| 15930 | - oPoint = this.getTransformedPoint(transformers, shape.o[i]); | |
| 15931 | - nextIPoint = this.getTransformedPoint(transformers, shape.i[0]); | |
| 15932 | - nextVPoint = this.getTransformedPoint(transformers, shape.v[0]); | |
| 15933 | - this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox); | |
| 15934 | - } | |
| 15935 | - }; | |
| 15936 | - HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) { | |
| 15937 | - this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint); | |
| 15938 | - var bounds = this.shapeBoundingBox; | |
| 15939 | - boundingBox.x = bmMin(bounds.left, boundingBox.x); | |
| 15940 | - boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax); | |
| 15941 | - boundingBox.y = bmMin(bounds.top, boundingBox.y); | |
| 15942 | - boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax); | |
| 15943 | - }; | |
| 15944 | - HShapeElement.prototype.shapeBoundingBox = { | |
| 15945 | - left: 0, | |
| 15946 | - right: 0, | |
| 15947 | - top: 0, | |
| 15948 | - bottom: 0 | |
| 15949 | - }; | |
| 15950 | - HShapeElement.prototype.tempBoundingBox = { | |
| 15951 | - x: 0, | |
| 15952 | - xMax: 0, | |
| 15953 | - y: 0, | |
| 15954 | - yMax: 0, | |
| 15955 | - width: 0, | |
| 15956 | - height: 0 | |
| 15957 | - }; | |
| 15958 | - HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) { | |
| 15959 | - var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]]; | |
| 15960 | - for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) { | |
| 15961 | - // eslint-disable-line no-plusplus | |
| 15962 | - b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; | |
| 15963 | - a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; | |
| 15964 | - c = 3 * p1[i] - 3 * p0[i]; | |
| 15965 | - b |= 0; // eslint-disable-line no-bitwise | |
| 15966 | - a |= 0; // eslint-disable-line no-bitwise | |
| 15967 | - c |= 0; // eslint-disable-line no-bitwise | |
| 15968 | - | |
| 15969 | - if (a === 0 && b === 0) { | |
| 15970 | - // | |
| 15971 | - } else if (a === 0) { | |
| 15972 | - t = -c / b; | |
| 15973 | - if (t > 0 && t < 1) { | |
| 15974 | - bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i)); | |
| 15975 | - } | |
| 15976 | - } else { | |
| 15977 | - b2ac = b * b - 4 * c * a; | |
| 15978 | - if (b2ac >= 0) { | |
| 15979 | - t1 = (-b + bmSqrt(b2ac)) / (2 * a); | |
| 15980 | - if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i)); | |
| 15981 | - t2 = (-b - bmSqrt(b2ac)) / (2 * a); | |
| 15982 | - if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i)); | |
| 15983 | - } | |
| 15984 | - } | |
| 15985 | - } | |
| 15986 | - this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]); | |
| 15987 | - this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]); | |
| 15988 | - this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]); | |
| 15989 | - this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]); | |
| 15990 | - }; | |
| 15991 | - HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) { | |
| 15992 | - 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]; | |
| 15993 | - }; | |
| 15994 | - HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) { | |
| 15995 | - var i; | |
| 15996 | - var len = itemsData.length; | |
| 15997 | - for (i = 0; i < len; i += 1) { | |
| 15998 | - if (itemsData[i] && itemsData[i].sh) { | |
| 15999 | - this.calculateShapeBoundingBox(itemsData[i], boundingBox); | |
| 16000 | - } else if (itemsData[i] && itemsData[i].it) { | |
| 16001 | - this.calculateBoundingBox(itemsData[i].it, boundingBox); | |
| 16002 | - } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) { | |
| 16003 | - this.expandStrokeBoundingBox(itemsData[i].w, boundingBox); | |
| 16004 | - } | |
| 16005 | - } | |
| 16006 | - }; | |
| 16007 | - HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) { | |
| 16008 | - var width = 0; | |
| 16009 | - if (widthProperty.keyframes) { | |
| 16010 | - for (var i = 0; i < widthProperty.keyframes.length; i += 1) { | |
| 16011 | - var kfw = widthProperty.keyframes[i].s; | |
| 16012 | - if (kfw > width) { | |
| 16013 | - width = kfw; | |
| 16014 | - } | |
| 16015 | - } | |
| 16016 | - width *= widthProperty.mult; | |
| 16017 | - } else { | |
| 16018 | - width = widthProperty.v * widthProperty.mult; | |
| 16019 | - } | |
| 16020 | - boundingBox.x -= width; | |
| 16021 | - boundingBox.xMax += width; | |
| 16022 | - boundingBox.y -= width; | |
| 16023 | - boundingBox.yMax += width; | |
| 16024 | - }; | |
| 16025 | - HShapeElement.prototype.currentBoxContains = function (box) { | |
| 16026 | - 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; | |
| 16027 | - }; | |
| 16028 | - HShapeElement.prototype.renderInnerContent = function () { | |
| 16029 | - this._renderShapeFrame(); | |
| 16030 | - if (!this.hidden && (this._isFirstFrame || this._mdf)) { | |
| 16031 | - var tempBoundingBox = this.tempBoundingBox; | |
| 16032 | - var max = 999999; | |
| 16033 | - tempBoundingBox.x = max; | |
| 16034 | - tempBoundingBox.xMax = -max; | |
| 16035 | - tempBoundingBox.y = max; | |
| 16036 | - tempBoundingBox.yMax = -max; | |
| 16037 | - this.calculateBoundingBox(this.itemsData, tempBoundingBox); | |
| 16038 | - tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x; | |
| 16039 | - tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; | |
| 16040 | - // var tempBoundingBox = this.shapeCont.getBBox(); | |
| 16041 | - if (this.currentBoxContains(tempBoundingBox)) { | |
| 16042 | - return; | |
| 16043 | - } | |
| 16044 | - var changed = false; | |
| 16045 | - if (this.currentBBox.w !== tempBoundingBox.width) { | |
| 16046 | - this.currentBBox.w = tempBoundingBox.width; | |
| 16047 | - this.shapeCont.setAttribute('width', tempBoundingBox.width); | |
| 16048 | - changed = true; | |
| 16049 | - } | |
| 16050 | - if (this.currentBBox.h !== tempBoundingBox.height) { | |
| 16051 | - this.currentBBox.h = tempBoundingBox.height; | |
| 16052 | - this.shapeCont.setAttribute('height', tempBoundingBox.height); | |
| 16053 | - changed = true; | |
| 16054 | - } | |
| 16055 | - if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) { | |
| 16056 | - this.currentBBox.w = tempBoundingBox.width; | |
| 16057 | - this.currentBBox.h = tempBoundingBox.height; | |
| 16058 | - this.currentBBox.x = tempBoundingBox.x; | |
| 16059 | - this.currentBBox.y = tempBoundingBox.y; | |
| 16060 | - this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h); | |
| 16061 | - var shapeStyle = this.shapeCont.style; | |
| 16062 | - var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)'; | |
| 16063 | - shapeStyle.transform = shapeTransform; | |
| 16064 | - shapeStyle.webkitTransform = shapeTransform; | |
| 16065 | - } | |
| 16066 | - } | |
| 16067 | - }; | |
| 16068 | - | |
| 16069 | - function HTextElement(data, globalData, comp) { | |
| 16070 | - this.textSpans = []; | |
| 16071 | - this.textPaths = []; | |
| 16072 | - this.currentBBox = { | |
| 16073 | - x: 999999, | |
| 16074 | - y: -999999, | |
| 16075 | - h: 0, | |
| 16076 | - w: 0 | |
| 16077 | - }; | |
| 16078 | - this.renderType = 'svg'; | |
| 16079 | - this.isMasked = false; | |
| 16080 | - this.initElement(data, globalData, comp); | |
| 16081 | - } | |
| 16082 | - extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement); | |
| 16083 | - HTextElement.prototype.createContent = function () { | |
| 16084 | - this.isMasked = this.checkMasks(); | |
| 16085 | - if (this.isMasked) { | |
| 16086 | - this.renderType = 'svg'; | |
| 16087 | - this.compW = this.comp.data.w; | |
| 16088 | - this.compH = this.comp.data.h; | |
| 16089 | - this.svgElement.setAttribute('width', this.compW); | |
| 16090 | - this.svgElement.setAttribute('height', this.compH); | |
| 16091 | - var g = createNS('g'); | |
| 16092 | - this.maskedElement.appendChild(g); | |
| 16093 | - this.innerElem = g; | |
| 16094 | - } else { | |
| 16095 | - this.renderType = 'html'; | |
| 16096 | - this.innerElem = this.layerElement; | |
| 16097 | - } | |
| 16098 | - this.checkParenting(); | |
| 16099 | - }; | |
| 16100 | - HTextElement.prototype.buildNewText = function () { | |
| 16101 | - var documentData = this.textProperty.currentData; | |
| 16102 | - this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); | |
| 16103 | - var innerElemStyle = this.innerElem.style; | |
| 16104 | - var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)'; | |
| 16105 | - innerElemStyle.fill = textColor; | |
| 16106 | - innerElemStyle.color = textColor; | |
| 16107 | - if (documentData.sc) { | |
| 16108 | - innerElemStyle.stroke = this.buildColor(documentData.sc); | |
| 16109 | - innerElemStyle.strokeWidth = documentData.sw + 'px'; | |
| 16110 | - } | |
| 16111 | - var fontData = this.globalData.fontManager.getFontByName(documentData.f); | |
| 16112 | - if (!this.globalData.fontManager.chars) { | |
| 16113 | - innerElemStyle.fontSize = documentData.finalSize + 'px'; | |
| 16114 | - innerElemStyle.lineHeight = documentData.finalSize + 'px'; | |
| 16115 | - if (fontData.fClass) { | |
| 16116 | - this.innerElem.className = fontData.fClass; | |
| 16117 | - } else { | |
| 16118 | - innerElemStyle.fontFamily = fontData.fFamily; | |
| 16119 | - var fWeight = documentData.fWeight; | |
| 16120 | - var fStyle = documentData.fStyle; | |
| 16121 | - innerElemStyle.fontStyle = fStyle; | |
| 16122 | - innerElemStyle.fontWeight = fWeight; | |
| 16123 | - } | |
| 16124 | - } | |
| 16125 | - var i; | |
| 16126 | - var len; | |
| 16127 | - var letters = documentData.l; | |
| 16128 | - len = letters.length; | |
| 16129 | - var tSpan; | |
| 16130 | - var tParent; | |
| 16131 | - var tCont; | |
| 16132 | - var matrixHelper = this.mHelper; | |
| 16133 | - var shapes; | |
| 16134 | - var shapeStr = ''; | |
| 16135 | - var cnt = 0; | |
| 16136 | - for (i = 0; i < len; i += 1) { | |
| 16137 | - if (this.globalData.fontManager.chars) { | |
| 16138 | - if (!this.textPaths[cnt]) { | |
| 16139 | - tSpan = createNS('path'); | |
| 16140 | - tSpan.setAttribute('stroke-linecap', lineCapEnum[1]); | |
| 16141 | - tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]); | |
| 16142 | - tSpan.setAttribute('stroke-miterlimit', '4'); | |
| 16143 | - } else { | |
| 16144 | - tSpan = this.textPaths[cnt]; | |
| 16145 | - } | |
| 16146 | - if (!this.isMasked) { | |
| 16147 | - if (this.textSpans[cnt]) { | |
| 16148 | - tParent = this.textSpans[cnt]; | |
| 16149 | - tCont = tParent.children[0]; | |
| 16150 | - } else { | |
| 16151 | - tParent = createTag('div'); | |
| 16152 | - tParent.style.lineHeight = 0; | |
| 16153 | - tCont = createNS('svg'); | |
| 16154 | - tCont.appendChild(tSpan); | |
| 16155 | - styleDiv(tParent); | |
| 16156 | - } | |
| 16157 | - } | |
| 16158 | - } else if (!this.isMasked) { | |
| 16159 | - if (this.textSpans[cnt]) { | |
| 16160 | - tParent = this.textSpans[cnt]; | |
| 16161 | - tSpan = this.textPaths[cnt]; | |
| 16162 | - } else { | |
| 16163 | - tParent = createTag('span'); | |
| 16164 | - styleDiv(tParent); | |
| 16165 | - tSpan = createTag('span'); | |
| 16166 | - styleDiv(tSpan); | |
| 16167 | - tParent.appendChild(tSpan); | |
| 16168 | - } | |
| 16169 | - } else { | |
| 16170 | - tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text'); | |
| 16171 | - } | |
| 16172 | - // tSpan.setAttribute('visibility', 'hidden'); | |
| 16173 | - if (this.globalData.fontManager.chars) { | |
| 16174 | - var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); | |
| 16175 | - var shapeData; | |
| 16176 | - if (charData) { | |
| 16177 | - shapeData = charData.data; | |
| 16178 | - } else { | |
| 16179 | - shapeData = null; | |
| 16180 | - } | |
| 16181 | - matrixHelper.reset(); | |
| 16182 | - if (shapeData && shapeData.shapes && shapeData.shapes.length) { | |
| 16183 | - shapes = shapeData.shapes[0].it; | |
| 16184 | - matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); | |
| 16185 | - shapeStr = this.createPathShape(matrixHelper, shapes); | |
| 16186 | - tSpan.setAttribute('d', shapeStr); | |
| 16187 | - } | |
| 16188 | - if (!this.isMasked) { | |
| 16189 | - this.innerElem.appendChild(tParent); | |
| 16190 | - if (shapeData && shapeData.shapes) { | |
| 16191 | - // document.body.appendChild is needed to get exact measure of shape | |
| 16192 | - document.body.appendChild(tCont); | |
| 16193 | - var boundingBox = tCont.getBBox(); | |
| 16194 | - tCont.setAttribute('width', boundingBox.width + 2); | |
| 16195 | - tCont.setAttribute('height', boundingBox.height + 2); | |
| 16196 | - tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2)); | |
| 16197 | - var tContStyle = tCont.style; | |
| 16198 | - var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)'; | |
| 16199 | - tContStyle.transform = tContTranslation; | |
| 16200 | - tContStyle.webkitTransform = tContTranslation; | |
| 16201 | - letters[i].yOffset = boundingBox.y - 1; | |
| 16202 | - } else { | |
| 16203 | - tCont.setAttribute('width', 1); | |
| 16204 | - tCont.setAttribute('height', 1); | |
| 16205 | - } | |
| 16206 | - tParent.appendChild(tCont); | |
| 16207 | - } else { | |
| 16208 | - this.innerElem.appendChild(tSpan); | |
| 16209 | - } | |
| 16210 | - } else { | |
| 16211 | - tSpan.textContent = letters[i].val; | |
| 16212 | - tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); | |
| 16213 | - if (!this.isMasked) { | |
| 16214 | - this.innerElem.appendChild(tParent); | |
| 16215 | - // | |
| 16216 | - var tStyle = tSpan.style; | |
| 16217 | - var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)'; | |
| 16218 | - tStyle.transform = tSpanTranslation; | |
| 16219 | - tStyle.webkitTransform = tSpanTranslation; | |
| 16220 | - } else { | |
| 16221 | - this.innerElem.appendChild(tSpan); | |
| 16222 | - } | |
| 16223 | - } | |
| 16224 | - // | |
| 16225 | - if (!this.isMasked) { | |
| 16226 | - this.textSpans[cnt] = tParent; | |
| 16227 | - } else { | |
| 16228 | - this.textSpans[cnt] = tSpan; | |
| 16229 | - } | |
| 16230 | - this.textSpans[cnt].style.display = 'block'; | |
| 16231 | - this.textPaths[cnt] = tSpan; | |
| 16232 | - cnt += 1; | |
| 16233 | - } | |
| 16234 | - while (cnt < this.textSpans.length) { | |
| 16235 | - this.textSpans[cnt].style.display = 'none'; | |
| 16236 | - cnt += 1; | |
| 16237 | - } | |
| 16238 | - }; | |
| 16239 | - HTextElement.prototype.renderInnerContent = function () { | |
| 16240 | - this.validateText(); | |
| 16241 | - var svgStyle; | |
| 16242 | - if (this.data.singleShape) { | |
| 16243 | - if (!this._isFirstFrame && !this.lettersChangedFlag) { | |
| 16244 | - return; | |
| 16245 | - } | |
| 16246 | - if (this.isMasked && this.finalTransform._matMdf) { | |
| 16247 | - // Todo Benchmark if using this is better than getBBox | |
| 16248 | - this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH); | |
| 16249 | - svgStyle = this.svgElement.style; | |
| 16250 | - var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)'; | |
| 16251 | - svgStyle.transform = translation; | |
| 16252 | - svgStyle.webkitTransform = translation; | |
| 16253 | - } | |
| 16254 | - } | |
| 16255 | - this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); | |
| 16256 | - if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) { | |
| 16257 | - return; | |
| 16258 | - } | |
| 16259 | - var i; | |
| 16260 | - var len; | |
| 16261 | - var count = 0; | |
| 16262 | - var renderedLetters = this.textAnimator.renderedLetters; | |
| 16263 | - var letters = this.textProperty.currentData.l; | |
| 16264 | - len = letters.length; | |
| 16265 | - var renderedLetter; | |
| 16266 | - var textSpan; | |
| 16267 | - var textPath; | |
| 16268 | - for (i = 0; i < len; i += 1) { | |
| 16269 | - if (letters[i].n) { | |
| 16270 | - count += 1; | |
| 16271 | - } else { | |
| 16272 | - textSpan = this.textSpans[i]; | |
| 16273 | - textPath = this.textPaths[i]; | |
| 16274 | - renderedLetter = renderedLetters[count]; | |
| 16275 | - count += 1; | |
| 16276 | - if (renderedLetter._mdf.m) { | |
| 16277 | - if (!this.isMasked) { | |
| 16278 | - textSpan.style.webkitTransform = renderedLetter.m; | |
| 16279 | - textSpan.style.transform = renderedLetter.m; | |
| 16280 | - } else { | |
| 16281 | - textSpan.setAttribute('transform', renderedLetter.m); | |
| 16282 | - } | |
| 16283 | - } | |
| 16284 | - /// /textSpan.setAttribute('opacity',renderedLetter.o); | |
| 16285 | - textSpan.style.opacity = renderedLetter.o; | |
| 16286 | - if (renderedLetter.sw && renderedLetter._mdf.sw) { | |
| 16287 | - textPath.setAttribute('stroke-width', renderedLetter.sw); | |
| 16288 | - } | |
| 16289 | - if (renderedLetter.sc && renderedLetter._mdf.sc) { | |
| 16290 | - textPath.setAttribute('stroke', renderedLetter.sc); | |
| 16291 | - } | |
| 16292 | - if (renderedLetter.fc && renderedLetter._mdf.fc) { | |
| 16293 | - textPath.setAttribute('fill', renderedLetter.fc); | |
| 16294 | - textPath.style.color = renderedLetter.fc; | |
| 16295 | - } | |
| 16296 | - } | |
| 16297 | - } | |
| 16298 | - if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) { | |
| 16299 | - var boundingBox = this.innerElem.getBBox(); | |
| 16300 | - if (this.currentBBox.w !== boundingBox.width) { | |
| 16301 | - this.currentBBox.w = boundingBox.width; | |
| 16302 | - this.svgElement.setAttribute('width', boundingBox.width); | |
| 16303 | - } | |
| 16304 | - if (this.currentBBox.h !== boundingBox.height) { | |
| 16305 | - this.currentBBox.h = boundingBox.height; | |
| 16306 | - this.svgElement.setAttribute('height', boundingBox.height); | |
| 16307 | - } | |
| 16308 | - var margin = 1; | |
| 16309 | - 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) { | |
| 16310 | - this.currentBBox.w = boundingBox.width + margin * 2; | |
| 16311 | - this.currentBBox.h = boundingBox.height + margin * 2; | |
| 16312 | - this.currentBBox.x = boundingBox.x - margin; | |
| 16313 | - this.currentBBox.y = boundingBox.y - margin; | |
| 16314 | - this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h); | |
| 16315 | - svgStyle = this.svgElement.style; | |
| 16316 | - var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)'; | |
| 16317 | - svgStyle.transform = svgTransform; | |
| 16318 | - svgStyle.webkitTransform = svgTransform; | |
| 16319 | - } | |
| 16320 | - } | |
| 16321 | - }; | |
| 16322 | - | |
| 16323 | - function HCameraElement(data, globalData, comp) { | |
| 16324 | - this.initFrame(); | |
| 16325 | - this.initBaseData(data, globalData, comp); | |
| 16326 | - this.initHierarchy(); | |
| 16327 | - var getProp = PropertyFactory.getProp; | |
| 16328 | - this.pe = getProp(this, data.pe, 0, 0, this); | |
| 16329 | - if (data.ks.p.s) { | |
| 16330 | - this.px = getProp(this, data.ks.p.x, 1, 0, this); | |
| 16331 | - this.py = getProp(this, data.ks.p.y, 1, 0, this); | |
| 16332 | - this.pz = getProp(this, data.ks.p.z, 1, 0, this); | |
| 16333 | - } else { | |
| 16334 | - this.p = getProp(this, data.ks.p, 1, 0, this); | |
| 16335 | - } | |
| 16336 | - if (data.ks.a) { | |
| 16337 | - this.a = getProp(this, data.ks.a, 1, 0, this); | |
| 16338 | - } | |
| 16339 | - if (data.ks.or.k.length && data.ks.or.k[0].to) { | |
| 16340 | - var i; | |
| 16341 | - var len = data.ks.or.k.length; | |
| 16342 | - for (i = 0; i < len; i += 1) { | |
| 16343 | - data.ks.or.k[i].to = null; | |
| 16344 | - data.ks.or.k[i].ti = null; | |
| 16345 | - } | |
| 16346 | - } | |
| 16347 | - this.or = getProp(this, data.ks.or, 1, degToRads, this); | |
| 16348 | - this.or.sh = true; | |
| 16349 | - this.rx = getProp(this, data.ks.rx, 0, degToRads, this); | |
| 16350 | - this.ry = getProp(this, data.ks.ry, 0, degToRads, this); | |
| 16351 | - this.rz = getProp(this, data.ks.rz, 0, degToRads, this); | |
| 16352 | - this.mat = new Matrix(); | |
| 16353 | - this._prevMat = new Matrix(); | |
| 16354 | - this._isFirstFrame = true; | |
| 16355 | - | |
| 16356 | - // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface. | |
| 16357 | - this.finalTransform = { | |
| 16358 | - mProp: this | |
| 16359 | - }; | |
| 16360 | - } | |
| 16361 | - extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement); | |
| 16362 | - HCameraElement.prototype.setup = function () { | |
| 16363 | - var i; | |
| 16364 | - var len = this.comp.threeDElements.length; | |
| 16365 | - var comp; | |
| 16366 | - var perspectiveStyle; | |
| 16367 | - var containerStyle; | |
| 16368 | - for (i = 0; i < len; i += 1) { | |
| 16369 | - // [perspectiveElem,container] | |
| 16370 | - comp = this.comp.threeDElements[i]; | |
| 16371 | - if (comp.type === '3d') { | |
| 16372 | - perspectiveStyle = comp.perspectiveElem.style; | |
| 16373 | - containerStyle = comp.container.style; | |
| 16374 | - var perspective = this.pe.v + 'px'; | |
| 16375 | - var origin = '0px 0px 0px'; | |
| 16376 | - var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)'; | |
| 16377 | - perspectiveStyle.perspective = perspective; | |
| 16378 | - perspectiveStyle.webkitPerspective = perspective; | |
| 16379 | - containerStyle.transformOrigin = origin; | |
| 16380 | - containerStyle.mozTransformOrigin = origin; | |
| 16381 | - containerStyle.webkitTransformOrigin = origin; | |
| 16382 | - perspectiveStyle.transform = matrix; | |
| 16383 | - perspectiveStyle.webkitTransform = matrix; | |
| 16384 | - } | |
| 16385 | - } | |
| 16386 | - }; | |
| 16387 | - HCameraElement.prototype.createElements = function () {}; | |
| 16388 | - HCameraElement.prototype.hide = function () {}; | |
| 16389 | - HCameraElement.prototype.renderFrame = function () { | |
| 16390 | - var _mdf = this._isFirstFrame; | |
| 16391 | - var i; | |
| 16392 | - var len; | |
| 16393 | - if (this.hierarchy) { | |
| 16394 | - len = this.hierarchy.length; | |
| 16395 | - for (i = 0; i < len; i += 1) { | |
| 16396 | - _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf; | |
| 16397 | - } | |
| 16398 | - } | |
| 16399 | - 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) { | |
| 16400 | - this.mat.reset(); | |
| 16401 | - if (this.hierarchy) { | |
| 16402 | - len = this.hierarchy.length - 1; | |
| 16403 | - for (i = len; i >= 0; i -= 1) { | |
| 16404 | - var mTransf = this.hierarchy[i].finalTransform.mProp; | |
| 16405 | - this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]); | |
| 16406 | - this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]); | |
| 16407 | - this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v); | |
| 16408 | - this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]); | |
| 16409 | - this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]); | |
| 16410 | - } | |
| 16411 | - } | |
| 16412 | - if (this.p) { | |
| 16413 | - this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]); | |
| 16414 | - } else { | |
| 16415 | - this.mat.translate(-this.px.v, -this.py.v, this.pz.v); | |
| 16416 | - } | |
| 16417 | - if (this.a) { | |
| 16418 | - var diffVector; | |
| 16419 | - if (this.p) { | |
| 16420 | - diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]]; | |
| 16421 | - } else { | |
| 16422 | - diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]]; | |
| 16423 | - } | |
| 16424 | - var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); | |
| 16425 | - // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v)); | |
| 16426 | - var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag]; | |
| 16427 | - var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]); | |
| 16428 | - var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ); | |
| 16429 | - var mRotationY = Math.atan2(lookDir[0], -lookDir[2]); | |
| 16430 | - this.mat.rotateY(mRotationY).rotateX(-mRotationX); | |
| 16431 | - } | |
| 16432 | - this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v); | |
| 16433 | - this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]); | |
| 16434 | - this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0); | |
| 16435 | - this.mat.translate(0, 0, this.pe.v); | |
| 16436 | - var hasMatrixChanged = !this._prevMat.equals(this.mat); | |
| 16437 | - if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) { | |
| 16438 | - len = this.comp.threeDElements.length; | |
| 16439 | - var comp; | |
| 16440 | - var perspectiveStyle; | |
| 16441 | - var containerStyle; | |
| 16442 | - for (i = 0; i < len; i += 1) { | |
| 16443 | - comp = this.comp.threeDElements[i]; | |
| 16444 | - if (comp.type === '3d') { | |
| 16445 | - if (hasMatrixChanged) { | |
| 16446 | - var matValue = this.mat.toCSS(); | |
| 16447 | - containerStyle = comp.container.style; | |
| 16448 | - containerStyle.transform = matValue; | |
| 16449 | - containerStyle.webkitTransform = matValue; | |
| 16450 | - } | |
| 16451 | - if (this.pe._mdf) { | |
| 16452 | - perspectiveStyle = comp.perspectiveElem.style; | |
| 16453 | - perspectiveStyle.perspective = this.pe.v + 'px'; | |
| 16454 | - perspectiveStyle.webkitPerspective = this.pe.v + 'px'; | |
| 16455 | - } | |
| 16456 | - } | |
| 16457 | - } | |
| 16458 | - this.mat.clone(this._prevMat); | |
| 16459 | - } | |
| 16460 | - } | |
| 16461 | - this._isFirstFrame = false; | |
| 16462 | - }; | |
| 16463 | - HCameraElement.prototype.prepareFrame = function (num) { | |
| 16464 | - this.prepareProperties(num, true); | |
| 16465 | - }; | |
| 16466 | - HCameraElement.prototype.destroy = function () {}; | |
| 16467 | - HCameraElement.prototype.getBaseElement = function () { | |
| 16468 | - return null; | |
| 16469 | - }; | |
| 16470 | - | |
| 16471 | - function HImageElement(data, globalData, comp) { | |
| 16472 | - this.assetData = globalData.getAssetData(data.refId); | |
| 16473 | - this.initElement(data, globalData, comp); | |
| 16474 | - } | |
| 16475 | - extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement); | |
| 16476 | - HImageElement.prototype.createContent = function () { | |
| 16477 | - var assetPath = this.globalData.getAssetsPath(this.assetData); | |
| 16478 | - var img = new Image(); | |
| 16479 | - if (this.data.hasMask) { | |
| 16480 | - this.imageElem = createNS('image'); | |
| 16481 | - this.imageElem.setAttribute('width', this.assetData.w + 'px'); | |
| 16482 | - this.imageElem.setAttribute('height', this.assetData.h + 'px'); | |
| 16483 | - this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath); | |
| 16484 | - this.layerElement.appendChild(this.imageElem); | |
| 16485 | - this.baseElement.setAttribute('width', this.assetData.w); | |
| 16486 | - this.baseElement.setAttribute('height', this.assetData.h); | |
| 16487 | - } else { | |
| 16488 | - this.layerElement.appendChild(img); | |
| 16489 | - } | |
| 16490 | - img.crossOrigin = 'anonymous'; | |
| 16491 | - img.src = assetPath; | |
| 16492 | - if (this.data.ln) { | |
| 16493 | - this.baseElement.setAttribute('id', this.data.ln); | |
| 16494 | - } | |
| 16495 | - }; | |
| 16496 | - | |
| 16497 | - function HybridRendererBase(animationItem, config) { | |
| 16498 | - this.animationItem = animationItem; | |
| 16499 | - this.layers = null; | |
| 16500 | - this.renderedFrame = -1; | |
| 16501 | - this.renderConfig = { | |
| 16502 | - className: config && config.className || '', | |
| 16503 | - imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice', | |
| 16504 | - hideOnTransparent: !(config && config.hideOnTransparent === false), | |
| 16505 | - filterSize: { | |
| 16506 | - width: config && config.filterSize && config.filterSize.width || '400%', | |
| 16507 | - height: config && config.filterSize && config.filterSize.height || '400%', | |
| 16508 | - x: config && config.filterSize && config.filterSize.x || '-100%', | |
| 16509 | - y: config && config.filterSize && config.filterSize.y || '-100%' | |
| 16510 | - } | |
| 16511 | - }; | |
| 16512 | - this.globalData = { | |
| 16513 | - _mdf: false, | |
| 16514 | - frameNum: -1, | |
| 16515 | - renderConfig: this.renderConfig | |
| 16516 | - }; | |
| 16517 | - this.pendingElements = []; | |
| 16518 | - this.elements = []; | |
| 16519 | - this.threeDElements = []; | |
| 16520 | - this.destroyed = false; | |
| 16521 | - this.camera = null; | |
| 16522 | - this.supports3d = true; | |
| 16523 | - this.rendererType = 'html'; | |
| 16524 | - } | |
| 16525 | - extendPrototype([BaseRenderer], HybridRendererBase); | |
| 16526 | - HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem; | |
| 16527 | - HybridRendererBase.prototype.checkPendingElements = function () { | |
| 16528 | - while (this.pendingElements.length) { | |
| 16529 | - var element = this.pendingElements.pop(); | |
| 16530 | - element.checkParenting(); | |
| 16531 | - } | |
| 16532 | - }; | |
| 16533 | - HybridRendererBase.prototype.appendElementInPos = function (element, pos) { | |
| 16534 | - var newDOMElement = element.getBaseElement(); | |
| 16535 | - if (!newDOMElement) { | |
| 16536 | - return; | |
| 16537 | - } | |
| 16538 | - var layer = this.layers[pos]; | |
| 16539 | - if (!layer.ddd || !this.supports3d) { | |
| 16540 | - if (this.threeDElements) { | |
| 16541 | - this.addTo3dContainer(newDOMElement, pos); | |
| 16542 | - } else { | |
| 16543 | - var i = 0; | |
| 16544 | - var nextDOMElement; | |
| 16545 | - var nextLayer; | |
| 16546 | - var tmpDOMElement; | |
| 16547 | - while (i < pos) { | |
| 16548 | - if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) { | |
| 16549 | - nextLayer = this.elements[i]; | |
| 16550 | - tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement(); | |
| 16551 | - nextDOMElement = tmpDOMElement || nextDOMElement; | |
| 16552 | - } | |
| 16553 | - i += 1; | |
| 16554 | - } | |
| 16555 | - if (nextDOMElement) { | |
| 16556 | - if (!layer.ddd || !this.supports3d) { | |
| 16557 | - this.layerElement.insertBefore(newDOMElement, nextDOMElement); | |
| 16558 | - } | |
| 16559 | - } else if (!layer.ddd || !this.supports3d) { | |
| 16560 | - this.layerElement.appendChild(newDOMElement); | |
| 16561 | - } | |
| 16562 | - } | |
| 16563 | - } else { | |
| 16564 | - this.addTo3dContainer(newDOMElement, pos); | |
| 16565 | - } | |
| 16566 | - }; | |
| 16567 | - HybridRendererBase.prototype.createShape = function (data) { | |
| 16568 | - if (!this.supports3d) { | |
| 16569 | - return new SVGShapeElement(data, this.globalData, this); | |
| 16570 | - } | |
| 16571 | - return new HShapeElement(data, this.globalData, this); | |
| 16572 | - }; | |
| 16573 | - HybridRendererBase.prototype.createText = function (data) { | |
| 16574 | - if (!this.supports3d) { | |
| 16575 | - return new SVGTextLottieElement(data, this.globalData, this); | |
| 16576 | - } | |
| 16577 | - return new HTextElement(data, this.globalData, this); | |
| 16578 | - }; | |
| 16579 | - HybridRendererBase.prototype.createCamera = function (data) { | |
| 16580 | - this.camera = new HCameraElement(data, this.globalData, this); | |
| 16581 | - return this.camera; | |
| 16582 | - }; | |
| 16583 | - HybridRendererBase.prototype.createImage = function (data) { | |
| 16584 | - if (!this.supports3d) { | |
| 16585 | - return new IImageElement(data, this.globalData, this); | |
| 16586 | - } | |
| 16587 | - return new HImageElement(data, this.globalData, this); | |
| 16588 | - }; | |
| 16589 | - HybridRendererBase.prototype.createSolid = function (data) { | |
| 16590 | - if (!this.supports3d) { | |
| 16591 | - return new ISolidElement(data, this.globalData, this); | |
| 16592 | - } | |
| 16593 | - return new HSolidElement(data, this.globalData, this); | |
| 16594 | - }; | |
| 16595 | - HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; | |
| 16596 | - HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) { | |
| 16597 | - var i = 0; | |
| 16598 | - var len = this.threeDElements.length; | |
| 16599 | - while (i < len) { | |
| 16600 | - if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) { | |
| 16601 | - return this.threeDElements[i].perspectiveElem; | |
| 16602 | - } | |
| 16603 | - i += 1; | |
| 16604 | - } | |
| 16605 | - return null; | |
| 16606 | - }; | |
| 16607 | - HybridRendererBase.prototype.createThreeDContainer = function (pos, type) { | |
| 16608 | - var perspectiveElem = createTag('div'); | |
| 16609 | - var style; | |
| 16610 | - var containerStyle; | |
| 16611 | - styleDiv(perspectiveElem); | |
| 16612 | - var container = createTag('div'); | |
| 16613 | - styleDiv(container); | |
| 16614 | - if (type === '3d') { | |
| 16615 | - style = perspectiveElem.style; | |
| 16616 | - style.width = this.globalData.compSize.w + 'px'; | |
| 16617 | - style.height = this.globalData.compSize.h + 'px'; | |
| 16618 | - var center = '50% 50%'; | |
| 16619 | - style.webkitTransformOrigin = center; | |
| 16620 | - style.mozTransformOrigin = center; | |
| 16621 | - style.transformOrigin = center; | |
| 16622 | - containerStyle = container.style; | |
| 16623 | - var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)'; | |
| 16624 | - containerStyle.transform = matrix; | |
| 16625 | - containerStyle.webkitTransform = matrix; | |
| 16626 | - } | |
| 16627 | - perspectiveElem.appendChild(container); | |
| 16628 | - // this.resizerElem.appendChild(perspectiveElem); | |
| 16629 | - var threeDContainerData = { | |
| 16630 | - container: container, | |
| 16631 | - perspectiveElem: perspectiveElem, | |
| 16632 | - startPos: pos, | |
| 16633 | - endPos: pos, | |
| 16634 | - type: type | |
| 16635 | - }; | |
| 16636 | - this.threeDElements.push(threeDContainerData); | |
| 16637 | - return threeDContainerData; | |
| 16638 | - }; | |
| 16639 | - HybridRendererBase.prototype.build3dContainers = function () { | |
| 16640 | - var i; | |
| 16641 | - var len = this.layers.length; | |
| 16642 | - var lastThreeDContainerData; | |
| 16643 | - var currentContainer = ''; | |
| 16644 | - for (i = 0; i < len; i += 1) { | |
| 16645 | - if (this.layers[i].ddd && this.layers[i].ty !== 3) { | |
| 16646 | - if (currentContainer !== '3d') { | |
| 16647 | - currentContainer = '3d'; | |
| 16648 | - lastThreeDContainerData = this.createThreeDContainer(i, '3d'); | |
| 16649 | - } | |
| 16650 | - lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i); | |
| 16651 | - } else { | |
| 16652 | - if (currentContainer !== '2d') { | |
| 16653 | - currentContainer = '2d'; | |
| 16654 | - lastThreeDContainerData = this.createThreeDContainer(i, '2d'); | |
| 16655 | - } | |
| 16656 | - lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i); | |
| 16657 | - } | |
| 16658 | - } | |
| 16659 | - len = this.threeDElements.length; | |
| 16660 | - for (i = len - 1; i >= 0; i -= 1) { | |
| 16661 | - this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem); | |
| 16662 | - } | |
| 16663 | - }; | |
| 16664 | - HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) { | |
| 16665 | - var i = 0; | |
| 16666 | - var len = this.threeDElements.length; | |
| 16667 | - while (i < len) { | |
| 16668 | - if (pos <= this.threeDElements[i].endPos) { | |
| 16669 | - var j = this.threeDElements[i].startPos; | |
| 16670 | - var nextElement; | |
| 16671 | - while (j < pos) { | |
| 16672 | - if (this.elements[j] && this.elements[j].getBaseElement) { | |
| 16673 | - nextElement = this.elements[j].getBaseElement(); | |
| 16674 | - } | |
| 16675 | - j += 1; | |
| 16676 | - } | |
| 16677 | - if (nextElement) { | |
| 16678 | - this.threeDElements[i].container.insertBefore(elem, nextElement); | |
| 16679 | - } else { | |
| 16680 | - this.threeDElements[i].container.appendChild(elem); | |
| 16681 | - } | |
| 16682 | - break; | |
| 16683 | - } | |
| 16684 | - i += 1; | |
| 16685 | - } | |
| 16686 | - }; | |
| 16687 | - HybridRendererBase.prototype.configAnimation = function (animData) { | |
| 16688 | - var resizerElem = createTag('div'); | |
| 16689 | - var wrapper = this.animationItem.wrapper; | |
| 16690 | - var style = resizerElem.style; | |
| 16691 | - style.width = animData.w + 'px'; | |
| 16692 | - style.height = animData.h + 'px'; | |
| 16693 | - this.resizerElem = resizerElem; | |
| 16694 | - styleDiv(resizerElem); | |
| 16695 | - style.transformStyle = 'flat'; | |
| 16696 | - style.mozTransformStyle = 'flat'; | |
| 16697 | - style.webkitTransformStyle = 'flat'; | |
| 16698 | - if (this.renderConfig.className) { | |
| 16699 | - resizerElem.setAttribute('class', this.renderConfig.className); | |
| 16700 | - } | |
| 16701 | - wrapper.appendChild(resizerElem); | |
| 16702 | - style.overflow = 'hidden'; | |
| 16703 | - var svg = createNS('svg'); | |
| 16704 | - svg.setAttribute('width', '1'); | |
| 16705 | - svg.setAttribute('height', '1'); | |
| 16706 | - styleDiv(svg); | |
| 16707 | - this.resizerElem.appendChild(svg); | |
| 16708 | - var defs = createNS('defs'); | |
| 16709 | - svg.appendChild(defs); | |
| 16710 | - this.data = animData; | |
| 16711 | - // Mask animation | |
| 16712 | - this.setupGlobalData(animData, svg); | |
| 16713 | - this.globalData.defs = defs; | |
| 16714 | - this.layers = animData.layers; | |
| 16715 | - this.layerElement = this.resizerElem; | |
| 16716 | - this.build3dContainers(); | |
| 16717 | - this.updateContainerSize(); | |
| 16718 | - }; | |
| 16719 | - HybridRendererBase.prototype.destroy = function () { | |
| 16720 | - if (this.animationItem.wrapper) { | |
| 16721 | - this.animationItem.wrapper.innerText = ''; | |
| 16722 | - } | |
| 16723 | - this.animationItem.container = null; | |
| 16724 | - this.globalData.defs = null; | |
| 16725 | - var i; | |
| 16726 | - var len = this.layers ? this.layers.length : 0; | |
| 16727 | - for (i = 0; i < len; i += 1) { | |
| 16728 | - if (this.elements[i] && this.elements[i].destroy) { | |
| 16729 | - this.elements[i].destroy(); | |
| 16730 | - } | |
| 16731 | - } | |
| 16732 | - this.elements.length = 0; | |
| 16733 | - this.destroyed = true; | |
| 16734 | - this.animationItem = null; | |
| 16735 | - }; | |
| 16736 | - HybridRendererBase.prototype.updateContainerSize = function () { | |
| 16737 | - var elementWidth = this.animationItem.wrapper.offsetWidth; | |
| 16738 | - var elementHeight = this.animationItem.wrapper.offsetHeight; | |
| 16739 | - var elementRel = elementWidth / elementHeight; | |
| 16740 | - var animationRel = this.globalData.compSize.w / this.globalData.compSize.h; | |
| 16741 | - var sx; | |
| 16742 | - var sy; | |
| 16743 | - var tx; | |
| 16744 | - var ty; | |
| 16745 | - if (animationRel > elementRel) { | |
| 16746 | - sx = elementWidth / this.globalData.compSize.w; | |
| 16747 | - sy = elementWidth / this.globalData.compSize.w; | |
| 16748 | - tx = 0; | |
| 16749 | - ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2; | |
| 16750 | - } else { | |
| 16751 | - sx = elementHeight / this.globalData.compSize.h; | |
| 16752 | - sy = elementHeight / this.globalData.compSize.h; | |
| 16753 | - tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2; | |
| 16754 | - ty = 0; | |
| 16755 | - } | |
| 16756 | - var style = this.resizerElem.style; | |
| 16757 | - style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)'; | |
| 16758 | - style.transform = style.webkitTransform; | |
| 16759 | - }; | |
| 16760 | - HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame; | |
| 16761 | - HybridRendererBase.prototype.hide = function () { | |
| 16762 | - this.resizerElem.style.display = 'none'; | |
| 16763 | - }; | |
| 16764 | - HybridRendererBase.prototype.show = function () { | |
| 16765 | - this.resizerElem.style.display = 'block'; | |
| 16766 | - }; | |
| 16767 | - HybridRendererBase.prototype.initItems = function () { | |
| 16768 | - this.buildAllItems(); | |
| 16769 | - if (this.camera) { | |
| 16770 | - this.camera.setup(); | |
| 16771 | - } else { | |
| 16772 | - var cWidth = this.globalData.compSize.w; | |
| 16773 | - var cHeight = this.globalData.compSize.h; | |
| 16774 | - var i; | |
| 16775 | - var len = this.threeDElements.length; | |
| 16776 | - for (i = 0; i < len; i += 1) { | |
| 16777 | - var style = this.threeDElements[i].perspectiveElem.style; | |
| 16778 | - style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px'; | |
| 16779 | - style.perspective = style.webkitPerspective; | |
| 16780 | - } | |
| 16781 | - } | |
| 16782 | - }; | |
| 16783 | - HybridRendererBase.prototype.searchExtraCompositions = function (assets) { | |
| 16784 | - var i; | |
| 16785 | - var len = assets.length; | |
| 16786 | - var floatingContainer = createTag('div'); | |
| 16787 | - for (i = 0; i < len; i += 1) { | |
| 16788 | - if (assets[i].xt) { | |
| 16789 | - var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null); | |
| 16790 | - comp.initExpressions(); | |
| 16791 | - this.globalData.projectInterface.registerComposition(comp); | |
| 16792 | - } | |
| 16793 | - } | |
| 16794 | - }; | |
| 16795 | - | |
| 16796 | - function HCompElement(data, globalData, comp) { | |
| 16797 | - this.layers = data.layers; | |
| 16798 | - this.supports3d = !data.hasMask; | |
| 16799 | - this.completeLayers = false; | |
| 16800 | - this.pendingElements = []; | |
| 16801 | - this.elements = this.layers ? createSizedArray(this.layers.length) : []; | |
| 16802 | - this.initElement(data, globalData, comp); | |
| 16803 | - this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { | |
| 16804 | - _placeholder: true | |
| 16805 | - }; | |
| 16806 | - } | |
| 16807 | - extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement); | |
| 16808 | - HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements; | |
| 16809 | - HCompElement.prototype.createContainerElements = function () { | |
| 16810 | - this._createBaseContainerElements(); | |
| 16811 | - // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)'; | |
| 16812 | - if (this.data.hasMask) { | |
| 16813 | - this.svgElement.setAttribute('width', this.data.w); | |
| 16814 | - this.svgElement.setAttribute('height', this.data.h); | |
| 16815 | - this.transformedElement = this.baseElement; | |
| 16816 | - } else { | |
| 16817 | - this.transformedElement = this.layerElement; | |
| 16818 | - } | |
| 16819 | - }; | |
| 16820 | - HCompElement.prototype.addTo3dContainer = function (elem, pos) { | |
| 16821 | - var j = 0; | |
| 16822 | - var nextElement; | |
| 16823 | - while (j < pos) { | |
| 16824 | - if (this.elements[j] && this.elements[j].getBaseElement) { | |
| 16825 | - nextElement = this.elements[j].getBaseElement(); | |
| 16826 | - } | |
| 16827 | - j += 1; | |
| 16828 | - } | |
| 16829 | - if (nextElement) { | |
| 16830 | - this.layerElement.insertBefore(elem, nextElement); | |
| 16831 | - } else { | |
| 16832 | - this.layerElement.appendChild(elem); | |
| 16833 | - } | |
| 16834 | - }; | |
| 16835 | - HCompElement.prototype.createComp = function (data) { | |
| 16836 | - if (!this.supports3d) { | |
| 16837 | - return new SVGCompElement(data, this.globalData, this); | |
| 16838 | - } | |
| 16839 | - return new HCompElement(data, this.globalData, this); | |
| 16840 | - }; | |
| 16841 | - | |
| 16842 | - function HybridRenderer(animationItem, config) { | |
| 16843 | - this.animationItem = animationItem; | |
| 16844 | - this.layers = null; | |
| 16845 | - this.renderedFrame = -1; | |
| 16846 | - this.renderConfig = { | |
| 16847 | - className: config && config.className || '', | |
| 16848 | - imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice', | |
| 16849 | - hideOnTransparent: !(config && config.hideOnTransparent === false), | |
| 16850 | - filterSize: { | |
| 16851 | - width: config && config.filterSize && config.filterSize.width || '400%', | |
| 16852 | - height: config && config.filterSize && config.filterSize.height || '400%', | |
| 16853 | - x: config && config.filterSize && config.filterSize.x || '-100%', | |
| 16854 | - y: config && config.filterSize && config.filterSize.y || '-100%' | |
| 16855 | - }, | |
| 16856 | - runExpressions: !config || config.runExpressions === undefined || config.runExpressions | |
| 16857 | - }; | |
| 16858 | - this.globalData = { | |
| 16859 | - _mdf: false, | |
| 16860 | - frameNum: -1, | |
| 16861 | - renderConfig: this.renderConfig | |
| 16862 | - }; | |
| 16863 | - this.pendingElements = []; | |
| 16864 | - this.elements = []; | |
| 16865 | - this.threeDElements = []; | |
| 16866 | - this.destroyed = false; | |
| 16867 | - this.camera = null; | |
| 16868 | - this.supports3d = true; | |
| 16869 | - this.rendererType = 'html'; | |
| 16870 | - } | |
| 16871 | - extendPrototype([HybridRendererBase], HybridRenderer); | |
| 16872 | - HybridRenderer.prototype.createComp = function (data) { | |
| 16873 | - if (!this.supports3d) { | |
| 16874 | - return new SVGCompElement(data, this.globalData, this); | |
| 16875 | - } | |
| 16876 | - return new HCompElement(data, this.globalData, this); | |
| 16877 | - }; | |
| 16878 | - | |
| 16879 | - var CompExpressionInterface = function () { | |
| 16880 | - return function (comp) { | |
| 16881 | - function _thisLayerFunction(name) { | |
| 16882 | - var i = 0; | |
| 16883 | - var len = comp.layers.length; | |
| 16884 | - while (i < len) { | |
| 16885 | - if (comp.layers[i].nm === name || comp.layers[i].ind === name) { | |
| 16886 | - return comp.elements[i].layerInterface; | |
| 16887 | - } | |
| 16888 | - i += 1; | |
| 16889 | - } | |
| 16890 | - return null; | |
| 16891 | - // return {active:false}; | |
| 16892 | - } | |
| 16893 | - Object.defineProperty(_thisLayerFunction, '_name', { | |
| 16894 | - value: comp.data.nm | |
| 16895 | - }); | |
| 16896 | - _thisLayerFunction.layer = _thisLayerFunction; | |
| 16897 | - _thisLayerFunction.pixelAspect = 1; | |
| 16898 | - _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h; | |
| 16899 | - _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w; | |
| 16900 | - _thisLayerFunction.pixelAspect = 1; | |
| 16901 | - _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate; | |
| 16902 | - _thisLayerFunction.displayStartTime = 0; | |
| 16903 | - _thisLayerFunction.numLayers = comp.layers.length; | |
| 16904 | - return _thisLayerFunction; | |
| 16905 | - }; | |
| 16906 | - }(); | |
| 16907 | - | |
| 16908 | - function _typeof$2(o) { "@babel/helpers - typeof"; return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$2(o); } | |
| 16909 | - /* eslint-disable */ | |
| 16910 | - /* | |
| 16911 | - Copyright 2014 David Bau. | |
| 16912 | - | |
| 16913 | - Permission is hereby granted, free of charge, to any person obtaining | |
| 16914 | - a copy of this software and associated documentation files (the | |
| 16915 | - "Software"), to deal in the Software without restriction, including | |
| 16916 | - without limitation the rights to use, copy, modify, merge, publish, | |
| 16917 | - distribute, sublicense, and/or sell copies of the Software, and to | |
| 16918 | - permit persons to whom the Software is furnished to do so, subject to | |
| 16919 | - the following conditions: | |
| 16920 | - | |
| 16921 | - The above copyright notice and this permission notice shall be | |
| 16922 | - included in all copies or substantial portions of the Software. | |
| 16923 | - | |
| 16924 | - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
| 16925 | - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
| 16926 | - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
| 16927 | - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |
| 16928 | - CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
| 16929 | - TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
| 16930 | - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
| 16931 | - | |
| 16932 | - */ | |
| 16933 | - | |
| 16934 | - function seedRandom(pool, math) { | |
| 16935 | - // | |
| 16936 | - // The following constants are related to IEEE 754 limits. | |
| 16937 | - // | |
| 16938 | - var global = this, | |
| 16939 | - width = 256, | |
| 16940 | - // each RC4 output is 0 <= x < 256 | |
| 16941 | - chunks = 6, | |
| 16942 | - // at least six RC4 outputs for each double | |
| 16943 | - digits = 52, | |
| 16944 | - // there are 52 significant digits in a double | |
| 16945 | - rngname = 'random', | |
| 16946 | - // rngname: name for Math.random and Math.seedrandom | |
| 16947 | - startdenom = math.pow(width, chunks), | |
| 16948 | - significance = math.pow(2, digits), | |
| 16949 | - overflow = significance * 2, | |
| 16950 | - mask = width - 1, | |
| 16951 | - nodecrypto; // node.js crypto module, initialized at the bottom. | |
| 16952 | - | |
| 16953 | - // | |
| 16954 | - // seedrandom() | |
| 16955 | - // This is the seedrandom function described above. | |
| 16956 | - // | |
| 16957 | - function seedrandom(seed, options, callback) { | |
| 16958 | - var key = []; | |
| 16959 | - options = options === true ? { | |
| 16960 | - entropy: true | |
| 16961 | - } : options || {}; | |
| 16962 | - | |
| 16963 | - // Flatten the seed string or build one from local entropy if needed. | |
| 16964 | - var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); | |
| 16965 | - | |
| 16966 | - // Use the seed to initialize an ARC4 generator. | |
| 16967 | - var arc4 = new ARC4(key); | |
| 16968 | - | |
| 16969 | - // This function returns a random double in [0, 1) that contains | |
| 16970 | - // randomness in every bit of the mantissa of the IEEE 754 value. | |
| 16971 | - var prng = function prng() { | |
| 16972 | - var n = arc4.g(chunks), | |
| 16973 | - // Start with a numerator n < 2 ^ 48 | |
| 16974 | - d = startdenom, | |
| 16975 | - // and denominator d = 2 ^ 48. | |
| 16976 | - x = 0; // and no 'extra last byte'. | |
| 16977 | - while (n < significance) { | |
| 16978 | - // Fill up all significant digits by | |
| 16979 | - n = (n + x) * width; // shifting numerator and | |
| 16980 | - d *= width; // denominator and generating a | |
| 16981 | - x = arc4.g(1); // new least-significant-byte. | |
| 16982 | - } | |
| 16983 | - while (n >= overflow) { | |
| 16984 | - // To avoid rounding up, before adding | |
| 16985 | - n /= 2; // last byte, shift everything | |
| 16986 | - d /= 2; // right using integer math until | |
| 16987 | - x >>>= 1; // we have exactly the desired bits. | |
| 16988 | - } | |
| 16989 | - return (n + x) / d; // Form the number within [0, 1). | |
| 16990 | - }; | |
| 16991 | - prng.int32 = function () { | |
| 16992 | - return arc4.g(4) | 0; | |
| 16993 | - }; | |
| 16994 | - prng.quick = function () { | |
| 16995 | - return arc4.g(4) / 0x100000000; | |
| 16996 | - }; | |
| 16997 | - prng["double"] = prng; | |
| 16998 | - | |
| 16999 | - // Mix the randomness into accumulated entropy. | |
| 17000 | - mixkey(tostring(arc4.S), pool); | |
| 17001 | - | |
| 17002 | - // Calling convention: what to return as a function of prng, seed, is_math. | |
| 17003 | - return (options.pass || callback || function (prng, seed, is_math_call, state) { | |
| 17004 | - if (state) { | |
| 17005 | - // Load the arc4 state from the given state if it has an S array. | |
| 17006 | - if (state.S) { | |
| 17007 | - copy(state, arc4); | |
| 17008 | - } | |
| 17009 | - // Only provide the .state method if requested via options.state. | |
| 17010 | - prng.state = function () { | |
| 17011 | - return copy(arc4, {}); | |
| 17012 | - }; | |
| 17013 | - } | |
| 17014 | - | |
| 17015 | - // If called as a method of Math (Math.seedrandom()), mutate | |
| 17016 | - // Math.random because that is how seedrandom.js has worked since v1.0. | |
| 17017 | - if (is_math_call) { | |
| 17018 | - math[rngname] = prng; | |
| 17019 | - return seed; | |
| 17020 | - } | |
| 17021 | - | |
| 17022 | - // Otherwise, it is a newer calling convention, so return the | |
| 17023 | - // prng directly. | |
| 17024 | - else return prng; | |
| 17025 | - })(prng, shortseed, 'global' in options ? options.global : this == math, options.state); | |
| 17026 | - } | |
| 17027 | - math['seed' + rngname] = seedrandom; | |
| 17028 | - | |
| 17029 | - // | |
| 17030 | - // ARC4 | |
| 17031 | - // | |
| 17032 | - // An ARC4 implementation. The constructor takes a key in the form of | |
| 17033 | - // an array of at most (width) integers that should be 0 <= x < (width). | |
| 17034 | - // | |
| 17035 | - // The g(count) method returns a pseudorandom integer that concatenates | |
| 17036 | - // the next (count) outputs from ARC4. Its return value is a number x | |
| 17037 | - // that is in the range 0 <= x < (width ^ count). | |
| 17038 | - // | |
| 17039 | - function ARC4(key) { | |
| 17040 | - var t, | |
| 17041 | - keylen = key.length, | |
| 17042 | - me = this, | |
| 17043 | - i = 0, | |
| 17044 | - j = me.i = me.j = 0, | |
| 17045 | - s = me.S = []; | |
| 17046 | - | |
| 17047 | - // The empty key [] is treated as [0]. | |
| 17048 | - if (!keylen) { | |
| 17049 | - key = [keylen++]; | |
| 17050 | - } | |
| 17051 | - | |
| 17052 | - // Set up S using the standard key scheduling algorithm. | |
| 17053 | - while (i < width) { | |
| 17054 | - s[i] = i++; | |
| 17055 | - } | |
| 17056 | - for (i = 0; i < width; i++) { | |
| 17057 | - s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])]; | |
| 17058 | - s[j] = t; | |
| 17059 | - } | |
| 17060 | - | |
| 17061 | - // The "g" method returns the next (count) outputs as one number. | |
| 17062 | - me.g = function (count) { | |
| 17063 | - // Using instance members instead of closure state nearly doubles speed. | |
| 17064 | - var t, | |
| 17065 | - r = 0, | |
| 17066 | - i = me.i, | |
| 17067 | - j = me.j, | |
| 17068 | - s = me.S; | |
| 17069 | - while (count--) { | |
| 17070 | - t = s[i = mask & i + 1]; | |
| 17071 | - r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)]; | |
| 17072 | - } | |
| 17073 | - me.i = i; | |
| 17074 | - me.j = j; | |
| 17075 | - return r; | |
| 17076 | - // For robust unpredictability, the function call below automatically | |
| 17077 | - // discards an initial batch of values. This is called RC4-drop[256]. | |
| 17078 | - // See http://google.com/search?q=rsa+fluhrer+response&btnI | |
| 17079 | - }; | |
| 17080 | - } | |
| 17081 | - | |
| 17082 | - // | |
| 17083 | - // copy() | |
| 17084 | - // Copies internal state of ARC4 to or from a plain object. | |
| 17085 | - // | |
| 17086 | - function copy(f, t) { | |
| 17087 | - t.i = f.i; | |
| 17088 | - t.j = f.j; | |
| 17089 | - t.S = f.S.slice(); | |
| 17090 | - return t; | |
| 17091 | - } | |
| 17092 | - | |
| 17093 | - // | |
| 17094 | - // flatten() | |
| 17095 | - // Converts an object tree to nested arrays of strings. | |
| 17096 | - // | |
| 17097 | - function flatten(obj, depth) { | |
| 17098 | - var result = [], | |
| 17099 | - typ = _typeof$2(obj), | |
| 17100 | - prop; | |
| 17101 | - if (depth && typ == 'object') { | |
| 17102 | - for (prop in obj) { | |
| 17103 | - try { | |
| 17104 | - result.push(flatten(obj[prop], depth - 1)); | |
| 17105 | - } catch (e) {} | |
| 17106 | - } | |
| 17107 | - } | |
| 17108 | - return result.length ? result : typ == 'string' ? obj : obj + '\0'; | |
| 17109 | - } | |
| 17110 | - | |
| 17111 | - // | |
| 17112 | - // mixkey() | |
| 17113 | - // Mixes a string seed into a key that is an array of integers, and | |
| 17114 | - // returns a shortened string seed that is equivalent to the result key. | |
| 17115 | - // | |
| 17116 | - function mixkey(seed, key) { | |
| 17117 | - var stringseed = seed + '', | |
| 17118 | - smear, | |
| 17119 | - j = 0; | |
| 17120 | - while (j < stringseed.length) { | |
| 17121 | - key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++); | |
| 17122 | - } | |
| 17123 | - return tostring(key); | |
| 17124 | - } | |
| 17125 | - | |
| 17126 | - // | |
| 17127 | - // autoseed() | |
| 17128 | - // Returns an object for autoseeding, using window.crypto and Node crypto | |
| 17129 | - // module if available. | |
| 17130 | - // | |
| 17131 | - function autoseed() { | |
| 17132 | - try { | |
| 17133 | - if (nodecrypto) { | |
| 17134 | - return tostring(nodecrypto.randomBytes(width)); | |
| 17135 | - } | |
| 17136 | - var out = new Uint8Array(width); | |
| 17137 | - (global.crypto || global.msCrypto).getRandomValues(out); | |
| 17138 | - return tostring(out); | |
| 17139 | - } catch (e) { | |
| 17140 | - var browser = global.navigator, | |
| 17141 | - plugins = browser && browser.plugins; | |
| 17142 | - return [+new Date(), global, plugins, global.screen, tostring(pool)]; | |
| 17143 | - } | |
| 17144 | - } | |
| 17145 | - | |
| 17146 | - // | |
| 17147 | - // tostring() | |
| 17148 | - // Converts an array of charcodes to a string | |
| 17149 | - // | |
| 17150 | - function tostring(a) { | |
| 17151 | - return String.fromCharCode.apply(0, a); | |
| 17152 | - } | |
| 17153 | - | |
| 17154 | - // | |
| 17155 | - // When seedrandom.js is loaded, we immediately mix a few bits | |
| 17156 | - // from the built-in RNG into the entropy pool. Because we do | |
| 17157 | - // not want to interfere with deterministic PRNG state later, | |
| 17158 | - // seedrandom will not call math.random on its own again after | |
| 17159 | - // initialization. | |
| 17160 | - // | |
| 17161 | - mixkey(math.random(), pool); | |
| 17162 | - | |
| 17163 | - // | |
| 17164 | - // Nodejs and AMD support: export the implementation as a module using | |
| 17165 | - // either convention. | |
| 17166 | - // | |
| 17167 | - | |
| 17168 | - // End anonymous scope, and pass initial values. | |
| 17169 | - } | |
| 17170 | - ; | |
| 17171 | - function initialize$2(BMMath) { | |
| 17172 | - seedRandom([], BMMath); | |
| 17173 | - } | |
| 17174 | - | |
| 17175 | - var propTypes = { | |
| 17176 | - SHAPE: 'shape' | |
| 17177 | - }; | |
| 17178 | - | |
| 17179 | - function _typeof$1(o) { "@babel/helpers - typeof"; return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$1(o); } | |
| 17180 | - var ExpressionManager = function () { | |
| 17181 | - 'use strict'; | |
| 17182 | - | |
| 17183 | - var ob = {}; | |
| 17184 | - var Math = BMMath; | |
| 17185 | - var window = null; | |
| 17186 | - var document = null; | |
| 17187 | - var XMLHttpRequest = null; | |
| 17188 | - var fetch = null; | |
| 17189 | - var frames = null; | |
| 17190 | - var _lottieGlobal = {}; | |
| 17191 | - initialize$2(BMMath); | |
| 17192 | - function resetFrame() { | |
| 17193 | - _lottieGlobal = {}; | |
| 17194 | - } | |
| 17195 | - function $bm_isInstanceOfArray(arr) { | |
| 17196 | - return arr.constructor === Array || arr.constructor === Float32Array; | |
| 17197 | - } | |
| 17198 | - function isNumerable(tOfV, v) { | |
| 17199 | - return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string'; | |
| 17200 | - } | |
| 17201 | - function $bm_neg(a) { | |
| 17202 | - var tOfA = _typeof$1(a); | |
| 17203 | - if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') { | |
| 17204 | - return -a; | |
| 17205 | - } | |
| 17206 | - if ($bm_isInstanceOfArray(a)) { | |
| 17207 | - var i; | |
| 17208 | - var lenA = a.length; | |
| 17209 | - var retArr = []; | |
| 17210 | - for (i = 0; i < lenA; i += 1) { | |
| 17211 | - retArr[i] = -a[i]; | |
| 17212 | - } | |
| 17213 | - return retArr; | |
| 17214 | - } | |
| 17215 | - if (a.propType) { | |
| 17216 | - return a.v; | |
| 17217 | - } | |
| 17218 | - return -a; | |
| 17219 | - } | |
| 17220 | - var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get; | |
| 17221 | - var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get; | |
| 17222 | - var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get; | |
| 17223 | - function sum(a, b) { | |
| 17224 | - var tOfA = _typeof$1(a); | |
| 17225 | - var tOfB = _typeof$1(b); | |
| 17226 | - if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') { | |
| 17227 | - return a + b; | |
| 17228 | - } | |
| 17229 | - if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { | |
| 17230 | - a = a.slice(0); | |
| 17231 | - a[0] += b; | |
| 17232 | - return a; | |
| 17233 | - } | |
| 17234 | - if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { | |
| 17235 | - b = b.slice(0); | |
| 17236 | - b[0] = a + b[0]; | |
| 17237 | - return b; | |
| 17238 | - } | |
| 17239 | - if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) { | |
| 17240 | - var i = 0; | |
| 17241 | - var lenA = a.length; | |
| 17242 | - var lenB = b.length; | |
| 17243 | - var retArr = []; | |
| 17244 | - while (i < lenA || i < lenB) { | |
| 17245 | - if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) { | |
| 17246 | - retArr[i] = a[i] + b[i]; | |
| 17247 | - } else { | |
| 17248 | - retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i]; | |
| 17249 | - } | |
| 17250 | - i += 1; | |
| 17251 | - } | |
| 17252 | - return retArr; | |
| 17253 | - } | |
| 17254 | - return 0; | |
| 17255 | - } | |
| 17256 | - var add = sum; | |
| 17257 | - function sub(a, b) { | |
| 17258 | - var tOfA = _typeof$1(a); | |
| 17259 | - var tOfB = _typeof$1(b); | |
| 17260 | - if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) { | |
| 17261 | - if (tOfA === 'string') { | |
| 17262 | - a = parseInt(a, 10); | |
| 17263 | - } | |
| 17264 | - if (tOfB === 'string') { | |
| 17265 | - b = parseInt(b, 10); | |
| 17266 | - } | |
| 17267 | - return a - b; | |
| 17268 | - } | |
| 17269 | - if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { | |
| 17270 | - a = a.slice(0); | |
| 17271 | - a[0] -= b; | |
| 17272 | - return a; | |
| 17273 | - } | |
| 17274 | - if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { | |
| 17275 | - b = b.slice(0); | |
| 17276 | - b[0] = a - b[0]; | |
| 17277 | - return b; | |
| 17278 | - } | |
| 17279 | - if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) { | |
| 17280 | - var i = 0; | |
| 17281 | - var lenA = a.length; | |
| 17282 | - var lenB = b.length; | |
| 17283 | - var retArr = []; | |
| 17284 | - while (i < lenA || i < lenB) { | |
| 17285 | - if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) { | |
| 17286 | - retArr[i] = a[i] - b[i]; | |
| 17287 | - } else { | |
| 17288 | - retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i]; | |
| 17289 | - } | |
| 17290 | - i += 1; | |
| 17291 | - } | |
| 17292 | - return retArr; | |
| 17293 | - } | |
| 17294 | - return 0; | |
| 17295 | - } | |
| 17296 | - function mul(a, b) { | |
| 17297 | - var tOfA = _typeof$1(a); | |
| 17298 | - var tOfB = _typeof$1(b); | |
| 17299 | - var arr; | |
| 17300 | - if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) { | |
| 17301 | - return a * b; | |
| 17302 | - } | |
| 17303 | - var i; | |
| 17304 | - var len; | |
| 17305 | - if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { | |
| 17306 | - len = a.length; | |
| 17307 | - arr = createTypedArray('float32', len); | |
| 17308 | - for (i = 0; i < len; i += 1) { | |
| 17309 | - arr[i] = a[i] * b; | |
| 17310 | - } | |
| 17311 | - return arr; | |
| 17312 | - } | |
| 17313 | - if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { | |
| 17314 | - len = b.length; | |
| 17315 | - arr = createTypedArray('float32', len); | |
| 17316 | - for (i = 0; i < len; i += 1) { | |
| 17317 | - arr[i] = a * b[i]; | |
| 17318 | - } | |
| 17319 | - return arr; | |
| 17320 | - } | |
| 17321 | - return 0; | |
| 17322 | - } | |
| 17323 | - function div(a, b) { | |
| 17324 | - var tOfA = _typeof$1(a); | |
| 17325 | - var tOfB = _typeof$1(b); | |
| 17326 | - var arr; | |
| 17327 | - if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) { | |
| 17328 | - return a / b; | |
| 17329 | - } | |
| 17330 | - var i; | |
| 17331 | - var len; | |
| 17332 | - if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { | |
| 17333 | - len = a.length; | |
| 17334 | - arr = createTypedArray('float32', len); | |
| 17335 | - for (i = 0; i < len; i += 1) { | |
| 17336 | - arr[i] = a[i] / b; | |
| 17337 | - } | |
| 17338 | - return arr; | |
| 17339 | - } | |
| 17340 | - if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { | |
| 17341 | - len = b.length; | |
| 17342 | - arr = createTypedArray('float32', len); | |
| 17343 | - for (i = 0; i < len; i += 1) { | |
| 17344 | - arr[i] = a / b[i]; | |
| 17345 | - } | |
| 17346 | - return arr; | |
| 17347 | - } | |
| 17348 | - return 0; | |
| 17349 | - } | |
| 17350 | - function mod(a, b) { | |
| 17351 | - if (typeof a === 'string') { | |
| 17352 | - a = parseInt(a, 10); | |
| 17353 | - } | |
| 17354 | - if (typeof b === 'string') { | |
| 17355 | - b = parseInt(b, 10); | |
| 17356 | - } | |
| 17357 | - return a % b; | |
| 17358 | - } | |
| 17359 | - var $bm_sum = sum; | |
| 17360 | - var $bm_sub = sub; | |
| 17361 | - var $bm_mul = mul; | |
| 17362 | - var $bm_div = div; | |
| 17363 | - var $bm_mod = mod; | |
| 17364 | - function clamp(num, min, max) { | |
| 17365 | - if (min > max) { | |
| 17366 | - var mm = max; | |
| 17367 | - max = min; | |
| 17368 | - min = mm; | |
| 17369 | - } | |
| 17370 | - return Math.min(Math.max(num, min), max); | |
| 17371 | - } | |
| 17372 | - function radiansToDegrees(val) { | |
| 17373 | - return val / degToRads; | |
| 17374 | - } | |
| 17375 | - var radians_to_degrees = radiansToDegrees; | |
| 17376 | - function degreesToRadians(val) { | |
| 17377 | - return val * degToRads; | |
| 17378 | - } | |
| 17379 | - var degrees_to_radians = radiansToDegrees; | |
| 17380 | - var helperLengthArray = [0, 0, 0, 0, 0, 0]; | |
| 17381 | - function length(arr1, arr2) { | |
| 17382 | - if (typeof arr1 === 'number' || arr1 instanceof Number) { | |
| 17383 | - arr2 = arr2 || 0; | |
| 17384 | - return Math.abs(arr1 - arr2); | |
| 17385 | - } | |
| 17386 | - if (!arr2) { | |
| 17387 | - arr2 = helperLengthArray; | |
| 17388 | - } | |
| 17389 | - var i; | |
| 17390 | - var len = Math.min(arr1.length, arr2.length); | |
| 17391 | - var addedLength = 0; | |
| 17392 | - for (i = 0; i < len; i += 1) { | |
| 17393 | - addedLength += Math.pow(arr2[i] - arr1[i], 2); | |
| 17394 | - } | |
| 17395 | - return Math.sqrt(addedLength); | |
| 17396 | - } | |
| 17397 | - function normalize(vec) { | |
| 17398 | - return div(vec, length(vec)); | |
| 17399 | - } | |
| 17400 | - function rgbToHsl(val) { | |
| 17401 | - var r = val[0]; | |
| 17402 | - var g = val[1]; | |
| 17403 | - var b = val[2]; | |
| 17404 | - var max = Math.max(r, g, b); | |
| 17405 | - var min = Math.min(r, g, b); | |
| 17406 | - var h; | |
| 17407 | - var s; | |
| 17408 | - var l = (max + min) / 2; | |
| 17409 | - if (max === min) { | |
| 17410 | - h = 0; // achromatic | |
| 17411 | - s = 0; // achromatic | |
| 17412 | - } else { | |
| 17413 | - var d = max - min; | |
| 17414 | - s = l > 0.5 ? d / (2 - max - min) : d / (max + min); | |
| 17415 | - switch (max) { | |
| 17416 | - case r: | |
| 17417 | - h = (g - b) / d + (g < b ? 6 : 0); | |
| 17418 | - break; | |
| 17419 | - case g: | |
| 17420 | - h = (b - r) / d + 2; | |
| 17421 | - break; | |
| 17422 | - case b: | |
| 17423 | - h = (r - g) / d + 4; | |
| 17424 | - break; | |
| 17425 | - default: | |
| 17426 | - break; | |
| 17427 | - } | |
| 17428 | - h /= 6; | |
| 17429 | - } | |
| 17430 | - return [h, s, l, val[3]]; | |
| 17431 | - } | |
| 17432 | - function hue2rgb(p, q, t) { | |
| 17433 | - if (t < 0) t += 1; | |
| 17434 | - if (t > 1) t -= 1; | |
| 17435 | - if (t < 1 / 6) return p + (q - p) * 6 * t; | |
| 17436 | - if (t < 1 / 2) return q; | |
| 17437 | - if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; | |
| 17438 | - return p; | |
| 17439 | - } | |
| 17440 | - function hslToRgb(val) { | |
| 17441 | - var h = val[0]; | |
| 17442 | - var s = val[1]; | |
| 17443 | - var l = val[2]; | |
| 17444 | - var r; | |
| 17445 | - var g; | |
| 17446 | - var b; | |
| 17447 | - if (s === 0) { | |
| 17448 | - r = l; // achromatic | |
| 17449 | - b = l; // achromatic | |
| 17450 | - g = l; // achromatic | |
| 17451 | - } else { | |
| 17452 | - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; | |
| 17453 | - var p = 2 * l - q; | |
| 17454 | - r = hue2rgb(p, q, h + 1 / 3); | |
| 17455 | - g = hue2rgb(p, q, h); | |
| 17456 | - b = hue2rgb(p, q, h - 1 / 3); | |
| 17457 | - } | |
| 17458 | - return [r, g, b, val[3]]; | |
| 17459 | - } | |
| 17460 | - function linear(t, tMin, tMax, value1, value2) { | |
| 17461 | - if (value1 === undefined || value2 === undefined) { | |
| 17462 | - value1 = tMin; | |
| 17463 | - value2 = tMax; | |
| 17464 | - tMin = 0; | |
| 17465 | - tMax = 1; | |
| 17466 | - } | |
| 17467 | - if (tMax < tMin) { | |
| 17468 | - var _tMin = tMax; | |
| 17469 | - tMax = tMin; | |
| 17470 | - tMin = _tMin; | |
| 17471 | - } | |
| 17472 | - if (t <= tMin) { | |
| 17473 | - return value1; | |
| 17474 | - } | |
| 17475 | - if (t >= tMax) { | |
| 17476 | - return value2; | |
| 17477 | - } | |
| 17478 | - var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin); | |
| 17479 | - if (!value1.length) { | |
| 17480 | - return value1 + (value2 - value1) * perc; | |
| 17481 | - } | |
| 17482 | - var i; | |
| 17483 | - var len = value1.length; | |
| 17484 | - var arr = createTypedArray('float32', len); | |
| 17485 | - for (i = 0; i < len; i += 1) { | |
| 17486 | - arr[i] = value1[i] + (value2[i] - value1[i]) * perc; | |
| 17487 | - } | |
| 17488 | - return arr; | |
| 17489 | - } | |
| 17490 | - function random(min, max) { | |
| 17491 | - if (max === undefined) { | |
| 17492 | - if (min === undefined) { | |
| 17493 | - min = 0; | |
| 17494 | - max = 1; | |
| 17495 | - } else { | |
| 17496 | - max = min; | |
| 17497 | - min = undefined; | |
| 17498 | - } | |
| 17499 | - } | |
| 17500 | - if (max.length) { | |
| 17501 | - var i; | |
| 17502 | - var len = max.length; | |
| 17503 | - if (!min) { | |
| 17504 | - min = createTypedArray('float32', len); | |
| 17505 | - } | |
| 17506 | - var arr = createTypedArray('float32', len); | |
| 17507 | - var rnd = BMMath.random(); | |
| 17508 | - for (i = 0; i < len; i += 1) { | |
| 17509 | - arr[i] = min[i] + rnd * (max[i] - min[i]); | |
| 17510 | - } | |
| 17511 | - return arr; | |
| 17512 | - } | |
| 17513 | - if (min === undefined) { | |
| 17514 | - min = 0; | |
| 17515 | - } | |
| 17516 | - var rndm = BMMath.random(); | |
| 17517 | - return min + rndm * (max - min); | |
| 17518 | - } | |
| 17519 | - function createPath(points, inTangents, outTangents, closed) { | |
| 17520 | - var i; | |
| 17521 | - var len = points.length; | |
| 17522 | - var path = shapePool.newElement(); | |
| 17523 | - path.setPathData(!!closed, len); | |
| 17524 | - var arrPlaceholder = [0, 0]; | |
| 17525 | - var inVertexPoint; | |
| 17526 | - var outVertexPoint; | |
| 17527 | - for (i = 0; i < len; i += 1) { | |
| 17528 | - inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder; | |
| 17529 | - outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder; | |
| 17530 | - 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); | |
| 17531 | - } | |
| 17532 | - return path; | |
| 17533 | - } | |
| 17534 | - function initiateExpression(elem, data, property) { | |
| 17535 | - // Bail out if we don't want expressions | |
| 17536 | - function noOp(_value) { | |
| 17537 | - return _value; | |
| 17538 | - } | |
| 17539 | - if (!elem.globalData.renderConfig.runExpressions) { | |
| 17540 | - return noOp; | |
| 17541 | - } | |
| 17542 | - var val = data.x; | |
| 17543 | - var needsVelocity = /velocity(?![\w\d])/.test(val); | |
| 17544 | - var _needsRandom = val.indexOf('random') !== -1; | |
| 17545 | - var elemType = elem.data.ty; | |
| 17546 | - var transform; | |
| 17547 | - var $bm_transform; | |
| 17548 | - var content; | |
| 17549 | - var effect; | |
| 17550 | - var thisProperty = property; | |
| 17551 | - thisProperty._name = elem.data.nm; | |
| 17552 | - thisProperty.valueAtTime = thisProperty.getValueAtTime; | |
| 17553 | - Object.defineProperty(thisProperty, 'value', { | |
| 17554 | - get: function get() { | |
| 17555 | - return thisProperty.v; | |
| 17556 | - } | |
| 17557 | - }); | |
| 17558 | - elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate; | |
| 17559 | - elem.comp.displayStartTime = 0; | |
| 17560 | - var inPoint = elem.data.ip / elem.comp.globalData.frameRate; | |
| 17561 | - var outPoint = elem.data.op / elem.comp.globalData.frameRate; | |
| 17562 | - var width = elem.data.sw ? elem.data.sw : 0; | |
| 17563 | - var height = elem.data.sh ? elem.data.sh : 0; | |
| 17564 | - var name = elem.data.nm; | |
| 17565 | - var loopIn; | |
| 17566 | - var loop_in; | |
| 17567 | - var loopOut; | |
| 17568 | - var loop_out; | |
| 17569 | - var smooth; | |
| 17570 | - var toWorld; | |
| 17571 | - var fromWorld; | |
| 17572 | - var fromComp; | |
| 17573 | - var toComp; | |
| 17574 | - var fromCompToSurface; | |
| 17575 | - var position; | |
| 17576 | - var rotation; | |
| 17577 | - var anchorPoint; | |
| 17578 | - var scale; | |
| 17579 | - var thisLayer; | |
| 17580 | - var thisComp; | |
| 17581 | - var mask; | |
| 17582 | - var valueAtTime; | |
| 17583 | - var velocityAtTime; | |
| 17584 | - var scoped_bm_rt; | |
| 17585 | - // val = val.replace(/(\\?"|')((http)(s)?(:\/))?\/.*?(\\?"|')/g, "\"\""); // deter potential network calls | |
| 17586 | - var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval | |
| 17587 | - var numKeys = property.kf ? data.k.length : 0; | |
| 17588 | - var active = !this.data || this.data.hd !== true; | |
| 17589 | - var wiggle = function wiggle(freq, amp) { | |
| 17590 | - var iWiggle; | |
| 17591 | - var j; | |
| 17592 | - var lenWiggle = this.pv.length ? this.pv.length : 1; | |
| 17593 | - var addedAmps = createTypedArray('float32', lenWiggle); | |
| 17594 | - freq = 5; | |
| 17595 | - var iterations = Math.floor(time * freq); | |
| 17596 | - iWiggle = 0; | |
| 17597 | - j = 0; | |
| 17598 | - while (iWiggle < iterations) { | |
| 17599 | - // var rnd = BMMath.random(); | |
| 17600 | - for (j = 0; j < lenWiggle; j += 1) { | |
| 17601 | - addedAmps[j] += -amp + amp * 2 * BMMath.random(); | |
| 17602 | - // addedAmps[j] += -amp + amp*2*rnd; | |
| 17603 | - } | |
| 17604 | - iWiggle += 1; | |
| 17605 | - } | |
| 17606 | - // var rnd2 = BMMath.random(); | |
| 17607 | - var periods = time * freq; | |
| 17608 | - var perc = periods - Math.floor(periods); | |
| 17609 | - var arr = createTypedArray('float32', lenWiggle); | |
| 17610 | - if (lenWiggle > 1) { | |
| 17611 | - for (j = 0; j < lenWiggle; j += 1) { | |
| 17612 | - arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; | |
| 17613 | - // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc; | |
| 17614 | - // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc); | |
| 17615 | - } | |
| 17616 | - return arr; | |
| 17617 | - } | |
| 17618 | - return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc; | |
| 17619 | - }.bind(this); | |
| 17620 | - if (thisProperty.loopIn) { | |
| 17621 | - loopIn = thisProperty.loopIn.bind(thisProperty); | |
| 17622 | - loop_in = loopIn; | |
| 17623 | - } | |
| 17624 | - if (thisProperty.loopOut) { | |
| 17625 | - loopOut = thisProperty.loopOut.bind(thisProperty); | |
| 17626 | - loop_out = loopOut; | |
| 17627 | - } | |
| 17628 | - if (thisProperty.smooth) { | |
| 17629 | - smooth = thisProperty.smooth.bind(thisProperty); | |
| 17630 | - } | |
| 17631 | - function loopInDuration(type, duration) { | |
| 17632 | - return loopIn(type, duration, true); | |
| 17633 | - } | |
| 17634 | - function loopOutDuration(type, duration) { | |
| 17635 | - return loopOut(type, duration, true); | |
| 17636 | - } | |
| 17637 | - if (this.getValueAtTime) { | |
| 17638 | - valueAtTime = this.getValueAtTime.bind(this); | |
| 17639 | - } | |
| 17640 | - if (this.getVelocityAtTime) { | |
| 17641 | - velocityAtTime = this.getVelocityAtTime.bind(this); | |
| 17642 | - } | |
| 17643 | - var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface); | |
| 17644 | - function lookAt(elem1, elem2) { | |
| 17645 | - var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]]; | |
| 17646 | - var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads; | |
| 17647 | - var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads; | |
| 17648 | - return [yaw, pitch, 0]; | |
| 17649 | - } | |
| 17650 | - function easeOut(t, tMin, tMax, val1, val2) { | |
| 17651 | - return applyEase(easeOutBez, t, tMin, tMax, val1, val2); | |
| 17652 | - } | |
| 17653 | - function easeIn(t, tMin, tMax, val1, val2) { | |
| 17654 | - return applyEase(easeInBez, t, tMin, tMax, val1, val2); | |
| 17655 | - } | |
| 17656 | - function ease(t, tMin, tMax, val1, val2) { | |
| 17657 | - return applyEase(easeInOutBez, t, tMin, tMax, val1, val2); | |
| 17658 | - } | |
| 17659 | - function applyEase(fn, t, tMin, tMax, val1, val2) { | |
| 17660 | - if (val1 === undefined) { | |
| 17661 | - val1 = tMin; | |
| 17662 | - val2 = tMax; | |
| 17663 | - } else { | |
| 17664 | - t = (t - tMin) / (tMax - tMin); | |
| 17665 | - } | |
| 17666 | - if (t > 1) { | |
| 17667 | - t = 1; | |
| 17668 | - } else if (t < 0) { | |
| 17669 | - t = 0; | |
| 17670 | - } | |
| 17671 | - var mult = fn(t); | |
| 17672 | - if ($bm_isInstanceOfArray(val1)) { | |
| 17673 | - var iKey; | |
| 17674 | - var lenKey = val1.length; | |
| 17675 | - var arr = createTypedArray('float32', lenKey); | |
| 17676 | - for (iKey = 0; iKey < lenKey; iKey += 1) { | |
| 17677 | - arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey]; | |
| 17678 | - } | |
| 17679 | - return arr; | |
| 17680 | - } | |
| 17681 | - return (val2 - val1) * mult + val1; | |
| 17682 | - } | |
| 17683 | - function nearestKey(time) { | |
| 17684 | - var iKey; | |
| 17685 | - var lenKey = data.k.length; | |
| 17686 | - var index; | |
| 17687 | - var keyTime; | |
| 17688 | - if (!data.k.length || typeof data.k[0] === 'number') { | |
| 17689 | - index = 0; | |
| 17690 | - keyTime = 0; | |
| 17691 | - } else { | |
| 17692 | - index = -1; | |
| 17693 | - time *= elem.comp.globalData.frameRate; | |
| 17694 | - if (time < data.k[0].t) { | |
| 17695 | - index = 1; | |
| 17696 | - keyTime = data.k[0].t; | |
| 17697 | - } else { | |
| 17698 | - for (iKey = 0; iKey < lenKey - 1; iKey += 1) { | |
| 17699 | - if (time === data.k[iKey].t) { | |
| 17700 | - index = iKey + 1; | |
| 17701 | - keyTime = data.k[iKey].t; | |
| 17702 | - break; | |
| 17703 | - } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) { | |
| 17704 | - if (time - data.k[iKey].t > data.k[iKey + 1].t - time) { | |
| 17705 | - index = iKey + 2; | |
| 17706 | - keyTime = data.k[iKey + 1].t; | |
| 17707 | - } else { | |
| 17708 | - index = iKey + 1; | |
| 17709 | - keyTime = data.k[iKey].t; | |
| 17710 | - } | |
| 17711 | - break; | |
| 17712 | - } | |
| 17713 | - } | |
| 17714 | - if (index === -1) { | |
| 17715 | - index = iKey + 1; | |
| 17716 | - keyTime = data.k[iKey].t; | |
| 17717 | - } | |
| 17718 | - } | |
| 17719 | - } | |
| 17720 | - var obKey = {}; | |
| 17721 | - obKey.index = index; | |
| 17722 | - obKey.time = keyTime / elem.comp.globalData.frameRate; | |
| 17723 | - return obKey; | |
| 17724 | - } | |
| 17725 | - function key(ind) { | |
| 17726 | - var obKey; | |
| 17727 | - var iKey; | |
| 17728 | - var lenKey; | |
| 17729 | - if (!data.k.length || typeof data.k[0] === 'number') { | |
| 17730 | - throw new Error('The property has no keyframe at index ' + ind); | |
| 17731 | - } | |
| 17732 | - ind -= 1; | |
| 17733 | - obKey = { | |
| 17734 | - time: data.k[ind].t / elem.comp.globalData.frameRate, | |
| 17735 | - value: [] | |
| 17736 | - }; | |
| 17737 | - var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e; | |
| 17738 | - lenKey = arr.length; | |
| 17739 | - for (iKey = 0; iKey < lenKey; iKey += 1) { | |
| 17740 | - obKey[iKey] = arr[iKey]; | |
| 17741 | - obKey.value[iKey] = arr[iKey]; | |
| 17742 | - } | |
| 17743 | - return obKey; | |
| 17744 | - } | |
| 17745 | - function framesToTime(fr, fps) { | |
| 17746 | - if (!fps) { | |
| 17747 | - fps = elem.comp.globalData.frameRate; | |
| 17748 | - } | |
| 17749 | - return fr / fps; | |
| 17750 | - } | |
| 17751 | - function timeToFrames(t, fps) { | |
| 17752 | - if (!t && t !== 0) { | |
| 17753 | - t = time; | |
| 17754 | - } | |
| 17755 | - if (!fps) { | |
| 17756 | - fps = elem.comp.globalData.frameRate; | |
| 17757 | - } | |
| 17758 | - return t * fps; | |
| 17759 | - } | |
| 17760 | - function seedRandom(seed) { | |
| 17761 | - BMMath.seedrandom(randSeed + seed); | |
| 17762 | - } | |
| 17763 | - function sourceRectAtTime() { | |
| 17764 | - return elem.sourceRectAtTime(); | |
| 17765 | - } | |
| 17766 | - function substring(init, end) { | |
| 17767 | - if (typeof value === 'string') { | |
| 17768 | - if (end === undefined) { | |
| 17769 | - return value.substring(init); | |
| 17770 | - } | |
| 17771 | - return value.substring(init, end); | |
| 17772 | - } | |
| 17773 | - return ''; | |
| 17774 | - } | |
| 17775 | - function substr(init, end) { | |
| 17776 | - if (typeof value === 'string') { | |
| 17777 | - if (end === undefined) { | |
| 17778 | - return value.substr(init); | |
| 17779 | - } | |
| 17780 | - return value.substr(init, end); | |
| 17781 | - } | |
| 17782 | - return ''; | |
| 17783 | - } | |
| 17784 | - function posterizeTime(framesPerSecond) { | |
| 17785 | - time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond; | |
| 17786 | - value = valueAtTime(time); | |
| 17787 | - } | |
| 17788 | - var time; | |
| 17789 | - var velocity; | |
| 17790 | - var value; | |
| 17791 | - var text; | |
| 17792 | - var textIndex; | |
| 17793 | - var textTotal; | |
| 17794 | - var selectorValue; | |
| 17795 | - var index = elem.data.ind; | |
| 17796 | - var hasParent = !!(elem.hierarchy && elem.hierarchy.length); | |
| 17797 | - var parent; | |
| 17798 | - var randSeed = Math.floor(Math.random() * 1000000); | |
| 17799 | - var globalData = elem.globalData; | |
| 17800 | - function executeExpression(_value) { | |
| 17801 | - // globalData.pushExpression(); | |
| 17802 | - value = _value; | |
| 17803 | - if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') { | |
| 17804 | - return value; | |
| 17805 | - } | |
| 17806 | - if (this.propType === 'textSelector') { | |
| 17807 | - textIndex = this.textIndex; | |
| 17808 | - textTotal = this.textTotal; | |
| 17809 | - selectorValue = this.selectorValue; | |
| 17810 | - } | |
| 17811 | - if (!thisLayer) { | |
| 17812 | - text = elem.layerInterface.text; | |
| 17813 | - thisLayer = elem.layerInterface; | |
| 17814 | - thisComp = elem.comp.compInterface; | |
| 17815 | - toWorld = thisLayer.toWorld.bind(thisLayer); | |
| 17816 | - fromWorld = thisLayer.fromWorld.bind(thisLayer); | |
| 17817 | - fromComp = thisLayer.fromComp.bind(thisLayer); | |
| 17818 | - toComp = thisLayer.toComp.bind(thisLayer); | |
| 17819 | - mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null; | |
| 17820 | - fromCompToSurface = fromComp; | |
| 17821 | - } | |
| 17822 | - if (!transform) { | |
| 17823 | - transform = elem.layerInterface('ADBE Transform Group'); | |
| 17824 | - $bm_transform = transform; | |
| 17825 | - if (transform) { | |
| 17826 | - anchorPoint = transform.anchorPoint; | |
| 17827 | - /* position = transform.position; | |
| 17828 | - rotation = transform.rotation; | |
| 17829 | - scale = transform.scale; */ | |
| 17830 | - } | |
| 17831 | - } | |
| 17832 | - if (elemType === 4 && !content) { | |
| 17833 | - content = thisLayer('ADBE Root Vectors Group'); | |
| 17834 | - } | |
| 17835 | - if (!effect) { | |
| 17836 | - effect = thisLayer(4); | |
| 17837 | - } | |
| 17838 | - hasParent = !!(elem.hierarchy && elem.hierarchy.length); | |
| 17839 | - if (hasParent && !parent) { | |
| 17840 | - parent = elem.hierarchy[0].layerInterface; | |
| 17841 | - } | |
| 17842 | - time = this.comp.renderedFrame / this.comp.globalData.frameRate; | |
| 17843 | - if (_needsRandom) { | |
| 17844 | - seedRandom(randSeed + time); | |
| 17845 | - } | |
| 17846 | - if (needsVelocity) { | |
| 17847 | - velocity = velocityAtTime(time); | |
| 17848 | - } | |
| 17849 | - expression_function(); | |
| 17850 | - this.frameExpressionId = elem.globalData.frameId; | |
| 17851 | - | |
| 17852 | - // TODO: Check if it's possible to return on ShapeInterface the .v value | |
| 17853 | - // Changed this to a ternary operation because Rollup failed compiling it correctly | |
| 17854 | - scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt; | |
| 17855 | - return scoped_bm_rt; | |
| 17856 | - } | |
| 17857 | - // Bundlers will see these as dead code and unless we reference them | |
| 17858 | - 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]; | |
| 17859 | - return executeExpression; | |
| 17860 | - } | |
| 17861 | - ob.initiateExpression = initiateExpression; | |
| 17862 | - 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]; | |
| 17863 | - ob.resetFrame = resetFrame; | |
| 17864 | - return ob; | |
| 17865 | - }(); | |
| 17866 | - | |
| 17867 | - var Expressions = function () { | |
| 17868 | - var ob = {}; | |
| 17869 | - ob.initExpressions = initExpressions; | |
| 17870 | - ob.resetFrame = ExpressionManager.resetFrame; | |
| 17871 | - function initExpressions(animation) { | |
| 17872 | - var stackCount = 0; | |
| 17873 | - var registers = []; | |
| 17874 | - function pushExpression() { | |
| 17875 | - stackCount += 1; | |
| 17876 | - } | |
| 17877 | - function popExpression() { | |
| 17878 | - stackCount -= 1; | |
| 17879 | - if (stackCount === 0) { | |
| 17880 | - releaseInstances(); | |
| 17881 | - } | |
| 17882 | - } | |
| 17883 | - function registerExpressionProperty(expression) { | |
| 17884 | - if (registers.indexOf(expression) === -1) { | |
| 17885 | - registers.push(expression); | |
| 17886 | - } | |
| 17887 | - } | |
| 17888 | - function releaseInstances() { | |
| 17889 | - var i; | |
| 17890 | - var len = registers.length; | |
| 17891 | - for (i = 0; i < len; i += 1) { | |
| 17892 | - registers[i].release(); | |
| 17893 | - } | |
| 17894 | - registers.length = 0; | |
| 17895 | - } | |
| 17896 | - animation.renderer.compInterface = CompExpressionInterface(animation.renderer); | |
| 17897 | - animation.renderer.globalData.projectInterface.registerComposition(animation.renderer); | |
| 17898 | - animation.renderer.globalData.pushExpression = pushExpression; | |
| 17899 | - animation.renderer.globalData.popExpression = popExpression; | |
| 17900 | - animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty; | |
| 17901 | - } | |
| 17902 | - return ob; | |
| 17903 | - }(); | |
| 17904 | - | |
| 17905 | - var MaskManagerInterface = function () { | |
| 17906 | - function MaskInterface(mask, data) { | |
| 17907 | - this._mask = mask; | |
| 17908 | - this._data = data; | |
| 17909 | - } | |
| 17910 | - Object.defineProperty(MaskInterface.prototype, 'maskPath', { | |
| 17911 | - get: function get() { | |
| 17912 | - if (this._mask.prop.k) { | |
| 17913 | - this._mask.prop.getValue(); | |
| 17914 | - } | |
| 17915 | - return this._mask.prop; | |
| 17916 | - } | |
| 17917 | - }); | |
| 17918 | - Object.defineProperty(MaskInterface.prototype, 'maskOpacity', { | |
| 17919 | - get: function get() { | |
| 17920 | - if (this._mask.op.k) { | |
| 17921 | - this._mask.op.getValue(); | |
| 17922 | - } | |
| 17923 | - return this._mask.op.v * 100; | |
| 17924 | - } | |
| 17925 | - }); | |
| 17926 | - var MaskManager = function MaskManager(maskManager) { | |
| 17927 | - var _masksInterfaces = createSizedArray(maskManager.viewData.length); | |
| 17928 | - var i; | |
| 17929 | - var len = maskManager.viewData.length; | |
| 17930 | - for (i = 0; i < len; i += 1) { | |
| 17931 | - _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]); | |
| 17932 | - } | |
| 17933 | - var maskFunction = function maskFunction(name) { | |
| 17934 | - i = 0; | |
| 17935 | - while (i < len) { | |
| 17936 | - if (maskManager.masksProperties[i].nm === name) { | |
| 17937 | - return _masksInterfaces[i]; | |
| 17938 | - } | |
| 17939 | - i += 1; | |
| 17940 | - } | |
| 17941 | - return null; | |
| 17942 | - }; | |
| 17943 | - return maskFunction; | |
| 17944 | - }; | |
| 17945 | - return MaskManager; | |
| 17946 | - }(); | |
| 17947 | - | |
| 17948 | - var ExpressionPropertyInterface = function () { | |
| 17949 | - var defaultUnidimensionalValue = { | |
| 17950 | - pv: 0, | |
| 17951 | - v: 0, | |
| 17952 | - mult: 1 | |
| 17953 | - }; | |
| 17954 | - var defaultMultidimensionalValue = { | |
| 17955 | - pv: [0, 0, 0], | |
| 17956 | - v: [0, 0, 0], | |
| 17957 | - mult: 1 | |
| 17958 | - }; | |
| 17959 | - function completeProperty(expressionValue, property, type) { | |
| 17960 | - Object.defineProperty(expressionValue, 'velocity', { | |
| 17961 | - get: function get() { | |
| 17962 | - return property.getVelocityAtTime(property.comp.currentFrame); | |
| 17963 | - } | |
| 17964 | - }); | |
| 17965 | - expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0; | |
| 17966 | - expressionValue.key = function (pos) { | |
| 17967 | - if (!expressionValue.numKeys) { | |
| 17968 | - return 0; | |
| 17969 | - } | |
| 17970 | - var value = ''; | |
| 17971 | - if ('s' in property.keyframes[pos - 1]) { | |
| 17972 | - value = property.keyframes[pos - 1].s; | |
| 17973 | - } else if ('e' in property.keyframes[pos - 2]) { | |
| 17974 | - value = property.keyframes[pos - 2].e; | |
| 17975 | - } else { | |
| 17976 | - value = property.keyframes[pos - 2].s; | |
| 17977 | - } | |
| 17978 | - var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers | |
| 17979 | - valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate; | |
| 17980 | - valueProp.value = type === 'unidimensional' ? value[0] : value; | |
| 17981 | - return valueProp; | |
| 17982 | - }; | |
| 17983 | - expressionValue.valueAtTime = property.getValueAtTime; | |
| 17984 | - expressionValue.speedAtTime = property.getSpeedAtTime; | |
| 17985 | - expressionValue.velocityAtTime = property.getVelocityAtTime; | |
| 17986 | - expressionValue.propertyGroup = property.propertyGroup; | |
| 17987 | - } | |
| 17988 | - function UnidimensionalPropertyInterface(property) { | |
| 17989 | - if (!property || !('pv' in property)) { | |
| 17990 | - property = defaultUnidimensionalValue; | |
| 17991 | - } | |
| 17992 | - var mult = 1 / property.mult; | |
| 17993 | - var val = property.pv * mult; | |
| 17994 | - var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers | |
| 17995 | - expressionValue.value = val; | |
| 17996 | - completeProperty(expressionValue, property, 'unidimensional'); | |
| 17997 | - return function () { | |
| 17998 | - if (property.k) { | |
| 17999 | - property.getValue(); | |
| 18000 | - } | |
| 18001 | - val = property.v * mult; | |
| 18002 | - if (expressionValue.value !== val) { | |
| 18003 | - expressionValue = new Number(val); // eslint-disable-line no-new-wrappers | |
| 18004 | - expressionValue.value = val; | |
| 18005 | - expressionValue[0] = val; | |
| 18006 | - completeProperty(expressionValue, property, 'unidimensional'); | |
| 18007 | - } | |
| 18008 | - return expressionValue; | |
| 18009 | - }; | |
| 18010 | - } | |
| 18011 | - function MultidimensionalPropertyInterface(property) { | |
| 18012 | - if (!property || !('pv' in property)) { | |
| 18013 | - property = defaultMultidimensionalValue; | |
| 18014 | - } | |
| 18015 | - var mult = 1 / property.mult; | |
| 18016 | - var len = property.data && property.data.l || property.pv.length; | |
| 18017 | - var expressionValue = createTypedArray('float32', len); | |
| 18018 | - var arrValue = createTypedArray('float32', len); | |
| 18019 | - expressionValue.value = arrValue; | |
| 18020 | - completeProperty(expressionValue, property, 'multidimensional'); | |
| 18021 | - return function () { | |
| 18022 | - if (property.k) { | |
| 18023 | - property.getValue(); | |
| 18024 | - } | |
| 18025 | - for (var i = 0; i < len; i += 1) { | |
| 18026 | - arrValue[i] = property.v[i] * mult; | |
| 18027 | - expressionValue[i] = arrValue[i]; | |
| 18028 | - } | |
| 18029 | - return expressionValue; | |
| 18030 | - }; | |
| 18031 | - } | |
| 18032 | - | |
| 18033 | - // TODO: try to avoid using this getter | |
| 18034 | - function defaultGetter() { | |
| 18035 | - return defaultUnidimensionalValue; | |
| 18036 | - } | |
| 18037 | - return function (property) { | |
| 18038 | - if (!property) { | |
| 18039 | - return defaultGetter; | |
| 18040 | - } | |
| 18041 | - if (property.propType === 'unidimensional') { | |
| 18042 | - return UnidimensionalPropertyInterface(property); | |
| 18043 | - } | |
| 18044 | - return MultidimensionalPropertyInterface(property); | |
| 18045 | - }; | |
| 18046 | - }(); | |
| 18047 | - | |
| 18048 | - var TransformExpressionInterface = function () { | |
| 18049 | - return function (transform) { | |
| 18050 | - function _thisFunction(name) { | |
| 18051 | - switch (name) { | |
| 18052 | - case 'scale': | |
| 18053 | - case 'Scale': | |
| 18054 | - case 'ADBE Scale': | |
| 18055 | - case 6: | |
| 18056 | - return _thisFunction.scale; | |
| 18057 | - case 'rotation': | |
| 18058 | - case 'Rotation': | |
| 18059 | - case 'ADBE Rotation': | |
| 18060 | - case 'ADBE Rotate Z': | |
| 18061 | - case 10: | |
| 18062 | - return _thisFunction.rotation; | |
| 18063 | - case 'ADBE Rotate X': | |
| 18064 | - return _thisFunction.xRotation; | |
| 18065 | - case 'ADBE Rotate Y': | |
| 18066 | - return _thisFunction.yRotation; | |
| 18067 | - case 'position': | |
| 18068 | - case 'Position': | |
| 18069 | - case 'ADBE Position': | |
| 18070 | - case 2: | |
| 18071 | - return _thisFunction.position; | |
| 18072 | - case 'ADBE Position_0': | |
| 18073 | - return _thisFunction.xPosition; | |
| 18074 | - case 'ADBE Position_1': | |
| 18075 | - return _thisFunction.yPosition; | |
| 18076 | - case 'ADBE Position_2': | |
| 18077 | - return _thisFunction.zPosition; | |
| 18078 | - case 'anchorPoint': | |
| 18079 | - case 'AnchorPoint': | |
| 18080 | - case 'Anchor Point': | |
| 18081 | - case 'ADBE AnchorPoint': | |
| 18082 | - case 1: | |
| 18083 | - return _thisFunction.anchorPoint; | |
| 18084 | - case 'opacity': | |
| 18085 | - case 'Opacity': | |
| 18086 | - case 11: | |
| 18087 | - return _thisFunction.opacity; | |
| 18088 | - default: | |
| 18089 | - return null; | |
| 18090 | - } | |
| 18091 | - } | |
| 18092 | - Object.defineProperty(_thisFunction, 'rotation', { | |
| 18093 | - get: ExpressionPropertyInterface(transform.r || transform.rz) | |
| 18094 | - }); | |
| 18095 | - Object.defineProperty(_thisFunction, 'zRotation', { | |
| 18096 | - get: ExpressionPropertyInterface(transform.rz || transform.r) | |
| 18097 | - }); | |
| 18098 | - Object.defineProperty(_thisFunction, 'xRotation', { | |
| 18099 | - get: ExpressionPropertyInterface(transform.rx) | |
| 18100 | - }); | |
| 18101 | - Object.defineProperty(_thisFunction, 'yRotation', { | |
| 18102 | - get: ExpressionPropertyInterface(transform.ry) | |
| 18103 | - }); | |
| 18104 | - Object.defineProperty(_thisFunction, 'scale', { | |
| 18105 | - get: ExpressionPropertyInterface(transform.s) | |
| 18106 | - }); | |
| 18107 | - var _px; | |
| 18108 | - var _py; | |
| 18109 | - var _pz; | |
| 18110 | - var _transformFactory; | |
| 18111 | - if (transform.p) { | |
| 18112 | - _transformFactory = ExpressionPropertyInterface(transform.p); | |
| 18113 | - } else { | |
| 18114 | - _px = ExpressionPropertyInterface(transform.px); | |
| 18115 | - _py = ExpressionPropertyInterface(transform.py); | |
| 18116 | - if (transform.pz) { | |
| 18117 | - _pz = ExpressionPropertyInterface(transform.pz); | |
| 18118 | - } | |
| 18119 | - } | |
| 18120 | - Object.defineProperty(_thisFunction, 'position', { | |
| 18121 | - get: function get() { | |
| 18122 | - if (transform.p) { | |
| 18123 | - return _transformFactory(); | |
| 18124 | - } | |
| 18125 | - return [_px(), _py(), _pz ? _pz() : 0]; | |
| 18126 | - } | |
| 18127 | - }); | |
| 18128 | - Object.defineProperty(_thisFunction, 'xPosition', { | |
| 18129 | - get: ExpressionPropertyInterface(transform.px) | |
| 18130 | - }); | |
| 18131 | - Object.defineProperty(_thisFunction, 'yPosition', { | |
| 18132 | - get: ExpressionPropertyInterface(transform.py) | |
| 18133 | - }); | |
| 18134 | - Object.defineProperty(_thisFunction, 'zPosition', { | |
| 18135 | - get: ExpressionPropertyInterface(transform.pz) | |
| 18136 | - }); | |
| 18137 | - Object.defineProperty(_thisFunction, 'anchorPoint', { | |
| 18138 | - get: ExpressionPropertyInterface(transform.a) | |
| 18139 | - }); | |
| 18140 | - Object.defineProperty(_thisFunction, 'opacity', { | |
| 18141 | - get: ExpressionPropertyInterface(transform.o) | |
| 18142 | - }); | |
| 18143 | - Object.defineProperty(_thisFunction, 'skew', { | |
| 18144 | - get: ExpressionPropertyInterface(transform.sk) | |
| 18145 | - }); | |
| 18146 | - Object.defineProperty(_thisFunction, 'skewAxis', { | |
| 18147 | - get: ExpressionPropertyInterface(transform.sa) | |
| 18148 | - }); | |
| 18149 | - Object.defineProperty(_thisFunction, 'orientation', { | |
| 18150 | - get: ExpressionPropertyInterface(transform.or) | |
| 18151 | - }); | |
| 18152 | - return _thisFunction; | |
| 18153 | - }; | |
| 18154 | - }(); | |
| 18155 | - | |
| 18156 | - var LayerExpressionInterface = function () { | |
| 18157 | - function getMatrix(time) { | |
| 18158 | - var toWorldMat = new Matrix(); | |
| 18159 | - if (time !== undefined) { | |
| 18160 | - var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time); | |
| 18161 | - propMatrix.clone(toWorldMat); | |
| 18162 | - } else { | |
| 18163 | - var transformMat = this._elem.finalTransform.mProp; | |
| 18164 | - transformMat.applyToMatrix(toWorldMat); | |
| 18165 | - } | |
| 18166 | - return toWorldMat; | |
| 18167 | - } | |
| 18168 | - function toWorldVec(arr, time) { | |
| 18169 | - var toWorldMat = this.getMatrix(time); | |
| 18170 | - toWorldMat.props[12] = 0; | |
| 18171 | - toWorldMat.props[13] = 0; | |
| 18172 | - toWorldMat.props[14] = 0; | |
| 18173 | - return this.applyPoint(toWorldMat, arr); | |
| 18174 | - } | |
| 18175 | - function toWorld(arr, time) { | |
| 18176 | - var toWorldMat = this.getMatrix(time); | |
| 18177 | - return this.applyPoint(toWorldMat, arr); | |
| 18178 | - } | |
| 18179 | - function fromWorldVec(arr, time) { | |
| 18180 | - var toWorldMat = this.getMatrix(time); | |
| 18181 | - toWorldMat.props[12] = 0; | |
| 18182 | - toWorldMat.props[13] = 0; | |
| 18183 | - toWorldMat.props[14] = 0; | |
| 18184 | - return this.invertPoint(toWorldMat, arr); | |
| 18185 | - } | |
| 18186 | - function fromWorld(arr, time) { | |
| 18187 | - var toWorldMat = this.getMatrix(time); | |
| 18188 | - return this.invertPoint(toWorldMat, arr); | |
| 18189 | - } | |
| 18190 | - function applyPoint(matrix, arr) { | |
| 18191 | - if (this._elem.hierarchy && this._elem.hierarchy.length) { | |
| 18192 | - var i; | |
| 18193 | - var len = this._elem.hierarchy.length; | |
| 18194 | - for (i = 0; i < len; i += 1) { | |
| 18195 | - this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix); | |
| 18196 | - } | |
| 18197 | - } | |
| 18198 | - return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0); | |
| 18199 | - } | |
| 18200 | - function invertPoint(matrix, arr) { | |
| 18201 | - if (this._elem.hierarchy && this._elem.hierarchy.length) { | |
| 18202 | - var i; | |
| 18203 | - var len = this._elem.hierarchy.length; | |
| 18204 | - for (i = 0; i < len; i += 1) { | |
| 18205 | - this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix); | |
| 18206 | - } | |
| 18207 | - } | |
| 18208 | - return matrix.inversePoint(arr); | |
| 18209 | - } | |
| 18210 | - function fromComp(arr) { | |
| 18211 | - var toWorldMat = new Matrix(); | |
| 18212 | - toWorldMat.reset(); | |
| 18213 | - this._elem.finalTransform.mProp.applyToMatrix(toWorldMat); | |
| 18214 | - if (this._elem.hierarchy && this._elem.hierarchy.length) { | |
| 18215 | - var i; | |
| 18216 | - var len = this._elem.hierarchy.length; | |
| 18217 | - for (i = 0; i < len; i += 1) { | |
| 18218 | - this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat); | |
| 18219 | - } | |
| 18220 | - return toWorldMat.inversePoint(arr); | |
| 18221 | - } | |
| 18222 | - return toWorldMat.inversePoint(arr); | |
| 18223 | - } | |
| 18224 | - function sampleImage() { | |
| 18225 | - return [1, 1, 1, 1]; | |
| 18226 | - } | |
| 18227 | - return function (elem) { | |
| 18228 | - var transformInterface; | |
| 18229 | - function _registerMaskInterface(maskManager) { | |
| 18230 | - _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem); | |
| 18231 | - } | |
| 18232 | - function _registerEffectsInterface(effects) { | |
| 18233 | - _thisLayerFunction.effect = effects; | |
| 18234 | - } | |
| 18235 | - function _thisLayerFunction(name) { | |
| 18236 | - switch (name) { | |
| 18237 | - case 'ADBE Root Vectors Group': | |
| 18238 | - case 'Contents': | |
| 18239 | - case 2: | |
| 18240 | - return _thisLayerFunction.shapeInterface; | |
| 18241 | - case 1: | |
| 18242 | - case 6: | |
| 18243 | - case 'Transform': | |
| 18244 | - case 'transform': | |
| 18245 | - case 'ADBE Transform Group': | |
| 18246 | - return transformInterface; | |
| 18247 | - case 4: | |
| 18248 | - case 'ADBE Effect Parade': | |
| 18249 | - case 'effects': | |
| 18250 | - case 'Effects': | |
| 18251 | - return _thisLayerFunction.effect; | |
| 18252 | - case 'ADBE Text Properties': | |
| 18253 | - return _thisLayerFunction.textInterface; | |
| 18254 | - default: | |
| 18255 | - return null; | |
| 18256 | - } | |
| 18257 | - } | |
| 18258 | - _thisLayerFunction.getMatrix = getMatrix; | |
| 18259 | - _thisLayerFunction.invertPoint = invertPoint; | |
| 18260 | - _thisLayerFunction.applyPoint = applyPoint; | |
| 18261 | - _thisLayerFunction.toWorld = toWorld; | |
| 18262 | - _thisLayerFunction.toWorldVec = toWorldVec; | |
| 18263 | - _thisLayerFunction.fromWorld = fromWorld; | |
| 18264 | - _thisLayerFunction.fromWorldVec = fromWorldVec; | |
| 18265 | - _thisLayerFunction.toComp = toWorld; | |
| 18266 | - _thisLayerFunction.fromComp = fromComp; | |
| 18267 | - _thisLayerFunction.sampleImage = sampleImage; | |
| 18268 | - _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem); | |
| 18269 | - _thisLayerFunction._elem = elem; | |
| 18270 | - transformInterface = TransformExpressionInterface(elem.finalTransform.mProp); | |
| 18271 | - var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint'); | |
| 18272 | - Object.defineProperties(_thisLayerFunction, { | |
| 18273 | - hasParent: { | |
| 18274 | - get: function get() { | |
| 18275 | - return elem.hierarchy.length; | |
| 18276 | - } | |
| 18277 | - }, | |
| 18278 | - parent: { | |
| 18279 | - get: function get() { | |
| 18280 | - return elem.hierarchy[0].layerInterface; | |
| 18281 | - } | |
| 18282 | - }, | |
| 18283 | - rotation: getDescriptor(transformInterface, 'rotation'), | |
| 18284 | - scale: getDescriptor(transformInterface, 'scale'), | |
| 18285 | - position: getDescriptor(transformInterface, 'position'), | |
| 18286 | - opacity: getDescriptor(transformInterface, 'opacity'), | |
| 18287 | - anchorPoint: anchorPointDescriptor, | |
| 18288 | - anchor_point: anchorPointDescriptor, | |
| 18289 | - transform: { | |
| 18290 | - get: function get() { | |
| 18291 | - return transformInterface; | |
| 18292 | - } | |
| 18293 | - }, | |
| 18294 | - active: { | |
| 18295 | - get: function get() { | |
| 18296 | - return elem.isInRange; | |
| 18297 | - } | |
| 18298 | - } | |
| 18299 | - }); | |
| 18300 | - _thisLayerFunction.startTime = elem.data.st; | |
| 18301 | - _thisLayerFunction.index = elem.data.ind; | |
| 18302 | - _thisLayerFunction.source = elem.data.refId; | |
| 18303 | - _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100; | |
| 18304 | - _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100; | |
| 18305 | - _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate; | |
| 18306 | - _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate; | |
| 18307 | - _thisLayerFunction._name = elem.data.nm; | |
| 18308 | - _thisLayerFunction.registerMaskInterface = _registerMaskInterface; | |
| 18309 | - _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface; | |
| 18310 | - return _thisLayerFunction; | |
| 18311 | - }; | |
| 18312 | - }(); | |
| 18313 | - | |
| 18314 | - var propertyGroupFactory = function () { | |
| 18315 | - return function (interfaceFunction, parentPropertyGroup) { | |
| 18316 | - return function (val) { | |
| 18317 | - val = val === undefined ? 1 : val; | |
| 18318 | - if (val <= 0) { | |
| 18319 | - return interfaceFunction; | |
| 18320 | - } | |
| 18321 | - return parentPropertyGroup(val - 1); | |
| 18322 | - }; | |
| 18323 | - }; | |
| 18324 | - }(); | |
| 18325 | - | |
| 18326 | - var PropertyInterface = function () { | |
| 18327 | - return function (propertyName, propertyGroup) { | |
| 18328 | - var interfaceFunction = { | |
| 18329 | - _name: propertyName | |
| 18330 | - }; | |
| 18331 | - function _propertyGroup(val) { | |
| 18332 | - val = val === undefined ? 1 : val; | |
| 18333 | - if (val <= 0) { | |
| 18334 | - return interfaceFunction; | |
| 18335 | - } | |
| 18336 | - return propertyGroup(val - 1); | |
| 18337 | - } | |
| 18338 | - return _propertyGroup; | |
| 18339 | - }; | |
| 18340 | - }(); | |
| 18341 | - | |
| 18342 | - var EffectsExpressionInterface = function () { | |
| 18343 | - var ob = { | |
| 18344 | - createEffectsInterface: createEffectsInterface | |
| 18345 | - }; | |
| 18346 | - function createEffectsInterface(elem, propertyGroup) { | |
| 18347 | - if (elem.effectsManager) { | |
| 18348 | - var effectElements = []; | |
| 18349 | - var effectsData = elem.data.ef; | |
| 18350 | - var i; | |
| 18351 | - var len = elem.effectsManager.effectElements.length; | |
| 18352 | - for (i = 0; i < len; i += 1) { | |
| 18353 | - effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem)); | |
| 18354 | - } | |
| 18355 | - var effects = elem.data.ef || []; | |
| 18356 | - var groupInterface = function groupInterface(name) { | |
| 18357 | - i = 0; | |
| 18358 | - len = effects.length; | |
| 18359 | - while (i < len) { | |
| 18360 | - if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) { | |
| 18361 | - return effectElements[i]; | |
| 18362 | - } | |
| 18363 | - i += 1; | |
| 18364 | - } | |
| 18365 | - return null; | |
| 18366 | - }; | |
| 18367 | - Object.defineProperty(groupInterface, 'numProperties', { | |
| 18368 | - get: function get() { | |
| 18369 | - return effects.length; | |
| 18370 | - } | |
| 18371 | - }); | |
| 18372 | - return groupInterface; | |
| 18373 | - } | |
| 18374 | - return null; | |
| 18375 | - } | |
| 18376 | - function createGroupInterface(data, elements, propertyGroup, elem) { | |
| 18377 | - function groupInterface(name) { | |
| 18378 | - var effects = data.ef; | |
| 18379 | - var i = 0; | |
| 18380 | - var len = effects.length; | |
| 18381 | - while (i < len) { | |
| 18382 | - if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) { | |
| 18383 | - if (effects[i].ty === 5) { | |
| 18384 | - return effectElements[i]; | |
| 18385 | - } | |
| 18386 | - return effectElements[i](); | |
| 18387 | - } | |
| 18388 | - i += 1; | |
| 18389 | - } | |
| 18390 | - throw new Error(); | |
| 18391 | - } | |
| 18392 | - var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup); | |
| 18393 | - var effectElements = []; | |
| 18394 | - var i; | |
| 18395 | - var len = data.ef.length; | |
| 18396 | - for (i = 0; i < len; i += 1) { | |
| 18397 | - if (data.ef[i].ty === 5) { | |
| 18398 | - effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem)); | |
| 18399 | - } else { | |
| 18400 | - effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup)); | |
| 18401 | - } | |
| 18402 | - } | |
| 18403 | - if (data.mn === 'ADBE Color Control') { | |
| 18404 | - Object.defineProperty(groupInterface, 'color', { | |
| 18405 | - get: function get() { | |
| 18406 | - return effectElements[0](); | |
| 18407 | - } | |
| 18408 | - }); | |
| 18409 | - } | |
| 18410 | - Object.defineProperties(groupInterface, { | |
| 18411 | - numProperties: { | |
| 18412 | - get: function get() { | |
| 18413 | - return data.np; | |
| 18414 | - } | |
| 18415 | - }, | |
| 18416 | - _name: { | |
| 18417 | - value: data.nm | |
| 18418 | - }, | |
| 18419 | - propertyGroup: { | |
| 18420 | - value: _propertyGroup | |
| 18421 | - } | |
| 18422 | - }); | |
| 18423 | - groupInterface.enabled = data.en !== 0; | |
| 18424 | - groupInterface.active = groupInterface.enabled; | |
| 18425 | - return groupInterface; | |
| 18426 | - } | |
| 18427 | - function createValueInterface(element, type, elem, propertyGroup) { | |
| 18428 | - var expressionProperty = ExpressionPropertyInterface(element.p); | |
| 18429 | - function interfaceFunction() { | |
| 18430 | - if (type === 10) { | |
| 18431 | - return elem.comp.compInterface(element.p.v); | |
| 18432 | - } | |
| 18433 | - return expressionProperty(); | |
| 18434 | - } | |
| 18435 | - if (element.p.setGroupProperty) { | |
| 18436 | - element.p.setGroupProperty(PropertyInterface('', propertyGroup)); | |
| 18437 | - } | |
| 18438 | - return interfaceFunction; | |
| 18439 | - } | |
| 18440 | - return ob; | |
| 18441 | - }(); | |
| 18442 | - | |
| 18443 | - var ShapePathInterface = function () { | |
| 18444 | - return function pathInterfaceFactory(shape, view, propertyGroup) { | |
| 18445 | - var prop = view.sh; | |
| 18446 | - function interfaceFunction(val) { | |
| 18447 | - if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) { | |
| 18448 | - return interfaceFunction.path; | |
| 18449 | - } | |
| 18450 | - return null; | |
| 18451 | - } | |
| 18452 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18453 | - prop.setGroupProperty(PropertyInterface('Path', _propertyGroup)); | |
| 18454 | - Object.defineProperties(interfaceFunction, { | |
| 18455 | - path: { | |
| 18456 | - get: function get() { | |
| 18457 | - if (prop.k) { | |
| 18458 | - prop.getValue(); | |
| 18459 | - } | |
| 18460 | - return prop; | |
| 18461 | - } | |
| 18462 | - }, | |
| 18463 | - shape: { | |
| 18464 | - get: function get() { | |
| 18465 | - if (prop.k) { | |
| 18466 | - prop.getValue(); | |
| 18467 | - } | |
| 18468 | - return prop; | |
| 18469 | - } | |
| 18470 | - }, | |
| 18471 | - _name: { | |
| 18472 | - value: shape.nm | |
| 18473 | - }, | |
| 18474 | - ix: { | |
| 18475 | - value: shape.ix | |
| 18476 | - }, | |
| 18477 | - propertyIndex: { | |
| 18478 | - value: shape.ix | |
| 18479 | - }, | |
| 18480 | - mn: { | |
| 18481 | - value: shape.mn | |
| 18482 | - }, | |
| 18483 | - propertyGroup: { | |
| 18484 | - value: propertyGroup | |
| 18485 | - } | |
| 18486 | - }); | |
| 18487 | - return interfaceFunction; | |
| 18488 | - }; | |
| 18489 | - }(); | |
| 18490 | - | |
| 18491 | - var ShapeExpressionInterface = function () { | |
| 18492 | - function iterateElements(shapes, view, propertyGroup) { | |
| 18493 | - var arr = []; | |
| 18494 | - var i; | |
| 18495 | - var len = shapes ? shapes.length : 0; | |
| 18496 | - for (i = 0; i < len; i += 1) { | |
| 18497 | - if (shapes[i].ty === 'gr') { | |
| 18498 | - arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18499 | - } else if (shapes[i].ty === 'fl') { | |
| 18500 | - arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18501 | - } else if (shapes[i].ty === 'st') { | |
| 18502 | - arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18503 | - } else if (shapes[i].ty === 'tm') { | |
| 18504 | - arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18505 | - } else if (shapes[i].ty === 'tr') { | |
| 18506 | - // arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup)); | |
| 18507 | - } else if (shapes[i].ty === 'el') { | |
| 18508 | - arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18509 | - } else if (shapes[i].ty === 'sr') { | |
| 18510 | - arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18511 | - } else if (shapes[i].ty === 'sh') { | |
| 18512 | - arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup)); | |
| 18513 | - } else if (shapes[i].ty === 'rc') { | |
| 18514 | - arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18515 | - } else if (shapes[i].ty === 'rd') { | |
| 18516 | - arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18517 | - } else if (shapes[i].ty === 'rp') { | |
| 18518 | - arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18519 | - } else if (shapes[i].ty === 'gf') { | |
| 18520 | - arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18521 | - } else { | |
| 18522 | - arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup)); | |
| 18523 | - } | |
| 18524 | - } | |
| 18525 | - return arr; | |
| 18526 | - } | |
| 18527 | - function contentsInterfaceFactory(shape, view, propertyGroup) { | |
| 18528 | - var interfaces; | |
| 18529 | - var interfaceFunction = function _interfaceFunction(value) { | |
| 18530 | - var i = 0; | |
| 18531 | - var len = interfaces.length; | |
| 18532 | - while (i < len) { | |
| 18533 | - if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) { | |
| 18534 | - return interfaces[i]; | |
| 18535 | - } | |
| 18536 | - i += 1; | |
| 18537 | - } | |
| 18538 | - if (typeof value === 'number') { | |
| 18539 | - return interfaces[value - 1]; | |
| 18540 | - } | |
| 18541 | - return null; | |
| 18542 | - }; | |
| 18543 | - interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18544 | - interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup); | |
| 18545 | - interfaceFunction.numProperties = interfaces.length; | |
| 18546 | - var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); | |
| 18547 | - interfaceFunction.transform = transformInterface; | |
| 18548 | - interfaceFunction.propertyIndex = shape.cix; | |
| 18549 | - interfaceFunction._name = shape.nm; | |
| 18550 | - return interfaceFunction; | |
| 18551 | - } | |
| 18552 | - function groupInterfaceFactory(shape, view, propertyGroup) { | |
| 18553 | - var interfaceFunction = function _interfaceFunction(value) { | |
| 18554 | - switch (value) { | |
| 18555 | - case 'ADBE Vectors Group': | |
| 18556 | - case 'Contents': | |
| 18557 | - case 2: | |
| 18558 | - return interfaceFunction.content; | |
| 18559 | - // Not necessary for now. Keeping them here in case a new case appears | |
| 18560 | - // case 'ADBE Vector Transform Group': | |
| 18561 | - // case 3: | |
| 18562 | - default: | |
| 18563 | - return interfaceFunction.transform; | |
| 18564 | - } | |
| 18565 | - }; | |
| 18566 | - interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18567 | - var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup); | |
| 18568 | - var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); | |
| 18569 | - interfaceFunction.content = content; | |
| 18570 | - interfaceFunction.transform = transformInterface; | |
| 18571 | - Object.defineProperty(interfaceFunction, '_name', { | |
| 18572 | - get: function get() { | |
| 18573 | - return shape.nm; | |
| 18574 | - } | |
| 18575 | - }); | |
| 18576 | - // interfaceFunction.content = interfaceFunction; | |
| 18577 | - interfaceFunction.numProperties = shape.np; | |
| 18578 | - interfaceFunction.propertyIndex = shape.ix; | |
| 18579 | - interfaceFunction.nm = shape.nm; | |
| 18580 | - interfaceFunction.mn = shape.mn; | |
| 18581 | - return interfaceFunction; | |
| 18582 | - } | |
| 18583 | - function fillInterfaceFactory(shape, view, propertyGroup) { | |
| 18584 | - function interfaceFunction(val) { | |
| 18585 | - if (val === 'Color' || val === 'color') { | |
| 18586 | - return interfaceFunction.color; | |
| 18587 | - } | |
| 18588 | - if (val === 'Opacity' || val === 'opacity') { | |
| 18589 | - return interfaceFunction.opacity; | |
| 18590 | - } | |
| 18591 | - return null; | |
| 18592 | - } | |
| 18593 | - Object.defineProperties(interfaceFunction, { | |
| 18594 | - color: { | |
| 18595 | - get: ExpressionPropertyInterface(view.c) | |
| 18596 | - }, | |
| 18597 | - opacity: { | |
| 18598 | - get: ExpressionPropertyInterface(view.o) | |
| 18599 | - }, | |
| 18600 | - _name: { | |
| 18601 | - value: shape.nm | |
| 18602 | - }, | |
| 18603 | - mn: { | |
| 18604 | - value: shape.mn | |
| 18605 | - } | |
| 18606 | - }); | |
| 18607 | - view.c.setGroupProperty(PropertyInterface('Color', propertyGroup)); | |
| 18608 | - view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup)); | |
| 18609 | - return interfaceFunction; | |
| 18610 | - } | |
| 18611 | - function gradientFillInterfaceFactory(shape, view, propertyGroup) { | |
| 18612 | - function interfaceFunction(val) { | |
| 18613 | - if (val === 'Start Point' || val === 'start point') { | |
| 18614 | - return interfaceFunction.startPoint; | |
| 18615 | - } | |
| 18616 | - if (val === 'End Point' || val === 'end point') { | |
| 18617 | - return interfaceFunction.endPoint; | |
| 18618 | - } | |
| 18619 | - if (val === 'Opacity' || val === 'opacity') { | |
| 18620 | - return interfaceFunction.opacity; | |
| 18621 | - } | |
| 18622 | - return null; | |
| 18623 | - } | |
| 18624 | - Object.defineProperties(interfaceFunction, { | |
| 18625 | - startPoint: { | |
| 18626 | - get: ExpressionPropertyInterface(view.s) | |
| 18627 | - }, | |
| 18628 | - endPoint: { | |
| 18629 | - get: ExpressionPropertyInterface(view.e) | |
| 18630 | - }, | |
| 18631 | - opacity: { | |
| 18632 | - get: ExpressionPropertyInterface(view.o) | |
| 18633 | - }, | |
| 18634 | - type: { | |
| 18635 | - get: function get() { | |
| 18636 | - return 'a'; | |
| 18637 | - } | |
| 18638 | - }, | |
| 18639 | - _name: { | |
| 18640 | - value: shape.nm | |
| 18641 | - }, | |
| 18642 | - mn: { | |
| 18643 | - value: shape.mn | |
| 18644 | - } | |
| 18645 | - }); | |
| 18646 | - view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup)); | |
| 18647 | - view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup)); | |
| 18648 | - view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup)); | |
| 18649 | - return interfaceFunction; | |
| 18650 | - } | |
| 18651 | - function defaultInterfaceFactory() { | |
| 18652 | - function interfaceFunction() { | |
| 18653 | - return null; | |
| 18654 | - } | |
| 18655 | - return interfaceFunction; | |
| 18656 | - } | |
| 18657 | - function strokeInterfaceFactory(shape, view, propertyGroup) { | |
| 18658 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18659 | - var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup); | |
| 18660 | - function addPropertyToDashOb(i) { | |
| 18661 | - Object.defineProperty(dashOb, shape.d[i].nm, { | |
| 18662 | - get: ExpressionPropertyInterface(view.d.dataProps[i].p) | |
| 18663 | - }); | |
| 18664 | - } | |
| 18665 | - var i; | |
| 18666 | - var len = shape.d ? shape.d.length : 0; | |
| 18667 | - var dashOb = {}; | |
| 18668 | - for (i = 0; i < len; i += 1) { | |
| 18669 | - addPropertyToDashOb(i); | |
| 18670 | - view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup); | |
| 18671 | - } | |
| 18672 | - function interfaceFunction(val) { | |
| 18673 | - if (val === 'Color' || val === 'color') { | |
| 18674 | - return interfaceFunction.color; | |
| 18675 | - } | |
| 18676 | - if (val === 'Opacity' || val === 'opacity') { | |
| 18677 | - return interfaceFunction.opacity; | |
| 18678 | - } | |
| 18679 | - if (val === 'Stroke Width' || val === 'stroke width') { | |
| 18680 | - return interfaceFunction.strokeWidth; | |
| 18681 | - } | |
| 18682 | - return null; | |
| 18683 | - } | |
| 18684 | - Object.defineProperties(interfaceFunction, { | |
| 18685 | - color: { | |
| 18686 | - get: ExpressionPropertyInterface(view.c) | |
| 18687 | - }, | |
| 18688 | - opacity: { | |
| 18689 | - get: ExpressionPropertyInterface(view.o) | |
| 18690 | - }, | |
| 18691 | - strokeWidth: { | |
| 18692 | - get: ExpressionPropertyInterface(view.w) | |
| 18693 | - }, | |
| 18694 | - dash: { | |
| 18695 | - get: function get() { | |
| 18696 | - return dashOb; | |
| 18697 | - } | |
| 18698 | - }, | |
| 18699 | - _name: { | |
| 18700 | - value: shape.nm | |
| 18701 | - }, | |
| 18702 | - mn: { | |
| 18703 | - value: shape.mn | |
| 18704 | - } | |
| 18705 | - }); | |
| 18706 | - view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup)); | |
| 18707 | - view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup)); | |
| 18708 | - view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup)); | |
| 18709 | - return interfaceFunction; | |
| 18710 | - } | |
| 18711 | - function trimInterfaceFactory(shape, view, propertyGroup) { | |
| 18712 | - function interfaceFunction(val) { | |
| 18713 | - if (val === shape.e.ix || val === 'End' || val === 'end') { | |
| 18714 | - return interfaceFunction.end; | |
| 18715 | - } | |
| 18716 | - if (val === shape.s.ix) { | |
| 18717 | - return interfaceFunction.start; | |
| 18718 | - } | |
| 18719 | - if (val === shape.o.ix) { | |
| 18720 | - return interfaceFunction.offset; | |
| 18721 | - } | |
| 18722 | - return null; | |
| 18723 | - } | |
| 18724 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18725 | - interfaceFunction.propertyIndex = shape.ix; | |
| 18726 | - view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup)); | |
| 18727 | - view.e.setGroupProperty(PropertyInterface('End', _propertyGroup)); | |
| 18728 | - view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup)); | |
| 18729 | - interfaceFunction.propertyIndex = shape.ix; | |
| 18730 | - interfaceFunction.propertyGroup = propertyGroup; | |
| 18731 | - Object.defineProperties(interfaceFunction, { | |
| 18732 | - start: { | |
| 18733 | - get: ExpressionPropertyInterface(view.s) | |
| 18734 | - }, | |
| 18735 | - end: { | |
| 18736 | - get: ExpressionPropertyInterface(view.e) | |
| 18737 | - }, | |
| 18738 | - offset: { | |
| 18739 | - get: ExpressionPropertyInterface(view.o) | |
| 18740 | - }, | |
| 18741 | - _name: { | |
| 18742 | - value: shape.nm | |
| 18743 | - } | |
| 18744 | - }); | |
| 18745 | - interfaceFunction.mn = shape.mn; | |
| 18746 | - return interfaceFunction; | |
| 18747 | - } | |
| 18748 | - function transformInterfaceFactory(shape, view, propertyGroup) { | |
| 18749 | - function interfaceFunction(value) { | |
| 18750 | - if (shape.a.ix === value || value === 'Anchor Point') { | |
| 18751 | - return interfaceFunction.anchorPoint; | |
| 18752 | - } | |
| 18753 | - if (shape.o.ix === value || value === 'Opacity') { | |
| 18754 | - return interfaceFunction.opacity; | |
| 18755 | - } | |
| 18756 | - if (shape.p.ix === value || value === 'Position') { | |
| 18757 | - return interfaceFunction.position; | |
| 18758 | - } | |
| 18759 | - if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') { | |
| 18760 | - return interfaceFunction.rotation; | |
| 18761 | - } | |
| 18762 | - if (shape.s.ix === value || value === 'Scale') { | |
| 18763 | - return interfaceFunction.scale; | |
| 18764 | - } | |
| 18765 | - if (shape.sk && shape.sk.ix === value || value === 'Skew') { | |
| 18766 | - return interfaceFunction.skew; | |
| 18767 | - } | |
| 18768 | - if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') { | |
| 18769 | - return interfaceFunction.skewAxis; | |
| 18770 | - } | |
| 18771 | - return null; | |
| 18772 | - } | |
| 18773 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18774 | - view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup)); | |
| 18775 | - view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup)); | |
| 18776 | - view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup)); | |
| 18777 | - view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup)); | |
| 18778 | - view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup)); | |
| 18779 | - if (view.transform.mProps.sk) { | |
| 18780 | - view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup)); | |
| 18781 | - view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup)); | |
| 18782 | - } | |
| 18783 | - view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup)); | |
| 18784 | - Object.defineProperties(interfaceFunction, { | |
| 18785 | - opacity: { | |
| 18786 | - get: ExpressionPropertyInterface(view.transform.mProps.o) | |
| 18787 | - }, | |
| 18788 | - position: { | |
| 18789 | - get: ExpressionPropertyInterface(view.transform.mProps.p) | |
| 18790 | - }, | |
| 18791 | - anchorPoint: { | |
| 18792 | - get: ExpressionPropertyInterface(view.transform.mProps.a) | |
| 18793 | - }, | |
| 18794 | - scale: { | |
| 18795 | - get: ExpressionPropertyInterface(view.transform.mProps.s) | |
| 18796 | - }, | |
| 18797 | - rotation: { | |
| 18798 | - get: ExpressionPropertyInterface(view.transform.mProps.r) | |
| 18799 | - }, | |
| 18800 | - skew: { | |
| 18801 | - get: ExpressionPropertyInterface(view.transform.mProps.sk) | |
| 18802 | - }, | |
| 18803 | - skewAxis: { | |
| 18804 | - get: ExpressionPropertyInterface(view.transform.mProps.sa) | |
| 18805 | - }, | |
| 18806 | - _name: { | |
| 18807 | - value: shape.nm | |
| 18808 | - } | |
| 18809 | - }); | |
| 18810 | - interfaceFunction.ty = 'tr'; | |
| 18811 | - interfaceFunction.mn = shape.mn; | |
| 18812 | - interfaceFunction.propertyGroup = propertyGroup; | |
| 18813 | - return interfaceFunction; | |
| 18814 | - } | |
| 18815 | - function ellipseInterfaceFactory(shape, view, propertyGroup) { | |
| 18816 | - function interfaceFunction(value) { | |
| 18817 | - if (shape.p.ix === value) { | |
| 18818 | - return interfaceFunction.position; | |
| 18819 | - } | |
| 18820 | - if (shape.s.ix === value) { | |
| 18821 | - return interfaceFunction.size; | |
| 18822 | - } | |
| 18823 | - return null; | |
| 18824 | - } | |
| 18825 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18826 | - interfaceFunction.propertyIndex = shape.ix; | |
| 18827 | - var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh; | |
| 18828 | - prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup)); | |
| 18829 | - prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup)); | |
| 18830 | - Object.defineProperties(interfaceFunction, { | |
| 18831 | - size: { | |
| 18832 | - get: ExpressionPropertyInterface(prop.s) | |
| 18833 | - }, | |
| 18834 | - position: { | |
| 18835 | - get: ExpressionPropertyInterface(prop.p) | |
| 18836 | - }, | |
| 18837 | - _name: { | |
| 18838 | - value: shape.nm | |
| 18839 | - } | |
| 18840 | - }); | |
| 18841 | - interfaceFunction.mn = shape.mn; | |
| 18842 | - return interfaceFunction; | |
| 18843 | - } | |
| 18844 | - function starInterfaceFactory(shape, view, propertyGroup) { | |
| 18845 | - function interfaceFunction(value) { | |
| 18846 | - if (shape.p.ix === value) { | |
| 18847 | - return interfaceFunction.position; | |
| 18848 | - } | |
| 18849 | - if (shape.r.ix === value) { | |
| 18850 | - return interfaceFunction.rotation; | |
| 18851 | - } | |
| 18852 | - if (shape.pt.ix === value) { | |
| 18853 | - return interfaceFunction.points; | |
| 18854 | - } | |
| 18855 | - if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') { | |
| 18856 | - return interfaceFunction.outerRadius; | |
| 18857 | - } | |
| 18858 | - if (shape.os.ix === value) { | |
| 18859 | - return interfaceFunction.outerRoundness; | |
| 18860 | - } | |
| 18861 | - if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) { | |
| 18862 | - return interfaceFunction.innerRadius; | |
| 18863 | - } | |
| 18864 | - if (shape.is && shape.is.ix === value) { | |
| 18865 | - return interfaceFunction.innerRoundness; | |
| 18866 | - } | |
| 18867 | - return null; | |
| 18868 | - } | |
| 18869 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18870 | - var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh; | |
| 18871 | - interfaceFunction.propertyIndex = shape.ix; | |
| 18872 | - prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup)); | |
| 18873 | - prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup)); | |
| 18874 | - prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup)); | |
| 18875 | - prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup)); | |
| 18876 | - prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup)); | |
| 18877 | - if (shape.ir) { | |
| 18878 | - prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup)); | |
| 18879 | - prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup)); | |
| 18880 | - } | |
| 18881 | - Object.defineProperties(interfaceFunction, { | |
| 18882 | - position: { | |
| 18883 | - get: ExpressionPropertyInterface(prop.p) | |
| 18884 | - }, | |
| 18885 | - rotation: { | |
| 18886 | - get: ExpressionPropertyInterface(prop.r) | |
| 18887 | - }, | |
| 18888 | - points: { | |
| 18889 | - get: ExpressionPropertyInterface(prop.pt) | |
| 18890 | - }, | |
| 18891 | - outerRadius: { | |
| 18892 | - get: ExpressionPropertyInterface(prop.or) | |
| 18893 | - }, | |
| 18894 | - outerRoundness: { | |
| 18895 | - get: ExpressionPropertyInterface(prop.os) | |
| 18896 | - }, | |
| 18897 | - innerRadius: { | |
| 18898 | - get: ExpressionPropertyInterface(prop.ir) | |
| 18899 | - }, | |
| 18900 | - innerRoundness: { | |
| 18901 | - get: ExpressionPropertyInterface(prop.is) | |
| 18902 | - }, | |
| 18903 | - _name: { | |
| 18904 | - value: shape.nm | |
| 18905 | - } | |
| 18906 | - }); | |
| 18907 | - interfaceFunction.mn = shape.mn; | |
| 18908 | - return interfaceFunction; | |
| 18909 | - } | |
| 18910 | - function rectInterfaceFactory(shape, view, propertyGroup) { | |
| 18911 | - function interfaceFunction(value) { | |
| 18912 | - if (shape.p.ix === value) { | |
| 18913 | - return interfaceFunction.position; | |
| 18914 | - } | |
| 18915 | - if (shape.r.ix === value) { | |
| 18916 | - return interfaceFunction.roundness; | |
| 18917 | - } | |
| 18918 | - if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') { | |
| 18919 | - return interfaceFunction.size; | |
| 18920 | - } | |
| 18921 | - return null; | |
| 18922 | - } | |
| 18923 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18924 | - var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh; | |
| 18925 | - interfaceFunction.propertyIndex = shape.ix; | |
| 18926 | - prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup)); | |
| 18927 | - prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup)); | |
| 18928 | - prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup)); | |
| 18929 | - Object.defineProperties(interfaceFunction, { | |
| 18930 | - position: { | |
| 18931 | - get: ExpressionPropertyInterface(prop.p) | |
| 18932 | - }, | |
| 18933 | - roundness: { | |
| 18934 | - get: ExpressionPropertyInterface(prop.r) | |
| 18935 | - }, | |
| 18936 | - size: { | |
| 18937 | - get: ExpressionPropertyInterface(prop.s) | |
| 18938 | - }, | |
| 18939 | - _name: { | |
| 18940 | - value: shape.nm | |
| 18941 | - } | |
| 18942 | - }); | |
| 18943 | - interfaceFunction.mn = shape.mn; | |
| 18944 | - return interfaceFunction; | |
| 18945 | - } | |
| 18946 | - function roundedInterfaceFactory(shape, view, propertyGroup) { | |
| 18947 | - function interfaceFunction(value) { | |
| 18948 | - if (shape.r.ix === value || value === 'Round Corners 1') { | |
| 18949 | - return interfaceFunction.radius; | |
| 18950 | - } | |
| 18951 | - return null; | |
| 18952 | - } | |
| 18953 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18954 | - var prop = view; | |
| 18955 | - interfaceFunction.propertyIndex = shape.ix; | |
| 18956 | - prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup)); | |
| 18957 | - Object.defineProperties(interfaceFunction, { | |
| 18958 | - radius: { | |
| 18959 | - get: ExpressionPropertyInterface(prop.rd) | |
| 18960 | - }, | |
| 18961 | - _name: { | |
| 18962 | - value: shape.nm | |
| 18963 | - } | |
| 18964 | - }); | |
| 18965 | - interfaceFunction.mn = shape.mn; | |
| 18966 | - return interfaceFunction; | |
| 18967 | - } | |
| 18968 | - function repeaterInterfaceFactory(shape, view, propertyGroup) { | |
| 18969 | - function interfaceFunction(value) { | |
| 18970 | - if (shape.c.ix === value || value === 'Copies') { | |
| 18971 | - return interfaceFunction.copies; | |
| 18972 | - } | |
| 18973 | - if (shape.o.ix === value || value === 'Offset') { | |
| 18974 | - return interfaceFunction.offset; | |
| 18975 | - } | |
| 18976 | - return null; | |
| 18977 | - } | |
| 18978 | - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); | |
| 18979 | - var prop = view; | |
| 18980 | - interfaceFunction.propertyIndex = shape.ix; | |
| 18981 | - prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup)); | |
| 18982 | - prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup)); | |
| 18983 | - Object.defineProperties(interfaceFunction, { | |
| 18984 | - copies: { | |
| 18985 | - get: ExpressionPropertyInterface(prop.c) | |
| 18986 | - }, | |
| 18987 | - offset: { | |
| 18988 | - get: ExpressionPropertyInterface(prop.o) | |
| 18989 | - }, | |
| 18990 | - _name: { | |
| 18991 | - value: shape.nm | |
| 18992 | - } | |
| 18993 | - }); | |
| 18994 | - interfaceFunction.mn = shape.mn; | |
| 18995 | - return interfaceFunction; | |
| 18996 | - } | |
| 18997 | - return function (shapes, view, propertyGroup) { | |
| 18998 | - var interfaces; | |
| 18999 | - function _interfaceFunction(value) { | |
| 19000 | - if (typeof value === 'number') { | |
| 19001 | - value = value === undefined ? 1 : value; | |
| 19002 | - if (value === 0) { | |
| 19003 | - return propertyGroup; | |
| 19004 | - } | |
| 19005 | - return interfaces[value - 1]; | |
| 19006 | - } | |
| 19007 | - var i = 0; | |
| 19008 | - var len = interfaces.length; | |
| 19009 | - while (i < len) { | |
| 19010 | - if (interfaces[i]._name === value) { | |
| 19011 | - return interfaces[i]; | |
| 19012 | - } | |
| 19013 | - i += 1; | |
| 19014 | - } | |
| 19015 | - return null; | |
| 19016 | - } | |
| 19017 | - function parentGroupWrapper() { | |
| 19018 | - return propertyGroup; | |
| 19019 | - } | |
| 19020 | - _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper); | |
| 19021 | - interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup); | |
| 19022 | - _interfaceFunction.numProperties = interfaces.length; | |
| 19023 | - _interfaceFunction._name = 'Contents'; | |
| 19024 | - return _interfaceFunction; | |
| 19025 | - }; | |
| 19026 | - }(); | |
| 19027 | - | |
| 19028 | - var TextExpressionInterface = function () { | |
| 19029 | - return function (elem) { | |
| 19030 | - var _sourceText; | |
| 19031 | - function _thisLayerFunction(name) { | |
| 19032 | - switch (name) { | |
| 19033 | - case 'ADBE Text Document': | |
| 19034 | - return _thisLayerFunction.sourceText; | |
| 19035 | - default: | |
| 19036 | - return null; | |
| 19037 | - } | |
| 19038 | - } | |
| 19039 | - Object.defineProperty(_thisLayerFunction, 'sourceText', { | |
| 19040 | - get: function get() { | |
| 19041 | - elem.textProperty.getValue(); | |
| 19042 | - var stringValue = elem.textProperty.currentData.t; | |
| 19043 | - if (!_sourceText || stringValue !== _sourceText.value) { | |
| 19044 | - _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers | |
| 19045 | - // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive | |
| 19046 | - _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers | |
| 19047 | - Object.defineProperty(_sourceText, 'style', { | |
| 19048 | - get: function get() { | |
| 19049 | - return { | |
| 19050 | - fillColor: elem.textProperty.currentData.fc | |
| 19051 | - }; | |
| 19052 | - } | |
| 19053 | - }); | |
| 19054 | - } | |
| 19055 | - return _sourceText; | |
| 19056 | - } | |
| 19057 | - }); | |
| 19058 | - return _thisLayerFunction; | |
| 19059 | - }; | |
| 19060 | - }(); | |
| 19061 | - | |
| 19062 | - function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } | |
| 19063 | - var FootageInterface = function () { | |
| 19064 | - var outlineInterfaceFactory = function outlineInterfaceFactory(elem) { | |
| 19065 | - var currentPropertyName = ''; | |
| 19066 | - var currentProperty = elem.getFootageData(); | |
| 19067 | - function init() { | |
| 19068 | - currentPropertyName = ''; | |
| 19069 | - currentProperty = elem.getFootageData(); | |
| 19070 | - return searchProperty; | |
| 19071 | - } | |
| 19072 | - function searchProperty(value) { | |
| 19073 | - if (currentProperty[value]) { | |
| 19074 | - currentPropertyName = value; | |
| 19075 | - currentProperty = currentProperty[value]; | |
| 19076 | - if (_typeof(currentProperty) === 'object') { | |
| 19077 | - return searchProperty; | |
| 19078 | - } | |
| 19079 | - return currentProperty; | |
| 19080 | - } | |
| 19081 | - var propertyNameIndex = value.indexOf(currentPropertyName); | |
| 19082 | - if (propertyNameIndex !== -1) { | |
| 19083 | - var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10); | |
| 19084 | - currentProperty = currentProperty[index]; | |
| 19085 | - if (_typeof(currentProperty) === 'object') { | |
| 19086 | - return searchProperty; | |
| 19087 | - } | |
| 19088 | - return currentProperty; | |
| 19089 | - } | |
| 19090 | - return ''; | |
| 19091 | - } | |
| 19092 | - return init; | |
| 19093 | - }; | |
| 19094 | - var dataInterfaceFactory = function dataInterfaceFactory(elem) { | |
| 19095 | - function interfaceFunction(value) { | |
| 19096 | - if (value === 'Outline') { | |
| 19097 | - return interfaceFunction.outlineInterface(); | |
| 19098 | - } | |
| 19099 | - return null; | |
| 19100 | - } | |
| 19101 | - interfaceFunction._name = 'Outline'; | |
| 19102 | - interfaceFunction.outlineInterface = outlineInterfaceFactory(elem); | |
| 19103 | - return interfaceFunction; | |
| 19104 | - }; | |
| 19105 | - return function (elem) { | |
| 19106 | - function _interfaceFunction(value) { | |
| 19107 | - if (value === 'Data') { | |
| 19108 | - return _interfaceFunction.dataInterface; | |
| 19109 | - } | |
| 19110 | - return null; | |
| 19111 | - } | |
| 19112 | - _interfaceFunction._name = 'Data'; | |
| 19113 | - _interfaceFunction.dataInterface = dataInterfaceFactory(elem); | |
| 19114 | - return _interfaceFunction; | |
| 19115 | - }; | |
| 19116 | - }(); | |
| 19117 | - | |
| 19118 | - var interfaces = { | |
| 19119 | - layer: LayerExpressionInterface, | |
| 19120 | - effects: EffectsExpressionInterface, | |
| 19121 | - comp: CompExpressionInterface, | |
| 19122 | - shape: ShapeExpressionInterface, | |
| 19123 | - text: TextExpressionInterface, | |
| 19124 | - footage: FootageInterface | |
| 19125 | - }; | |
| 19126 | - function getInterface(type) { | |
| 19127 | - return interfaces[type] || null; | |
| 19128 | - } | |
| 19129 | - | |
| 19130 | - var expressionHelpers = function () { | |
| 19131 | - function searchExpressions(elem, data, prop) { | |
| 19132 | - if (data.x) { | |
| 19133 | - prop.k = true; | |
| 19134 | - prop.x = true; | |
| 19135 | - prop.initiateExpression = ExpressionManager.initiateExpression; | |
| 19136 | - prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop)); | |
| 19137 | - } | |
| 19138 | - } | |
| 19139 | - function getValueAtTime(frameNum) { | |
| 19140 | - frameNum *= this.elem.globalData.frameRate; | |
| 19141 | - frameNum -= this.offsetTime; | |
| 19142 | - if (frameNum !== this._cachingAtTime.lastFrame) { | |
| 19143 | - this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0; | |
| 19144 | - this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime); | |
| 19145 | - this._cachingAtTime.lastFrame = frameNum; | |
| 19146 | - } | |
| 19147 | - return this._cachingAtTime.value; | |
| 19148 | - } | |
| 19149 | - function getSpeedAtTime(frameNum) { | |
| 19150 | - var delta = -0.01; | |
| 19151 | - var v1 = this.getValueAtTime(frameNum); | |
| 19152 | - var v2 = this.getValueAtTime(frameNum + delta); | |
| 19153 | - var speed = 0; | |
| 19154 | - if (v1.length) { | |
| 19155 | - var i; | |
| 19156 | - for (i = 0; i < v1.length; i += 1) { | |
| 19157 | - speed += Math.pow(v2[i] - v1[i], 2); | |
| 19158 | - } | |
| 19159 | - speed = Math.sqrt(speed) * 100; | |
| 19160 | - } else { | |
| 19161 | - speed = 0; | |
| 19162 | - } | |
| 19163 | - return speed; | |
| 19164 | - } | |
| 19165 | - function getVelocityAtTime(frameNum) { | |
| 19166 | - if (this.vel !== undefined) { | |
| 19167 | - return this.vel; | |
| 19168 | - } | |
| 19169 | - var delta = -0.001; | |
| 19170 | - // frameNum += this.elem.data.st; | |
| 19171 | - var v1 = this.getValueAtTime(frameNum); | |
| 19172 | - var v2 = this.getValueAtTime(frameNum + delta); | |
| 19173 | - var velocity; | |
| 19174 | - if (v1.length) { | |
| 19175 | - velocity = createTypedArray('float32', v1.length); | |
| 19176 | - var i; | |
| 19177 | - for (i = 0; i < v1.length; i += 1) { | |
| 19178 | - // removing frameRate | |
| 19179 | - // if needed, don't add it here | |
| 19180 | - // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta); | |
| 19181 | - velocity[i] = (v2[i] - v1[i]) / delta; | |
| 19182 | - } | |
| 19183 | - } else { | |
| 19184 | - velocity = (v2 - v1) / delta; | |
| 19185 | - } | |
| 19186 | - return velocity; | |
| 19187 | - } | |
| 19188 | - function getStaticValueAtTime() { | |
| 19189 | - return this.pv; | |
| 19190 | - } | |
| 19191 | - function setGroupProperty(propertyGroup) { | |
| 19192 | - this.propertyGroup = propertyGroup; | |
| 19193 | - } | |
| 19194 | - return { | |
| 19195 | - searchExpressions: searchExpressions, | |
| 19196 | - getSpeedAtTime: getSpeedAtTime, | |
| 19197 | - getVelocityAtTime: getVelocityAtTime, | |
| 19198 | - getValueAtTime: getValueAtTime, | |
| 19199 | - getStaticValueAtTime: getStaticValueAtTime, | |
| 19200 | - setGroupProperty: setGroupProperty | |
| 19201 | - }; | |
| 19202 | - }(); | |
| 19203 | - | |
| 19204 | - function addPropertyDecorator() { | |
| 19205 | - function loopOut(type, duration, durationFlag) { | |
| 19206 | - if (!this.k || !this.keyframes) { | |
| 19207 | - return this.pv; | |
| 19208 | - } | |
| 19209 | - type = type ? type.toLowerCase() : ''; | |
| 19210 | - var currentFrame = this.comp.renderedFrame; | |
| 19211 | - var keyframes = this.keyframes; | |
| 19212 | - var lastKeyFrame = keyframes[keyframes.length - 1].t; | |
| 19213 | - if (currentFrame <= lastKeyFrame) { | |
| 19214 | - return this.pv; | |
| 19215 | - } | |
| 19216 | - var cycleDuration; | |
| 19217 | - var firstKeyFrame; | |
| 19218 | - if (!durationFlag) { | |
| 19219 | - if (!duration || duration > keyframes.length - 1) { | |
| 19220 | - duration = keyframes.length - 1; | |
| 19221 | - } | |
| 19222 | - firstKeyFrame = keyframes[keyframes.length - 1 - duration].t; | |
| 19223 | - cycleDuration = lastKeyFrame - firstKeyFrame; | |
| 19224 | - } else { | |
| 19225 | - if (!duration) { | |
| 19226 | - cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip); | |
| 19227 | - } else { | |
| 19228 | - cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration); | |
| 19229 | - } | |
| 19230 | - firstKeyFrame = lastKeyFrame - cycleDuration; | |
| 19231 | - } | |
| 19232 | - var i; | |
| 19233 | - var len; | |
| 19234 | - var ret; | |
| 19235 | - if (type === 'pingpong') { | |
| 19236 | - var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); | |
| 19237 | - if (iterations % 2 !== 0) { | |
| 19238 | - return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line | |
| 19239 | - } | |
| 19240 | - } else if (type === 'offset') { | |
| 19241 | - var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); | |
| 19242 | - var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); | |
| 19243 | - var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line | |
| 19244 | - var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); | |
| 19245 | - if (this.pv.length) { | |
| 19246 | - ret = new Array(initV.length); | |
| 19247 | - len = ret.length; | |
| 19248 | - for (i = 0; i < len; i += 1) { | |
| 19249 | - ret[i] = (endV[i] - initV[i]) * repeats + current[i]; | |
| 19250 | - } | |
| 19251 | - return ret; | |
| 19252 | - } | |
| 19253 | - return (endV - initV) * repeats + current; | |
| 19254 | - } else if (type === 'continue') { | |
| 19255 | - var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); | |
| 19256 | - var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0); | |
| 19257 | - if (this.pv.length) { | |
| 19258 | - ret = new Array(lastValue.length); | |
| 19259 | - len = ret.length; | |
| 19260 | - for (i = 0; i < len; i += 1) { | |
| 19261 | - ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line | |
| 19262 | - } | |
| 19263 | - return ret; | |
| 19264 | - } | |
| 19265 | - return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001); | |
| 19266 | - } | |
| 19267 | - return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line | |
| 19268 | - } | |
| 19269 | - function loopIn(type, duration, durationFlag) { | |
| 19270 | - if (!this.k) { | |
| 19271 | - return this.pv; | |
| 19272 | - } | |
| 19273 | - type = type ? type.toLowerCase() : ''; | |
| 19274 | - var currentFrame = this.comp.renderedFrame; | |
| 19275 | - var keyframes = this.keyframes; | |
| 19276 | - var firstKeyFrame = keyframes[0].t; | |
| 19277 | - if (currentFrame >= firstKeyFrame) { | |
| 19278 | - return this.pv; | |
| 19279 | - } | |
| 19280 | - var cycleDuration; | |
| 19281 | - var lastKeyFrame; | |
| 19282 | - if (!durationFlag) { | |
| 19283 | - if (!duration || duration > keyframes.length - 1) { | |
| 19284 | - duration = keyframes.length - 1; | |
| 19285 | - } | |
| 19286 | - lastKeyFrame = keyframes[duration].t; | |
| 19287 | - cycleDuration = lastKeyFrame - firstKeyFrame; | |
| 19288 | - } else { | |
| 19289 | - if (!duration) { | |
| 19290 | - cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame); | |
| 19291 | - } else { | |
| 19292 | - cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration); | |
| 19293 | - } | |
| 19294 | - lastKeyFrame = firstKeyFrame + cycleDuration; | |
| 19295 | - } | |
| 19296 | - var i; | |
| 19297 | - var len; | |
| 19298 | - var ret; | |
| 19299 | - if (type === 'pingpong') { | |
| 19300 | - var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration); | |
| 19301 | - if (iterations % 2 === 0) { | |
| 19302 | - return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line | |
| 19303 | - } | |
| 19304 | - } else if (type === 'offset') { | |
| 19305 | - var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); | |
| 19306 | - var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); | |
| 19307 | - var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); | |
| 19308 | - var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1; | |
| 19309 | - if (this.pv.length) { | |
| 19310 | - ret = new Array(initV.length); | |
| 19311 | - len = ret.length; | |
| 19312 | - for (i = 0; i < len; i += 1) { | |
| 19313 | - ret[i] = current[i] - (endV[i] - initV[i]) * repeats; | |
| 19314 | - } | |
| 19315 | - return ret; | |
| 19316 | - } | |
| 19317 | - return current - (endV - initV) * repeats; | |
| 19318 | - } else if (type === 'continue') { | |
| 19319 | - var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); | |
| 19320 | - var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0); | |
| 19321 | - if (this.pv.length) { | |
| 19322 | - ret = new Array(firstValue.length); | |
| 19323 | - len = ret.length; | |
| 19324 | - for (i = 0; i < len; i += 1) { | |
| 19325 | - ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001; | |
| 19326 | - } | |
| 19327 | - return ret; | |
| 19328 | - } | |
| 19329 | - return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001; | |
| 19330 | - } | |
| 19331 | - return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line | |
| 19332 | - } | |
| 19333 | - function smooth(width, samples) { | |
| 19334 | - if (!this.k) { | |
| 19335 | - return this.pv; | |
| 19336 | - } | |
| 19337 | - width = (width || 0.4) * 0.5; | |
| 19338 | - samples = Math.floor(samples || 5); | |
| 19339 | - if (samples <= 1) { | |
| 19340 | - return this.pv; | |
| 19341 | - } | |
| 19342 | - var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate; | |
| 19343 | - var initFrame = currentTime - width; | |
| 19344 | - var endFrame = currentTime + width; | |
| 19345 | - var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1; | |
| 19346 | - var i = 0; | |
| 19347 | - var j = 0; | |
| 19348 | - var value; | |
| 19349 | - if (this.pv.length) { | |
| 19350 | - value = createTypedArray('float32', this.pv.length); | |
| 19351 | - } else { | |
| 19352 | - value = 0; | |
| 19353 | - } | |
| 19354 | - var sampleValue; | |
| 19355 | - while (i < samples) { | |
| 19356 | - sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency); | |
| 19357 | - if (this.pv.length) { | |
| 19358 | - for (j = 0; j < this.pv.length; j += 1) { | |
| 19359 | - value[j] += sampleValue[j]; | |
| 19360 | - } | |
| 19361 | - } else { | |
| 19362 | - value += sampleValue; | |
| 19363 | - } | |
| 19364 | - i += 1; | |
| 19365 | - } | |
| 19366 | - if (this.pv.length) { | |
| 19367 | - for (j = 0; j < this.pv.length; j += 1) { | |
| 19368 | - value[j] /= samples; | |
| 19369 | - } | |
| 19370 | - } else { | |
| 19371 | - value /= samples; | |
| 19372 | - } | |
| 19373 | - return value; | |
| 19374 | - } | |
| 19375 | - function getTransformValueAtTime(time) { | |
| 19376 | - if (!this._transformCachingAtTime) { | |
| 19377 | - this._transformCachingAtTime = { | |
| 19378 | - v: new Matrix() | |
| 19379 | - }; | |
| 19380 | - } | |
| 19381 | - /// / | |
| 19382 | - var matrix = this._transformCachingAtTime.v; | |
| 19383 | - matrix.cloneFromProps(this.pre.props); | |
| 19384 | - if (this.appliedTransformations < 1) { | |
| 19385 | - var anchor = this.a.getValueAtTime(time); | |
| 19386 | - matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult); | |
| 19387 | - } | |
| 19388 | - if (this.appliedTransformations < 2) { | |
| 19389 | - var scale = this.s.getValueAtTime(time); | |
| 19390 | - matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult); | |
| 19391 | - } | |
| 19392 | - if (this.sk && this.appliedTransformations < 3) { | |
| 19393 | - var skew = this.sk.getValueAtTime(time); | |
| 19394 | - var skewAxis = this.sa.getValueAtTime(time); | |
| 19395 | - matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult); | |
| 19396 | - } | |
| 19397 | - if (this.r && this.appliedTransformations < 4) { | |
| 19398 | - var rotation = this.r.getValueAtTime(time); | |
| 19399 | - matrix.rotate(-rotation * this.r.mult); | |
| 19400 | - } else if (!this.r && this.appliedTransformations < 4) { | |
| 19401 | - var rotationZ = this.rz.getValueAtTime(time); | |
| 19402 | - var rotationY = this.ry.getValueAtTime(time); | |
| 19403 | - var rotationX = this.rx.getValueAtTime(time); | |
| 19404 | - var orientation = this.or.getValueAtTime(time); | |
| 19405 | - 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); | |
| 19406 | - } | |
| 19407 | - if (this.data.p && this.data.p.s) { | |
| 19408 | - var positionX = this.px.getValueAtTime(time); | |
| 19409 | - var positionY = this.py.getValueAtTime(time); | |
| 19410 | - if (this.data.p.z) { | |
| 19411 | - var positionZ = this.pz.getValueAtTime(time); | |
| 19412 | - matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult); | |
| 19413 | - } else { | |
| 19414 | - matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0); | |
| 19415 | - } | |
| 19416 | - } else { | |
| 19417 | - var position = this.p.getValueAtTime(time); | |
| 19418 | - matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult); | |
| 19419 | - } | |
| 19420 | - return matrix; | |
| 19421 | - /// / | |
| 19422 | - } | |
| 19423 | - function getTransformStaticValueAtTime() { | |
| 19424 | - return this.v.clone(new Matrix()); | |
| 19425 | - } | |
| 19426 | - var getTransformProperty = TransformPropertyFactory.getTransformProperty; | |
| 19427 | - TransformPropertyFactory.getTransformProperty = function (elem, data, container) { | |
| 19428 | - var prop = getTransformProperty(elem, data, container); | |
| 19429 | - if (prop.dynamicProperties.length) { | |
| 19430 | - prop.getValueAtTime = getTransformValueAtTime.bind(prop); | |
| 19431 | - } else { | |
| 19432 | - prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop); | |
| 19433 | - } | |
| 19434 | - prop.setGroupProperty = expressionHelpers.setGroupProperty; | |
| 19435 | - return prop; | |
| 19436 | - }; | |
| 19437 | - var propertyGetProp = PropertyFactory.getProp; | |
| 19438 | - PropertyFactory.getProp = function (elem, data, type, mult, container) { | |
| 19439 | - var prop = propertyGetProp(elem, data, type, mult, container); | |
| 19440 | - // prop.getVelocityAtTime = getVelocityAtTime; | |
| 19441 | - // prop.loopOut = loopOut; | |
| 19442 | - // prop.loopIn = loopIn; | |
| 19443 | - if (prop.kf) { | |
| 19444 | - prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop); | |
| 19445 | - } else { | |
| 19446 | - prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop); | |
| 19447 | - } | |
| 19448 | - prop.setGroupProperty = expressionHelpers.setGroupProperty; | |
| 19449 | - prop.loopOut = loopOut; | |
| 19450 | - prop.loopIn = loopIn; | |
| 19451 | - prop.smooth = smooth; | |
| 19452 | - prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop); | |
| 19453 | - prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop); | |
| 19454 | - prop.numKeys = data.a === 1 ? data.k.length : 0; | |
| 19455 | - prop.propertyIndex = data.ix; | |
| 19456 | - var value = 0; | |
| 19457 | - if (type !== 0) { | |
| 19458 | - value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length); | |
| 19459 | - } | |
| 19460 | - prop._cachingAtTime = { | |
| 19461 | - lastFrame: initialDefaultFrame, | |
| 19462 | - lastIndex: 0, | |
| 19463 | - value: value | |
| 19464 | - }; | |
| 19465 | - expressionHelpers.searchExpressions(elem, data, prop); | |
| 19466 | - if (prop.k) { | |
| 19467 | - container.addDynamicProperty(prop); | |
| 19468 | - } | |
| 19469 | - return prop; | |
| 19470 | - }; | |
| 19471 | - function getShapeValueAtTime(frameNum) { | |
| 19472 | - // For now this caching object is created only when needed instead of creating it when the shape is initialized. | |
| 19473 | - if (!this._cachingAtTime) { | |
| 19474 | - this._cachingAtTime = { | |
| 19475 | - shapeValue: shapePool.clone(this.pv), | |
| 19476 | - lastIndex: 0, | |
| 19477 | - lastTime: initialDefaultFrame | |
| 19478 | - }; | |
| 19479 | - } | |
| 19480 | - frameNum *= this.elem.globalData.frameRate; | |
| 19481 | - frameNum -= this.offsetTime; | |
| 19482 | - if (frameNum !== this._cachingAtTime.lastTime) { | |
| 19483 | - this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0; | |
| 19484 | - this._cachingAtTime.lastTime = frameNum; | |
| 19485 | - this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime); | |
| 19486 | - } | |
| 19487 | - return this._cachingAtTime.shapeValue; | |
| 19488 | - } | |
| 19489 | - var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction(); | |
| 19490 | - var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction(); | |
| 19491 | - function ShapeExpressions() {} | |
| 19492 | - ShapeExpressions.prototype = { | |
| 19493 | - vertices: function vertices(prop, time) { | |
| 19494 | - if (this.k) { | |
| 19495 | - this.getValue(); | |
| 19496 | - } | |
| 19497 | - var shapePath = this.v; | |
| 19498 | - if (time !== undefined) { | |
| 19499 | - shapePath = this.getValueAtTime(time, 0); | |
| 19500 | - } | |
| 19501 | - var i; | |
| 19502 | - var len = shapePath._length; | |
| 19503 | - var vertices = shapePath[prop]; | |
| 19504 | - var points = shapePath.v; | |
| 19505 | - var arr = createSizedArray(len); | |
| 19506 | - for (i = 0; i < len; i += 1) { | |
| 19507 | - if (prop === 'i' || prop === 'o') { | |
| 19508 | - arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]]; | |
| 19509 | - } else { | |
| 19510 | - arr[i] = [vertices[i][0], vertices[i][1]]; | |
| 19511 | - } | |
| 19512 | - } | |
| 19513 | - return arr; | |
| 19514 | - }, | |
| 19515 | - points: function points(time) { | |
| 19516 | - return this.vertices('v', time); | |
| 19517 | - }, | |
| 19518 | - inTangents: function inTangents(time) { | |
| 19519 | - return this.vertices('i', time); | |
| 19520 | - }, | |
| 19521 | - outTangents: function outTangents(time) { | |
| 19522 | - return this.vertices('o', time); | |
| 19523 | - }, | |
| 19524 | - isClosed: function isClosed() { | |
| 19525 | - return this.v.c; | |
| 19526 | - }, | |
| 19527 | - pointOnPath: function pointOnPath(perc, time) { | |
| 19528 | - var shapePath = this.v; | |
| 19529 | - if (time !== undefined) { | |
| 19530 | - shapePath = this.getValueAtTime(time, 0); | |
| 19531 | - } | |
| 19532 | - if (!this._segmentsLength) { | |
| 19533 | - this._segmentsLength = bez.getSegmentsLength(shapePath); | |
| 19534 | - } | |
| 19535 | - var segmentsLength = this._segmentsLength; | |
| 19536 | - var lengths = segmentsLength.lengths; | |
| 19537 | - var lengthPos = segmentsLength.totalLength * perc; | |
| 19538 | - var i = 0; | |
| 19539 | - var len = lengths.length; | |
| 19540 | - var accumulatedLength = 0; | |
| 19541 | - var pt; | |
| 19542 | - while (i < len) { | |
| 19543 | - if (accumulatedLength + lengths[i].addedLength > lengthPos) { | |
| 19544 | - var initIndex = i; | |
| 19545 | - var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1; | |
| 19546 | - var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength; | |
| 19547 | - pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]); | |
| 19548 | - break; | |
| 19549 | - } else { | |
| 19550 | - accumulatedLength += lengths[i].addedLength; | |
| 19551 | - } | |
| 19552 | - i += 1; | |
| 19553 | - } | |
| 19554 | - if (!pt) { | |
| 19555 | - pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]]; | |
| 19556 | - } | |
| 19557 | - return pt; | |
| 19558 | - }, | |
| 19559 | - vectorOnPath: function vectorOnPath(perc, time, vectorType) { | |
| 19560 | - // perc doesn't use triple equality because it can be a Number object as well as a primitive. | |
| 19561 | - if (perc == 1) { | |
| 19562 | - // eslint-disable-line eqeqeq | |
| 19563 | - perc = this.v.c; | |
| 19564 | - } else if (perc == 0) { | |
| 19565 | - // eslint-disable-line eqeqeq | |
| 19566 | - perc = 0.999; | |
| 19567 | - } | |
| 19568 | - var pt1 = this.pointOnPath(perc, time); | |
| 19569 | - var pt2 = this.pointOnPath(perc + 0.001, time); | |
| 19570 | - var xLength = pt2[0] - pt1[0]; | |
| 19571 | - var yLength = pt2[1] - pt1[1]; | |
| 19572 | - var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2)); | |
| 19573 | - if (magnitude === 0) { | |
| 19574 | - return [0, 0]; | |
| 19575 | - } | |
| 19576 | - var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude]; | |
| 19577 | - return unitVector; | |
| 19578 | - }, | |
| 19579 | - tangentOnPath: function tangentOnPath(perc, time) { | |
| 19580 | - return this.vectorOnPath(perc, time, 'tangent'); | |
| 19581 | - }, | |
| 19582 | - normalOnPath: function normalOnPath(perc, time) { | |
| 19583 | - return this.vectorOnPath(perc, time, 'normal'); | |
| 19584 | - }, | |
| 19585 | - setGroupProperty: expressionHelpers.setGroupProperty, | |
| 19586 | - getValueAtTime: expressionHelpers.getStaticValueAtTime | |
| 19587 | - }; | |
| 19588 | - extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction); | |
| 19589 | - extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction); | |
| 19590 | - KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime; | |
| 19591 | - KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression; | |
| 19592 | - var propertyGetShapeProp = ShapePropertyFactory.getShapeProp; | |
| 19593 | - ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) { | |
| 19594 | - var prop = propertyGetShapeProp(elem, data, type, arr, trims); | |
| 19595 | - prop.propertyIndex = data.ix; | |
| 19596 | - prop.lock = false; | |
| 19597 | - if (type === 3) { | |
| 19598 | - expressionHelpers.searchExpressions(elem, data.pt, prop); | |
| 19599 | - } else if (type === 4) { | |
| 19600 | - expressionHelpers.searchExpressions(elem, data.ks, prop); | |
| 19601 | - } | |
| 19602 | - if (prop.k) { | |
| 19603 | - elem.addDynamicProperty(prop); | |
| 19604 | - } | |
| 19605 | - return prop; | |
| 19606 | - }; | |
| 19607 | - } | |
| 19608 | - function initialize$1() { | |
| 19609 | - addPropertyDecorator(); | |
| 19610 | - } | |
| 19611 | - | |
| 19612 | - function addDecorator() { | |
| 19613 | - function searchExpressions() { | |
| 19614 | - if (this.data.d.x) { | |
| 19615 | - this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this); | |
| 19616 | - this.addEffect(this.getExpressionValue.bind(this)); | |
| 19617 | - return true; | |
| 19618 | - } | |
| 19619 | - return null; | |
| 19620 | - } | |
| 19621 | - TextProperty.prototype.getExpressionValue = function (currentValue, text) { | |
| 19622 | - var newValue = this.calculateExpression(text); | |
| 19623 | - if (currentValue.t !== newValue) { | |
| 19624 | - var newData = {}; | |
| 19625 | - this.copyData(newData, currentValue); | |
| 19626 | - newData.t = newValue.toString(); | |
| 19627 | - newData.__complete = false; | |
| 19628 | - return newData; | |
| 19629 | - } | |
| 19630 | - return currentValue; | |
| 19631 | - }; | |
| 19632 | - TextProperty.prototype.searchProperty = function () { | |
| 19633 | - var isKeyframed = this.searchKeyframes(); | |
| 19634 | - var hasExpressions = this.searchExpressions(); | |
| 19635 | - this.kf = isKeyframed || hasExpressions; | |
| 19636 | - return this.kf; | |
| 19637 | - }; | |
| 19638 | - TextProperty.prototype.searchExpressions = searchExpressions; | |
| 19639 | - } | |
| 19640 | - function initialize() { | |
| 19641 | - addDecorator(); | |
| 19642 | - } | |
| 19643 | - | |
| 19644 | - function SVGComposableEffect() {} | |
| 19645 | - SVGComposableEffect.prototype = { | |
| 19646 | - createMergeNode: function createMergeNode(resultId, ins) { | |
| 19647 | - var feMerge = createNS('feMerge'); | |
| 19648 | - feMerge.setAttribute('result', resultId); | |
| 19649 | - var feMergeNode; | |
| 19650 | - var i; | |
| 19651 | - for (i = 0; i < ins.length; i += 1) { | |
| 19652 | - feMergeNode = createNS('feMergeNode'); | |
| 19653 | - feMergeNode.setAttribute('in', ins[i]); | |
| 19654 | - feMerge.appendChild(feMergeNode); | |
| 19655 | - feMerge.appendChild(feMergeNode); | |
| 19656 | - } | |
| 19657 | - return feMerge; | |
| 19658 | - } | |
| 19659 | - }; | |
| 19660 | - | |
| 19661 | - 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'; | |
| 19662 | - function SVGTintFilter(filter, filterManager, elem, id, source) { | |
| 19663 | - this.filterManager = filterManager; | |
| 19664 | - var feColorMatrix = createNS('feColorMatrix'); | |
| 19665 | - feColorMatrix.setAttribute('type', 'matrix'); | |
| 19666 | - feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB'); | |
| 19667 | - feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0'); | |
| 19668 | - this.linearFilter = feColorMatrix; | |
| 19669 | - feColorMatrix.setAttribute('result', id + '_tint_1'); | |
| 19670 | - filter.appendChild(feColorMatrix); | |
| 19671 | - feColorMatrix = createNS('feColorMatrix'); | |
| 19672 | - feColorMatrix.setAttribute('type', 'matrix'); | |
| 19673 | - feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB'); | |
| 19674 | - feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0'); | |
| 19675 | - feColorMatrix.setAttribute('result', id + '_tint_2'); | |
| 19676 | - filter.appendChild(feColorMatrix); | |
| 19677 | - this.matrixFilter = feColorMatrix; | |
| 19678 | - var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']); | |
| 19679 | - filter.appendChild(feMerge); | |
| 19680 | - } | |
| 19681 | - extendPrototype([SVGComposableEffect], SVGTintFilter); | |
| 19682 | - SVGTintFilter.prototype.renderFrame = function (forceRender) { | |
| 19683 | - if (forceRender || this.filterManager._mdf) { | |
| 19684 | - var colorBlack = this.filterManager.effectElements[0].p.v; | |
| 19685 | - var colorWhite = this.filterManager.effectElements[1].p.v; | |
| 19686 | - var opacity = this.filterManager.effectElements[2].p.v / 100; | |
| 19687 | - this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0'); | |
| 19688 | - 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'); | |
| 19689 | - } | |
| 19690 | - }; | |
| 19691 | - | |
| 19692 | - function SVGFillFilter(filter, filterManager, elem, id) { | |
| 19693 | - this.filterManager = filterManager; | |
| 19694 | - var feColorMatrix = createNS('feColorMatrix'); | |
| 19695 | - feColorMatrix.setAttribute('type', 'matrix'); | |
| 19696 | - feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB'); | |
| 19697 | - feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0'); | |
| 19698 | - feColorMatrix.setAttribute('result', id); | |
| 19699 | - filter.appendChild(feColorMatrix); | |
| 19700 | - this.matrixFilter = feColorMatrix; | |
| 19701 | - } | |
| 19702 | - SVGFillFilter.prototype.renderFrame = function (forceRender) { | |
| 19703 | - if (forceRender || this.filterManager._mdf) { | |
| 19704 | - var color = this.filterManager.effectElements[2].p.v; | |
| 19705 | - var opacity = this.filterManager.effectElements[6].p.v; | |
| 19706 | - 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'); | |
| 19707 | - } | |
| 19708 | - }; | |
| 19709 | - | |
| 19710 | - function SVGStrokeEffect(fil, filterManager, elem) { | |
| 19711 | - this.initialized = false; | |
| 19712 | - this.filterManager = filterManager; | |
| 19713 | - this.elem = elem; | |
| 19714 | - this.paths = []; | |
| 19715 | - } | |
| 19716 | - SVGStrokeEffect.prototype.initialize = function () { | |
| 19717 | - var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes; | |
| 19718 | - var path; | |
| 19719 | - var groupPath; | |
| 19720 | - var i; | |
| 19721 | - var len; | |
| 19722 | - if (this.filterManager.effectElements[1].p.v === 1) { | |
| 19723 | - len = this.elem.maskManager.masksProperties.length; | |
| 19724 | - i = 0; | |
| 19725 | - } else { | |
| 19726 | - i = this.filterManager.effectElements[0].p.v - 1; | |
| 19727 | - len = i + 1; | |
| 19728 | - } | |
| 19729 | - groupPath = createNS('g'); | |
| 19730 | - groupPath.setAttribute('fill', 'none'); | |
| 19731 | - groupPath.setAttribute('stroke-linecap', 'round'); | |
| 19732 | - groupPath.setAttribute('stroke-dashoffset', 1); | |
| 19733 | - for (i; i < len; i += 1) { | |
| 19734 | - path = createNS('path'); | |
| 19735 | - groupPath.appendChild(path); | |
| 19736 | - this.paths.push({ | |
| 19737 | - p: path, | |
| 19738 | - m: i | |
| 19739 | - }); | |
| 19740 | - } | |
| 19741 | - if (this.filterManager.effectElements[10].p.v === 3) { | |
| 19742 | - var mask = createNS('mask'); | |
| 19743 | - var id = createElementID(); | |
| 19744 | - mask.setAttribute('id', id); | |
| 19745 | - mask.setAttribute('mask-type', 'alpha'); | |
| 19746 | - mask.appendChild(groupPath); | |
| 19747 | - this.elem.globalData.defs.appendChild(mask); | |
| 19748 | - var g = createNS('g'); | |
| 19749 | - g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')'); | |
| 19750 | - while (elemChildren[0]) { | |
| 19751 | - g.appendChild(elemChildren[0]); | |
| 19752 | - } | |
| 19753 | - this.elem.layerElement.appendChild(g); | |
| 19754 | - this.masker = mask; | |
| 19755 | - groupPath.setAttribute('stroke', '#fff'); | |
| 19756 | - } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) { | |
| 19757 | - if (this.filterManager.effectElements[10].p.v === 2) { | |
| 19758 | - elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes; | |
| 19759 | - while (elemChildren.length) { | |
| 19760 | - this.elem.layerElement.removeChild(elemChildren[0]); | |
| 19761 | - } | |
| 19762 | - } | |
| 19763 | - this.elem.layerElement.appendChild(groupPath); | |
| 19764 | - this.elem.layerElement.removeAttribute('mask'); | |
| 19765 | - groupPath.setAttribute('stroke', '#fff'); | |
| 19766 | - } | |
| 19767 | - this.initialized = true; | |
| 19768 | - this.pathMasker = groupPath; | |
| 19769 | - }; | |
| 19770 | - SVGStrokeEffect.prototype.renderFrame = function (forceRender) { | |
| 19771 | - if (!this.initialized) { | |
| 19772 | - this.initialize(); | |
| 19773 | - } | |
| 19774 | - var i; | |
| 19775 | - var len = this.paths.length; | |
| 19776 | - var mask; | |
| 19777 | - var path; | |
| 19778 | - for (i = 0; i < len; i += 1) { | |
| 19779 | - if (this.paths[i].m !== -1) { | |
| 19780 | - mask = this.elem.maskManager.viewData[this.paths[i].m]; | |
| 19781 | - path = this.paths[i].p; | |
| 19782 | - if (forceRender || this.filterManager._mdf || mask.prop._mdf) { | |
| 19783 | - path.setAttribute('d', mask.lastPath); | |
| 19784 | - } | |
| 19785 | - 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) { | |
| 19786 | - var dasharrayValue; | |
| 19787 | - if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) { | |
| 19788 | - var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01; | |
| 19789 | - var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01; | |
| 19790 | - var l = path.getTotalLength(); | |
| 19791 | - dasharrayValue = '0 0 0 ' + l * s + ' '; | |
| 19792 | - var lineLength = l * (e - s); | |
| 19793 | - var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01; | |
| 19794 | - var units = Math.floor(lineLength / segment); | |
| 19795 | - var j; | |
| 19796 | - for (j = 0; j < units; j += 1) { | |
| 19797 | - dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' '; | |
| 19798 | - } | |
| 19799 | - dasharrayValue += '0 ' + l * 10 + ' 0 0'; | |
| 19800 | - } else { | |
| 19801 | - dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01; | |
| 19802 | - } | |
| 19803 | - path.setAttribute('stroke-dasharray', dasharrayValue); | |
| 19804 | - } | |
| 19805 | - } | |
| 19806 | - } | |
| 19807 | - if (forceRender || this.filterManager.effectElements[4].p._mdf) { | |
| 19808 | - this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2); | |
| 19809 | - } | |
| 19810 | - if (forceRender || this.filterManager.effectElements[6].p._mdf) { | |
| 19811 | - this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v); | |
| 19812 | - } | |
| 19813 | - if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) { | |
| 19814 | - if (forceRender || this.filterManager.effectElements[3].p._mdf) { | |
| 19815 | - var color = this.filterManager.effectElements[3].p.v; | |
| 19816 | - this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')'); | |
| 19817 | - } | |
| 19818 | - } | |
| 19819 | - }; | |
| 19820 | - | |
| 19821 | - function SVGTritoneFilter(filter, filterManager, elem, id) { | |
| 19822 | - this.filterManager = filterManager; | |
| 19823 | - var feColorMatrix = createNS('feColorMatrix'); | |
| 19824 | - feColorMatrix.setAttribute('type', 'matrix'); | |
| 19825 | - feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB'); | |
| 19826 | - 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'); | |
| 19827 | - filter.appendChild(feColorMatrix); | |
| 19828 | - var feComponentTransfer = createNS('feComponentTransfer'); | |
| 19829 | - feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB'); | |
| 19830 | - feComponentTransfer.setAttribute('result', id); | |
| 19831 | - this.matrixFilter = feComponentTransfer; | |
| 19832 | - var feFuncR = createNS('feFuncR'); | |
| 19833 | - feFuncR.setAttribute('type', 'table'); | |
| 19834 | - feComponentTransfer.appendChild(feFuncR); | |
| 19835 | - this.feFuncR = feFuncR; | |
| 19836 | - var feFuncG = createNS('feFuncG'); | |
| 19837 | - feFuncG.setAttribute('type', 'table'); | |
| 19838 | - feComponentTransfer.appendChild(feFuncG); | |
| 19839 | - this.feFuncG = feFuncG; | |
| 19840 | - var feFuncB = createNS('feFuncB'); | |
| 19841 | - feFuncB.setAttribute('type', 'table'); | |
| 19842 | - feComponentTransfer.appendChild(feFuncB); | |
| 19843 | - this.feFuncB = feFuncB; | |
| 19844 | - filter.appendChild(feComponentTransfer); | |
| 19845 | - } | |
| 19846 | - SVGTritoneFilter.prototype.renderFrame = function (forceRender) { | |
| 19847 | - if (forceRender || this.filterManager._mdf) { | |
| 19848 | - var color1 = this.filterManager.effectElements[0].p.v; | |
| 19849 | - var color2 = this.filterManager.effectElements[1].p.v; | |
| 19850 | - var color3 = this.filterManager.effectElements[2].p.v; | |
| 19851 | - var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0]; | |
| 19852 | - var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1]; | |
| 19853 | - var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2]; | |
| 19854 | - this.feFuncR.setAttribute('tableValues', tableR); | |
| 19855 | - this.feFuncG.setAttribute('tableValues', tableG); | |
| 19856 | - this.feFuncB.setAttribute('tableValues', tableB); | |
| 19857 | - } | |
| 19858 | - }; | |
| 19859 | - | |
| 19860 | - function SVGProLevelsFilter(filter, filterManager, elem, id) { | |
| 19861 | - this.filterManager = filterManager; | |
| 19862 | - var effectElements = this.filterManager.effectElements; | |
| 19863 | - var feComponentTransfer = createNS('feComponentTransfer'); | |
| 19864 | - | |
| 19865 | - // Red | |
| 19866 | - 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) { | |
| 19867 | - this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer); | |
| 19868 | - } | |
| 19869 | - // Green | |
| 19870 | - 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) { | |
| 19871 | - this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer); | |
| 19872 | - } | |
| 19873 | - // Blue | |
| 19874 | - 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) { | |
| 19875 | - this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer); | |
| 19876 | - } | |
| 19877 | - // Alpha | |
| 19878 | - 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) { | |
| 19879 | - this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer); | |
| 19880 | - } | |
| 19881 | - // RGB | |
| 19882 | - if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) { | |
| 19883 | - feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB'); | |
| 19884 | - filter.appendChild(feComponentTransfer); | |
| 19885 | - } | |
| 19886 | - 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) { | |
| 19887 | - feComponentTransfer = createNS('feComponentTransfer'); | |
| 19888 | - feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB'); | |
| 19889 | - feComponentTransfer.setAttribute('result', id); | |
| 19890 | - filter.appendChild(feComponentTransfer); | |
| 19891 | - this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer); | |
| 19892 | - this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer); | |
| 19893 | - this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer); | |
| 19894 | - } | |
| 19895 | - } | |
| 19896 | - SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) { | |
| 19897 | - var feFunc = createNS(type); | |
| 19898 | - feFunc.setAttribute('type', 'table'); | |
| 19899 | - feComponentTransfer.appendChild(feFunc); | |
| 19900 | - return feFunc; | |
| 19901 | - }; | |
| 19902 | - SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) { | |
| 19903 | - var cnt = 0; | |
| 19904 | - var segments = 256; | |
| 19905 | - var perc; | |
| 19906 | - var min = Math.min(inputBlack, inputWhite); | |
| 19907 | - var max = Math.max(inputBlack, inputWhite); | |
| 19908 | - var table = Array.call(null, { | |
| 19909 | - length: segments | |
| 19910 | - }); | |
| 19911 | - var colorValue; | |
| 19912 | - var pos = 0; | |
| 19913 | - var outputDelta = outputWhite - outputBlack; | |
| 19914 | - var inputDelta = inputWhite - inputBlack; | |
| 19915 | - while (cnt <= 256) { | |
| 19916 | - perc = cnt / 256; | |
| 19917 | - if (perc <= min) { | |
| 19918 | - colorValue = inputDelta < 0 ? outputWhite : outputBlack; | |
| 19919 | - } else if (perc >= max) { | |
| 19920 | - colorValue = inputDelta < 0 ? outputBlack : outputWhite; | |
| 19921 | - } else { | |
| 19922 | - colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma); | |
| 19923 | - } | |
| 19924 | - table[pos] = colorValue; | |
| 19925 | - pos += 1; | |
| 19926 | - cnt += 256 / (segments - 1); | |
| 19927 | - } | |
| 19928 | - return table.join(' '); | |
| 19929 | - }; | |
| 19930 | - SVGProLevelsFilter.prototype.renderFrame = function (forceRender) { | |
| 19931 | - if (forceRender || this.filterManager._mdf) { | |
| 19932 | - var val; | |
| 19933 | - var effectElements = this.filterManager.effectElements; | |
| 19934 | - if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) { | |
| 19935 | - val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v); | |
| 19936 | - this.feFuncRComposed.setAttribute('tableValues', val); | |
| 19937 | - this.feFuncGComposed.setAttribute('tableValues', val); | |
| 19938 | - this.feFuncBComposed.setAttribute('tableValues', val); | |
| 19939 | - } | |
| 19940 | - if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) { | |
| 19941 | - val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v); | |
| 19942 | - this.feFuncR.setAttribute('tableValues', val); | |
| 19943 | - } | |
| 19944 | - if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) { | |
| 19945 | - val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v); | |
| 19946 | - this.feFuncG.setAttribute('tableValues', val); | |
| 19947 | - } | |
| 19948 | - if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) { | |
| 19949 | - val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v); | |
| 19950 | - this.feFuncB.setAttribute('tableValues', val); | |
| 19951 | - } | |
| 19952 | - if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) { | |
| 19953 | - val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v); | |
| 19954 | - this.feFuncA.setAttribute('tableValues', val); | |
| 19955 | - } | |
| 19956 | - } | |
| 19957 | - }; | |
| 19958 | - | |
| 19959 | - function SVGDropShadowEffect(filter, filterManager, elem, id, source) { | |
| 19960 | - var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize; | |
| 19961 | - var filterSize = filterManager.data.fs || globalFilterSize; | |
| 19962 | - filter.setAttribute('x', filterSize.x || globalFilterSize.x); | |
| 19963 | - filter.setAttribute('y', filterSize.y || globalFilterSize.y); | |
| 19964 | - filter.setAttribute('width', filterSize.width || globalFilterSize.width); | |
| 19965 | - filter.setAttribute('height', filterSize.height || globalFilterSize.height); | |
| 19966 | - this.filterManager = filterManager; | |
| 19967 | - var feGaussianBlur = createNS('feGaussianBlur'); | |
| 19968 | - feGaussianBlur.setAttribute('in', 'SourceAlpha'); | |
| 19969 | - feGaussianBlur.setAttribute('result', id + '_drop_shadow_1'); | |
| 19970 | - feGaussianBlur.setAttribute('stdDeviation', '0'); | |
| 19971 | - this.feGaussianBlur = feGaussianBlur; | |
| 19972 | - filter.appendChild(feGaussianBlur); | |
| 19973 | - var feOffset = createNS('feOffset'); | |
| 19974 | - feOffset.setAttribute('dx', '25'); | |
| 19975 | - feOffset.setAttribute('dy', '0'); | |
| 19976 | - feOffset.setAttribute('in', id + '_drop_shadow_1'); | |
| 19977 | - feOffset.setAttribute('result', id + '_drop_shadow_2'); | |
| 19978 | - this.feOffset = feOffset; | |
| 19979 | - filter.appendChild(feOffset); | |
| 19980 | - var feFlood = createNS('feFlood'); | |
| 19981 | - feFlood.setAttribute('flood-color', '#00ff00'); | |
| 19982 | - feFlood.setAttribute('flood-opacity', '1'); | |
| 19983 | - feFlood.setAttribute('result', id + '_drop_shadow_3'); | |
| 19984 | - this.feFlood = feFlood; | |
| 19985 | - filter.appendChild(feFlood); | |
| 19986 | - var feComposite = createNS('feComposite'); | |
| 19987 | - feComposite.setAttribute('in', id + '_drop_shadow_3'); | |
| 19988 | - feComposite.setAttribute('in2', id + '_drop_shadow_2'); | |
| 19989 | - feComposite.setAttribute('operator', 'in'); | |
| 19990 | - feComposite.setAttribute('result', id + '_drop_shadow_4'); | |
| 19991 | - filter.appendChild(feComposite); | |
| 19992 | - var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]); | |
| 19993 | - filter.appendChild(feMerge); | |
| 19994 | - // | |
| 19995 | - } | |
| 19996 | - extendPrototype([SVGComposableEffect], SVGDropShadowEffect); | |
| 19997 | - SVGDropShadowEffect.prototype.renderFrame = function (forceRender) { | |
| 19998 | - if (forceRender || this.filterManager._mdf) { | |
| 19999 | - if (forceRender || this.filterManager.effectElements[4].p._mdf) { | |
| 20000 | - this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4); | |
| 20001 | - } | |
| 20002 | - if (forceRender || this.filterManager.effectElements[0].p._mdf) { | |
| 20003 | - var col = this.filterManager.effectElements[0].p.v; | |
| 20004 | - this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255))); | |
| 20005 | - } | |
| 20006 | - if (forceRender || this.filterManager.effectElements[1].p._mdf) { | |
| 20007 | - this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255); | |
| 20008 | - } | |
| 20009 | - if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) { | |
| 20010 | - var distance = this.filterManager.effectElements[3].p.v; | |
| 20011 | - var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads; | |
| 20012 | - var x = distance * Math.cos(angle); | |
| 20013 | - var y = distance * Math.sin(angle); | |
| 20014 | - this.feOffset.setAttribute('dx', x); | |
| 20015 | - this.feOffset.setAttribute('dy', y); | |
| 20016 | - } | |
| 20017 | - } | |
| 20018 | - }; | |
| 20019 | - | |
| 20020 | - var _svgMatteSymbols = []; | |
| 20021 | - function SVGMatte3Effect(filterElem, filterManager, elem) { | |
| 20022 | - this.initialized = false; | |
| 20023 | - this.filterManager = filterManager; | |
| 20024 | - this.filterElem = filterElem; | |
| 20025 | - this.elem = elem; | |
| 20026 | - elem.matteElement = createNS('g'); | |
| 20027 | - elem.matteElement.appendChild(elem.layerElement); | |
| 20028 | - elem.matteElement.appendChild(elem.transformedElement); | |
| 20029 | - elem.baseElement = elem.matteElement; | |
| 20030 | - } | |
| 20031 | - SVGMatte3Effect.prototype.findSymbol = function (mask) { | |
| 20032 | - var i = 0; | |
| 20033 | - var len = _svgMatteSymbols.length; | |
| 20034 | - while (i < len) { | |
| 20035 | - if (_svgMatteSymbols[i] === mask) { | |
| 20036 | - return _svgMatteSymbols[i]; | |
| 20037 | - } | |
| 20038 | - i += 1; | |
| 20039 | - } | |
| 20040 | - return null; | |
| 20041 | - }; | |
| 20042 | - SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) { | |
| 20043 | - var parentNode = mask.layerElement.parentNode; | |
| 20044 | - if (!parentNode) { | |
| 20045 | - return; | |
| 20046 | - } | |
| 20047 | - var children = parentNode.children; | |
| 20048 | - var i = 0; | |
| 20049 | - var len = children.length; | |
| 20050 | - while (i < len) { | |
| 20051 | - if (children[i] === mask.layerElement) { | |
| 20052 | - break; | |
| 20053 | - } | |
| 20054 | - i += 1; | |
| 20055 | - } | |
| 20056 | - var nextChild; | |
| 20057 | - if (i <= len - 2) { | |
| 20058 | - nextChild = children[i + 1]; | |
| 20059 | - } | |
| 20060 | - var useElem = createNS('use'); | |
| 20061 | - useElem.setAttribute('href', '#' + symbolId); | |
| 20062 | - if (nextChild) { | |
| 20063 | - parentNode.insertBefore(useElem, nextChild); | |
| 20064 | - } else { | |
| 20065 | - parentNode.appendChild(useElem); | |
| 20066 | - } | |
| 20067 | - }; | |
| 20068 | - SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) { | |
| 20069 | - if (!this.findSymbol(mask)) { | |
| 20070 | - var symbolId = createElementID(); | |
| 20071 | - var masker = createNS('mask'); | |
| 20072 | - masker.setAttribute('id', mask.layerId); | |
| 20073 | - masker.setAttribute('mask-type', 'alpha'); | |
| 20074 | - _svgMatteSymbols.push(mask); | |
| 20075 | - var defs = elem.globalData.defs; | |
| 20076 | - defs.appendChild(masker); | |
| 20077 | - var symbol = createNS('symbol'); | |
| 20078 | - symbol.setAttribute('id', symbolId); | |
| 20079 | - this.replaceInParent(mask, symbolId); | |
| 20080 | - symbol.appendChild(mask.layerElement); | |
| 20081 | - defs.appendChild(symbol); | |
| 20082 | - var useElem = createNS('use'); | |
| 20083 | - useElem.setAttribute('href', '#' + symbolId); | |
| 20084 | - masker.appendChild(useElem); | |
| 20085 | - mask.data.hd = false; | |
| 20086 | - mask.show(); | |
| 20087 | - } | |
| 20088 | - elem.setMatte(mask.layerId); | |
| 20089 | - }; | |
| 20090 | - SVGMatte3Effect.prototype.initialize = function () { | |
| 20091 | - var ind = this.filterManager.effectElements[0].p.v; | |
| 20092 | - var elements = this.elem.comp.elements; | |
| 20093 | - var i = 0; | |
| 20094 | - var len = elements.length; | |
| 20095 | - while (i < len) { | |
| 20096 | - if (elements[i] && elements[i].data.ind === ind) { | |
| 20097 | - this.setElementAsMask(this.elem, elements[i]); | |
| 20098 | - } | |
| 20099 | - i += 1; | |
| 20100 | - } | |
| 20101 | - this.initialized = true; | |
| 20102 | - }; | |
| 20103 | - SVGMatte3Effect.prototype.renderFrame = function () { | |
| 20104 | - if (!this.initialized) { | |
| 20105 | - this.initialize(); | |
| 20106 | - } | |
| 20107 | - }; | |
| 20108 | - | |
| 20109 | - function SVGGaussianBlurEffect(filter, filterManager, elem, id) { | |
| 20110 | - // Outset the filter region by 100% on all sides to accommodate blur expansion. | |
| 20111 | - filter.setAttribute('x', '-100%'); | |
| 20112 | - filter.setAttribute('y', '-100%'); | |
| 20113 | - filter.setAttribute('width', '300%'); | |
| 20114 | - filter.setAttribute('height', '300%'); | |
| 20115 | - this.filterManager = filterManager; | |
| 20116 | - var feGaussianBlur = createNS('feGaussianBlur'); | |
| 20117 | - feGaussianBlur.setAttribute('result', id); | |
| 20118 | - filter.appendChild(feGaussianBlur); | |
| 20119 | - this.feGaussianBlur = feGaussianBlur; | |
| 20120 | - } | |
| 20121 | - SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) { | |
| 20122 | - if (forceRender || this.filterManager._mdf) { | |
| 20123 | - // Empirical value, matching AE's blur appearance. | |
| 20124 | - var kBlurrinessToSigma = 0.3; | |
| 20125 | - var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; | |
| 20126 | - | |
| 20127 | - // Dimensions mapping: | |
| 20128 | - // | |
| 20129 | - // 1 -> horizontal & vertical | |
| 20130 | - // 2 -> horizontal only | |
| 20131 | - // 3 -> vertical only | |
| 20132 | - // | |
| 20133 | - var dimensions = this.filterManager.effectElements[1].p.v; | |
| 20134 | - var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq | |
| 20135 | - var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq | |
| 20136 | - | |
| 20137 | - this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); | |
| 20138 | - | |
| 20139 | - // Repeat edges mapping: | |
| 20140 | - // | |
| 20141 | - // 0 -> off -> duplicate | |
| 20142 | - // 1 -> on -> wrap | |
| 20143 | - var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq | |
| 20144 | - this.feGaussianBlur.setAttribute('edgeMode', edgeMode); | |
| 20145 | - } | |
| 20146 | - }; | |
| 20147 | - | |
| 20148 | - function TransformEffect() {} | |
| 20149 | - TransformEffect.prototype.init = function (effectsManager) { | |
| 20150 | - this.effectsManager = effectsManager; | |
| 20151 | - this.type = effectTypes.TRANSFORM_EFFECT; | |
| 20152 | - this.matrix = new Matrix(); | |
| 20153 | - this.opacity = -1; | |
| 20154 | - this._mdf = false; | |
| 20155 | - this._opMdf = false; | |
| 20156 | - }; | |
| 20157 | - TransformEffect.prototype.renderFrame = function (forceFrame) { | |
| 20158 | - this._opMdf = false; | |
| 20159 | - this._mdf = false; | |
| 20160 | - if (forceFrame || this.effectsManager._mdf) { | |
| 20161 | - var effectElements = this.effectsManager.effectElements; | |
| 20162 | - var anchor = effectElements[0].p.v; | |
| 20163 | - var position = effectElements[1].p.v; | |
| 20164 | - var isUniformScale = effectElements[2].p.v === 1; | |
| 20165 | - var scaleHeight = effectElements[3].p.v; | |
| 20166 | - var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v; | |
| 20167 | - var skew = effectElements[5].p.v; | |
| 20168 | - var skewAxis = effectElements[6].p.v; | |
| 20169 | - var rotation = effectElements[7].p.v; | |
| 20170 | - this.matrix.reset(); | |
| 20171 | - this.matrix.translate(-anchor[0], -anchor[1], anchor[2]); | |
| 20172 | - this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1); | |
| 20173 | - this.matrix.rotate(-rotation * degToRads); | |
| 20174 | - this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads); | |
| 20175 | - this.matrix.translate(position[0], position[1], 0); | |
| 20176 | - this._mdf = true; | |
| 20177 | - if (this.opacity !== effectElements[8].p.v) { | |
| 20178 | - this.opacity = effectElements[8].p.v; | |
| 20179 | - this._opMdf = true; | |
| 20180 | - } | |
| 20181 | - } | |
| 20182 | - }; | |
| 20183 | - | |
| 20184 | - function SVGTransformEffect(_, filterManager) { | |
| 20185 | - this.init(filterManager); | |
| 20186 | - } | |
| 20187 | - extendPrototype([TransformEffect], SVGTransformEffect); | |
| 20188 | - | |
| 20189 | - function CVTransformEffect(effectsManager) { | |
| 20190 | - this.init(effectsManager); | |
| 20191 | - } | |
| 20192 | - extendPrototype([TransformEffect], CVTransformEffect); | |
| 20193 | - | |
| 20194 | - // Registering renderers | |
| 20195 | - registerRenderer('canvas', CanvasRenderer); | |
| 20196 | - registerRenderer('html', HybridRenderer); | |
| 20197 | - registerRenderer('svg', SVGRenderer); | |
| 20198 | - | |
| 20199 | - // Registering shape modifiers | |
| 20200 | - ShapeModifiers.registerModifier('tm', TrimModifier); | |
| 20201 | - ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier); | |
| 20202 | - ShapeModifiers.registerModifier('rp', RepeaterModifier); | |
| 20203 | - ShapeModifiers.registerModifier('rd', RoundCornersModifier); | |
| 20204 | - ShapeModifiers.registerModifier('zz', ZigZagModifier); | |
| 20205 | - ShapeModifiers.registerModifier('op', OffsetPathModifier); | |
| 20206 | - | |
| 20207 | - // Registering expression plugin | |
| 20208 | - setExpressionsPlugin(Expressions); | |
| 20209 | - setExpressionInterfaces(getInterface); | |
| 20210 | - initialize$1(); | |
| 20211 | - initialize(); | |
| 20212 | - | |
| 20213 | - // Registering svg effects | |
| 20214 | - registerEffect$1(20, SVGTintFilter, true); | |
| 20215 | - registerEffect$1(21, SVGFillFilter, true); | |
| 20216 | - registerEffect$1(22, SVGStrokeEffect, false); | |
| 20217 | - registerEffect$1(23, SVGTritoneFilter, true); | |
| 20218 | - registerEffect$1(24, SVGProLevelsFilter, true); | |
| 20219 | - registerEffect$1(25, SVGDropShadowEffect, true); | |
| 20220 | - registerEffect$1(28, SVGMatte3Effect, false); | |
| 20221 | - registerEffect$1(29, SVGGaussianBlurEffect, true); | |
| 20222 | - registerEffect$1(35, SVGTransformEffect, false); | |
| 20223 | - registerEffect(35, CVTransformEffect); | |
| 20224 | - | |
| 20225 | - return lottie; | |
| 20226 | - | |
| 20227 | -})); | |
| 20228 | - | |
| 20229 | - | |
| 20230 | -/***/ }), | |
| 20231 | - | |
| 20232 | 1934 | /***/ "../node_modules/object-assign/index.js": |
| 20233 | 1935 | /*!**********************************************!*\ |
| 20234 | 1936 | !*** ../node_modules/object-assign/index.js ***! |
| 20235 | 1937 | \**********************************************/ |
| @@ -21367,19 +3069,8 @@ | ||
| 21367 | 3069 | |
| 21368 | 3070 | |
| 21369 | 3071 | /***/ }), |
| 21370 | 3072 | |
| 21371 | -/***/ "@elementor/icons": | |
| 21372 | -/*!************************************!*\ | |
| 21373 | - !*** external "elementorV2.icons" ***! | |
| 21374 | - \************************************/ | |
| 21375 | -/***/ ((module) => { | |
| 21376 | - | |
| 21377 | -"use strict"; | |
| 21378 | -module.exports = elementorV2.icons; | |
| 21379 | - | |
| 21380 | -/***/ }), | |
| 21381 | - | |
| 21382 | 3073 | /***/ "@elementor/ui": |
| 21383 | 3074 | /*!*********************************!*\ |
| 21384 | 3075 | !*** external "elementorV2.ui" ***! |
| 21385 | 3076 | \*********************************/ |
| @@ -21442,19 +3133,13 @@ | ||
| 21442 | 3133 | /******/ exports: {} |
| 21443 | 3134 | /******/ }; |
| 21444 | 3135 | /******/ |
| 21445 | 3136 | /******/ // Execute the module function |
| 21446 | -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); | |
| 3137 | +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); | |
| 21447 | 3138 | /******/ |
| 21448 | 3139 | /******/ // Return the exports of the module |
| 21449 | 3140 | /******/ return module.exports; |
| 21450 | 3141 | /******/ } |
| 21451 | -/******/ | |
| 21452 | -/************************************************************************/ | |
| 21453 | -/******/ /* webpack/runtime/amd options */ | |
| 21454 | -/******/ (() => { | |
| 21455 | -/******/ __webpack_require__.amdO = {}; | |
| 21456 | -/******/ })(); | |
| 21457 | 3142 | /******/ |
| 21458 | 3143 | /************************************************************************/ |
| 21459 | 3144 | var __webpack_exports__ = {}; |
| 21460 | 3145 | // This entry needs to be wrapped in an IIFE because it needs to be in strict mode. |