define(function(require) {
var layout = require('../../util/layout');
var zrUtil = require('zrender/core/util');
var DataDiffer = require('../../data/DataDiffer');
var helper = {
/**
* @param {module:echarts/component/visualMap/VisualMapModel} visualMapModel\
* @param {module:echarts/ExtensionAPI} api
* @param {Array.<number>} itemSize always [short, long]
* @return {string} 'left' or 'right' or 'top' or 'bottom'
*/
getItemAlign: function (visualMapModel, api, itemSize) {
var modelOption = visualMapModel.option;
var itemAlign = modelOption.align;
if (itemAlign != null && itemAlign !== 'auto') {
return itemAlign;
}
// Auto decision align.
var ecSize = {width: api.getWidth(), height: api.getHeight()};
var realIndex = modelOption.orient === 'horizontal' ? 1 : 0;
var paramsSet = [
['left', 'right', 'width'],
['top', 'bottom', 'height']
];
var reals = paramsSet[realIndex];
var fakeValue = [0, null, 10];
var layoutInput = {};
for (var i = 0; i < 3; i++) {
layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i];
layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]];
}
var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex];
var rect = layout.getLayoutRect(layoutInput, ecSize, modelOption.padding);
return reals[
(rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5
< ecSize[rParam[1]] * 0.5 ? 0 : 1
];
},
convertDataIndicesToBatch: function (dataIndicesBySeries) {
var batch = [];
zrUtil.each(dataIndicesBySeries, function (item) {
zrUtil.each(item.dataIndices, function (dataIndex) {
batch.push({seriesId: item.seriesId, dataIndex: dataIndex});
});
});
return batch;
},
removeDuplicateBatch: function (batchA, batchB) {
var result = [[], []];
(new DataDiffer(batchA, batchB, getKey, getKey))
.add(add)
.update(zrUtil.noop)
.remove(remove)
.execute();
function getKey(item) {
return item.seriesId + '-' + item.dataIndex;
}
function add(index) {
result[1].push(batchB[index]);
}
function remove(index) {
result[0].push(batchA[index]);
}
return result;
}
};
return helper;
});
|