123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- /*
- * 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 * as graphic from '../../util/graphic.js';
- import { getECData } from '../../util/innerStore.js';
- import * as layout from '../../util/layout.js';
- import { wrapTreePathInfo } from '../helper/treeHelper.js';
- import { curry, defaults } from 'zrender/lib/core/util.js';
- import { convertOptionIdName } from '../../util/model.js';
- import { toggleHoverEmphasis, Z2_EMPHASIS_LIFT } from '../../util/states.js';
- import { createTextStyle } from '../../label/labelStyle.js';
- var TEXT_PADDING = 8;
- var ITEM_GAP = 8;
- var ARRAY_LENGTH = 5;
- var Breadcrumb =
- /** @class */
- function () {
- function Breadcrumb(containerGroup) {
- this.group = new graphic.Group();
- containerGroup.add(this.group);
- }
- Breadcrumb.prototype.render = function (seriesModel, api, targetNode, onSelect) {
- var model = seriesModel.getModel('breadcrumb');
- var thisGroup = this.group;
- thisGroup.removeAll();
- if (!model.get('show') || !targetNode) {
- return;
- }
- var normalStyleModel = model.getModel('itemStyle');
- var emphasisModel = model.getModel('emphasis');
- var textStyleModel = normalStyleModel.getModel('textStyle');
- var emphasisTextStyleModel = emphasisModel.getModel(['itemStyle', 'textStyle']);
- var layoutParam = {
- pos: {
- left: model.get('left'),
- right: model.get('right'),
- top: model.get('top'),
- bottom: model.get('bottom')
- },
- box: {
- width: api.getWidth(),
- height: api.getHeight()
- },
- emptyItemWidth: model.get('emptyItemWidth'),
- totalWidth: 0,
- renderList: []
- };
- this._prepare(targetNode, layoutParam, textStyleModel);
- this._renderContent(seriesModel, layoutParam, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect);
- layout.positionElement(thisGroup, layoutParam.pos, layoutParam.box);
- };
- /**
- * Prepare render list and total width
- * @private
- */
- Breadcrumb.prototype._prepare = function (targetNode, layoutParam, textStyleModel) {
- for (var node = targetNode; node; node = node.parentNode) {
- var text = convertOptionIdName(node.getModel().get('name'), '');
- var textRect = textStyleModel.getTextRect(text);
- var itemWidth = Math.max(textRect.width + TEXT_PADDING * 2, layoutParam.emptyItemWidth);
- layoutParam.totalWidth += itemWidth + ITEM_GAP;
- layoutParam.renderList.push({
- node: node,
- text: text,
- width: itemWidth
- });
- }
- };
- /**
- * @private
- */
- Breadcrumb.prototype._renderContent = function (seriesModel, layoutParam, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect) {
- // Start rendering.
- var lastX = 0;
- var emptyItemWidth = layoutParam.emptyItemWidth;
- var height = seriesModel.get(['breadcrumb', 'height']);
- var availableSize = layout.getAvailableSize(layoutParam.pos, layoutParam.box);
- var totalWidth = layoutParam.totalWidth;
- var renderList = layoutParam.renderList;
- var emphasisItemStyle = emphasisModel.getModel('itemStyle').getItemStyle();
- for (var i = renderList.length - 1; i >= 0; i--) {
- var item = renderList[i];
- var itemNode = item.node;
- var itemWidth = item.width;
- var text = item.text; // Hdie text and shorten width if necessary.
- if (totalWidth > availableSize.width) {
- totalWidth -= itemWidth - emptyItemWidth;
- itemWidth = emptyItemWidth;
- text = null;
- }
- var el = new graphic.Polygon({
- shape: {
- points: makeItemPoints(lastX, 0, itemWidth, height, i === renderList.length - 1, i === 0)
- },
- style: defaults(normalStyleModel.getItemStyle(), {
- lineJoin: 'bevel'
- }),
- textContent: new graphic.Text({
- style: createTextStyle(textStyleModel, {
- text: text
- })
- }),
- textConfig: {
- position: 'inside'
- },
- z2: Z2_EMPHASIS_LIFT * 1e4,
- onclick: curry(onSelect, itemNode)
- });
- el.disableLabelAnimation = true;
- el.getTextContent().ensureState('emphasis').style = createTextStyle(emphasisTextStyleModel, {
- text: text
- });
- el.ensureState('emphasis').style = emphasisItemStyle;
- toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));
- this.group.add(el);
- packEventData(el, seriesModel, itemNode);
- lastX += itemWidth + ITEM_GAP;
- }
- };
- Breadcrumb.prototype.remove = function () {
- this.group.removeAll();
- };
- return Breadcrumb;
- }();
- function makeItemPoints(x, y, itemWidth, itemHeight, head, tail) {
- var points = [[head ? x : x - ARRAY_LENGTH, y], [x + itemWidth, y], [x + itemWidth, y + itemHeight], [head ? x : x - ARRAY_LENGTH, y + itemHeight]];
- !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]);
- !head && points.push([x, y + itemHeight / 2]);
- return points;
- } // Package custom mouse event.
- function packEventData(el, seriesModel, itemNode) {
- getECData(el).eventData = {
- componentType: 'series',
- componentSubType: 'treemap',
- componentIndex: seriesModel.componentIndex,
- seriesIndex: seriesModel.seriesIndex,
- seriesName: seriesModel.name,
- seriesType: 'treemap',
- selfType: 'breadcrumb',
- nodeData: {
- dataIndex: itemNode && itemNode.dataIndex,
- name: itemNode && itemNode.name
- },
- treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel)
- };
- }
- export default Breadcrumb;
|