| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 | 
							
- /*
 
- * Licensed to the Apache Software Foundation (ASF) under one
 
- * or more contributor license agreements.  See the NOTICE file
 
- * distributed with this work for additional information
 
- * regarding copyright ownership.  The ASF licenses this file
 
- * to you under the Apache License, Version 2.0 (the
 
- * "License"); you may not use this file except in compliance
 
- * with the License.  You may obtain a copy of the License at
 
- *
 
- *   http://www.apache.org/licenses/LICENSE-2.0
 
- *
 
- * Unless required by applicable law or agreed to in writing,
 
- * software distributed under the License is distributed on an
 
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 
- * KIND, either express or implied.  See the License for the
 
- * specific language governing permissions and limitations
 
- * under the License.
 
- */
 
- /**
 
-  * AUTO-GENERATED FILE. DO NOT MODIFY.
 
-  */
 
- /*
 
- * Licensed to the Apache Software Foundation (ASF) under one
 
- * or more contributor license agreements.  See the NOTICE file
 
- * distributed with this work for additional information
 
- * regarding copyright ownership.  The ASF licenses this file
 
- * to you under the Apache License, Version 2.0 (the
 
- * "License"); you may not use this file except in compliance
 
- * with the License.  You may obtain a copy of the License at
 
- *
 
- *   http://www.apache.org/licenses/LICENSE-2.0
 
- *
 
- * Unless required by applicable law or agreed to in writing,
 
- * software distributed under the License is distributed on an
 
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 
- * KIND, either express or implied.  See the License for the
 
- * specific language governing permissions and limitations
 
- * under the License.
 
- */
 
- import { makeInner, normalizeToArray } from '../util/model.js';
 
- import { assert, bind, each, eqNaN, extend, hasOwn, indexOf, isArrayLike, keys, reduce } from 'zrender/lib/core/util.js';
 
- import { cloneValue } from 'zrender/lib/animation/Animator.js';
 
- import Displayable from 'zrender/lib/graphic/Displayable.js';
 
- import { getAnimationConfig } from './basicTransition.js';
 
- import { Path } from '../util/graphic.js';
 
- import { warn } from '../util/log.js';
 
- import { TRANSFORMABLE_PROPS } from 'zrender/lib/core/Transformable.js';
 
- var LEGACY_TRANSFORM_PROPS_MAP = {
 
-   position: ['x', 'y'],
 
-   scale: ['scaleX', 'scaleY'],
 
-   origin: ['originX', 'originY']
 
- };
 
- var LEGACY_TRANSFORM_PROPS = keys(LEGACY_TRANSFORM_PROPS_MAP);
 
- var TRANSFORM_PROPS_MAP = reduce(TRANSFORMABLE_PROPS, function (obj, key) {
 
-   obj[key] = 1;
 
-   return obj;
 
- }, {});
 
- var transformPropNamesStr = TRANSFORMABLE_PROPS.join(', ');
 
- // '' means root
 
- export var ELEMENT_ANIMATABLE_PROPS = ['', 'style', 'shape', 'extra'];
 
- ;
 
- var transitionInnerStore = makeInner();
 
- ;
 
- function getElementAnimationConfig(animationType, el, elOption, parentModel, dataIndex) {
 
-   var animationProp = animationType + "Animation";
 
-   var config = getAnimationConfig(animationType, parentModel, dataIndex) || {};
 
-   var userDuring = transitionInnerStore(el).userDuring;
 
-   // Only set when duration is > 0 and it's need to be animated.
 
-   if (config.duration > 0) {
 
-     // For simplicity, if during not specified, the previous during will not work any more.
 
-     config.during = userDuring ? bind(duringCall, {
 
-       el: el,
 
-       userDuring: userDuring
 
-     }) : null;
 
-     config.setToFinal = true;
 
-     config.scope = animationType;
 
-   }
 
-   extend(config, elOption[animationProp]);
 
-   return config;
 
- }
 
