history.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. var zrUtil = require("zrender/lib/core/util");
  2. var each = zrUtil.each;
  3. var ATTR = '\0_ec_hist_store';
  4. /**
  5. * @param {module:echarts/model/Global} ecModel
  6. * @param {Object} newSnapshot {dataZoomId, batch: [payloadInfo, ...]}
  7. */
  8. function push(ecModel, newSnapshot) {
  9. var store = giveStore(ecModel); // If previous dataZoom can not be found,
  10. // complete an range with current range.
  11. each(newSnapshot, function (batchItem, dataZoomId) {
  12. var i = store.length - 1;
  13. for (; i >= 0; i--) {
  14. var snapshot = store[i];
  15. if (snapshot[dataZoomId]) {
  16. break;
  17. }
  18. }
  19. if (i < 0) {
  20. // No origin range set, create one by current range.
  21. var dataZoomModel = ecModel.queryComponents({
  22. mainType: 'dataZoom',
  23. subType: 'select',
  24. id: dataZoomId
  25. })[0];
  26. if (dataZoomModel) {
  27. var percentRange = dataZoomModel.getPercentRange();
  28. store[0][dataZoomId] = {
  29. dataZoomId: dataZoomId,
  30. start: percentRange[0],
  31. end: percentRange[1]
  32. };
  33. }
  34. }
  35. });
  36. store.push(newSnapshot);
  37. }
  38. /**
  39. * @param {module:echarts/model/Global} ecModel
  40. * @return {Object} snapshot
  41. */
  42. function pop(ecModel) {
  43. var store = giveStore(ecModel);
  44. var head = store[store.length - 1];
  45. store.length > 1 && store.pop(); // Find top for all dataZoom.
  46. var snapshot = {};
  47. each(head, function (batchItem, dataZoomId) {
  48. for (var i = store.length - 1; i >= 0; i--) {
  49. var batchItem = store[i][dataZoomId];
  50. if (batchItem) {
  51. snapshot[dataZoomId] = batchItem;
  52. break;
  53. }
  54. }
  55. });
  56. return snapshot;
  57. }
  58. /**
  59. * @param {module:echarts/model/Global} ecModel
  60. */
  61. function clear(ecModel) {
  62. ecModel[ATTR] = null;
  63. }
  64. /**
  65. * @param {module:echarts/model/Global} ecModel
  66. * @return {number} records. always >= 1.
  67. */
  68. function count(ecModel) {
  69. return giveStore(ecModel).length;
  70. }
  71. /**
  72. * [{key: dataZoomId, value: {dataZoomId, range}}, ...]
  73. * History length of each dataZoom may be different.
  74. * this._history[0] is used to store origin range.
  75. * @type {Array.<Object>}
  76. */
  77. function giveStore(ecModel) {
  78. var store = ecModel[ATTR];
  79. if (!store) {
  80. store = ecModel[ATTR] = [{}];
  81. }
  82. return store;
  83. }
  84. exports.push = push;
  85. exports.pop = pop;
  86. exports.clear = clear;
  87. exports.count = count;