| 
/* 
 | 
* 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 PointerPath from './PointerPath.js'; 
 | 
import * as graphic from '../../util/graphic.js'; 
 | 
import { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js'; 
 | 
import { createTextStyle, setLabelValueAnimation, animateLabelValue } from '../../label/labelStyle.js'; 
 | 
import ChartView from '../../view/Chart.js'; 
 | 
import { parsePercent, round, linearMap } from '../../util/number.js'; 
 | 
import Sausage from '../../util/shape/sausage.js'; 
 | 
import { createSymbol } from '../../util/symbol.js'; 
 | 
import ZRImage from 'zrender/lib/graphic/Image.js'; 
 | 
import { extend, isFunction, isString, isNumber, each } from 'zrender/lib/core/util.js'; 
 | 
import { setCommonECData } from '../../util/innerStore.js'; 
 | 
import { normalizeArcAngles } from 'zrender/lib/core/PathProxy.js'; 
 | 
function parsePosition(seriesModel, api) { 
 | 
  var center = seriesModel.get('center'); 
 | 
  var width = api.getWidth(); 
 | 
  var height = api.getHeight(); 
 | 
  var size = Math.min(width, height); 
 | 
  var cx = parsePercent(center[0], api.getWidth()); 
 | 
  var cy = parsePercent(center[1], api.getHeight()); 
 | 
  var r = parsePercent(seriesModel.get('radius'), size / 2); 
 | 
  return { 
 | 
    cx: cx, 
 | 
    cy: cy, 
 | 
    r: r 
 | 
  }; 
 | 
} 
 | 
function formatLabel(value, labelFormatter) { 
 | 
  var label = value == null ? '' : value + ''; 
 | 
  if (labelFormatter) { 
 | 
    if (isString(labelFormatter)) { 
 | 
      label = labelFormatter.replace('{value}', label); 
 | 
    } else if (isFunction(labelFormatter)) { 
 | 
      label = labelFormatter(value); 
 | 
    } 
 | 
  } 
 | 
  return label; 
 | 
} 
 | 
var GaugeView = /** @class */function (_super) { 
 | 
  __extends(GaugeView, _super); 
 | 
  function GaugeView() { 
 | 
    var _this = _super !== null && _super.apply(this, arguments) || this; 
 | 
    _this.type = GaugeView.type; 
 | 
    return _this; 
 | 
  } 
 | 
  GaugeView.prototype.render = function (seriesModel, ecModel, api) { 
 | 
    this.group.removeAll(); 
 | 
    var colorList = seriesModel.get(['axisLine', 'lineStyle', 'color']); 
 | 
    var posInfo = parsePosition(seriesModel, api); 
 | 
    this._renderMain(seriesModel, ecModel, api, colorList, posInfo); 
 | 
    this._data = seriesModel.getData(); 
 | 
  }; 
 | 
  GaugeView.prototype.dispose = function () {}; 
 | 
  GaugeView.prototype._renderMain = function (seriesModel, ecModel, api, colorList, posInfo) { 
 | 
    var group = this.group; 
 | 
    var clockwise = seriesModel.get('clockwise'); 
 | 
    var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI; 
 | 
    var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI; 
 | 
    var axisLineModel = seriesModel.getModel('axisLine'); 
 | 
    var roundCap = axisLineModel.get('roundCap'); 
 | 
    var MainPath = roundCap ? Sausage : graphic.Sector; 
 | 
    var showAxis = axisLineModel.get('show'); 
 | 
    var lineStyleModel = axisLineModel.getModel('lineStyle'); 
 | 
    var axisLineWidth = lineStyleModel.get('width'); 
 | 
    var angles = [startAngle, endAngle]; 
 | 
    normalizeArcAngles(angles, !clockwise); 
 | 
    startAngle = angles[0]; 
 | 
    endAngle = angles[1]; 
 | 
    var angleRangeSpan = endAngle - startAngle; 
 | 
    var prevEndAngle = startAngle; 
 | 
    var sectors = []; 
 | 
    for (var i = 0; showAxis && i < colorList.length; i++) { 
 | 
      // Clamp 
 | 
      var percent = Math.min(Math.max(colorList[i][0], 0), 1); 
 | 
      endAngle = startAngle + angleRangeSpan * percent; 
 | 
      var sector = new MainPath({ 
 | 
        shape: { 
 | 
          startAngle: prevEndAngle, 
 | 
          endAngle: endAngle, 
 | 
          cx: posInfo.cx, 
 | 
          cy: posInfo.cy, 
 | 
          clockwise: clockwise, 
 | 
          r0: posInfo.r - axisLineWidth, 
 | 
          r: posInfo.r 
 | 
        }, 
 | 
        silent: true 
 | 
      }); 
 | 
      sector.setStyle({ 
 | 
        fill: colorList[i][1] 
 | 
      }); 
 | 
      sector.setStyle(lineStyleModel.getLineStyle( 
 | 
      // Because we use sector to simulate arc 
 | 
      // so the properties for stroking are useless 
 | 
      ['color', 'width'])); 
 | 
      sectors.push(sector); 
 | 
      prevEndAngle = endAngle; 
 | 
    } 
 | 
    sectors.reverse(); 
 | 
    each(sectors, function (sector) { 
 | 
      return group.add(sector); 
 | 
    }); 
 | 
    var getColor = function (percent) { 
 | 
      // Less than 0 
 | 
      if (percent <= 0) { 
 | 
        return colorList[0][1]; 
 | 
      } 
 | 
      var i; 
 | 
      for (i = 0; i < colorList.length; i++) { 
 | 
        if (colorList[i][0] >= percent && (i === 0 ? 0 : colorList[i - 1][0]) < percent) { 
 | 
          return colorList[i][1]; 
 | 
        } 
 | 
      } 
 | 
      // More than 1 
 | 
      return colorList[i - 1][1]; 
 | 
    }; 
 | 
    this._renderTicks(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth); 
 | 
    this._renderTitleAndDetail(seriesModel, ecModel, api, getColor, posInfo); 
 | 
    this._renderAnchor(seriesModel, posInfo); 
 | 
    this._renderPointer(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth); 
 | 
  }; 
 | 
  GaugeView.prototype._renderTicks = function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) { 
 | 
    var group = this.group; 
 | 
    var cx = posInfo.cx; 
 | 
    var cy = posInfo.cy; 
 | 
    var r = posInfo.r; 
 | 
    var minVal = +seriesModel.get('min'); 
 | 
    var maxVal = +seriesModel.get('max'); 
 | 
    var splitLineModel = seriesModel.getModel('splitLine'); 
 | 
    var tickModel = seriesModel.getModel('axisTick'); 
 | 
    var labelModel = seriesModel.getModel('axisLabel'); 
 | 
    var splitNumber = seriesModel.get('splitNumber'); 
 | 
    var subSplitNumber = tickModel.get('splitNumber'); 
 | 
    var splitLineLen = parsePercent(splitLineModel.get('length'), r); 
 | 
    var tickLen = parsePercent(tickModel.get('length'), r); 
 | 
    var angle = startAngle; 
 | 
    var step = (endAngle - startAngle) / splitNumber; 
 | 
    var subStep = step / subSplitNumber; 
 | 
    var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle(); 
 | 
    var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle(); 
 | 
    var splitLineDistance = splitLineModel.get('distance'); 
 | 
    var unitX; 
 | 
    var unitY; 
 | 
    for (var i = 0; i <= splitNumber; i++) { 
 | 
      unitX = Math.cos(angle); 
 | 
      unitY = Math.sin(angle); 
 | 
      // Split line 
 | 
      if (splitLineModel.get('show')) { 
 | 
        var distance = splitLineDistance ? splitLineDistance + axisLineWidth : axisLineWidth; 
 | 
        var splitLine = new graphic.Line({ 
 | 
          shape: { 
 | 
            x1: unitX * (r - distance) + cx, 
 | 
            y1: unitY * (r - distance) + cy, 
 | 
            x2: unitX * (r - splitLineLen - distance) + cx, 
 | 
            y2: unitY * (r - splitLineLen - distance) + cy 
 | 
          }, 
 | 
          style: splitLineStyle, 
 | 
          silent: true 
 | 
        }); 
 | 
        if (splitLineStyle.stroke === 'auto') { 
 | 
          splitLine.setStyle({ 
 | 
            stroke: getColor(i / splitNumber) 
 | 
          }); 
 | 
        } 
 | 
        group.add(splitLine); 
 | 
      } 
 | 
      // Label 
 | 
      if (labelModel.get('show')) { 
 | 
        var distance = labelModel.get('distance') + splitLineDistance; 
 | 
        var label = formatLabel(round(i / splitNumber * (maxVal - minVal) + minVal), labelModel.get('formatter')); 
 | 
        var autoColor = getColor(i / splitNumber); 
 | 
        var textStyleX = unitX * (r - splitLineLen - distance) + cx; 
 | 
        var textStyleY = unitY * (r - splitLineLen - distance) + cy; 
 | 
        var rotateType = labelModel.get('rotate'); 
 | 
        var rotate = 0; 
 | 
        if (rotateType === 'radial') { 
 | 
          rotate = -angle + 2 * Math.PI; 
 | 
          if (rotate > Math.PI / 2) { 
 | 
            rotate += Math.PI; 
 | 
          } 
 | 
        } else if (rotateType === 'tangential') { 
 | 
          rotate = -angle - Math.PI / 2; 
 | 
        } else if (isNumber(rotateType)) { 
 | 
          rotate = rotateType * Math.PI / 180; 
 | 
        } 
 | 
        if (rotate === 0) { 
 | 
          group.add(new graphic.Text({ 
 | 
            style: createTextStyle(labelModel, { 
 | 
              text: label, 
 | 
              x: textStyleX, 
 | 
              y: textStyleY, 
 | 
              verticalAlign: unitY < -0.8 ? 'top' : unitY > 0.8 ? 'bottom' : 'middle', 
 | 
              align: unitX < -0.4 ? 'left' : unitX > 0.4 ? 'right' : 'center' 
 | 
            }, { 
 | 
              inheritColor: autoColor 
 | 
            }), 
 | 
            silent: true 
 | 
          })); 
 | 
        } else { 
 | 
          group.add(new graphic.Text({ 
 | 
            style: createTextStyle(labelModel, { 
 | 
              text: label, 
 | 
              x: textStyleX, 
 | 
              y: textStyleY, 
 | 
              verticalAlign: 'middle', 
 | 
              align: 'center' 
 | 
            }, { 
 | 
              inheritColor: autoColor 
 | 
            }), 
 | 
            silent: true, 
 | 
            originX: textStyleX, 
 | 
            originY: textStyleY, 
 | 
            rotation: rotate 
 | 
          })); 
 | 
        } 
 | 
      } 
 | 
      // Axis tick 
 | 
      if (tickModel.get('show') && i !== splitNumber) { 
 | 
        var distance = tickModel.get('distance'); 
 | 
        distance = distance ? distance + axisLineWidth : axisLineWidth; 
 | 
        for (var j = 0; j <= subSplitNumber; j++) { 
 | 
          unitX = Math.cos(angle); 
 | 
          unitY = Math.sin(angle); 
 | 
          var tickLine = new graphic.Line({ 
 | 
            shape: { 
 | 
              x1: unitX * (r - distance) + cx, 
 | 
              y1: unitY * (r - distance) + cy, 
 | 
              x2: unitX * (r - tickLen - distance) + cx, 
 | 
              y2: unitY * (r - tickLen - distance) + cy 
 | 
            }, 
 | 
            silent: true, 
 | 
            style: tickLineStyle 
 | 
          }); 
 | 
          if (tickLineStyle.stroke === 'auto') { 
 | 
            tickLine.setStyle({ 
 | 
              stroke: getColor((i + j / subSplitNumber) / splitNumber) 
 | 
            }); 
 | 
          } 
 | 
          group.add(tickLine); 
 | 
          angle += subStep; 
 | 
        } 
 | 
        angle -= subStep; 
 | 
      } else { 
 | 
        angle += step; 
 | 
      } 
 | 
    } 
 | 
  }; 
 | 
  GaugeView.prototype._renderPointer = function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) { 
 | 
    var group = this.group; 
 | 
    var oldData = this._data; 
 | 
    var oldProgressData = this._progressEls; 
 | 
    var progressList = []; 
 | 
    var showPointer = seriesModel.get(['pointer', 'show']); 
 | 
    var progressModel = seriesModel.getModel('progress'); 
 | 
    var showProgress = progressModel.get('show'); 
 | 
    var data = seriesModel.getData(); 
 | 
    var valueDim = data.mapDimension('value'); 
 | 
    var minVal = +seriesModel.get('min'); 
 | 
    var maxVal = +seriesModel.get('max'); 
 | 
    var valueExtent = [minVal, maxVal]; 
 | 
    var angleExtent = [startAngle, endAngle]; 
 | 
    function createPointer(idx, angle) { 
 | 
      var itemModel = data.getItemModel(idx); 
 | 
      var pointerModel = itemModel.getModel('pointer'); 
 | 
      var pointerWidth = parsePercent(pointerModel.get('width'), posInfo.r); 
 | 
      var pointerLength = parsePercent(pointerModel.get('length'), posInfo.r); 
 | 
      var pointerStr = seriesModel.get(['pointer', 'icon']); 
 | 
      var pointerOffset = pointerModel.get('offsetCenter'); 
 | 
      var pointerOffsetX = parsePercent(pointerOffset[0], posInfo.r); 
 | 
      var pointerOffsetY = parsePercent(pointerOffset[1], posInfo.r); 
 | 
      var pointerKeepAspect = pointerModel.get('keepAspect'); 
 | 
      var pointer; 
 | 
      // not exist icon type will be set 'rect' 
 | 
      if (pointerStr) { 
 | 
        pointer = createSymbol(pointerStr, pointerOffsetX - pointerWidth / 2, pointerOffsetY - pointerLength, pointerWidth, pointerLength, null, pointerKeepAspect); 
 | 
      } else { 
 | 
        pointer = new PointerPath({ 
 | 
          shape: { 
 | 
            angle: -Math.PI / 2, 
 | 
            width: pointerWidth, 
 | 
            r: pointerLength, 
 | 
            x: pointerOffsetX, 
 | 
            y: pointerOffsetY 
 | 
          } 
 | 
        }); 
 | 
      } 
 | 
      pointer.rotation = -(angle + Math.PI / 2); 
 | 
      pointer.x = posInfo.cx; 
 | 
      pointer.y = posInfo.cy; 
 | 
      return pointer; 
 | 
    } 
 | 
    function createProgress(idx, endAngle) { 
 | 
      var roundCap = progressModel.get('roundCap'); 
 | 
      var ProgressPath = roundCap ? Sausage : graphic.Sector; 
 | 
      var isOverlap = progressModel.get('overlap'); 
 | 
      var progressWidth = isOverlap ? progressModel.get('width') : axisLineWidth / data.count(); 
 | 
      var r0 = isOverlap ? posInfo.r - progressWidth : posInfo.r - (idx + 1) * progressWidth; 
 | 
      var r = isOverlap ? posInfo.r : posInfo.r - idx * progressWidth; 
 | 
      var progress = new ProgressPath({ 
 | 
        shape: { 
 | 
          startAngle: startAngle, 
 | 
          endAngle: endAngle, 
 | 
          cx: posInfo.cx, 
 | 
          cy: posInfo.cy, 
 | 
          clockwise: clockwise, 
 | 
          r0: r0, 
 | 
          r: r 
 | 
        } 
 | 
      }); 
 | 
      isOverlap && (progress.z2 = linearMap(data.get(valueDim, idx), [minVal, maxVal], [100, 0], true)); 
 | 
      return progress; 
 | 
    } 
 | 
    if (showProgress || showPointer) { 
 | 
      data.diff(oldData).add(function (idx) { 
 | 
        var val = data.get(valueDim, idx); 
 | 
        if (showPointer) { 
 | 
          var pointer = createPointer(idx, startAngle); 
 | 
          // TODO hide pointer on NaN value? 
 | 
          graphic.initProps(pointer, { 
 | 
            rotation: -((isNaN(+val) ? angleExtent[0] : linearMap(val, valueExtent, angleExtent, true)) + Math.PI / 2) 
 | 
          }, seriesModel); 
 | 
          group.add(pointer); 
 | 
          data.setItemGraphicEl(idx, pointer); 
 | 
        } 
 | 
        if (showProgress) { 
 | 
          var progress = createProgress(idx, startAngle); 
 | 
          var isClip = progressModel.get('clip'); 
 | 
          graphic.initProps(progress, { 
 | 
            shape: { 
 | 
              endAngle: linearMap(val, valueExtent, angleExtent, isClip) 
 | 
            } 
 | 
          }, seriesModel); 
 | 
          group.add(progress); 
 | 
          // Add data index and series index for indexing the data by element 
 | 
          // Useful in tooltip 
 | 
          setCommonECData(seriesModel.seriesIndex, data.dataType, idx, progress); 
 | 
          progressList[idx] = progress; 
 | 
        } 
 | 
      }).update(function (newIdx, oldIdx) { 
 | 
        var val = data.get(valueDim, newIdx); 
 | 
        if (showPointer) { 
 | 
          var previousPointer = oldData.getItemGraphicEl(oldIdx); 
 | 
          var previousRotate = previousPointer ? previousPointer.rotation : startAngle; 
 | 
          var pointer = createPointer(newIdx, previousRotate); 
 | 
          pointer.rotation = previousRotate; 
 | 
          graphic.updateProps(pointer, { 
 | 
            rotation: -((isNaN(+val) ? angleExtent[0] : linearMap(val, valueExtent, angleExtent, true)) + Math.PI / 2) 
 | 
          }, seriesModel); 
 | 
          group.add(pointer); 
 | 
          data.setItemGraphicEl(newIdx, pointer); 
 | 
        } 
 | 
        if (showProgress) { 
 | 
          var previousProgress = oldProgressData[oldIdx]; 
 | 
          var previousEndAngle = previousProgress ? previousProgress.shape.endAngle : startAngle; 
 | 
          var progress = createProgress(newIdx, previousEndAngle); 
 | 
          var isClip = progressModel.get('clip'); 
 | 
          graphic.updateProps(progress, { 
 | 
            shape: { 
 | 
              endAngle: linearMap(val, valueExtent, angleExtent, isClip) 
 | 
            } 
 | 
          }, seriesModel); 
 | 
          group.add(progress); 
 | 
          // Add data index and series index for indexing the data by element 
 | 
          // Useful in tooltip 
 | 
          setCommonECData(seriesModel.seriesIndex, data.dataType, newIdx, progress); 
 | 
          progressList[newIdx] = progress; 
 | 
        } 
 | 
      }).execute(); 
 | 
      data.each(function (idx) { 
 | 
        var itemModel = data.getItemModel(idx); 
 | 
        var emphasisModel = itemModel.getModel('emphasis'); 
 | 
        var focus = emphasisModel.get('focus'); 
 | 
        var blurScope = emphasisModel.get('blurScope'); 
 | 
        var emphasisDisabled = emphasisModel.get('disabled'); 
 | 
        if (showPointer) { 
 | 
          var pointer = data.getItemGraphicEl(idx); 
 | 
          var symbolStyle = data.getItemVisual(idx, 'style'); 
 | 
          var visualColor = symbolStyle.fill; 
 | 
          if (pointer instanceof ZRImage) { 
 | 
            var pathStyle = pointer.style; 
 | 
            pointer.useStyle(extend({ 
 | 
              image: pathStyle.image, 
 | 
              x: pathStyle.x, 
 | 
              y: pathStyle.y, 
 | 
              width: pathStyle.width, 
 | 
              height: pathStyle.height 
 | 
            }, symbolStyle)); 
 | 
          } else { 
 | 
            pointer.useStyle(symbolStyle); 
 | 
            pointer.type !== 'pointer' && pointer.setColor(visualColor); 
 | 
          } 
 | 
          pointer.setStyle(itemModel.getModel(['pointer', 'itemStyle']).getItemStyle()); 
 | 
          if (pointer.style.fill === 'auto') { 
 | 
            pointer.setStyle('fill', getColor(linearMap(data.get(valueDim, idx), valueExtent, [0, 1], true))); 
 | 
          } 
 | 
          pointer.z2EmphasisLift = 0; 
 | 
          setStatesStylesFromModel(pointer, itemModel); 
 | 
          toggleHoverEmphasis(pointer, focus, blurScope, emphasisDisabled); 
 | 
        } 
 | 
        if (showProgress) { 
 | 
          var progress = progressList[idx]; 
 | 
          progress.useStyle(data.getItemVisual(idx, 'style')); 
 | 
          progress.setStyle(itemModel.getModel(['progress', 'itemStyle']).getItemStyle()); 
 | 
          progress.z2EmphasisLift = 0; 
 | 
          setStatesStylesFromModel(progress, itemModel); 
 | 
          toggleHoverEmphasis(progress, focus, blurScope, emphasisDisabled); 
 | 
        } 
 | 
      }); 
 | 
      this._progressEls = progressList; 
 | 
    } 
 | 
  }; 
 | 
  GaugeView.prototype._renderAnchor = function (seriesModel, posInfo) { 
 | 
    var anchorModel = seriesModel.getModel('anchor'); 
 | 
    var showAnchor = anchorModel.get('show'); 
 | 
    if (showAnchor) { 
 | 
      var anchorSize = anchorModel.get('size'); 
 | 
      var anchorType = anchorModel.get('icon'); 
 | 
      var offsetCenter = anchorModel.get('offsetCenter'); 
 | 
      var anchorKeepAspect = anchorModel.get('keepAspect'); 
 | 
      var anchor = createSymbol(anchorType, posInfo.cx - anchorSize / 2 + parsePercent(offsetCenter[0], posInfo.r), posInfo.cy - anchorSize / 2 + parsePercent(offsetCenter[1], posInfo.r), anchorSize, anchorSize, null, anchorKeepAspect); 
 | 
      anchor.z2 = anchorModel.get('showAbove') ? 1 : 0; 
 | 
      anchor.setStyle(anchorModel.getModel('itemStyle').getItemStyle()); 
 | 
      this.group.add(anchor); 
 | 
    } 
 | 
  }; 
 | 
  GaugeView.prototype._renderTitleAndDetail = function (seriesModel, ecModel, api, getColor, posInfo) { 
 | 
    var _this = this; 
 | 
    var data = seriesModel.getData(); 
 | 
    var valueDim = data.mapDimension('value'); 
 | 
    var minVal = +seriesModel.get('min'); 
 | 
    var maxVal = +seriesModel.get('max'); 
 | 
    var contentGroup = new graphic.Group(); 
 | 
    var newTitleEls = []; 
 | 
    var newDetailEls = []; 
 | 
    var hasAnimation = seriesModel.isAnimationEnabled(); 
 | 
    var showPointerAbove = seriesModel.get(['pointer', 'showAbove']); 
 | 
    data.diff(this._data).add(function (idx) { 
 | 
      newTitleEls[idx] = new graphic.Text({ 
 | 
        silent: true 
 | 
      }); 
 | 
      newDetailEls[idx] = new graphic.Text({ 
 | 
        silent: true 
 | 
      }); 
 | 
    }).update(function (idx, oldIdx) { 
 | 
      newTitleEls[idx] = _this._titleEls[oldIdx]; 
 | 
      newDetailEls[idx] = _this._detailEls[oldIdx]; 
 | 
    }).execute(); 
 | 
    data.each(function (idx) { 
 | 
      var itemModel = data.getItemModel(idx); 
 | 
      var value = data.get(valueDim, idx); 
 | 
      var itemGroup = new graphic.Group(); 
 | 
      var autoColor = getColor(linearMap(value, [minVal, maxVal], [0, 1], true)); 
 | 
      var itemTitleModel = itemModel.getModel('title'); 
 | 
      if (itemTitleModel.get('show')) { 
 | 
        var titleOffsetCenter = itemTitleModel.get('offsetCenter'); 
 | 
        var titleX = posInfo.cx + parsePercent(titleOffsetCenter[0], posInfo.r); 
 | 
        var titleY = posInfo.cy + parsePercent(titleOffsetCenter[1], posInfo.r); 
 | 
        var labelEl = newTitleEls[idx]; 
 | 
        labelEl.attr({ 
 | 
          z2: showPointerAbove ? 0 : 2, 
 | 
          style: createTextStyle(itemTitleModel, { 
 | 
            x: titleX, 
 | 
            y: titleY, 
 | 
            text: data.getName(idx), 
 | 
            align: 'center', 
 | 
            verticalAlign: 'middle' 
 | 
          }, { 
 | 
            inheritColor: autoColor 
 | 
          }) 
 | 
        }); 
 | 
        itemGroup.add(labelEl); 
 | 
      } 
 | 
      var itemDetailModel = itemModel.getModel('detail'); 
 | 
      if (itemDetailModel.get('show')) { 
 | 
        var detailOffsetCenter = itemDetailModel.get('offsetCenter'); 
 | 
        var detailX = posInfo.cx + parsePercent(detailOffsetCenter[0], posInfo.r); 
 | 
        var detailY = posInfo.cy + parsePercent(detailOffsetCenter[1], posInfo.r); 
 | 
        var width = parsePercent(itemDetailModel.get('width'), posInfo.r); 
 | 
        var height = parsePercent(itemDetailModel.get('height'), posInfo.r); 
 | 
        var detailColor = seriesModel.get(['progress', 'show']) ? data.getItemVisual(idx, 'style').fill : autoColor; 
 | 
        var labelEl = newDetailEls[idx]; 
 | 
        var formatter_1 = itemDetailModel.get('formatter'); 
 | 
        labelEl.attr({ 
 | 
          z2: showPointerAbove ? 0 : 2, 
 | 
          style: createTextStyle(itemDetailModel, { 
 | 
            x: detailX, 
 | 
            y: detailY, 
 | 
            text: formatLabel(value, formatter_1), 
 | 
            width: isNaN(width) ? null : width, 
 | 
            height: isNaN(height) ? null : height, 
 | 
            align: 'center', 
 | 
            verticalAlign: 'middle' 
 | 
          }, { 
 | 
            inheritColor: detailColor 
 | 
          }) 
 | 
        }); 
 | 
        setLabelValueAnimation(labelEl, { 
 | 
          normal: itemDetailModel 
 | 
        }, value, function (value) { 
 | 
          return formatLabel(value, formatter_1); 
 | 
        }); 
 | 
        hasAnimation && animateLabelValue(labelEl, idx, data, seriesModel, { 
 | 
          getFormattedLabel: function (labelDataIndex, status, dataType, labelDimIndex, fmt, extendParams) { 
 | 
            return formatLabel(extendParams ? extendParams.interpolatedValue : value, formatter_1); 
 | 
          } 
 | 
        }); 
 | 
        itemGroup.add(labelEl); 
 | 
      } 
 | 
      contentGroup.add(itemGroup); 
 | 
    }); 
 | 
    this.group.add(contentGroup); 
 | 
    this._titleEls = newTitleEls; 
 | 
    this._detailEls = newDetailEls; 
 | 
  }; 
 | 
  GaugeView.type = 'gauge'; 
 | 
  return GaugeView; 
 | 
}(ChartView); 
 | 
export default GaugeView; 
 |