123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- /*
- * 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 { __extends } from "tslib";
- // TODO depends on DataZoom and Brush
- import * as zrUtil from 'zrender/lib/core/util.js';
- import BrushController from '../../helper/BrushController.js';
- import BrushTargetManager from '../../helper/BrushTargetManager.js';
- import * as history from '../../dataZoom/history.js';
- import sliderMove from '../../helper/sliderMove.js';
- import { ToolboxFeature } from '../featureManager.js';
- import { makeInternalComponentId, parseFinder } from '../../../util/model.js';
- import { registerInternalOptionCreator } from '../../../model/internalComponentCreator.js';
- var each = zrUtil.each;
- var DATA_ZOOM_ID_BASE = makeInternalComponentId('toolbox-dataZoom_');
- var ICON_TYPES = ['zoom', 'back'];
- var DataZoomFeature = /** @class */function (_super) {
- __extends(DataZoomFeature, _super);
- function DataZoomFeature() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- DataZoomFeature.prototype.render = function (featureModel, ecModel, api, payload) {
- if (!this._brushController) {
- this._brushController = new BrushController(api.getZr());
- this._brushController.on('brush', zrUtil.bind(this._onBrush, this)).mount();
- }
- updateZoomBtnStatus(featureModel, ecModel, this, payload, api);
- updateBackBtnStatus(featureModel, ecModel);
- };
- DataZoomFeature.prototype.onclick = function (ecModel, api, type) {
- handlers[type].call(this);
- };
- DataZoomFeature.prototype.remove = function (ecModel, api) {
- this._brushController && this._brushController.unmount();
- };
- DataZoomFeature.prototype.dispose = function (ecModel, api) {
- this._brushController && this._brushController.dispose();
- };
- DataZoomFeature.prototype._onBrush = function (eventParam) {
- var areas = eventParam.areas;
- if (!eventParam.isEnd || !areas.length) {
- return;
- }
- var snapshot = {};
- var ecModel = this.ecModel;
- this._brushController.updateCovers([]); // remove cover
- var brushTargetManager = new BrushTargetManager(makeAxisFinder(this.model), ecModel, {
- include: ['grid']
- });
- brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {
- if (coordSys.type !== 'cartesian2d') {
- return;
- }
- var brushType = area.brushType;
- if (brushType === 'rect') {
- setBatch('x', coordSys, coordRange[0]);
- setBatch('y', coordSys, coordRange[1]);
- } else {
- setBatch({
- lineX: 'x',
- lineY: 'y'
- }[brushType], coordSys, coordRange);
- }
- });
- history.push(ecModel, snapshot);
- this._dispatchZoomAction(snapshot);
- function setBatch(dimName, coordSys, minMax) {
- var axis = coordSys.getAxis(dimName);
- var axisModel = axis.model;
- var dataZoomModel = findDataZoom(dimName, axisModel, ecModel);
- // Restrict range.
- var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();
- if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {
- minMax = sliderMove(0, minMax.slice(), axis.scale.getExtent(), 0, minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan);
- }
- dataZoomModel && (snapshot[dataZoomModel.id] = {
- dataZoomId: dataZoomModel.id,
- startValue: minMax[0],
- endValue: minMax[1]
- });
- }
- function findDataZoom(dimName, axisModel, ecModel) {
- var found;
- ecModel.eachComponent({
- mainType: 'dataZoom',
- subType: 'select'
- }, function (dzModel) {
- var has = dzModel.getAxisModel(dimName, axisModel.componentIndex);
- has && (found = dzModel);
- });
- return found;
- }
- };
- ;
- DataZoomFeature.prototype._dispatchZoomAction = function (snapshot) {
- var batch = [];
- // Convert from hash map to array.
- each(snapshot, function (batchItem, dataZoomId) {
- batch.push(zrUtil.clone(batchItem));
- });
- batch.length && this.api.dispatchAction({
- type: 'dataZoom',
- from: this.uid,
- batch: batch
- });
- };
- DataZoomFeature.getDefaultOption = function (ecModel) {
- var defaultOption = {
- show: true,
- filterMode: 'filter',
- // Icon group
- icon: {
- zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',
- back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'
- },
- // `zoom`, `back`
- title: ecModel.getLocaleModel().get(['toolbox', 'dataZoom', 'title']),
- brushStyle: {
- borderWidth: 0,
- color: 'rgba(210,219,238,0.2)'
- }
- };
- return defaultOption;
- };
- return DataZoomFeature;
- }(ToolboxFeature);
- var handlers = {
- zoom: function () {
- var nextActive = !this._isZoomActive;
- this.api.dispatchAction({
- type: 'takeGlobalCursor',
- key: 'dataZoomSelect',
- dataZoomSelectActive: nextActive
- });
- },
- back: function () {
- this._dispatchZoomAction(history.pop(this.ecModel));
- }
- };
- function makeAxisFinder(dzFeatureModel) {
- var setting = {
- xAxisIndex: dzFeatureModel.get('xAxisIndex', true),
- yAxisIndex: dzFeatureModel.get('yAxisIndex', true),
- xAxisId: dzFeatureModel.get('xAxisId', true),
- yAxisId: dzFeatureModel.get('yAxisId', true)
- };
- // If both `xAxisIndex` `xAxisId` not set, it means 'all'.
- // If both `yAxisIndex` `yAxisId` not set, it means 'all'.
- // Some old cases set like this below to close yAxis control but leave xAxis control:
- // `{ feature: { dataZoom: { yAxisIndex: false } }`.
- if (setting.xAxisIndex == null && setting.xAxisId == null) {
- setting.xAxisIndex = 'all';
- }
- if (setting.yAxisIndex == null && setting.yAxisId == null) {
- setting.yAxisIndex = 'all';
- }
- return setting;
- }
- function updateBackBtnStatus(featureModel, ecModel) {
- featureModel.setIconStatus('back', history.count(ecModel) > 1 ? 'emphasis' : 'normal');
- }
- function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {
- var zoomActive = view._isZoomActive;
- if (payload && payload.type === 'takeGlobalCursor') {
- zoomActive = payload.key === 'dataZoomSelect' ? payload.dataZoomSelectActive : false;
- }
- view._isZoomActive = zoomActive;
- featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal');
- var brushTargetManager = new BrushTargetManager(makeAxisFinder(featureModel), ecModel, {
- include: ['grid']
- });
- var panels = brushTargetManager.makePanelOpts(api, function (targetInfo) {
- return targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared ? 'lineX' : !targetInfo.xAxisDeclared && targetInfo.yAxisDeclared ? 'lineY' : 'rect';
- });
- view._brushController.setPanels(panels).enableBrush(zoomActive && panels.length ? {
- brushType: 'auto',
- brushStyle: featureModel.getModel('brushStyle').getItemStyle()
- } : false);
- }
- registerInternalOptionCreator('dataZoom', function (ecModel) {
- var toolboxModel = ecModel.getComponent('toolbox', 0);
- var featureDataZoomPath = ['feature', 'dataZoom'];
- if (!toolboxModel || toolboxModel.get(featureDataZoomPath) == null) {
- return;
- }
- var dzFeatureModel = toolboxModel.getModel(featureDataZoomPath);
- var dzOptions = [];
- var finder = makeAxisFinder(dzFeatureModel);
- var finderResult = parseFinder(ecModel, finder);
- each(finderResult.xAxisModels, function (axisModel) {
- return buildInternalOptions(axisModel, 'xAxis', 'xAxisIndex');
- });
- each(finderResult.yAxisModels, function (axisModel) {
- return buildInternalOptions(axisModel, 'yAxis', 'yAxisIndex');
- });
- function buildInternalOptions(axisModel, axisMainType, axisIndexPropName) {
- var axisIndex = axisModel.componentIndex;
- var newOpt = {
- type: 'select',
- $fromToolbox: true,
- // Default to be filter
- filterMode: dzFeatureModel.get('filterMode', true) || 'filter',
- // Id for merge mapping.
- id: DATA_ZOOM_ID_BASE + axisMainType + axisIndex
- };
- newOpt[axisIndexPropName] = axisIndex;
- dzOptions.push(newOpt);
- }
- return dzOptions;
- });
- export default DataZoomFeature;
|