| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 | 
/** 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.*/var _helper = require("./helper");var prepareDataCoordInfo = _helper.prepareDataCoordInfo;var getStackedOnPoint = _helper.getStackedOnPoint;/** 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.*/// var arrayDiff = require('zrender/src/core/arrayDiff');// 'zrender/src/core/arrayDiff' has been used before, but it did// not do well in performance when roam with fixed dataZoom window.// function convertToIntId(newIdList, oldIdList) {//     // Generate int id instead of string id.//     // Compare string maybe slow in score function of arrDiff//     // Assume id in idList are all unique//     var idIndicesMap = {};//     var idx = 0;//     for (var i = 0; i < newIdList.length; i++) {//         idIndicesMap[newIdList[i]] = idx;//         newIdList[i] = idx++;//     }//     for (var i = 0; i < oldIdList.length; i++) {//         var oldId = oldIdList[i];//         // Same with newIdList//         if (idIndicesMap[oldId]) {//             oldIdList[i] = idIndicesMap[oldId];//         }//         else {//             oldIdList[i] = idx++;//         }//     }// }function diffData(oldData, newData) {  var diffResult = [];  newData.diff(oldData).add(function (idx) {    diffResult.push({      cmd: '+',      idx: idx    });  }).update(function (newIdx, oldIdx) {    diffResult.push({      cmd: '=',      idx: oldIdx,      idx1: newIdx    });  }).remove(function (idx) {    diffResult.push({      cmd: '-',      idx: idx    });  }).execute();  return diffResult;}function _default(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys, oldValueOrigin, newValueOrigin) {  var diff = diffData(oldData, newData); // var newIdList = newData.mapArray(newData.getId);  // var oldIdList = oldData.mapArray(oldData.getId);  // convertToIntId(newIdList, oldIdList);  // // FIXME One data ?  // diff = arrayDiff(oldIdList, newIdList);  var currPoints = [];  var nextPoints = []; // Points for stacking base line  var currStackedPoints = [];  var nextStackedPoints = [];  var status = [];  var sortedIndices = [];  var rawIndices = [];  var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);  var oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);  for (var i = 0; i < diff.length; i++) {    var diffItem = diff[i];    var pointAdded = true; // FIXME, animation is not so perfect when dataZoom window moves fast    // Which is in case remvoing or add more than one data in the tail or head    switch (diffItem.cmd) {      case '=':        var currentPt = oldData.getItemLayout(diffItem.idx);        var nextPt = newData.getItemLayout(diffItem.idx1); // If previous data is NaN, use next point directly        if (isNaN(currentPt[0]) || isNaN(currentPt[1])) {          currentPt = nextPt.slice();        }        currPoints.push(currentPt);        nextPoints.push(nextPt);        currStackedPoints.push(oldStackedOnPoints[diffItem.idx]);        nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]);        rawIndices.push(newData.getRawIndex(diffItem.idx1));        break;      case '+':        var idx = diffItem.idx;        currPoints.push(oldCoordSys.dataToPoint([newData.get(newDataOldCoordInfo.dataDimsForPoint[0], idx), newData.get(newDataOldCoordInfo.dataDimsForPoint[1], idx)]));        nextPoints.push(newData.getItemLayout(idx).slice());        currStackedPoints.push(getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, idx));        nextStackedPoints.push(newStackedOnPoints[idx]);        rawIndices.push(newData.getRawIndex(idx));        break;      case '-':        var idx = diffItem.idx;        var rawIndex = oldData.getRawIndex(idx); // Data is replaced. In the case of dynamic data queue        // FIXME FIXME FIXME        if (rawIndex !== idx) {          currPoints.push(oldData.getItemLayout(idx));          nextPoints.push(newCoordSys.dataToPoint([oldData.get(oldDataNewCoordInfo.dataDimsForPoint[0], idx), oldData.get(oldDataNewCoordInfo.dataDimsForPoint[1], idx)]));          currStackedPoints.push(oldStackedOnPoints[idx]);          nextStackedPoints.push(getStackedOnPoint(oldDataNewCoordInfo, newCoordSys, oldData, idx));          rawIndices.push(rawIndex);        } else {          pointAdded = false;        }    } // Original indices    if (pointAdded) {      status.push(diffItem);      sortedIndices.push(sortedIndices.length);    }  } // Diff result may be crossed if all items are changed  // Sort by data index  sortedIndices.sort(function (a, b) {    return rawIndices[a] - rawIndices[b];  });  var sortedCurrPoints = [];  var sortedNextPoints = [];  var sortedCurrStackedPoints = [];  var sortedNextStackedPoints = [];  var sortedStatus = [];  for (var i = 0; i < sortedIndices.length; i++) {    var idx = sortedIndices[i];    sortedCurrPoints[i] = currPoints[idx];    sortedNextPoints[i] = nextPoints[idx];    sortedCurrStackedPoints[i] = currStackedPoints[idx];    sortedNextStackedPoints[i] = nextStackedPoints[idx];    sortedStatus[i] = status[idx];  }  return {    current: sortedCurrPoints,    next: sortedNextPoints,    stackedOnCurrent: sortedCurrStackedPoints,    stackedOnNext: sortedNextStackedPoints,    status: sortedStatus  };}module.exports = _default;
 |