You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							173 lines
						
					
					
						
							5.2 KiB
						
					
					
				
			
		
		
	
	
							173 lines
						
					
					
						
							5.2 KiB
						
					
					
				
 | 
						|
/* | 
						|
* 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. | 
						|
*/ | 
						|
 | 
						|
var zrUtil = require("zrender/lib/core/util"); | 
						|
 | 
						|
var lang = require("../lang"); | 
						|
 | 
						|
var _dataProvider = require("../data/helper/dataProvider"); | 
						|
 | 
						|
var retrieveRawValue = _dataProvider.retrieveRawValue; | 
						|
 | 
						|
/* | 
						|
* 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. | 
						|
*/ | 
						|
function _default(dom, ecModel) { | 
						|
  var ariaModel = ecModel.getModel('aria'); | 
						|
 | 
						|
  if (!ariaModel.get('show')) { | 
						|
    return; | 
						|
  } else if (ariaModel.get('description')) { | 
						|
    dom.setAttribute('aria-label', ariaModel.get('description')); | 
						|
    return; | 
						|
  } | 
						|
 | 
						|
  var seriesCnt = 0; | 
						|
  ecModel.eachSeries(function (seriesModel, idx) { | 
						|
    ++seriesCnt; | 
						|
  }, this); | 
						|
  var maxDataCnt = ariaModel.get('data.maxCount') || 10; | 
						|
  var maxSeriesCnt = ariaModel.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) { | 
						|
      ariaLabel = replace(getConfig('general.withTitle'), { | 
						|
        title: title | 
						|
      }); | 
						|
    } else { | 
						|
      ariaLabel = getConfig('general.withoutTitle'); | 
						|
    } | 
						|
 | 
						|
    var seriesLabels = []; | 
						|
    var prefix = seriesCnt > 1 ? 'series.multiple.prefix' : 'series.single.prefix'; | 
						|
    ariaLabel += replace(getConfig(prefix), { | 
						|
      seriesCount: seriesCnt | 
						|
    }); | 
						|
    ecModel.eachSeries(function (seriesModel, idx) { | 
						|
      if (idx < displaySeriesCnt) { | 
						|
        var seriesLabel; | 
						|
        var seriesName = seriesModel.get('name'); | 
						|
        var seriesTpl = 'series.' + (seriesCnt > 1 ? 'multiple' : 'single') + '.'; | 
						|
        seriesLabel = getConfig(seriesName ? seriesTpl + 'withName' : seriesTpl + 'withoutName'); | 
						|
        seriesLabel = replace(seriesLabel, { | 
						|
          seriesId: seriesModel.seriesIndex, | 
						|
          seriesName: seriesModel.get('name'), | 
						|
          seriesType: getSeriesTypeName(seriesModel.subType) | 
						|
        }); | 
						|
        var data = seriesModel.getData(); | 
						|
        window.data = data; | 
						|
 | 
						|
        if (data.count() > maxDataCnt) { | 
						|
          // Show part of data | 
						|
          seriesLabel += replace(getConfig('data.partialData'), { | 
						|
            displayCnt: maxDataCnt | 
						|
          }); | 
						|
        } else { | 
						|
          seriesLabel += getConfig('data.allData'); | 
						|
        } | 
						|
 | 
						|
        var dataLabels = []; | 
						|
 | 
						|
        for (var i = 0; i < data.count(); i++) { | 
						|
          if (i < maxDataCnt) { | 
						|
            var name = data.getName(i); | 
						|
            var value = retrieveRawValue(data, i); | 
						|
            dataLabels.push(replace(name ? getConfig('data.withName') : getConfig('data.withoutName'), { | 
						|
              name: name, | 
						|
              value: value | 
						|
            })); | 
						|
          } | 
						|
        } | 
						|
 | 
						|
        seriesLabel += dataLabels.join(getConfig('data.separator.middle')) + getConfig('data.separator.end'); | 
						|
        seriesLabels.push(seriesLabel); | 
						|
      } | 
						|
    }); | 
						|
    ariaLabel += seriesLabels.join(getConfig('series.multiple.separator.middle')) + getConfig('series.multiple.separator.end'); | 
						|
    dom.setAttribute('aria-label', ariaLabel); | 
						|
  } | 
						|
 | 
						|
  function replace(str, keyValues) { | 
						|
    if (typeof str !== 'string') { | 
						|
      return str; | 
						|
    } | 
						|
 | 
						|
    var result = str; | 
						|
    zrUtil.each(keyValues, function (value, key) { | 
						|
      result = result.replace(new RegExp('\\{\\s*' + key + '\\s*\\}', 'g'), value); | 
						|
    }); | 
						|
    return result; | 
						|
  } | 
						|
 | 
						|
  function getConfig(path) { | 
						|
    var userConfig = ariaModel.get(path); | 
						|
 | 
						|
    if (userConfig == null) { | 
						|
      var pathArr = path.split('.'); | 
						|
      var result = lang.aria; | 
						|
 | 
						|
      for (var i = 0; i < pathArr.length; ++i) { | 
						|
        result = result[pathArr[i]]; | 
						|
      } | 
						|
 | 
						|
      return result; | 
						|
    } else { | 
						|
      return userConfig; | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  function getTitle() { | 
						|
    var title = ecModel.getModel('title').option; | 
						|
 | 
						|
    if (title && title.length) { | 
						|
      title = title[0]; | 
						|
    } | 
						|
 | 
						|
    return title && title.text; | 
						|
  } | 
						|
 | 
						|
  function getSeriesTypeName(type) { | 
						|
    return lang.series.typeNames[type] || '自定义图'; | 
						|
  } | 
						|
} | 
						|
 | 
						|
module.exports = _default; |