Index: charted/lib/charts/behaviors/axis_label_tooltip.dart |
diff --git a/charted/lib/charts/behaviors/axis_label_tooltip.dart b/charted/lib/charts/behaviors/axis_label_tooltip.dart |
deleted file mode 100644 |
index 6361a4e6f2cb7000c39e8a717652384d04afd682..0000000000000000000000000000000000000000 |
--- a/charted/lib/charts/behaviors/axis_label_tooltip.dart |
+++ /dev/null |
@@ -1,120 +0,0 @@ |
-// |
-// Copyright 2014 Google Inc. All rights reserved. |
-// |
-// Use of this source code is governed by a BSD-style |
-// license that can be found in the LICENSE file or at |
-// https://developers.google.com/open-source/licenses/bsd |
-// |
- |
-part of charted.charts; |
- |
-/// A behavior that draws marking lines on the chart. |
-class AxisLabelTooltip implements ChartBehavior { |
- static const _AXIS_SELECTOR = '.measure-axis-group,.dimension-axis-group'; |
- |
- SubscriptionsDisposer _disposer = new SubscriptionsDisposer(); |
- StreamSubscription _axesChangeSubscription; |
- CartesianArea _area; |
- Element _tooltipRoot; |
- |
- math.Rectangle _hostAreaRect; |
- math.Rectangle _renderAreaRect; |
- |
- void init(ChartArea area, Selection upper, Selection lower) { |
- if (area is! CartesianArea) return; |
- _area = area; |
- _axesChangeSubscription = |
- _area.onChartAxesUpdated.listen((_) => _subscribe()); |
- |
- // Axis tooltip requires host to be position: relative. |
- area.host.style.position = 'relative'; |
- } |
- |
- void dispose() { |
- _disposer.dispose(); |
- if (_tooltipRoot != null) _tooltipRoot.remove(); |
- } |
- |
- void _subscribe() { |
- var elements = _area.host.querySelectorAll(_AXIS_SELECTOR); |
- _disposer.dispose(); |
- _disposer.addAll( |
- elements.map((x) => x.onMouseOver.listen(_handleMouseOver))); |
- _disposer.addAll( |
- elements.map((x) => x.onMouseOut.listen(_handleMouseOut))); |
- } |
- |
- void _handleMouseOver(MouseEvent e) { |
- Element target = e.target; |
- if (!target.dataset.containsKey('detail')) return; |
- ensureTooltipRoot(); |
- ensureRenderAreaRect(); |
- |
- _tooltipRoot.text = target.dataset['detail']; |
- var position = computeTooltipPosition( |
- target.getBoundingClientRect(), |
- _tooltipRoot.getBoundingClientRect(), |
- _renderAreaRect); |
- |
- _tooltipRoot.style |
- ..left = '${position.x}px' |
- ..top = '${position.y}px' |
- ..opacity = '1' |
- ..visibility = 'visible'; |
- } |
- |
- void _handleMouseOut(MouseEvent e) { |
- Element target = e.target; |
- if (!target.dataset.containsKey('detail')) return; |
- if (_tooltipRoot != null) { |
- _tooltipRoot.style |
- ..opacity = '0' |
- ..visibility = 'hidden'; |
- } |
- } |
- |
- void ensureTooltipRoot() { |
- if (_tooltipRoot == null) { |
- _tooltipRoot = new Element.tag('div') |
- ..style.position = 'absolute' |
- ..attributes['dir'] = _area.config.isRTL ? 'rtl' : '' |
- ..classes.add('chart-axis-label-tooltip'); |
- if (_area.config.isRTL) { |
- _tooltipRoot.classes.add('rtl'); |
- } else { |
- _tooltipRoot.classes.remove('rtl'); |
- } |
- _area.host.append(_tooltipRoot); |
- } |
- } |
- |
- void ensureRenderAreaRect() { |
- var layout = _area.layout; |
- _hostAreaRect = _area.host.getBoundingClientRect(); |
- _renderAreaRect = new math.Rectangle( |
- _hostAreaRect.left + layout.chartArea.x + layout.renderArea.x, |
- _hostAreaRect.top + layout.chartArea.y + layout.renderArea.y, |
- layout.renderArea.width, layout.renderArea.height); |
- } |
- |
- /// Computes the ideal tooltip position based on orientation. |
- math.Point computeTooltipPosition(math.Rectangle label, |
- math.Rectangle tooltip, math.Rectangle renderArea) { |
- var x = label.left + (label.width - tooltip.width) / 2, |
- y = label.top + (label.height - tooltip.height) / 2; |
- |
- if (x + tooltip.width > renderArea.right) { |
- x = renderArea.right - tooltip.width; |
- } else if (x < renderArea.left) { |
- x = renderArea.left; |
- } |
- |
- if (y + tooltip.height > renderArea.bottom) { |
- y = renderArea.bottom - tooltip.height; |
- } else if (y < renderArea.top) { |
- y = renderArea.top; |
- } |
- |
- return new math.Point(x - _hostAreaRect.left, y - _hostAreaRect.top); |
- } |
-} |