From cccd60ba8f34481675a81bd1716227fa1ae946d6 Mon Sep 17 00:00:00 2001 From: sushuang Date: Thu, 11 Jan 2018 14:17:12 +0800 Subject: [PATCH] (1) Fix getRawValue (2) Some tiny refactor. --- src/chart/helper/createListFromArray.js | 2 +- src/chart/radar/RadarSeries.js | 5 +- src/component/axisPointer/BaseAxisPointer.js | 18 +-- src/component/axisPointer/axisTrigger.js | 8 +- src/component/axisPointer/globalListener.js | 18 +-- src/component/marker/MarkerModel.js | 3 +- src/component/timeline/SliderTimelineModel.js | 4 +- src/coord/axisHelper.js | 5 +- src/coord/axisModelCreator.js | 13 +- src/data/OrdinalMeta.js | 32 +++- src/data/helper/dataProvider.js | 39 ++++- src/model/Series.js | 3 +- src/model/mixin/dataFormat.js | 111 +++++++++++++ src/scale/Ordinal.js | 7 + src/util/model.js | 152 +----------------- 15 files changed, 227 insertions(+), 193 deletions(-) create mode 100644 src/model/mixin/dataFormat.js diff --git a/src/chart/helper/createListFromArray.js b/src/chart/helper/createListFromArray.js index 4002f8889..69f9c5382 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 71e9e46cb..4f905a4d9 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 64be4b525..c6e93b45a 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 933623c45..f6923f4d2 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 90d51c4c1..cfc805a3f 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 73e15f122..c3dc30321 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 f6d77509e..b98e8937e 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 f572c8591..77a32c091 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 8a4b37e93..d0987eef4 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 ae546ec8f..8223f40d9 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 7b9c6be67..a98f88f23 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 318397704..ebaab417a 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 000000000..1c3ad1a9a --- /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 d8121a40d..21e7a0c38 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 3f30c6d8b..d3e4755e9 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 -- GitLab