|
|
|
@ -2271,9 +2271,51 @@ Licensed under the MIT license. |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function drawOrphanedPoints(series) { |
|
|
|
|
/* Filters series data for points with no neighbors before or after |
|
|
|
|
* and plots single 0.5 radius points for them so that they are displayed.
|
|
|
|
|
*/ |
|
|
|
|
var abandonedPoints = []; |
|
|
|
|
var beforeX = null; |
|
|
|
|
var afterX = null; |
|
|
|
|
var datapoints = series.datapoints; |
|
|
|
|
// find any points with no neighbors before or after
|
|
|
|
|
var emptyPoints = []; |
|
|
|
|
for (var j = 0; j < datapoints.pointsize - 2; j++) { |
|
|
|
|
emptyPoints.push(0); |
|
|
|
|
} |
|
|
|
|
for (var i = 0; i < datapoints.points.length; i += datapoints.pointsize) { |
|
|
|
|
var x = datapoints.points[i], y = datapoints.points[i + 1]; |
|
|
|
|
if (i === datapoints.points.length - datapoints.pointsize) { |
|
|
|
|
afterX = null; |
|
|
|
|
} else { |
|
|
|
|
afterX = datapoints.points[i + datapoints.pointsize]; |
|
|
|
|
} |
|
|
|
|
if (x !== null && y !== null && beforeX === null && afterX === null) { |
|
|
|
|
abandonedPoints.push(x); |
|
|
|
|
abandonedPoints.push(y); |
|
|
|
|
abandonedPoints.push.apply(abandonedPoints, emptyPoints); |
|
|
|
|
} |
|
|
|
|
beforeX = x; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
var olddatapoints = datapoints.points |
|
|
|
|
datapoints.points = abandonedPoints; |
|
|
|
|
|
|
|
|
|
series.points.radius = series.lines.lineWidth/2; |
|
|
|
|
// plot the orphan points with a radius of lineWidth/2
|
|
|
|
|
drawSeriesPoints(series); |
|
|
|
|
// reset old info
|
|
|
|
|
datapoints.points = olddatapoints; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function drawSeries(series) { |
|
|
|
|
if (series.lines.show) |
|
|
|
|
drawSeriesLines(series); |
|
|
|
|
if (!series.points.show && !series.bars.show) { |
|
|
|
|
// not necessary if user wants points displayed for everything
|
|
|
|
|
drawOrphanedPoints(series); |
|
|
|
|
} |
|
|
|
|
if (series.bars.show) |
|
|
|
|
drawSeriesBars(series); |
|
|
|
|
if (series.points.show) |
|
|
|
|