source: node_modules/d3-transition/src/transition/tween.js

Last change on this file was e4c61dd, checked in by istevanoska <ilinastevanoska@…>, 6 months ago

Prototype 1.1

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[e4c61dd]1import {get, set} from "./schedule.js";
2
3function tweenRemove(id, name) {
4 var tween0, tween1;
5 return function() {
6 var schedule = set(this, id),
7 tween = schedule.tween;
8
9 // If this node shared tween with the previous node,
10 // just assign the updated shared tween and we’re done!
11 // Otherwise, copy-on-write.
12 if (tween !== tween0) {
13 tween1 = tween0 = tween;
14 for (var i = 0, n = tween1.length; i < n; ++i) {
15 if (tween1[i].name === name) {
16 tween1 = tween1.slice();
17 tween1.splice(i, 1);
18 break;
19 }
20 }
21 }
22
23 schedule.tween = tween1;
24 };
25}
26
27function tweenFunction(id, name, value) {
28 var tween0, tween1;
29 if (typeof value !== "function") throw new Error;
30 return function() {
31 var schedule = set(this, id),
32 tween = schedule.tween;
33
34 // If this node shared tween with the previous node,
35 // just assign the updated shared tween and we’re done!
36 // Otherwise, copy-on-write.
37 if (tween !== tween0) {
38 tween1 = (tween0 = tween).slice();
39 for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
40 if (tween1[i].name === name) {
41 tween1[i] = t;
42 break;
43 }
44 }
45 if (i === n) tween1.push(t);
46 }
47
48 schedule.tween = tween1;
49 };
50}
51
52export default function(name, value) {
53 var id = this._id;
54
55 name += "";
56
57 if (arguments.length < 2) {
58 var tween = get(this.node(), id).tween;
59 for (var i = 0, n = tween.length, t; i < n; ++i) {
60 if ((t = tween[i]).name === name) {
61 return t.value;
62 }
63 }
64 return null;
65 }
66
67 return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
68}
69
70export function tweenValue(transition, name, value) {
71 var id = transition._id;
72
73 transition.each(function() {
74 var schedule = set(this, id);
75 (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
76 });
77
78 return function(node) {
79 return get(node, id).value[name];
80 };
81}
Note: See TracBrowser for help on using the repository browser.