- export function applyUpdateTransition(el, elOption, animatableModel, opts) {
 
-   opts = opts || {};
 
-   var dataIndex = opts.dataIndex,
 
-     isInit = opts.isInit,
 
-     clearStyle = opts.clearStyle;
 
-   var hasAnimation = animatableModel.isAnimationEnabled();
 
-   // Save the meta info for further morphing. Like apply on the sub morphing elements.
 
-   var store = transitionInnerStore(el);
 
-   var styleOpt = elOption.style;
 
-   store.userDuring = elOption.during;
 
-   var transFromProps = {};
 
-   var propsToSet = {};
 
-   prepareTransformAllPropsFinal(el, elOption, propsToSet);
 
-   prepareShapeOrExtraAllPropsFinal('shape', elOption, propsToSet);
 
-   prepareShapeOrExtraAllPropsFinal('extra', elOption, propsToSet);
 
-   if (!isInit && hasAnimation) {
 
-     prepareTransformTransitionFrom(el, elOption, transFromProps);
 
-     prepareShapeOrExtraTransitionFrom('shape', el, elOption, transFromProps);
 
-     prepareShapeOrExtraTransitionFrom('extra', el, elOption, transFromProps);
 
-     prepareStyleTransitionFrom(el, elOption, styleOpt, transFromProps);
 
-   }
 
-   propsToSet.style = styleOpt;
 
-   applyPropsDirectly(el, propsToSet, clearStyle);
 
-   applyMiscProps(el, elOption);
 
-   if (hasAnimation) {
 
-     if (isInit) {
 
-       var enterFromProps_1 = {};
 
-       each(ELEMENT_ANIMATABLE_PROPS, function (propName) {
 
-         var prop = propName ? elOption[propName] : elOption;
 
-         if (prop && prop.enterFrom) {
 
-           if (propName) {
 
-             enterFromProps_1[propName] = enterFromProps_1[propName] || {};
 
-           }
 
-           extend(propName ? enterFromProps_1[propName] : enterFromProps_1, prop.enterFrom);
 
-         }
 
-       });
 
-       var config = getElementAnimationConfig('enter', el, elOption, animatableModel, dataIndex);
 
-       if (config.duration > 0) {
 
-         el.animateFrom(enterFromProps_1, config);
 
-       }
 
-     } else {
 
-       applyPropsTransition(el, elOption, dataIndex || 0, animatableModel, transFromProps);
 
-     }
 
-   }
 
-   // Store leave to be used in leave transition.
 
-   updateLeaveTo(el, elOption);
 
-   styleOpt ? el.dirty() : el.markRedraw();
 
- }
 
- export function updateLeaveTo(el, elOption) {
 
-   // Try merge to previous set leaveTo
 
-   var leaveToProps = transitionInnerStore(el).leaveToProps;
 
-   for (var i = 0; i < ELEMENT_ANIMATABLE_PROPS.length; i++) {
 
-     var propName = ELEMENT_ANIMATABLE_PROPS[i];
 
-     var prop = propName ? elOption[propName] : elOption;
 
-     if (prop && prop.leaveTo) {
 
-       if (!leaveToProps) {
 
-         leaveToProps = transitionInnerStore(el).leaveToProps = {};
 
-       }
 
-       if (propName) {
 
-         leaveToProps[propName] = leaveToProps[propName] || {};
 
-       }
 
-       extend(propName ? leaveToProps[propName] : leaveToProps, prop.leaveTo);
 
-     }
 
-   }
 
- }
 
- export function applyLeaveTransition(el, elOption, animatableModel, onRemove) {
 
-   if (el) {
 
-     var parent_1 = el.parent;
 
-     var leaveToProps = transitionInnerStore(el).leaveToProps;
 
-     if (leaveToProps) {
 
-       // TODO TODO use leave after leaveAnimation in series is introduced
 
-       // TODO Data index?
 
-       var config = getElementAnimationConfig('update', el, elOption, animatableModel, 0);
 
-       config.done = function () {
 
-         parent_1.remove(el);
 
-         onRemove && onRemove();
 
-       };
 
-       el.animateTo(leaveToProps, config);
 
-     } else {
 
-       parent_1.remove(el);
 
-       onRemove && onRemove();
 
-     }
 
-   }
 
- }
 
- export function isTransitionAll(transition) {
 
-   return transition === 'all';
 
- }
 
