/* * 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 { each } from 'zrender/lib/core/util.js'; import Group from 'zrender/lib/graphic/Group.js'; import * as componentUtil from '../util/component.js'; import * as clazzUtil from '../util/clazz.js'; import * as modelUtil from '../util/model.js'; import { enterEmphasis, leaveEmphasis, getHighlightDigit, isHighDownDispatcher } from '../util/states.js'; import { createTask } from '../core/task.js'; import createRenderPlanner from '../chart/helper/createRenderPlanner.js'; import { traverseElements } from '../util/graphic.js'; import { error } from '../util/log.js'; var inner = modelUtil.makeInner(); var renderPlanner = createRenderPlanner(); var ChartView = /** @class */ function () { function ChartView() { this.group = new Group(); this.uid = componentUtil.getUID('viewChart'); this.renderTask = createTask({ plan: renderTaskPlan, reset: renderTaskReset }); this.renderTask.context = { view: this }; } ChartView.prototype.init = function (ecModel, api) {}; ChartView.prototype.render = function (seriesModel, ecModel, api, payload) { if (process.env.NODE_ENV !== 'production') { throw new Error('render method must been implemented'); } }; /** * Highlight series or specified data item. */ ChartView.prototype.highlight = function (seriesModel, ecModel, api, payload) { var data = seriesModel.getData(payload && payload.dataType); if (!data) { if (process.env.NODE_ENV !== 'production') { error("Unknown dataType " + payload.dataType); } return; } toggleHighlight(data, payload, 'emphasis'); }; /** * Downplay series or specified data item. */ ChartView.prototype.downplay = function (seriesModel, ecModel, api, payload) { var data = seriesModel.getData(payload && payload.dataType); if (!data) { if (process.env.NODE_ENV !== 'production') { error("Unknown dataType " + payload.dataType); } return; } toggleHighlight(data, payload, 'normal'); }; /** * Remove self. */ ChartView.prototype.remove = function (ecModel, api) { this.group.removeAll(); }; /** * Dispose self. */ ChartView.prototype.dispose = function (ecModel, api) {}; ChartView.prototype.updateView = function (seriesModel, ecModel, api, payload) { this.render(seriesModel, ecModel, api, payload); }; // FIXME never used? ChartView.prototype.updateLayout = function (seriesModel, ecModel, api, payload) { this.render(seriesModel, ecModel, api, payload); }; // FIXME never used? ChartView.prototype.updateVisual = function (seriesModel, ecModel, api, payload) { this.render(seriesModel, ecModel, api, payload); }; /** * Traverse the new rendered elements. * * It will traverse the new added element in progressive rendering. * And traverse all in normal rendering. */ ChartView.prototype.eachRendered = function (cb) { traverseElements(this.group, cb); }; ChartView.markUpdateMethod = function (payload, methodName) { inner(payload).updateMethod = methodName; }; ChartView.protoInitialize = function () { var proto = ChartView.prototype; proto.type = 'chart'; }(); return ChartView; }(); ; /** * Set state of single element */ function elSetState(el, state, highlightDigit) { if (el && isHighDownDispatcher(el)) { (state === 'emphasis' ? enterEmphasis : leaveEmphasis)(el, highlightDigit); } } function toggleHighlight(data, payload, state) { var dataIndex = modelUtil.queryDataIndex(data, payload); var highlightDigit = payload && payload.highlightKey != null ? getHighlightDigit(payload.highlightKey) : null; if (dataIndex != null) { each(modelUtil.normalizeToArray(dataIndex), function (dataIdx) { elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit); }); } else { data.eachItemGraphicEl(function (el) { elSetState(el, state, highlightDigit); }); } } clazzUtil.enableClassExtend(ChartView, ['dispose']); clazzUtil.enableClassManagement(ChartView); function renderTaskPlan(context) { return renderPlanner(context.model); } function renderTaskReset(context) { var seriesModel = context.model; var ecModel = context.ecModel; var api = context.api; var payload = context.payload; // FIXME: remove updateView updateVisual var progressiveRender = seriesModel.pipelineContext.progressiveRender; var view = context.view; var updateMethod = payload && inner(payload).updateMethod; var methodName = progressiveRender ? 'incrementalPrepareRender' : updateMethod && view[updateMethod] ? updateMethod // `appendData` is also supported when data amount // is less than progressive threshold. : 'render'; if (methodName !== 'render') { view[methodName](seriesModel, ecModel, api, payload); } return progressMethodMap[methodName]; } var progressMethodMap = { incrementalPrepareRender: { progress: function (params, context) { context.view.incrementalRender(params, context.model, context.ecModel, context.api, context.payload); } }, render: { // Put view.render in `progress` to support appendData. But in this case // view.render should not be called in reset, otherwise it will be called // twise. Use `forceFirstProgress` to make sure that view.render is called // in any cases. forceFirstProgress: true, progress: function (params, context) { context.view.render(context.model, context.ecModel, context.api, context.payload); } } }; export default ChartView;