Commit c1f4e97a authored by Masayuki Tanaka's avatar Masayuki Tanaka

Introduce tickInterval and fix bar and event width - #945

parent c3855df1
...@@ -2630,21 +2630,7 @@ ...@@ -2630,21 +2630,7 @@
}; };
c3_chart_internal_fn.getEventRectWidth = function () { c3_chart_internal_fn.getEventRectWidth = function () {
var $$ = this; return this.xAxis.tickInterval();
var target = $$.getMaxDataCountTarget($$.data.targets),
firstData, lastData, base, maxDataCount, ratio, w;
if (!target) {
return 0;
}
firstData = target.values[0], lastData = target.values[target.values.length - 1];
base = $$.x(lastData.x) - $$.x(firstData.x);
if (base === 0) {
return $$.config.axis_rotated ? $$.height : $$.width;
}
maxDataCount = $$.getMaxDataCount();
ratio = ($$.hasType('bar') ? (maxDataCount - ($$.isCategorized() ? 0.25 : 1)) / maxDataCount : 1);
w = maxDataCount > 1 ? (base * ratio) / (maxDataCount - 1) : base;
return w < 1 ? 1 : w;
}; };
c3_chart_internal_fn.getShapeIndices = function (typeFilter) { c3_chart_internal_fn.getShapeIndices = function (typeFilter) {
...@@ -3141,7 +3127,7 @@ ...@@ -3141,7 +3127,7 @@
}; };
c3_chart_internal_fn.getBarW = function (axis, barTargetsNum) { c3_chart_internal_fn.getBarW = function (axis, barTargetsNum) {
var $$ = this, config = $$.config, var $$ = this, config = $$.config,
w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? (axis.tickOffset() * 2 * config.bar_width_ratio) / barTargetsNum : 0; w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? (axis.tickInterval() * config.bar_width_ratio) / barTargetsNum : 0;
return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w; return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w;
}; };
c3_chart_internal_fn.getBars = function (i, id) { c3_chart_internal_fn.getBars = function (i, id) {
...@@ -4145,14 +4131,6 @@ ...@@ -4145,14 +4131,6 @@
if (isEmpty(config.axis_x_tick_culling)) { if (isEmpty(config.axis_x_tick_culling)) {
config.axis_x_tick_culling = false; config.axis_x_tick_culling = false;
} }
} else {
// TODO: move this to c3_axis
axis.tickOffset = function () {
var scale = this.scale(),
edgeX = $$.getEdgeX($$.data.targets), diff = scale(edgeX[1]) - scale(edgeX[0]),
base = diff ? diff : (config.axis_rotated ? $$.height : $$.width);
return (base / $$.getMaxDataCount()) / 2;
};
} }
return axis; return axis;
...@@ -6633,6 +6611,7 @@ ...@@ -6633,6 +6611,7 @@
var scale = d3.scale.linear(), orient = "bottom", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments; var scale = d3.scale.linear(), orient = "bottom", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments;
var tickOffset = 0, tickCulling = true, tickCentered; var tickOffset = 0, tickCulling = true, tickCentered;
var axis_g;
params = params || {}; params = params || {};
outerTickSize = params.withOuterTick ? 6 : 0; outerTickSize = params.withOuterTick ? 6 : 0;
...@@ -6699,6 +6678,7 @@ ...@@ -6699,6 +6678,7 @@
return size; return size;
} }
function axis(g) { function axis(g) {
axis_g = g;
g.each(function () { g.each(function () {
var g = d3.select(this); var g = d3.select(this);
var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = copyScale(); var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = copyScale();
...@@ -6883,9 +6863,20 @@ ...@@ -6883,9 +6863,20 @@
tickCentered = isCentered; tickCentered = isCentered;
return axis; return axis;
}; };
axis.tickOffset = function () { // This will be overwritten when normal x axis axis.tickOffset = function () {
return tickOffset; return tickOffset;
}; };
axis.tickInterval = function () {
var interval, length;
if (params.isCategory) {
interval = tickOffset * 2;
}
else {
length = axis_g.select('path.domain').node().getTotalLength() - outerTickSize * 2;
interval = length / axis_g.selectAll('line').size();
}
return interval;
};
axis.ticks = function () { axis.ticks = function () {
if (!arguments.length) { return tickArguments; } if (!arguments.length) { return tickArguments; }
tickArguments = arguments; tickArguments = arguments;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -52,14 +52,6 @@ c3_chart_internal_fn.getXAxis = function (scale, orient, tickFormat, tickValues, ...@@ -52,14 +52,6 @@ c3_chart_internal_fn.getXAxis = function (scale, orient, tickFormat, tickValues,
if (isEmpty(config.axis_x_tick_culling)) { if (isEmpty(config.axis_x_tick_culling)) {
config.axis_x_tick_culling = false; config.axis_x_tick_culling = false;
} }
} else {
// TODO: move this to c3_axis
axis.tickOffset = function () {
var scale = this.scale(),
edgeX = $$.getEdgeX($$.data.targets), diff = scale(edgeX[1]) - scale(edgeX[0]),
base = diff ? diff : (config.axis_rotated ? $$.height : $$.width);
return (base / $$.getMaxDataCount()) / 2;
};
} }
return axis; return axis;
......
...@@ -7,6 +7,7 @@ function c3_axis(d3, params) { ...@@ -7,6 +7,7 @@ function c3_axis(d3, params) {
var scale = d3.scale.linear(), orient = "bottom", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments; var scale = d3.scale.linear(), orient = "bottom", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments;
var tickOffset = 0, tickCulling = true, tickCentered; var tickOffset = 0, tickCulling = true, tickCentered;
var axis_g;
params = params || {}; params = params || {};
outerTickSize = params.withOuterTick ? 6 : 0; outerTickSize = params.withOuterTick ? 6 : 0;
...@@ -73,6 +74,7 @@ function c3_axis(d3, params) { ...@@ -73,6 +74,7 @@ function c3_axis(d3, params) {
return size; return size;
} }
function axis(g) { function axis(g) {
axis_g = g;
g.each(function () { g.each(function () {
var g = d3.select(this); var g = d3.select(this);
var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = copyScale(); var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = copyScale();
...@@ -257,9 +259,20 @@ function c3_axis(d3, params) { ...@@ -257,9 +259,20 @@ function c3_axis(d3, params) {
tickCentered = isCentered; tickCentered = isCentered;
return axis; return axis;
}; };
axis.tickOffset = function () { // This will be overwritten when normal x axis axis.tickOffset = function () {
return tickOffset; return tickOffset;
}; };
axis.tickInterval = function () {
var interval, length;
if (params.isCategory) {
interval = tickOffset * 2;
}
else {
length = axis_g.select('path.domain').node().getTotalLength() - outerTickSize * 2;
interval = length / axis_g.selectAll('line').size();
}
return interval;
};
axis.ticks = function () { axis.ticks = function () {
if (!arguments.length) { return tickArguments; } if (!arguments.length) { return tickArguments; }
tickArguments = arguments; tickArguments = arguments;
......
...@@ -50,7 +50,7 @@ c3_chart_internal_fn.redrawBar = function (drawBar, withTransition) { ...@@ -50,7 +50,7 @@ c3_chart_internal_fn.redrawBar = function (drawBar, withTransition) {
}; };
c3_chart_internal_fn.getBarW = function (axis, barTargetsNum) { c3_chart_internal_fn.getBarW = function (axis, barTargetsNum) {
var $$ = this, config = $$.config, var $$ = this, config = $$.config,
w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? (axis.tickOffset() * 2 * config.bar_width_ratio) / barTargetsNum : 0; w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? (axis.tickInterval() * config.bar_width_ratio) / barTargetsNum : 0;
return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w; return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w;
}; };
c3_chart_internal_fn.getBars = function (i, id) { c3_chart_internal_fn.getBars = function (i, id) {
......
...@@ -92,19 +92,5 @@ c3_chart_internal_fn.getHorizontalAxisHeight = function (axisId) { ...@@ -92,19 +92,5 @@ c3_chart_internal_fn.getHorizontalAxisHeight = function (axisId) {
}; };
c3_chart_internal_fn.getEventRectWidth = function () { c3_chart_internal_fn.getEventRectWidth = function () {
var $$ = this; return this.xAxis.tickInterval();
var target = $$.getMaxDataCountTarget($$.data.targets),
firstData, lastData, base, maxDataCount, ratio, w;
if (!target) {
return 0;
}
firstData = target.values[0], lastData = target.values[target.values.length - 1];
base = $$.x(lastData.x) - $$.x(firstData.x);
if (base === 0) {
return $$.config.axis_rotated ? $$.height : $$.width;
}
maxDataCount = $$.getMaxDataCount();
ratio = ($$.hasType('bar') ? (maxDataCount - ($$.isCategorized() ? 0.25 : 1)) / maxDataCount : 1);
w = maxDataCount > 1 ? (base * ratio) / (maxDataCount - 1) : base;
return w < 1 ? 1 : w;
}; };
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