- function applyPropsDirectly(el,
 
- // Can be null/undefined
 
- allPropsFinal, clearStyle) {
 
-   var styleOpt = allPropsFinal.style;
 
-   if (!el.isGroup && styleOpt) {
 
-     if (clearStyle) {
 
-       el.useStyle({});
 
-       // When style object changed, how to trade the existing animation?
 
-       // It is probably complicated and not needed to cover all the cases.
 
-       // But still need consider the case:
 
-       // (1) When using init animation on `style.opacity`, and before the animation
 
-       //     ended users triggers an update by mousewhel. At that time the init
 
-       //     animation should better be continued rather than terminated.
 
-       //     So after `useStyle` called, we should change the animation target manually
 
-       //     to continue the effect of the init animation.
 
-       // (2) PENDING: If the previous animation targeted at a `val1`, and currently we need
 
-       //     to update the value to `val2` and no animation declared, should be terminate
 
-       //     the previous animation or just modify the target of the animation?
 
-       //     Therotically That will happen not only on `style` but also on `shape` and
 
-       //     `transfrom` props. But we haven't handle this case at present yet.
 
-       // (3) PENDING: Is it proper to visit `animators` and `targetName`?
 
-       var animators = el.animators;
 
-       for (var i = 0; i < animators.length; i++) {
 
-         var animator = animators[i];
 
-         // targetName is the "topKey".
 
-         if (animator.targetName === 'style') {
 
-           animator.changeTarget(el.style);
 
-         }
 
-       }
 
-     }
 
-     el.setStyle(styleOpt);
 
-   }
 
-   if (allPropsFinal) {
 
-     // Not set style here.
 
-     allPropsFinal.style = null;
 
-     // Set el to the final state firstly.
 
-     allPropsFinal && el.attr(allPropsFinal);
 
-     allPropsFinal.style = styleOpt;
 
-   }
 
- }
 
- function applyPropsTransition(el, elOption, dataIndex, model,
 
- // Can be null/undefined
 
- transFromProps) {
 
-   if (transFromProps) {
 
-     var config = getElementAnimationConfig('update', el, elOption, model, dataIndex);
 
-     if (config.duration > 0) {
 
-       el.animateFrom(transFromProps, config);
 
-     }
 
-   }
 
- }
 
- function applyMiscProps(el, elOption) {
 
-   // Merge by default.
 
-   hasOwn(elOption, 'silent') && (el.silent = elOption.silent);
 
-   hasOwn(elOption, 'ignore') && (el.ignore = elOption.ignore);
 
-   if (el instanceof Displayable) {
 
-     hasOwn(elOption, 'invisible') && (el.invisible = elOption.invisible);
 
-   }
 
-   if (el instanceof Path) {
 
-     hasOwn(elOption, 'autoBatch') && (el.autoBatch = elOption.autoBatch);
 
-   }
 
- }
 
- // Use it to avoid it be exposed to user.
 
- var tmpDuringScope = {};
 
- var transitionDuringAPI = {
 
-   // Usually other props do not need to be changed in animation during.
 
-   setTransform: function (key, val) {
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       assert(hasOwn(TRANSFORM_PROPS_MAP, key), 'Only ' + transformPropNamesStr + ' available in `setTransform`.');
 
-     }
 
-     tmpDuringScope.el[key] = val;
 
-     return this;
 
-   },
 
-   getTransform: function (key) {
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       assert(hasOwn(TRANSFORM_PROPS_MAP, key), 'Only ' + transformPropNamesStr + ' available in `getTransform`.');
 
-     }
 
-     return tmpDuringScope.el[key];
 
-   },
 
-   setShape: function (key, val) {
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       assertNotReserved(key);
 
-     }
 
-     var el = tmpDuringScope.el;
 
-     var shape = el.shape || (el.shape = {});
 
-     shape[key] = val;
 
-     el.dirtyShape && el.dirtyShape();
 
-     return this;
 
-   },
 
-   getShape: function (key) {
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       assertNotReserved(key);
 
-     }
 
-     var shape = tmpDuringScope.el.shape;
 
-     if (shape) {
 
-       return shape[key];
 
-     }
 
-   },
 
-   setStyle: function (key, val) {
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       assertNotReserved(key);
 
-     }
 
-     var el = tmpDuringScope.el;
 
-     var style = el.style;
 
-     if (style) {
 
-       if (process.env.NODE_ENV !== 'production') {
 
-         if (eqNaN(val)) {
 
-           warn('style.' + key + ' must not be assigned with NaN.');
 
-         }
 
-       }
 
-       style[key] = val;
 
-       el.dirtyStyle && el.dirtyStyle();
 
-     }
 
-     return this;
 
-   },
 
-   getStyle: function (key) {
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       assertNotReserved(key);
 
-     }
 
-     var style = tmpDuringScope.el.style;
 
-     if (style) {
 
-       return style[key];
 
-     }
 
-   },
 
-   setExtra: function (key, val) {
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       assertNotReserved(key);
 
-     }
 
