Browse Source

Fix legend focus/defocus - #558

pull/590/head
Masayuki Tanaka 10 years ago
parent
commit
6bd56b2b26
  1. 47
      c3.js
  2. 4
      c3.min.js
  3. 4
      src/api.focus.js
  4. 8
      src/api.show.js
  5. 32
      src/arc.js
  6. 3
      src/legend.js

47
c3.js

@ -3670,12 +3670,13 @@
$$.api.show(id);
} else {
$$.api.toggle(id);
$$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert();
}
}
})
.on('mouseover', function (id) {
$$.d3.select(this).classed(CLASS.legendItemFocused, true);
if (!$$.transiting) {
if (!$$.transiting && $$.isTargetToShow(id)) {
$$.api.focus(id);
}
if (config.legend_item_onmouseover) {
@ -4286,17 +4287,23 @@
return format ? format(value, ratio) : $$.defaultArcValueFormat(value, ratio);
};
c3_chart_internal_fn.expandArc = function (targetIds, withoutFadeOut) {
var $$ = this, targets, noneTargets;
c3_chart_internal_fn.expandArc = function (targetIds) {
var $$ = this, interval;
targetIds = $$.mapToTargetIds(targetIds);
// MEMO: avoid to cancel transition
if ($$.transiting) {
interval = window.setInterval(function () {
if (!$$.transiting) {
window.clearInterval(interval);
$$.expandArc(targetIds);
}
}, 10);
return;
}
targets = $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)),
noneTargets = $$.svg.selectAll('.' + CLASS.arc).filter(function (data) {
return targetIds.indexOf(data.data.id) < 0;
});
targetIds = $$.mapToTargetIds(targetIds);
targets.each(function (d) {
$$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).each(function (d) {
if (! $$.shouldExpand(d.data.id)) { return; }
$$.d3.select(this).selectAll('path')
.transition().duration(50)
@ -4309,18 +4316,16 @@
}
});
});
if (!withoutFadeOut) {
noneTargets.style("opacity", 0.3);
}
};
c3_chart_internal_fn.unexpandArc = function (targetIds) {
var $$ = this, targets;
var $$ = this;
if ($$.transiting) { return; }
targetIds = $$.mapToTargetIds(targetIds);
targets = $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc));
targets.selectAll('path.' + CLASS.arc)
$$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).selectAll('path')
.transition().duration(50)
.attr("d", $$.svgArc);
$$.svg.selectAll('.' + CLASS.arc)
@ -5369,7 +5374,7 @@
this.defocus();
candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false);
if ($$.hasArcType()) {
$$.expandArc(targetIds, true);
$$.expandArc(targetIds);
}
$$.toggleFocusLegend(targetIds, true);
@ -5402,7 +5407,7 @@
var $$ = this.internal, candidates;
targetIds = $$.mapToTargetIds(targetIds);
candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$)));
candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets
candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false);
if ($$.hasArcType()) {
@ -5426,9 +5431,7 @@
targets.transition()
.style('opacity', 1, 'important')
.call($$.endall, function () {
targets.style('opacity', null).style('opacity', 1)
.classed(CLASS.focused, false)
.classed(CLASS.defocused, false);
targets.style('opacity', null).style('opacity', 1);
});
if (options.withLegend) {
@ -5450,9 +5453,7 @@
targets.transition()
.style('opacity', 0, 'important')
.call($$.endall, function () {
targets.style('opacity', null).style('opacity', 0)
.classed(CLASS.focused, false)
.classed(CLASS.defocused, false);
targets.style('opacity', null).style('opacity', 0);
});
if (options.withLegend) {

4
c3.min.js vendored

File diff suppressed because one or more lines are too long

4
src/api.focus.js

@ -8,7 +8,7 @@ c3_chart_fn.focus = function (targetIds) {
this.defocus();
candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false);
if ($$.hasArcType()) {
$$.expandArc(targetIds, true);
$$.expandArc(targetIds);
}
$$.toggleFocusLegend(targetIds, true);
@ -41,7 +41,7 @@ c3_chart_fn.revert = function (targetIds) {
var $$ = this.internal, candidates;
targetIds = $$.mapToTargetIds(targetIds);
candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$)));
candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets
candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false);
if ($$.hasArcType()) {

8
src/api.show.js

@ -10,9 +10,7 @@ c3_chart_fn.show = function (targetIds, options) {
targets.transition()
.style('opacity', 1, 'important')
.call($$.endall, function () {
targets.style('opacity', null).style('opacity', 1)
.classed(CLASS.focused, false)
.classed(CLASS.defocused, false);
targets.style('opacity', null).style('opacity', 1);
});
if (options.withLegend) {
@ -34,9 +32,7 @@ c3_chart_fn.hide = function (targetIds, options) {
targets.transition()
.style('opacity', 0, 'important')
.call($$.endall, function () {
targets.style('opacity', null).style('opacity', 0)
.classed(CLASS.focused, false)
.classed(CLASS.defocused, false);
targets.style('opacity', null).style('opacity', 0);
});
if (options.withLegend) {

32
src/arc.js

@ -118,17 +118,23 @@ c3_chart_internal_fn.textForArcLabel = function (d) {
return format ? format(value, ratio) : $$.defaultArcValueFormat(value, ratio);
};
c3_chart_internal_fn.expandArc = function (targetIds, withoutFadeOut) {
var $$ = this, targets, noneTargets;
c3_chart_internal_fn.expandArc = function (targetIds) {
var $$ = this, interval;
targetIds = $$.mapToTargetIds(targetIds);
// MEMO: avoid to cancel transition
if ($$.transiting) {
interval = window.setInterval(function () {
if (!$$.transiting) {
window.clearInterval(interval);
$$.expandArc(targetIds);
}
}, 10);
return;
}
targets = $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)),
noneTargets = $$.svg.selectAll('.' + CLASS.arc).filter(function (data) {
return targetIds.indexOf(data.data.id) < 0;
});
targetIds = $$.mapToTargetIds(targetIds);
targets.each(function (d) {
$$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).each(function (d) {
if (! $$.shouldExpand(d.data.id)) { return; }
$$.d3.select(this).selectAll('path')
.transition().duration(50)
@ -141,18 +147,16 @@ c3_chart_internal_fn.expandArc = function (targetIds, withoutFadeOut) {
}
});
});
if (!withoutFadeOut) {
noneTargets.style("opacity", 0.3);
}
};
c3_chart_internal_fn.unexpandArc = function (targetIds) {
var $$ = this, targets;
var $$ = this;
if ($$.transiting) { return; }
targetIds = $$.mapToTargetIds(targetIds);
targets = $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc));
targets.selectAll('path.' + CLASS.arc)
$$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).selectAll('path')
.transition().duration(50)
.attr("d", $$.svgArc);
$$.svg.selectAll('.' + CLASS.arc)

3
src/legend.js

@ -207,12 +207,13 @@ c3_chart_internal_fn.updateLegend = function (targetIds, options, transitions) {
$$.api.show(id);
} else {
$$.api.toggle(id);
$$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert();
}
}
})
.on('mouseover', function (id) {
$$.d3.select(this).classed(CLASS.legendItemFocused, true);
if (!$$.transiting) {
if (!$$.transiting && $$.isTargetToShow(id)) {
$$.api.focus(id);
}
if (config.legend_item_onmouseover) {

Loading…
Cancel
Save