qauMaWeb/node_modules/.cache/babel-loader/9e0d401f8487d6a3149ca99b4bd...

1 line
64 KiB
JSON

{"ast":null,"code":"import \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\n/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\n\n/**\r\n * AUTO-GENERATED FILE. DO NOT MODIFY.\r\n */\n\n/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\n// Universal transitions that can animate between any shapes(series) and any properties in any amounts.\nimport { SERIES_UNIVERSAL_TRANSITION_PROP } from '../model/Series.js';\nimport { createHashMap, each, map, filter, isArray, extend } from 'zrender/lib/core/util.js';\nimport { applyMorphAnimation, getPathList } from './morphTransitionHelper.js';\nimport Path from 'zrender/lib/graphic/Path.js';\nimport { initProps } from '../util/graphic.js';\nimport DataDiffer from '../data/DataDiffer.js';\nimport { makeInner, normalizeToArray } from '../util/model.js';\nimport { warn } from '../util/log.js';\nimport { getAnimationConfig, getOldStyle } from './basicTrasition.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nvar DATA_COUNT_THRESHOLD = 1e4;\n;\nvar getUniversalTransitionGlobalStore = makeInner();\n\nfunction getGroupIdDimension(data) {\n var dimensions = data.dimensions;\n\n for (var i = 0; i < dimensions.length; i++) {\n var dimInfo = data.getDimensionInfo(dimensions[i]);\n\n if (dimInfo && dimInfo.otherDims.itemGroupId === 0) {\n return dimensions[i];\n }\n }\n}\n\nfunction flattenDataDiffItems(list) {\n var items = [];\n each(list, function (seriesInfo) {\n var data = seriesInfo.data;\n\n if (data.count() > DATA_COUNT_THRESHOLD) {\n if (process.env.NODE_ENV !== 'production') {\n warn('Universal transition is disabled on large data > 10k.');\n }\n\n return;\n }\n\n var indices = data.getIndices();\n var groupDim = getGroupIdDimension(data);\n\n for (var dataIndex = 0; dataIndex < indices.length; dataIndex++) {\n items.push({\n data: data,\n dim: seriesInfo.dim || groupDim,\n divide: seriesInfo.divide,\n dataIndex: dataIndex\n });\n }\n });\n return items;\n}\n\nfunction fadeInElement(newEl, newSeries, newIndex) {\n newEl.traverse(function (el) {\n if (el instanceof Path) {\n // TODO use fade in animation for target element.\n initProps(el, {\n style: {\n opacity: 0\n }\n }, newSeries, {\n dataIndex: newIndex,\n isFrom: true\n });\n }\n });\n}\n\nfunction removeEl(el) {\n if (el.parent) {\n // Bake parent transform to element.\n // So it can still have proper transform to transition after it's removed.\n var computedTransform = el.getComputedTransform();\n el.setLocalTransform(computedTransform);\n el.parent.remove(el);\n }\n}\n\nfunction stopAnimation(el) {\n el.stopAnimation();\n\n if (el.isGroup) {\n el.traverse(function (child) {\n child.stopAnimation();\n });\n }\n}\n\nfunction animateElementStyles(el, dataIndex, seriesModel) {\n var animationConfig = getAnimationConfig('update', seriesModel, dataIndex);\n animationConfig && el.traverse(function (child) {\n if (child instanceof Displayable) {\n var oldStyle = getOldStyle(child);\n\n if (oldStyle) {\n child.animateFrom({\n style: oldStyle\n }, animationConfig);\n }\n }\n });\n}\n\nfunction isAllIdSame(oldDiffItems, newDiffItems) {\n var len = oldDiffItems.length;\n\n if (len !== newDiffItems.length) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var oldItem = oldDiffItems[i];\n var newItem = newDiffItems[i];\n\n if (oldItem.data.getId(oldItem.dataIndex) !== newItem.data.getId(newItem.dataIndex)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction transitionBetween(oldList, newList, api) {\n var oldDiffItems = flattenDataDiffItems(oldList);\n var newDiffItems = flattenDataDiffItems(newList);\n\n function updateMorphingPathProps(from, to, rawFrom, rawTo, animationCfg) {\n if (rawFrom || from) {\n to.animateFrom({\n style: rawFrom && rawFrom !== from ? // dividingMethod like clone may override the style(opacity)\n // So extend it to raw style.\n extend(extend({}, rawFrom.style), from.style) : from.style\n }, animationCfg);\n }\n }\n\n function findKeyDim(items) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].dim) {\n return items[i].dim;\n }\n }\n }\n\n var oldKeyDim = findKeyDim(oldDiffItems);\n var newKeyDim = findKeyDim(newDiffItems);\n var hasMorphAnimation = false;\n\n function createKeyGetter(isOld, onlyGetId) {\n return function (diffItem) {\n var data = diffItem.data;\n var dataIndex = diffItem.dataIndex; // TODO if specified dim\n\n if (onlyGetId) {\n return data.getId(dataIndex);\n } // Use group id as transition key by default.\n // So we can achieve multiple to multiple animation like drilldown / up naturally.\n // If group id not exits. Use id instead. If so, only one to one transition will be applied.\n\n\n var dataGroupId = data.hostModel && data.hostModel.get('dataGroupId'); // If specified key dimension(itemGroupId by default). Use this same dimension from other data.\n // PENDING: If only use key dimension of newData.\n\n var keyDim = isOld ? oldKeyDim || newKeyDim : newKeyDim || oldKeyDim;\n var dimInfo = keyDim && data.getDimensionInfo(keyDim);\n var dimOrdinalMeta = dimInfo && dimInfo.ordinalMeta;\n\n if (dimInfo) {\n // Get from encode.itemGroupId.\n var key = data.get(dimInfo.name, dataIndex);\n\n if (dimOrdinalMeta) {\n return dimOrdinalMeta.categories[key] || key + '';\n }\n\n return key + '';\n } // Get groupId from raw item. { groupId: '' }\n\n\n var itemVal = data.getRawDataItem(dataIndex);\n\n if (itemVal && itemVal.groupId) {\n return itemVal.groupId + '';\n }\n\n return dataGroupId || data.getId(dataIndex);\n };\n } // Use id if it's very likely to be an one to one animation\n // It's more robust than groupId\n // TODO Check if key dimension is specified.\n\n\n var useId = isAllIdSame(oldDiffItems, newDiffItems);\n var isElementStillInChart = {};\n\n if (!useId) {\n // We may have different diff strategy with basicTransition if we use other dimension as key.\n // If so, we can't simply check if oldEl is same with newEl. We need a map to check if oldEl is still being used in the new chart.\n // We can't use the elements that already being morphed. Let it keep it's original basic transition.\n for (var i = 0; i < newDiffItems.length; i++) {\n var newItem = newDiffItems[i];\n var el = newItem.data.getItemGraphicEl(newItem.dataIndex);\n\n if (el) {\n isElementStillInChart[el.id] = true;\n }\n }\n }\n\n function updateOneToOne(newIndex, oldIndex) {\n var oldItem = oldDiffItems[oldIndex];\n var newItem = newDiffItems[newIndex];\n var newSeries = newItem.data.hostModel; // TODO Mark this elements is morphed and don't morph them anymore\n\n var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex);\n var newEl = newItem.data.getItemGraphicEl(newItem.dataIndex); // Can't handle same elements.\n\n if (oldEl === newEl) {\n newEl && animateElementStyles(newEl, newItem.dataIndex, newSeries);\n return;\n }\n\n if ( // We can't use the elements that already being morphed\n oldEl && isElementStillInChart[oldEl.id]) {\n return;\n }\n\n if (newEl) {\n // TODO: If keep animating the group in case\n // some of the elements don't want to be morphed.\n // TODO Label?\n stopAnimation(newEl);\n\n if (oldEl) {\n stopAnimation(oldEl); // If old element is doing leaving animation. stop it and remove it immediately.\n\n removeEl(oldEl);\n hasMorphAnimation = true;\n applyMorphAnimation(getPathList(oldEl), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps);\n } else {\n fadeInElement(newEl, newSeries, newIndex);\n }\n } // else keep oldEl leaving animation.\n\n }\n\n new DataDiffer(oldDiffItems, newDiffItems, createKeyGetter(true, useId), createKeyGetter(false, useId), null, 'multiple').update(updateOneToOne).updateManyToOne(function (newIndex, oldIndices) {\n var newItem = newDiffItems[newIndex];\n var newData = newItem.data;\n var newSeries = newData.hostModel;\n var newEl = newData.getItemGraphicEl(newItem.dataIndex);\n var oldElsList = filter(map(oldIndices, function (idx) {\n return oldDiffItems[idx].data.getItemGraphicEl(oldDiffItems[idx].dataIndex);\n }), function (oldEl) {\n return oldEl && oldEl !== newEl && !isElementStillInChart[oldEl.id];\n });\n\n if (newEl) {\n stopAnimation(newEl);\n\n if (oldElsList.length) {\n // If old element is doing leaving animation. stop it and remove it immediately.\n each(oldElsList, function (oldEl) {\n stopAnimation(oldEl);\n removeEl(oldEl);\n });\n hasMorphAnimation = true;\n applyMorphAnimation(getPathList(oldElsList), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps);\n } else {\n fadeInElement(newEl, newSeries, newItem.dataIndex);\n }\n } // else keep oldEl leaving animation.\n\n }).updateOneToMany(function (newIndices, oldIndex) {\n var oldItem = oldDiffItems[oldIndex];\n var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex); // We can't use the elements that already being morphed\n\n if (oldEl && isElementStillInChart[oldEl.id]) {\n return;\n }\n\n var newElsList = filter(map(newIndices, function (idx) {\n return newDiffItems[idx].data.getItemGraphicEl(newDiffItems[idx].dataIndex);\n }), function (el) {\n return el && el !== oldEl;\n });\n var newSeris = newDiffItems[newIndices[0]].data.hostModel;\n\n if (newElsList.length) {\n each(newElsList, function (newEl) {\n return stopAnimation(newEl);\n });\n\n if (oldEl) {\n stopAnimation(oldEl); // If old element is doing leaving animation. stop it and remove it immediately.\n\n removeEl(oldEl);\n hasMorphAnimation = true;\n applyMorphAnimation(getPathList(oldEl), getPathList(newElsList), oldItem.divide, // Use divide on old.\n newSeris, newIndices[0], updateMorphingPathProps);\n } else {\n each(newElsList, function (newEl) {\n return fadeInElement(newEl, newSeris, newIndices[0]);\n });\n }\n } // else keep oldEl leaving animation.\n\n }).updateManyToMany(function (newIndices, oldIndices) {\n // If two data are same and both have groupId.\n // Normally they should be diff by id.\n new DataDiffer(oldIndices, newIndices, function (rawIdx) {\n return oldDiffItems[rawIdx].data.getId(oldDiffItems[rawIdx].dataIndex);\n }, function (rawIdx) {\n return newDiffItems[rawIdx].data.getId(newDiffItems[rawIdx].dataIndex);\n }).update(function (newIndex, oldIndex) {\n // Use the original index\n updateOneToOne(newIndices[newIndex], oldIndices[oldIndex]);\n }).execute();\n }).execute();\n\n if (hasMorphAnimation) {\n each(newList, function (_a) {\n var data = _a.data;\n var seriesModel = data.hostModel;\n var view = seriesModel && api.getViewOfSeriesModel(seriesModel);\n var animationCfg = getAnimationConfig('update', seriesModel, 0); // use 0 index.\n\n if (view && seriesModel.isAnimationEnabled() && animationCfg && animationCfg.duration > 0) {\n view.group.traverse(function (el) {\n if (el instanceof Path && !el.animators.length) {\n // We can't accept there still exists element that has no animation\n // if universalTransition is enabled\n el.animateFrom({\n style: {\n opacity: 0\n }\n }, animationCfg);\n }\n });\n }\n });\n }\n}\n\nfunction getSeriesTransitionKey(series) {\n var seriesKey = series.getModel('universalTransition').get('seriesKey');\n\n if (!seriesKey) {\n // Use series id by default.\n return series.id;\n }\n\n return seriesKey;\n}\n\nfunction convertArraySeriesKeyToString(seriesKey) {\n if (isArray(seriesKey)) {\n // Order independent.\n return seriesKey.sort().join(',');\n }\n\n return seriesKey;\n}\n\nfunction getDivideShapeFromData(data) {\n if (data.hostModel) {\n return data.hostModel.getModel('universalTransition').get('divideShape');\n }\n}\n\nfunction findTransitionSeriesBatches(globalStore, params) {\n var updateBatches = createHashMap();\n var oldDataMap = createHashMap(); // Map that only store key in array seriesKey.\n // Which is used to query the old data when transition from one to multiple series.\n\n var oldDataMapForSplit = createHashMap();\n each(globalStore.oldSeries, function (series, idx) {\n var oldData = globalStore.oldData[idx];\n var transitionKey = getSeriesTransitionKey(series);\n var transitionKeyStr = convertArraySeriesKeyToString(transitionKey);\n oldDataMap.set(transitionKeyStr, oldData);\n\n if (isArray(transitionKey)) {\n // Same key can't in different array seriesKey.\n each(transitionKey, function (key) {\n oldDataMapForSplit.set(key, {\n data: oldData,\n key: transitionKeyStr\n });\n });\n }\n });\n\n function checkTransitionSeriesKeyDuplicated(transitionKeyStr) {\n if (updateBatches.get(transitionKeyStr)) {\n warn(\"Duplicated seriesKey in universalTransition \" + transitionKeyStr);\n }\n }\n\n each(params.updatedSeries, function (series) {\n if (series.isUniversalTransitionEnabled() && series.isAnimationEnabled()) {\n var newData = series.getData();\n var transitionKey = getSeriesTransitionKey(series);\n var transitionKeyStr = convertArraySeriesKeyToString(transitionKey); // Only transition between series with same id.\n\n var oldData = oldDataMap.get(transitionKeyStr); // string transition key is the best match.\n\n if (oldData) {\n if (process.env.NODE_ENV !== 'production') {\n checkTransitionSeriesKeyDuplicated(transitionKeyStr);\n } // TODO check if data is same?\n\n\n updateBatches.set(transitionKeyStr, {\n oldSeries: [{\n divide: getDivideShapeFromData(oldData),\n data: oldData\n }],\n newSeries: [{\n divide: getDivideShapeFromData(newData),\n data: newData\n }]\n });\n } else {\n // Transition from multiple series.\n if (isArray(transitionKey)) {\n if (process.env.NODE_ENV !== 'production') {\n checkTransitionSeriesKeyDuplicated(transitionKeyStr);\n }\n\n var oldSeries_1 = [];\n each(transitionKey, function (key) {\n var oldData = oldDataMap.get(key);\n\n if (oldData) {\n oldSeries_1.push({\n divide: getDivideShapeFromData(oldData),\n data: oldData\n });\n }\n });\n\n if (oldSeries_1.length) {\n updateBatches.set(transitionKeyStr, {\n oldSeries: oldSeries_1,\n newSeries: [{\n data: newData,\n divide: getDivideShapeFromData(newData)\n }]\n });\n }\n } else {\n // Try transition to multiple series.\n var oldData_1 = oldDataMapForSplit.get(transitionKey);\n\n if (oldData_1) {\n var batch = updateBatches.get(oldData_1.key);\n\n if (!batch) {\n batch = {\n oldSeries: [{\n data: oldData_1.data,\n divide: getDivideShapeFromData(oldData_1.data)\n }],\n newSeries: []\n };\n updateBatches.set(oldData_1.key, batch);\n }\n\n batch.newSeries.push({\n data: newData,\n divide: getDivideShapeFromData(newData)\n });\n }\n }\n }\n }\n });\n return updateBatches;\n}\n\nfunction querySeries(series, finder) {\n for (var i = 0; i < series.length; i++) {\n var found = finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id;\n\n if (found) {\n return i;\n }\n }\n}\n\nfunction transitionSeriesFromOpt(transitionOpt, globalStore, params, api) {\n var from = [];\n var to = [];\n each(normalizeToArray(transitionOpt.from), function (finder) {\n var idx = querySeries(globalStore.oldSeries, finder);\n\n if (idx >= 0) {\n from.push({\n data: globalStore.oldData[idx],\n // TODO can specify divideShape in transition.\n divide: getDivideShapeFromData(globalStore.oldData[idx]),\n dim: finder.dimension\n });\n }\n });\n each(normalizeToArray(transitionOpt.to), function (finder) {\n var idx = querySeries(params.updatedSeries, finder);\n\n if (idx >= 0) {\n var data = params.updatedSeries[idx].getData();\n to.push({\n data: data,\n divide: getDivideShapeFromData(data),\n dim: finder.dimension\n });\n }\n });\n\n if (from.length > 0 && to.length > 0) {\n transitionBetween(from, to, api);\n }\n}\n\nexport function installUniversalTransition(registers) {\n registers.registerUpdateLifecycle('series:beforeupdate', function (ecMOdel, api, params) {\n each(normalizeToArray(params.seriesTransition), function (transOpt) {\n each(normalizeToArray(transOpt.to), function (finder) {\n var series = params.updatedSeries;\n\n for (var i = 0; i < series.length; i++) {\n if (finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id) {\n series[i][SERIES_UNIVERSAL_TRANSITION_PROP] = true;\n }\n }\n });\n });\n });\n registers.registerUpdateLifecycle('series:transition', function (ecModel, api, params) {\n // TODO api provide an namespace that can save stuff per instance\n var globalStore = getUniversalTransitionGlobalStore(api); // TODO multiple to multiple series.\n\n if (globalStore.oldSeries && params.updatedSeries && params.optionChanged) {\n // Use give transition config if its' give;\n var transitionOpt = params.seriesTransition;\n\n if (transitionOpt) {\n each(normalizeToArray(transitionOpt), function (opt) {\n transitionSeriesFromOpt(opt, globalStore, params, api);\n });\n } else {\n // Else guess from series based on transition series key.\n var updateBatches_1 = findTransitionSeriesBatches(globalStore, params);\n each(updateBatches_1.keys(), function (key) {\n var batch = updateBatches_1.get(key);\n transitionBetween(batch.oldSeries, batch.newSeries, api);\n });\n } // Reset\n\n\n each(params.updatedSeries, function (series) {\n // Reset;\n if (series[SERIES_UNIVERSAL_TRANSITION_PROP]) {\n series[SERIES_UNIVERSAL_TRANSITION_PROP] = false;\n }\n });\n } // Save all series of current update. Not only the updated one.\n\n\n var allSeries = ecModel.getSeries();\n var savedSeries = globalStore.oldSeries = [];\n var savedData = globalStore.oldData = [];\n\n for (var i = 0; i < allSeries.length; i++) {\n var data = allSeries[i].getData(); // Only save the data that can have transition.\n // Avoid large data costing too much extra memory\n\n if (data.count() < DATA_COUNT_THRESHOLD) {\n savedSeries.push(allSeries[i]);\n savedData.push(data);\n }\n }\n });\n}","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src/qingge-Market/qingge-vue/node_modules/echarts/lib/animation/universalTransition.js"],"names":["SERIES_UNIVERSAL_TRANSITION_PROP","createHashMap","each","map","filter","isArray","extend","applyMorphAnimation","getPathList","Path","initProps","DataDiffer","makeInner","normalizeToArray","warn","getAnimationConfig","getOldStyle","Displayable","DATA_COUNT_THRESHOLD","getUniversalTransitionGlobalStore","getGroupIdDimension","data","dimensions","i","length","dimInfo","getDimensionInfo","otherDims","itemGroupId","flattenDataDiffItems","list","items","seriesInfo","count","process","env","NODE_ENV","indices","getIndices","groupDim","dataIndex","push","dim","divide","fadeInElement","newEl","newSeries","newIndex","traverse","el","style","opacity","isFrom","removeEl","parent","computedTransform","getComputedTransform","setLocalTransform","remove","stopAnimation","isGroup","child","animateElementStyles","seriesModel","animationConfig","oldStyle","animateFrom","isAllIdSame","oldDiffItems","newDiffItems","len","oldItem","newItem","getId","transitionBetween","oldList","newList","api","updateMorphingPathProps","from","to","rawFrom","rawTo","animationCfg","findKeyDim","oldKeyDim","newKeyDim","hasMorphAnimation","createKeyGetter","isOld","onlyGetId","diffItem","dataGroupId","hostModel","get","keyDim","dimOrdinalMeta","ordinalMeta","key","name","categories","itemVal","getRawDataItem","groupId","useId","isElementStillInChart","getItemGraphicEl","id","updateOneToOne","oldIndex","oldEl","update","updateManyToOne","oldIndices","newData","oldElsList","idx","updateOneToMany","newIndices","newElsList","newSeris","updateManyToMany","rawIdx","execute","_a","view","getViewOfSeriesModel","isAnimationEnabled","duration","group","animators","getSeriesTransitionKey","series","seriesKey","getModel","convertArraySeriesKeyToString","sort","join","getDivideShapeFromData","findTransitionSeriesBatches","globalStore","params","updateBatches","oldDataMap","oldDataMapForSplit","oldSeries","oldData","transitionKey","transitionKeyStr","set","checkTransitionSeriesKeyDuplicated","updatedSeries","isUniversalTransitionEnabled","getData","oldSeries_1","oldData_1","batch","querySeries","finder","found","seriesIndex","seriesId","transitionSeriesFromOpt","transitionOpt","dimension","installUniversalTransition","registers","registerUpdateLifecycle","ecMOdel","seriesTransition","transOpt","ecModel","optionChanged","opt","updateBatches_1","keys","allSeries","getSeries","savedSeries","savedData"],"mappings":"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","sourcesContent":["\r\n/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\r\n\r\n\r\n/**\r\n * AUTO-GENERATED FILE. DO NOT MODIFY.\r\n */\r\n\r\n/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements. See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership. The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License. You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied. See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\r\n// Universal transitions that can animate between any shapes(series) and any properties in any amounts.\r\nimport { SERIES_UNIVERSAL_TRANSITION_PROP } from '../model/Series.js';\r\nimport { createHashMap, each, map, filter, isArray, extend } from 'zrender/lib/core/util.js';\r\nimport { applyMorphAnimation, getPathList } from './morphTransitionHelper.js';\r\nimport Path from 'zrender/lib/graphic/Path.js';\r\nimport { initProps } from '../util/graphic.js';\r\nimport DataDiffer from '../data/DataDiffer.js';\r\nimport { makeInner, normalizeToArray } from '../util/model.js';\r\nimport { warn } from '../util/log.js';\r\nimport { getAnimationConfig, getOldStyle } from './basicTrasition.js';\r\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\r\nvar DATA_COUNT_THRESHOLD = 1e4;\r\n;\r\nvar getUniversalTransitionGlobalStore = makeInner();\r\n\r\nfunction getGroupIdDimension(data) {\r\n var dimensions = data.dimensions;\r\n\r\n for (var i = 0; i < dimensions.length; i++) {\r\n var dimInfo = data.getDimensionInfo(dimensions[i]);\r\n\r\n if (dimInfo && dimInfo.otherDims.itemGroupId === 0) {\r\n return dimensions[i];\r\n }\r\n }\r\n}\r\n\r\nfunction flattenDataDiffItems(list) {\r\n var items = [];\r\n each(list, function (seriesInfo) {\r\n var data = seriesInfo.data;\r\n\r\n if (data.count() > DATA_COUNT_THRESHOLD) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n warn('Universal transition is disabled on large data > 10k.');\r\n }\r\n\r\n return;\r\n }\r\n\r\n var indices = data.getIndices();\r\n var groupDim = getGroupIdDimension(data);\r\n\r\n for (var dataIndex = 0; dataIndex < indices.length; dataIndex++) {\r\n items.push({\r\n data: data,\r\n dim: seriesInfo.dim || groupDim,\r\n divide: seriesInfo.divide,\r\n dataIndex: dataIndex\r\n });\r\n }\r\n });\r\n return items;\r\n}\r\n\r\nfunction fadeInElement(newEl, newSeries, newIndex) {\r\n newEl.traverse(function (el) {\r\n if (el instanceof Path) {\r\n // TODO use fade in animation for target element.\r\n initProps(el, {\r\n style: {\r\n opacity: 0\r\n }\r\n }, newSeries, {\r\n dataIndex: newIndex,\r\n isFrom: true\r\n });\r\n }\r\n });\r\n}\r\n\r\nfunction removeEl(el) {\r\n if (el.parent) {\r\n // Bake parent transform to element.\r\n // So it can still have proper transform to transition after it's removed.\r\n var computedTransform = el.getComputedTransform();\r\n el.setLocalTransform(computedTransform);\r\n el.parent.remove(el);\r\n }\r\n}\r\n\r\nfunction stopAnimation(el) {\r\n el.stopAnimation();\r\n\r\n if (el.isGroup) {\r\n el.traverse(function (child) {\r\n child.stopAnimation();\r\n });\r\n }\r\n}\r\n\r\nfunction animateElementStyles(el, dataIndex, seriesModel) {\r\n var animationConfig = getAnimationConfig('update', seriesModel, dataIndex);\r\n animationConfig && el.traverse(function (child) {\r\n if (child instanceof Displayable) {\r\n var oldStyle = getOldStyle(child);\r\n\r\n if (oldStyle) {\r\n child.animateFrom({\r\n style: oldStyle\r\n }, animationConfig);\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction isAllIdSame(oldDiffItems, newDiffItems) {\r\n var len = oldDiffItems.length;\r\n\r\n if (len !== newDiffItems.length) {\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < len; i++) {\r\n var oldItem = oldDiffItems[i];\r\n var newItem = newDiffItems[i];\r\n\r\n if (oldItem.data.getId(oldItem.dataIndex) !== newItem.data.getId(newItem.dataIndex)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction transitionBetween(oldList, newList, api) {\r\n var oldDiffItems = flattenDataDiffItems(oldList);\r\n var newDiffItems = flattenDataDiffItems(newList);\r\n\r\n function updateMorphingPathProps(from, to, rawFrom, rawTo, animationCfg) {\r\n if (rawFrom || from) {\r\n to.animateFrom({\r\n style: rawFrom && rawFrom !== from ? // dividingMethod like clone may override the style(opacity)\r\n // So extend it to raw style.\r\n extend(extend({}, rawFrom.style), from.style) : from.style\r\n }, animationCfg);\r\n }\r\n }\r\n\r\n function findKeyDim(items) {\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].dim) {\r\n return items[i].dim;\r\n }\r\n }\r\n }\r\n\r\n var oldKeyDim = findKeyDim(oldDiffItems);\r\n var newKeyDim = findKeyDim(newDiffItems);\r\n var hasMorphAnimation = false;\r\n\r\n function createKeyGetter(isOld, onlyGetId) {\r\n return function (diffItem) {\r\n var data = diffItem.data;\r\n var dataIndex = diffItem.dataIndex; // TODO if specified dim\r\n\r\n if (onlyGetId) {\r\n return data.getId(dataIndex);\r\n } // Use group id as transition key by default.\r\n // So we can achieve multiple to multiple animation like drilldown / up naturally.\r\n // If group id not exits. Use id instead. If so, only one to one transition will be applied.\r\n\r\n\r\n var dataGroupId = data.hostModel && data.hostModel.get('dataGroupId'); // If specified key dimension(itemGroupId by default). Use this same dimension from other data.\r\n // PENDING: If only use key dimension of newData.\r\n\r\n var keyDim = isOld ? oldKeyDim || newKeyDim : newKeyDim || oldKeyDim;\r\n var dimInfo = keyDim && data.getDimensionInfo(keyDim);\r\n var dimOrdinalMeta = dimInfo && dimInfo.ordinalMeta;\r\n\r\n if (dimInfo) {\r\n // Get from encode.itemGroupId.\r\n var key = data.get(dimInfo.name, dataIndex);\r\n\r\n if (dimOrdinalMeta) {\r\n return dimOrdinalMeta.categories[key] || key + '';\r\n }\r\n\r\n return key + '';\r\n } // Get groupId from raw item. { groupId: '' }\r\n\r\n\r\n var itemVal = data.getRawDataItem(dataIndex);\r\n\r\n if (itemVal && itemVal.groupId) {\r\n return itemVal.groupId + '';\r\n }\r\n\r\n return dataGroupId || data.getId(dataIndex);\r\n };\r\n } // Use id if it's very likely to be an one to one animation\r\n // It's more robust than groupId\r\n // TODO Check if key dimension is specified.\r\n\r\n\r\n var useId = isAllIdSame(oldDiffItems, newDiffItems);\r\n var isElementStillInChart = {};\r\n\r\n if (!useId) {\r\n // We may have different diff strategy with basicTransition if we use other dimension as key.\r\n // If so, we can't simply check if oldEl is same with newEl. We need a map to check if oldEl is still being used in the new chart.\r\n // We can't use the elements that already being morphed. Let it keep it's original basic transition.\r\n for (var i = 0; i < newDiffItems.length; i++) {\r\n var newItem = newDiffItems[i];\r\n var el = newItem.data.getItemGraphicEl(newItem.dataIndex);\r\n\r\n if (el) {\r\n isElementStillInChart[el.id] = true;\r\n }\r\n }\r\n }\r\n\r\n function updateOneToOne(newIndex, oldIndex) {\r\n var oldItem = oldDiffItems[oldIndex];\r\n var newItem = newDiffItems[newIndex];\r\n var newSeries = newItem.data.hostModel; // TODO Mark this elements is morphed and don't morph them anymore\r\n\r\n var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex);\r\n var newEl = newItem.data.getItemGraphicEl(newItem.dataIndex); // Can't handle same elements.\r\n\r\n if (oldEl === newEl) {\r\n newEl && animateElementStyles(newEl, newItem.dataIndex, newSeries);\r\n return;\r\n }\r\n\r\n if ( // We can't use the elements that already being morphed\r\n oldEl && isElementStillInChart[oldEl.id]) {\r\n return;\r\n }\r\n\r\n if (newEl) {\r\n // TODO: If keep animating the group in case\r\n // some of the elements don't want to be morphed.\r\n // TODO Label?\r\n stopAnimation(newEl);\r\n\r\n if (oldEl) {\r\n stopAnimation(oldEl); // If old element is doing leaving animation. stop it and remove it immediately.\r\n\r\n removeEl(oldEl);\r\n hasMorphAnimation = true;\r\n applyMorphAnimation(getPathList(oldEl), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps);\r\n } else {\r\n fadeInElement(newEl, newSeries, newIndex);\r\n }\r\n } // else keep oldEl leaving animation.\r\n\r\n }\r\n\r\n new DataDiffer(oldDiffItems, newDiffItems, createKeyGetter(true, useId), createKeyGetter(false, useId), null, 'multiple').update(updateOneToOne).updateManyToOne(function (newIndex, oldIndices) {\r\n var newItem = newDiffItems[newIndex];\r\n var newData = newItem.data;\r\n var newSeries = newData.hostModel;\r\n var newEl = newData.getItemGraphicEl(newItem.dataIndex);\r\n var oldElsList = filter(map(oldIndices, function (idx) {\r\n return oldDiffItems[idx].data.getItemGraphicEl(oldDiffItems[idx].dataIndex);\r\n }), function (oldEl) {\r\n return oldEl && oldEl !== newEl && !isElementStillInChart[oldEl.id];\r\n });\r\n\r\n if (newEl) {\r\n stopAnimation(newEl);\r\n\r\n if (oldElsList.length) {\r\n // If old element is doing leaving animation. stop it and remove it immediately.\r\n each(oldElsList, function (oldEl) {\r\n stopAnimation(oldEl);\r\n removeEl(oldEl);\r\n });\r\n hasMorphAnimation = true;\r\n applyMorphAnimation(getPathList(oldElsList), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps);\r\n } else {\r\n fadeInElement(newEl, newSeries, newItem.dataIndex);\r\n }\r\n } // else keep oldEl leaving animation.\r\n\r\n }).updateOneToMany(function (newIndices, oldIndex) {\r\n var oldItem = oldDiffItems[oldIndex];\r\n var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex); // We can't use the elements that already being morphed\r\n\r\n if (oldEl && isElementStillInChart[oldEl.id]) {\r\n return;\r\n }\r\n\r\n var newElsList = filter(map(newIndices, function (idx) {\r\n return newDiffItems[idx].data.getItemGraphicEl(newDiffItems[idx].dataIndex);\r\n }), function (el) {\r\n return el && el !== oldEl;\r\n });\r\n var newSeris = newDiffItems[newIndices[0]].data.hostModel;\r\n\r\n if (newElsList.length) {\r\n each(newElsList, function (newEl) {\r\n return stopAnimation(newEl);\r\n });\r\n\r\n if (oldEl) {\r\n stopAnimation(oldEl); // If old element is doing leaving animation. stop it and remove it immediately.\r\n\r\n removeEl(oldEl);\r\n hasMorphAnimation = true;\r\n applyMorphAnimation(getPathList(oldEl), getPathList(newElsList), oldItem.divide, // Use divide on old.\r\n newSeris, newIndices[0], updateMorphingPathProps);\r\n } else {\r\n each(newElsList, function (newEl) {\r\n return fadeInElement(newEl, newSeris, newIndices[0]);\r\n });\r\n }\r\n } // else keep oldEl leaving animation.\r\n\r\n }).updateManyToMany(function (newIndices, oldIndices) {\r\n // If two data are same and both have groupId.\r\n // Normally they should be diff by id.\r\n new DataDiffer(oldIndices, newIndices, function (rawIdx) {\r\n return oldDiffItems[rawIdx].data.getId(oldDiffItems[rawIdx].dataIndex);\r\n }, function (rawIdx) {\r\n return newDiffItems[rawIdx].data.getId(newDiffItems[rawIdx].dataIndex);\r\n }).update(function (newIndex, oldIndex) {\r\n // Use the original index\r\n updateOneToOne(newIndices[newIndex], oldIndices[oldIndex]);\r\n }).execute();\r\n }).execute();\r\n\r\n if (hasMorphAnimation) {\r\n each(newList, function (_a) {\r\n var data = _a.data;\r\n var seriesModel = data.hostModel;\r\n var view = seriesModel && api.getViewOfSeriesModel(seriesModel);\r\n var animationCfg = getAnimationConfig('update', seriesModel, 0); // use 0 index.\r\n\r\n if (view && seriesModel.isAnimationEnabled() && animationCfg && animationCfg.duration > 0) {\r\n view.group.traverse(function (el) {\r\n if (el instanceof Path && !el.animators.length) {\r\n // We can't accept there still exists element that has no animation\r\n // if universalTransition is enabled\r\n el.animateFrom({\r\n style: {\r\n opacity: 0\r\n }\r\n }, animationCfg);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction getSeriesTransitionKey(series) {\r\n var seriesKey = series.getModel('universalTransition').get('seriesKey');\r\n\r\n if (!seriesKey) {\r\n // Use series id by default.\r\n return series.id;\r\n }\r\n\r\n return seriesKey;\r\n}\r\n\r\nfunction convertArraySeriesKeyToString(seriesKey) {\r\n if (isArray(seriesKey)) {\r\n // Order independent.\r\n return seriesKey.sort().join(',');\r\n }\r\n\r\n return seriesKey;\r\n}\r\n\r\nfunction getDivideShapeFromData(data) {\r\n if (data.hostModel) {\r\n return data.hostModel.getModel('universalTransition').get('divideShape');\r\n }\r\n}\r\n\r\nfunction findTransitionSeriesBatches(globalStore, params) {\r\n var updateBatches = createHashMap();\r\n var oldDataMap = createHashMap(); // Map that only store key in array seriesKey.\r\n // Which is used to query the old data when transition from one to multiple series.\r\n\r\n var oldDataMapForSplit = createHashMap();\r\n each(globalStore.oldSeries, function (series, idx) {\r\n var oldData = globalStore.oldData[idx];\r\n var transitionKey = getSeriesTransitionKey(series);\r\n var transitionKeyStr = convertArraySeriesKeyToString(transitionKey);\r\n oldDataMap.set(transitionKeyStr, oldData);\r\n\r\n if (isArray(transitionKey)) {\r\n // Same key can't in different array seriesKey.\r\n each(transitionKey, function (key) {\r\n oldDataMapForSplit.set(key, {\r\n data: oldData,\r\n key: transitionKeyStr\r\n });\r\n });\r\n }\r\n });\r\n\r\n function checkTransitionSeriesKeyDuplicated(transitionKeyStr) {\r\n if (updateBatches.get(transitionKeyStr)) {\r\n warn(\"Duplicated seriesKey in universalTransition \" + transitionKeyStr);\r\n }\r\n }\r\n\r\n each(params.updatedSeries, function (series) {\r\n if (series.isUniversalTransitionEnabled() && series.isAnimationEnabled()) {\r\n var newData = series.getData();\r\n var transitionKey = getSeriesTransitionKey(series);\r\n var transitionKeyStr = convertArraySeriesKeyToString(transitionKey); // Only transition between series with same id.\r\n\r\n var oldData = oldDataMap.get(transitionKeyStr); // string transition key is the best match.\r\n\r\n if (oldData) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n checkTransitionSeriesKeyDuplicated(transitionKeyStr);\r\n } // TODO check if data is same?\r\n\r\n\r\n updateBatches.set(transitionKeyStr, {\r\n oldSeries: [{\r\n divide: getDivideShapeFromData(oldData),\r\n data: oldData\r\n }],\r\n newSeries: [{\r\n divide: getDivideShapeFromData(newData),\r\n data: newData\r\n }]\r\n });\r\n } else {\r\n // Transition from multiple series.\r\n if (isArray(transitionKey)) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n checkTransitionSeriesKeyDuplicated(transitionKeyStr);\r\n }\r\n\r\n var oldSeries_1 = [];\r\n each(transitionKey, function (key) {\r\n var oldData = oldDataMap.get(key);\r\n\r\n if (oldData) {\r\n oldSeries_1.push({\r\n divide: getDivideShapeFromData(oldData),\r\n data: oldData\r\n });\r\n }\r\n });\r\n\r\n if (oldSeries_1.length) {\r\n updateBatches.set(transitionKeyStr, {\r\n oldSeries: oldSeries_1,\r\n newSeries: [{\r\n data: newData,\r\n divide: getDivideShapeFromData(newData)\r\n }]\r\n });\r\n }\r\n } else {\r\n // Try transition to multiple series.\r\n var oldData_1 = oldDataMapForSplit.get(transitionKey);\r\n\r\n if (oldData_1) {\r\n var batch = updateBatches.get(oldData_1.key);\r\n\r\n if (!batch) {\r\n batch = {\r\n oldSeries: [{\r\n data: oldData_1.data,\r\n divide: getDivideShapeFromData(oldData_1.data)\r\n }],\r\n newSeries: []\r\n };\r\n updateBatches.set(oldData_1.key, batch);\r\n }\r\n\r\n batch.newSeries.push({\r\n data: newData,\r\n divide: getDivideShapeFromData(newData)\r\n });\r\n }\r\n }\r\n }\r\n }\r\n });\r\n return updateBatches;\r\n}\r\n\r\nfunction querySeries(series, finder) {\r\n for (var i = 0; i < series.length; i++) {\r\n var found = finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id;\r\n\r\n if (found) {\r\n return i;\r\n }\r\n }\r\n}\r\n\r\nfunction transitionSeriesFromOpt(transitionOpt, globalStore, params, api) {\r\n var from = [];\r\n var to = [];\r\n each(normalizeToArray(transitionOpt.from), function (finder) {\r\n var idx = querySeries(globalStore.oldSeries, finder);\r\n\r\n if (idx >= 0) {\r\n from.push({\r\n data: globalStore.oldData[idx],\r\n // TODO can specify divideShape in transition.\r\n divide: getDivideShapeFromData(globalStore.oldData[idx]),\r\n dim: finder.dimension\r\n });\r\n }\r\n });\r\n each(normalizeToArray(transitionOpt.to), function (finder) {\r\n var idx = querySeries(params.updatedSeries, finder);\r\n\r\n if (idx >= 0) {\r\n var data = params.updatedSeries[idx].getData();\r\n to.push({\r\n data: data,\r\n divide: getDivideShapeFromData(data),\r\n dim: finder.dimension\r\n });\r\n }\r\n });\r\n\r\n if (from.length > 0 && to.length > 0) {\r\n transitionBetween(from, to, api);\r\n }\r\n}\r\n\r\nexport function installUniversalTransition(registers) {\r\n registers.registerUpdateLifecycle('series:beforeupdate', function (ecMOdel, api, params) {\r\n each(normalizeToArray(params.seriesTransition), function (transOpt) {\r\n each(normalizeToArray(transOpt.to), function (finder) {\r\n var series = params.updatedSeries;\r\n\r\n for (var i = 0; i < series.length; i++) {\r\n if (finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id) {\r\n series[i][SERIES_UNIVERSAL_TRANSITION_PROP] = true;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n registers.registerUpdateLifecycle('series:transition', function (ecModel, api, params) {\r\n // TODO api provide an namespace that can save stuff per instance\r\n var globalStore = getUniversalTransitionGlobalStore(api); // TODO multiple to multiple series.\r\n\r\n if (globalStore.oldSeries && params.updatedSeries && params.optionChanged) {\r\n // Use give transition config if its' give;\r\n var transitionOpt = params.seriesTransition;\r\n\r\n if (transitionOpt) {\r\n each(normalizeToArray(transitionOpt), function (opt) {\r\n transitionSeriesFromOpt(opt, globalStore, params, api);\r\n });\r\n } else {\r\n // Else guess from series based on transition series key.\r\n var updateBatches_1 = findTransitionSeriesBatches(globalStore, params);\r\n each(updateBatches_1.keys(), function (key) {\r\n var batch = updateBatches_1.get(key);\r\n transitionBetween(batch.oldSeries, batch.newSeries, api);\r\n });\r\n } // Reset\r\n\r\n\r\n each(params.updatedSeries, function (series) {\r\n // Reset;\r\n if (series[SERIES_UNIVERSAL_TRANSITION_PROP]) {\r\n series[SERIES_UNIVERSAL_TRANSITION_PROP] = false;\r\n }\r\n });\r\n } // Save all series of current update. Not only the updated one.\r\n\r\n\r\n var allSeries = ecModel.getSeries();\r\n var savedSeries = globalStore.oldSeries = [];\r\n var savedData = globalStore.oldData = [];\r\n\r\n for (var i = 0; i < allSeries.length; i++) {\r\n var data = allSeries[i].getData(); // Only save the data that can have transition.\r\n // Avoid large data costing too much extra memory\r\n\r\n if (data.count() < DATA_COUNT_THRESHOLD) {\r\n savedSeries.push(allSeries[i]);\r\n savedData.push(data);\r\n }\r\n }\r\n });\r\n}"]},"metadata":{},"sourceType":"module"}