Commit ca0566d6 authored by Igor.Zotov's avatar Igor.Zotov Committed by Alexander.Trofimov

убрал лишний код

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@57069 954022d7-b5bf-4e40-9824-e11837661b57
parent 1dea88fb
......@@ -832,1553 +832,6 @@ CChartsDrawer.prototype =
},
//****calculate data****
_calculateStackedData: function()
{
if(this.calcProp.type == "Bar")
{
if (this.calcProp.subType == 'stackedPer') {
var summ
for (var j = 0; j < (this.calcProp.data.length); j++) {
summ = 0;
for (var i = 0; i < this.calcProp.data[j].length; i++) {
summ += Math.abs(this.calcProp.data[j][i]);
}
for (var i = 0; i < this.calcProp.data[j].length; i++) {
this.calcProp.data[j][i] = (this.calcProp.data[j][i] * 100) / summ;
if(isNaN(this.calcProp.data[j][i]))
this.calcProp.data[j][i] = 0;
}
}
}
};
if(this.calcProp.type == "Line" || this.calcProp.type == "Area")
{
if (this.calcProp.subType == 'stacked') {
for (var j = 0; j < (this.calcProp.data.length - 1); j++) {
for (var i = 0; i < this.calcProp.data[j].length; i++) {
if(!this.calcProp.data[j + 1])
this.calcProp.data[j + 1] = [];
this.calcProp.data[j + 1][i] = this.calcProp.data[j + 1][i] + this.calcProp.data[j][i];
}
}
this.calcProp.max = this._getMaxValueArray(this.calcProp.data);
this.calcProp.min = this._getMinValueArray(this.calcProp.data);
}
else if (this.calcProp.subType == 'stackedPer') {
var firstData = this.calcProp.data;
var summValue = [];
for (var j = 0; j < (firstData[0].length); j++) {
summValue[j] = 0;
for (var i = 0; i < firstData.length; i++) {
summValue[j] += Math.abs(firstData[i][j])
}
}
for (var j = 0; j < (this.calcProp.data.length - 1); j++) {
for (var i = 0; i < this.calcProp.data[j].length; i++) {
this.calcProp.data[j + 1][i] = this.calcProp.data[j + 1][i] + this.calcProp.data[j][i]
}
}
var tempData = this.calcProp.data;
for (var j = 0; j < (tempData[0].length); j++) {
for (var i = 0; i < tempData.length; i++) {
if(summValue[j] == 0)
tempData[i][j] = 0;
else
tempData[i][j] = (100 * tempData[i][j]) / (summValue[j]);
}
}
this.calcProp.max = this._getMaxValueArray(tempData);
this.calcProp.min = this._getMinValueArray(tempData);
this.calcProp.data = tempData;
}
};
if(this.calcProp.type == "HBar")
{
var originalData = $.extend(true, [], this.calcProp.data);
if (this.calcProp.subType == 'stacked') {
for (var j = 0; j < this.calcProp.data.length; j++) {
for (var i = 0; i < this.calcProp.data[j].length; i++) {
this.calcProp.data[j][i] = this._findPrevValue(originalData, j, i)
}
}
}
else if (this.calcProp.subType == 'stackedPer') {
var sumMax = [];
//находим суммы для нормированной диаграммы
for (var j = 0; j < (this.calcProp.data.length); j++) {
sumMax[j] = 0;
for (var i = 0; i < this.calcProp.data[j].length; i++) {
sumMax[j] += Math.abs(this.calcProp.data[j][i]);
}
}
for (var j = 0; j < (this.calcProp.data.length); j++) {
for (var i = 0; i < (this.calcProp.data[j].length); i++) {
this.calcProp.data[j][i] = this._findPrevValue(originalData, j, i)
}
}
var tempData = this.calcProp.data;
for (var j = 0; j < (this.calcProp.data.length); j++) {
for (var i = 0; i < (this.calcProp.data[j].length); i++) {
tempData[j][i] = (100 * tempData[j][i]) / (sumMax[j]);
if(isNaN(tempData[j][i]))
tempData[j][i] = 0;
}
}
this.calcProp.data = tempData;
}
};
},
_calculateData: function(chart) {
var isSeries = false;
var formatCell = 'General';
var formatCellScOy = 'General';
var defaultFormat = 'General';
var isDateTimeFormat;
var api_doc = window["editor"];
var api_sheet = window["Asc"]["editor"];
var styleManager = api_doc ? api_doc.chartStyleManager : api_sheet.chartStyleManager;
var arrFormatAdobeLabels = [];
var catNameLabels = [];
//просматриваем bShowValue для каждой из серий
//TODO позже отрисовывать значения для каждой серии индивидуально
/*if ( !chart.bShowValue ) {
for (var n = 0; n < chart.series.length; n++) {
if ( chart.series[n].bShowValue ) {
chart.bShowValue = true;
break;
}
}
}
if(chart.bShowCatName)
chart.bShowValue = true;*/
var max = 0;
var min = 0;
var minY = 0;
var maxY = 0;
var newArr, formatAdobeLabel, xNumCache, yNumCache;
var series = chart.chart.plotArea.chart.series;
if(series && series.length != 0 && this.calcProp.type != 'Scatter')//берём данные из NumCache
{
isSeries = true;
/*chart.reSeries = chart.series;
if(chart.type == 'Pie')
{
series = chart.getReverseSeries(true);
chart.reSeries = series;
}*/
var arrValues = [];
var isSkip = [];
var skipSeries = [];
var isEn = false;
var isEnY = false;
var numSeries = 0;
var curSeria;
var isNumberVal = true;
if(series[0] && series[0].xVal && series[0].xVal.Formula != null && this.calcProp.type == 'Scatter')
{
var cash = series[0].xVal.NumCache;
for(var i = 0; i < cash.length; i++)
{
if(!isNumber(cash.val))
isNumberVal = false;
}
}
for(var l = 0; l < series.length; ++l)
{
var firstCol = 0;
var firstRow = 0;
if(series[0].xVal && numSeries == 0 && this.calcProp.type == 'Scatter' && series[numSeries].xVal.numRef.numCache.pts.length)
{
curSeria = series[numSeries].xVal.numRef.numCache.pts;
}
else if(this.calcProp.type == 'Scatter')
curSeria = series[numSeries].yVal.numRef.numCache.pts;
else
curSeria = series[l].val.numRef.numCache.pts;
var lastCol = curSeria.length;
skipSeries[l] = true;
var isRow = false;
if(firstCol == lastCol)
isRow = true;
if(series[l].isHidden == true)
{
continue;
}
if(!curSeria.length)
{
continue;
}
if(series[0].xVal && numSeries == 0 && this.calcProp.type == 'Scatter')
l--;
skipSeries[l] = false;
arrValues[numSeries] = [];
arrFormatAdobeLabels[numSeries] = [];
catNameLabels[numSeries] = [];
isSkip[numSeries] = true;
var row = firstRow;
var n = 0;
for(var col = firstCol; col < lastCol; ++col)
{
if(!curSeria[col])
{
curSeria[col] = {val:0};
}
else if(curSeria[col].isHidden == true)
{
continue;
}
//var cell = ws.getCell(new CellAddress(row - 1, col - 1, 0));
var cell = curSeria[col];
if(numSeries == 0 && col == firstCol && chart.subType != 'stackedPer' && this.calcProp.type != 'Stock')
{
formatCell = cell.numFormatStr ? cell.numFormatStr : defaultFormat;
isDateTimeFormat = cell.isDateTimeFormat;
}
else if(this.calcProp.type == 'Stock' && numSeries == 0 && col == firstCol)
{
formatCellScOy = cell.numFormatStr ? cell.numFormatStr : defaultFormat;
isDateTimeFormat = cell.isDateTimeFormat;
}
if(this.calcProp.type == 'Scatter')
{
if(numSeries == 1 && col == firstCol)
formatCellScOy = cell.numFormatStr ? cell.numFormatStr : defaultFormat;
}
formatAdobeLabel = cell.numFormatStr ? cell.numFormatStr : defaultFormat;
var orValue = cell.val;
if(series[0].xVal && series[0].xVal.Formula != null && numSeries == 0 && !isNumberVal && this.calcProp.type == 'Scatter')
orValue = col - firstCol + 1;
if('' != orValue)
isSkip[numSeries] = false;
var value = parseFloat(orValue)
if(!isEn && !isNaN(value))
{
min = value;
max = value;
isEn = true;
}
if(!isNaN(value) && value > max)
max = value
if(!isNaN(value) && value < min)
min = value
if(isNaN(value) && orValue == '' && (((this.calcProp.type == 'Line' ) && this.calcProp.type == 'normal') || (this.calcProp.type == 'Scatter' )))
{
value = '';
}
else if (isNaN(value))
{
if(this.calcProp.type == "Bar" || this.calcProp.type == "HBar")
formatAdobeLabel = null;
value = 0;
}
if(this.calcProp.type == 'Pie' || this.calcProp.type == "DoughnutChart")
arrValues[numSeries][n] = Math.abs(value);
else
arrValues[numSeries][n] = value;
arrFormatAdobeLabels[numSeries][n] = formatAdobeLabel;
if(chart.bShowCatName && this.calcProp.type != 'Scatter')
{
if(series[numSeries] && series[numSeries].Cat && series[numSeries].Cat.NumCache[col] && this.calcProp.type != "Pie" && this.calcProp.type != "DoughnutChart")
catNameLabels[numSeries][n] = series[numSeries].Cat.NumCache[col].val;
else if(this.calcProp.type != "Pie" && this.calcProp.type != "DoughnutChart" && series[numSeries] && series[numSeries].TxCache)
catNameLabels[numSeries][n] = series[numSeries].TxCache.Tx;
else if(series[numSeries] && series[numSeries] && series[numSeries].TxCache)
catNameLabels[numSeries][n] = series[numSeries].TxCache.Tx;
}
n++;
}
numSeries++;
}
}
else
{
var yVal;
var xVal;
newArr = [];
for(var l = 0; l < series.length; ++l)
{
newArr[l] = [];
yNumCache = series[l].yVal.numRef.numCache ? series[l].yVal.numRef.numCache : series[l].yVal.numLit;
for(var j = 0; j < yNumCache.pts.length; ++j)
{
yVal = parseFloat(yNumCache.pts[j].val);
xNumCache = series[l].xVal && series[l].xVal.numRef ? series[l].xVal.numRef.numCache : series[l].xVal && series[l].xVal.numLit ? series[l].xVal.numLit : null;
if(xNumCache && xNumCache.pts[j] && xNumCache.pts[j].val)
{
if(!isNaN(parseFloat(xNumCache.pts[j].val)))
xVal = parseFloat(xNumCache.pts[j].val);
else
xVal = j + 1;
}
else
xVal = j + 1;
newArr[l][j] = [xVal, yVal];
if(l == 0 && j == 0)
{
min = xVal;
max = xVal;
minY = yVal;
maxY = yVal;
};
if(xVal < min)
min = xVal;
if(xVal > max)
max = xVal;
if(yVal < minY)
minY = yVal;
if(yVal > maxY)
maxY = yVal;
}
}
this.calcProp.ymin = minY;
this.calcProp.ymax = maxY;
}
if(isSeries)
{
var arrFormatAdobeLabelsRev = arrFormatAdobeLabels;
var arrValuesRev = arrValues;
}
isEn = false;
if(this.calcProp.type == 'Scatter' && !newArr)
{
/*min = 0;
max = 0;
minY = 0;
maxY = 0;
var isEnY = false
var scatterArr = arrValuesRev;
var scatterArrLabels = arrFormatAdobeLabelsRev;
if(!scatterArr)
{
scatterArr = arrReverse(arrValues);
scatterArrLabels = arrReverse(arrFormatAdobeLabels);
}
var newArr = [];
var newAdobeLabels = [];
if(isDateTimeFormat)
{
formatCellScOy = formatCell;
formatCell = 'General';
for (i = 0; i < scatterArr.length; ++i) {
newArr[i] = [];
newAdobeLabels[i] = [];
for (j = 0; j < scatterArr[i].length; ++j) {
newArr[i][j] = [];
newAdobeLabels[i][j] = [];
newArr[i][j][0] = j+1;
newArr[i][j][1] = scatterArr[i][j];
newAdobeLabels[i][j][1] = scatterArrLabels[i][j];
if(!isEn)
{
min = newArr[i][j][0];
max = newArr[i][j][0];
minY = newArr[i][j][1];
minY = newArr[i][j][1];
isEn = true;
}
if(min > newArr[i][j][0] && newArr[i][j][0] != '')
min = newArr[i][j][0]
if(max < newArr[i][j][0] && newArr[i][j][0] != '')
max = newArr[i][j][0]
if(minY > newArr[i][j][1] && newArr[i][j][1] != '')
minY = newArr[i][j][1]
if(maxY < newArr[i][j][1] && newArr[i][j][1] != '')
maxY = newArr[i][j][1]
}
}
}*/
}
if(!arrValuesRev)
arrValuesRev = arrReverse(arrValues);
if(!arrFormatAdobeLabelsRev)
arrFormatAdobeLabelsRev = arrReverse(arrFormatAdobeLabels);
this.calcProp.isFormatCell = formatCell;
this.calcProp.isformatCellScOy = formatCellScOy;
this.calcProp.min = min;
this.calcProp.max = max;
/*if(skipSeries)
this.calcProp.skipSeries = skipSeries;*/
this.calcProp.catNameLabels = null;
if(newArr != undefined)
{
//chart.arrFormatAdobeLabels = newAdobeLabels;
this.calcProp.data = newArr;
}
else
{
if(isSeries)
{
if(this.calcProp.type == 'HBar' || this.calcProp.type == 'Bar' || this.calcProp.type == 'Stock' || this.calcProp.type == 'Pie' || this.calcProp.type == 'DoughnutChart')
{
arrValuesRev = arrReverse(arrValues);
this.calcProp.arrFormatAdobeLabels = arrReverse(arrFormatAdobeLabels);
if(catNameLabels && catNameLabels.length)
this.calcProp.catNameLabels = arrReverse(catNameLabels);
this.calcProp.data = arrValuesRev;
}
else
{
this.calcProp.arrFormatAdobeLabels = arrFormatAdobeLabels;
if(catNameLabels && catNameLabels.length)
this.calcProp.catNameLabels = catNameLabels;
this.calcProp.data = arrValues;
}
}
else
{
if (chart.range.rows)
{
if(this.calcProp.type == 'HBar' || this.calcProp.type == 'Bar' || this.calcProp.type == 'Stock')
{
this.calcProp.arrFormatAdobeLabels = arrFormatAdobeLabelsRev;
this.calcProp.data = arrValuesRev;
}
else
{
this.calcProp.arrFormatAdobeLabels = arrFormatAdobeLabels;
this.calcProp.data = arrValues;
}
}
else
{
if(this.calcProp.type == 'HBar' || this.calcProp.type == 'Bar' || this.calcProp.type == 'Stock')
{
this.calcProp.arrFormatAdobeLabels = arrFormatAdobeLabels;
this.calcProp.data = arrValues;
}
else
{
this.calcProp.arrFormatAdobeLabels = arrFormatAdobeLabelsRev;
this.calcProp.data = arrValuesRev;
}
}
}
}
},
_getAxisData: function (max, mainObj, minVal, maxVal, yminVal, ymaxVal)
{
var greaterNullNum;
if(( 'Bar' == mainObj.type || 'Line' == mainObj.type || 'Area' == mainObj.type) && mainObj.subType == 'stackedPer')
return this._getLineAreaBarPercentAxisData(max, mainObj, minVal, maxVal, yminVal, ymaxVal);
else if('Scatter' == mainObj.type || 'HBar' == mainObj.type)
return this._getScatterHbarAxisData(max, mainObj, minVal, maxVal, yminVal, ymaxVal);
else
return this._getAnotherChartAxisData(max, mainObj, minVal, maxVal, yminVal, ymaxVal);
},
_getLineAreaBarPercentAxisData : function(max, mainObj, minVal, maxVal, yminVal, ymaxVal)
{
//*** LINE / BAR / AREA + 100% ****
var arrNew = mainObj.data;
var newMin, newMax, massRes, min;
if(typeof(arrNew[0]) == 'object')
{
var arrMin = [];
var arrMax = [];
for (var j=0; j < arrNew.length; j++) {
newMax = 0;
newMin = 0;
if('Bar' == mainObj.type)
{
for (var i=0; i<arrNew[j].length; i++) {
if(arrNew[j][i] > 0)
newMax += arrNew[j][i]
else
newMin += arrNew[j][i]
}
arrMin[j] = newMin;
arrMax[j] = newMax;
}
else
{
min = Math.min.apply(null, arrNew[j]);
max = Math.max.apply(null, arrNew[j]);
arrMin[j] = min;
arrMax[j] = max;
}
}
min = Math.min.apply(null, arrMin);
max = Math.max.apply(null, arrMax);
}
else
{
min = minVal;
max = maxVal;
}
newMin = min;
newMax = max;
//находим максимум после преобразования
if('Bar' != mainObj.type)
{
if(typeof(arrNew[0]) == 'object')
{
var arrMin = [];
var arrMax = [];
for (var j=0; j < arrNew.length; j++) {
newMin = Math.min.apply(null, arrNew[j]);
newMax = Math.max.apply(null, arrNew[j]);
arrMin[j] = newMin;
arrMax[j] = newMax;
}
newMin = Math.min.apply(null, arrMin);
newMax = Math.max.apply(null, arrMax);
}
else
{
newMin = Math.min.apply(null, arrNew);
newMax = Math.max.apply(null, arrNew);
}
}
if(max <= 0 && min < 0)
{
var tempVal = Math.abs(newMax)
newMax = Math.abs(newMin);
newMin = tempVal;
}
massRes = [];
//шаг нужно высчитывать
var step = 10;
if(((newMax - newMin)/10) > 11 )
step = 20;
if('Bar' == mainObj.type && max > 0 && min < 0)
step = 20;
var maxValue = 100;
//находим максимум
for (var i=0; i < 11; i++) {
if(newMax < 100 - step*i && newMax > 100 - step*(i+1))
maxValue = 100 - step*i;
}
if(maxValue > 100)
maxValue = 100;
//получаем массив
if(max <= 0 && min < 0)
{
if('Bar' == mainObj.type)
{
for (var j=0; j < 11; j++) {
massRes[j] = - (maxValue - step*j) / 100;
if(massRes[j] == 0)
{
break;
}
}
mainObj.xaxispos = 'top';
mainObj.ymax = massRes[massRes.length - 1];
mainObj.ymin = 0;
}
else
{
for (var j=0; j < 11; j++) {
massRes[j] = -(maxValue - step*j) / 100;
if(massRes[j] == 0)
{
break;
}
}
mainObj.ymax = 0;
mainObj.ymin = this._array_exp(massRes[0] - step);
}
}
else if(max > 0 && min > 0)
{
for (var j=0; j < 11; j++) {
massRes[j] = (maxValue - step*j) / 100;
if(massRes[j] == 0)
{
massRes = this._array_reverse(massRes);
break;
}
}
mainObj.ymax = this._array_exp(maxValue);
mainObj.ymin = this._array_exp(massRes[0] - step);
}
else
{
for (var j=0; j < 11; j++) {
massRes[j] = (maxValue - step*j) / 100;
if(massRes[j] <= newMin / 100)
{
massRes = this._array_reverse(massRes);
break;
}
}
mainObj.ymax = this._array_exp(maxValue);
mainObj.ymin = massRes[0] - step;
}
return this._array_exp(massRes);
},
_getScatterHbarAxisData : function(max, mainObj, minVal, maxVal, yminVal, ymaxVal)
{
//*** SCATTER / HBAR ****
var max1, min, greaterNullNum;
var arr = [];
//находим минимальное значение
var min;
var trueOX = false;
if('HBar' == mainObj.type)
{
trueOX = true;
if(typeof(mainObj.data[0]) == 'object')
{
var arrMin = [];
var arrMax = [];
for (var j=0; j < mainObj.data.length; j++) {
min = Math.min.apply(null, mainObj.data[j]);
max = Math.max.apply(null, mainObj.data[j]);
arrMin[j] = min;
arrMax[j] = max;
}
min = Math.min.apply(null, arrMin);
max = Math.max.apply(null, arrMax);
}
else
{
min = Math.min.apply(null, mainObj.data);
max = Math.max.apply(null, mainObj.data);
}
}
//в этом случае определяем значения для оси OX(max == true)
if(mainObj.type == 'Stock')
{
var arrTemp = []
var k = 0;
for (var j=0; j < mainObj.data[0].length; j++) {
for (var i=0; i<5; i++)
{
arrTemp[k] = mainObj.data[0][j][1][i];
k++;
}
}
min = Math.min.apply(null, arrTemp);
max = Math.max.apply(null, arrTemp);
if(min == max && max == 0)
{
mainObj._otherProps._ymax = 1;
mainObj._otherProps._ymin = 0;
return [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
}
if((min == 0 && max == 0) ||(isNaN(min) && isNaN(max)))
return [0, 0.2, 0.4, 0.6, 0.8, 1, 1.2];
}
if('Scatter' == mainObj.type)
{
if(undefined != max && true == max)
{
min = minVal;
max = maxVal;
trueOX = true;
}
else
{
min = yminVal;
max = ymaxVal;
}
if((min == 0 && max == 0) ||(isNaN(min) && isNaN(max)))
return [0, 0.2, 0.4, 0.6, 0.8, 1, 1.2];
}
var degreeNum = 1;
var maxString = max.toExponential();
var minString = min.toExponential();
var floatKoff = 1000000000000;
if(maxString.search('e-') != -1 || minString.search('e-') != -1)
{
var partMin = minString.split('e-');
var partMax = maxString.split('e-');
if(partMin[1] != undefined)
degreeNum = Math.pow(10, partMin[1])
if(partMax[1] != undefined && ((parseFloat(partMin[1]) < parseFloat(partMax[1])) || partMin[1] == undefined))
degreeNum = Math.pow(10, partMax[1])
max = this._round_val(max*degreeNum);
min = this._round_val(min*degreeNum);
}
var axisXMax;
var axisXMin;
var stepOY;
var checkInput = false;
var greaterNull;
var chackBelowNull = false;
var checkIsMaxMin = false;
var arrForRealDiff = [];
if((min == 0 && max == 0) ||(isNaN(min) && isNaN(max)))
{
if( mainObj.subType == 'stackedPer')
return [20, 40, 60, 80, 100];
else
return [0.2, 0.4, 0.6, 0.8, 1, 1.2];
}
//подготовительная работы для дальнейшего вычисления шага
if(max >= 0 && min >= 0)
{
if(max == min)
{
checkIsMaxMin = true;
min = 0;
}
var diffPerMaxMin = ((max - min)/max)*100;
axisXMax = max + 0.05 * (max - min);
stepOY = (max-min)/4;
if(16.667 > diffPerMaxMin)
{
if(trueOX)
{
axisXMin = min;
greaterNull = (max - min)/4;
arrForRealDiff = [1.59595959, 3.18181818, 7.954545454];
}
else
{
axisXMin = min;
greaterNull = (max - min)/6;
arrForRealDiff = [1.51515151, 3.03030303, 7.57575757];
}
}
else
{
if(trueOX)
{
greaterNull = max/4;
arrForRealDiff = [1.66666666, 3.33333333, 8.33333333];
axisXMin = 0;
}
else
{
axisXMin = 0;
}
}
}
else if(max <= 0 && min <= 0)
{
if(max == min)
{
checkIsMaxMin = true;
max = 0;
}
var tempMax = max;
if(!trueOX)
mainObj.xaxispos = 'top';
else
mainObj.yaxispos = 'right';
max = Math.abs(min);
min = Math.abs(tempMax);
checkInput = true;
var diffPerMaxMin = Math.abs(((max - min)/max))*100;
axisXMax = max;
stepOY = (max-min)/4;
chackBelowNull = true;
if(16.667 > diffPerMaxMin)
{
axisXMin = min;
greaterNull = Math.abs((Math.abs(max) - Math.abs(min)))/6;
arrForRealDiff = [1.51515151, 3.03030303, 7.57575757];
}
else
{
if(trueOX)
{
greaterNull = max/4;
arrForRealDiff = [1.66666666, 3.33333333, 8.33333333];
axisXMin = 0;
}
else
{
axisXMin = 0;
}
}
}
else if(max > 0 && min < 0)
{
stepOY = (max + Math.abs(min))/4;
axisXMax = max;
axisXMin = min;
if(trueOX)
{
greaterNull = (Math.abs(max) + Math.abs(min))/4;
arrForRealDiff = [1.59090909, 3.18181818, 7.954545454]
}
else
{
greaterNull = Math.abs((Math.abs(max) + Math.abs(min)))/6;
arrForRealDiff = [1.51515151, 3.03030303, 7.57575757]
}
}
//приводим к первому порядку для дальнейших вычислений
var secPart = max.toString().split('.');
var numPow = 1;
if(secPart[1] && secPart[1].toString().search('e+') != -1 && secPart[0] && secPart[0].toString().length == 1)
{
var expNum = secPart[1].toString().split('e+');
numPow = Math.pow(10, expNum[1]);
}
else if(0 != secPart[0])
numPow = Math.pow(10, secPart[0].toString().length - 1)
max = max/numPow;
if(0 == max.toString().split('.')[0])
{
var tempMax = max;
var num = -1;
while(0 == tempMax.toString().split('.')[0])
{
tempMax = max;
numPow = Math.pow(10, num);
tempMax = tempMax/numPow;
num--;
}
max = tempMax;
}
var stepOYPart = stepOY.toString().split('.');
var numPowOY;
var tempVal;
if(0 != stepOYPart[0])
numPowOY = Math.pow(10, stepOYPart[0].toString().length - 1)
if(10 == stepOYPart[0])
numPowOY = 1;
if(0 == stepOYPart[0])
{
var tempMax = stepOY;
var num = -1;
while(0 == tempMax.toString().split('.')[0])
{
tempMax = stepOY;
numPowOY = Math.pow(10, num);
tempMax = tempMax/numPowOY;
num--;
}
}
//поиск шага
if(undefined != greaterNull)
{
var greaterNullTemp = greaterNull.toString().split('.');
if(0 != greaterNullTemp[0])
greaterNullNum = Math.pow(10, greaterNullTemp[0].toString().length - 1)
if(0 == greaterNullTemp[0])
{
var tempMax = greaterNull;
var num = -1;
while(0 == tempMax.toString().split('.')[0])
{
tempMax = greaterNull;
greaterNullNum = Math.pow(10, num);
tempMax = tempMax/greaterNullNum;
num--;
}
}
else if(greaterNull.toString().indexOf("e+") > -1)
{
var splitString = greaterNull.toString().split("e+");
if(splitString[1])
greaterNullNum = Math.pow(10, parseFloat(splitString[1]));
}
greaterNull = greaterNull/greaterNullNum;
if(1 < greaterNull && arrForRealDiff[0] >= greaterNull)
greaterNull = 1;
else if(arrForRealDiff[0] < greaterNull && arrForRealDiff[1] >= greaterNull)
greaterNull = 2;
else if(arrForRealDiff[1] < greaterNull && arrForRealDiff[2] >= greaterNull)
greaterNull = 5;
else if(arrForRealDiff[2] < greaterNull && 10 >= greaterNull)
greaterNull = 10;
greaterNull = greaterNull*greaterNullNum;
stepOY = greaterNull;
}
arr[0] = 0;arr[1] = 1;arr[2] = 2;arr[3] = 5;arr[4] = 10;
//если максимальное значение больше числа из данного массива, меняем диапазон по оси OY
var arrMaxVal = [0, 0.952380952, 1.904761904, 4.76190476, 9.523809523]
//массив диапазонов
var arrDiffVal1 = [0, 0.2, 0.5, 1, 2]
if(axisXMin == 0 && undefined == greaterNull)//если разница между min и max такая, что не нужно масштабировать
{
var trueDiff = 1;
for (var i=0; i<arr.length; i++) {
if( max >= arr[i] && max <= arr[i+1])
{
var max1 = arr[i+1];
var trueMax;
var diff = max1/10;
trueDiff = diff;
var maxVal;
//проверяем есть ли переход в следующий диапазон
if(max > arrMaxVal[i+1])
{
trueDiff = arrDiffVal1[i+1]
}
}
}
stepOY = trueDiff*numPow;
}
if('HBar' == mainObj.type && mainObj.subType == 'stackedPer')
{
if(axisXMin < 0 && axisXMax > 0)
{
var summVal = Math.abs(axisXMin) + Math.abs(axisXMax)
if(summVal <= 100)
stepOY = 10;
else if(summVal > 100 && summVal <= 139)
stepOY = 20;
else
stepOY = 50;
}
else
{
stepOY = 20;
}
}
//находим истинные min и max
var testDiff;
var axisXMinTest;
if(axisXMin == 0)
{
testDiff = stepOY/numPow;
axisXMinTest = axisXMin/numPow
}
else
{
testDiff = stepOY/numPowOY;
axisXMinTest = axisXMin/numPowOY;
}
var tempNum;
var countAfterPoint = 1;
if(undefined != axisXMinTest.toString().split('.')[1])
{
countAfterPoint = Math.pow(10, axisXMinTest.toString().split('.')[1].toString().length - 1)
}
if(1 == testDiff)
tempNum = testDiff/4;
else if(2 == testDiff)
tempNum = testDiff/4;
else if(5 == testDiff)
tempNum = testDiff/10;
else if(10 == testDiff)
tempNum = testDiff/20;
axisXMinTest = Math.floor(axisXMinTest);
while(0 != axisXMinTest%testDiff)
{
axisXMinTest = axisXMinTest - tempNum;
}
//возвращаем массив
var varMin = axisXMinTest*numPowOY;
var massRes = [];
var tempKoff = 100000000000;
varMin = this._round_val(varMin);
var lengthNum;
if(!trueOX)
{
if(chackBelowNull)
{
if(min == varMin && !checkIsMaxMin && min != 0 )
varMin = varMin - stepOY ;
varMin = varMin/degreeNum;
stepOY = stepOY/degreeNum;
axisXMax = axisXMax/degreeNum;
max = max/degreeNum;
if(undefined != varMin.toString().split('.')[1])
lengthNum = varMin.toString().split('.')[1].length;
for (var k=0; k <= 11; k++) {
massRes[k] = - this._round_val(varMin + (k)*(stepOY));
if(Math.abs(massRes[k]) > axisXMax)
{
break;
}
}
/*if(massRes[massRes.length - 1] == max && !checkIsMaxMin)
massRes[massRes.length] = massRes[massRes.length - 1] + stepOY;
mainObj.ymax = -massRes[0];
mainObj.ymin = -massRes[massRes.length - 1];*/
massRes = this._array_reverse(massRes);
//mainObj.max = -massRes[0];
}
else
{
if(min == varMin && !checkIsMaxMin)
varMin = varMin - stepOY ;
if(undefined != varMin.toString().split('.')[1])
lengthNum = varMin.toString().split('.')[1].length;
varMin = varMin/degreeNum;
stepOY = stepOY/degreeNum;
axisXMax = axisXMax/degreeNum;
max = max/degreeNum;
if(min == 0 && (mainObj.type == 'Stock' || mainObj.type == 'Scatter'))
varMin = 0;
if(max == 0 && mainObj.type == 'Stock')
axisXMax = 0 + stepOY;
for (var k=0; k <= 11; k++) {
massRes[k] = this._round_val(varMin + (k)*(stepOY));
if(massRes[k] > axisXMax)
{
break;
}
}
if(massRes[massRes.length - 1] == max && !checkIsMaxMin)
massRes[massRes.length] = massRes[massRes.length - 1] + stepOY;
//mainObj.max = massRes[massRes.length - 1];
mainObj.ymax = massRes[massRes.length - 1];
mainObj.ymin = massRes[0];
}
}
else
{
if(chackBelowNull)
{
if(min == varMin && !checkIsMaxMin && min != 0)
varMin = varMin - stepOY ;
if(undefined != varMin.toString().split('.')[1])
lengthNum = varMin.toString().split('.')[1].length;
varMin = varMin/degreeNum;
stepOY = stepOY/degreeNum;
axisXMax = axisXMax/degreeNum;
max = max/degreeNum;
for (var k=0; k <= 11; k++) {
massRes[k] = - this._round_val(varMin + (k)*(stepOY));
if('HBar' == mainObj.type && mainObj.subType == 'stackedPer')
{
massRes[k] = massRes[k] / 100;
if(Math.abs(massRes[k]) >= axisXMax / 100)
{
break;
}
}
else
{
if(Math.abs(massRes[k]) > axisXMax)
{
break;
}
}
}
massRes = this._array_reverse(massRes);
}
else
{
if(min == varMin && !checkIsMaxMin && 'HBar' != mainObj.type && mainObj.subType != 'stackedPer')
varMin = varMin - stepOY ;
if(undefined != varMin.toString().split('.')[1])
lengthNum = varMin.toString().split('.')[1].length;
varMin = varMin/degreeNum;
stepOY = stepOY/degreeNum;
axisXMax = axisXMax/degreeNum;
max = max/degreeNum;
for (var k=0; k <= 11; k++) {
massRes[k] = this._round_val(parseFloat(varMin + (k)*(stepOY)));
if('HBar' == mainObj.type && mainObj.subType == 'stackedPer')
{
massRes[k] = massRes[k] / 100;
if(massRes[k] >= axisXMax / 100 || massRes[k] >= 1)
{
break;
}
}
else
{
if(massRes[k] > axisXMax)
{
break;
}
}
}
if(massRes[massRes.length - 1] == max && !checkIsMaxMin && !('HBar' == mainObj.type && mainObj.subType == 'stackedPer'))
massRes[massRes.length] = massRes[massRes.length - 1] + stepOY;
}
}
return this._array_exp(massRes);
},
_getAnotherChartAxisData : function(max, mainObj, minVal, maxVal, yminVal, ymaxVal)
{
//***ANOTHER CHARTS***
var max1;
var arr = [];
//находим минимальное значение
var min, max, greaterNullNum, lengthNum;
if('Bar' == mainObj.type)
{
if(mainObj.subType == 'stacked')
{
//суммируем отрицательные и положительные значения
if(typeof(mainObj.data[0]) == 'object')
{
var arrMin = [];
var arrMax = [];
for (var j=0; j < mainObj.data.length; j++) {
var allHeightAbNull = 0;
var allHeightLessNull = 0;
for (var i=0; i < mainObj.data[j].length; i++)
{
if(mainObj.data[j][i] > 0)
allHeightAbNull += mainObj.data[j][i];
else
allHeightLessNull += mainObj.data[j][i];
}
arrMin[j] = allHeightLessNull;
arrMax[j] = allHeightAbNull;
}
min = Math.min.apply(null, arrMin);
max = Math.max.apply(null, arrMax);
}
else
{
min = Math.min.apply(null, mainObj.data);
max = Math.max.apply(null, mainObj.data);
}
}
else
{
min = minVal;
max = maxVal;
}
}
else
{
if(('Line' == mainObj.type && mainObj.subType == 'stacked' ) || 'Line' != mainObj.type )
{
var arrMin = [];
var arrMax = [];
for (var j=0; j<mainObj.data.length; j++) {
min = Math.min.apply(null, mainObj.data[j]);
max = Math.max.apply(null, mainObj.data[j]);
arrMin[j] = min;
arrMax[j] = max;
}
min = Math.min.apply(null, arrMin);
max = Math.max.apply(null, arrMax);
}
else
{
min = minVal;
max = maxVal;
}
}
if(max == min)
{
if(max > 0)
min = 0;
else if(max < 0)
max = 0;
}
var degreeNum = 1;
var maxString = max.toExponential();
var minString = min.toExponential();
var floatKoff = 10000000000;
if(maxString.search('e-') != -1 || minString.search('e-') != -1)
{
var partMin = minString.split('e-');
var partMax = maxString.split('e-');
if(partMin[1] != undefined)
degreeNum = Math.pow(10, partMin[1])
if(partMax[1] != undefined && (parseFloat(partMin[1]) < parseFloat(partMax[1])))
degreeNum = Math.pow(10, partMax[1])
max = this._round_val(max*degreeNum);
min = this._round_val(min*degreeNum);
}
var axisXMax;
var axisXMin;
var stepOY;
var checkInput = false;
var greaterNull;
var firstMax = max;
var firstMin = min;
var arrForRealDiff = [];
if(max >= 0 && min >= 0)
{
var diffPerMaxMin = ((max - min)/max)*100;
axisXMax = max + 0.05 * (max - min);
stepOY = (max-min)/4;
if(16.667 > diffPerMaxMin)
{
axisXMin = min - ((max - min) / 2);
greaterNull = (max - min)/4;
arrForRealDiff = [1.5873, 3.1745, 7.93651]
}
else
{
axisXMin = 0;
}
}
else if(max <= 0 && min <= 0)
{
var tempMax = max;
mainObj.xaxispos = 'top';
max = Math.abs(min);
min = Math.abs(tempMax);
checkInput = true;
var diffPerMaxMin = ((max - min)/max)*100;
axisXMax = max + 0.05 * (max - min);
stepOY = (max-min)/4;
if(16.667 > diffPerMaxMin)
{
axisXMin = min - ((max - min) / 2);
greaterNull = (max - min)/4;
arrForRealDiff = [1.5873, 3.1745, 7.93651]
}
else
{
axisXMin = 0;
}
}
else if(max > 0 && min < 0)
{
stepOY = (max + Math.abs(min))/4;
axisXMax = max + 0.05 * (max - min);
axisXMin = min + 0.05 * (min - max);
greaterNull = (Math.abs(max) + Math.abs(min))/6;
arrForRealDiff = [1.51515151, 3.03030303, 7.57575757]
}
//приведение к первому порядку для дальнейших вычислений
var secPart = max.toString().split('.');
var numPow = 1;
if(secPart[1] && secPart[1].toString().search('e+') != -1 && secPart[0] && secPart[0].toString().length == 1)
{
var expNum = secPart[1].toString().split('e+');
numPow = Math.pow(10, expNum[1]);
}
else if(0 != secPart[0])
numPow = Math.pow(10, secPart[0].toString().length - 1)
max = max/numPow;
if((min == 0 && max == 0) ||(isNaN(min) && isNaN(max)))
return [0.2, 0.4, 0.6, 0.8, 1, 1.2];
if(0 == max.toString().split('.')[0])
{
var tempMax = max;
var num = -1;
while(0 == tempMax.toString().split('.')[0])
{
tempMax = max;
numPow = Math.pow(10, num);
tempMax = tempMax/numPow;
num--;
}
max = tempMax;
}
var stepOYPart = stepOY.toString().split('.');
var numPowOY;
var tempVal;
if(0 != stepOYPart[0])
numPowOY = Math.pow(10, stepOYPart[0].toString().length - 1)
if(10 == stepOYPart[0])
numPowOY = 1;
if(0 == stepOYPart[0])
{
var tempMax = stepOY;
var num = -1;
while(0 == tempMax.toString().split('.')[0])
{
tempMax = stepOY;
numPowOY = Math.pow(10, num);
tempMax = tempMax/numPowOY;
num--;
}
}
//поиск шага
if(undefined != greaterNull)
{
var greaterNullTemp = greaterNull.toString().split('.');
if(0 != greaterNullTemp[0])
greaterNullNum = Math.pow(10, greaterNullTemp[0].toString().length - 1)
if(0 == greaterNullTemp[0])
{
var tempMax = greaterNull;
var num = -1;
while(0 == tempMax.toString().split('.')[0])
{
tempMax = greaterNull;
greaterNullNum = Math.pow(10, num);
tempMax = tempMax/greaterNullNum;
num--;
}
}
greaterNull = greaterNull/greaterNullNum;
if(1 < greaterNull && arrForRealDiff[0] >= greaterNull)
greaterNull = 1;
else if(arrForRealDiff[0] < greaterNull && arrForRealDiff[1] >= greaterNull)
greaterNull = 2;
else if(arrForRealDiff[1] < greaterNull && arrForRealDiff[2] >= greaterNull)
greaterNull = 5;
else if(arrForRealDiff[2] < greaterNull && 10 >= greaterNull)
greaterNull = 10;
greaterNull = greaterNull*greaterNullNum;
stepOY = greaterNull;
}
arr[0] = 0;arr[1] = 1;arr[2] = 2;arr[3] = 5;arr[4] = 10;
//если максимальное значение больше числа из данного массива, меняем диапазон по оси OY
var arrMaxVal = [0, 0.952380952, 1.904761904, 4.76190476, 9.523809523]
//массив диапазонов
var arrDiffVal1 = [0,0.2,0.5,1,2]
if(axisXMin == 0)//если разница между min и max такая, что не нужно масштабировать
{
var trueDiff = 1;
for (var i=0; i<arr.length; i++) {
if( max >= arr[i] && max <= arr[i+1])
{
var max1 = arr[i+1];
var trueMax;
var diff = max1/10;
trueDiff = diff;
var maxVal;
//проверяем есть ли переход в следующий диапазон
if(max > arrMaxVal[i+1])
{
trueDiff = arrDiffVal1[i+1]
}
}
}
stepOY = trueDiff*numPow;
}
stepOY = this._round_val(stepOY);
//находим истинные min и max
var testDiff;
var axisXMinTest;
if(axisXMin == 0)
{
testDiff = stepOY/numPow;
axisXMinTest = axisXMin/numPow
}
else
{
testDiff = stepOY/numPowOY;
axisXMinTest = axisXMin/numPowOY;
}
var tempNum;
var countAfterPoint = 1;
if(undefined != axisXMinTest.toString().split('.')[1])
{
countAfterPoint = Math.pow(10, axisXMinTest.toString().split('.')[1].toString().length - 1)
}
var floatKoff = 10000000000;
if(0.5 == testDiff)
tempNum = testDiff/5;
else if(1 == testDiff)
tempNum = testDiff/4;
else if(2 == testDiff)
tempNum = testDiff/4;
else if(5 == testDiff)
tempNum = testDiff/10;
else
tempNum = testDiff/20;
if(testDiff != 0.5)
axisXMinTest = Math.floor(axisXMinTest);
else
{
axisXMinTest = Math.round(axisXMinTest*100)/100;
if(axisXMinTest.toString().split('.')[1] != undefined)
{
var lengthAfterPoint = axisXMinTest.toString().split('.')[1].length;
var l = 0;
while(axisXMinTest.toString().split('.')[1].length != 1)
{
axisXMinTest = axisXMinTest - Math.pow(10,-(lengthAfterPoint));
if(l > 9)
{
axisXMinTest = Math.floor(axisXMinTest);
break;
}
l++;
}
}
}
while(0 != axisXMinTest%testDiff)
{
axisXMinTest = axisXMinTest - tempNum;
if(testDiff == 0.5)
{
axisXMinTest = this._round_val(axisXMinTest);
}
}
//возвращаем массив
var varMin = axisXMinTest*numPowOY;
var massRes = [];
var tempKoff = 100000000000000;
varMin = this._round_val(varMin);
if(undefined != varMin.toString().split('.')[1])
lengthNum = varMin.toString().split('.')[1].length;
if(('Radar' == mainObj.type || 'Line' == mainObj.type) && max > 0 && min < 0)
{
varMin = varMin/degreeNum;
stepOY = stepOY/degreeNum;
axisXMax = axisXMax/degreeNum;
for (var k=0; k <= 11; k++) {
massRes[k] = this._round_val((parseFloat(varMin + (k)*(stepOY))));
if(massRes[k] > axisXMax)
{
break;
}
}
}
else
{
varMin = varMin/degreeNum;
stepOY = stepOY/degreeNum;
axisXMax = axisXMax/degreeNum;
for (var k=0; k <= 11; k++) {
massRes[k] = this._round_val((varMin + (k)*(stepOY)));
if(minVal < 0 && maxVal <= 0)
{
massRes[k] = - massRes[k];
if(Math.abs(massRes[k]) > axisXMax)
{
break;
}
}
if(massRes[k] > axisXMax)
{
break;
}
}
if(minVal < 0 && maxVal <= 0)
massRes = this._array_reverse(massRes);
}
if('line' == mainObj.type && max > 0 && min < 0)
{
mainObj.ymax = massRes[massRes.length - 1];
mainObj.ymin = this._round_val(this._array_exp(massRes[0] - stepOY));
}
else
{
mainObj.ymax = massRes[massRes.length - 1];
mainObj.ymin = this._round_val(this._array_exp(massRes[0] - stepOY));
}
return this._array_exp(massRes);
},
//****new calculate data****
_calculateStackedData2: function()
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment