|   | 
| /* | 
| * 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 * as zrUtil from 'zrender/lib/core/util.js'; | 
| import { makeInner } from '../../util/model.js'; | 
| var each = zrUtil.each; | 
| var inner = makeInner(); | 
| /** | 
|  * @param ecModel | 
|  * @param newSnapshot key is dataZoomId | 
|  */ | 
| export function push(ecModel, newSnapshot) { | 
|   var storedSnapshots = getStoreSnapshots(ecModel); | 
|   // If previous dataZoom can not be found, | 
|   // complete an range with current range. | 
|   each(newSnapshot, function (batchItem, dataZoomId) { | 
|     var i = storedSnapshots.length - 1; | 
|     for (; i >= 0; i--) { | 
|       var snapshot = storedSnapshots[i]; | 
|       if (snapshot[dataZoomId]) { | 
|         break; | 
|       } | 
|     } | 
|     if (i < 0) { | 
|       // No origin range set, create one by current range. | 
|       var dataZoomModel = ecModel.queryComponents({ | 
|         mainType: 'dataZoom', | 
|         subType: 'select', | 
|         id: dataZoomId | 
|       })[0]; | 
|       if (dataZoomModel) { | 
|         var percentRange = dataZoomModel.getPercentRange(); | 
|         storedSnapshots[0][dataZoomId] = { | 
|           dataZoomId: dataZoomId, | 
|           start: percentRange[0], | 
|           end: percentRange[1] | 
|         }; | 
|       } | 
|     } | 
|   }); | 
|   storedSnapshots.push(newSnapshot); | 
| } | 
| export function pop(ecModel) { | 
|   var storedSnapshots = getStoreSnapshots(ecModel); | 
|   var head = storedSnapshots[storedSnapshots.length - 1]; | 
|   storedSnapshots.length > 1 && storedSnapshots.pop(); | 
|   // Find top for all dataZoom. | 
|   var snapshot = {}; | 
|   each(head, function (batchItem, dataZoomId) { | 
|     for (var i = storedSnapshots.length - 1; i >= 0; i--) { | 
|       batchItem = storedSnapshots[i][dataZoomId]; | 
|       if (batchItem) { | 
|         snapshot[dataZoomId] = batchItem; | 
|         break; | 
|       } | 
|     } | 
|   }); | 
|   return snapshot; | 
| } | 
| export function clear(ecModel) { | 
|   inner(ecModel).snapshots = null; | 
| } | 
| export function count(ecModel) { | 
|   return getStoreSnapshots(ecModel).length; | 
| } | 
| /** | 
|  * History length of each dataZoom may be different. | 
|  * this._history[0] is used to store origin range. | 
|  */ | 
| function getStoreSnapshots(ecModel) { | 
|   var store = inner(ecModel); | 
|   if (!store.snapshots) { | 
|     store.snapshots = [{}]; | 
|   } | 
|   return store.snapshots; | 
| } |