Index: charted/lib/selection/src/transition_impl.dart |
diff --git a/charted/lib/selection/src/transition_impl.dart b/charted/lib/selection/src/transition_impl.dart |
deleted file mode 100644 |
index 53bb72a05897f11709c9efa3d7b30dd2e38c34e2..0000000000000000000000000000000000000000 |
--- a/charted/lib/selection/src/transition_impl.dart |
+++ /dev/null |
@@ -1,198 +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.selection.transition; |
- |
-// handle transitions on an element-basis, so we can cancel if another is |
-// scheduled |
-Map<Element, int> _transitionMap = {}; |
- |
-class _TransitionImpl implements Transition { |
- SelectionCallback _delay = (d, i, c) => 0; |
- SelectionCallback _duration = |
- (d, i, c) => Transition.defaultDurationMilliseconds; |
- Selection _selection; |
- Map _attrs = {}; |
- Map _styles = {}; |
- Map _attrTweens = {}; |
- Map _styleTweens = {}; |
- Map<AnimationTimer, Element> _timerMap = {}; |
- Map<Element, List<Map>> _attrMap = {}; |
- Map<Element, int> _durationMap = {}; |
- bool _interrupted = false; |
- bool _remove = false; |
- var _timerDelay = 0; |
- |
- _TransitionImpl(this._selection, [num delay = 0]) { |
- _transitionNode(delay); |
- _timerDelay = delay; |
- } |
- |
- Interpolator ease = clampEasingFn( |
- Transition.defaultEasingMode(Transition.defaultEasingType)); |
- |
- void delay(int millisecond) { |
- delayWithCallback(toCallback(millisecond)); |
- } |
- |
- void delayWithCallback(SelectionCallback fn) { |
- _delay = fn; |
- } |
- |
- void duration(int millisecond) { |
- durationWithCallback(toCallback(millisecond)); |
- } |
- |
- void durationWithCallback(SelectionCallback fn) { |
- _duration = fn; |
- } |
- |
- void attr(String name, val) { |
- attrWithCallback(name, toCallback(val)); |
- } |
- |
- void attrWithCallback(String name, SelectionCallback fn) { |
- _attrs[name] = fn; |
- } |
- |
- void attrTween(String name, AttrTweenCallback tween) { |
- _attrTweens[name] = tween; |
- } |
- |
- void style(String property, String val, [String priority = '']) { |
- styleWithCallback(property, toCallback(val), priority); |
- } |
- |
- void styleWithCallback(String property, SelectionCallback<String> fn, |
- [String priority = '']) { |
- _styles[property] = {'callback': fn, 'priority': priority}; |
- } |
- |
- void styleTween(String property, StyleTweenCallback tween, |
- [String priority]) { |
- _styleTweens[property] = {'callback': tween, 'priority': priority}; |
- } |
- |
- // Starts a timer that registers all attributes, durations, and delays for the |
- // transition of the current selection. |
- _transitionNode(num delay) { |
- new AnimationTimer((elapsed) { |
- _selection.each((d, i, c) { |
- var tweenList = []; |
- _attrs.forEach((key, value) { |
- tweenList.add(_getAttrInterpolator(c, key, value(d, i, c))); |
- }); |
- _attrTweens.forEach((key, value) { |
- tweenList.add((t) => c.setAttribute(key, |
- value(d, i, c.getAttribute(key))(t))); |
- }); |
- _styles.forEach((key, value) { |
- tweenList.add(_getStyleInterpolator(c, key, |
- value['callback'](d, i, c), value['priority'])); |
- }); |
- _styleTweens.forEach((key, value) { |
- tweenList.add((t) => c.style.setProperty(key, |
- value['callback'](d, i, |
- c.style.getPropertyValue(key))(t).toString(), value['priority'])); |
- }); |
- |
- _attrMap[c] = tweenList; |
- _durationMap[c] = _duration(d, i, c); |
- _timerMap[new AnimationTimer(_tick, delay: _delay(d, i, c))] = c; |
- |
- if(!_transitionMap.containsKey(c)) { |
- _transitionMap[c] = 1; |
- } else { |
- _transitionMap[c]++; |
- } |
- }); |
- return true; |
- }, delay: delay); |
- } |
- |
- // Returns the correct interpolator function for the old and new attribute. |
- _getAttrInterpolator(Element element, String attrName, newValue) { |
- var attr = element.attributes[attrName]; |
- var interpolator = createStringInterpolator(attr, newValue.toString()); |
- return (t) => element.setAttribute(attrName, interpolator(t).toString()); |
- } |
- |
- // Returns the correct interpolator function for the old and new style. |
- _getStyleInterpolator(Element element, String styleName, newValue, priority) { |
- var style = element.style.getPropertyValue(styleName); |
- |
- var interpolator = createStringInterpolator(style, newValue.toString()); |
- |
- return (t) => element.style.setProperty(styleName, |
- interpolator(t).toString(), priority); |
- } |
- |
- // Ticks of the transition, this is the callback registered to the |
- // ChartedTimer, called on each animation frame until the transition duration |
- // has been reached. |
- bool _tick(elapsed) { |
- if (_interrupted) { |
- return true; |
- } |
- var activeNode = _timerMap[AnimationTimer.active]; |
- var t = elapsed / _durationMap[activeNode]; |
- for (Interpolator tween in _attrMap[activeNode]) { |
- tween(ease(t)); |
- } |
- |
- if (t >= 1) { |
- if (_remove && _transitionMap[activeNode] == 1) { |
- activeNode.remove(); |
- } |
- |
- if(_transitionMap[activeNode] > 1) { |
- _transitionMap[activeNode]--; |
- } else { |
- _transitionMap.remove(activeNode); |
- } |
- |
- return true; |
- } |
- |
- return false; |
- } |
- |
- // Interrupts the transition. |
- void interrupt() { |
- _interrupted = true; |
- } |
- |
- Transition select(String selector) { |
- var t = new Transition(_selection.select(selector)); |
- t.ease = ease; |
- t.delayWithCallback(_delay); |
- t.durationWithCallback(_duration); |
- return t; |
- } |
- |
- Transition selectAll(String selector) { |
- var t = new Transition(_selection.selectAll(selector)); |
- t.ease = ease; |
- t.delayWithCallback(_delay); |
- t.durationWithCallback(_duration); |
- return t; |
- } |
- |
- Transition transition() { |
- var e = _selection.first; |
- var delay = _delay(_selection.scope.datum(e), 0, e) + |
- _duration(_selection.scope.datum(e), 0, e) + _timerDelay; |
- var t = new _TransitionImpl(_selection, delay); |
- t.ease = ease; |
- t.durationWithCallback(_duration); |
- return t; |
- } |
- |
- void remove() { |
- _remove = true; |
- } |
-} |