diff --git a/src/chart/helper/createListFromArray.js b/src/chart/helper/createListFromArray.js
index 4002f888978fddb81fd77f49be7e5e737ce95e25..69f9c5382c8df3696a44a3754fe34bc4a91cf442 100644
--- a/src/chart/helper/createListFromArray.js
+++ b/src/chart/helper/createListFromArray.js
@@ -54,7 +54,7 @@ function createListFromArray(source, seriesModel) {
if (firstCategoryDimIndex == null) {
firstCategoryDimIndex = dimIndex;
}
- dimInfo.ordinalMeta = categoryAxisModel.ordinalMeta;
+ dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();
}
if (dimInfo.otherDims.itemName != null) {
hasNameEncode = true;
diff --git a/src/chart/radar/RadarSeries.js b/src/chart/radar/RadarSeries.js
index 71e9e46cb9137b0659b841c41f39e68c101a04e0..4f905a4d972ab0b0b0685f35ce473ab81b6929e4 100644
--- a/src/chart/radar/RadarSeries.js
+++ b/src/chart/radar/RadarSeries.js
@@ -29,13 +29,14 @@ var RadarSeries = SeriesModel.extend({
},
formatTooltip: function (dataIndex) {
- var value = this.getRawValue(dataIndex);
+ var data = this.getData();
var coordSys = this.coordinateSystem;
var indicatorAxes = coordSys.getIndicatorAxes();
var name = this.getData().getName(dataIndex);
return encodeHTML(name === '' ? this.name : name) + '
'
+ zrUtil.map(indicatorAxes, function (axis, idx) {
- return encodeHTML(axis.name + ' : ' + value[idx]);
+ var val = data.get(data.mapDimension(axis.dim), dataIndex);
+ return encodeHTML(axis.name + ' : ' + val);
}).join('
');
},
diff --git a/src/component/axisPointer/BaseAxisPointer.js b/src/component/axisPointer/BaseAxisPointer.js
index 64be4b5251f0669817d80d7d07f84e51798e5efa..c6e93b45a77d0112ed0ed9ef91db8cec1a04e494 100644
--- a/src/component/axisPointer/BaseAxisPointer.js
+++ b/src/component/axisPointer/BaseAxisPointer.js
@@ -4,9 +4,9 @@ import * as graphic from '../../util/graphic';
import * as axisPointerModelHelper from './modelHelper';
import * as eventTool from 'zrender/src/core/event';
import * as throttleUtil from '../../util/throttle';
-import * as modelUtil from '../../util/model';
+import {makeInner} from '../../util/model';
-var get = modelUtil.makeGetter();
+var inner = makeInner();
var clone = zrUtil.clone;
var bind = zrUtil.bind;
@@ -193,7 +193,7 @@ BaseAxisPointer.prototype = {
createPointerEl: function (group, elOption, axisModel, axisPointerModel) {
var pointerOption = elOption.pointer;
if (pointerOption) {
- var pointerEl = get(group).pointerEl = new graphic[pointerOption.type](
+ var pointerEl = inner(group).pointerEl = new graphic[pointerOption.type](
clone(elOption.pointer)
);
group.add(pointerEl);
@@ -205,7 +205,7 @@ BaseAxisPointer.prototype = {
*/
createLabelEl: function (group, elOption, axisModel, axisPointerModel) {
if (elOption.label) {
- var labelEl = get(group).labelEl = new graphic.Rect(
+ var labelEl = inner(group).labelEl = new graphic.Rect(
clone(elOption.label)
);
@@ -218,7 +218,7 @@ BaseAxisPointer.prototype = {
* @protected
*/
updatePointerEl: function (group, elOption, updateProps) {
- var pointerEl = get(group).pointerEl;
+ var pointerEl = inner(group).pointerEl;
if (pointerEl) {
pointerEl.setStyle(elOption.pointer.style);
updateProps(pointerEl, {shape: elOption.pointer.shape});
@@ -229,7 +229,7 @@ BaseAxisPointer.prototype = {
* @protected
*/
updateLabelEl: function (group, elOption, updateProps, axisPointerModel) {
- var labelEl = get(group).labelEl;
+ var labelEl = inner(group).labelEl;
if (labelEl) {
labelEl.setStyle(elOption.label.style);
updateProps(labelEl, {
@@ -345,7 +345,7 @@ BaseAxisPointer.prototype = {
handle.stopAnimation();
handle.attr(getHandleTransProps(trans));
- get(handle).lastProp = null;
+ inner(handle).lastProp = null;
this._doDispatchAxisPointer();
},
@@ -467,8 +467,8 @@ BaseAxisPointer.prototype.constructor = BaseAxisPointer;
function updateProps(animationModel, moveAnimation, el, props) {
// Animation optimize.
- if (!propsEqual(get(el).lastProp, props)) {
- get(el).lastProp = props;
+ if (!propsEqual(inner(el).lastProp, props)) {
+ inner(el).lastProp = props;
moveAnimation
? graphic.updateProps(el, props, animationModel)
: (el.stopAnimation(), el.attr(props));
diff --git a/src/component/axisPointer/axisTrigger.js b/src/component/axisPointer/axisTrigger.js
index 933623c45330b0bd97fbb988027d846e627091bd..f6923f4d23d8bd789b0b2c80a5edd86ae5521041 100644
--- a/src/component/axisPointer/axisTrigger.js
+++ b/src/component/axisPointer/axisTrigger.js
@@ -1,11 +1,11 @@
import * as zrUtil from 'zrender/src/core/util';
-import * as modelUtil from '../../util/model';
+import {makeInner} from '../../util/model';
import * as modelHelper from './modelHelper';
import findPointFromSeries from './findPointFromSeries';
var each = zrUtil.each;
var curry = zrUtil.curry;
-var get = modelUtil.makeGetter();
+var inner = makeInner();
/**
* Basic logic: check all axis, if they do not demand show/highlight,
@@ -337,8 +337,8 @@ function dispatchHighDownActually(axesInfo, dispatchAction, api) {
var zr = api.getZr();
var highDownKey = 'axisPointerLastHighlights';
- var lastHighlights = get(zr)[highDownKey] || {};
- var newHighlights = get(zr)[highDownKey] = {};
+ var lastHighlights = inner(zr)[highDownKey] || {};
+ var newHighlights = inner(zr)[highDownKey] = {};
// Update highlight/downplay status according to axisPointer model.
// Build hash map and remove duplicate incidentally.
diff --git a/src/component/axisPointer/globalListener.js b/src/component/axisPointer/globalListener.js
index 90d51c4c1d5c65a8969e961601e46c052ea8f64e..cfc805a3f88b696f9ae45d91fa4a8615d15f0360 100644
--- a/src/component/axisPointer/globalListener.js
+++ b/src/component/axisPointer/globalListener.js
@@ -1,8 +1,8 @@
import * as zrUtil from 'zrender/src/core/util';
import env from 'zrender/src/core/env';
-import * as modelUtil from '../../util/model';
+import {makeInner} from '../../util/model';
-var get = modelUtil.makeGetter();
+var inner = makeInner();
var each = zrUtil.each;
/**
@@ -18,20 +18,20 @@ export function register(key, api, handler) {
}
var zr = api.getZr();
- get(zr).records || (get(zr).records = {});
+ inner(zr).records || (inner(zr).records = {});
initGlobalListeners(zr, api);
- var record = get(zr).records[key] || (get(zr).records[key] = {});
+ var record = inner(zr).records[key] || (inner(zr).records[key] = {});
record.handler = handler;
}
function initGlobalListeners(zr, api) {
- if (get(zr).initialized) {
+ if (inner(zr).initialized) {
return;
}
- get(zr).initialized = true;
+ inner(zr).initialized = true;
useHandler('click', zrUtil.curry(doEnter, 'click'));
useHandler('mousemove', zrUtil.curry(doEnter, 'mousemove'));
@@ -42,7 +42,7 @@ function initGlobalListeners(zr, api) {
zr.on(eventType, function (e) {
var dis = makeDispatchAction(api);
- each(get(zr).records, function (record) {
+ each(inner(zr).records, function (record) {
record && cb(record, e, dis.dispatchAction);
});
@@ -112,8 +112,8 @@ export function unregister(key, api) {
return;
}
var zr = api.getZr();
- var record = (get(zr).records || {})[key];
+ var record = (inner(zr).records || {})[key];
if (record) {
- get(zr).records[key] = null;
+ inner(zr).records[key] = null;
}
}
diff --git a/src/component/marker/MarkerModel.js b/src/component/marker/MarkerModel.js
index 73e15f1220f40ef5c6aadb74e044f9a9c28d5de4..c3dc30321274a3e07510ded083ef4ead4c8b35f1 100644
--- a/src/component/marker/MarkerModel.js
+++ b/src/component/marker/MarkerModel.js
@@ -4,6 +4,7 @@ import * as zrUtil from 'zrender/src/core/util';
import env from 'zrender/src/core/env';
import * as modelUtil from '../../util/model';
import * as formatUtil from '../../util/format';
+import dataFormatMixin from '../../model/mixin/dataFormat';
var addCommas = formatUtil.addCommas;
var encodeHTML = formatUtil.encodeHTML;
@@ -125,6 +126,6 @@ var MarkerModel = echarts.extendComponentModel({
}
});
-zrUtil.mixin(MarkerModel, modelUtil.dataFormatMixin);
+zrUtil.mixin(MarkerModel, dataFormatMixin);
export default MarkerModel;
\ No newline at end of file
diff --git a/src/component/timeline/SliderTimelineModel.js b/src/component/timeline/SliderTimelineModel.js
index f6d77509ef08e471f093e446d76527fd77c662ab..b98e8937e0f9f87cb8d155e92696adb712cf59a6 100644
--- a/src/component/timeline/SliderTimelineModel.js
+++ b/src/component/timeline/SliderTimelineModel.js
@@ -1,6 +1,6 @@
import * as zrUtil from 'zrender/src/core/util';
import TimelineModel from './TimelineModel';
-import * as modelUtil from '../../util/model';
+import dataFormatMixin from '../../model/mixin/dataFormat';
var SliderTimelineModel = TimelineModel.extend({
@@ -98,6 +98,6 @@ var SliderTimelineModel = TimelineModel.extend({
});
-zrUtil.mixin(SliderTimelineModel, modelUtil.dataFormatMixin);
+zrUtil.mixin(SliderTimelineModel, dataFormatMixin);
export default SliderTimelineModel;
\ No newline at end of file
diff --git a/src/coord/axisHelper.js b/src/coord/axisHelper.js
index f572c85910c198519bb142b2037b7b2651c9fe47..77a32c091c6a246e085d0315c6bc1a73bd9fe67c 100644
--- a/src/coord/axisHelper.js
+++ b/src/coord/axisHelper.js
@@ -220,7 +220,10 @@ export function createScaleByModel(model, axisType) {
// Buildin scale
case 'category':
return new OrdinalScale(
- model.ordinalMeta, [Infinity, -Infinity]
+ model.getOrdinalMeta
+ ? model.getOrdinalMeta()
+ : model.getCategories(),
+ [Infinity, -Infinity]
);
case 'value':
return new IntervalScale();
diff --git a/src/coord/axisModelCreator.js b/src/coord/axisModelCreator.js
index 8a4b37e93ed7e1314e9e94e212987a5c87cc8b1b..d0987eef4161c4278d605a1dddd3a2449d04150a 100644
--- a/src/coord/axisModelCreator.js
+++ b/src/coord/axisModelCreator.js
@@ -29,11 +29,6 @@ export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraD
*/
type: axisName + 'Axis.' + axisType,
- /**
- * @readOnly
- */
- ordinalMeta: null,
-
mergeDefaultAndTheme: function (option, ecModel) {
var layoutMode = this.layoutMode;
var inputPositionParams = layoutMode
@@ -56,7 +51,7 @@ export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraD
optionUpdated: function () {
var thisOption = this.option;
if (thisOption.type === 'category') {
- this.ordinalMeta = new OrdinalMeta(this);
+ this.__ordinalMeta = OrdinalMeta.createByAxisModel(this);
}
},
@@ -68,10 +63,14 @@ export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraD
// FIXME
// warning if called before all of 'getInitailData' finished.
if (this.option.type === 'category') {
- return this.ordinalMeta.categories;
+ return this.__ordinalMeta.categories;
}
},
+ getOrdinalMeta: function () {
+ return this.__ordinalMeta;
+ },
+
defaultOption: zrUtil.mergeAll(
[
{},
diff --git a/src/data/OrdinalMeta.js b/src/data/OrdinalMeta.js
index ae546ec8f8a025c9c5cdea2fd2801ad1a34452e6..8223f40d93ec929ac6f6c67cb525cc892f128d31 100644
--- a/src/data/OrdinalMeta.js
+++ b/src/data/OrdinalMeta.js
@@ -2,30 +2,30 @@ import {createHashMap, isObject, map} from 'zrender/src/core/util';
/**
* @constructor
- * @param {module:echart/model/Model} axisModel
+ * @param {Object} [opt]
+ * @param {Object} [opt.categories=[]]
+ * @param {Object} [opt.needCollect=false]
+ * @param {Object} [opt.preventDeduplication=false]
*/
-function OrdinalMeta(axisModel) {
-
- var data = axisModel.option.data;
- var categories = data && map(data, getName);
+function OrdinalMeta(opt) {
/**
* @readOnly
* @type {Array.}
*/
- this.categories = categories || [];
+ this.categories = opt.categories || [];
/**
* @private
* @type {boolean}
*/
- this._needCollect = !categories;
+ this._needCollect = opt.needCollect;
/**
* @private
* @type {boolean}
*/
- this._preventDeduplication = axisModel.get('dedplication', true) === false;
+ this._preventDeduplication = opt.preventDeduplication;
/**
* @private
@@ -34,6 +34,22 @@ function OrdinalMeta(axisModel) {
this._map;
}
+/**
+ * @param {module:echarts/model/Model} axisModel
+ * @return {module:echarts/data/OrdinalMeta}
+ */
+OrdinalMeta.createByAxisModel = function (axisModel) {
+ var option = axisModel.option;
+ var data = option.data;
+ var categories = data && map(data, getName);
+
+ return new OrdinalMeta({
+ categories: categories,
+ needCollect: !categories,
+ preventDeduplication: option.dedplication === false
+ });
+};
+
var proto = OrdinalMeta.prototype;
/**
diff --git a/src/data/helper/dataProvider.js b/src/data/helper/dataProvider.js
index 7b9c6be67f00d8d16c1d904eba21de1f234c493f..a98f88f23f66a92ea8490e00df97f786ae3e861e 100644
--- a/src/data/helper/dataProvider.js
+++ b/src/data/helper/dataProvider.js
@@ -3,11 +3,16 @@
// merge with defaultDimValueGetter?
import {__DEV__} from '../../config';
-import {isTypedArray, extend, assert, each} from 'zrender/src/core/util';
+import {isTypedArray, extend, assert, each, isObject, isArray} from 'zrender/src/core/util';
import {getDataItemValue, isDataItemOption} from '../../util/model';
import {parseDate} from '../../util/number';
import Source from '../Source';
-import {SOURCE_FORMAT_TYPED_ARRAY, SOURCE_FORMAT_ARRAY_ROWS} from './sourceHelper';
+import {
+ SOURCE_FORMAT_TYPED_ARRAY,
+ SOURCE_FORMAT_ARRAY_ROWS,
+ SOURCE_FORMAT_ORIGINAL,
+ SOURCE_FORMAT_OBJECT_ROWS
+} from './sourceHelper';
/**
* If normal array used, mutable chunk size is supported.
@@ -250,3 +255,33 @@ function converDataValue(value, dimInfo) {
return (value == null || value === '')
? NaN : +value; // If string (like '-'), using '+' parse to NaN
}
+
+// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem,
+// Consider persistent.
+/**
+ * @return {Array.|number} can be null/undefined.
+ */
+export function getRawValueForModel(model, dataIndex, dataType) {
+ var data = model.getData(dataType);
+ // Consider data may be not persistent.
+ var dataItem = data.getRawDataItem(dataIndex);
+ var sourceFormat = data.getProvider().getSource().sourceFormat;
+ if (dataItem == null) {
+ return;
+ }
+ if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {
+ return (isObject(dataItem) && !isArray(dataItem))
+ ? dataItem.value : dataItem;
+ }
+ else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
+ var item = [];
+ var dims = data.dimensions;
+ for (var i = 0; i < dims.length; i++) {
+ item.push(dataItem[dims[i]]);
+ }
+ return item;
+ }
+ else {
+ return dataItem;
+ }
+}
diff --git a/src/model/Series.js b/src/model/Series.js
index 31839770410a615012b156ae9abee8ea4ea507b7..ebaab417af475f5dcf2ac2424c64382afbecea0a 100644
--- a/src/model/Series.js
+++ b/src/model/Series.js
@@ -10,6 +10,7 @@ import {
import * as modelUtil from '../util/model';
import ComponentModel from './Component';
import colorPaletteMixin from './mixin/colorPalette';
+import dataFormatMixin from '../model/mixin/dataFormat';
import {
getLayoutParams,
mergeLayoutParam
@@ -409,7 +410,7 @@ var SeriesModel = ComponentModel.extend({
});
-zrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin);
+zrUtil.mixin(SeriesModel, dataFormatMixin);
zrUtil.mixin(SeriesModel, colorPaletteMixin);
/**
diff --git a/src/model/mixin/dataFormat.js b/src/model/mixin/dataFormat.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c3ad1a9aec624a055309a1ce850871432b81867
--- /dev/null
+++ b/src/model/mixin/dataFormat.js
@@ -0,0 +1,111 @@
+import {getRawValueForModel} from '../../data/helper/dataProvider';
+import {getTooltipMarker, formatTpl} from '../../util/format';
+
+var DIMENSION_LABEL_REG = /\{@(.+?)\}/g;
+
+// PENDING A little ugly
+export default {
+ /**
+ * Get params for formatter
+ * @param {number} dataIndex
+ * @param {string} [dataType]
+ * @return {Object}
+ */
+ getDataParams: function (dataIndex, dataType) {
+ var data = this.getData(dataType);
+ var rawValue = this.getRawValue(dataIndex, dataType);
+ var rawDataIndex = data.getRawIndex(dataIndex);
+ var name = data.getName(dataIndex, true);
+ var itemOpt = data.getRawDataItem(dataIndex);
+ var color = data.getItemVisual(dataIndex, 'color');
+
+ return {
+ componentType: this.mainType,
+ componentSubType: this.subType,
+ seriesType: this.mainType === 'series' ? this.subType : null,
+ seriesIndex: this.seriesIndex,
+ seriesId: this.id,
+ seriesName: this.name,
+ name: name,
+ dataIndex: rawDataIndex,
+ data: itemOpt,
+ dataType: dataType,
+ value: rawValue,
+ color: color,
+ marker: getTooltipMarker(color),
+
+ // Param name list for mapping `a`, `b`, `c`, `d`, `e`
+ $vars: ['seriesName', 'name', 'value']
+ };
+ },
+
+ /**
+ * Format label
+ * @param {number} dataIndex
+ * @param {string} [status='normal'] 'normal' or 'emphasis'
+ * @param {string} [dataType]
+ * @param {number} [dimIndex]
+ * @param {string} [labelProp='label']
+ * @return {string} If not formatter, return null/undefined
+ */
+ getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) {
+ status = status || 'normal';
+ var data = this.getData(dataType);
+ var itemModel = data.getItemModel(dataIndex);
+
+ var params = this.getDataParams(dataIndex, dataType);
+ if (dimIndex != null && (params.value instanceof Array)) {
+ params.value = params.value[dimIndex];
+ }
+
+ var formatter = itemModel.get(
+ status === 'normal'
+ ? [labelProp || 'label', 'formatter']
+ : [status, labelProp || 'label', 'formatter']
+ );
+
+ if (typeof formatter === 'function') {
+ params.status = status;
+ return formatter(params);
+ }
+ else if (typeof formatter === 'string') {
+ var str = formatTpl(formatter, params);
+
+ // Support 'aaa{@[3]}bbb{@product}ccc'.
+ // Do not support '}' in dim name util have to.
+ return str.replace(DIMENSION_LABEL_REG, function (origin, dimName) {
+ var len = dimName.length;
+ if (dimName.charAt(0) === '[' && dimName.charAt(len - 1) === ']') {
+ var dimIndex = +dimName.slice(1, len - 1); // Also: '[]' => 0
+ if (!isNaN(dimIndex)) {
+ dimName = data.dimensions[dimIndex];
+ }
+ }
+ return dimName ? data.get(dimName, dataIndex, true) : origin;
+ });
+ }
+ },
+
+ /**
+ * ??? TODO remove?
+ * @deprecated
+ * Get raw value in option
+ * @param {number} idx
+ * @param {string} [dataType]
+ * @return {Array|number|string}
+ */
+ getRawValue: function (idx, dataType) {
+ return getRawValueForModel(this, idx, dataType);
+ },
+
+ /**
+ * Should be implemented.
+ * @param {number} dataIndex
+ * @param {boolean} [multipleSeries=false]
+ * @param {number} [dataType]
+ * @return {string} tooltip string
+ */
+ formatTooltip: function () {
+ // Empty function
+ }
+};
diff --git a/src/scale/Ordinal.js b/src/scale/Ordinal.js
index d8121a40da0b539172844398fdfd29fb6cbdfe02..21e7a0c38d58a3ff40488652834ae356690ad2f0 100644
--- a/src/scale/Ordinal.js
+++ b/src/scale/Ordinal.js
@@ -9,6 +9,7 @@
import * as zrUtil from 'zrender/src/core/util';
import Scale from './Scale';
+import OrdinalMeta from '../data/OrdinalMeta';
var scaleProto = Scale.prototype;
@@ -16,7 +17,13 @@ var OrdinalScale = Scale.extend({
type: 'ordinal',
+ /**
+ * @param {module:echarts/data/OrdianlMeta|Array.} ordinalMeta
+ */
init: function (ordinalMeta, extent) {
+ if (!(ordinalMeta instanceof OrdinalMeta)) {
+ ordinalMeta = new OrdinalMeta({categories: ordinalMeta});
+ }
this._ordinalMeta = ordinalMeta;
this._extent = extent || [0, ordinalMeta.categories.length - 1];
},
diff --git a/src/util/model.js b/src/util/model.js
index 3f30c6d8b2cfd0ba51d640c02517b0a563acae86..d3e4755e98b76d82e2de3a95e2e2c0f24c634b25 100644
--- a/src/util/model.js
+++ b/src/util/model.js
@@ -1,11 +1,8 @@
import * as zrUtil from 'zrender/src/core/util';
-import * as formatUtil from './format';
var each = zrUtil.each;
var isObject = zrUtil.isObject;
-var DIMENSION_LABEL_REG = /\{@(.+?)\}/g;
-
/**
* name may be displayed on screen, so use '-'.
* But we should make sure it is not duplicated
@@ -98,138 +95,6 @@ export function isDataItemOption(dataItem) {
// && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));
}
-// /**
-// * Create a model proxy to be used in tooltip for edge data, markLine data, markPoint data.
-// * @param {module:echarts/data/List} data
-// * @param {Object} opt
-// * @param {string} [opt.seriesIndex]
-// * @param {Object} [opt.name]
-// * @param {Object} [opt.mainType]
-// * @param {Object} [opt.subType]
-// */
-// export function createDataFormatModel(data, opt) {
-// var model = new Model();
-// zrUtil.mixin(model, dataFormatMixin);
-// model.seriesIndex = opt.seriesIndex;
-// model.name = opt.name || '';
-// model.mainType = opt.mainType;
-// model.subType = opt.subType;
-
-// model.getData = function () {
-// return data;
-// };
-// return model;
-// }
-
-// PENDING A little ugly
-export var dataFormatMixin = {
- /**
- * Get params for formatter
- * @param {number} dataIndex
- * @param {string} [dataType]
- * @return {Object}
- */
- getDataParams: function (dataIndex, dataType) {
- var data = this.getData(dataType);
- var rawValue = this.getRawValue(dataIndex, dataType);
- var rawDataIndex = data.getRawIndex(dataIndex);
- var name = data.getName(dataIndex, true);
- var itemOpt = data.getRawDataItem(dataIndex);
- var color = data.getItemVisual(dataIndex, 'color');
-
- return {
- componentType: this.mainType,
- componentSubType: this.subType,
- seriesType: this.mainType === 'series' ? this.subType : null,
- seriesIndex: this.seriesIndex,
- seriesId: this.id,
- seriesName: this.name,
- name: name,
- dataIndex: rawDataIndex,
- data: itemOpt,
- dataType: dataType,
- value: rawValue,
- color: color,
- marker: formatUtil.getTooltipMarker(color),
-
- // Param name list for mapping `a`, `b`, `c`, `d`, `e`
- $vars: ['seriesName', 'name', 'value']
- };
- },
-
- /**
- * Format label
- * @param {number} dataIndex
- * @param {string} [status='normal'] 'normal' or 'emphasis'
- * @param {string} [dataType]
- * @param {number} [dimIndex]
- * @param {string} [labelProp='label']
- * @return {string} If not formatter, return null/undefined
- */
- getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) {
- status = status || 'normal';
- var data = this.getData(dataType);
- var itemModel = data.getItemModel(dataIndex);
-
- var params = this.getDataParams(dataIndex, dataType);
- if (dimIndex != null && (params.value instanceof Array)) {
- params.value = params.value[dimIndex];
- }
-
- var formatter = itemModel.get(
- status === 'normal'
- ? [labelProp || 'label', 'formatter']
- : [status, labelProp || 'label', 'formatter']
- );
-
- if (typeof formatter === 'function') {
- params.status = status;
- return formatter(params);
- }
- else if (typeof formatter === 'string') {
- var str = formatUtil.formatTpl(formatter, params);
-
- // Support 'aaa{@[3]}bbb{@product}ccc'.
- // Do not support '}' in dim name util have to.
- return str.replace(DIMENSION_LABEL_REG, function (origin, dimName) {
- var len = dimName.length;
- if (dimName.charAt(0) === '[' && dimName.charAt(len - 1) === ']') {
- var dimIndex = +dimName.slice(1, len - 1); // Also: '[]' => 0
- if (!isNaN(dimIndex)) {
- dimName = data.dimensions[dimIndex];
- }
- }
- return dimName ? data.get(dimName, dataIndex, true) : origin;
- });
- }
- },
-
- /**
- * Get raw value in option
- * @param {number} idx
- * @param {string} [dataType]
- * @return {Array|number|string}
- */
- getRawValue: function (idx, dataType) {
- var data = this.getData(dataType);
- var dataItem = data.getRawDataItem(idx);
- // ??? check: source format.
- if (dataItem != null) {
- return (isObject(dataItem) && !(dataItem instanceof Array))
- ? dataItem.value : dataItem;
- }
- },
-
- /**
- * Should be implemented.
- * @param {number} dataIndex
- * @param {boolean} [multipleSeries=false]
- * @param {number} [dataType]
- * @return {string} tooltip string
- */
- formatTooltip: zrUtil.noop
-};
-
/**
* Mapping to exists for merge.
*
@@ -516,18 +381,13 @@ export function queryDataIndex(data, payload) {
*
* @return {Function}
*/
-export var makeInner = (function () {
- var index = 0;
- return function () {
- var key = '__\0zr_inner_' + index++;
- return function (hostObj) {
- return hostObj[key] || (hostObj[key] = {});
- };
+export function makeInner() {
+ var key = '__\0ec_inner_' + innerUniqueIndex++;
+ return function (hostObj) {
+ return hostObj[key] || (hostObj[key] = {});
};
-})();
-
-// ??? remove
-export var makeGetter = makeInner;
+}
+var innerUniqueIndex = 0;
/**
* @param {module:echarts/model/Global} ecModel