UNPKG

ngx-diagrams

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.

327 lines 21.5 kB
/** * @fileoverview added by tsickle * Generated from: lib/models/link.model.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { BaseModel } from './base.model'; import { PointModel } from './point.model'; import { BehaviorSubject } from 'rxjs'; export class LinkModel extends BaseModel { /** * @param {?=} linkType * @param {?=} id */ constructor(linkType = 'default', id) { super(linkType, id); this.label = new BehaviorSubject(null); this.points = [new PointModel(this, { x: 0, y: 0 }), new PointModel(this, { x: 0, y: 0 })]; this.extras = {}; this.sourcePort = null; this.targetPort = null; } /** * @param {?} name * @return {?} */ setName(name) { this.name = name; } /** * @return {?} */ getName() { return this.name; } /** * @return {?} */ getExtras() { return this.extras; } /** * @param {?} extras * @return {?} */ setExtras(extras) { this.extras = extras; } /** * @param {?=} options * @return {?} */ destroy(options) { if (this.sourcePort) { this.sourcePort.removeLink(this); } if (this.targetPort) { this.targetPort.removeLink(this); } super.destroy(options); } /** * @param {?=} lookupTable * @param {?=} clone * @return {?} */ doClone(lookupTable = {}, clone) { clone.setPoints(this.getPoints().map((/** * @param {?} point * @return {?} */ (point) => { return point.clone(lookupTable); }))); if (this.sourcePort) { clone.setSourcePort(this.sourcePort.clone(lookupTable)); } if (this.targetPort) { clone.setTargetPort(this.targetPort.clone(lookupTable)); } } /** * @param {?} point * @return {?} */ isLastPoint(point) { /** @type {?} */ const index = this.getPointIndex(point); return index === this.points.length - 1; } /** * @param {?} point * @return {?} */ getPointIndex(point) { return this.points.indexOf(point); } /** * @param {?} id * @return {?} */ getPointModel(id) { for (const point of this.points) { if (point.id === id) { return point; } } return null; } /** * @param {?} point * @return {?} */ getPortForPoint(point) { if (this.sourcePort !== null && this.getFirstPoint().id === point.id) { return this.sourcePort; } if (this.targetPort !== null && this.getLastPoint().id === point.id) { return this.targetPort; } return null; } /** * @param {?} port * @return {?} */ getPointForPort(port) { if (this.sourcePort !== null && this.sourcePort.id === port.id) { return this.getFirstPoint(); } if (this.targetPort !== null && this.targetPort.id === port.id) { return this.getLastPoint(); } return null; } /** * @return {?} */ getFirstPoint() { return this.points[0]; } /** * @return {?} */ getLastPoint() { return this.points[this.points.length - 1]; } /** * @param {?} port * @return {?} */ setSourcePort(port) { if (port !== null) { port.addLink(this); } if (this.sourcePort !== null) { this.sourcePort.removeLink(this); } this.sourcePort = port; } /** * @return {?} */ getSourcePort() { return this.sourcePort; } /** * @return {?} */ getTargetPort() { return this.targetPort; } /** * @param {?} port * @return {?} */ setTargetPort(port) { if (port !== null) { port.addLink(this); } if (this.targetPort !== null) { this.targetPort.removeLink(this); } this.targetPort = port; } /** * @param {?} __0 * @return {?} */ point({ x, y }) { return this.addPoint(this.generatePoint({ x, y })); } /** * @return {?} */ getPoints() { return this.points; } /** * @param {?} points * @return {?} */ setPoints(points) { points.forEach((/** * @param {?} point * @return {?} */ point => { point.setParent(this); })); this.points = points; } /** * @param {?} label * @return {?} */ setLabel(label) { label.setParent(this); this.label.next(label); label.setPainted(); } /** * @return {?} */ selectLabel() { return this.label.asObservable(); } /** * @return {?} */ getLabel() { return this.label.getValue(); } /** * @return {?} */ resetLabel() { /** @type {?} */ const currentLabel = this.label.getValue(); if (currentLabel) { currentLabel.setParent(null); currentLabel.setPainted(false); } this.label.next(null); } /** * @param {?} pointModel * @return {?} */ removePoint(pointModel) { this.points.splice(this.getPointIndex(pointModel), 1); } /** * @param {?} pointModel * @return {?} */ removePointsBefore(pointModel) { this.points.splice(0, this.getPointIndex(pointModel)); } /** * @param {?} pointModel * @return {?} */ removePointsAfter(pointModel) { this.points.splice(this.getPointIndex(pointModel) + 1); } /** * @return {?} */ removeMiddlePoints() { if (this.points.length > 2) { this.points.splice(0, this.points.length - 2); } } /** * @template P * @param {?} pointModel * @param {?=} index * @return {?} */ addPoint(pointModel, index = 1) { pointModel.setParent(this); this.points.splice(index, 0, pointModel); return pointModel; } /** * @param {?} __0 * @return {?} */ generatePoint({ x = 0, y = 0 }) { return new PointModel(this, { x, y }); } } if (false) { /** @type {?} */ LinkModel.prototype.diagramEngine; /** * @type {?} * @private */ LinkModel.prototype.name; /** * @type {?} * @private */ LinkModel.prototype.sourcePort; /** * @type {?} * @private */ LinkModel.prototype.targetPort; /** * @type {?} * @private */ LinkModel.prototype.points; /** * @type {?} * @private */ LinkModel.prototype.extras; /** * @type {?} * @private */ LinkModel.prototype.label; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1kaWFncmFtcy8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvbGluay5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBT25ELE1BQU0sT0FBTyxTQUFVLFNBQVEsU0FBdUI7Ozs7O0lBWXJELFlBQVksV0FBbUIsU0FBUyxFQUFFLEVBQVc7UUFDcEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhKLFVBQUssR0FBZ0MsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFJL0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Ozs7O0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQzs7OztJQUVELE9BQU87UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEIsQ0FBQzs7OztJQUVELFNBQVM7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFD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dCI6WyJpbXBvcnQgeyBCYXNlTW9kZWwgfSBmcm9tICcuL2Jhc2UubW9kZWwnO1xuaW1wb3J0IHsgRGlhZ3JhbU1vZGVsIH0gZnJvbSAnLi9kaWFncmFtLm1vZGVsJztcbmltcG9ydCB7IFBvcnRNb2RlbCB9IGZyb20gJy4vcG9ydC5tb2RlbCc7XG5pbXBvcnQgeyBQb2ludE1vZGVsIH0gZnJvbSAnLi9wb2ludC5tb2RlbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElEIH0gZnJvbSAnLi4vdXRpbHMvdG9vbC1raXQudXRpbCc7XG5pbXBvcnQgeyBDb29yZHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nvb3Jkcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGFiZWxNb2RlbCB9IGZyb20gJy4vbGFiZWwubW9kZWwnO1xuaW1wb3J0IHsgRGlhZ3JhbUVuZ2luZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IERlc3Ryb3lPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBMaW5rTW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWw8RGlhZ3JhbU1vZGVsPiB7XG5cdGRpYWdyYW1FbmdpbmU6IERpYWdyYW1FbmdpbmU7XG5cblx0Ly8gVE9ETzogZGVjaWRlIHdoYXQgc2hvdWxkIGJlIHJlYWN0aXZlIHVzaW5nIFJYSlNcblx0cHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG5cdHByaXZhdGUgc291cmNlUG9ydDogUG9ydE1vZGVsIHwgbnVsbDtcblx0cHJpdmF0ZSB0YXJnZXRQb3J0OiBQb3J0TW9kZWwgfCBudWxsO1xuXHRwcml2YXRlIHBvaW50czogUG9pbnRNb2RlbFtdO1xuXHRwcml2YXRlIGV4dHJhczogYW55O1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbGFiZWw6IEJlaGF2aW9yU3ViamVjdDxMYWJlbE1vZGVsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cblx0Y29uc3RydWN0b3IobGlua1R5cGU6IHN0cmluZyA9ICdkZWZhdWx0JywgaWQ/OiBzdHJpbmcpIHtcblx0XHRzdXBlcihsaW5rVHlwZSwgaWQpO1xuXHRcdHRoaXMucG9pbnRzID0gW25ldyBQb2ludE1vZGVsKHRoaXMsIHsgeDogMCwgeTogMCB9KSwgbmV3IFBvaW50TW9kZWwodGhpcywgeyB4OiAwLCB5OiAwIH0pXTtcblx0XHR0aGlzLmV4dHJhcyA9IHt9O1xuXHRcdHRoaXMuc291cmNlUG9ydCA9IG51bGw7XG5cdFx0dGhpcy50YXJnZXRQb3J0ID0gbnVsbDtcblx0fVxuXG5cdHNldE5hbWUobmFtZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0fVxuXG5cdGdldE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYW1lO1xuXHR9XG5cblx0Z2V0RXh0cmFzKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuZXh0cmFzO1xuXHR9XG5cblx0c2V0RXh0cmFzKGV4dHJhczogYW55KSB7XG5cdFx0dGhpcy5leHRyYXMgPSBleHRyYXM7XG5cdH1cblxuXHRkZXN0cm95KG9wdGlvbnM/OiBEZXN0cm95T3B0aW9ucykge1xuXHRcdGlmICh0aGlzLnNvdXJjZVBvcnQpIHtcblx0XHRcdHRoaXMuc291cmNlUG9ydC5yZW1vdmVMaW5rKHRoaXMpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnRhcmdldFBvcnQpIHtcblx0XHRcdHRoaXMudGFyZ2V0UG9ydC5yZW1vdmVMaW5rKHRoaXMpO1xuXHRcdH1cblxuXHRcdHN1cGVyLmRlc3Ryb3kob3B0aW9ucyk7XG5cdH1cblxuXHRkb0Nsb25lKGxvb2t1cFRhYmxlID0ge30sIGNsb25lKSB7XG5cdFx0Y2xvbmUuc2V0UG9pbnRzKFxuXHRcdFx0dGhpcy5nZXRQb2ludHMoKS5tYXAoKHBvaW50OiBQb2ludE1vZGVsKSA9PiB7XG5cdFx0XHRcdHJldHVybiBwb2ludC5jbG9uZShsb29rdXBUYWJsZSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0aWYgKHRoaXMuc291cmNlUG9ydCkge1xuXHRcdFx0Y2xvbmUuc2V0U291cmNlUG9ydCh0aGlzLnNvdXJjZVBvcnQuY2xvbmUobG9va3VwVGFibGUpKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMudGFyZ2V0UG9ydCkge1xuXHRcdFx0Y2xvbmUuc2V0VGFyZ2V0UG9ydCh0aGlzLnRhcmdldFBvcnQuY2xvbmUobG9va3VwVGFibGUpKTtcblx0XHR9XG5cdH1cblxuXHRpc0xhc3RQb2ludChwb2ludDogUG9pbnRNb2RlbCkge1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQb2ludEluZGV4KHBvaW50KTtcblx0XHRyZXR1cm4gaW5kZXggPT09IHRoaXMucG9pbnRzLmxlbmd0aCAtIDE7XG5cdH1cblxuXHRnZXRQb2ludEluZGV4KHBvaW50OiBQb2ludE1vZGVsKSB7XG5cdFx0cmV0dXJuIHRoaXMucG9pbnRzLmluZGV4T2YocG9pbnQpO1xuXHR9XG5cblx0Z2V0UG9pbnRNb2RlbChpZDogSUQpOiBQb2ludE1vZGVsIHwgbnVsbCB7XG5cdFx0Zm9yIChjb25zdCBwb2ludCBvZiB0aGlzLnBvaW50cykge1xuXHRcdFx0aWYgKHBvaW50LmlkID09PSBpZCkge1xuXHRcdFx0XHRyZXR1cm4gcG9pbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0UG9ydEZvclBvaW50KHBvaW50OiBQb2ludE1vZGVsKTogUG9ydE1vZGVsIHtcblx0XHRpZiAodGhpcy5zb3VyY2VQb3J0ICE9PSBudWxsICYmIHRoaXMuZ2V0Rmlyc3RQb2ludCgpLmlkID09PSBwb2ludC5pZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc291cmNlUG9ydDtcblx0XHR9XG5cdFx0aWYgKHRoaXMudGFyZ2V0UG9ydCAhPT0gbnVsbCAmJiB0aGlzLmdldExhc3RQb2ludCgpLmlkID09PSBwb2ludC5pZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudGFyZ2V0UG9ydDtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRQb2ludEZvclBvcnQocG9ydDogUG9ydE1vZGVsKTogUG9pbnRNb2RlbCB7XG5cdFx0aWYgKHRoaXMuc291cmNlUG9ydCAhPT0gbnVsbCAmJiB0aGlzLnNvdXJjZVBvcnQuaWQgPT09IHBvcnQuaWQpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEZpcnN0UG9pbnQoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMudGFyZ2V0UG9ydCAhPT0gbnVsbCAmJiB0aGlzLnRhcmdldFBvcnQuaWQgPT09IHBvcnQuaWQpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldExhc3RQb2ludCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEZpcnN0UG9pbnQoKTogUG9pbnRNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMucG9pbnRzWzBdO1xuXHR9XG5cblx0Z2V0TGFzdFBvaW50KCk6IFBvaW50TW9kZWwge1xuXHRcdHJldHVybiB0aGlzLnBvaW50c1t0aGlzLnBvaW50cy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdHNldFNvdXJjZVBvcnQocG9ydDogUG9ydE1vZGVsKSB7XG5cdFx0aWYgKHBvcnQgIT09IG51bGwpIHtcblx0XHRcdHBvcnQuYWRkTGluayh0aGlzKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuc291cmNlUG9ydCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5zb3VyY2VQb3J0LnJlbW92ZUxpbmsodGhpcyk7XG5cdFx0fVxuXHRcdHRoaXMuc291cmNlUG9ydCA9IHBvcnQ7XG5cdH1cblxuXHRnZXRTb3VyY2VQb3J0KCk6IFBvcnRNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMuc291cmNlUG9ydDtcblx0fVxuXG5cdGdldFRhcmdldFBvcnQoKTogUG9ydE1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXRQb3J0O1xuXHR9XG5cblx0c2V0VGFyZ2V0UG9ydChwb3J0OiBQb3J0TW9kZWwpIHtcblx0XHRpZiAocG9ydCAhPT0gbnVsbCkge1xuXHRcdFx0cG9ydC5hZGRMaW5rKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAodGhpcy50YXJnZXRQb3J0ICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLnRhcmdldFBvcnQucmVtb3ZlTGluayh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy50YXJnZXRQb3J0ID0gcG9ydDtcblx0fVxuXG5cdHBvaW50KHsgeCwgeSB9OiBDb29yZHMpOiBQb2ludE1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRQb2ludCh0aGlzLmdlbmVyYXRlUG9pbnQoeyB4LCB5IH0pKTtcblx0fVxuXG5cdGdldFBvaW50cygpOiBQb2ludE1vZGVsW10ge1xuXHRcdHJldHVybiB0aGlzLnBvaW50cztcblx0fVxuXG5cdHNldFBvaW50cyhwb2ludHM6IFBvaW50TW9kZWxbXSkge1xuXHRcdHBvaW50cy5mb3JFYWNoKHBvaW50ID0+IHtcblx0XHRcdHBvaW50LnNldFBhcmVudCh0aGlzKTtcblx0XHR9KTtcblx0XHR0aGlzLnBvaW50cyA9IHBvaW50cztcblx0fVxuXG5cdHNldExhYmVsKGxhYmVsOiBMYWJlbE1vZGVsKSB7XG5cdFx0bGFiZWwuc2V0UGFyZW50KHRoaXMpO1xuXHRcdHRoaXMubGFiZWwubmV4dChsYWJlbCk7XG5cdFx0bGFiZWwuc2V0UGFpbnRlZCgpO1xuXHR9XG5cblx0c2VsZWN0TGFiZWwoKTogT2JzZXJ2YWJsZTxMYWJlbE1vZGVsIHwgbnVsbD4ge1xuXHRcdHJldHVybiB0aGlzLmxhYmVsLmFzT2JzZXJ2YWJsZSgpO1xuXHR9XG5cblx0Z2V0TGFiZWwoKTogTGFiZWxNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMubGFiZWwuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHJlc2V0TGFiZWwoKSB7XG5cdFx0Y29uc3QgY3VycmVudExhYmVsID0gdGhpcy5sYWJlbC5nZXRWYWx1ZSgpO1xuXG5cdFx0aWYgKGN1cnJlbnRMYWJlbCkge1xuXHRcdFx0Y3VycmVudExhYmVsLnNldFBhcmVudChudWxsKTtcblx0XHRcdGN1cnJlbnRMYWJlbC5zZXRQYWludGVkKGZhbHNlKTtcblx0XHR9XG5cblx0XHR0aGlzLmxhYmVsLm5leHQobnVsbCk7XG5cdH1cblxuXHRyZW1vdmVQb2ludChwb2ludE1vZGVsOiBQb2ludE1vZGVsKSB7XG5cdFx0dGhpcy5wb2ludHMuc3BsaWNlKHRoaXMuZ2V0UG9pbnRJbmRleChwb2ludE1vZGVsKSwgMSk7XG5cdH1cblxuXHRyZW1vdmVQb2ludHNCZWZvcmUocG9pbnRNb2RlbDogUG9pbnRNb2RlbCkge1xuXHRcdHRoaXMucG9pbnRzLnNwbGljZSgwLCB0aGlzLmdldFBvaW50SW5kZXgocG9pbnRNb2RlbCkpO1xuXHR9XG5cblx0cmVtb3ZlUG9pbnRzQWZ0ZXIocG9pbnRNb2RlbDogUG9pbnRNb2RlbCkge1xuXHRcdHRoaXMucG9pbnRzLnNwbGljZSh0aGlzLmdldFBvaW50SW5kZXgocG9pbnRNb2RlbCkgKyAxKTtcblx0fVxuXG5cdHJlbW92ZU1pZGRsZVBvaW50cygpIHtcblx0XHRpZiAodGhpcy5wb2ludHMubGVuZ3RoID4gMikge1xuXHRcdFx0dGhpcy5wb2ludHMuc3BsaWNlKDAsIHRoaXMucG9pbnRzLmxlbmd0aCAtIDIpO1xuXHRcdH1cblx0fVxuXG5cdGFkZFBvaW50PFAgZXh0ZW5kcyBQb2ludE1vZGVsPihwb2ludE1vZGVsOiBQLCBpbmRleCA9IDEpOiBQIHtcblx0XHRwb2ludE1vZGVsLnNldFBhcmVudCh0aGlzKTtcblx0XHR0aGlzLnBvaW50cy5zcGxpY2UoaW5kZXgsIDAsIHBvaW50TW9kZWwpO1xuXHRcdHJldHVybiBwb2ludE1vZGVsO1xuXHR9XG5cblx0Z2VuZXJhdGVQb2ludCh7IHggPSAwLCB5ID0gMCB9OiBDb29yZHMpOiBQb2ludE1vZGVsIHtcblx0XHRyZXR1cm4gbmV3IFBvaW50TW9kZWwodGhpcywgeyB4LCB5IH0pO1xuXHR9XG59XG4iXX0=