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 { Dictionary, DisplayState, ZRElementEvent, ItemStyleOption, LabelOption } from '../../util/types'; | |
| import Model from '../../model/Model'; | |
| import GlobalModel from '../../model/Global'; | |
| import ExtensionAPI from '../../core/ExtensionAPI'; | |
| // import * as graphic from '../../util/graphic'; | |
| import Displayable from 'zrender/src/graphic/Displayable'; | |
| // type IconPath = ReturnType<typeof graphic.createIcon>; | |
| type IconStyle = ItemStyleOption & { | |
| // TODO Move to a individual textStyle option | |
| textFill?: LabelOption['color'] | |
| textBackgroundColor?: LabelOption['backgroundColor'] | |
| textPosition?: LabelOption['position'] | |
| textAlign?: LabelOption['align'] | |
| textBorderRadius?: LabelOption['borderRadius'] | |
| textPadding?: LabelOption['padding'] | |
| textFontFamily?: LabelOption['fontFamily'] | |
| textFontSize?: LabelOption['fontSize'] | |
| textFontWeight?: LabelOption['fontWeight'] | |
| textFontStyle?: LabelOption['fontStyle'] | |
| }; | |
| export interface ToolboxFeatureOption { | |
| show?: boolean | |
| title?: string | Partial<Dictionary<string>> | |
| icon?: string | Partial<Dictionary<string>> | |
| iconStyle?: IconStyle | |
| emphasis?: { | |
| iconStyle?: IconStyle | |
| } | |
| iconStatus?: Partial<Dictionary<DisplayState>> | |
| onclick?: () => void | |
| } | |
| export interface ToolboxFeatureModel<Opts extends ToolboxFeatureOption = ToolboxFeatureOption> extends Model<Opts> { | |
| /** | |
| * Collection of icon paths. | |
| * Will be injected during rendering in the view. | |
| */ | |
| iconPaths: Partial<Dictionary<Displayable>> | |
| setIconStatus(iconName: string, status: DisplayState): void | |
| } | |
| interface ToolboxFeature<Opts extends ToolboxFeatureOption = ToolboxFeatureOption> { | |
| getIcons?(): Dictionary<string> | |
| onclick(ecModel: GlobalModel, api: ExtensionAPI, type: string, event: ZRElementEvent): void | |
| dispose?(ecModel: GlobalModel, api: ExtensionAPI): void | |
| remove?(ecModel: GlobalModel, api: ExtensionAPI): void | |
| render(featureModel: ToolboxFeatureModel, model: GlobalModel, api: ExtensionAPI, payload: unknown): void | |
| updateView?(featureModel: ToolboxFeatureModel, model: GlobalModel, api: ExtensionAPI, payload: unknown): void | |
| } | |
| abstract class ToolboxFeature<Opts extends ToolboxFeatureOption = ToolboxFeatureOption> { | |
| uid: string; | |
| model: ToolboxFeatureModel<Opts>; | |
| ecModel: GlobalModel; | |
| api: ExtensionAPI; | |
| /** | |
| * If toolbox feature can't be used on some platform. | |
| */ | |
| unusable?: boolean; | |
| } | |
| export {ToolboxFeature}; | |
| export interface UserDefinedToolboxFeature { | |
| uid: string | |
| model: ToolboxFeatureModel | |
| ecModel: GlobalModel | |
| api: ExtensionAPI | |
| featureName?: string | |
| onclick(): void | |
| } | |
| type ToolboxFeatureCtor = { | |
| new(): ToolboxFeature | |
| /** | |
| * Static defaultOption property | |
| */ | |
| defaultOption?: ToolboxFeatureOption | |
| getDefaultOption?: (ecModel: GlobalModel) => ToolboxFeatureOption | |
| }; | |
| const features: Dictionary<ToolboxFeatureCtor> = {}; | |
| export function registerFeature(name: string, ctor: ToolboxFeatureCtor) { | |
| features[name] = ctor; | |
| } | |
| export function getFeature(name: string) { | |
| return features[name]; | |
| } | |