提交 cccd60ba 编写于 作者: S sushuang

(1) Fix getRawValue (2) Some tiny refactor.

上级 7159e0e3
...@@ -54,7 +54,7 @@ function createListFromArray(source, seriesModel) { ...@@ -54,7 +54,7 @@ function createListFromArray(source, seriesModel) {
if (firstCategoryDimIndex == null) { if (firstCategoryDimIndex == null) {
firstCategoryDimIndex = dimIndex; firstCategoryDimIndex = dimIndex;
} }
dimInfo.ordinalMeta = categoryAxisModel.ordinalMeta; dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();
} }
if (dimInfo.otherDims.itemName != null) { if (dimInfo.otherDims.itemName != null) {
hasNameEncode = true; hasNameEncode = true;
......
...@@ -29,13 +29,14 @@ var RadarSeries = SeriesModel.extend({ ...@@ -29,13 +29,14 @@ var RadarSeries = SeriesModel.extend({
}, },
formatTooltip: function (dataIndex) { formatTooltip: function (dataIndex) {
var value = this.getRawValue(dataIndex); var data = this.getData();
var coordSys = this.coordinateSystem; var coordSys = this.coordinateSystem;
var indicatorAxes = coordSys.getIndicatorAxes(); var indicatorAxes = coordSys.getIndicatorAxes();
var name = this.getData().getName(dataIndex); var name = this.getData().getName(dataIndex);
return encodeHTML(name === '' ? this.name : name) + '<br/>' return encodeHTML(name === '' ? this.name : name) + '<br/>'
+ zrUtil.map(indicatorAxes, function (axis, idx) { + 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('<br />'); }).join('<br />');
}, },
......
...@@ -4,9 +4,9 @@ import * as graphic from '../../util/graphic'; ...@@ -4,9 +4,9 @@ import * as graphic from '../../util/graphic';
import * as axisPointerModelHelper from './modelHelper'; import * as axisPointerModelHelper from './modelHelper';
import * as eventTool from 'zrender/src/core/event'; import * as eventTool from 'zrender/src/core/event';
import * as throttleUtil from '../../util/throttle'; 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 clone = zrUtil.clone;
var bind = zrUtil.bind; var bind = zrUtil.bind;
...@@ -193,7 +193,7 @@ BaseAxisPointer.prototype = { ...@@ -193,7 +193,7 @@ BaseAxisPointer.prototype = {
createPointerEl: function (group, elOption, axisModel, axisPointerModel) { createPointerEl: function (group, elOption, axisModel, axisPointerModel) {
var pointerOption = elOption.pointer; var pointerOption = elOption.pointer;
if (pointerOption) { if (pointerOption) {
var pointerEl = get(group).pointerEl = new graphic[pointerOption.type]( var pointerEl = inner(group).pointerEl = new graphic[pointerOption.type](
clone(elOption.pointer) clone(elOption.pointer)
); );
group.add(pointerEl); group.add(pointerEl);
...@@ -205,7 +205,7 @@ BaseAxisPointer.prototype = { ...@@ -205,7 +205,7 @@ BaseAxisPointer.prototype = {
*/ */
createLabelEl: function (group, elOption, axisModel, axisPointerModel) { createLabelEl: function (group, elOption, axisModel, axisPointerModel) {
if (elOption.label) { if (elOption.label) {
var labelEl = get(group).labelEl = new graphic.Rect( var labelEl = inner(group).labelEl = new graphic.Rect(
clone(elOption.label) clone(elOption.label)
); );
...@@ -218,7 +218,7 @@ BaseAxisPointer.prototype = { ...@@ -218,7 +218,7 @@ BaseAxisPointer.prototype = {
* @protected * @protected
*/ */
updatePointerEl: function (group, elOption, updateProps) { updatePointerEl: function (group, elOption, updateProps) {
var pointerEl = get(group).pointerEl; var pointerEl = inner(group).pointerEl;
if (pointerEl) { if (pointerEl) {
pointerEl.setStyle(elOption.pointer.style); pointerEl.setStyle(elOption.pointer.style);
updateProps(pointerEl, {shape: elOption.pointer.shape}); updateProps(pointerEl, {shape: elOption.pointer.shape});
...@@ -229,7 +229,7 @@ BaseAxisPointer.prototype = { ...@@ -229,7 +229,7 @@ BaseAxisPointer.prototype = {
* @protected * @protected
*/ */
updateLabelEl: function (group, elOption, updateProps, axisPointerModel) { updateLabelEl: function (group, elOption, updateProps, axisPointerModel) {
var labelEl = get(group).labelEl; var labelEl = inner(group).labelEl;
if (labelEl) { if (labelEl) {
labelEl.setStyle(elOption.label.style); labelEl.setStyle(elOption.label.style);
updateProps(labelEl, { updateProps(labelEl, {
...@@ -345,7 +345,7 @@ BaseAxisPointer.prototype = { ...@@ -345,7 +345,7 @@ BaseAxisPointer.prototype = {
handle.stopAnimation(); handle.stopAnimation();
handle.attr(getHandleTransProps(trans)); handle.attr(getHandleTransProps(trans));
get(handle).lastProp = null; inner(handle).lastProp = null;
this._doDispatchAxisPointer(); this._doDispatchAxisPointer();
}, },
...@@ -467,8 +467,8 @@ BaseAxisPointer.prototype.constructor = BaseAxisPointer; ...@@ -467,8 +467,8 @@ BaseAxisPointer.prototype.constructor = BaseAxisPointer;
function updateProps(animationModel, moveAnimation, el, props) { function updateProps(animationModel, moveAnimation, el, props) {
// Animation optimize. // Animation optimize.
if (!propsEqual(get(el).lastProp, props)) { if (!propsEqual(inner(el).lastProp, props)) {
get(el).lastProp = props; inner(el).lastProp = props;
moveAnimation moveAnimation
? graphic.updateProps(el, props, animationModel) ? graphic.updateProps(el, props, animationModel)
: (el.stopAnimation(), el.attr(props)); : (el.stopAnimation(), el.attr(props));
......
import * as zrUtil from 'zrender/src/core/util'; 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 * as modelHelper from './modelHelper';
import findPointFromSeries from './findPointFromSeries'; import findPointFromSeries from './findPointFromSeries';
var each = zrUtil.each; var each = zrUtil.each;
var curry = zrUtil.curry; var curry = zrUtil.curry;
var get = modelUtil.makeGetter(); var inner = makeInner();
/** /**
* Basic logic: check all axis, if they do not demand show/highlight, * Basic logic: check all axis, if they do not demand show/highlight,
...@@ -337,8 +337,8 @@ function dispatchHighDownActually(axesInfo, dispatchAction, api) { ...@@ -337,8 +337,8 @@ function dispatchHighDownActually(axesInfo, dispatchAction, api) {
var zr = api.getZr(); var zr = api.getZr();
var highDownKey = 'axisPointerLastHighlights'; var highDownKey = 'axisPointerLastHighlights';
var lastHighlights = get(zr)[highDownKey] || {}; var lastHighlights = inner(zr)[highDownKey] || {};
var newHighlights = get(zr)[highDownKey] = {}; var newHighlights = inner(zr)[highDownKey] = {};
// Update highlight/downplay status according to axisPointer model. // Update highlight/downplay status according to axisPointer model.
// Build hash map and remove duplicate incidentally. // Build hash map and remove duplicate incidentally.
......
import * as zrUtil from 'zrender/src/core/util'; import * as zrUtil from 'zrender/src/core/util';
import env from 'zrender/src/core/env'; 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; var each = zrUtil.each;
/** /**
...@@ -18,20 +18,20 @@ export function register(key, api, handler) { ...@@ -18,20 +18,20 @@ export function register(key, api, handler) {
} }
var zr = api.getZr(); var zr = api.getZr();
get(zr).records || (get(zr).records = {}); inner(zr).records || (inner(zr).records = {});
initGlobalListeners(zr, api); 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; record.handler = handler;
} }
function initGlobalListeners(zr, api) { function initGlobalListeners(zr, api) {
if (get(zr).initialized) { if (inner(zr).initialized) {
return; return;
} }
get(zr).initialized = true; inner(zr).initialized = true;
useHandler('click', zrUtil.curry(doEnter, 'click')); useHandler('click', zrUtil.curry(doEnter, 'click'));
useHandler('mousemove', zrUtil.curry(doEnter, 'mousemove')); useHandler('mousemove', zrUtil.curry(doEnter, 'mousemove'));
...@@ -42,7 +42,7 @@ function initGlobalListeners(zr, api) { ...@@ -42,7 +42,7 @@ function initGlobalListeners(zr, api) {
zr.on(eventType, function (e) { zr.on(eventType, function (e) {
var dis = makeDispatchAction(api); var dis = makeDispatchAction(api);
each(get(zr).records, function (record) { each(inner(zr).records, function (record) {
record && cb(record, e, dis.dispatchAction); record && cb(record, e, dis.dispatchAction);
}); });
...@@ -112,8 +112,8 @@ export function unregister(key, api) { ...@@ -112,8 +112,8 @@ export function unregister(key, api) {
return; return;
} }
var zr = api.getZr(); var zr = api.getZr();
var record = (get(zr).records || {})[key]; var record = (inner(zr).records || {})[key];
if (record) { if (record) {
get(zr).records[key] = null; inner(zr).records[key] = null;
} }
} }
...@@ -4,6 +4,7 @@ import * as zrUtil from 'zrender/src/core/util'; ...@@ -4,6 +4,7 @@ import * as zrUtil from 'zrender/src/core/util';
import env from 'zrender/src/core/env'; import env from 'zrender/src/core/env';
import * as modelUtil from '../../util/model'; import * as modelUtil from '../../util/model';
import * as formatUtil from '../../util/format'; import * as formatUtil from '../../util/format';
import dataFormatMixin from '../../model/mixin/dataFormat';
var addCommas = formatUtil.addCommas; var addCommas = formatUtil.addCommas;
var encodeHTML = formatUtil.encodeHTML; var encodeHTML = formatUtil.encodeHTML;
...@@ -125,6 +126,6 @@ var MarkerModel = echarts.extendComponentModel({ ...@@ -125,6 +126,6 @@ var MarkerModel = echarts.extendComponentModel({
} }
}); });
zrUtil.mixin(MarkerModel, modelUtil.dataFormatMixin); zrUtil.mixin(MarkerModel, dataFormatMixin);
export default MarkerModel; export default MarkerModel;
\ No newline at end of file
import * as zrUtil from 'zrender/src/core/util'; import * as zrUtil from 'zrender/src/core/util';
import TimelineModel from './TimelineModel'; import TimelineModel from './TimelineModel';
import * as modelUtil from '../../util/model'; import dataFormatMixin from '../../model/mixin/dataFormat';
var SliderTimelineModel = TimelineModel.extend({ var SliderTimelineModel = TimelineModel.extend({
...@@ -98,6 +98,6 @@ var SliderTimelineModel = TimelineModel.extend({ ...@@ -98,6 +98,6 @@ var SliderTimelineModel = TimelineModel.extend({
}); });
zrUtil.mixin(SliderTimelineModel, modelUtil.dataFormatMixin); zrUtil.mixin(SliderTimelineModel, dataFormatMixin);
export default SliderTimelineModel; export default SliderTimelineModel;
\ No newline at end of file
...@@ -220,7 +220,10 @@ export function createScaleByModel(model, axisType) { ...@@ -220,7 +220,10 @@ export function createScaleByModel(model, axisType) {
// Buildin scale // Buildin scale
case 'category': case 'category':
return new OrdinalScale( return new OrdinalScale(
model.ordinalMeta, [Infinity, -Infinity] model.getOrdinalMeta
? model.getOrdinalMeta()
: model.getCategories(),
[Infinity, -Infinity]
); );
case 'value': case 'value':
return new IntervalScale(); return new IntervalScale();
......
...@@ -29,11 +29,6 @@ export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraD ...@@ -29,11 +29,6 @@ export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraD
*/ */
type: axisName + 'Axis.' + axisType, type: axisName + 'Axis.' + axisType,
/**
* @readOnly
*/
ordinalMeta: null,
mergeDefaultAndTheme: function (option, ecModel) { mergeDefaultAndTheme: function (option, ecModel) {
var layoutMode = this.layoutMode; var layoutMode = this.layoutMode;
var inputPositionParams = layoutMode var inputPositionParams = layoutMode
...@@ -56,7 +51,7 @@ export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraD ...@@ -56,7 +51,7 @@ export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraD
optionUpdated: function () { optionUpdated: function () {
var thisOption = this.option; var thisOption = this.option;
if (thisOption.type === 'category') { 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 ...@@ -68,10 +63,14 @@ export default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraD
// FIXME // FIXME
// warning if called before all of 'getInitailData' finished. // warning if called before all of 'getInitailData' finished.
if (this.option.type === 'category') { if (this.option.type === 'category') {
return this.ordinalMeta.categories; return this.__ordinalMeta.categories;
} }
}, },
getOrdinalMeta: function () {
return this.__ordinalMeta;
},
defaultOption: zrUtil.mergeAll( defaultOption: zrUtil.mergeAll(
[ [
{}, {},
......
...@@ -2,30 +2,30 @@ import {createHashMap, isObject, map} from 'zrender/src/core/util'; ...@@ -2,30 +2,30 @@ import {createHashMap, isObject, map} from 'zrender/src/core/util';
/** /**
* @constructor * @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) { function OrdinalMeta(opt) {
var data = axisModel.option.data;
var categories = data && map(data, getName);
/** /**
* @readOnly * @readOnly
* @type {Array.<string>} * @type {Array.<string>}
*/ */
this.categories = categories || []; this.categories = opt.categories || [];
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this._needCollect = !categories; this._needCollect = opt.needCollect;
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this._preventDeduplication = axisModel.get('dedplication', true) === false; this._preventDeduplication = opt.preventDeduplication;
/** /**
* @private * @private
...@@ -34,6 +34,22 @@ function OrdinalMeta(axisModel) { ...@@ -34,6 +34,22 @@ function OrdinalMeta(axisModel) {
this._map; 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; var proto = OrdinalMeta.prototype;
/** /**
......
...@@ -3,11 +3,16 @@ ...@@ -3,11 +3,16 @@
// merge with defaultDimValueGetter? // merge with defaultDimValueGetter?
import {__DEV__} from '../../config'; 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 {getDataItemValue, isDataItemOption} from '../../util/model';
import {parseDate} from '../../util/number'; import {parseDate} from '../../util/number';
import Source from '../Source'; 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. * If normal array used, mutable chunk size is supported.
...@@ -250,3 +255,33 @@ function converDataValue(value, dimInfo) { ...@@ -250,3 +255,33 @@ function converDataValue(value, dimInfo) {
return (value == null || value === '') return (value == null || value === '')
? NaN : +value; // If string (like '-'), using '+' parse to NaN ? NaN : +value; // If string (like '-'), using '+' parse to NaN
} }
// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem,
// Consider persistent.
/**
* @return {Array.<number>|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;
}
}
...@@ -10,6 +10,7 @@ import { ...@@ -10,6 +10,7 @@ import {
import * as modelUtil from '../util/model'; import * as modelUtil from '../util/model';
import ComponentModel from './Component'; import ComponentModel from './Component';
import colorPaletteMixin from './mixin/colorPalette'; import colorPaletteMixin from './mixin/colorPalette';
import dataFormatMixin from '../model/mixin/dataFormat';
import { import {
getLayoutParams, getLayoutParams,
mergeLayoutParam mergeLayoutParam
...@@ -409,7 +410,7 @@ var SeriesModel = ComponentModel.extend({ ...@@ -409,7 +410,7 @@ var SeriesModel = ComponentModel.extend({
}); });
zrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin); zrUtil.mixin(SeriesModel, dataFormatMixin);
zrUtil.mixin(SeriesModel, colorPaletteMixin); zrUtil.mixin(SeriesModel, colorPaletteMixin);
/** /**
......
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
}
};
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
import * as zrUtil from 'zrender/src/core/util'; import * as zrUtil from 'zrender/src/core/util';
import Scale from './Scale'; import Scale from './Scale';
import OrdinalMeta from '../data/OrdinalMeta';
var scaleProto = Scale.prototype; var scaleProto = Scale.prototype;
...@@ -16,7 +17,13 @@ var OrdinalScale = Scale.extend({ ...@@ -16,7 +17,13 @@ var OrdinalScale = Scale.extend({
type: 'ordinal', type: 'ordinal',
/**
* @param {module:echarts/data/OrdianlMeta|Array.<string>} ordinalMeta
*/
init: function (ordinalMeta, extent) { init: function (ordinalMeta, extent) {
if (!(ordinalMeta instanceof OrdinalMeta)) {
ordinalMeta = new OrdinalMeta({categories: ordinalMeta});
}
this._ordinalMeta = ordinalMeta; this._ordinalMeta = ordinalMeta;
this._extent = extent || [0, ordinalMeta.categories.length - 1]; this._extent = extent || [0, ordinalMeta.categories.length - 1];
}, },
......
import * as zrUtil from 'zrender/src/core/util'; import * as zrUtil from 'zrender/src/core/util';
import * as formatUtil from './format';
var each = zrUtil.each; var each = zrUtil.each;
var isObject = zrUtil.isObject; var isObject = zrUtil.isObject;
var DIMENSION_LABEL_REG = /\{@(.+?)\}/g;
/** /**
* name may be displayed on screen, so use '-'. * name may be displayed on screen, so use '-'.
* But we should make sure it is not duplicated * But we should make sure it is not duplicated
...@@ -98,138 +95,6 @@ export function isDataItemOption(dataItem) { ...@@ -98,138 +95,6 @@ export function isDataItemOption(dataItem) {
// && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array)); // && !(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. * Mapping to exists for merge.
* *
...@@ -516,18 +381,13 @@ export function queryDataIndex(data, payload) { ...@@ -516,18 +381,13 @@ export function queryDataIndex(data, payload) {
* *
* @return {Function} * @return {Function}
*/ */
export var makeInner = (function () { export function makeInner() {
var index = 0; var key = '__\0ec_inner_' + innerUniqueIndex++;
return function () { return function (hostObj) {
var key = '__\0zr_inner_' + index++; return hostObj[key] || (hostObj[key] = {});
return function (hostObj) {
return hostObj[key] || (hostObj[key] = {});
};
}; };
})(); }
var innerUniqueIndex = 0;
// ??? remove
export var makeGetter = makeInner;
/** /**
* @param {module:echarts/model/Global} ecModel * @param {module:echarts/model/Global} ecModel
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册