g6/demos/assets/hierarchy.js

1225 lines
29 KiB
JavaScript
Raw Normal View History

(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["Hierarchy"] = factory();
else
root["Hierarchy"] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 5);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
var assign = __webpack_require__(7);
module.exports = {
assign: assign
};
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
var hierarchy = __webpack_require__(3);
var Layout =
/*#__PURE__*/
function () {
function Layout(root, options) {
if (options === void 0) {
options = {};
}
var me = this;
me.options = options;
me.rootNode = hierarchy(root, options);
}
var _proto = Layout.prototype;
_proto.execute = function execute() {
throw new Error('please override this method');
};
return Layout;
}();
module.exports = Layout;
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
var separateTree = __webpack_require__(4);
var VALID_DIRECTIONS = ['LR', // left to right
'RL', // right to left
'TB', // top to bottom
'BT', // bottom to top
'H', // horizontal
'V' // vertical
];
var HORIZONTAL_DIRECTIONS = ['LR', 'RL', 'H'];
var isHorizontal = function isHorizontal(direction) {
return HORIZONTAL_DIRECTIONS.indexOf(direction) > -1;
};
var DEFAULT_DIRECTION = VALID_DIRECTIONS[0];
module.exports = function (root, options, layoutAlgrithm) {
var direction = options.direction || DEFAULT_DIRECTION;
options.isHorizontal = isHorizontal(direction);
if (direction && VALID_DIRECTIONS.indexOf(direction) === -1) {
throw new TypeError("Invalid direction: " + direction);
}
if (direction === VALID_DIRECTIONS[0]) {
// LR
layoutAlgrithm(root, options);
} else if (direction === VALID_DIRECTIONS[1]) {
// RL
layoutAlgrithm(root, options);
root.right2left();
} else if (direction === VALID_DIRECTIONS[2]) {
// TB
layoutAlgrithm(root, options);
} else if (direction === VALID_DIRECTIONS[3]) {
// BT
layoutAlgrithm(root, options);
root.bottom2top();
} else if (direction === VALID_DIRECTIONS[4] || direction === VALID_DIRECTIONS[5]) {
// H or V
// separate into left and right trees
var _separateTree = separateTree(root, options),
left = _separateTree.left,
right = _separateTree.right; // do layout for left and right trees
layoutAlgrithm(left, options);
layoutAlgrithm(right, options);
options.isHorizontal ? left.right2left() : left.bottom2top(); // combine left and right trees
right.translate(left.x - right.x, left.y - right.y); // translate root
root.x = left.x;
root.y = right.y;
var bb = root.getBoundingBox();
if (options.isHorizontal) {
if (bb.top < 0) {
root.translate(0, -bb.top);
}
} else {
if (bb.left < 0) {
root.translate(-bb.left, 0);
}
}
}
//root.translate(-(root.x + root.width / 2 + root.hgap), -(root.y + root.height / 2 + root.vgap));
return root;
};
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
/* eslint-disable no-cond-assign */
var util = __webpack_require__(0);
var PEM = 18;
var DEFAULT_HEIGHT = PEM * 2;
var DEFAULT_GAP = PEM;
var DEFAULT_OPTIONS = {
getId: function getId(d) {
return d.id || d.name;
},
getHGap: function getHGap(d) {
return d.hgap || DEFAULT_GAP;
},
getVGap: function getVGap(d) {
return d.vgap || DEFAULT_GAP;
},
getChildren: function getChildren(d) {
return d.children;
},
getHeight: function getHeight(d) {
return d.height || DEFAULT_HEIGHT;
},
getWidth: function getWidth(d) {
var name = d.name || ' ';
return d.width || name.split('').length * PEM; // FIXME DO NOT get width like this
}
};
function Node(data, options) {
var me = this;
me.vgap = me.hgap = 0;
if (data instanceof Node) return data;
me.data = data;
/*
* Gaps: filling space between nodes
* (x, y) ----------------------
* | vgap |
* | -------------------- h
* | h | | e
* | g | | i
* | a | | g
* | p | | h
* | --------------------- t
* | |
* -----------width------------
*/
var hgap = options.getHGap(data);
var vgap = options.getVGap(data);
me.width = options.getWidth(data);
me.height = options.getHeight(data);
me.id = options.getId(data);
me.x = me.y = 0;
me.depth = 0;
if (!me.children) {
me.children = [];
}
me.addGap(hgap, vgap);
return me;
}
util.assign(Node.prototype, {
isRoot: function isRoot() {
return this.depth === 0;
},
isLeaf: function isLeaf() {
return this.children.length === 0;
},
addGap: function addGap(hgap, vgap) {
var me = this;
me.hgap += hgap;
me.vgap += vgap;
me.width += 2 * hgap;
me.height += 2 * vgap;
},
eachNode: function eachNode(callback) {
// Depth First traverse
var me = this;
var nodes = [me];
var current;
while (current = nodes.pop()) {
callback(current);
nodes = nodes.concat(current.children);
}
},
DFTraverse: function DFTraverse(callback) {
// Depth First traverse
this.eachNode(callback);
},
BFTraverse: function BFTraverse(callback) {
// Breadth First traverse
var me = this;
var nodes = [me];
var current;
while (current = nodes.shift()) {
callback(current);
nodes = nodes.concat(current.children);
}
},
getBoundingBox: function getBoundingBox() {
// BBox for just one tree node
var bb = {
left: Number.MAX_VALUE,
top: Number.MAX_VALUE,
width: 0,
height: 0
};
this.eachNode(function (node) {
bb.left = Math.min(bb.left, node.x);
bb.top = Math.min(bb.top, node.y);
bb.width = Math.max(bb.width, node.x + node.width);
bb.height = Math.max(bb.height, node.y + node.height);
});
return bb;
},
// translate
translate: function translate(tx, ty) {
if (tx === void 0) {
tx = 0;
}
if (ty === void 0) {
ty = 0;
}
this.eachNode(function (node) {
node.x += tx;
node.y += ty;
});
},
right2left: function right2left() {
var me = this;
var bb = me.getBoundingBox();
me.eachNode(function (node) {
node.x = node.x - (node.x - bb.left) * 2 - node.width; // node.x = - node.x;
});
me.translate(bb.width, 0);
},
bottom2top: function bottom2top() {
var me = this;
var bb = me.getBoundingBox();
me.eachNode(function (node) {
node.y = node.y - (node.y - bb.top) * 2 - node.height; // node.y = - node.y;
});
me.translate(0, bb.height);
}
});
function hierarchy(data, options, isolated) {
if (options === void 0) {
options = {};
}
options = util.assign({}, DEFAULT_OPTIONS, options);
var root = new Node(data, options);
var nodes = [root];
var node;
if (!isolated && !data.collapsed) {
while (node = nodes.pop()) {
if (!node.data.collapsed) {
var children = options.getChildren(node.data);
var length = children ? children.length : 0;
node.children = new Array(length);
if (children && length) {
for (var i = 0; i < length; i++) {
var child = new Node(children[i], options);
node.children[i] = child;
nodes.push(child);
child.parent = node;
child.depth = node.depth + 1;
}
}
}
}
}
return root;
}
module.exports = hierarchy;
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
var hierarchy = __webpack_require__(3);
module.exports = function (root, options) {
// separate into left and right trees
var left = hierarchy(root.data, options, true); // root only
var right = hierarchy(root.data, options, true); // root only
// automatically
var treeSize = root.children.length;
var rightTreeSize = Math.round(treeSize / 2); // separate left and right tree by meta data
var getSide = options.getSide || function (child, index) {
if (index < rightTreeSize) {
return 'right';
}
return 'left';
};
for (var i = 0; i < treeSize; i++) {
var child = root.children[i];
var side = getSide(child, i);
if (side === 'right') {
right.children.push(child);
} else {
left.children.push(child);
}
}
left.eachNode(function (node) {
if (!node.isRoot()) {
node.side = 'left';
}
});
right.eachNode(function (node) {
if (!node.isRoot()) {
node.side = 'right';
}
});
return {
left: left,
right: right
};
};
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
var hierarchy = {
compactBox: __webpack_require__(6),
dendrogram: __webpack_require__(9),
indented: __webpack_require__(11),
mindmap: __webpack_require__(13)
};
module.exports = hierarchy;
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
var TreeLayout = __webpack_require__(1);
var nonLayeredTidyTree = __webpack_require__(8);
var doTreeLayout = __webpack_require__(2);
var util = __webpack_require__(0);
var CompactBoxTreeLayout =
/*#__PURE__*/
function (_TreeLayout) {
_inheritsLoose(CompactBoxTreeLayout, _TreeLayout);
function CompactBoxTreeLayout() {
return _TreeLayout.apply(this, arguments) || this;
}
var _proto = CompactBoxTreeLayout.prototype;
_proto.execute = function execute() {
var me = this;
return doTreeLayout(me.rootNode, me.options, nonLayeredTidyTree);
};
return CompactBoxTreeLayout;
}(TreeLayout);
var DEFAULT_OPTIONS = {};
function compactBoxLayout(root, options) {
options = util.assign({}, DEFAULT_OPTIONS, options);
return new CompactBoxTreeLayout(root, options).execute();
}
module.exports = compactBoxLayout;
/***/ }),
/* 7 */
/***/ (function(module, exports) {
function _mix(dist, obj) {
for (var key in obj) {
if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {
dist[key] = obj[key];
}
}
}
var mix = function mix(dist, src1, src2, src3) {
if (src1) _mix(dist, src1);
if (src2) _mix(dist, src2);
if (src3) _mix(dist, src3);
return dist;
};
module.exports = mix;
/***/ }),
/* 8 */
/***/ (function(module, exports) {
// wrap tree node
function WrappedTree(w, h, y, c) {
if (c === void 0) {
c = [];
}
var me = this; // size
me.w = w || 0;
me.h = h || 0; // position
me.y = y || 0;
me.x = 0; // children
me.c = c || [];
me.cs = c.length; // modified
me.prelim = 0;
me.mod = 0;
me.shift = 0;
me.change = 0; // left/right tree
me.tl = null;
me.tr = null; // extreme left/right tree
me.el = null;
me.er = null; // modified left/right tree
me.msel = 0;
me.mser = 0;
}
WrappedTree.fromNode = function (root, isHorizontal) {
if (!root) return null;
var children = [];
root.children.forEach(function (child) {
children.push(WrappedTree.fromNode(child, isHorizontal));
});
if (isHorizontal) return new WrappedTree(root.height, root.width, root.x, children);
return new WrappedTree(root.width, root.height, root.y, children);
}; // node utils
function moveRight(node, move, isHorizontal) {
if (isHorizontal) {
node.y += move;
} else {
node.x += move;
}
node.children.forEach(function (child) {
moveRight(child, move, isHorizontal);
});
}
function getMin(node, isHorizontal) {
var res = isHorizontal ? node.y : node.x;
node.children.forEach(function (child) {
res = Math.min(getMin(child, isHorizontal), res);
});
return res;
}
function normalize(node, isHorizontal) {
var min = getMin(node, isHorizontal);
moveRight(node, -min, isHorizontal);
}
function convertBack(converted
/* WrappedTree */
, root
/* TreeNode */
, isHorizontal) {
if (isHorizontal) {
root.y = converted.x;
} else {
root.x = converted.x;
}
converted.c.forEach(function (child, i) {
convertBack(child, root.children[i], isHorizontal);
});
}
function layer(node, isHorizontal, d) {
if (d === void 0) {
d = 0;
}
if (isHorizontal) {
node.x = d;
d += node.width;
} else {
node.y = d;
d += node.height;
}
node.children.forEach(function (child) {
layer(child, isHorizontal, d);
});
}
module.exports = function (root, options) {
if (options === void 0) {
options = {};
}
var isHorizontal = options.isHorizontal;
function firstWalk(t) {
if (t.cs === 0) {
setExtremes(t);
return;
}
firstWalk(t.c[0]);
var ih = updateIYL(bottom(t.c[0].el), 0, null);
for (var i = 1; i < t.cs; ++i) {
firstWalk(t.c[i]);
var min = bottom(t.c[i].er);
separate(t, i, ih);
ih = updateIYL(min, i, ih);
}
positionRoot(t);
setExtremes(t);
}
function setExtremes(t) {
if (t.cs === 0) {
t.el = t;
t.er = t;
t.msel = t.mser = 0;
} else {
t.el = t.c[0].el;
t.msel = t.c[0].msel;
t.er = t.c[t.cs - 1].er;
t.mser = t.c[t.cs - 1].mser;
}
}
function separate(t, i, ih) {
var sr = t.c[i - 1];
var mssr = sr.mod;
var cl = t.c[i];
var mscl = cl.mod;
while (sr !== null && cl !== null) {
if (bottom(sr) > ih.low) ih = ih.nxt;
var dist = mssr + sr.prelim + sr.w - (mscl + cl.prelim);
if (dist > 0) {
mscl += dist;
moveSubtree(t, i, ih.index, dist);
}
var sy = bottom(sr);
var cy = bottom(cl);
if (sy <= cy) {
sr = nextRightContour(sr);
if (sr !== null) mssr += sr.mod;
}
if (sy >= cy) {
cl = nextLeftContour(cl);
if (cl !== null) mscl += cl.mod;
}
}
if (!sr && !!cl) {
setLeftThread(t, i, cl, mscl);
} else if (!!sr && !cl) {
setRightThread(t, i, sr, mssr);
}
}
function moveSubtree(t, i, si, dist) {
t.c[i].mod += dist;
t.c[i].msel += dist;
t.c[i].mser += dist;
distributeExtra(t, i, si, dist);
}
function nextLeftContour(t) {
return t.cs === 0 ? t.tl : t.c[0];
}
function nextRightContour(t) {
return t.cs === 0 ? t.tr : t.c[t.cs - 1];
}
function bottom(t) {
return t.y + t.h;
}
function setLeftThread(t, i, cl, modsumcl) {
var li = t.c[0].el;
li.tl = cl;
var diff = modsumcl - cl.mod - t.c[0].msel;
li.mod += diff;
li.prelim -= diff;
t.c[0].el = t.c[i].el;
t.c[0].msel = t.c[i].msel;
}
function setRightThread(t, i, sr, modsumsr) {
var ri = t.c[i].er;
ri.tr = sr;
var diff = modsumsr - sr.mod - t.c[i].mser;
ri.mod += diff;
ri.prelim -= diff;
t.c[i].er = t.c[i - 1].er;
t.c[i].mser = t.c[i - 1].mser;
}
function positionRoot(t) {
t.prelim = (t.c[0].prelim + t.c[0].mod + t.c[t.cs - 1].mod + t.c[t.cs - 1].prelim + t.c[t.cs - 1].w) / 2 - t.w / 2;
}
function secondWalk(t, modsum) {
modsum += t.mod;
t.x = t.prelim + modsum;
addChildSpacing(t);
for (var i = 0; i < t.cs; i++) {
secondWalk(t.c[i], modsum);
}
}
function distributeExtra(t, i, si, dist) {
if (si !== i - 1) {
var nr = i - si;
t.c[si + 1].shift += dist / nr;
t.c[i].shift -= dist / nr;
t.c[i].change -= dist - dist / nr;
}
}
function addChildSpacing(t) {
var d = 0;
var modsumdelta = 0;
for (var i = 0; i < t.cs; i++) {
d += t.c[i].shift;
modsumdelta += d + t.c[i].change;
t.c[i].mod += modsumdelta;
}
}
function updateIYL(low, index, ih) {
while (ih !== null && low >= ih.low) {
ih = ih.nxt;
}
return {
low: low,
index: index,
nxt: ih
};
} // do layout
layer(root, isHorizontal);
var wt = WrappedTree.fromNode(root, isHorizontal);
firstWalk(wt);
secondWalk(wt, 0);
convertBack(wt, root, isHorizontal);
normalize(root, isHorizontal);
return root;
};
/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
var TreeLayout = __webpack_require__(1);
var dendrogram = __webpack_require__(10);
var doTreeLayout = __webpack_require__(2);
var util = __webpack_require__(0);
var DendrogramLayout =
/*#__PURE__*/
function (_TreeLayout) {
_inheritsLoose(DendrogramLayout, _TreeLayout);
function DendrogramLayout() {
return _TreeLayout.apply(this, arguments) || this;
}
var _proto = DendrogramLayout.prototype;
_proto.execute = function execute() {
var me = this;
me.rootNode.width = 0;
return doTreeLayout(me.rootNode, me.options, dendrogram);
};
return DendrogramLayout;
}(TreeLayout);
var DEFAULT_OPTIONS = {};
function dendrogramLayout(root, options) {
options = util.assign({}, DEFAULT_OPTIONS, options);
return new DendrogramLayout(root, options).execute();
}
module.exports = dendrogramLayout;
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
// wrap tree node
// TODO considering size
var util = __webpack_require__(0);
function WrappedTree(height, children) {
if (height === void 0) {
height = 0;
}
if (children === void 0) {
children = [];
}
var me = this;
me.x = me.y = 0;
me.leftChild = me.rightChild = null;
me.height = 0;
me.children = children;
}
var DEFAULT_OPTIONS = {
isHorizontal: true,
nodeSep: 20,
nodeSize: 20,
rankSep: 200,
subTreeSep: 10
};
function convertBack(converted
/* WrappedTree */
, root
/* TreeNode */
, isHorizontal) {
if (isHorizontal) {
root.x = converted.x;
root.y = converted.y;
} else {
root.x = converted.y;
root.y = converted.x;
}
converted.children.forEach(function (child, i) {
convertBack(child, root.children[i], isHorizontal);
});
}
module.exports = function (root, options) {
if (options === void 0) {
options = {};
}
options = util.assign({}, DEFAULT_OPTIONS, options);
var maxDepth = 0;
function wrappedTreeFromNode(n) {
if (!n) return null;
n.width = 0;
if (n.depth && n.depth > maxDepth) {
maxDepth = n.depth; // get the max depth
}
var children = n.children;
var childrenCount = children.length;
var t = new WrappedTree(n.height, []);
children.forEach(function (child, i) {
var childWT = wrappedTreeFromNode(child);
t.children.push(childWT);
if (i === 0) {
// t.leftChild = childWT.leftChild ? childWT.leftChild : childWT
t.leftChild = childWT;
}
if (i === childrenCount - 1) {
// t.rightChild = childWT.rightChild ? childWT.rightChild : childWT
t.rightChild = childWT;
}
});
t.originNode = n;
t.isLeaf = n.isLeaf();
return t;
}
function getDrawingDepth(t) {
if (t.isLeaf || t.children.length === 0) {
t.drawingDepth = maxDepth;
} else {
var depths = t.children.map(function (child) {
return getDrawingDepth(child);
});
var minChildDepth = Math.min.apply(null, depths);
t.drawingDepth = minChildDepth - 1;
}
return t.drawingDepth;
}
var prevLeaf;
function position(t) {
t.x = t.drawingDepth * options.rankSep;
if (t.isLeaf) {
t.y = 0;
if (prevLeaf) {
t.y = prevLeaf.y + prevLeaf.height + options.nodeSep;
if (t.originNode.parent !== prevLeaf.originNode.parent) {
t.y += options.subTreeSep;
}
}
prevLeaf = t;
} else {
t.children.forEach(function (child) {
position(child);
});
t.y = (t.leftChild.y + t.rightChild.y) / 2;
}
} // wrap node
var wt = wrappedTreeFromNode(root); // get depth for drawing
getDrawingDepth(wt); // get position
position(wt); // get x, y
convertBack(wt, root, options.isHorizontal);
return root;
};
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
var TreeLayout = __webpack_require__(1);
var indentedTree = __webpack_require__(12);
var separateTree = __webpack_require__(4);
var util = __webpack_require__(0);
var VALID_DIRECTIONS = ['LR', // left to right
'RL', // right to left
'H' // horizontal
];
var DEFAULT_DIRECTION = VALID_DIRECTIONS[0];
var IndentedLayout =
/*#__PURE__*/
function (_TreeLayout) {
_inheritsLoose(IndentedLayout, _TreeLayout);
function IndentedLayout() {
return _TreeLayout.apply(this, arguments) || this;
}
var _proto = IndentedLayout.prototype;
_proto.execute = function execute() {
var me = this;
var options = me.options;
var root = me.rootNode;
options.isHorizontal = true;
var indent = options.indent;
var direction = options.direction || DEFAULT_DIRECTION;
if (direction && VALID_DIRECTIONS.indexOf(direction) === -1) {
throw new TypeError("Invalid direction: " + direction);
}
if (direction === VALID_DIRECTIONS[0]) {
// LR
indentedTree(root, indent);
} else if (direction === VALID_DIRECTIONS[1]) {
// RL
indentedTree(root, indent);
root.right2left();
} else if (direction === VALID_DIRECTIONS[2]) {
// H
// separate into left and right trees
var _separateTree = separateTree(root, options),
left = _separateTree.left,
right = _separateTree.right;
indentedTree(left, indent);
left.right2left();
indentedTree(right, indent);
var bbox = left.getBoundingBox();
right.translate(bbox.width, 0);
root.x = right.x - root.width / 2;
}
return root;
};
return IndentedLayout;
}(TreeLayout);
var DEFAULT_OPTIONS = {};
function indentedLayout(root, options) {
options = util.assign({}, DEFAULT_OPTIONS, options);
return new IndentedLayout(root, options).execute();
}
module.exports = indentedLayout;
/***/ }),
/* 12 */
/***/ (function(module, exports) {
var DEFAULT_INDENT = 20;
function positionNode(node, previousNode, dx) {
node.x += dx * node.depth;
node.y = previousNode ? previousNode.y + previousNode.height : 0;
}
module.exports = function (root, indent) {
if (indent === void 0) {
indent = DEFAULT_INDENT;
}
var previousNode = null;
root.eachNode(function (node) {
positionNode(node, previousNode, indent);
previousNode = node;
});
};
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
var TreeLayout = __webpack_require__(1);
var mindmap = __webpack_require__(14);
var doTreeLayout = __webpack_require__(2);
var util = __webpack_require__(0);
var MindmapLayout =
/*#__PURE__*/
function (_TreeLayout) {
_inheritsLoose(MindmapLayout, _TreeLayout);
function MindmapLayout() {
return _TreeLayout.apply(this, arguments) || this;
}
var _proto = MindmapLayout.prototype;
_proto.execute = function execute() {
var me = this;
return doTreeLayout(me.rootNode, me.options, mindmap);
};
return MindmapLayout;
}(TreeLayout);
var DEFAULT_OPTIONS = {};
function mindmapLayout(root, options) {
options = util.assign({}, DEFAULT_OPTIONS, options);
return new MindmapLayout(root, options).execute();
}
module.exports = mindmapLayout;
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
var util = __webpack_require__(0);
function secondWalk(node, options) {
var totalHeight = 0;
if (!node.children.length) {
totalHeight = node.height;
} else {
node.children.forEach(function (c) {
totalHeight += secondWalk(c, options);
});
}
node._subTreeSep = options.getSubTreeSep(node.data);
node.totalHeight = Math.max(node.height, totalHeight) + 2 * node._subTreeSep;
return node.totalHeight;
}
function thirdWalk(node) {
var children = node.children;
var len = children.length;
if (len) {
children.forEach(function (c) {
thirdWalk(c);
});
var first = children[0];
var last = children[len - 1];
var childrenHeight = last.y - first.y + last.height;
var childrenTotalHeight = 0;
children.forEach(function (child) {
childrenTotalHeight += child.totalHeight;
});
if (childrenHeight > node.height) {
// 当子节点总高度大于父节点高度
node.y = first.y + childrenHeight / 2 - node.height / 2;
} else if (children.length !== 1 || node.height > childrenTotalHeight) {
// 多于一个子节点或者父节点大于所有子节点的总高度
var offset = node.y + (node.height - childrenHeight) / 2 - first.y;
children.forEach(function (c) {
c.translate(0, offset);
});
} else {
// 只有一个子节点
node.y = (first.y + first.height / 2 + last.y + last.height / 2) / 2 - node.height / 2;
}
}
}
var DEFAULT_OPTIONS = {
getSubTreeSep: function getSubTreeSep() {
return 0;
}
};
module.exports = function (root, options) {
if (options === void 0) {
options = {};
}
options = util.assign({}, DEFAULT_OPTIONS, options);
root.parent = {
x: 0,
width: 0,
height: 0,
y: 0
}; // first walk
root.BFTraverse(function (node) {
node.x = node.parent.x + node.parent.width; // simply get x
});
root.parent = null; // second walk
secondWalk(root, options); // assign sub tree totalHeight
// adjusting
// separating nodes
root.startY = 0;
root.y = root.totalHeight / 2 - root.height / 2;
root.eachNode(function (node) {
var children = node.children;
var len = children.length;
if (len) {
var first = children[0];
first.startY = node.startY + node._subTreeSep;
if (len === 1) {
first.y = node.y + node.height / 2 - first.height / 2;
} else {
first.y = first.startY + first.totalHeight / 2 - first.height / 2;
for (var i = 1; i < len; i++) {
var c = children[i];
c.startY = children[i - 1].startY + children[i - 1].totalHeight;
c.y = c.startY + c.totalHeight / 2 - c.height / 2;
}
}
}
}); // third walk
thirdWalk(root);
};
/***/ })
/******/ ]);
});
//# sourceMappingURL=hierarchy.js.map