ngx-diagrams
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
102 lines • 8.79 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/services/dagre-engine.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { PointModel } from '../models';
import * as dagre from 'dagre';
/**
* @record
*/
export function DagreEngineOptions() { }
if (false) {
/** @type {?|undefined} */
DagreEngineOptions.prototype.graph;
/** @type {?|undefined} */
DagreEngineOptions.prototype.layout;
/**
* Will also layout links
* @type {?|undefined}
*/
DagreEngineOptions.prototype.includeLinks;
}
export class DagreEngine {
constructor() { }
/**
* @param {?} model
* @param {?=} options
* @return {?}
*/
redistribute(model, options = {}) {
/** @type {?} */
const g = new dagre.graphlib.Graph({ multigraph: true });
g.setGraph(options.graph || {});
g.setDefaultEdgeLabel((/**
* @return {?}
*/
() => {
return {};
}));
/** @type {?} */
const processedlinks = {};
// set nodes
Object.values(model.getNodes()).forEach((/**
* @param {?} node
* @return {?}
*/
node => {
g.setNode(node.id, { width: node.getWidth(), height: node.getHeight() });
}));
Object.values(model.getLinks()).forEach((/**
* @param {?} link
* @return {?}
*/
link => {
// set edges
if (link.getSourcePort() && link.getTargetPort()) {
processedlinks[link.id] = true;
g.setEdge({
v: link.getSourcePort().getNode().id,
w: link.getTargetPort().getNode().id,
name: link.id
});
}
}));
// layout the graph
dagre.layout(g, options.layout);
g.nodes().forEach((/**
* @param {?} v
* @return {?}
*/
v => {
const { x, y } = g.node(v);
model.getNode(v).setCoords({ x, y });
}));
// also include links?
if (options.includeLinks) {
g.edges().forEach((/**
* @param {?} e
* @return {?}
*/
e => {
/** @type {?} */
const edge = g.edge(e);
/** @type {?} */
const link = model.getLink(e.name);
/** @type {?} */
const points = [link.getFirstPoint()];
for (let i = 1; i < edge.points.length - 2; i++) {
points.push(new PointModel(link, { x: edge.points[i].x, y: edge.points[i].y }));
}
link.setPoints(points.concat(link.getLastPoint()));
}));
}
}
}
DagreEngine.decorators = [
{ type: Injectable }
];
/** @nocollapse */
DagreEngine.ctorParameters = () => [];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFncmUtZW5naW5lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZGlhZ3JhbXMvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvZGFncmUtZW5naW5lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOzs7O0FBRy9CLHdDQU9DOzs7SUFOQSxtQ0FBbUI7O0lBQ25CLG9DQUE4Qzs7Ozs7SUFJOUMsMENBQXVCOztBQUl4QixNQUFNLE9BQU8sV0FBVztJQUN2QixnQkFBZSxDQUFDOzs7Ozs7SUFFaEIsWUFBWSxDQUFDLEtBQW1CLEVBQUUsVUFBOEIsRUFBRTs7Y0FDM0QsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFeEQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLENBQUMsQ0FBQyxtQkFBbUI7OztRQUFDLEdBQUcsRUFBRTtZQUMxQixPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUMsRUFBQyxDQUFDOztjQUVHLGNBQWMsR0FBOEIsRUFBRTtRQUVwRCxZQUFZO1FBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPOzs7O1FBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDLEVBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTzs7OztRQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlDLFlBQVk7WUFDWixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pELGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixDQUFDLENBQUMsT0FBTyxDQUFDO29CQUNULENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtvQkFDcEMsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO29CQUNwQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7aUJBQ2IsQ0FBQyxDQUFDO2FBQ0g7UUFDRixDQUFDLEVBQUMsQ0FBQztRQUVILG1CQUFtQjtRQUNuQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU87Ozs7UUFBQyxDQUFDLENBQUMsRUFBRTtrQkFDZixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsRUFBQyxDQUFDO1FBRUgsc0JBQXNCO1FBQ3RCLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtZQUN6QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTzs7OztZQUFDLENBQUMsQ0FBQyxFQUFFOztzQkFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O3NCQUNoQixJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOztzQkFFNUIsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2hGO2dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BELENBQUMsRUFBQyxDQUFDO1NBQ0g7SUFDRixDQUFDOzs7WUFyREQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpYWdyYW1Nb2RlbCwgUG9pbnRNb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgKiBhcyBkYWdyZSBmcm9tICdkYWdyZSc7XG5pbXBvcnQgeyBHcmFwaExhYmVsLCBOb2RlQ29uZmlnLCBFZGdlQ29uZmlnIH0gZnJvbSAnZGFncmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhZ3JlRW5naW5lT3B0aW9ucyB7XG5cdGdyYXBoPzogR3JhcGhMYWJlbDtcblx0bGF5b3V0PzogR3JhcGhMYWJlbCAmIE5vZGVDb25maWcgJiBFZGdlQ29uZmlnO1xuXHQvKipcblx0ICogV2lsbCBhbHNvIGxheW91dCBsaW5rc1xuXHQgKi9cblx0aW5jbHVkZUxpbmtzPzogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhZ3JlRW5naW5lIHtcblx0Y29uc3RydWN0b3IoKSB7fVxuXG5cdHJlZGlzdHJpYnV0ZShtb2RlbDogRGlhZ3JhbU1vZGVsLCBvcHRpb25zOiBEYWdyZUVuZ2luZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuXHRcdGNvbnN0IGcgPSBuZXcgZGFncmUuZ3JhcGhsaWIuR3JhcGgoeyBtdWx0aWdyYXBoOiB0cnVlIH0pO1xuXG5cdFx0Zy5zZXRHcmFwaChvcHRpb25zLmdyYXBoIHx8IHt9KTtcblxuXHRcdGcuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoKSA9PiB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSk7XG5cblx0XHRjb25zdCBwcm9jZXNzZWRsaW5rczogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuXG5cdFx0Ly8gc2V0IG5vZGVzXG5cdFx0T2JqZWN0LnZhbHVlcyhtb2RlbC5nZXROb2RlcygpKS5mb3JFYWNoKG5vZGUgPT4ge1xuXHRcdFx0Zy5zZXROb2RlKG5vZGUuaWQsIHsgd2lkdGg6IG5vZGUuZ2V0V2lkdGgoKSwgaGVpZ2h0OiBub2RlLmdldEhlaWdodCgpIH0pO1xuXHRcdH0pO1xuXG5cdFx0T2JqZWN0LnZhbHVlcyhtb2RlbC5nZXRMaW5rcygpKS5mb3JFYWNoKGxpbmsgPT4ge1xuXHRcdFx0Ly8gc2V0IGVkZ2VzXG5cdFx0XHRpZiAobGluay5nZXRTb3VyY2VQb3J0KCkgJiYgbGluay5nZXRUYXJnZXRQb3J0KCkpIHtcblx0XHRcdFx0cHJvY2Vzc2VkbGlua3NbbGluay5pZF0gPSB0cnVlO1xuXHRcdFx0XHRnLnNldEVkZ2Uoe1xuXHRcdFx0XHRcdHY6IGxpbmsuZ2V0U291cmNlUG9ydCgpLmdldE5vZGUoKS5pZCxcblx0XHRcdFx0XHR3OiBsaW5rLmdldFRhcmdldFBvcnQoKS5nZXROb2RlKCkuaWQsXG5cdFx0XHRcdFx0bmFtZTogbGluay5pZFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIGxheW91dCB0aGUgZ3JhcGhcblx0XHRkYWdyZS5sYXlvdXQoZywgb3B0aW9ucy5sYXlvdXQpO1xuXG5cdFx0Zy5ub2RlcygpLmZvckVhY2godiA9PiB7XG5cdFx0XHRjb25zdCB7IHgsIHkgfSA9IGcubm9kZSh2KTtcblx0XHRcdG1vZGVsLmdldE5vZGUodikuc2V0Q29vcmRzKHsgeCwgeSB9KTtcblx0XHR9KTtcblxuXHRcdC8vIGFsc28gaW5jbHVkZSBsaW5rcz9cblx0XHRpZiAob3B0aW9ucy5pbmNsdWRlTGlua3MpIHtcblx0XHRcdGcuZWRnZXMoKS5mb3JFYWNoKGUgPT4ge1xuXHRcdFx0XHRjb25zdCBlZGdlID0gZy5lZGdlKGUpO1xuXHRcdFx0XHRjb25zdCBsaW5rID0gbW9kZWwuZ2V0TGluayhlLm5hbWUpO1xuXG5cdFx0XHRcdGNvbnN0IHBvaW50cyA9IFtsaW5rLmdldEZpcnN0UG9pbnQoKV07XG5cdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgZWRnZS5wb2ludHMubGVuZ3RoIC0gMjsgaSsrKSB7XG5cdFx0XHRcdFx0cG9pbnRzLnB1c2gobmV3IFBvaW50TW9kZWwobGluaywgeyB4OiBlZGdlLnBvaW50c1tpXS54LCB5OiBlZGdlLnBvaW50c1tpXS55IH0pKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaW5rLnNldFBvaW50cyhwb2ludHMuY29uY2F0KGxpbmsuZ2V0TGFzdFBvaW50KCkpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuIl19