| 
/* 
 | 
* 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 VisualMapping from '../../visual/VisualMapping.js'; 
 | 
import { each, extend, isArray } from 'zrender/lib/core/util.js'; 
 | 
import { modifyHSL, modifyAlpha } from 'zrender/lib/tool/color.js'; 
 | 
import { makeInner } from '../../util/model.js'; 
 | 
var ITEM_STYLE_NORMAL = 'itemStyle'; 
 | 
var inner = makeInner(); 
 | 
export default { 
 | 
  seriesType: 'treemap', 
 | 
  reset: function (seriesModel) { 
 | 
    var tree = seriesModel.getData().tree; 
 | 
    var root = tree.root; 
 | 
    if (root.isRemoved()) { 
 | 
      return; 
 | 
    } 
 | 
    travelTree(root, 
 | 
    // Visual should calculate from tree root but not view root. 
 | 
    {}, seriesModel.getViewRoot().getAncestors(), seriesModel); 
 | 
  } 
 | 
}; 
 | 
function travelTree(node, designatedVisual, viewRootAncestors, seriesModel) { 
 | 
  var nodeModel = node.getModel(); 
 | 
  var nodeLayout = node.getLayout(); 
 | 
  var data = node.hostTree.data; 
 | 
  // Optimize 
 | 
  if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) { 
 | 
    return; 
 | 
  } 
 | 
  var nodeItemStyleModel = nodeModel.getModel(ITEM_STYLE_NORMAL); 
 | 
  var visuals = buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel); 
 | 
  var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, 'style'); 
 | 
  // calculate border color 
 | 
  var borderColor = nodeItemStyleModel.get('borderColor'); 
 | 
  var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation'); 
 | 
  var thisNodeColor; 
 | 
  if (borderColorSaturation != null) { 
 | 
    // For performance, do not always execute 'calculateColor'. 
 | 
    thisNodeColor = calculateColor(visuals); 
 | 
    borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor); 
 | 
  } 
 | 
  existsStyle.stroke = borderColor; 
 | 
  var viewChildren = node.viewChildren; 
 | 
  if (!viewChildren || !viewChildren.length) { 
 | 
    thisNodeColor = calculateColor(visuals); 
 | 
    // Apply visual to this node. 
 | 
    existsStyle.fill = thisNodeColor; 
 | 
  } else { 
 | 
    var mapping_1 = buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren); 
 | 
    // Designate visual to children. 
 | 
    each(viewChildren, function (child, index) { 
 | 
      // If higher than viewRoot, only ancestors of viewRoot is needed to visit. 
 | 
      if (child.depth >= viewRootAncestors.length || child === viewRootAncestors[child.depth]) { 
 | 
        var childVisual = mapVisual(nodeModel, visuals, child, index, mapping_1, seriesModel); 
 | 
        travelTree(child, childVisual, viewRootAncestors, seriesModel); 
 | 
      } 
 | 
    }); 
 | 
  } 
 | 
} 
 | 
function buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel) { 
 | 
  var visuals = extend({}, designatedVisual); 
 | 
  var designatedVisualItemStyle = seriesModel.designatedVisualItemStyle; 
 | 
  each(['color', 'colorAlpha', 'colorSaturation'], function (visualName) { 
 | 
    // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel 
 | 
    designatedVisualItemStyle[visualName] = designatedVisual[visualName]; 
 | 
    var val = nodeItemStyleModel.get(visualName); 
 | 
    designatedVisualItemStyle[visualName] = null; 
 | 
    val != null && (visuals[visualName] = val); 
 | 
  }); 
 | 
  return visuals; 
 | 
} 
 | 
function calculateColor(visuals) { 
 | 
  var color = getValueVisualDefine(visuals, 'color'); 
 | 
  if (color) { 
 | 
    var colorAlpha = getValueVisualDefine(visuals, 'colorAlpha'); 
 | 
    var colorSaturation = getValueVisualDefine(visuals, 'colorSaturation'); 
 | 
    if (colorSaturation) { 
 | 
      color = modifyHSL(color, null, null, colorSaturation); 
 | 
    } 
 | 
    if (colorAlpha) { 
 | 
      color = modifyAlpha(color, colorAlpha); 
 | 
    } 
 | 
    return color; 
 | 
  } 
 | 
} 
 | 
function calculateBorderColor(borderColorSaturation, thisNodeColor) { 
 | 
  return thisNodeColor != null 
 | 
  // Can only be string 
 | 
  ? modifyHSL(thisNodeColor, null, null, borderColorSaturation) : null; 
 | 
} 
 | 
function getValueVisualDefine(visuals, name) { 
 | 
  var value = visuals[name]; 
 | 
  if (value != null && value !== 'none') { 
 | 
    return value; 
 | 
  } 
 | 
} 
 | 
function buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren) { 
 | 
  if (!viewChildren || !viewChildren.length) { 
 | 
    return; 
 | 
  } 
 | 
  var rangeVisual = getRangeVisual(nodeModel, 'color') || visuals.color != null && visuals.color !== 'none' && (getRangeVisual(nodeModel, 'colorAlpha') || getRangeVisual(nodeModel, 'colorSaturation')); 
 | 
  if (!rangeVisual) { 
 | 
    return; 
 | 
  } 
 | 
  var visualMin = nodeModel.get('visualMin'); 
 | 
  var visualMax = nodeModel.get('visualMax'); 
 | 
  var dataExtent = nodeLayout.dataExtent.slice(); 
 | 
  visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin); 
 | 
  visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax); 
 | 
  var colorMappingBy = nodeModel.get('colorMappingBy'); 
 | 
  var opt = { 
 | 
    type: rangeVisual.name, 
 | 
    dataExtent: dataExtent, 
 | 
    visual: rangeVisual.range 
 | 
  }; 
 | 
  if (opt.type === 'color' && (colorMappingBy === 'index' || colorMappingBy === 'id')) { 
 | 
    opt.mappingMethod = 'category'; 
 | 
    opt.loop = true; 
 | 
    // categories is ordinal, so do not set opt.categories. 
 | 
  } else { 
 | 
    opt.mappingMethod = 'linear'; 
 | 
  } 
 | 
  var mapping = new VisualMapping(opt); 
 | 
  inner(mapping).drColorMappingBy = colorMappingBy; 
 | 
  return mapping; 
 | 
} 
 | 
// Notice: If we don't have the attribute 'colorRange', but only use 
 | 
// attribute 'color' to represent both concepts of 'colorRange' and 'color', 
 | 
// (It means 'colorRange' when 'color' is Array, means 'color' when not array), 
 | 
// this problem will be encountered: 
 | 
// If a level-1 node doesn't have children, and its siblings have children, 
 | 
// and colorRange is set on level-1, then the node cannot be colored. 
 | 
// So we separate 'colorRange' and 'color' to different attributes. 
 | 
function getRangeVisual(nodeModel, name) { 
 | 
  // 'colorRange', 'colorARange', 'colorSRange'. 
 | 
  // If not exists on this node, fetch from levels and series. 
 | 
  var range = nodeModel.get(name); 
 | 
  return isArray(range) && range.length ? { 
 | 
    name: name, 
 | 
    range: range 
 | 
  } : null; 
 | 
} 
 | 
function mapVisual(nodeModel, visuals, child, index, mapping, seriesModel) { 
 | 
  var childVisuals = extend({}, visuals); 
 | 
  if (mapping) { 
 | 
    // Only support color, colorAlpha, colorSaturation. 
 | 
    var mappingType = mapping.type; 
 | 
    var colorMappingBy = mappingType === 'color' && inner(mapping).drColorMappingBy; 
 | 
    var value = colorMappingBy === 'index' ? index : colorMappingBy === 'id' ? seriesModel.mapIdToIndex(child.getId()) : child.getValue(nodeModel.get('visualDimension')); 
 | 
    childVisuals[mappingType] = mapping.mapValueToVisual(value); 
 | 
  } 
 | 
  return childVisuals; 
 | 
} 
 |