Spaces:
Running
Running
| /* | |
| * 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 Group from 'zrender/src/graphic/Group'; | |
| import * as componentUtil from '../util/component'; | |
| import * as clazzUtil from '../util/clazz'; | |
| import ComponentModel from '../model/Component'; | |
| import GlobalModel from '../model/Global'; | |
| import ExtensionAPI from '../core/ExtensionAPI'; | |
| import {Payload, ViewRootGroup, ECActionEvent, EventQueryItem, ECElementEvent} from '../util/types'; | |
| import Element from 'zrender/src/Element'; | |
| import SeriesModel from '../model/Series'; | |
| interface ComponentView { | |
| /** | |
| * Implement it if needed. | |
| */ | |
| updateTransform?( | |
| model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload | |
| ): void | {update: true}; | |
| /** | |
| * Pass only when return `true`. | |
| * Implement it if needed. | |
| */ | |
| filterForExposedEvent( | |
| eventType: string, query: EventQueryItem, targetEl: Element, packedEvent: ECActionEvent | ECElementEvent | |
| ): boolean; | |
| /** | |
| * Find dispatchers for highlight/downplay by name. | |
| * If this methods provided, hover link (within the same name) is enabled in component. | |
| * That is, in component, a name can correspond to multiple dispatchers. | |
| * Those dispatchers can have no common ancestor. | |
| * The highlight/downplay state change will be applied on the | |
| * dispatchers and their descendents. | |
| * | |
| * @return Must return an array but not null/undefined. | |
| */ | |
| findHighDownDispatchers?( | |
| name: string | |
| ): Element[]; | |
| focusBlurEnabled?: boolean; | |
| } | |
| class ComponentView { | |
| // [Caution]: Because this class or desecendants can be used as `XXX.extend(subProto)`, | |
| // the class members must not be initialized in constructor or declaration place. | |
| // Otherwise there is bad case: | |
| // class A {xxx = 1;} | |
| // enableClassExtend(A); | |
| // class B extends A {} | |
| // var C = B.extend({xxx: 5}); | |
| // var c = new C(); | |
| // console.log(c.xxx); // expect 5 but always 1. | |
| readonly group: ViewRootGroup; | |
| readonly uid: string; | |
| // ---------------------- | |
| // Injectable properties | |
| // ---------------------- | |
| __model: ComponentModel; | |
| __alive: boolean; | |
| __id: string; | |
| constructor() { | |
| this.group = new Group(); | |
| this.uid = componentUtil.getUID('viewComponent'); | |
| } | |
| init(ecModel: GlobalModel, api: ExtensionAPI): void {} | |
| render(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void {} | |
| dispose(ecModel: GlobalModel, api: ExtensionAPI): void {} | |
| updateView(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { | |
| // Do nothing; | |
| } | |
| updateLayout(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { | |
| // Do nothing; | |
| } | |
| updateVisual(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { | |
| // Do nothing; | |
| } | |
| /** | |
| * Hook for toggle blur target series. | |
| * Can be used in marker for blur or leave blur the markers | |
| */ | |
| toggleBlurSeries(seriesModels: SeriesModel[], isBlur: boolean, ecModel: GlobalModel): void { | |
| // Do nothing; | |
| } | |
| /** | |
| * Traverse the new rendered elements. | |
| * | |
| * It will traverse the new added element in progressive rendering. | |
| * And traverse all in normal rendering. | |
| */ | |
| eachRendered(cb: (el: Element) => boolean | void) { | |
| const group = this.group; | |
| if (group) { | |
| group.traverse(cb); | |
| } | |
| } | |
| static registerClass: clazzUtil.ClassManager['registerClass']; | |
| }; | |
| export type ComponentViewConstructor = typeof ComponentView | |
| & clazzUtil.ExtendableConstructor | |
| & clazzUtil.ClassManager; | |
| clazzUtil.enableClassExtend(ComponentView as ComponentViewConstructor); | |
| clazzUtil.enableClassManagement(ComponentView as ComponentViewConstructor); | |
| export default ComponentView; | |