| 
/* 
 | 
* 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"; 
 | 
import * as zrUtil from 'zrender/lib/core/util.js'; 
 | 
import Model from '../../model/Model.js'; 
 | 
import { isNameSpecified } from '../../util/model.js'; 
 | 
import ComponentModel from '../../model/Component.js'; 
 | 
var getDefaultSelectorOptions = function (ecModel, type) { 
 | 
  if (type === 'all') { 
 | 
    return { 
 | 
      type: 'all', 
 | 
      title: ecModel.getLocaleModel().get(['legend', 'selector', 'all']) 
 | 
    }; 
 | 
  } else if (type === 'inverse') { 
 | 
    return { 
 | 
      type: 'inverse', 
 | 
      title: ecModel.getLocaleModel().get(['legend', 'selector', 'inverse']) 
 | 
    }; 
 | 
  } 
 | 
}; 
 | 
var LegendModel = /** @class */function (_super) { 
 | 
  __extends(LegendModel, _super); 
 | 
  function LegendModel() { 
 | 
    var _this = _super !== null && _super.apply(this, arguments) || this; 
 | 
    _this.type = LegendModel.type; 
 | 
    _this.layoutMode = { 
 | 
      type: 'box', 
 | 
      // legend.width/height are maxWidth/maxHeight actually, 
 | 
      // whereas real width/height is calculated by its content. 
 | 
      // (Setting {left: 10, right: 10} does not make sense). 
 | 
      // So consider the case: 
 | 
      // `setOption({legend: {left: 10});` 
 | 
      // then `setOption({legend: {right: 10});` 
 | 
      // The previous `left` should be cleared by setting `ignoreSize`. 
 | 
      ignoreSize: true 
 | 
    }; 
 | 
    return _this; 
 | 
  } 
 | 
  LegendModel.prototype.init = function (option, parentModel, ecModel) { 
 | 
    this.mergeDefaultAndTheme(option, ecModel); 
 | 
    option.selected = option.selected || {}; 
 | 
    this._updateSelector(option); 
 | 
  }; 
 | 
  LegendModel.prototype.mergeOption = function (option, ecModel) { 
 | 
    _super.prototype.mergeOption.call(this, option, ecModel); 
 | 
    this._updateSelector(option); 
 | 
  }; 
 | 
  LegendModel.prototype._updateSelector = function (option) { 
 | 
    var selector = option.selector; 
 | 
    var ecModel = this.ecModel; 
 | 
    if (selector === true) { 
 | 
      selector = option.selector = ['all', 'inverse']; 
 | 
    } 
 | 
    if (zrUtil.isArray(selector)) { 
 | 
      zrUtil.each(selector, function (item, index) { 
 | 
        zrUtil.isString(item) && (item = { 
 | 
          type: item 
 | 
        }); 
 | 
        selector[index] = zrUtil.merge(item, getDefaultSelectorOptions(ecModel, item.type)); 
 | 
      }); 
 | 
    } 
 | 
  }; 
 | 
  LegendModel.prototype.optionUpdated = function () { 
 | 
    this._updateData(this.ecModel); 
 | 
    var legendData = this._data; 
 | 
    // If selectedMode is single, try to select one 
 | 
    if (legendData[0] && this.get('selectedMode') === 'single') { 
 | 
      var hasSelected = false; 
 | 
      // If has any selected in option.selected 
 | 
      for (var i = 0; i < legendData.length; i++) { 
 | 
        var name_1 = legendData[i].get('name'); 
 | 
        if (this.isSelected(name_1)) { 
 | 
          // Force to unselect others 
 | 
          this.select(name_1); 
 | 
          hasSelected = true; 
 | 
          break; 
 | 
        } 
 | 
      } 
 | 
      // Try select the first if selectedMode is single 
 | 
      !hasSelected && this.select(legendData[0].get('name')); 
 | 
    } 
 | 
  }; 
 | 
  LegendModel.prototype._updateData = function (ecModel) { 
 | 
    var potentialData = []; 
 | 
    var availableNames = []; 
 | 
    ecModel.eachRawSeries(function (seriesModel) { 
 | 
      var seriesName = seriesModel.name; 
 | 
      availableNames.push(seriesName); 
 | 
      var isPotential; 
 | 
      if (seriesModel.legendVisualProvider) { 
 | 
        var provider = seriesModel.legendVisualProvider; 
 | 
        var names = provider.getAllNames(); 
 | 
        if (!ecModel.isSeriesFiltered(seriesModel)) { 
 | 
          availableNames = availableNames.concat(names); 
 | 
        } 
 | 
        if (names.length) { 
 | 
          potentialData = potentialData.concat(names); 
 | 
        } else { 
 | 
          isPotential = true; 
 | 
        } 
 | 
      } else { 
 | 
        isPotential = true; 
 | 
      } 
 | 
      if (isPotential && isNameSpecified(seriesModel)) { 
 | 
        potentialData.push(seriesModel.name); 
 | 
      } 
 | 
    }); 
 | 
    /** 
 | 
     * @type {Array.<string>} 
 | 
     * @private 
 | 
     */ 
 | 
    this._availableNames = availableNames; 
 | 
    // If legend.data is not specified in option, use availableNames as data, 
 | 
    // which is convenient for user preparing option. 
 | 
    var rawData = this.get('data') || potentialData; 
 | 
    var legendNameMap = zrUtil.createHashMap(); 
 | 
    var legendData = zrUtil.map(rawData, function (dataItem) { 
 | 
      // Can be string or number 
 | 
      if (zrUtil.isString(dataItem) || zrUtil.isNumber(dataItem)) { 
 | 
        dataItem = { 
 | 
          name: dataItem 
 | 
        }; 
 | 
      } 
 | 
      if (legendNameMap.get(dataItem.name)) { 
 | 
        // remove legend name duplicate 
 | 
        return null; 
 | 
      } 
 | 
      legendNameMap.set(dataItem.name, true); 
 | 
      return new Model(dataItem, this, this.ecModel); 
 | 
    }, this); 
 | 
    /** 
 | 
     * @type {Array.<module:echarts/model/Model>} 
 | 
     * @private 
 | 
     */ 
 | 
    this._data = zrUtil.filter(legendData, function (item) { 
 | 
      return !!item; 
 | 
    }); 
 | 
  }; 
 | 
  LegendModel.prototype.getData = function () { 
 | 
    return this._data; 
 | 
  }; 
 | 
  LegendModel.prototype.select = function (name) { 
 | 
    var selected = this.option.selected; 
 | 
    var selectedMode = this.get('selectedMode'); 
 | 
    if (selectedMode === 'single') { 
 | 
      var data = this._data; 
 | 
      zrUtil.each(data, function (dataItem) { 
 | 
        selected[dataItem.get('name')] = false; 
 | 
      }); 
 | 
    } 
 | 
    selected[name] = true; 
 | 
  }; 
 | 
  LegendModel.prototype.unSelect = function (name) { 
 | 
    if (this.get('selectedMode') !== 'single') { 
 | 
      this.option.selected[name] = false; 
 | 
    } 
 | 
  }; 
 | 
  LegendModel.prototype.toggleSelected = function (name) { 
 | 
    var selected = this.option.selected; 
 | 
    // Default is true 
 | 
    if (!selected.hasOwnProperty(name)) { 
 | 
      selected[name] = true; 
 | 
    } 
 | 
    this[selected[name] ? 'unSelect' : 'select'](name); 
 | 
  }; 
 | 
  LegendModel.prototype.allSelect = function () { 
 | 
    var data = this._data; 
 | 
    var selected = this.option.selected; 
 | 
    zrUtil.each(data, function (dataItem) { 
 | 
      selected[dataItem.get('name', true)] = true; 
 | 
    }); 
 | 
  }; 
 | 
  LegendModel.prototype.inverseSelect = function () { 
 | 
    var data = this._data; 
 | 
    var selected = this.option.selected; 
 | 
    zrUtil.each(data, function (dataItem) { 
 | 
      var name = dataItem.get('name', true); 
 | 
      // Initially, default value is true 
 | 
      if (!selected.hasOwnProperty(name)) { 
 | 
        selected[name] = true; 
 | 
      } 
 | 
      selected[name] = !selected[name]; 
 | 
    }); 
 | 
  }; 
 | 
  LegendModel.prototype.isSelected = function (name) { 
 | 
    var selected = this.option.selected; 
 | 
    return !(selected.hasOwnProperty(name) && !selected[name]) && zrUtil.indexOf(this._availableNames, name) >= 0; 
 | 
  }; 
 | 
  LegendModel.prototype.getOrient = function () { 
 | 
    return this.get('orient') === 'vertical' ? { 
 | 
      index: 1, 
 | 
      name: 'vertical' 
 | 
    } : { 
 | 
      index: 0, 
 | 
      name: 'horizontal' 
 | 
    }; 
 | 
  }; 
 | 
  LegendModel.type = 'legend.plain'; 
 | 
  LegendModel.dependencies = ['series']; 
 | 
  LegendModel.defaultOption = { 
 | 
    // zlevel: 0, 
 | 
    z: 4, 
 | 
    show: true, 
 | 
    orient: 'horizontal', 
 | 
    left: 'center', 
 | 
    // right: 'center', 
 | 
    top: 0, 
 | 
    // bottom: null, 
 | 
    align: 'auto', 
 | 
    backgroundColor: 'rgba(0,0,0,0)', 
 | 
    borderColor: '#ccc', 
 | 
    borderRadius: 0, 
 | 
    borderWidth: 0, 
 | 
    padding: 5, 
 | 
    itemGap: 10, 
 | 
    itemWidth: 25, 
 | 
    itemHeight: 14, 
 | 
    symbolRotate: 'inherit', 
 | 
    symbolKeepAspect: true, 
 | 
    inactiveColor: '#ccc', 
 | 
    inactiveBorderColor: '#ccc', 
 | 
    inactiveBorderWidth: 'auto', 
 | 
    itemStyle: { 
 | 
      color: 'inherit', 
 | 
      opacity: 'inherit', 
 | 
      borderColor: 'inherit', 
 | 
      borderWidth: 'auto', 
 | 
      borderCap: 'inherit', 
 | 
      borderJoin: 'inherit', 
 | 
      borderDashOffset: 'inherit', 
 | 
      borderMiterLimit: 'inherit' 
 | 
    }, 
 | 
    lineStyle: { 
 | 
      width: 'auto', 
 | 
      color: 'inherit', 
 | 
      inactiveColor: '#ccc', 
 | 
      inactiveWidth: 2, 
 | 
      opacity: 'inherit', 
 | 
      type: 'inherit', 
 | 
      cap: 'inherit', 
 | 
      join: 'inherit', 
 | 
      dashOffset: 'inherit', 
 | 
      miterLimit: 'inherit' 
 | 
    }, 
 | 
    textStyle: { 
 | 
      color: '#333' 
 | 
    }, 
 | 
    selectedMode: true, 
 | 
    selector: false, 
 | 
    selectorLabel: { 
 | 
      show: true, 
 | 
      borderRadius: 10, 
 | 
      padding: [3, 5, 3, 5], 
 | 
      fontSize: 12, 
 | 
      fontFamily: 'sans-serif', 
 | 
      color: '#666', 
 | 
      borderWidth: 1, 
 | 
      borderColor: '#666' 
 | 
    }, 
 | 
    emphasis: { 
 | 
      selectorLabel: { 
 | 
        show: true, 
 | 
        color: '#eee', 
 | 
        backgroundColor: '#666' 
 | 
      } 
 | 
    }, 
 | 
    selectorPosition: 'auto', 
 | 
    selectorItemGap: 7, 
 | 
    selectorButtonGap: 10, 
 | 
    tooltip: { 
 | 
      show: false 
 | 
    } 
 | 
  }; 
 | 
  return LegendModel; 
 | 
}(ComponentModel); 
 | 
export default LegendModel; 
 |