| 1 | "use strict";
|
|---|
| 2 |
|
|---|
| 3 | Object.defineProperty(exports, "__esModule", {
|
|---|
| 4 | value: true
|
|---|
| 5 | });
|
|---|
| 6 | exports.default = _default;
|
|---|
| 7 | var _array = _interopRequireDefault(require("./array.js"));
|
|---|
| 8 | var _constant = _interopRequireDefault(require("./constant.js"));
|
|---|
| 9 | var _descending = _interopRequireDefault(require("./descending.js"));
|
|---|
| 10 | var _identity = _interopRequireDefault(require("./identity.js"));
|
|---|
| 11 | var _math = require("./math.js");
|
|---|
| 12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|---|
| 13 | function _default() {
|
|---|
| 14 | var value = _identity.default,
|
|---|
| 15 | sortValues = _descending.default,
|
|---|
| 16 | sort = null,
|
|---|
| 17 | startAngle = (0, _constant.default)(0),
|
|---|
| 18 | endAngle = (0, _constant.default)(_math.tau),
|
|---|
| 19 | padAngle = (0, _constant.default)(0);
|
|---|
| 20 | function pie(data) {
|
|---|
| 21 | var i,
|
|---|
| 22 | n = (data = (0, _array.default)(data)).length,
|
|---|
| 23 | j,
|
|---|
| 24 | k,
|
|---|
| 25 | sum = 0,
|
|---|
| 26 | index = new Array(n),
|
|---|
| 27 | arcs = new Array(n),
|
|---|
| 28 | a0 = +startAngle.apply(this, arguments),
|
|---|
| 29 | da = Math.min(_math.tau, Math.max(-_math.tau, endAngle.apply(this, arguments) - a0)),
|
|---|
| 30 | a1,
|
|---|
| 31 | p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
|
|---|
| 32 | pa = p * (da < 0 ? -1 : 1),
|
|---|
| 33 | v;
|
|---|
| 34 | for (i = 0; i < n; ++i) {
|
|---|
| 35 | if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
|
|---|
| 36 | sum += v;
|
|---|
| 37 | }
|
|---|
| 38 | }
|
|---|
| 39 |
|
|---|
| 40 | // Optionally sort the arcs by previously-computed values or by data.
|
|---|
| 41 | if (sortValues != null) index.sort(function (i, j) {
|
|---|
| 42 | return sortValues(arcs[i], arcs[j]);
|
|---|
| 43 | });else if (sort != null) index.sort(function (i, j) {
|
|---|
| 44 | return sort(data[i], data[j]);
|
|---|
| 45 | });
|
|---|
| 46 |
|
|---|
| 47 | // Compute the arcs! They are stored in the original data's order.
|
|---|
| 48 | for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
|
|---|
| 49 | j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
|
|---|
| 50 | data: data[j],
|
|---|
| 51 | index: i,
|
|---|
| 52 | value: v,
|
|---|
| 53 | startAngle: a0,
|
|---|
| 54 | endAngle: a1,
|
|---|
| 55 | padAngle: p
|
|---|
| 56 | };
|
|---|
| 57 | }
|
|---|
| 58 | return arcs;
|
|---|
| 59 | }
|
|---|
| 60 | pie.value = function (_) {
|
|---|
| 61 | return arguments.length ? (value = typeof _ === "function" ? _ : (0, _constant.default)(+_), pie) : value;
|
|---|
| 62 | };
|
|---|
| 63 | pie.sortValues = function (_) {
|
|---|
| 64 | return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
|
|---|
| 65 | };
|
|---|
| 66 | pie.sort = function (_) {
|
|---|
| 67 | return arguments.length ? (sort = _, sortValues = null, pie) : sort;
|
|---|
| 68 | };
|
|---|
| 69 | pie.startAngle = function (_) {
|
|---|
| 70 | return arguments.length ? (startAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), pie) : startAngle;
|
|---|
| 71 | };
|
|---|
| 72 | pie.endAngle = function (_) {
|
|---|
| 73 | return arguments.length ? (endAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), pie) : endAngle;
|
|---|
| 74 | };
|
|---|
| 75 | pie.padAngle = function (_) {
|
|---|
| 76 | return arguments.length ? (padAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), pie) : padAngle;
|
|---|
| 77 | };
|
|---|
| 78 | return pie;
|
|---|
| 79 | } |
|---|