|
|
|
@ -992,7 +992,7 @@
|
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
if (isNaN(d.endAngle)) { |
|
|
|
|
d.endAngle = d.startAngle; |
|
|
|
|
d.endAngle = d.startAngle; |
|
|
|
|
} |
|
|
|
|
if (isGaugeType(d.data)) { |
|
|
|
|
var sA = d.startAngle, eA = d.endAngle; |
|
|
|
@ -1000,7 +1000,7 @@
|
|
|
|
|
gF = Math.abs(gMin) + gMax, fA = Math.abs(sA) + eA, |
|
|
|
|
aTic = (Math.PI) / gF; |
|
|
|
|
d.startAngle = (-1 * (Math.PI / 2)) + (aTic * Math.abs(gMin)); |
|
|
|
|
d.endAngle = d.startAngle + (aTic * ((d.value > gMax) ? gMax : d.value )); |
|
|
|
|
d.endAngle = d.startAngle + (aTic * ((d.value > gMax) ? gMax : d.value)); |
|
|
|
|
} |
|
|
|
|
return found ? d : null; |
|
|
|
|
} |
|
|
|
@ -1041,7 +1041,7 @@
|
|
|
|
|
return translate; |
|
|
|
|
} |
|
|
|
|
function getArcRatio(d) { |
|
|
|
|
var whole = __gauge_style == 'arc' ? Math.PI : (Math.PI * 2); |
|
|
|
|
var whole = __gauge_style === 'arc' ? Math.PI : (Math.PI * 2); |
|
|
|
|
return d ? (d.endAngle - d.startAngle) / whole : null; |
|
|
|
|
} |
|
|
|
|
function convertToArcData(d) { |
|
|
|
@ -2257,13 +2257,13 @@
|
|
|
|
|
return function (value) { |
|
|
|
|
for (var a = 1; a < levels.length; a++) { |
|
|
|
|
if (levels[0] === 'percentage' && ((value / __gauge_max) * 100) < levels[a]) { |
|
|
|
|
return colors[a-1]; |
|
|
|
|
return colors[a - 1]; |
|
|
|
|
} |
|
|
|
|
if (levels[0] === 'whole' && value < levels[a]) { |
|
|
|
|
return colors[a-1]; |
|
|
|
|
return colors[a - 1]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return colors[colors.length-1]; |
|
|
|
|
return colors[colors.length - 1]; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -2440,44 +2440,44 @@
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function generateDrawArea(areaIndices, isSub) { |
|
|
|
|
var area, |
|
|
|
|
getPoint = generateGetAreaPoint(areaIndices, isSub), |
|
|
|
|
yScaleGetter = isSub ? getSubYScale : getYScale; |
|
|
|
|
|
|
|
|
|
if (__axis_rotated) { |
|
|
|
|
area = d3.svg.area() |
|
|
|
|
.x0(function (d, i) { return yScaleGetter(d.id)(0); }) |
|
|
|
|
.x1(function (d, i) { return yScaleGetter(d.id)(d.value); }) |
|
|
|
|
.y(xx); |
|
|
|
|
} else { |
|
|
|
|
area = d3.svg.area() |
|
|
|
|
.x(xx) |
|
|
|
|
.y0(function (d, i) { if (__data_groups.length > 0) { var point = getPoint(d,i); return point[0][1]; } return yScaleGetter(d.id)(0); }) |
|
|
|
|
.y1(function (d, i) { if (__data_groups.length > 0) { var point = getPoint(d,i); return point[1][1]; } return yScaleGetter(d.id)(d.value); }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return function (d, i) { |
|
|
|
|
var data = filterRemoveNull(d.values), x0, y0; |
|
|
|
|
|
|
|
|
|
if (hasType([d], 'area') || hasType([d], 'area-spline')) { |
|
|
|
|
isSplineType(d) ? area.interpolate("cardinal") : area.interpolate("linear"); |
|
|
|
|
return area(data); |
|
|
|
|
} else if (hasType([d], 'area-step')) { |
|
|
|
|
isStepType(d) ? area.interpolate("step-after") : area.interpolate("linear"); |
|
|
|
|
return area(data); |
|
|
|
|
} else { |
|
|
|
|
x0 = x(data[0].x); |
|
|
|
|
y0 = getYScale(d.id)(data[0].value); |
|
|
|
|
return __axis_rotated ? "M " + y0 + " " + x0 : "M " + x0 + " " + y0; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
var area, |
|
|
|
|
getPoint = generateGetAreaPoint(areaIndices, isSub), |
|
|
|
|
yScaleGetter = isSub ? getSubYScale : getYScale; |
|
|
|
|
|
|
|
|
|
if (__axis_rotated) { |
|
|
|
|
area = d3.svg.area() |
|
|
|
|
.x0(function (d, i) { return yScaleGetter(d.id)(0); }) |
|
|
|
|
.x1(function (d, i) { return yScaleGetter(d.id)(d.value); }) |
|
|
|
|
.y(xx); |
|
|
|
|
} else { |
|
|
|
|
area = d3.svg.area() |
|
|
|
|
.x(xx) |
|
|
|
|
.y0(function (d, i) { if (__data_groups.length > 0) { var point = getPoint(d, i); return point[0][1]; } return yScaleGetter(d.id)(0); }) |
|
|
|
|
.y1(function (d, i) { if (__data_groups.length > 0) { var point = getPoint(d, i); return point[1][1]; } return yScaleGetter(d.id)(d.value); }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return function (d, i) { |
|
|
|
|
var data = filterRemoveNull(d.values), x0, y0; |
|
|
|
|
|
|
|
|
|
if (hasType([d], 'area') || hasType([d], 'area-spline')) { |
|
|
|
|
isSplineType(d) ? area.interpolate("cardinal") : area.interpolate("linear"); |
|
|
|
|
return area(data); |
|
|
|
|
} else if (hasType([d], 'area-step')) { |
|
|
|
|
isStepType(d) ? area.interpolate("step-after") : area.interpolate("linear"); |
|
|
|
|
return area(data); |
|
|
|
|
} else { |
|
|
|
|
x0 = x(data[0].x); |
|
|
|
|
y0 = getYScale(d.id)(data[0].value); |
|
|
|
|
return __axis_rotated ? "M " + y0 + " " + x0 : "M " + x0 + " " + y0; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function generateDrawLine(lineIndices, isSub) { |
|
|
|
|
var getPoint = generateGetLinePoint(lineIndices, isSub), |
|
|
|
|
yScaleGetter = isSub ? getSubYScale : getYScale, |
|
|
|
|
xValue = isSub ? subxx : xx, |
|
|
|
|
yValue = function (d,i) { if (__data_groups.length > 0) { var point = getPoint(d,i); return point[0][1]; } return yScaleGetter(d.id)(d.value); }, |
|
|
|
|
yValue = function (d, i) { if (__data_groups.length > 0) { var point = getPoint(d, i); return point[0][1]; } return yScaleGetter(d.id)(d.value); }, |
|
|
|
|
line = d3.svg.line() |
|
|
|
|
.x(__axis_rotated ? yValue : xValue) |
|
|
|
|
.y(__axis_rotated ? xValue : yValue); |
|
|
|
@ -2550,25 +2550,25 @@
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function generateGetAreaPoint(areaIndices, isSub) { // partial duplication of generateGetBarPoints
|
|
|
|
|
var areaTargetsNum = areaIndices.__max__ + 1, |
|
|
|
|
x = getAreaX(areaTargetsNum, areaIndices, !!isSub), |
|
|
|
|
y = getAreaY(!!isSub), |
|
|
|
|
areaOffset = getAreaOffset(areaIndices, !!isSub), |
|
|
|
|
yScale = isSub ? getSubYScale : getYScale; |
|
|
|
|
return function (d, i) { |
|
|
|
|
var y0 = yScale(d.id)(0), |
|
|
|
|
offset = areaOffset(d, i) || y0, // offset is for stacked area chart
|
|
|
|
|
posX = x(d), posY = y(d); |
|
|
|
|
// fix posY not to overflow opposite quadrant
|
|
|
|
|
if (__axis_rotated) { |
|
|
|
|
if ((d.value > 0 && posY < offset) || (d.value < 0 && posY > offset)) { posY = offset; } |
|
|
|
|
} |
|
|
|
|
// 1 point that marks the area position
|
|
|
|
|
return [ |
|
|
|
|
[posX, offset], |
|
|
|
|
[posX, posY - (y0 - offset)] |
|
|
|
|
]; |
|
|
|
|
}; |
|
|
|
|
var areaTargetsNum = areaIndices.__max__ + 1, |
|
|
|
|
x = getAreaX(areaTargetsNum, areaIndices, !!isSub), |
|
|
|
|
y = getAreaY(!!isSub), |
|
|
|
|
areaOffset = getAreaOffset(areaIndices, !!isSub), |
|
|
|
|
yScale = isSub ? getSubYScale : getYScale; |
|
|
|
|
return function (d, i) { |
|
|
|
|
var y0 = yScale(d.id)(0), |
|
|
|
|
offset = areaOffset(d, i) || y0, // offset is for stacked area chart
|
|
|
|
|
posX = x(d), posY = y(d); |
|
|
|
|
// fix posY not to overflow opposite quadrant
|
|
|
|
|
if (__axis_rotated) { |
|
|
|
|
if ((d.value > 0 && posY < offset) || (d.value < 0 && posY > offset)) { posY = offset; } |
|
|
|
|
} |
|
|
|
|
// 1 point that marks the area position
|
|
|
|
|
return [ |
|
|
|
|
[posX, offset], |
|
|
|
|
[posX, posY - (y0 - offset)] |
|
|
|
|
]; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function generateGetBarPoints(barIndices, isSub) { |
|
|
|
@ -2597,24 +2597,24 @@
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function generateGetLinePoint(lineIndices, isSub) { // partial duplication of generateGetBarPoints
|
|
|
|
|
var lineTargetsNum = lineIndices.__max__ + 1, |
|
|
|
|
x = getLineX(lineTargetsNum, lineIndices, !!isSub), |
|
|
|
|
y = getLineY(!!isSub), |
|
|
|
|
lineOffset = getLineOffset(lineIndices, !!isSub), |
|
|
|
|
yScale = isSub ? getSubYScale : getYScale; |
|
|
|
|
return function (d, i) { |
|
|
|
|
var y0 = yScale(d.id)(0), |
|
|
|
|
offset = lineOffset(d, i) || y0, // offset is for stacked area chart
|
|
|
|
|
posX = x(d), posY = y(d); |
|
|
|
|
// fix posY not to overflow opposite quadrant
|
|
|
|
|
if (__axis_rotated) { |
|
|
|
|
if ((d.value > 0 && posY < offset) || (d.value < 0 && posY > offset)) { posY = offset; } |
|
|
|
|
} |
|
|
|
|
// 1 point that marks the line position
|
|
|
|
|
return [ |
|
|
|
|
[posX, posY - (y0 - offset)] |
|
|
|
|
]; |
|
|
|
|
}; |
|
|
|
|
var lineTargetsNum = lineIndices.__max__ + 1, |
|
|
|
|
x = getLineX(lineTargetsNum, lineIndices, !!isSub), |
|
|
|
|
y = getLineY(!!isSub), |
|
|
|
|
lineOffset = getLineOffset(lineIndices, !!isSub), |
|
|
|
|
yScale = isSub ? getSubYScale : getYScale; |
|
|
|
|
return function (d, i) { |
|
|
|
|
var y0 = yScale(d.id)(0), |
|
|
|
|
offset = lineOffset(d, i) || y0, // offset is for stacked area chart
|
|
|
|
|
posX = x(d), posY = y(d); |
|
|
|
|
// fix posY not to overflow opposite quadrant
|
|
|
|
|
if (__axis_rotated) { |
|
|
|
|
if ((d.value > 0 && posY < offset) || (d.value < 0 && posY > offset)) { posY = offset; } |
|
|
|
|
} |
|
|
|
|
// 1 point that marks the line position
|
|
|
|
|
return [ |
|
|
|
|
[posX, posY - (y0 - offset)] |
|
|
|
|
]; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function lineWithRegions(d, x, y, _regions) { |
|
|
|
@ -2843,14 +2843,14 @@
|
|
|
|
|
updateLegend(mapToIds(c3.data.targets), {withTransform: false, withTransitionForTransform: false}); |
|
|
|
|
|
|
|
|
|
/*-- Main Region --*/ |
|
|
|
|
if (c3.data.targets.length == 0) { |
|
|
|
|
main.append("text") |
|
|
|
|
.attr("class", CLASS.text) |
|
|
|
|
.attr("x", (main[0][0].parentNode.width.baseVal.value / 2) - margin.left) |
|
|
|
|
.attr("y", (main[0][0].parentNode.height.baseVal.value / 2) - margin.top) |
|
|
|
|
.attr("text-anchor", "middle") |
|
|
|
|
.attr("style", (__data_empty_label_fill ? "fill:"+ __data_empty_label_fill +"; " : "") + (__data_empty_label_size ? "font-size:"+ __data_empty_label_size +"; " : "") ) |
|
|
|
|
.text(__data_empty_label_text); |
|
|
|
|
if (c3.data.targets.length === 0) { |
|
|
|
|
main.append("text") |
|
|
|
|
.attr("class", CLASS.text) |
|
|
|
|
.attr("x", (main[0][0].parentNode.width.baseVal.value / 2) - margin.left) |
|
|
|
|
.attr("y", (main[0][0].parentNode.height.baseVal.value / 2) - margin.top) |
|
|
|
|
.attr("text-anchor", "middle") |
|
|
|
|
.attr("style", (__data_empty_label_fill ? "fill:" + __data_empty_label_fill + "; " : "") + (__data_empty_label_size ? "font-size:" + __data_empty_label_size + "; " : "")) |
|
|
|
|
.text(__data_empty_label_text); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Grids
|
|
|
|
@ -3722,18 +3722,18 @@
|
|
|
|
|
mainArc = main.selectAll('.' + CLASS.arcs).selectAll('.' + CLASS.arc) |
|
|
|
|
.data(arcData); |
|
|
|
|
if (__gauge_style === "arc") { |
|
|
|
|
mainArc.enter().append("path") |
|
|
|
|
.attr("class", "") |
|
|
|
|
.style("opacity", 1) |
|
|
|
|
.style("fill", __gauge_color) // Where background color would receive customization.
|
|
|
|
|
.style("cursor", "pointer") |
|
|
|
|
.attr("transform", "scale(1,1)") |
|
|
|
|
.attr("d", function (d) { |
|
|
|
|
d.value = __gauge_max; |
|
|
|
|
d.startAngle = -1*(Math.PI/2); |
|
|
|
|
d.endAngle = Math.PI/2; |
|
|
|
|
return getArc(d, true); |
|
|
|
|
}); |
|
|
|
|
mainArc.enter().append("path") |
|
|
|
|
.attr("class", "") |
|
|
|
|
.style("opacity", 1) |
|
|
|
|
.style("fill", __gauge_color) // Where background color would receive customization.
|
|
|
|
|
.style("cursor", "pointer") |
|
|
|
|
.attr("transform", "scale(1,1)") |
|
|
|
|
.attr("d", function (d) { |
|
|
|
|
d.value = __gauge_max; |
|
|
|
|
d.startAngle = -1 * (Math.PI / 2); |
|
|
|
|
d.endAngle = Math.PI / 2; |
|
|
|
|
return getArc(d, true); |
|
|
|
|
}); |
|
|
|
|
mainArc.exit().transition().duration(durationForExit) |
|
|
|
|
.style('opacity', 0) |
|
|
|
|
.remove(); |
|
|
|
|