123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- /*
- * 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 zrUtil from 'zrender/lib/core/util.js';
- import { makeInner } from '../util/model.js';
- import { getDecalFromPalette } from '../model/mixin/palette.js';
- var DEFAULT_OPTION = {
- label: {
- enabled: true
- },
- decal: {
- show: false
- }
- };
- var inner = makeInner();
- var decalPaletteScope = {};
- export default function ariaVisual(ecModel, api) {
- var ariaModel = ecModel.getModel('aria');
- // See "area enabled" detection code in `GlobalModel.ts`.
- if (!ariaModel.get('enabled')) {
- return;
- }
- var defaultOption = zrUtil.clone(DEFAULT_OPTION);
- zrUtil.merge(defaultOption.label, ecModel.getLocaleModel().get('aria'), false);
- zrUtil.merge(ariaModel.option, defaultOption, false);
- setDecal();
- setLabel();
- function setDecal() {
- var decalModel = ariaModel.getModel('decal');
- var useDecal = decalModel.get('show');
- if (useDecal) {
- // Each type of series use one scope.
- // Pie and funnel are using different scopes.
- var paletteScopeGroupByType_1 = zrUtil.createHashMap();
- ecModel.eachSeries(function (seriesModel) {
- if (seriesModel.isColorBySeries()) {
- return;
- }
- var decalScope = paletteScopeGroupByType_1.get(seriesModel.type);
- if (!decalScope) {
- decalScope = {};
- paletteScopeGroupByType_1.set(seriesModel.type, decalScope);
- }
- inner(seriesModel).scope = decalScope;
- });
- ecModel.eachRawSeries(function (seriesModel) {
- if (ecModel.isSeriesFiltered(seriesModel)) {
- return;
- }
- if (zrUtil.isFunction(seriesModel.enableAriaDecal)) {
- // Let series define how to use decal palette on data
- seriesModel.enableAriaDecal();
- return;
- }
- var data = seriesModel.getData();
- if (!seriesModel.isColorBySeries()) {
- var dataAll_1 = seriesModel.getRawData();
- var idxMap_1 = {};
- var decalScope_1 = inner(seriesModel).scope;
- data.each(function (idx) {
- var rawIdx = data.getRawIndex(idx);
- idxMap_1[rawIdx] = idx;
- });
- var dataCount_1 = dataAll_1.count();
- dataAll_1.each(function (rawIdx) {
- var idx = idxMap_1[rawIdx];
- var name = dataAll_1.getName(rawIdx) || rawIdx + '';
- var paletteDecal = getDecalFromPalette(seriesModel.ecModel, name, decalScope_1, dataCount_1);
- var specifiedDecal = data.getItemVisual(idx, 'decal');
- data.setItemVisual(idx, 'decal', mergeDecal(specifiedDecal, paletteDecal));
- });
- } else {
- var paletteDecal = getDecalFromPalette(seriesModel.ecModel, seriesModel.name, decalPaletteScope, ecModel.getSeriesCount());
- var specifiedDecal = data.getVisual('decal');
- data.setVisual('decal', mergeDecal(specifiedDecal, paletteDecal));
- }
- function mergeDecal(specifiedDecal, paletteDecal) {
- // Merge decal from palette to decal from itemStyle.
- // User do not need to specify all of the decal props.
- var resultDecal = specifiedDecal ? zrUtil.extend(zrUtil.extend({}, paletteDecal), specifiedDecal) : paletteDecal;
- resultDecal.dirty = true;
- return resultDecal;
- }
- });
- }
- }
- function setLabel() {
- var dom = api.getZr().dom;
- // TODO: support for SSR
- if (!dom) {
- return;
- }
- var labelLocale = ecModel.getLocaleModel().get('aria');
- var labelModel = ariaModel.getModel('label');
- labelModel.option = zrUtil.defaults(labelModel.option, labelLocale);
- if (!labelModel.get('enabled')) {
- return;
- }
- if (labelModel.get('description')) {
- dom.setAttribute('aria-label', labelModel.get('description'));
- return;
- }
- var seriesCnt = ecModel.getSeriesCount();
- var maxDataCnt = labelModel.get(['data', 'maxCount']) || 10;
- var maxSeriesCnt = labelModel.get(['series', 'maxCount']) || 10;
- var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt);
- var ariaLabel;
- if (seriesCnt < 1) {
- // No series, no aria label
- return;
- } else {
- var title = getTitle();
- if (title) {
- var withTitle = labelModel.get(['general', 'withTitle']);
- ariaLabel = replace(withTitle, {
- title: title
- });
- } else {
- ariaLabel = labelModel.get(['general', 'withoutTitle']);
- }
- var seriesLabels_1 = [];
- var prefix = seriesCnt > 1 ? labelModel.get(['series', 'multiple', 'prefix']) : labelModel.get(['series', 'single', 'prefix']);
- ariaLabel += replace(prefix, {
- seriesCount: seriesCnt
- });
- ecModel.eachSeries(function (seriesModel, idx) {
- if (idx < displaySeriesCnt) {
- var seriesLabel = void 0;
- var seriesName = seriesModel.get('name');
- var withName = seriesName ? 'withName' : 'withoutName';
- seriesLabel = seriesCnt > 1 ? labelModel.get(['series', 'multiple', withName]) : labelModel.get(['series', 'single', withName]);
- seriesLabel = replace(seriesLabel, {
- seriesId: seriesModel.seriesIndex,
- seriesName: seriesModel.get('name'),
- seriesType: getSeriesTypeName(seriesModel.subType)
- });
- var data = seriesModel.getData();
- if (data.count() > maxDataCnt) {
- // Show part of data
- var partialLabel = labelModel.get(['data', 'partialData']);
- seriesLabel += replace(partialLabel, {
- displayCnt: maxDataCnt
- });
- } else {
- seriesLabel += labelModel.get(['data', 'allData']);
- }
- var middleSeparator_1 = labelModel.get(['data', 'separator', 'middle']);
- var endSeparator_1 = labelModel.get(['data', 'separator', 'end']);
- var dataLabels = [];
- for (var i = 0; i < data.count(); i++) {
- if (i < maxDataCnt) {
- var name_1 = data.getName(i);
- var value = data.getValues(i);
- var dataLabel = labelModel.get(['data', name_1 ? 'withName' : 'withoutName']);
- dataLabels.push(replace(dataLabel, {
- name: name_1,
- value: value.join(middleSeparator_1)
- }));
- }
- }
- seriesLabel += dataLabels.join(middleSeparator_1) + endSeparator_1;
- seriesLabels_1.push(seriesLabel);
- }
- });
- var separatorModel = labelModel.getModel(['series', 'multiple', 'separator']);
- var middleSeparator = separatorModel.get('middle');
- var endSeparator = separatorModel.get('end');
- ariaLabel += seriesLabels_1.join(middleSeparator) + endSeparator;
- dom.setAttribute('aria-label', ariaLabel);
- }
- }
- function replace(str, keyValues) {
- if (!zrUtil.isString(str)) {
- return str;
- }
- var result = str;
- zrUtil.each(keyValues, function (value, key) {
- result = result.replace(new RegExp('\\{\\s*' + key + '\\s*\\}', 'g'), value);
- });
- return result;
- }
- function getTitle() {
- var title = ecModel.get('title');
- if (title && title.length) {
- title = title[0];
- }
- return title && title.text;
- }
- function getSeriesTypeName(type) {
- var typeNames = ecModel.getLocaleModel().get(['series', 'typeNames']);
- return typeNames[type] || typeNames.chart;
- }
- }
|