-     var extra = tmpDuringScope.el.extra || (tmpDuringScope.el.extra = {});
 
-     extra[key] = val;
 
-     return this;
 
-   },
 
-   getExtra: function (key) {
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       assertNotReserved(key);
 
-     }
 
-     var extra = tmpDuringScope.el.extra;
 
-     if (extra) {
 
-       return extra[key];
 
-     }
 
-   }
 
- };
 
- function assertNotReserved(key) {
 
-   if (process.env.NODE_ENV !== 'production') {
 
-     if (key === 'transition' || key === 'enterFrom' || key === 'leaveTo') {
 
-       throw new Error('key must not be "' + key + '"');
 
-     }
 
-   }
 
- }
 
- function duringCall() {
 
-   // Do not provide "percent" until some requirements come.
 
-   // Because consider thies case:
 
-   // enterFrom: {x: 100, y: 30}, transition: 'x'.
 
-   // And enter duration is different from update duration.
 
-   // Thus it might be confused about the meaning of "percent" in during callback.
 
-   var scope = this;
 
-   var el = scope.el;
 
-   if (!el) {
 
-     return;
 
-   }
 
-   // If el is remove from zr by reason like legend, during still need to called,
 
-   // because el will be added back to zr and the prop value should not be incorrect.
 
-   var latestUserDuring = transitionInnerStore(el).userDuring;
 
-   var scopeUserDuring = scope.userDuring;
 
-   // Ensured a during is only called once in each animation frame.
 
-   // If a during is called multiple times in one frame, maybe some users' calculation logic
 
-   // might be wrong (not sure whether this usage exists).
 
-   // The case of a during might be called twice can be: by default there is a animator for
 
-   // 'x', 'y' when init. Before the init animation finished, call `setOption` to start
 
-   // another animators for 'style'/'shape'/'extra'.
 
-   if (latestUserDuring !== scopeUserDuring) {
 
-     // release
 
-     scope.el = scope.userDuring = null;
 
-     return;
 
-   }
 
-   tmpDuringScope.el = el;
 
-   // Give no `this` to user in "during" calling.
 
-   scopeUserDuring(transitionDuringAPI);
 
-   // FIXME: if in future meet the case that some prop will be both modified in `during` and `state`,
 
-   // consider the issue that the prop might be incorrect when return to "normal" state.
 
- }
 
- function prepareShapeOrExtraTransitionFrom(mainAttr, fromEl, elOption, transFromProps) {
 
-   var attrOpt = elOption[mainAttr];
 
-   if (!attrOpt) {
 
-     return;
 
-   }
 
-   var elPropsInAttr = fromEl[mainAttr];
 
-   var transFromPropsInAttr;
 
-   if (elPropsInAttr) {
 
-     var transition = elOption.transition;
 
-     var attrTransition = attrOpt.transition;
 
-     if (attrTransition) {
 
-       !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});
 
-       if (isTransitionAll(attrTransition)) {
 
-         extend(transFromPropsInAttr, elPropsInAttr);
 
-       } else {
 
-         var transitionKeys = normalizeToArray(attrTransition);
 
-         for (var i = 0; i < transitionKeys.length; i++) {
 
-           var key = transitionKeys[i];
 
-           var elVal = elPropsInAttr[key];
 
-           transFromPropsInAttr[key] = elVal;
 
-         }
 
-       }
 
-     } else if (isTransitionAll(transition) || indexOf(transition, mainAttr) >= 0) {
 
-       !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});
 
-       var elPropsInAttrKeys = keys(elPropsInAttr);
 
-       for (var i = 0; i < elPropsInAttrKeys.length; i++) {
 
-         var key = elPropsInAttrKeys[i];
 
-         var elVal = elPropsInAttr[key];
 
-         if (isNonStyleTransitionEnabled(attrOpt[key], elVal)) {
 
-           transFromPropsInAttr[key] = elVal;
 
-         }
 
-       }
 
-     }
 
-   }
 
- }
 
- function prepareShapeOrExtraAllPropsFinal(mainAttr, elOption, allProps) {
 
-   var attrOpt = elOption[mainAttr];
 
-   if (!attrOpt) {
 
-     return;
 
-   }
 
-   var allPropsInAttr = allProps[mainAttr] = {};
 
-   var keysInAttr = keys(attrOpt);
 
-   for (var i = 0; i < keysInAttr.length; i++) {
 
-     var key = keysInAttr[i];
 
-     // To avoid share one object with different element, and
 
-     // to avoid user modify the object inexpectedly, have to clone.
 
-     allPropsInAttr[key] = cloneValue(attrOpt[key]);
 
-   }
 
- }
 
