Skip to content

Commit 4adf73b

Browse files
committed
Define interpolators with their colors.
This avoids some circular imports.
1 parent 3a0d42a commit 4adf73b

12 files changed

Lines changed: 123 additions & 128 deletions

File tree

d3.js

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,17 +1473,6 @@
14731473
}, "mousewheel") : (d3_behavior_zoomDelta = function() {
14741474
return -d3.event.detail;
14751475
}, "MozMousePixelScroll");
1476-
d3.interpolateHsl = d3_interpolateHsl;
1477-
function d3_interpolateHsl(a, b) {
1478-
a = d3.hsl(a);
1479-
b = d3.hsl(b);
1480-
var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;
1481-
if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
1482-
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
1483-
return function(t) {
1484-
return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
1485-
};
1486-
}
14871476
d3.hsl = function(h, s, l) {
14881477
return arguments.length === 1 ? h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : d3_hsl(+h, +s, +l);
14891478
};
@@ -1507,7 +1496,17 @@
15071496
d3_hslPrototype.rgb = function() {
15081497
return d3_hsl_rgb(this.h, this.s, this.l);
15091498
};
1510-
d3_hslPrototype.interpolate = d3_interpolateHsl;
1499+
d3_hslPrototype.interpolate = d3_hslInterpolate;
1500+
function d3_hslInterpolate(a, b) {
1501+
a = d3.hsl(a);
1502+
b = d3.hsl(b);
1503+
var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;
1504+
if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
1505+
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
1506+
return function(t) {
1507+
return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
1508+
};
1509+
}
15111510
function d3_hsl_rgb(h, s, l) {
15121511
var m1, m2;
15131512
h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;
@@ -1527,26 +1526,6 @@
15271526
}
15281527
return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
15291528
}
1530-
d3.interpolateLab = d3_interpolateLab;
1531-
function d3_interpolateLab(a, b) {
1532-
a = d3.lab(a);
1533-
b = d3.lab(b);
1534-
var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;
1535-
return function(t) {
1536-
return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
1537-
};
1538-
}
1539-
d3.interpolateHcl = d3_interpolateHcl;
1540-
function d3_interpolateHcl(a, b) {
1541-
a = d3.hcl(a);
1542-
b = d3.hcl(b);
1543-
var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;
1544-
if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
1545-
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
1546-
return function(t) {
1547-
return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
1548-
};
1549-
}
15501529
d3.hcl = function(h, c, l) {
15511530
return arguments.length === 1 ? h instanceof d3_Hcl ? d3_hcl(h.h, h.c, h.l) : h instanceof d3_Lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : d3_hcl(+h, +c, +l);
15521531
};
@@ -1568,7 +1547,17 @@
15681547
d3_hclPrototype.rgb = function() {
15691548
return d3_hcl_lab(this.h, this.c, this.l).rgb();
15701549
};
1571-
d3_hclPrototype.interpolate = d3_interpolateHcl;
1550+
d3_hclPrototype.interpolate = d3_hclInterpolate;
1551+
function d3_hclInterpolate(a, b) {
1552+
a = d3.hcl(a);
1553+
b = d3.hcl(b);
1554+
var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;
1555+
if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
1556+
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
1557+
return function(t) {
1558+
return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
1559+
};
1560+
}
15721561
function d3_hcl_lab(h, c, l) {
15731562
if (isNaN(h)) h = 0;
15741563
if (isNaN(c)) c = 0;
@@ -1597,7 +1586,15 @@
15971586
d3_labPrototype.rgb = function() {
15981587
return d3_lab_rgb(this.l, this.a, this.b);
15991588
};
1600-
d3_labPrototype.interpolate = d3_interpolateLab;
1589+
d3_labPrototype.interpolate = d3_labInterpolate;
1590+
function d3_labInterpolate(a, b) {
1591+
a = d3.lab(a);
1592+
b = d3.lab(b);
1593+
var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;
1594+
return function(t) {
1595+
return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
1596+
};
1597+
}
16011598
function d3_lab_rgb(l, a, b) {
16021599
var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;
16031600
x = d3_lab_xyz(x) * d3_lab_X;
@@ -1654,6 +1651,14 @@
16541651
d3_rgbPrototype.toString = function() {
16551652
return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
16561653
};
1654+
function d3_rgbInterpolate(a, b) {
1655+
a = d3.rgb(a);
1656+
b = d3.rgb(b);
1657+
var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
1658+
return function(t) {
1659+
return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));
1660+
};
1661+
}
16571662
function d3_rgb_hex(v) {
16581663
return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
16591664
}
@@ -1872,17 +1877,8 @@
18721877
d3_rgb_names.forEach(function(key, value) {
18731878
d3_rgb_names.set(key, d3_rgbNumber(value));
18741879
});
1875-
d3.interpolateRgb = d3_interpolateRgb;
1876-
function d3_interpolateRgb(a, b) {
1877-
a = d3.rgb(a);
1878-
b = d3.rgb(b);
1879-
var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
1880-
return function(t) {
1881-
return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));
1882-
};
1883-
}
18841880
function d3_Color() {}
1885-
d3_Color.prototype.interpolate = d3_interpolateRgb;
1881+
d3_Color.prototype.interpolate = d3_rgbInterpolate;
18861882
d3_Color.prototype.toString = function() {
18871883
return this.rgb() + "";
18881884
};
@@ -5723,7 +5719,7 @@
57235719
}
57245720
d3.interpolators = [ function(a, b) {
57255721
var t = typeof b;
5726-
return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : t === "object" ? b.interpolate || (Array.isArray(b) ? d3_interpolateArray : d3_interpolateObject) : d3_interpolateNumber)(a, b);
5722+
return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_rgbInterpolate : d3_interpolateString : t === "object" ? b.interpolate || (Array.isArray(b) ? d3_interpolateArray : d3_interpolateObject) : d3_interpolateNumber)(a, b);
57275723
} ];
57285724
d3.interpolateArray = d3_interpolateArray;
57295725
function d3_interpolateArray(a, b) {
@@ -5835,6 +5831,10 @@
58355831
function d3_ease_bounce(t) {
58365832
return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
58375833
}
5834+
d3.interpolateHcl = d3_hclInterpolate;
5835+
d3.interpolateHsl = d3_hslInterpolate;
5836+
d3.interpolateLab = d3_labInterpolate;
5837+
d3.interpolateRgb = d3_rgbInterpolate;
58385838
d3.interpolateRound = d3_interpolateRound;
58395839
function d3_interpolateRound(a, b) {
58405840
b -= a;

d3.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/color/color.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import "../interpolate/rgb";
1+
import "rgb";
22

33
function d3_Color() {}
44

5-
d3_Color.prototype.interpolate = d3_interpolateRgb;
5+
d3_Color.prototype.interpolate = d3_rgbInterpolate;
66

77
d3_Color.prototype.toString = function() {
88
return this.rgb() + "";

src/color/hcl.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import "../math/trigonometry";
2-
import "../interpolate/hcl";
32
import "color";
43
import "lab";
54
import "rgb";
@@ -36,7 +35,24 @@ d3_hclPrototype.rgb = function() {
3635
return d3_hcl_lab(this.h, this.c, this.l).rgb();
3736
};
3837

39-
d3_hclPrototype.interpolate = d3_interpolateHcl;
38+
d3_hclPrototype.interpolate = d3_hclInterpolate;
39+
40+
function d3_hclInterpolate(a, b) {
41+
a = d3.hcl(a);
42+
b = d3.hcl(b);
43+
var ah = a.h,
44+
ac = a.c,
45+
al = a.l,
46+
bh = b.h - ah,
47+
bc = b.c - ac,
48+
bl = b.l - al;
49+
if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
50+
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah;
51+
else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; // shortest path
52+
return function(t) {
53+
return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
54+
};
55+
}
4056

4157
function d3_hcl_lab(h, c, l) {
4258
if (isNaN(h)) h = 0;

src/color/hsl.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import "../interpolate/hsl";
21
import "color";
32
import "rgb";
43

@@ -35,7 +34,24 @@ d3_hslPrototype.rgb = function() {
3534
return d3_hsl_rgb(this.h, this.s, this.l);
3635
};
3736

38-
d3_hslPrototype.interpolate = d3_interpolateHsl;
37+
d3_hslPrototype.interpolate = d3_hslInterpolate;
38+
39+
function d3_hslInterpolate(a, b) {
40+
a = d3.hsl(a);
41+
b = d3.hsl(b);
42+
var ah = a.h,
43+
as = a.s,
44+
al = a.l,
45+
bh = b.h - ah,
46+
bs = b.s - as,
47+
bl = b.l - al;
48+
if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
49+
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah;
50+
else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; // shortest path
51+
return function(t) {
52+
return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
53+
};
54+
}
3955

4056
function d3_hsl_rgb(h, s, l) {
4157
var m1,

src/color/lab.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import "../math/trigonometry";
2-
import "../interpolate/lab";
32
import "color";
43
import "hcl";
54
import "rgb";
@@ -44,7 +43,21 @@ d3_labPrototype.rgb = function() {
4443
return d3_lab_rgb(this.l, this.a, this.b);
4544
};
4645

47-
d3_labPrototype.interpolate = d3_interpolateLab;
46+
d3_labPrototype.interpolate = d3_labInterpolate;
47+
48+
function d3_labInterpolate(a, b) {
49+
a = d3.lab(a);
50+
b = d3.lab(b);
51+
var al = a.l,
52+
aa = a.a,
53+
ab = a.b,
54+
bl = b.l - al,
55+
ba = b.a - aa,
56+
bb = b.b - ab;
57+
return function(t) {
58+
return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
59+
};
60+
}
4861

4962
function d3_lab_rgb(l, a, b) {
5063
var y = (l + 16) / 116,

src/color/rgb.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,23 @@ d3_rgbPrototype.toString = function() {
5757
return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
5858
};
5959

60+
function d3_rgbInterpolate(a, b) {
61+
a = d3.rgb(a);
62+
b = d3.rgb(b);
63+
var ar = a.r,
64+
ag = a.g,
65+
ab = a.b,
66+
br = b.r - ar,
67+
bg = b.g - ag,
68+
bb = b.b - ab;
69+
return function(t) {
70+
return "#"
71+
+ d3_rgb_hex(Math.round(ar + br * t))
72+
+ d3_rgb_hex(Math.round(ag + bg * t))
73+
+ d3_rgb_hex(Math.round(ab + bb * t));
74+
};
75+
}
76+
6077
function d3_rgb_hex(v) {
6178
return v < 0x10
6279
? "0" + Math.max(0, v).toString(16)

src/interpolate/hcl.js

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,3 @@
11
import "../color/hcl";
22

3-
d3.interpolateHcl = d3_interpolateHcl;
4-
5-
function d3_interpolateHcl(a, b) {
6-
a = d3.hcl(a);
7-
b = d3.hcl(b);
8-
var ah = a.h,
9-
ac = a.c,
10-
al = a.l,
11-
bh = b.h - ah,
12-
bc = b.c - ac,
13-
bl = b.l - al;
14-
if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
15-
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah;
16-
else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; // shortest path
17-
return function(t) {
18-
return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
19-
};
20-
}
3+
d3.interpolateHcl = d3_hclInterpolate;

src/interpolate/hsl.js

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,3 @@
11
import "../color/hsl";
22

3-
d3.interpolateHsl = d3_interpolateHsl;
4-
5-
function d3_interpolateHsl(a, b) {
6-
a = d3.hsl(a);
7-
b = d3.hsl(b);
8-
var ah = a.h,
9-
as = a.s,
10-
al = a.l,
11-
bh = b.h - ah,
12-
bs = b.s - as,
13-
bl = b.l - al;
14-
if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
15-
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah;
16-
else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; // shortest path
17-
return function(t) {
18-
return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
19-
};
20-
}
3+
d3.interpolateHsl = d3_hslInterpolate;

src/interpolate/interpolate.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import "../color/color";
21
import "../color/rgb";
3-
import "rgb";
42
import "object";
53
import "array";
64
import "number";
@@ -17,7 +15,7 @@ function d3_interpolate(a, b) {
1715
d3.interpolators = [
1816
function(a, b) {
1917
var t = typeof b;
20-
return (t === "string" ? (d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString)
18+
return (t === "string" ? (d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_rgbInterpolate : d3_interpolateString)
2119
: t === "object" ? b.interpolate || (Array.isArray(b) ? d3_interpolateArray : d3_interpolateObject)
2220
: d3_interpolateNumber)(a, b);
2321
}

0 commit comments

Comments
 (0)