UNPKG

2.38 kBJavaScriptView Raw
1import RRElement from './rrelement';
2import LayoutInfo from './layoutinfo';
3
4export default class RRSequence extends RRElement {
5
6
7 /**
8 * @param {(RRElement | RRElement[])} rrElements
9 */
10 constructor(rrElements) {
11 super();
12 if(arguments.length == 0) {
13 rrElements = [];
14 } else if(rrElements.constructor !== Array) {
15 rrElements = arguments;
16 }
17 this.rrElements = rrElements;
18 }
19
20 getRRElements() {
21 return this.rrElements;
22 }
23
24 computeLayoutInfo(rrDiagramToSVG) {
25 let width = 0;
26 let aboveConnector = 0;
27 let belowConnector = 0;
28 for (let i = 0; i < this.rrElements.length; i++) {
29 const rrElement = this.rrElements[i];
30 rrElement.computeLayoutInfo(rrDiagramToSVG);
31 if (i > 0) {
32 width += 10;
33 }
34 const layoutInfo = rrElement.getLayoutInfo();
35 width += layoutInfo.getWidth();
36 const height = layoutInfo.getHeight();
37 const connectorOffset = layoutInfo.getConnectorOffset();
38 aboveConnector = Math.max(aboveConnector, connectorOffset);
39 belowConnector = Math.max(belowConnector, height - connectorOffset);
40 }
41 this.setLayoutInfo(new LayoutInfo(width, aboveConnector + belowConnector, aboveConnector));
42 }
43
44 toSVG(rrDiagramToSVG, xOffset, yOffset, svgContent) {
45 const layoutInfo = this.getLayoutInfo();
46 const connectorOffset = layoutInfo.getConnectorOffset();
47 let widthOffset = 0;
48 for (let i = 0; i < this.rrElements.length; i++) {
49 const rrElement = this.rrElements[i];
50 const layoutInfo2 = rrElement.getLayoutInfo();
51 const width2 = layoutInfo2.getWidth();
52 const connectorOffset2 = layoutInfo2.getConnectorOffset();
53 const xOffset2 = widthOffset + xOffset;
54 const yOffset2 = yOffset + connectorOffset - connectorOffset2;
55 if (i > 0) {
56 svgContent.addLineConnector(xOffset2 - 10, yOffset + connectorOffset, xOffset2, yOffset + connectorOffset);
57 }
58 rrElement.toSVG(rrDiagramToSVG, xOffset2, yOffset2, svgContent);
59 widthOffset += 10;
60 widthOffset += width2;
61 }
62 }
63
64}