- function prepareTransformTransitionFrom(el, elOption, transFromProps) {
 
-   var transition = elOption.transition;
 
-   var transitionKeys = isTransitionAll(transition) ? TRANSFORMABLE_PROPS : normalizeToArray(transition || []);
 
-   for (var i = 0; i < transitionKeys.length; i++) {
 
-     var key = transitionKeys[i];
 
-     if (key === 'style' || key === 'shape' || key === 'extra') {
 
-       continue;
 
-     }
 
-     var elVal = el[key];
 
-     if (process.env.NODE_ENV !== 'production') {
 
-       checkTransformPropRefer(key, 'el.transition');
 
-     }
 
-     // Do not clone, animator will perform that clone.
 
-     transFromProps[key] = elVal;
 
-   }
 
- }
 
- function prepareTransformAllPropsFinal(el, elOption, allProps) {
 
-   for (var i = 0; i < LEGACY_TRANSFORM_PROPS.length; i++) {
 
-     var legacyName = LEGACY_TRANSFORM_PROPS[i];
 
-     var xyName = LEGACY_TRANSFORM_PROPS_MAP[legacyName];
 
-     var legacyArr = elOption[legacyName];
 
-     if (legacyArr) {
 
-       allProps[xyName[0]] = legacyArr[0];
 
-       allProps[xyName[1]] = legacyArr[1];
 
-     }
 
-   }
 
-   for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) {
 
-     var key = TRANSFORMABLE_PROPS[i];
 
-     if (elOption[key] != null) {
 
-       allProps[key] = elOption[key];
 
-     }
 
-   }
 
- }
 
- function prepareStyleTransitionFrom(fromEl, elOption, styleOpt, transFromProps) {
 
-   if (!styleOpt) {
 
-     return;
 
-   }
 
-   var fromElStyle = fromEl.style;
 
-   var transFromStyleProps;
 
-   if (fromElStyle) {
 
-     var styleTransition = styleOpt.transition;
 
-     var elTransition = elOption.transition;
 
-     if (styleTransition && !isTransitionAll(styleTransition)) {
 
-       var transitionKeys = normalizeToArray(styleTransition);
 
-       !transFromStyleProps && (transFromStyleProps = transFromProps.style = {});
 
-       for (var i = 0; i < transitionKeys.length; i++) {
 
-         var key = transitionKeys[i];
 
-         var elVal = fromElStyle[key];
 
-         // Do not clone, see `checkNonStyleTansitionRefer`.
 
-         transFromStyleProps[key] = elVal;
 
-       }
 
-     } else if (fromEl.getAnimationStyleProps && (isTransitionAll(elTransition) || isTransitionAll(styleTransition) || indexOf(elTransition, 'style') >= 0)) {
 
-       var animationProps = fromEl.getAnimationStyleProps();
 
-       var animationStyleProps = animationProps ? animationProps.style : null;
 
-       if (animationStyleProps) {
 
-         !transFromStyleProps && (transFromStyleProps = transFromProps.style = {});
 
-         var styleKeys = keys(styleOpt);
 
-         for (var i = 0; i < styleKeys.length; i++) {
 
-           var key = styleKeys[i];
 
-           if (animationStyleProps[key]) {
 
-             var elVal = fromElStyle[key];
 
-             transFromStyleProps[key] = elVal;
 
-           }
 
-         }
 
-       }
 
-     }
 
-   }
 
- }
 
- function isNonStyleTransitionEnabled(optVal, elVal) {
 
-   // The same as `checkNonStyleTansitionRefer`.
 
-   return !isArrayLike(optVal) ? optVal != null && isFinite(optVal) : optVal !== elVal;
 
- }
 
- var checkTransformPropRefer;
 
- if (process.env.NODE_ENV !== 'production') {
 
-   checkTransformPropRefer = function (key, usedIn) {
 
-     if (!hasOwn(TRANSFORM_PROPS_MAP, key)) {
 
-       warn('Prop `' + key + '` is not a permitted in `' + usedIn + '`. ' + 'Only `' + keys(TRANSFORM_PROPS_MAP).join('`, `') + '` are permitted.');
 
-     }
 
-   };
 
- }
 
 
  |