| 
/* 
 | 
* 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 { isFunction, extend, createHashMap } from 'zrender/lib/core/util.js'; 
 | 
import makeStyleMapper from '../model/mixin/makeStyleMapper.js'; 
 | 
import { ITEM_STYLE_KEY_MAP } from '../model/mixin/itemStyle.js'; 
 | 
import { LINE_STYLE_KEY_MAP } from '../model/mixin/lineStyle.js'; 
 | 
import Model from '../model/Model.js'; 
 | 
import { makeInner } from '../util/model.js'; 
 | 
var inner = makeInner(); 
 | 
var defaultStyleMappers = { 
 | 
  itemStyle: makeStyleMapper(ITEM_STYLE_KEY_MAP, true), 
 | 
  lineStyle: makeStyleMapper(LINE_STYLE_KEY_MAP, true) 
 | 
}; 
 | 
var defaultColorKey = { 
 | 
  lineStyle: 'stroke', 
 | 
  itemStyle: 'fill' 
 | 
}; 
 | 
function getStyleMapper(seriesModel, stylePath) { 
 | 
  var styleMapper = seriesModel.visualStyleMapper || defaultStyleMappers[stylePath]; 
 | 
  if (!styleMapper) { 
 | 
    console.warn("Unknown style type '" + stylePath + "'."); 
 | 
    return defaultStyleMappers.itemStyle; 
 | 
  } 
 | 
  return styleMapper; 
 | 
} 
 | 
function getDefaultColorKey(seriesModel, stylePath) { 
 | 
  // return defaultColorKey[stylePath] || 
 | 
  var colorKey = seriesModel.visualDrawType || defaultColorKey[stylePath]; 
 | 
  if (!colorKey) { 
 | 
    console.warn("Unknown style type '" + stylePath + "'."); 
 | 
    return 'fill'; 
 | 
  } 
 | 
  return colorKey; 
 | 
} 
 | 
var seriesStyleTask = { 
 | 
  createOnAllSeries: true, 
 | 
  performRawSeries: true, 
 | 
  reset: function (seriesModel, ecModel) { 
 | 
    var data = seriesModel.getData(); 
 | 
    var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; 
 | 
    // Set in itemStyle 
 | 
    var styleModel = seriesModel.getModel(stylePath); 
 | 
    var getStyle = getStyleMapper(seriesModel, stylePath); 
 | 
    var globalStyle = getStyle(styleModel); 
 | 
    var decalOption = styleModel.getShallow('decal'); 
 | 
    if (decalOption) { 
 | 
      data.setVisual('decal', decalOption); 
 | 
      decalOption.dirty = true; 
 | 
    } 
 | 
    // TODO 
 | 
    var colorKey = getDefaultColorKey(seriesModel, stylePath); 
 | 
    var color = globalStyle[colorKey]; 
 | 
    // TODO style callback 
 | 
    var colorCallback = isFunction(color) ? color : null; 
 | 
    var hasAutoColor = globalStyle.fill === 'auto' || globalStyle.stroke === 'auto'; 
 | 
    // Get from color palette by default. 
 | 
    if (!globalStyle[colorKey] || colorCallback || hasAutoColor) { 
 | 
      // Note: If some series has color specified (e.g., by itemStyle.color), we DO NOT 
 | 
      // make it effect palette. Because some scenarios users need to make some series 
 | 
      // transparent or as background, which should better not effect the palette. 
 | 
      var colorPalette = seriesModel.getColorFromPalette( 
 | 
      // TODO series count changed. 
 | 
      seriesModel.name, null, ecModel.getSeriesCount()); 
 | 
      if (!globalStyle[colorKey]) { 
 | 
        globalStyle[colorKey] = colorPalette; 
 | 
        data.setVisual('colorFromPalette', true); 
 | 
      } 
 | 
      globalStyle.fill = globalStyle.fill === 'auto' || isFunction(globalStyle.fill) ? colorPalette : globalStyle.fill; 
 | 
      globalStyle.stroke = globalStyle.stroke === 'auto' || isFunction(globalStyle.stroke) ? colorPalette : globalStyle.stroke; 
 | 
    } 
 | 
    data.setVisual('style', globalStyle); 
 | 
    data.setVisual('drawType', colorKey); 
 | 
    // Only visible series has each data be visual encoded 
 | 
    if (!ecModel.isSeriesFiltered(seriesModel) && colorCallback) { 
 | 
      data.setVisual('colorFromPalette', false); 
 | 
      return { 
 | 
        dataEach: function (data, idx) { 
 | 
          var dataParams = seriesModel.getDataParams(idx); 
 | 
          var itemStyle = extend({}, globalStyle); 
 | 
          itemStyle[colorKey] = colorCallback(dataParams); 
 | 
          data.setItemVisual(idx, 'style', itemStyle); 
 | 
        } 
 | 
      }; 
 | 
    } 
 | 
  } 
 | 
}; 
 | 
var sharedModel = new Model(); 
 | 
var dataStyleTask = { 
 | 
  createOnAllSeries: true, 
 | 
  performRawSeries: true, 
 | 
  reset: function (seriesModel, ecModel) { 
 | 
    if (seriesModel.ignoreStyleOnData || ecModel.isSeriesFiltered(seriesModel)) { 
 | 
      return; 
 | 
    } 
 | 
    var data = seriesModel.getData(); 
 | 
    var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; 
 | 
    // Set in itemStyle 
 | 
    var getStyle = getStyleMapper(seriesModel, stylePath); 
 | 
    var colorKey = data.getVisual('drawType'); 
 | 
    return { 
 | 
      dataEach: data.hasItemOption ? function (data, idx) { 
 | 
        // Not use getItemModel for performance considuration 
 | 
        var rawItem = data.getRawDataItem(idx); 
 | 
        if (rawItem && rawItem[stylePath]) { 
 | 
          sharedModel.option = rawItem[stylePath]; 
 | 
          var style = getStyle(sharedModel); 
 | 
          var existsStyle = data.ensureUniqueItemVisual(idx, 'style'); 
 | 
          extend(existsStyle, style); 
 | 
          if (sharedModel.option.decal) { 
 | 
            data.setItemVisual(idx, 'decal', sharedModel.option.decal); 
 | 
            sharedModel.option.decal.dirty = true; 
 | 
          } 
 | 
          if (colorKey in style) { 
 | 
            data.setItemVisual(idx, 'colorFromPalette', false); 
 | 
          } 
 | 
        } 
 | 
      } : null 
 | 
    }; 
 | 
  } 
 | 
}; 
 | 
// Pick color from palette for the data which has not been set with color yet. 
 | 
// Note: do not support stream rendering. No such cases yet. 
 | 
var dataColorPaletteTask = { 
 | 
  performRawSeries: true, 
 | 
  overallReset: function (ecModel) { 
 | 
    // Each type of series uses one scope. 
 | 
    // Pie and funnel are using different scopes. 
 | 
    var paletteScopeGroupByType = createHashMap(); 
 | 
    ecModel.eachSeries(function (seriesModel) { 
 | 
      var colorBy = seriesModel.getColorBy(); 
 | 
      if (seriesModel.isColorBySeries()) { 
 | 
        return; 
 | 
      } 
 | 
      var key = seriesModel.type + '-' + colorBy; 
 | 
      var colorScope = paletteScopeGroupByType.get(key); 
 | 
      if (!colorScope) { 
 | 
        colorScope = {}; 
 | 
        paletteScopeGroupByType.set(key, colorScope); 
 | 
      } 
 | 
      inner(seriesModel).scope = colorScope; 
 | 
    }); 
 | 
    ecModel.eachSeries(function (seriesModel) { 
 | 
      if (seriesModel.isColorBySeries() || ecModel.isSeriesFiltered(seriesModel)) { 
 | 
        return; 
 | 
      } 
 | 
      var dataAll = seriesModel.getRawData(); 
 | 
      var idxMap = {}; 
 | 
      var data = seriesModel.getData(); 
 | 
      var colorScope = inner(seriesModel).scope; 
 | 
      var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; 
 | 
      var colorKey = getDefaultColorKey(seriesModel, stylePath); 
 | 
      data.each(function (idx) { 
 | 
        var rawIdx = data.getRawIndex(idx); 
 | 
        idxMap[rawIdx] = idx; 
 | 
      }); 
 | 
      // Iterate on data before filtered. To make sure color from palette can be 
 | 
      // Consistent when toggling legend. 
 | 
      dataAll.each(function (rawIdx) { 
 | 
        var idx = idxMap[rawIdx]; 
 | 
        var fromPalette = data.getItemVisual(idx, 'colorFromPalette'); 
 | 
        // Get color from palette for each data only when the color is inherited from series color, which is 
 | 
        // also picked from color palette. So following situation is not in the case: 
 | 
        // 1. series.itemStyle.color is set 
 | 
        // 2. color is encoded by visualMap 
 | 
        if (fromPalette) { 
 | 
          var itemStyle = data.ensureUniqueItemVisual(idx, 'style'); 
 | 
          var name_1 = dataAll.getName(rawIdx) || rawIdx + ''; 
 | 
          var dataCount = dataAll.count(); 
 | 
          itemStyle[colorKey] = seriesModel.getColorFromPalette(name_1, colorScope, dataCount); 
 | 
        } 
 | 
      }); 
 | 
    }); 
 | 
  } 
 | 
}; 
 | 
export { seriesStyleTask, dataStyleTask, dataColorPaletteTask }; 
 |