提交 89565df1 编写于 作者: D dengxiaohong01

extract common part and private fn

上级 07d81487
......@@ -77,25 +77,40 @@ define(function (require) {
this.group.removeAll();
var coordSys = seriesModel.coordinateSystem;
if (coordSys.type === 'cartesian2d') {
this._renderOnCartesian(coordSys, seriesModel, api);
if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') {
this._renderOnCartesianAndCalendar(coordSys, seriesModel, api);
}
else if (isGeoCoordSys(coordSys)) {
this._renderOnGeo(
coordSys, seriesModel, visualMapOfThisSeries, api
);
}
else if (coordSys.type === 'calendar') {
this._renderOnCalendar(coordSys, seriesModel, api);
}
},
dispose: function () {},
_renderOnCalendar: function (calendar, seriesModel, api) {
_renderOnCartesianAndCalendar: function (coordSys, seriesModel, api) {
var group = this.group;
if (coordSys.type === 'cartesian2d') {
var xAxis = coordSys.getAxis('x');
var yAxis = coordSys.getAxis('y');
if (__DEV__) {
if (!(xAxis.type === 'category' && yAxis.type === 'category')) {
throw new Error('Heatmap on cartesian must have two category axes');
}
if (!(xAxis.onBand && yAxis.onBand)) {
throw new Error('Heatmap on cartesian must have two axes with boundaryGap true');
}
}
var width = xAxis.getBandWidth();
var height = yAxis.getBandWidth();
}
var group = this.group;
var data = seriesModel.getData();
var itemStyleQuery = 'itemStyle.normal';
......@@ -107,129 +122,89 @@ define(function (require) {
var labelModel = seriesModel.getModel('label.normal');
var hoverLabelModel = seriesModel.getModel('label.emphasis');
data.each(['time', 'value'], function (time, value, idx) {
var itemModel = data.getItemModel(idx);
// Ignore empty data
if (isNaN(value)) {
return;
}
var rect = new graphic.Rect({
z2: 1,
shape: calendar.dataToRect([time, value]).contentShape,
style: {
fill: data.getItemVisual(idx, 'color'),
opacity: data.getItemVisual(idx, 'opacity')
}
});
// Optimization for large datset
if (data.hasItemOption) {
style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']);
hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle();
labelModel = itemModel.getModel(labelQuery);
hoverLabelModel = itemModel.getModel(hoverLabelQuery);
}
data.each(
coordSys.type === 'cartesian2d' ? ['x', 'y', 'z'] : ['time', 'value'],
var rawValue = seriesModel.getRawValue(idx);
var defaultText = '-';
if (rawValue && rawValue[2] != null) {
defaultText = rawValue[2];
}
if (labelModel.getShallow('show')) {
graphic.setText(style, labelModel);
style.text = seriesModel.getFormattedLabel(idx, 'normal') || defaultText;
}
if (hoverLabelModel.getShallow('show')) {
graphic.setText(hoverStl, hoverLabelModel);
hoverStl.text = seriesModel.getFormattedLabel(idx, 'emphasis') || defaultText;
}
function (x, y, z, idx) {
var rect;
rect.setStyle(style);
if (coordSys.type === 'cartesian2d') {
graphic.setHoverStyle(rect, data.hasItemOption ? hoverStl : zrUtil.extend({}, hoverStl));
// Ignore empty data
if (isNaN(z)) {
return;
}
group.add(rect);
data.setItemGraphicEl(idx, rect);
});
},
_renderOnCartesian: function (cartesian, seriesModel, api) {
var xAxis = cartesian.getAxis('x');
var yAxis = cartesian.getAxis('y');
var group = this.group;
if (__DEV__) {
if (!(xAxis.type === 'category' && yAxis.type === 'category')) {
throw new Error('Heatmap on cartesian must have two category axes');
}
if (!(xAxis.onBand && yAxis.onBand)) {
throw new Error('Heatmap on cartesian must have two axes with boundaryGap true');
}
}
var point = coordSys.dataToPoint([x, y]);
var width = xAxis.getBandWidth();
var height = yAxis.getBandWidth();
rect = new graphic.Rect({
shape: {
x: point[0] - width / 2,
y: point[1] - height / 2,
width: width,
height: height
},
style: {
fill: data.getItemVisual(idx, 'color'),
opacity: data.getItemVisual(idx, 'opacity')
}
});
}
else {
// x => time y => value z => idx
// Ignore empty data
if (isNaN(y)) {
return;
}
idx = z;
rect = new graphic.Rect({
z2: 1,
shape: coordSys.dataToRect([x, y]).contentShape,
style: {
fill: data.getItemVisual(idx, 'color'),
opacity: data.getItemVisual(idx, 'opacity')
}
});
}
var data = seriesModel.getData();
var itemStyleQuery = 'itemStyle.normal';
var hoverItemStyleQuery = 'itemStyle.emphasis';
var labelQuery = 'label.normal';
var hoverLabelQuery = 'label.emphasis';
var style = seriesModel.getModel(itemStyleQuery).getItemStyle(['color']);
var hoverStl = seriesModel.getModel(hoverItemStyleQuery).getItemStyle();
var labelModel = seriesModel.getModel('label.normal');
var hoverLabelModel = seriesModel.getModel('label.emphasis');
var itemModel = data.getItemModel(idx);
data.each(['x', 'y', 'z'], function (x, y, z, idx) {
var itemModel = data.getItemModel(idx);
var point = cartesian.dataToPoint([x, y]);
// Ignore empty data
if (isNaN(z)) {
return;
}
var rect = new graphic.Rect({
shape: {
x: point[0] - width / 2,
y: point[1] - height / 2,
width: width,
height: height
},
style: {
fill: data.getItemVisual(idx, 'color'),
opacity: data.getItemVisual(idx, 'opacity')
// Optimization for large datset
if (data.hasItemOption) {
style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']);
hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle();
labelModel = itemModel.getModel(labelQuery);
hoverLabelModel = itemModel.getModel(hoverLabelQuery);
}
});
// Optimization for large datset
if (data.hasItemOption) {
style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']);
hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle();
labelModel = itemModel.getModel(labelQuery);
hoverLabelModel = itemModel.getModel(hoverLabelQuery);
}
var rawValue = seriesModel.getRawValue(idx);
var defaultText = '-';
if (rawValue && rawValue[2] != null) {
defaultText = rawValue[2];
}
if (labelModel.getShallow('show')) {
graphic.setText(style, labelModel);
style.text = seriesModel.getFormattedLabel(idx, 'normal') || defaultText;
}
if (hoverLabelModel.getShallow('show')) {
graphic.setText(hoverStl, hoverLabelModel);
hoverStl.text = seriesModel.getFormattedLabel(idx, 'emphasis') || defaultText;
}
var rawValue = seriesModel.getRawValue(idx);
var defaultText = '-';
if (rawValue && rawValue[2] != null) {
defaultText = rawValue[2];
}
if (labelModel.getShallow('show')) {
graphic.setText(style, labelModel);
style.text = seriesModel.getFormattedLabel(idx, 'normal') || defaultText;
}
if (hoverLabelModel.getShallow('show')) {
graphic.setText(hoverStl, hoverLabelModel);
hoverStl.text = seriesModel.getFormattedLabel(idx, 'emphasis') || defaultText;
}
rect.setStyle(style);
rect.setStyle(style);
graphic.setHoverStyle(rect, data.hasItemOption ? hoverStl : zrUtil.extend({}, hoverStl));
graphic.setHoverStyle(rect, data.hasItemOption ? hoverStl : zrUtil.extend({}, hoverStl));
group.add(rect);
data.setItemGraphicEl(idx, rect);
});
group.add(rect);
data.setItemGraphicEl(idx, rect);
}
);
},
_renderOnGeo: function (geo, seriesModel, visualMapModel, api) {
......
......@@ -145,7 +145,7 @@ define(function (require) {
firstDay = coordSys.getDateInfo(date);
}
addPoints(coordSys.getNextNDay(rangeData.range[1], 1).formatedDate);
addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate);
function addPoints(date) {
......
......@@ -8,7 +8,7 @@ define(function (require) {
'use strict';
var layout = require('../../util/layout');
var number = require('../../util/number');
var numberUtil = require('../../util/number');
var zrUtil = require('zrender/core/util');
// (24*60*60*1000)
......@@ -68,40 +68,48 @@ define(function (require) {
return this._firstDayOfWeek;
},
_initRangeOption: function () {
var range = this._model.get('range');
var rg = range;
/**
* get date info
*
* @param {string|number} date date
* @return {Object} info
*/
getDateInfo: function (date) {
if (zrUtil.isArray(rg) && rg.length === 1) {
rg = rg[0];
}
date = numberUtil.parseDate(date);
if (/^\d{4}$/.test(rg)) {
range = [rg + '-01-01', rg + '-12-31'];
}
var y = date.getFullYear();
if (/^\d{4}[\/|-]\d{1,2}$/.test(rg)) {
var m = date.getMonth() + 1;
m = m < 10 ? '0' + m : m;
var start = this.getDateInfo(rg);
var firstDay = start.date;
firstDay.setMonth(firstDay.getMonth() + 1);
var d = date.getDate();
d = d < 10 ? '0' + d : d;
var end = this.getNextNDay(firstDay, -1);
range = [start.formatedDate, end.formatedDate];
}
var day = date.getDay();
if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rg)) {
range = [rg, rg];
}
day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);
var tmp = this.getRangeInfo(range);
return {
y: y,
m: m,
d: d,
day: day,
time: date.getTime(),
formatedDate: y + '-' + m + '-' + d,
date: date
};
},
if (tmp.start.time > tmp.end.time) {
range.reverse();
getNextNDay: function (date, n) {
n = n || 0;
if (n === 0) {
return this.getDateInfo(date);
}
return range;
var time = this.getDateInfo(date).time;
return this.getDateInfo(time + ONE_DAY * n);
},
update: function (ecModel, api) {
......@@ -118,7 +126,7 @@ define(function (require) {
this._firstDayOfWeek = this._model.getModel('dayLabel').get('firstDay');
this._rangeInfo = this.getRangeInfo(this._initRangeOption());
this._rangeInfo = this._getRangeInfo(this._initRangeOption());
var size = this._model.get('cellSize');
......@@ -148,16 +156,16 @@ define(function (require) {
dataToPoint: function (data, noClip) {
var dayInfo = this.getDateInfo(data[0]);
var range = this._rangeInfo.range;
var range = this._rangeInfo;
var date = dayInfo.formatedDate;
// if not in range return [NaN, NaN]
if (!noClip && !this.isInRangeOfDate(date, range)) {
if (!noClip && !(dayInfo.time >= range.start.time && dayInfo.time <= range.end.time)) {
return [NaN, NaN];
}
var week = dayInfo.day;
var nthWeek = this.getRangeInfo([range[0], date]).weeks;
var nthWeek = this._getRangeInfo([range.start.time, date]).weeks;
if (this._orient === 'vertical') {
return [
......@@ -243,10 +251,46 @@ define(function (require) {
var range = this._rangeInfo.range;
if (this._orient === 'vertical') {
return this.getDateByWeeksAndDay(nthY, nthX - 1, range);
return this._getDateByWeeksAndDay(nthY, nthX - 1, range);
}
return this.getDateByWeeksAndDay(nthX, nthY - 1, range);
return this._getDateByWeeksAndDay(nthX, nthY - 1, range);
},
_initRangeOption: function () {
var range = this._model.get('range');
var rg = range;
if (zrUtil.isArray(rg) && rg.length === 1) {
rg = rg[0];
}
if (/^\d{4}$/.test(rg)) {
range = [rg + '-01-01', rg + '-12-31'];
}
if (/^\d{4}[\/|-]\d{1,2}$/.test(rg)) {
var start = this.getDateInfo(rg);
var firstDay = start.date;
firstDay.setMonth(firstDay.getMonth() + 1);
var end = this.getNextNDay(firstDay, -1);
range = [start.formatedDate, end.formatedDate];
}
if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rg)) {
range = [rg, rg];
}
var tmp = this._getRangeInfo(range);
if (tmp.start.time > tmp.end.time) {
range.reverse();
}
return range;
},
/**
......@@ -255,7 +299,7 @@ define(function (require) {
* @param {Array} range range ['2017-01-01', '2017-07-08']
* @return {Object} obj
*/
getRangeInfo: function (range) {
_getRangeInfo: function (range) {
var start = this.getDateInfo(range[0]);
var end = this.getDateInfo(range[1]);
......@@ -283,8 +327,8 @@ define(function (require) {
* @param {Array} range [d1, d2]
* @return {string} 'YYYY-MM-DD'
*/
getDateByWeeksAndDay: function (nthWeek, day, range) {
var rangeInfo = this.getRangeInfo(range);
_getDateByWeeksAndDay: function (nthWeek, day, range) {
var rangeInfo = this._getRangeInfo(range);
if (nthWeek > rangeInfo.weeks
|| (nthWeek === 0 && day < rangeInfo.fweek)
......@@ -295,7 +339,7 @@ define(function (require) {
var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day;
var time = this.getDateInfo(rangeInfo.range[0]).time + nthDay * ONE_DAY;
var time = rangeInfo.start.time + nthDay * ONE_DAY;
return this.getDateInfo(time);
......@@ -306,9 +350,9 @@ define(function (require) {
*
* @param {string|number} date date
* @param {Array} range [d1, d2]
* @return {Boolean} true | false
* @return {boolean} true | false
*/
isInRangeOfDate: function (date, range) {
_isInRangeOfDate: function (date, range) {
var start = this.getDateInfo(range[0]).time;
var end = this.getDateInfo(range[1]).time;
var cur = this.getDateInfo(date).time;
......@@ -318,50 +362,6 @@ define(function (require) {
}
return false;
},
/**
* get date info
*
* @param {string|number} date date
* @return {Object} info
*/
getDateInfo: function (date) {
date = number.parseDate(date);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? '0' + m : m;
var d = date.getDate();
d = d < 10 ? '0' + d : d;
var day = date.getDay();
day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);
return {
y: y,
m: m,
d: d,
day: day,
time: date.getTime(),
formatedDate: y + '-' + m + '-' + d,
date: date
};
},
getNextNDay: function (date, n) {
n = n || 0;
if (n === 0) {
return this.getDateInfo(date);
}
var time = this.getDateInfo(date).time;
return this.getDateInfo(time + ONE_DAY * n);
}
};
Calendar.dimensions = Calendar.prototype.dimensions,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册