mirror of https://github.com/masayuki0812/c3.git
Quite good looking graph derived from d3.js
http://c3js.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.7 KiB
82 lines
2.7 KiB
import { c3_chart_internal_fn } from './core'; |
|
|
|
c3_chart_internal_fn.initZoom = function () { |
|
var $$ = this, d3 = $$.d3, config = $$.config, startEvent; |
|
|
|
$$.zoom = d3.zoom() |
|
.on("start", function () { |
|
var e = d3.event.sourceEvent; |
|
if (e && e.type === "brush") { return; } |
|
startEvent = e; |
|
config.zoom_onzoomstart.call($$.api, e); |
|
}) |
|
.on("zoom", function () { |
|
var e = d3.event.sourceEvent; |
|
if (e && e.type === "brush") { return; } |
|
$$.redrawForZoom.call($$); |
|
}) |
|
.on('end', function () { |
|
var e = d3.event.sourceEvent; |
|
if (e && e.type === "brush") { return; } |
|
// if click, do nothing. otherwise, click interaction will be canceled. |
|
if (e && startEvent.clientX === e.clientX && startEvent.clientY === e.clientY) { |
|
return; |
|
} |
|
config.zoom_onzoomend.call($$.api, $$.x.orgDomain()); |
|
}); |
|
|
|
$$.zoom.updateDomain = function () { |
|
if (d3.event && d3.event.transform) { |
|
$$.x.domain(d3.event.transform.rescaleX($$.subX).domain()); |
|
} |
|
return this; |
|
}; |
|
$$.zoom.updateExtent = function () { |
|
this.scaleExtent([1, Infinity]) |
|
.translateExtent([[0, 0], [$$.width, $$.height]]) |
|
.extent([[0, 0], [$$.width, $$.height]]); |
|
return this; |
|
}; |
|
$$.zoom.update = function () { |
|
return this.updateExtent().updateDomain(); |
|
}; |
|
|
|
return $$.zoom.updateExtent(); |
|
}; |
|
c3_chart_internal_fn.zoomTransform = function (range) { |
|
var $$ = this, s = [$$.x(range[0]), $$.x(range[1])]; |
|
return $$.d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0); |
|
}; |
|
|
|
c3_chart_internal_fn.getZoomDomain = function () { |
|
var $$ = this, config = $$.config, d3 = $$.d3, |
|
min = d3.min([$$.orgXDomain[0], config.zoom_x_min]), |
|
max = d3.max([$$.orgXDomain[1], config.zoom_x_max]); |
|
return [min, max]; |
|
}; |
|
c3_chart_internal_fn.redrawForZoom = function () { |
|
var $$ = this, d3 = $$.d3, config = $$.config, zoom = $$.zoom, x = $$.x; |
|
if (!config.zoom_enabled) { |
|
return; |
|
} |
|
if ($$.filterTargetsToShow($$.data.targets).length === 0) { |
|
return; |
|
} |
|
|
|
zoom.update(); |
|
|
|
if ($$.isCategorized() && x.orgDomain()[0] === $$.orgXDomain[0]) { |
|
x.domain([$$.orgXDomain[0] - 1e-10, x.orgDomain()[1]]); |
|
} |
|
$$.redraw({ |
|
withTransition: false, |
|
withY: config.zoom_rescale, |
|
withSubchart: false, |
|
withEventRect: false, |
|
withDimension: false |
|
}); |
|
if (d3.event.sourceEvent && d3.event.sourceEvent.type === 'mousemove') { |
|
$$.cancelClick = true; |
|
} |
|
config.zoom_onzoom.call($$.api, x.orgDomain()); |
|
};
|
|
|