@antv/f2
Version:
Charts for mobile visualization.
87 lines (86 loc) • 2.89 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Node = Node;
exports.computeHeight = computeHeight;
exports.default = hierarchy;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _count = _interopRequireDefault(require("./count.js"));
var _each = _interopRequireDefault(require("./each.js"));
var _eachBefore = _interopRequireDefault(require("./eachBefore.js"));
var _eachAfter = _interopRequireDefault(require("./eachAfter.js"));
var _find = _interopRequireDefault(require("./find.js"));
var _sum = _interopRequireDefault(require("./sum.js"));
var _sort = _interopRequireDefault(require("./sort.js"));
var _path = _interopRequireDefault(require("./path.js"));
var _ancestors = _interopRequireDefault(require("./ancestors.js"));
var _descendants = _interopRequireDefault(require("./descendants.js"));
var _leaves = _interopRequireDefault(require("./leaves.js"));
var _links = _interopRequireDefault(require("./links.js"));
var _iterator = _interopRequireDefault(require("./iterator.js"));
function hierarchy(data, children) {
if (data instanceof Map) {
data = [undefined, data];
if (children === undefined) children = mapChildren;
} else if (children === undefined) {
children = objectChildren;
}
var root = new Node(data),
node,
nodes = [root],
child,
childs,
i,
n;
while (node = nodes.pop()) {
if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {
node.children = childs;
for (i = n - 1; i >= 0; --i) {
nodes.push(child = childs[i] = new Node(childs[i]));
child.parent = node;
child.depth = node.depth + 1;
}
}
}
return root.eachBefore(computeHeight);
}
function node_copy() {
return hierarchy(this).eachBefore(copyData);
}
function objectChildren(d) {
return d.children;
}
function mapChildren(d) {
return Array.isArray(d) ? d[1] : null;
}
function copyData(node) {
if (node.data.value !== undefined) node.value = node.data.value;
node.data = node.data.data;
}
function computeHeight(node) {
var height = 0;
do node.height = height; while ((node = node.parent) && node.height < ++height);
}
function Node(data) {
this.data = data;
this.depth = this.height = 0;
this.parent = null;
}
Node.prototype = hierarchy.prototype = (0, _defineProperty2.default)({
constructor: Node,
count: _count.default,
each: _each.default,
eachAfter: _eachAfter.default,
eachBefore: _eachBefore.default,
find: _find.default,
sum: _sum.default,
sort: _sort.default,
path: _path.default,
ancestors: _ancestors.default,
descendants: _descendants.default,
leaves: _leaves.default,
links: _links.default,
copy: node_copy
}, Symbol.iterator, _iterator.default);
;