diff options
author | Kristian Lyngstol <kristian@bohemians.org> | 2015-04-02 19:24:45 +0200 |
---|---|---|
committer | Kristian Lyngstol <kristian@bohemians.org> | 2015-04-02 19:24:45 +0200 |
commit | 0d8bba263dc195147d6fdb09662e7926f0a58b3e (patch) | |
tree | 4c570b4376c323e585120e7695b8715be7aa8881 /web/nms.gathering.org/speedometer/d3-master/src/interpolate | |
parent | e4354b47bd8891c5b1ee591fdf74b3ca67eee461 (diff) |
Bump lots of changes
Diffstat (limited to 'web/nms.gathering.org/speedometer/d3-master/src/interpolate')
15 files changed, 450 insertions, 0 deletions
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/array.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/array.js new file mode 100644 index 0000000..33f8f48 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/array.js @@ -0,0 +1,19 @@ +import "interpolate"; + +d3.interpolateArray = d3_interpolateArray; + +function d3_interpolateArray(a, b) { + var x = [], + c = [], + na = a.length, + nb = b.length, + n0 = Math.min(a.length, b.length), + i; + for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])); + for (; i < na; ++i) c[i] = a[i]; + for (; i < nb; ++i) c[i] = b[i]; + return function(t) { + for (i = 0; i < n0; ++i) c[i] = x[i](t); + return c; + }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/ease.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/ease.js new file mode 100644 index 0000000..fd48a17 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/ease.js @@ -0,0 +1,111 @@ +import "../arrays/map"; +import "../core/array"; +import "../core/identity"; +import "../math/trigonometry"; + +var d3_ease_default = function() { return d3_identity; }; + +var d3_ease = d3.map({ + linear: d3_ease_default, + poly: d3_ease_poly, + quad: function() { return d3_ease_quad; }, + cubic: function() { return d3_ease_cubic; }, + sin: function() { return d3_ease_sin; }, + exp: function() { return d3_ease_exp; }, + circle: function() { return d3_ease_circle; }, + elastic: d3_ease_elastic, + back: d3_ease_back, + bounce: function() { return d3_ease_bounce; } +}); + +var d3_ease_mode = d3.map({ + "in": d3_identity, + "out": d3_ease_reverse, + "in-out": d3_ease_reflect, + "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); } +}); + +d3.ease = function(name) { + var i = name.indexOf("-"), + t = i >= 0 ? name.slice(0, i) : name, + m = i >= 0 ? name.slice(i + 1) : "in"; + t = d3_ease.get(t) || d3_ease_default; + m = d3_ease_mode.get(m) || d3_identity; + return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); +}; + +function d3_ease_clamp(f) { + return function(t) { + return t <= 0 ? 0 : t >= 1 ? 1 : f(t); + }; +} + +function d3_ease_reverse(f) { + return function(t) { + return 1 - f(1 - t); + }; +} + +function d3_ease_reflect(f) { + return function(t) { + return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t))); + }; +} + +function d3_ease_quad(t) { + return t * t; +} + +function d3_ease_cubic(t) { + return t * t * t; +} + +// Optimized clamp(reflect(poly(3))). +function d3_ease_cubicInOut(t) { + if (t <= 0) return 0; + if (t >= 1) return 1; + var t2 = t * t, t3 = t2 * t; + return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); +} + +function d3_ease_poly(e) { + return function(t) { + return Math.pow(t, e); + }; +} + +function d3_ease_sin(t) { + return 1 - Math.cos(t * halfπ); +} + +function d3_ease_exp(t) { + return Math.pow(2, 10 * (t - 1)); +} + +function d3_ease_circle(t) { + return 1 - Math.sqrt(1 - t * t); +} + +function d3_ease_elastic(a, p) { + var s; + if (arguments.length < 2) p = 0.45; + if (arguments.length) s = p / τ * Math.asin(1 / a); + else a = 1, s = p / 4; + return function(t) { + return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); + }; +} + +function d3_ease_back(s) { + if (!s) s = 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; +} + +function d3_ease_bounce(t) { + 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; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hcl.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hcl.js new file mode 100644 index 0000000..4e62591 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hcl.js @@ -0,0 +1,20 @@ +import "../color/hcl"; + +d3.interpolateHcl = d3_interpolateHcl; + +function d3_interpolateHcl(a, b) { + a = d3.hcl(a); + b = d3.hcl(b); + var ah = a.h, + ac = a.c, + al = a.l, + bh = b.h - ah, + bc = b.c - ac, + bl = b.l - al; + if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac; + if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; + else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; // shortest path + return function(t) { + return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; + }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hsl.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hsl.js new file mode 100644 index 0000000..2b8d70f --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hsl.js @@ -0,0 +1,20 @@ +import "../color/hsl"; + +d3.interpolateHsl = d3_interpolateHsl; + +function d3_interpolateHsl(a, b) { + a = d3.hsl(a); + b = d3.hsl(b); + var ah = a.h, + as = a.s, + al = a.l, + bh = b.h - ah, + bs = b.s - as, + bl = b.l - al; + if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as; + if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; + else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; // shortest path + return function(t) { + return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + ""; + }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/index.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/index.js new file mode 100644 index 0000000..ed6c502 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/index.js @@ -0,0 +1,14 @@ +import "array"; +import "ease"; +import "hcl"; +import "hsl"; +import "interpolate"; +import "lab"; +import "number"; +import "object"; +import "rgb"; +import "round"; +import "string"; +import "transform"; +import "uninterpolate"; +import "zoom"; diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/interpolate.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/interpolate.js new file mode 100644 index 0000000..14f5dc5 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/interpolate.js @@ -0,0 +1,26 @@ +import "../color/color"; +import "../color/rgb"; +import "rgb"; +import "object"; +import "array"; +import "number"; +import "string"; + +d3.interpolate = d3_interpolate; + +function d3_interpolate(a, b) { + var i = d3.interpolators.length, f; + while (--i >= 0 && !(f = d3.interpolators[i](a, b))); + return f; +} + +d3.interpolators = [ + function(a, b) { + var t = typeof b; + return (t === "string" ? (d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString) + : b instanceof d3_color ? d3_interpolateRgb + : Array.isArray(b) ? d3_interpolateArray + : t === "object" && isNaN(b) ? d3_interpolateObject + : d3_interpolateNumber)(a, b); + } +]; diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/lab.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/lab.js new file mode 100644 index 0000000..6b46c04 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/lab.js @@ -0,0 +1,17 @@ +import "../color/lab"; + +d3.interpolateLab = d3_interpolateLab; + +function d3_interpolateLab(a, b) { + a = d3.lab(a); + b = d3.lab(b); + var al = a.l, + aa = a.a, + ab = a.b, + bl = b.l - al, + ba = b.a - aa, + bb = b.b - ab; + return function(t) { + return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; + }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/number.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/number.js new file mode 100644 index 0000000..2f0e42a --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/number.js @@ -0,0 +1,6 @@ +d3.interpolateNumber = d3_interpolateNumber; + +function d3_interpolateNumber(a, b) { + a = +a, b = +b; + return function(t) { return a * (1 - t) + b * t; }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/object.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/object.js new file mode 100644 index 0000000..a3f863a --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/object.js @@ -0,0 +1,25 @@ +import "interpolate"; + +d3.interpolateObject = d3_interpolateObject; + +function d3_interpolateObject(a, b) { + var i = {}, + c = {}, + k; + for (k in a) { + if (k in b) { + i[k] = d3_interpolate(a[k], b[k]); + } else { + c[k] = a[k]; + } + } + for (k in b) { + if (!(k in a)) { + c[k] = b[k]; + } + } + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/rgb.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/rgb.js new file mode 100644 index 0000000..f4944d2 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/rgb.js @@ -0,0 +1,20 @@ +import "../color/rgb"; + +d3.interpolateRgb = d3_interpolateRgb; + +function d3_interpolateRgb(a, b) { + a = d3.rgb(a); + b = d3.rgb(b); + var ar = a.r, + ag = a.g, + ab = a.b, + br = b.r - ar, + bg = b.g - ag, + bb = b.b - ab; + return function(t) { + 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)); + }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/round.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/round.js new file mode 100644 index 0000000..8e8797d --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/round.js @@ -0,0 +1,6 @@ +d3.interpolateRound = d3_interpolateRound; + +function d3_interpolateRound(a, b) { + b -= a; + return function(t) { return Math.round(a + b * t); }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/string.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/string.js new file mode 100644 index 0000000..3033a71 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/string.js @@ -0,0 +1,54 @@ +import "number"; + +d3.interpolateString = d3_interpolateString; + +function d3_interpolateString(a, b) { + var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, // scan index for next number in b + am, // current match in a + bm, // current match in b + bs, // string preceding current number in b, if any + i = -1, // index in s + s = [], // string constants and placeholders + q = []; // number interpolators + + // Coerce inputs to strings. + a = a + "", b = b + ""; + + // Interpolate pairs of numbers in a & b. + while ((am = d3_interpolate_numberA.exec(a)) + && (bm = d3_interpolate_numberB.exec(b))) { + if ((bs = bm.index) > bi) { // a string precedes the next number in b + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match + if (s[i]) s[i] += bm; // coalesce with previous string + else s[++i] = bm; + } else { // interpolate non-matching numbers + s[++i] = null; + q.push({i: i, x: d3_interpolateNumber(am, bm)}); + } + bi = d3_interpolate_numberB.lastIndex; + } + + // Add remains of b. + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + + // Special optimization for only a single match. + // Otherwise, interpolate each of the numbers and rejoin the string. + return s.length < 2 + ? (q[0] ? (b = q[0].x, function(t) { return b(t) + ""; }) + : function() { return b; }) + : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); +} + +var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, + d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/transform.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/transform.js new file mode 100644 index 0000000..17a19cb --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/transform.js @@ -0,0 +1,56 @@ +import "../math/transform"; +import "number"; + +d3.interpolateTransform = d3_interpolateTransform; + +function d3_interpolateTransform(a, b) { + var s = [], // string constants and placeholders + q = [], // number interpolators + n, + A = d3.transform(a), + B = d3.transform(b), + ta = A.translate, + tb = B.translate, + ra = A.rotate, + rb = B.rotate, + wa = A.skew, + wb = B.skew, + ka = A.scale, + kb = B.scale; + + if (ta[0] != tb[0] || ta[1] != tb[1]) { + s.push("translate(", null, ",", null, ")"); + q.push({i: 1, x: d3_interpolateNumber(ta[0], tb[0])}, {i: 3, x: d3_interpolateNumber(ta[1], tb[1])}); + } else if (tb[0] || tb[1]) { + s.push("translate(" + tb + ")"); + } else { + s.push(""); + } + + if (ra != rb) { + if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; // shortest path + q.push({i: s.push(s.pop() + "rotate(", null, ")") - 2, x: d3_interpolateNumber(ra, rb)}); + } else if (rb) { + s.push(s.pop() + "rotate(" + rb + ")"); + } + + if (wa != wb) { + q.push({i: s.push(s.pop() + "skewX(", null, ")") - 2, x: d3_interpolateNumber(wa, wb)}); + } else if (wb) { + s.push(s.pop() + "skewX(" + wb + ")"); + } + + if (ka[0] != kb[0] || ka[1] != kb[1]) { + n = s.push(s.pop() + "scale(", null, ",", null, ")"); + q.push({i: n - 4, x: d3_interpolateNumber(ka[0], kb[0])}, {i: n - 2, x: d3_interpolateNumber(ka[1], kb[1])}); + } else if (kb[0] != 1 || kb[1] != 1) { + s.push(s.pop() + "scale(" + kb + ")"); + } + + n = q.length; + return function(t) { + var i = -1, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/uninterpolate.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/uninterpolate.js new file mode 100644 index 0000000..d8c8332 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/uninterpolate.js @@ -0,0 +1,9 @@ +function d3_uninterpolateNumber(a, b) { + b = (b -= a = +a) || 1 / b; + return function(x) { return (x - a) / b; }; +} + +function d3_uninterpolateClamp(a, b) { + b = (b -= a = +a) || 1 / b; + return function(x) { return Math.max(0, Math.min(1, (x - a) / b)); }; +} diff --git a/web/nms.gathering.org/speedometer/d3-master/src/interpolate/zoom.js b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/zoom.js new file mode 100644 index 0000000..ae6b5c7 --- /dev/null +++ b/web/nms.gathering.org/speedometer/d3-master/src/interpolate/zoom.js @@ -0,0 +1,47 @@ +import "../math/trigonometry"; + +var ρ = Math.SQRT2, + ρ2 = 2, + ρ4 = 4; + +// p0 = [ux0, uy0, w0] +// p1 = [ux1, uy1, w1] +d3.interpolateZoom = function(p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], + ux1 = p1[0], uy1 = p1[1], w1 = p1[2]; + + var dx = ux1 - ux0, + dy = uy1 - uy0, + d2 = dx * dx + dy * dy, + d1 = Math.sqrt(d2), + b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), + b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), + r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), + r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), + dr = r1 - r0, + S = (dr || Math.log(w1 / w0)) / ρ; + + function interpolate(t) { + var s = t * S; + if (dr) { + // General case. + var coshr0 = d3_cosh(r0), + u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)); + return [ + ux0 + u * dx, + uy0 + u * dy, + w0 * coshr0 / d3_cosh(ρ * s + r0) + ]; + } + // Special case for u0 ~= u1. + return [ + ux0 + t * dx, + uy0 + t * dy, + w0 * Math.exp(ρ * s) + ]; + } + + interpolate.duration = S * 1000; + + return interpolate; +}; |