1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708 |
- define('echarts/chart/scatter', [
- 'require',
- './base',
- '../util/shape/Symbol',
- '../component/axis',
- '../component/grid',
- '../component/dataZoom',
- '../component/dataRange',
- '../config',
- 'zrender/tool/util',
- 'zrender/tool/color',
- '../chart'
- ], function (require) {
- var ChartBase = require('./base');
- var SymbolShape = require('../util/shape/Symbol');
- require('../component/axis');
- require('../component/grid');
- require('../component/dataZoom');
- require('../component/dataRange');
- var ecConfig = require('../config');
- ecConfig.scatter = {
- zlevel: 0,
- z: 2,
- clickable: true,
- legendHoverLink: true,
- xAxisIndex: 0,
- yAxisIndex: 0,
- symbolSize: 4,
- large: false,
- largeThreshold: 2000,
- itemStyle: {
- normal: { label: { show: false } },
- emphasis: { label: { show: false } }
- }
- };
- var zrUtil = require('zrender/tool/util');
- var zrColor = require('zrender/tool/color');
- function Scatter(ecTheme, messageCenter, zr, option, myChart) {
- ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
- this.refresh(option);
- }
- Scatter.prototype = {
- type: ecConfig.CHART_TYPE_SCATTER,
- _buildShape: function () {
- var series = this.series;
- this._sIndex2ColorMap = {};
- this._symbol = this.option.symbolList;
- this._sIndex2ShapeMap = {};
- this.selectedMap = {};
- this.xMarkMap = {};
- var legend = this.component.legend;
- var seriesArray = [];
- var serie;
- var serieName;
- var iconShape;
- var iconType;
- for (var i = 0, l = series.length; i < l; i++) {
- serie = series[i];
- serieName = serie.name;
- if (serie.type === ecConfig.CHART_TYPE_SCATTER) {
- series[i] = this.reformOption(series[i]);
- this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
- this._sIndex2ShapeMap[i] = this.query(serie, 'symbol') || this._symbol[i % this._symbol.length];
- if (legend) {
- this.selectedMap[serieName] = legend.isSelected(serieName);
- this._sIndex2ColorMap[i] = zrColor.alpha(legend.getColor(serieName), 0.5);
- iconShape = legend.getItemShape(serieName);
- if (iconShape) {
- var iconType = this._sIndex2ShapeMap[i];
- iconShape.style.brushType = iconType.match('empty') ? 'stroke' : 'both';
- iconType = iconType.replace('empty', '').toLowerCase();
- if (iconType.match('rectangle')) {
- iconShape.style.x += Math.round((iconShape.style.width - iconShape.style.height) / 2);
- iconShape.style.width = iconShape.style.height;
- }
- if (iconType.match('star')) {
- iconShape.style.n = iconType.replace('star', '') - 0 || 5;
- iconType = 'star';
- }
- if (iconType.match('image')) {
- iconShape.style.image = iconType.replace(new RegExp('^image:\\/\\/'), '');
- iconShape.style.x += Math.round((iconShape.style.width - iconShape.style.height) / 2);
- iconShape.style.width = iconShape.style.height;
- iconType = 'image';
- }
- iconShape.style.iconType = iconType;
- legend.setItemShape(serieName, iconShape);
- }
- } else {
- this.selectedMap[serieName] = true;
- this._sIndex2ColorMap[i] = zrColor.alpha(this.zr.getColor(i), 0.5);
- }
- if (this.selectedMap[serieName]) {
- seriesArray.push(i);
- }
- }
- }
- this._buildSeries(seriesArray);
- this.addShapeList();
- },
- _buildSeries: function (seriesArray) {
- if (seriesArray.length === 0) {
- return;
- }
- var series = this.series;
- var seriesIndex;
- var serie;
- var data;
- var value;
- var xAxis;
- var yAxis;
- var pointList = {};
- var x;
- var y;
- for (var j = 0, k = seriesArray.length; j < k; j++) {
- seriesIndex = seriesArray[j];
- serie = series[seriesIndex];
- if (serie.data.length === 0) {
- continue;
- }
- xAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
- yAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
- pointList[seriesIndex] = [];
- for (var i = 0, l = serie.data.length; i < l; i++) {
- data = serie.data[i];
- value = this.getDataFromOption(data, '-');
- if (value === '-' || value.length < 2) {
- continue;
- }
- x = xAxis.getCoord(value[0]);
- y = yAxis.getCoord(value[1]);
- pointList[seriesIndex].push([
- x,
- y,
- i,
- data.name || ''
- ]);
- }
- this.xMarkMap[seriesIndex] = this._markMap(xAxis, yAxis, serie.data, pointList[seriesIndex]);
- this.buildMark(seriesIndex);
- }
- this._buildPointList(pointList);
- },
- _markMap: function (xAxis, yAxis, data, pointList) {
- var xMarkMap = {
- min0: Number.POSITIVE_INFINITY,
- max0: Number.NEGATIVE_INFINITY,
- sum0: 0,
- counter0: 0,
- average0: 0,
- min1: Number.POSITIVE_INFINITY,
- max1: Number.NEGATIVE_INFINITY,
- sum1: 0,
- counter1: 0,
- average1: 0
- };
- var value;
- for (var i = 0, l = pointList.length; i < l; i++) {
- value = data[pointList[i][2]].value || data[pointList[i][2]];
- if (xMarkMap.min0 > value[0]) {
- xMarkMap.min0 = value[0];
- xMarkMap.minY0 = pointList[i][1];
- xMarkMap.minX0 = pointList[i][0];
- }
- if (xMarkMap.max0 < value[0]) {
- xMarkMap.max0 = value[0];
- xMarkMap.maxY0 = pointList[i][1];
- xMarkMap.maxX0 = pointList[i][0];
- }
- xMarkMap.sum0 += value[0];
- xMarkMap.counter0++;
- if (xMarkMap.min1 > value[1]) {
- xMarkMap.min1 = value[1];
- xMarkMap.minY1 = pointList[i][1];
- xMarkMap.minX1 = pointList[i][0];
- }
- if (xMarkMap.max1 < value[1]) {
- xMarkMap.max1 = value[1];
- xMarkMap.maxY1 = pointList[i][1];
- xMarkMap.maxX1 = pointList[i][0];
- }
- xMarkMap.sum1 += value[1];
- xMarkMap.counter1++;
- }
- var gridX = this.component.grid.getX();
- var gridXend = this.component.grid.getXend();
- var gridY = this.component.grid.getY();
- var gridYend = this.component.grid.getYend();
- xMarkMap.average0 = xMarkMap.sum0 / xMarkMap.counter0;
- var x = xAxis.getCoord(xMarkMap.average0);
- xMarkMap.averageLine0 = [
- [
- x,
- gridYend
- ],
- [
- x,
- gridY
- ]
- ];
- xMarkMap.minLine0 = [
- [
- xMarkMap.minX0,
- gridYend
- ],
- [
- xMarkMap.minX0,
- gridY
- ]
- ];
- xMarkMap.maxLine0 = [
- [
- xMarkMap.maxX0,
- gridYend
- ],
- [
- xMarkMap.maxX0,
- gridY
- ]
- ];
- xMarkMap.average1 = xMarkMap.sum1 / xMarkMap.counter1;
- var y = yAxis.getCoord(xMarkMap.average1);
- xMarkMap.averageLine1 = [
- [
- gridX,
- y
- ],
- [
- gridXend,
- y
- ]
- ];
- xMarkMap.minLine1 = [
- [
- gridX,
- xMarkMap.minY1
- ],
- [
- gridXend,
- xMarkMap.minY1
- ]
- ];
- xMarkMap.maxLine1 = [
- [
- gridX,
- xMarkMap.maxY1
- ],
- [
- gridXend,
- xMarkMap.maxY1
- ]
- ];
- return xMarkMap;
- },
- _buildPointList: function (pointList) {
- var series = this.series;
- var serie;
- var seriesPL;
- var singlePoint;
- var shape;
- for (var seriesIndex in pointList) {
- serie = series[seriesIndex];
- seriesPL = pointList[seriesIndex];
- if (serie.large && serie.data.length > serie.largeThreshold) {
- this.shapeList.push(this._getLargeSymbol(serie, seriesPL, this.getItemStyleColor(this.query(serie, 'itemStyle.normal.color'), seriesIndex, -1) || this._sIndex2ColorMap[seriesIndex]));
- continue;
- }
- for (var i = 0, l = seriesPL.length; i < l; i++) {
- singlePoint = seriesPL[i];
- shape = this._getSymbol(seriesIndex, singlePoint[2], singlePoint[3], singlePoint[0], singlePoint[1]);
- shape && this.shapeList.push(shape);
- }
- }
- },
- _getSymbol: function (seriesIndex, dataIndex, name, x, y) {
- var series = this.series;
- var serie = series[seriesIndex];
- var data = serie.data[dataIndex];
- var dataRange = this.component.dataRange;
- var rangColor;
- if (dataRange) {
- rangColor = isNaN(data[2]) ? this._sIndex2ColorMap[seriesIndex] : dataRange.getColor(data[2]);
- if (!rangColor) {
- return null;
- }
- } else {
- rangColor = this._sIndex2ColorMap[seriesIndex];
- }
- var itemShape = this.getSymbolShape(serie, seriesIndex, data, dataIndex, name, x, y, this._sIndex2ShapeMap[seriesIndex], rangColor, 'rgba(0,0,0,0)', 'vertical');
- itemShape.zlevel = serie.zlevel;
- itemShape.z = serie.z;
- itemShape._main = true;
- return itemShape;
- },
- _getLargeSymbol: function (serie, pointList, nColor) {
- return new SymbolShape({
- zlevel: serie.zlevel,
- z: serie.z,
- _main: true,
- hoverable: false,
- style: {
- pointList: pointList,
- color: nColor,
- strokeColor: nColor
- },
- highlightStyle: { pointList: [] }
- });
- },
- getMarkCoord: function (seriesIndex, mpData) {
- var serie = this.series[seriesIndex];
- var xMarkMap = this.xMarkMap[seriesIndex];
- var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
- var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
- var pos;
- if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
- var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : 1;
- pos = [
- xMarkMap[mpData.type + 'X' + valueIndex],
- xMarkMap[mpData.type + 'Y' + valueIndex],
- xMarkMap[mpData.type + 'Line' + valueIndex],
- xMarkMap[mpData.type + valueIndex]
- ];
- } else {
- pos = [
- typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
- typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
- ];
- }
- return pos;
- },
- refresh: function (newOption) {
- if (newOption) {
- this.option = newOption;
- this.series = newOption.series;
- }
- this.backupShapeList();
- this._buildShape();
- },
- ondataRange: function (param, status) {
- if (this.component.dataRange) {
- this.refresh();
- status.needRefresh = true;
- }
- return;
- }
- };
- zrUtil.inherits(Scatter, ChartBase);
- require('../chart').define('scatter', Scatter);
- return Scatter;
- });define('echarts/component/dataRange', [
- 'require',
- './base',
- 'zrender/shape/Text',
- 'zrender/shape/Rectangle',
- '../util/shape/HandlePolygon',
- '../config',
- 'zrender/tool/util',
- 'zrender/tool/event',
- 'zrender/tool/area',
- 'zrender/tool/color',
- '../component'
- ], function (require) {
- var Base = require('./base');
- var TextShape = require('zrender/shape/Text');
- var RectangleShape = require('zrender/shape/Rectangle');
- var HandlePolygonShape = require('../util/shape/HandlePolygon');
- var ecConfig = require('../config');
- ecConfig.dataRange = {
- zlevel: 0,
- z: 4,
- show: true,
- orient: 'vertical',
- x: 'left',
- y: 'bottom',
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: '#ccc',
- borderWidth: 0,
- padding: 5,
- itemGap: 10,
- itemWidth: 20,
- itemHeight: 14,
- precision: 0,
- splitNumber: 5,
- splitList: null,
- calculable: false,
- selectedMode: true,
- hoverLink: true,
- realtime: true,
- color: [
- '#006edd',
- '#e0ffff'
- ],
- textStyle: { color: '#333' }
- };
- var zrUtil = require('zrender/tool/util');
- var zrEvent = require('zrender/tool/event');
- var zrArea = require('zrender/tool/area');
- var zrColor = require('zrender/tool/color');
- function DataRange(ecTheme, messageCenter, zr, option, myChart) {
- Base.call(this, ecTheme, messageCenter, zr, option, myChart);
- var self = this;
- self._ondrift = function (dx, dy) {
- return self.__ondrift(this, dx, dy);
- };
- self._ondragend = function () {
- return self.__ondragend();
- };
- self._dataRangeSelected = function (param) {
- return self.__dataRangeSelected(param);
- };
- self._dispatchHoverLink = function (param) {
- return self.__dispatchHoverLink(param);
- };
- self._onhoverlink = function (params) {
- return self.__onhoverlink(params);
- };
- this._selectedMap = {};
- this._range = {};
- this.refresh(option);
- messageCenter.bind(ecConfig.EVENT.HOVER, this._onhoverlink);
- }
- DataRange.prototype = {
- type: ecConfig.COMPONENT_TYPE_DATARANGE,
- _textGap: 10,
- _buildShape: function () {
- this._itemGroupLocation = this._getItemGroupLocation();
- this._buildBackground();
- if (this._isContinuity()) {
- this._buildGradient();
- } else {
- this._buildItem();
- }
- if (this.dataRangeOption.show) {
- for (var i = 0, l = this.shapeList.length; i < l; i++) {
- this.zr.addShape(this.shapeList[i]);
- }
- }
- this._syncShapeFromRange();
- },
- _buildItem: function () {
- var data = this._valueTextList;
- var dataLength = data.length;
- var itemName;
- var itemShape;
- var textShape;
- var font = this.getFont(this.dataRangeOption.textStyle);
- var lastX = this._itemGroupLocation.x;
- var lastY = this._itemGroupLocation.y;
- var itemWidth = this.dataRangeOption.itemWidth;
- var itemHeight = this.dataRangeOption.itemHeight;
- var itemGap = this.dataRangeOption.itemGap;
- var textHeight = zrArea.getTextHeight('国', font);
- var color;
- if (this.dataRangeOption.orient == 'vertical' && this.dataRangeOption.x == 'right') {
- lastX = this._itemGroupLocation.x + this._itemGroupLocation.width - itemWidth;
- }
- var needValueText = true;
- if (this.dataRangeOption.text) {
- needValueText = false;
- if (this.dataRangeOption.text[0]) {
- textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[0]);
- if (this.dataRangeOption.orient == 'horizontal') {
- lastX += zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap;
- } else {
- lastY += textHeight + this._textGap;
- textShape.style.y += textHeight / 2 + this._textGap;
- textShape.style.textBaseline = 'bottom';
- }
- this.shapeList.push(new TextShape(textShape));
- }
- }
- for (var i = 0; i < dataLength; i++) {
- itemName = data[i];
- color = this.getColorByIndex(i);
- itemShape = this._getItemShape(lastX, lastY, itemWidth, itemHeight, this._selectedMap[i] ? color : '#ccc');
- itemShape._idx = i;
- itemShape.onmousemove = this._dispatchHoverLink;
- if (this.dataRangeOption.selectedMode) {
- itemShape.clickable = true;
- itemShape.onclick = this._dataRangeSelected;
- }
- this.shapeList.push(new RectangleShape(itemShape));
- if (needValueText) {
- textShape = {
- zlevel: this.getZlevelBase(),
- z: this.getZBase(),
- style: {
- x: lastX + itemWidth + 5,
- y: lastY,
- color: this._selectedMap[i] ? this.dataRangeOption.textStyle.color : '#ccc',
- text: data[i],
- textFont: font,
- textBaseline: 'top'
- },
- highlightStyle: { brushType: 'fill' }
- };
- if (this.dataRangeOption.orient == 'vertical' && this.dataRangeOption.x == 'right') {
- textShape.style.x -= itemWidth + 10;
- textShape.style.textAlign = 'right';
- }
- textShape._idx = i;
- textShape.onmousemove = this._dispatchHoverLink;
- if (this.dataRangeOption.selectedMode) {
- textShape.clickable = true;
- textShape.onclick = this._dataRangeSelected;
- }
- this.shapeList.push(new TextShape(textShape));
- }
- if (this.dataRangeOption.orient == 'horizontal') {
- lastX += itemWidth + (needValueText ? 5 : 0) + (needValueText ? zrArea.getTextWidth(itemName, font) : 0) + itemGap;
- } else {
- lastY += itemHeight + itemGap;
- }
- }
- if (!needValueText && this.dataRangeOption.text[1]) {
- if (this.dataRangeOption.orient == 'horizontal') {
- lastX = lastX - itemGap + this._textGap;
- } else {
- lastY = lastY - itemGap + this._textGap;
- }
- textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[1]);
- if (this.dataRangeOption.orient != 'horizontal') {
- textShape.style.y -= 5;
- textShape.style.textBaseline = 'top';
- }
- this.shapeList.push(new TextShape(textShape));
- }
- },
- _buildGradient: function () {
- var itemShape;
- var textShape;
- var font = this.getFont(this.dataRangeOption.textStyle);
- var lastX = this._itemGroupLocation.x;
- var lastY = this._itemGroupLocation.y;
- var itemWidth = this.dataRangeOption.itemWidth;
- var itemHeight = this.dataRangeOption.itemHeight;
- var textHeight = zrArea.getTextHeight('国', font);
- var mSize = 10;
- var needValueText = true;
- if (this.dataRangeOption.text) {
- needValueText = false;
- if (this.dataRangeOption.text[0]) {
- textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[0]);
- if (this.dataRangeOption.orient == 'horizontal') {
- lastX += zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap;
- } else {
- lastY += textHeight + this._textGap;
- textShape.style.y += textHeight / 2 + this._textGap;
- textShape.style.textBaseline = 'bottom';
- }
- this.shapeList.push(new TextShape(textShape));
- }
- }
- var zrColor = require('zrender/tool/color');
- var per = 1 / (this.dataRangeOption.color.length - 1);
- var colorList = [];
- for (var i = 0, l = this.dataRangeOption.color.length; i < l; i++) {
- colorList.push([
- i * per,
- this.dataRangeOption.color[i]
- ]);
- }
- if (this.dataRangeOption.orient == 'horizontal') {
- itemShape = {
- zlevel: this.getZlevelBase(),
- z: this.getZBase(),
- style: {
- x: lastX,
- y: lastY,
- width: itemWidth * mSize,
- height: itemHeight,
- color: zrColor.getLinearGradient(lastX, lastY, lastX + itemWidth * mSize, lastY, colorList)
- },
- hoverable: false
- };
- lastX += itemWidth * mSize + this._textGap;
- } else {
- itemShape = {
- zlevel: this.getZlevelBase(),
- z: this.getZBase(),
- style: {
- x: lastX,
- y: lastY,
- width: itemWidth,
- height: itemHeight * mSize,
- color: zrColor.getLinearGradient(lastX, lastY, lastX, lastY + itemHeight * mSize, colorList)
- },
- hoverable: false
- };
- lastY += itemHeight * mSize + this._textGap;
- }
- this.shapeList.push(new RectangleShape(itemShape));
- this._calculableLocation = itemShape.style;
- if (this.dataRangeOption.calculable) {
- this._buildFiller();
- this._bulidMask();
- this._bulidHandle();
- }
- this._buildIndicator();
- if (!needValueText && this.dataRangeOption.text[1]) {
- textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[1]);
- this.shapeList.push(new TextShape(textShape));
- }
- },
- _buildIndicator: function () {
- var x = this._calculableLocation.x;
- var y = this._calculableLocation.y;
- var width = this._calculableLocation.width;
- var height = this._calculableLocation.height;
- var size = 5;
- var pointList;
- var textPosition;
- if (this.dataRangeOption.orient == 'horizontal') {
- if (this.dataRangeOption.y != 'bottom') {
- pointList = [
- [
- x,
- y + height
- ],
- [
- x - size,
- y + height + size
- ],
- [
- x + size,
- y + height + size
- ]
- ];
- textPosition = 'bottom';
- } else {
- pointList = [
- [
- x,
- y
- ],
- [
- x - size,
- y - size
- ],
- [
- x + size,
- y - size
- ]
- ];
- textPosition = 'top';
- }
- } else {
- if (this.dataRangeOption.x != 'right') {
- pointList = [
- [
- x + width,
- y
- ],
- [
- x + width + size,
- y - size
- ],
- [
- x + width + size,
- y + size
- ]
- ];
- textPosition = 'right';
- } else {
- pointList = [
- [
- x,
- y
- ],
- [
- x - size,
- y - size
- ],
- [
- x - size,
- y + size
- ]
- ];
- textPosition = 'left';
- }
- }
- this._indicatorShape = {
- style: {
- pointList: pointList,
- color: '#fff',
- __rect: {
- x: Math.min(pointList[0][0], pointList[1][0]),
- y: Math.min(pointList[0][1], pointList[1][1]),
- width: size * (this.dataRangeOption.orient == 'horizontal' ? 2 : 1),
- height: size * (this.dataRangeOption.orient == 'horizontal' ? 1 : 2)
- }
- },
- highlightStyle: {
- brushType: 'fill',
- textPosition: textPosition,
- textColor: this.dataRangeOption.textStyle.color
- },
- hoverable: false
- };
- this._indicatorShape = new HandlePolygonShape(this._indicatorShape);
- },
- _buildFiller: function () {
- this._fillerShape = {
- zlevel: this.getZlevelBase(),
- z: this.getZBase() + 1,
- style: {
- x: this._calculableLocation.x,
- y: this._calculableLocation.y,
- width: this._calculableLocation.width,
- height: this._calculableLocation.height,
- color: 'rgba(255,255,255,0)'
- },
- highlightStyle: {
- strokeColor: 'rgba(255,255,255,0.5)',
- lineWidth: 1
- },
- draggable: true,
- ondrift: this._ondrift,
- ondragend: this._ondragend,
- onmousemove: this._dispatchHoverLink,
- _type: 'filler'
- };
- this._fillerShape = new RectangleShape(this._fillerShape);
- this.shapeList.push(this._fillerShape);
- },
- _bulidHandle: function () {
- var x = this._calculableLocation.x;
- var y = this._calculableLocation.y;
- var width = this._calculableLocation.width;
- var height = this._calculableLocation.height;
- var font = this.getFont(this.dataRangeOption.textStyle);
- var textHeight = zrArea.getTextHeight('国', font);
- var textWidth = Math.max(zrArea.getTextWidth(this._textFormat(this.dataRangeOption.max), font), zrArea.getTextWidth(this._textFormat(this.dataRangeOption.min), font)) + 2;
- var pointListStart;
- var textXStart;
- var textYStart;
- var coverRectStart;
- var pointListEnd;
- var textXEnd;
- var textYEnd;
- var coverRectEnd;
- if (this.dataRangeOption.orient == 'horizontal') {
- if (this.dataRangeOption.y != 'bottom') {
- pointListStart = [
- [
- x,
- y
- ],
- [
- x,
- y + height + textHeight
- ],
- [
- x - textHeight,
- y + height + textHeight
- ],
- [
- x - 1,
- y + height
- ],
- [
- x - 1,
- y
- ]
- ];
- textXStart = x - textWidth / 2 - textHeight;
- textYStart = y + height + textHeight / 2 + 2;
- coverRectStart = {
- x: x - textWidth - textHeight,
- y: y + height,
- width: textWidth + textHeight,
- height: textHeight
- };
- pointListEnd = [
- [
- x + width,
- y
- ],
- [
- x + width,
- y + height + textHeight
- ],
- [
- x + width + textHeight,
- y + height + textHeight
- ],
- [
- x + width + 1,
- y + height
- ],
- [
- x + width + 1,
- y
- ]
- ];
- textXEnd = x + width + textWidth / 2 + textHeight;
- textYEnd = textYStart;
- coverRectEnd = {
- x: x + width,
- y: y + height,
- width: textWidth + textHeight,
- height: textHeight
- };
- } else {
- pointListStart = [
- [
- x,
- y + height
- ],
- [
- x,
- y - textHeight
- ],
- [
- x - textHeight,
- y - textHeight
- ],
- [
- x - 1,
- y
- ],
- [
- x - 1,
- y + height
- ]
- ];
- textXStart = x - textWidth / 2 - textHeight;
- textYStart = y - textHeight / 2 - 2;
- coverRectStart = {
- x: x - textWidth - textHeight,
- y: y - textHeight,
- width: textWidth + textHeight,
- height: textHeight
- };
- pointListEnd = [
- [
- x + width,
- y + height
- ],
- [
- x + width,
- y - textHeight
- ],
- [
- x + width + textHeight,
- y - textHeight
- ],
- [
- x + width + 1,
- y
- ],
- [
- x + width + 1,
- y + height
- ]
- ];
- textXEnd = x + width + textWidth / 2 + textHeight;
- textYEnd = textYStart;
- coverRectEnd = {
- x: x + width,
- y: y - textHeight,
- width: textWidth + textHeight,
- height: textHeight
- };
- }
- } else {
- textWidth += textHeight;
- if (this.dataRangeOption.x != 'right') {
- pointListStart = [
- [
- x,
- y
- ],
- [
- x + width + textHeight,
- y
- ],
- [
- x + width + textHeight,
- y - textHeight
- ],
- [
- x + width,
- y - 1
- ],
- [
- x,
- y - 1
- ]
- ];
- textXStart = x + width + textWidth / 2 + textHeight / 2;
- textYStart = y - textHeight / 2;
- coverRectStart = {
- x: x + width,
- y: y - textHeight,
- width: textWidth + textHeight,
- height: textHeight
- };
- pointListEnd = [
- [
- x,
- y + height
- ],
- [
- x + width + textHeight,
- y + height
- ],
- [
- x + width + textHeight,
- y + textHeight + height
- ],
- [
- x + width,
- y + 1 + height
- ],
- [
- x,
- y + height + 1
- ]
- ];
- textXEnd = textXStart;
- textYEnd = y + height + textHeight / 2;
- coverRectEnd = {
- x: x + width,
- y: y + height,
- width: textWidth + textHeight,
- height: textHeight
- };
- } else {
- pointListStart = [
- [
- x + width,
- y
- ],
- [
- x - textHeight,
- y
- ],
- [
- x - textHeight,
- y - textHeight
- ],
- [
- x,
- y - 1
- ],
- [
- x + width,
- y - 1
- ]
- ];
- textXStart = x - textWidth / 2 - textHeight / 2;
- textYStart = y - textHeight / 2;
- coverRectStart = {
- x: x - textWidth - textHeight,
- y: y - textHeight,
- width: textWidth + textHeight,
- height: textHeight
- };
- pointListEnd = [
- [
- x + width,
- y + height
- ],
- [
- x - textHeight,
- y + height
- ],
- [
- x - textHeight,
- y + textHeight + height
- ],
- [
- x,
- y + 1 + height
- ],
- [
- x + width,
- y + height + 1
- ]
- ];
- textXEnd = textXStart;
- textYEnd = y + height + textHeight / 2;
- coverRectEnd = {
- x: x - textWidth - textHeight,
- y: y + height,
- width: textWidth + textHeight,
- height: textHeight
- };
- }
- }
- this._startShape = {
- style: {
- pointList: pointListStart,
- text: this._textFormat(this.dataRangeOption.max),
- textX: textXStart,
- textY: textYStart,
- textFont: font,
- color: this.getColor(this.dataRangeOption.max),
- rect: coverRectStart,
- x: pointListStart[0][0],
- y: pointListStart[0][1],
- _x: pointListStart[0][0],
- _y: pointListStart[0][1]
- }
- };
- this._startShape.highlightStyle = {
- strokeColor: this._startShape.style.color,
- lineWidth: 1
- };
- this._endShape = {
- style: {
- pointList: pointListEnd,
- text: this._textFormat(this.dataRangeOption.min),
- textX: textXEnd,
- textY: textYEnd,
- textFont: font,
- color: this.getColor(this.dataRangeOption.min),
- rect: coverRectEnd,
- x: pointListEnd[0][0],
- y: pointListEnd[0][1],
- _x: pointListEnd[0][0],
- _y: pointListEnd[0][1]
- }
- };
- this._endShape.highlightStyle = {
- strokeColor: this._endShape.style.color,
- lineWidth: 1
- };
- this._startShape.zlevel = this._endShape.zlevel = this.getZlevelBase();
- this._startShape.z = this._endShape.z = this.getZBase() + 1;
- this._startShape.draggable = this._endShape.draggable = true;
- this._startShape.ondrift = this._endShape.ondrift = this._ondrift;
- this._startShape.ondragend = this._endShape.ondragend = this._ondragend;
- this._startShape.style.textColor = this._endShape.style.textColor = this.dataRangeOption.textStyle.color;
- this._startShape.style.textAlign = this._endShape.style.textAlign = 'center';
- this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific';
- this._startShape.style.textBaseline = this._endShape.style.textBaseline = 'middle';
- this._startShape.style.width = this._endShape.style.width = 0;
- this._startShape.style.height = this._endShape.style.height = 0;
- this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific';
- this._startShape = new HandlePolygonShape(this._startShape);
- this._endShape = new HandlePolygonShape(this._endShape);
- this.shapeList.push(this._startShape);
- this.shapeList.push(this._endShape);
- },
- _bulidMask: function () {
- var x = this._calculableLocation.x;
- var y = this._calculableLocation.y;
- var width = this._calculableLocation.width;
- var height = this._calculableLocation.height;
- this._startMask = {
- zlevel: this.getZlevelBase(),
- z: this.getZBase() + 1,
- style: {
- x: x,
- y: y,
- width: this.dataRangeOption.orient == 'horizontal' ? 0 : width,
- height: this.dataRangeOption.orient == 'horizontal' ? height : 0,
- color: '#ccc'
- },
- hoverable: false
- };
- this._endMask = {
- zlevel: this.getZlevelBase(),
- z: this.getZBase() + 1,
- style: {
- x: this.dataRangeOption.orient == 'horizontal' ? x + width : x,
- y: this.dataRangeOption.orient == 'horizontal' ? y : y + height,
- width: this.dataRangeOption.orient == 'horizontal' ? 0 : width,
- height: this.dataRangeOption.orient == 'horizontal' ? height : 0,
- color: '#ccc'
- },
- hoverable: false
- };
- this._startMask = new RectangleShape(this._startMask);
- this._endMask = new RectangleShape(this._endMask);
- this.shapeList.push(this._startMask);
- this.shapeList.push(this._endMask);
- },
- _buildBackground: function () {
- var padding = this.reformCssArray(this.dataRangeOption.padding);
- this.shapeList.push(new RectangleShape({
- zlevel: this.getZlevelBase(),
- z: this.getZBase(),
- hoverable: false,
- style: {
- x: this._itemGroupLocation.x - padding[3],
- y: this._itemGroupLocation.y - padding[0],
- width: this._itemGroupLocation.width + padding[3] + padding[1],
- height: this._itemGroupLocation.height + padding[0] + padding[2],
- brushType: this.dataRangeOption.borderWidth === 0 ? 'fill' : 'both',
- color: this.dataRangeOption.backgroundColor,
- strokeColor: this.dataRangeOption.borderColor,
- lineWidth: this.dataRangeOption.borderWidth
- }
- }));
- },
- _getItemGroupLocation: function () {
- var data = this._valueTextList;
- var dataLength = data.length;
- var itemGap = this.dataRangeOption.itemGap;
- var itemWidth = this.dataRangeOption.itemWidth;
- var itemHeight = this.dataRangeOption.itemHeight;
- var totalWidth = 0;
- var totalHeight = 0;
- var font = this.getFont(this.dataRangeOption.textStyle);
- var textHeight = zrArea.getTextHeight('国', font);
- var mSize = 10;
- if (this.dataRangeOption.orient == 'horizontal') {
- if (this.dataRangeOption.text || this._isContinuity()) {
- totalWidth = (this._isContinuity() ? itemWidth * mSize + itemGap : dataLength * (itemWidth + itemGap)) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[0] != 'undefined' ? zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap : 0) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[1] != 'undefined' ? zrArea.getTextWidth(this.dataRangeOption.text[1], font) + this._textGap : 0);
- } else {
- itemWidth += 5;
- for (var i = 0; i < dataLength; i++) {
- totalWidth += itemWidth + zrArea.getTextWidth(data[i], font) + itemGap;
- }
- }
- totalWidth -= itemGap;
- totalHeight = Math.max(textHeight, itemHeight);
- } else {
- var maxWidth;
- if (this.dataRangeOption.text || this._isContinuity()) {
- totalHeight = (this._isContinuity() ? itemHeight * mSize + itemGap : dataLength * (itemHeight + itemGap)) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[0] != 'undefined' ? this._textGap + textHeight : 0) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[1] != 'undefined' ? this._textGap + textHeight : 0);
- maxWidth = Math.max(zrArea.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[0] || '', font), zrArea.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[1] || '', font));
- totalWidth = Math.max(itemWidth, maxWidth);
- } else {
- totalHeight = (itemHeight + itemGap) * dataLength;
- itemWidth += 5;
- maxWidth = 0;
- for (var i = 0; i < dataLength; i++) {
- maxWidth = Math.max(maxWidth, zrArea.getTextWidth(data[i], font));
- }
- totalWidth = itemWidth + maxWidth;
- }
- totalHeight -= itemGap;
- }
- var padding = this.reformCssArray(this.dataRangeOption.padding);
- var x;
- var zrWidth = this.zr.getWidth();
- switch (this.dataRangeOption.x) {
- case 'center':
- x = Math.floor((zrWidth - totalWidth) / 2);
- break;
- case 'left':
- x = padding[3] + this.dataRangeOption.borderWidth;
- break;
- case 'right':
- x = zrWidth - totalWidth - padding[1] - this.dataRangeOption.borderWidth;
- break;
- default:
- x = this.parsePercent(this.dataRangeOption.x, zrWidth);
- x = isNaN(x) ? 0 : x;
- break;
- }
- var y;
- var zrHeight = this.zr.getHeight();
- switch (this.dataRangeOption.y) {
- case 'top':
- y = padding[0] + this.dataRangeOption.borderWidth;
- break;
- case 'bottom':
- y = zrHeight - totalHeight - padding[2] - this.dataRangeOption.borderWidth;
- break;
- case 'center':
- y = Math.floor((zrHeight - totalHeight) / 2);
- break;
- default:
- y = this.parsePercent(this.dataRangeOption.y, zrHeight);
- y = isNaN(y) ? 0 : y;
- break;
- }
- if (this.dataRangeOption.calculable) {
- var handlerWidth = Math.max(zrArea.getTextWidth(this.dataRangeOption.max, font), zrArea.getTextWidth(this.dataRangeOption.min, font)) + textHeight;
- if (this.dataRangeOption.orient == 'horizontal') {
- if (x < handlerWidth) {
- x = handlerWidth;
- }
- if (x + totalWidth + handlerWidth > zrWidth) {
- x -= handlerWidth;
- }
- } else {
- if (y < textHeight) {
- y = textHeight;
- }
- if (y + totalHeight + textHeight > zrHeight) {
- y -= textHeight;
- }
- }
- }
- return {
- x: x,
- y: y,
- width: totalWidth,
- height: totalHeight
- };
- },
- _getTextShape: function (x, y, text) {
- return {
- zlevel: this.getZlevelBase(),
- z: this.getZBase(),
- style: {
- x: this.dataRangeOption.orient == 'horizontal' ? x : this._itemGroupLocation.x + this._itemGroupLocation.width / 2,
- y: this.dataRangeOption.orient == 'horizontal' ? this._itemGroupLocation.y + this._itemGroupLocation.height / 2 : y,
- color: this.dataRangeOption.textStyle.color,
- text: text,
- textFont: this.getFont(this.dataRangeOption.textStyle),
- textBaseline: this.dataRangeOption.orient == 'horizontal' ? 'middle' : 'top',
- textAlign: this.dataRangeOption.orient == 'horizontal' ? 'left' : 'center'
- },
- hoverable: false
- };
- },
- _getItemShape: function (x, y, width, height, color) {
- return {
- zlevel: this.getZlevelBase(),
- z: this.getZBase(),
- style: {
- x: x,
- y: y + 1,
- width: width,
- height: height - 2,
- color: color
- },
- highlightStyle: {
- strokeColor: color,
- lineWidth: 1
- }
- };
- },
- __ondrift: function (shape, dx, dy) {
- var x = this._calculableLocation.x;
- var y = this._calculableLocation.y;
- var width = this._calculableLocation.width;
- var height = this._calculableLocation.height;
- if (this.dataRangeOption.orient == 'horizontal') {
- if (shape.style.x + dx <= x) {
- shape.style.x = x;
- } else if (shape.style.x + dx + shape.style.width >= x + width) {
- shape.style.x = x + width - shape.style.width;
- } else {
- shape.style.x += dx;
- }
- } else {
- if (shape.style.y + dy <= y) {
- shape.style.y = y;
- } else if (shape.style.y + dy + shape.style.height >= y + height) {
- shape.style.y = y + height - shape.style.height;
- } else {
- shape.style.y += dy;
- }
- }
- if (shape._type == 'filler') {
- this._syncHandleShape();
- } else {
- this._syncFillerShape(shape);
- }
- if (this.dataRangeOption.realtime) {
- this._dispatchDataRange();
- }
- return true;
- },
- __ondragend: function () {
- this.isDragend = true;
- },
- ondragend: function (param, status) {
- if (!this.isDragend || !param.target) {
- return;
- }
- status.dragOut = true;
- status.dragIn = true;
- if (!this.dataRangeOption.realtime) {
- this._dispatchDataRange();
- }
- status.needRefresh = false;
- this.isDragend = false;
- return;
- },
- _syncShapeFromRange: function () {
- var range = this.dataRangeOption.range || {};
- var optRangeStart = range.start;
- var optRangeEnd = range.end;
- if (optRangeEnd < optRangeStart) {
- optRangeStart = [
- optRangeEnd,
- optRangeEnd = optRangeStart
- ][0];
- }
- this._range.end = optRangeStart != null ? optRangeStart : this._range.end != null ? this._range.end : 0;
- this._range.start = optRangeEnd != null ? optRangeEnd : this._range.start != null ? this._range.start : 100;
- if (this._range.start != 100 || this._range.end !== 0) {
- if (this.dataRangeOption.orient == 'horizontal') {
- var width = this._fillerShape.style.width;
- this._fillerShape.style.x += width * (100 - this._range.start) / 100;
- this._fillerShape.style.width = width * (this._range.start - this._range.end) / 100;
- } else {
- var height = this._fillerShape.style.height;
- this._fillerShape.style.y += height * (100 - this._range.start) / 100;
- this._fillerShape.style.height = height * (this._range.start - this._range.end) / 100;
- }
- this.zr.modShape(this._fillerShape.id);
- this._syncHandleShape();
- }
- },
- _syncHandleShape: function () {
- var x = this._calculableLocation.x;
- var y = this._calculableLocation.y;
- var width = this._calculableLocation.width;
- var height = this._calculableLocation.height;
- if (this.dataRangeOption.orient == 'horizontal') {
- this._startShape.style.x = this._fillerShape.style.x;
- this._startMask.style.width = this._startShape.style.x - x;
- this._endShape.style.x = this._fillerShape.style.x + this._fillerShape.style.width;
- this._endMask.style.x = this._endShape.style.x;
- this._endMask.style.width = x + width - this._endShape.style.x;
- this._range.start = Math.ceil(100 - (this._startShape.style.x - x) / width * 100);
- this._range.end = Math.floor(100 - (this._endShape.style.x - x) / width * 100);
- } else {
- this._startShape.style.y = this._fillerShape.style.y;
- this._startMask.style.height = this._startShape.style.y - y;
- this._endShape.style.y = this._fillerShape.style.y + this._fillerShape.style.height;
- this._endMask.style.y = this._endShape.style.y;
- this._endMask.style.height = y + height - this._endShape.style.y;
- this._range.start = Math.ceil(100 - (this._startShape.style.y - y) / height * 100);
- this._range.end = Math.floor(100 - (this._endShape.style.y - y) / height * 100);
- }
- this._syncShape();
- },
- _syncFillerShape: function (e) {
- var x = this._calculableLocation.x;
- var y = this._calculableLocation.y;
- var width = this._calculableLocation.width;
- var height = this._calculableLocation.height;
- var a;
- var b;
- if (this.dataRangeOption.orient == 'horizontal') {
- a = this._startShape.style.x;
- b = this._endShape.style.x;
- if (e.id == this._startShape.id && a >= b) {
- b = a;
- this._endShape.style.x = a;
- } else if (e.id == this._endShape.id && a >= b) {
- a = b;
- this._startShape.style.x = a;
- }
- this._fillerShape.style.x = a;
- this._fillerShape.style.width = b - a;
- this._startMask.style.width = a - x;
- this._endMask.style.x = b;
- this._endMask.style.width = x + width - b;
- this._range.start = Math.ceil(100 - (a - x) / width * 100);
- this._range.end = Math.floor(100 - (b - x) / width * 100);
- } else {
- a = this._startShape.style.y;
- b = this._endShape.style.y;
- if (e.id == this._startShape.id && a >= b) {
- b = a;
- this._endShape.style.y = a;
- } else if (e.id == this._endShape.id && a >= b) {
- a = b;
- this._startShape.style.y = a;
- }
- this._fillerShape.style.y = a;
- this._fillerShape.style.height = b - a;
- this._startMask.style.height = a - y;
- this._endMask.style.y = b;
- this._endMask.style.height = y + height - b;
- this._range.start = Math.ceil(100 - (a - y) / height * 100);
- this._range.end = Math.floor(100 - (b - y) / height * 100);
- }
- this._syncShape();
- },
- _syncShape: function () {
- this._startShape.position = [
- this._startShape.style.x - this._startShape.style._x,
- this._startShape.style.y - this._startShape.style._y
- ];
- this._startShape.style.text = this._textFormat(this._gap * this._range.start + this.dataRangeOption.min);
- this._startShape.style.color = this._startShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.start + this.dataRangeOption.min);
- this._endShape.position = [
- this._endShape.style.x - this._endShape.style._x,
- this._endShape.style.y - this._endShape.style._y
- ];
- this._endShape.style.text = this._textFormat(this._gap * this._range.end + this.dataRangeOption.min);
- this._endShape.style.color = this._endShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.end + this.dataRangeOption.min);
- this.zr.modShape(this._startShape.id);
- this.zr.modShape(this._endShape.id);
- this.zr.modShape(this._startMask.id);
- this.zr.modShape(this._endMask.id);
- this.zr.modShape(this._fillerShape.id);
- this.zr.refreshNextFrame();
- },
- _dispatchDataRange: function () {
- this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE, null, {
- range: {
- start: this._range.end,
- end: this._range.start
- }
- }, this.myChart);
- },
- __dataRangeSelected: function (param) {
- if (this.dataRangeOption.selectedMode === 'single') {
- for (var k in this._selectedMap) {
- this._selectedMap[k] = false;
- }
- }
- var idx = param.target._idx;
- this._selectedMap[idx] = !this._selectedMap[idx];
- var valueMax;
- var valueMin;
- if (this._useCustomizedSplit()) {
- valueMax = this._splitList[idx].max;
- valueMin = this._splitList[idx].min;
- } else {
- valueMax = (this._colorList.length - idx) * this._gap + this.dataRangeOption.min;
- valueMin = valueMax - this._gap;
- }
- this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE_SELECTED, param.event, {
- selected: this._selectedMap,
- target: idx,
- valueMax: valueMax,
- valueMin: valueMin
- }, this.myChart);
- this.messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this.myChart);
- },
- __dispatchHoverLink: function (param) {
- var valueMin;
- var valueMax;
- if (this.dataRangeOption.calculable) {
- var totalValue = this.dataRangeOption.max - this.dataRangeOption.min;
- var curValue;
- if (this.dataRangeOption.orient == 'horizontal') {
- curValue = (1 - (zrEvent.getX(param.event) - this._calculableLocation.x) / this._calculableLocation.width) * totalValue;
- } else {
- curValue = (1 - (zrEvent.getY(param.event) - this._calculableLocation.y) / this._calculableLocation.height) * totalValue;
- }
- valueMin = curValue - totalValue * 0.05;
- valueMax = curValue + totalValue * 0.05;
- } else if (this._useCustomizedSplit()) {
- var idx = param.target._idx;
- valueMax = this._splitList[idx].max;
- valueMin = this._splitList[idx].min;
- } else {
- var idx = param.target._idx;
- valueMax = (this._colorList.length - idx) * this._gap + this.dataRangeOption.min;
- valueMin = valueMax - this._gap;
- }
- this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE_HOVERLINK, param.event, {
- valueMin: valueMin,
- valueMax: valueMax
- }, this.myChart);
- },
- __onhoverlink: function (param) {
- if (this.dataRangeOption.show && this.dataRangeOption.hoverLink && this._indicatorShape && param && param.seriesIndex != null && param.dataIndex != null) {
- var curValue = param.value;
- if (curValue === '' || isNaN(curValue)) {
- return;
- }
- if (curValue < this.dataRangeOption.min) {
- curValue = this.dataRangeOption.min;
- } else if (curValue > this.dataRangeOption.max) {
- curValue = this.dataRangeOption.max;
- }
- if (this.dataRangeOption.orient == 'horizontal') {
- this._indicatorShape.position = [
- (this.dataRangeOption.max - curValue) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.width,
- 0
- ];
- } else {
- this._indicatorShape.position = [
- 0,
- (this.dataRangeOption.max - curValue) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.height
- ];
- }
- this._indicatorShape.style.text = this._textFormat(param.value);
- this._indicatorShape.style.color = this.getColor(curValue);
- this.zr.addHoverShape(this._indicatorShape);
- }
- },
- _textFormat: function (valueStart, valueEnd) {
- var dataRangeOption = this.dataRangeOption;
- if (valueStart !== -Number.MAX_VALUE) {
- valueStart = (+valueStart).toFixed(dataRangeOption.precision);
- }
- if (valueEnd != null && valueEnd !== Number.MAX_VALUE) {
- valueEnd = (+valueEnd).toFixed(dataRangeOption.precision);
- }
- if (dataRangeOption.formatter) {
- if (typeof dataRangeOption.formatter == 'string') {
- return dataRangeOption.formatter.replace('{value}', valueStart === -Number.MAX_VALUE ? 'min' : valueStart).replace('{value2}', valueEnd === Number.MAX_VALUE ? 'max' : valueEnd);
- } else if (typeof dataRangeOption.formatter == 'function') {
- return dataRangeOption.formatter.call(this.myChart, valueStart, valueEnd);
- }
- }
- if (valueEnd == null) {
- return valueStart;
- } else {
- if (valueStart === -Number.MAX_VALUE) {
- return '< ' + valueEnd;
- } else if (valueEnd === Number.MAX_VALUE) {
- return '> ' + valueStart;
- } else {
- return valueStart + ' - ' + valueEnd;
- }
- }
- },
- _isContinuity: function () {
- var dataRangeOption = this.dataRangeOption;
- return !(dataRangeOption.splitList ? dataRangeOption.splitList.length > 0 : dataRangeOption.splitNumber > 0) || dataRangeOption.calculable;
- },
- _useCustomizedSplit: function () {
- var dataRangeOption = this.dataRangeOption;
- return dataRangeOption.splitList && dataRangeOption.splitList.length > 0;
- },
- _buildColorList: function (splitNumber) {
- this._colorList = zrColor.getGradientColors(this.dataRangeOption.color, Math.max((splitNumber - this.dataRangeOption.color.length) / (this.dataRangeOption.color.length - 1), 0) + 1);
- if (this._colorList.length > splitNumber) {
- var len = this._colorList.length;
- var newColorList = [this._colorList[0]];
- var step = len / (splitNumber - 1);
- for (var i = 1; i < splitNumber - 1; i++) {
- newColorList.push(this._colorList[Math.floor(i * step)]);
- }
- newColorList.push(this._colorList[len - 1]);
- this._colorList = newColorList;
- }
- if (this._useCustomizedSplit()) {
- var splitList = this._splitList;
- for (var i = 0, len = splitList.length; i < len; i++) {
- if (splitList[i].color) {
- this._colorList[i] = splitList[i].color;
- }
- }
- }
- },
- _buildGap: function (splitNumber) {
- if (!this._useCustomizedSplit()) {
- var precision = this.dataRangeOption.precision;
- this._gap = (this.dataRangeOption.max - this.dataRangeOption.min) / splitNumber;
- while (this._gap.toFixed(precision) - 0 != this._gap && precision < 5) {
- precision++;
- }
- this.dataRangeOption.precision = precision;
- this._gap = ((this.dataRangeOption.max - this.dataRangeOption.min) / splitNumber).toFixed(precision) - 0;
- }
- },
- _buildDataList: function (splitNumber) {
- var valueTextList = this._valueTextList = [];
- var dataRangeOption = this.dataRangeOption;
- var useCustomizedSplit = this._useCustomizedSplit();
- for (var i = 0; i < splitNumber; i++) {
- this._selectedMap[i] = true;
- var text = '';
- if (useCustomizedSplit) {
- var splitListItem = this._splitList[splitNumber - 1 - i];
- if (splitListItem.label != null) {
- text = splitListItem.label;
- } else if (splitListItem.single != null) {
- text = this._textFormat(splitListItem.single);
- } else {
- text = this._textFormat(splitListItem.min, splitListItem.max);
- }
- } else {
- text = this._textFormat(i * this._gap + dataRangeOption.min, (i + 1) * this._gap + dataRangeOption.min);
- }
- valueTextList.unshift(text);
- }
- },
- _buildSplitList: function () {
- if (!this._useCustomizedSplit()) {
- return;
- }
- var splitList = this.dataRangeOption.splitList;
- var splitRangeList = this._splitList = [];
- for (var i = 0, len = splitList.length; i < len; i++) {
- var splitListItem = splitList[i];
- if (!splitListItem || splitListItem.start == null && splitListItem.end == null) {
- throw new Error('Empty item exists in splitList!');
- }
- var reformedItem = {
- label: splitListItem.label,
- color: splitListItem.color
- };
- reformedItem.min = splitListItem.start;
- reformedItem.max = splitListItem.end;
- if (reformedItem.min > reformedItem.max) {
- reformedItem.min = [
- reformedItem.max,
- reformedItem.max = reformedItem.min
- ][0];
- }
- if (reformedItem.min === reformedItem.max) {
- reformedItem.single = reformedItem.max;
- }
- if (reformedItem.min == null) {
- reformedItem.min = -Number.MAX_VALUE;
- }
- if (reformedItem.max == null) {
- reformedItem.max = Number.MAX_VALUE;
- }
- splitRangeList.push(reformedItem);
- }
- },
- refresh: function (newOption) {
- if (newOption) {
- this.option = newOption;
- this.option.dataRange = this.reformOption(this.option.dataRange);
- var dataRangeOption = this.dataRangeOption = this.option.dataRange;
- if (!this._useCustomizedSplit() && (dataRangeOption.min == null || dataRangeOption.max == null)) {
- throw new Error('option.dataRange.min or option.dataRange.max has not been defined.');
- }
- if (!this.myChart.canvasSupported) {
- dataRangeOption.realtime = false;
- }
- var splitNumber = this._isContinuity() ? 100 : this._useCustomizedSplit() ? dataRangeOption.splitList.length : dataRangeOption.splitNumber;
- this._buildSplitList();
- this._buildColorList(splitNumber);
- this._buildGap(splitNumber);
- this._buildDataList(splitNumber);
- }
- this.clear();
- this._buildShape();
- },
- getColor: function (value) {
- if (isNaN(value)) {
- return null;
- }
- var idx;
- if (!this._useCustomizedSplit()) {
- if (this.dataRangeOption.min == this.dataRangeOption.max) {
- return this._colorList[0];
- }
- if (value < this.dataRangeOption.min) {
- value = this.dataRangeOption.min;
- } else if (value > this.dataRangeOption.max) {
- value = this.dataRangeOption.max;
- }
- if (this.dataRangeOption.calculable) {
- if (value - (this._gap * this._range.start + this.dataRangeOption.min) > 0.00005 || value - (this._gap * this._range.end + this.dataRangeOption.min) < -0.00005) {
- return null;
- }
- }
- idx = this._colorList.length - Math.ceil((value - this.dataRangeOption.min) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._colorList.length);
- if (idx == this._colorList.length) {
- idx--;
- }
- } else {
- var splitRangeList = this._splitList;
- for (var i = 0, len = splitRangeList.length; i < len; i++) {
- if (splitRangeList[i].min <= value && splitRangeList[i].max >= value) {
- idx = i;
- break;
- }
- }
- }
- if (this._selectedMap[idx]) {
- return this._colorList[idx];
- } else {
- return null;
- }
- },
- getColorByIndex: function (idx) {
- if (idx >= this._colorList.length) {
- idx = this._colorList.length - 1;
- } else if (idx < 0) {
- idx = 0;
- }
- return this._colorList[idx];
- },
- onbeforDispose: function () {
- this.messageCenter.unbind(ecConfig.EVENT.HOVER, this._onhoverlink);
- }
- };
- zrUtil.inherits(DataRange, Base);
- require('../component').define('dataRange', DataRange);
- return DataRange;
- });define('echarts/util/shape/HandlePolygon', [
- 'require',
- 'zrender/shape/Base',
- 'zrender/shape/Polygon',
- 'zrender/tool/util'
- ], function (require) {
- var Base = require('zrender/shape/Base');
- var PolygonShape = require('zrender/shape/Polygon');
- var zrUtil = require('zrender/tool/util');
- function HandlePolygon(options) {
- Base.call(this, options);
- }
- HandlePolygon.prototype = {
- type: 'handle-polygon',
- buildPath: function (ctx, style) {
- PolygonShape.prototype.buildPath(ctx, style);
- },
- isCover: function (x, y) {
- var originPos = this.transformCoordToLocal(x, y);
- x = originPos[0];
- y = originPos[1];
- var rect = this.style.rect;
- if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
- return true;
- } else {
- return false;
- }
- }
- };
- zrUtil.inherits(HandlePolygon, Base);
- return HandlePolygon;
- });
|