@elyra/canvas 12.43.0 → 12.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/dist/{canvas-constants-ff5cf88e.js → canvas-constants-089e7830.js} +2 -2
  2. package/dist/{canvas-constants-ff5cf88e.js.map → canvas-constants-089e7830.js.map} +1 -1
  3. package/dist/{canvas-constants-acb99f64.js → canvas-constants-69e90162.js} +2 -2
  4. package/dist/{canvas-constants-acb99f64.js.map → canvas-constants-69e90162.js.map} +1 -1
  5. package/dist/canvas-controller-3e6b8ce4.js +2 -0
  6. package/dist/canvas-controller-3e6b8ce4.js.map +1 -0
  7. package/dist/canvas-controller-c6274fad.js +2 -0
  8. package/dist/canvas-controller-c6274fad.js.map +1 -0
  9. package/dist/{canvas-logger-295dafe4.js → canvas-logger-6f4b2551.js} +2 -2
  10. package/dist/{canvas-logger-295dafe4.js.map → canvas-logger-6f4b2551.js.map} +1 -1
  11. package/dist/{canvas-logger-e07a0b4a.js → canvas-logger-ab9d9048.js} +2 -2
  12. package/dist/{canvas-logger-e07a0b4a.js.map → canvas-logger-ab9d9048.js.map} +1 -1
  13. package/dist/common-canvas-6ed21ab6.js +2 -0
  14. package/dist/common-canvas-6ed21ab6.js.map +1 -0
  15. package/dist/common-canvas-8abf016c.js +2 -0
  16. package/dist/common-canvas-8abf016c.js.map +1 -0
  17. package/dist/common-canvas.es.js +1 -1
  18. package/dist/common-canvas.js +1 -1
  19. package/dist/common-properties-88377242.js +2 -0
  20. package/dist/{common-properties-acd55e94.js.map → common-properties-88377242.js.map} +1 -1
  21. package/dist/common-properties-b295acc8.js +2 -0
  22. package/dist/{common-properties-08707efe.js.map → common-properties-b295acc8.js.map} +1 -1
  23. package/dist/context-menu-wrapper-949393c7.js +2 -0
  24. package/dist/{context-menu-wrapper-e4a7ab4d.js.map → context-menu-wrapper-949393c7.js.map} +1 -1
  25. package/dist/context-menu-wrapper-f62dfcdb.js +2 -0
  26. package/dist/{context-menu-wrapper-271eb2df.js.map → context-menu-wrapper-f62dfcdb.js.map} +1 -1
  27. package/dist/{createClass-440000a3.js → createClass-02596015.js} +2 -2
  28. package/dist/createClass-02596015.js.map +1 -0
  29. package/dist/createClass-155bf7da.js +2 -0
  30. package/dist/createClass-155bf7da.js.map +1 -0
  31. package/dist/datarecord-metadata-v3-schema-07d18e19.js +2 -0
  32. package/dist/{datarecord-metadata-v3-schema-03427296.js.map → datarecord-metadata-v3-schema-07d18e19.js.map} +1 -1
  33. package/dist/datarecord-metadata-v3-schema-df939dd1.js +2 -0
  34. package/dist/{datarecord-metadata-v3-schema-dba0b214.js.map → datarecord-metadata-v3-schema-df939dd1.js.map} +1 -1
  35. package/dist/defineProperty-ad55dbff.js +2 -0
  36. package/dist/{defineProperty-3dc7d8d0.js.map → defineProperty-ad55dbff.js.map} +1 -1
  37. package/dist/{defineProperty-6d406743.js → defineProperty-bcc9968d.js} +2 -2
  38. package/dist/{defineProperty-6d406743.js.map → defineProperty-bcc9968d.js.map} +1 -1
  39. package/dist/flexible-table-c6a8b402.js +2 -0
  40. package/dist/{flexible-table-107ca2fd.js.map → flexible-table-c6a8b402.js.map} +1 -1
  41. package/dist/flexible-table-f7b294a0.js +2 -0
  42. package/dist/{flexible-table-5cc1ad6b.js.map → flexible-table-f7b294a0.js.map} +1 -1
  43. package/dist/{icon-2caf035c.js → icon-56b27c4f.js} +2 -2
  44. package/dist/{icon-2caf035c.js.map → icon-56b27c4f.js.map} +1 -1
  45. package/dist/{icon-e622f99b.js → icon-8ec2f0ec.js} +2 -2
  46. package/dist/{icon-e622f99b.js.map → icon-8ec2f0ec.js.map} +1 -1
  47. package/dist/index-01cbacf9.js +2 -0
  48. package/dist/{index-fee06179.js.map → index-01cbacf9.js.map} +1 -1
  49. package/dist/index-79543d41.js +2 -0
  50. package/dist/{index-5dac3da8.js.map → index-79543d41.js.map} +1 -1
  51. package/dist/inherits-42ae8426.js +2 -0
  52. package/dist/inherits-42ae8426.js.map +1 -0
  53. package/dist/inherits-75817f22.js +2 -0
  54. package/dist/inherits-75817f22.js.map +1 -0
  55. package/dist/isArrayLikeObject-04f333a5.js +1 -1
  56. package/dist/isArrayLikeObject-04f333a5.js.map +1 -1
  57. package/dist/isArrayLikeObject-7a30aa4b.js +1 -1
  58. package/dist/isArrayLikeObject-7a30aa4b.js.map +1 -1
  59. package/dist/lib/canvas-controller.es.js +1 -1
  60. package/dist/lib/canvas-controller.js +1 -1
  61. package/dist/lib/canvas.es.js +1 -1
  62. package/dist/lib/canvas.js +1 -1
  63. package/dist/lib/command-stack.es.js +1 -1
  64. package/dist/lib/command-stack.es.js.map +1 -1
  65. package/dist/lib/command-stack.js +1 -1
  66. package/dist/lib/command-stack.js.map +1 -1
  67. package/dist/lib/context-menu.es.js +1 -1
  68. package/dist/lib/context-menu.js +1 -1
  69. package/dist/lib/properties/field-picker.es.js +1 -1
  70. package/dist/lib/properties/field-picker.js +1 -1
  71. package/dist/lib/properties/flexible-table.es.js +1 -1
  72. package/dist/lib/properties/flexible-table.js +1 -1
  73. package/dist/lib/properties.es.js +1 -1
  74. package/dist/lib/properties.js +1 -1
  75. package/dist/lib/tooltip.es.js +1 -1
  76. package/dist/lib/tooltip.es.js.map +1 -1
  77. package/dist/lib/tooltip.js +1 -1
  78. package/dist/lib/tooltip.js.map +1 -1
  79. package/dist/styles/common-canvas.min.css +1 -1
  80. package/dist/styles/common-canvas.min.css.map +1 -1
  81. package/dist/toolbar-235dfb9d.js +2 -0
  82. package/dist/toolbar-235dfb9d.js.map +1 -0
  83. package/dist/toolbar-6607e35c.js +2 -0
  84. package/dist/toolbar-6607e35c.js.map +1 -0
  85. package/package.json +1 -1
  86. package/src/common-canvas/canvas-controller.js +18 -1
  87. package/src/common-canvas/cc-toolbar.jsx +9 -4
  88. package/src/common-canvas/common-canvas-utils.js +73 -2
  89. package/src/common-canvas/common-canvas.scss +5 -5
  90. package/src/common-canvas/constants/canvas-constants.js +1 -0
  91. package/src/common-canvas/svg-canvas-renderer.js +140 -73
  92. package/src/common-canvas/svg-canvas-utils-external.js +1 -1
  93. package/src/common-canvas/svg-canvas-utils-links.js +28 -32
  94. package/src/common-canvas/svg-canvas-utils-nodes.js +5 -13
  95. package/src/icons/icon.scss +1 -1
  96. package/src/object-model/config-utils.js +2 -2
  97. package/src/object-model/layout-dimensions.js +82 -87
  98. package/src/object-model/object-model-utils.js +271 -0
  99. package/src/object-model/object-model.js +28 -240
  100. package/src/toolbar/toolbar-action-item.jsx +2 -1
  101. package/src/toolbar/toolbar-button-item.jsx +3 -2
  102. package/src/toolbar/toolbar-overflow-item.jsx +10 -4
  103. package/src/toolbar/toolbar.jsx +4 -1
  104. package/stats.html +1 -1
  105. package/dist/canvas-controller-6726b9ac.js +0 -2
  106. package/dist/canvas-controller-6726b9ac.js.map +0 -1
  107. package/dist/canvas-controller-6c6bc68f.js +0 -2
  108. package/dist/canvas-controller-6c6bc68f.js.map +0 -1
  109. package/dist/common-canvas-9374ef35.js +0 -2
  110. package/dist/common-canvas-9374ef35.js.map +0 -1
  111. package/dist/common-canvas-a6435bdb.js +0 -2
  112. package/dist/common-canvas-a6435bdb.js.map +0 -1
  113. package/dist/common-properties-08707efe.js +0 -2
  114. package/dist/common-properties-acd55e94.js +0 -2
  115. package/dist/context-menu-wrapper-271eb2df.js +0 -2
  116. package/dist/context-menu-wrapper-e4a7ab4d.js +0 -2
  117. package/dist/createClass-440000a3.js.map +0 -1
  118. package/dist/createClass-5ca26865.js +0 -2
  119. package/dist/createClass-5ca26865.js.map +0 -1
  120. package/dist/datarecord-metadata-v3-schema-03427296.js +0 -2
  121. package/dist/datarecord-metadata-v3-schema-dba0b214.js +0 -2
  122. package/dist/defineProperty-3dc7d8d0.js +0 -2
  123. package/dist/flexible-table-107ca2fd.js +0 -2
  124. package/dist/flexible-table-5cc1ad6b.js +0 -2
  125. package/dist/index-5dac3da8.js +0 -2
  126. package/dist/index-fee06179.js +0 -2
  127. package/dist/inherits-226dfdb2.js +0 -2
  128. package/dist/inherits-226dfdb2.js.map +0 -1
  129. package/dist/inherits-41673c87.js +0 -2
  130. package/dist/inherits-41673c87.js.map +0 -1
  131. package/dist/toolbar-ccc1d600.js +0 -2
  132. package/dist/toolbar-ccc1d600.js.map +0 -1
  133. package/dist/toolbar-e4445bf8.js +0 -2
  134. package/dist/toolbar-e4445bf8.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2017-2023 Elyra Authors
2
+ * Copyright 2017-2024 Elyra Authors
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -3384,135 +3384,202 @@ export default class SVGCanvasRenderer {
3384
3384
  }
3385
3385
 
3386
3386
  setPortPositionsForNode(node) {
3387
- if (this.canvasLayout.linkDirection === LINK_DIR_TOP_BOTTOM) {
3388
- this.setPortPositionsVertical(node, node.inputs, node.inputPortsWidth, node.layout.inputPortTopPosX, node.layout.inputPortTopPosY);
3389
- this.setPortPositionsVertical(node, node.outputs, node.outputPortsWidth, node.layout.outputPortBottomPosX, this.getOutputPortBottomPosY(node));
3390
- } else if (this.canvasLayout.linkDirection === LINK_DIR_BOTTOM_TOP) {
3391
- this.setPortPositionsVertical(node, node.inputs, node.inputPortsWidth, node.layout.inputPortBottomPosX, this.getInputPortBottomPosY(node));
3392
- this.setPortPositionsVertical(node, node.outputs, node.outputPortsWidth, node.layout.outputPortTopPosX, node.layout.outputPortTopPosY);
3387
+ if (this.canvasLayout.linkDirection === LINK_DIR_TOP_BOTTOM ||
3388
+ this.canvasLayout.linkDirection === LINK_DIR_BOTTOM_TOP) {
3389
+ this.setPortPositionsVertical(
3390
+ node, node.inputs, node.inputPortsWidth,
3391
+ node.layout.inputPortPositions,
3392
+ node.layout.inputPortAutoPosition);
3393
+ this.setPortPositionsVertical(
3394
+ node, node.outputs, node.outputPortsWidth,
3395
+ node.layout.outputPortPositions,
3396
+ node.layout.outputPortAutoPosition,
3397
+ this.config.enableSingleOutputPortDisplay);
3398
+
3393
3399
  } else {
3394
- this.setPortPositionsLeftRight(node, node.inputs, node.inputPortsHeight, node.layout.inputPortLeftPosX, node.layout.inputPortLeftPosY);
3395
- this.setPortPositionsLeftRight(node, node.outputs, node.outputPortsHeight,
3396
- this.nodeUtils.getNodeOutputPortRightPosX(node),
3397
- this.nodeUtils.getNodeOutputPortRightPosY(node),
3400
+ this.setPortPositionsHoriz(
3401
+ node, node.inputs, node.inputPortsHeight,
3402
+ node.layout.inputPortPositions,
3403
+ node.layout.inputPortAutoPosition);
3404
+ this.setPortPositionsHoriz(
3405
+ node, node.outputs, node.outputPortsHeight,
3406
+ node.layout.outputPortPositions,
3407
+ node.layout.outputPortAutoPosition,
3398
3408
  this.config.enableSingleOutputPortDisplay);
3399
3409
  }
3400
3410
  }
3401
3411
 
3402
- getOutputPortBottomPosY(node) {
3403
- return node.height + node.layout.outputPortBottomPosY;
3404
- }
3405
-
3406
- getInputPortBottomPosY(node) {
3407
- return node.height + node.layout.inputPortBottomPosY;
3408
- }
3409
-
3410
- setPortPositionsVertical(data, ports, portsWidth, xPos, yPos) {
3412
+ setPortPositionsVertical(node, ports, portsWidth, portPositions, autoPosition, displaySinglePort = false) {
3411
3413
  if (ports && ports.length > 0) {
3412
- if (data.width <= data.layout.defaultNodeWidth &&
3414
+ const xPos = this.nodeUtils.getNodePortPosX(portPositions[0], node);
3415
+ const yPos = this.nodeUtils.getNodePortPosY(portPositions[0], node);
3416
+
3417
+ if (node.width <= node.layout.defaultNodeWidth &&
3413
3418
  ports.length === 1) {
3414
3419
  ports[0].cx = xPos;
3415
3420
  ports[0].cy = yPos;
3416
3421
  } else {
3417
- let xPosition = 0;
3422
+ // If we are only going to display a single port, we set all the
3423
+ // port positions to be the same as if there is only one port.
3424
+ if (displaySinglePort) {
3425
+ this.setPortPositionsVerticalDisplaySingle(node, ports, xPos, yPos);
3418
3426
 
3419
- if (CanvasUtils.isExpandedSupernode(data)) {
3420
- const widthSvgArea = data.width - (2 * this.canvasLayout.supernodeSVGAreaPadding);
3421
- const remainingSpace = widthSvgArea - portsWidth;
3422
- xPosition = (2 * this.canvasLayout.supernodeSVGAreaPadding) + (remainingSpace / 2);
3427
+ } else if (autoPosition || CanvasUtils.isExpandedSupernode(node)) {
3428
+ this.setPortPositionsVerticalAuto(node, ports, portsWidth, yPos);
3423
3429
 
3424
- } else if (portsWidth < data.width) {
3425
- xPosition = (data.width - portsWidth) / 2;
3430
+ } else {
3431
+ this.setPortPositionsCustom(ports, portPositions, node, xPos, yPos);
3426
3432
  }
3433
+ }
3434
+ }
3435
+ }
3427
3436
 
3428
- xPosition += data.layout.portArcOffset;
3437
+ // If only a single port is to be displayed, this methods sets the x and y
3438
+ // coordinates of all the ports to the same values appropriately for either
3439
+ // regular nodes or expanded supernodes.
3440
+ setPortPositionsVerticalDisplaySingle(node, ports, xPos, yPos) {
3441
+ let xPosition = 0;
3442
+ if (CanvasUtils.isExpandedSupernode(node)) {
3443
+ const widthSvgArea = node.width - (2 * this.canvasLayout.supernodeSVGAreaPadding);
3444
+ xPosition = widthSvgArea / 2;
3429
3445
 
3430
- // Sub-flow binding node ports need to be spaced by the inverse of the
3431
- // zoom amount so that, after zoomToFit on the in-place sub-flow the
3432
- // binding node ports line up with those on the supernode. This is only
3433
- // necessary with binding nodes with mutiple ports.
3434
- let multiplier = 1;
3435
- if (CanvasUtils.isSuperBindingNode(data)) {
3436
- multiplier = 1 / this.zoomUtils.getZoomScale();
3437
- }
3446
+ } else {
3447
+ xPosition = xPos;
3448
+ }
3438
3449
 
3439
- ports.forEach((p) => {
3440
- xPosition += (data.layout.portArcRadius * multiplier);
3441
- p.cx = xPosition;
3442
- p.cy = yPos;
3443
- xPosition += ((data.layout.portArcRadius + data.layout.portArcSpacing) * multiplier);
3444
- });
3445
- }
3450
+ ports.forEach((p) => {
3451
+ p.cx = xPosition;
3452
+ p.cy = yPos;
3453
+ });
3454
+ }
3455
+
3456
+ // Sets the ports x and y coordinates for regular and expanded supernodes
3457
+ // when all ports are displayed in a normal manner (as opposed to when a
3458
+ // single port is displayed).
3459
+ setPortPositionsVerticalAuto(node, ports, portsWidth, yPos) {
3460
+ let xPosition = 0;
3461
+
3462
+ if (CanvasUtils.isExpandedSupernode(node)) {
3463
+ const widthSvgArea = node.width - (2 * this.canvasLayout.supernodeSVGAreaPadding);
3464
+ const remainingSpace = widthSvgArea - portsWidth;
3465
+ xPosition = this.canvasLayout.supernodeSVGAreaPadding + (remainingSpace / 2);
3466
+
3467
+ } else if (portsWidth < node.width) {
3468
+ xPosition = (node.width - portsWidth) / 2;
3446
3469
  }
3470
+
3471
+ xPosition += node.layout.portArcOffset;
3472
+
3473
+ // Sub-flow binding node ports need to be spaced by the inverse of the
3474
+ // zoom amount so that, after zoomToFit on the in-place sub-flow the
3475
+ // binding node ports line up with those on the supernode. This is only
3476
+ // necessary with binding nodes with mutiple ports.
3477
+ let multiplier = 1;
3478
+ if (CanvasUtils.isSuperBindingNode(node)) {
3479
+ multiplier = 1 / this.zoomUtils.getZoomScale();
3480
+ }
3481
+ ports.forEach((p) => {
3482
+ xPosition += (node.layout.portArcRadius * multiplier);
3483
+ p.cx = xPosition;
3484
+ p.cy = yPos;
3485
+ xPosition += ((node.layout.portArcRadius + node.layout.portArcSpacing) * multiplier);
3486
+ });
3447
3487
  }
3448
3488
 
3449
- setPortPositionsLeftRight(data, ports, portsHeight, xPos, yPos, displaySinglePort = false) {
3489
+ setPortPositionsHoriz(node, ports, portsHeight, portPositions, autoPosition, displaySinglePort = false) {
3450
3490
  if (ports && ports.length > 0) {
3451
- if (data.height <= data.layout.defaultNodeHeight &&
3491
+ const xPos = this.nodeUtils.getNodePortPosX(portPositions[0], node);
3492
+ const yPos = this.nodeUtils.getNodePortPosY(portPositions[0], node);
3493
+
3494
+ if (node.height <= node.layout.defaultNodeHeight &&
3452
3495
  ports.length === 1) {
3453
3496
  ports[0].cx = xPos;
3454
3497
  ports[0].cy = yPos;
3498
+
3455
3499
  } else {
3456
- // If we are only going to display a single port, we can set all the
3500
+ // If we are only going to display a single port, we set all the
3457
3501
  // port positions to be the same as if there is only one port.
3458
3502
  if (displaySinglePort) {
3459
- this.setPortPositionsLeftRightSinglePort(data, ports, xPos, yPos);
3503
+ this.setPortPositionsHorizDisplaySingle(node, ports, xPos, yPos);
3504
+
3505
+ } else if (autoPosition || CanvasUtils.isExpandedSupernode(node)) {
3506
+ this.setPortPositionsHorizAuto(node, ports, portsHeight, xPos);
3507
+
3460
3508
  } else {
3461
- this.setPortPositionsLeftRightAllPorts(data, ports, portsHeight, xPos, yPos);
3509
+ this.setPortPositionsCustom(ports, portPositions, node, xPos, yPos);
3462
3510
  }
3463
3511
  }
3464
3512
  }
3465
3513
  }
3466
3514
 
3515
+ // If only a single port is to be displayed, this methods sets the x and y
3516
+ // coordinates of all the ports to the same values appropriately for either
3517
+ // regular nodes or expanded supernodes.
3518
+ setPortPositionsHorizDisplaySingle(node, ports, xPos, yPos) {
3519
+ let yPosition = 0;
3520
+ if (CanvasUtils.isExpandedSupernode(node)) {
3521
+ const heightSvgArea = node.height - this.canvasLayout.supernodeTopAreaHeight - this.canvasLayout.supernodeSVGAreaPadding;
3522
+ yPosition = this.canvasLayout.supernodeTopAreaHeight + (heightSvgArea / 2);
3523
+
3524
+ } else {
3525
+ yPosition = yPos;
3526
+ }
3527
+
3528
+ ports.forEach((p) => {
3529
+ p.cx = xPos;
3530
+ p.cy = yPosition;
3531
+ });
3532
+ }
3533
+
3467
3534
  // Sets the ports x and y coordinates for regular and expanded supernodes
3468
3535
  // when all ports are displayed in a normal manner (as opposed to when a
3469
3536
  // single port is displayed).
3470
- setPortPositionsLeftRightAllPorts(data, ports, portsHeight, xPos, yPos) {
3537
+ setPortPositionsHorizAuto(node, ports, portsHeight, xPos) {
3471
3538
  let yPosition = 0;
3472
3539
 
3473
- if (CanvasUtils.isExpandedSupernode(data)) {
3474
- const heightSvgArea = data.height - this.canvasLayout.supernodeTopAreaHeight - this.canvasLayout.supernodeSVGAreaPadding;
3540
+ if (CanvasUtils.isExpandedSupernode(node)) {
3541
+ const heightSvgArea = node.height - this.canvasLayout.supernodeTopAreaHeight - this.canvasLayout.supernodeSVGAreaPadding;
3475
3542
  const remainingSpace = heightSvgArea - portsHeight;
3476
- yPosition = this.canvasLayout.supernodeTopAreaHeight + this.canvasLayout.supernodeSVGAreaPadding + (remainingSpace / 2);
3543
+ yPosition = this.canvasLayout.supernodeTopAreaHeight + (remainingSpace / 2);
3477
3544
 
3478
- } else if (portsHeight < data.height) {
3479
- yPosition = (data.height - portsHeight) / 2;
3545
+ } else if (portsHeight < node.height) {
3546
+ yPosition = (node.height - portsHeight) / 2;
3480
3547
  }
3481
3548
 
3482
- yPosition += data.layout.portArcOffset;
3549
+ yPosition += node.layout.portArcOffset;
3483
3550
 
3484
3551
  // Sub-flow binding node ports need to be spaced by the inverse of the
3485
3552
  // zoom amount so that, after zoomToFit on the in-place sub-flow the
3486
3553
  // binding node ports line up with those on the supernode. This is only
3487
3554
  // necessary with binding nodes with mutiple ports.
3488
3555
  let multiplier = 1;
3489
- if (CanvasUtils.isSuperBindingNode(data)) {
3556
+ if (CanvasUtils.isSuperBindingNode(node)) {
3490
3557
  multiplier = 1 / this.zoomUtils.getZoomScale();
3491
3558
  }
3492
3559
  ports.forEach((p) => {
3493
- yPosition += (data.layout.portArcRadius * multiplier);
3560
+ yPosition += (node.layout.portArcRadius * multiplier);
3494
3561
  p.cx = xPos;
3495
3562
  p.cy = yPosition;
3496
- yPosition += ((data.layout.portArcRadius + data.layout.portArcSpacing) * multiplier);
3563
+ yPosition += ((node.layout.portArcRadius + node.layout.portArcSpacing) * multiplier);
3497
3564
  });
3498
3565
  }
3499
3566
 
3500
- // If only a single port is to be displayed, this methods sets the x and y
3501
- // coordinates of all the ports to the same values appropriately for either
3502
- // regular nodes or expanded supernodes.
3503
- setPortPositionsLeftRightSinglePort(data, ports, xPos, yPos) {
3504
- let yPosition = 0;
3505
- if (CanvasUtils.isExpandedSupernode(data)) {
3506
- const heightSvgArea = data.height - this.canvasLayout.supernodeTopAreaHeight - this.canvasLayout.supernodeSVGAreaPadding;
3507
- yPosition = this.canvasLayout.supernodeTopAreaHeight + (heightSvgArea / 2);
3567
+ // Sets the node's port positions based on the custom positions provided
3568
+ // by the application in the portPositions array.
3569
+ setPortPositionsCustom(ports, portPositions, node, zerothX, zerothY) {
3570
+ let xPos = zerothX;
3571
+ let yPos = zerothY;
3508
3572
 
3509
- } else {
3510
- yPosition = yPos;
3511
- }
3512
-
3513
- ports.forEach((p) => {
3573
+ ports.forEach((p, i) => {
3574
+ // No need to recalculate the zeroth position AND if there are more
3575
+ // ports than portPositions just use the last port position for all
3576
+ // subsequent ports.
3577
+ if (i > 0 && i < portPositions.length) {
3578
+ xPos = this.nodeUtils.getNodePortPosX(portPositions[i], node);
3579
+ yPos = this.nodeUtils.getNodePortPosY(portPositions[i], node);
3580
+ }
3514
3581
  p.cx = xPos;
3515
- p.cy = yPosition;
3582
+ p.cy = yPos;
3516
3583
  });
3517
3584
  }
3518
3585
 
@@ -69,7 +69,7 @@ export default class SvgCanvasExternal {
69
69
  out.cy = outputPos.cy / k;
70
70
  });
71
71
  }
72
- this.ren.displayLinks();
72
+ this.ren.displayMovedLinks();
73
73
  }
74
74
 
75
75
  setNodesProperties(newProps) {
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2017-2023 Elyra Authors
2
+ * Copyright 2017-2024 Elyra Authors
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -245,34 +245,29 @@ export default class SvgCanvasLinks {
245
245
  }
246
246
 
247
247
  getNodeLinkCoordsForPorts(srcNode, srcPortId, trgNode, trgPortId) {
248
- let srcX = srcNode.width + srcNode.layout.outputPortRightPosX;
249
- let srcY = srcNode.layout.outputPortRightPosY;
250
- let trgX = trgNode.layout.inputPortLeftPosX;
251
- let trgY = trgNode.layout.inputPortLeftPosY;
252
-
253
- if (this.canvasLayout.linkDirection === LINK_DIR_TOP_BOTTOM) {
254
- srcX = srcNode.layout.outputPortBottomPosX;
255
- srcY = srcNode.height + srcNode.layout.outputPortBottomPosY;
256
- trgX = trgNode.layout.inputPortTopPosX;
257
- trgY = trgNode.layout.inputPortTopPosY;
258
-
259
- } else if (this.canvasLayout.linkDirection === LINK_DIR_BOTTOM_TOP) {
260
- srcX = srcNode.layout.outputPortBottomPosX;
261
- srcY = srcNode.layout.outputPortBottomPosY;
262
- trgX = trgNode.layout.inputPortTopPosX;
263
- trgY = trgNode.height + trgNode.layout.inputPortTopPosY;
264
- }
248
+ let srcX;
249
+ let srcY;
250
+ let trgX;
251
+ let trgY;
265
252
 
266
253
  if (srcNode.outputs && srcNode.outputs.length > 0) {
267
254
  const port = srcNode.outputs.find((srcPort) => srcPort.id === srcPortId);
268
255
  srcX = port ? port.cx : srcX;
269
256
  srcY = port ? port.cy : srcY;
257
+
258
+ } else {
259
+ srcX = this.nodeUtils.getNodePortPosX(srcNode.layout.outputPortPositions[0], srcNode);
260
+ srcY = this.nodeUtils.getNodePortPosY(srcNode.layout.outputPortPositions[0], srcNode);
270
261
  }
271
262
 
272
263
  if (trgNode.inputs && trgNode.inputs.length > 0) {
273
264
  const port = trgNode.inputs.find((trgPort) => trgPort.id === trgPortId);
274
265
  trgX = port ? port.cx : trgX;
275
266
  trgY = port ? port.cy : trgY;
267
+
268
+ } else {
269
+ trgX = this.nodeUtils.getNodePortPosX(trgNode.layout.inputPortPositions[0], trgNode);
270
+ trgY = this.nodeUtils.getNodePortPosY(trgNode.layout.inputPortPositions[0], trgNode);
276
271
  }
277
272
 
278
273
  return {
@@ -284,31 +279,32 @@ export default class SvgCanvasLinks {
284
279
  }
285
280
 
286
281
  getAssociationCurveLinkCoords(srcNode, trgNode, assocLinkVariation) {
287
- let x1 = 0;
288
- let x2 = 0;
282
+ let srcX = 0;
283
+ let trgX = 0;
289
284
 
290
285
  if (assocLinkVariation === ASSOC_VAR_CURVE_RIGHT) {
291
- x1 = srcNode.x_pos + srcNode.width;
292
- x2 = trgNode.x_pos;
286
+ srcX = srcNode.width;
287
+ trgX = 0;
293
288
 
294
289
  } else if (assocLinkVariation === ASSOC_VAR_CURVE_LEFT) {
295
- x1 = srcNode.x_pos;
296
- x2 = trgNode.x_pos + trgNode.width;
290
+ srcX = 0;
291
+ trgX = trgNode.width;
297
292
 
298
293
  } else if (assocLinkVariation === ASSOC_VAR_DOUBLE_BACK_LEFT) {
299
- x1 = srcNode.x_pos;
300
- x2 = trgNode.x_pos;
294
+ srcX = 0;
295
+ trgX = 0;
301
296
 
302
297
  } else {
303
- x1 = srcNode.x_pos + srcNode.width;
304
- x2 = trgNode.x_pos + trgNode.width;
298
+ srcX = srcNode.width;
299
+ trgX = trgNode.width;
305
300
  }
306
301
 
307
302
  return {
308
- x1: x1,
309
- y1: srcNode.y_pos + srcNode.layout.outputPortRightPosY,
310
- x2: x2,
311
- y2: trgNode.y_pos + trgNode.layout.inputPortLeftPosY };
303
+ x1: srcNode.x_pos + srcX,
304
+ y1: srcNode.y_pos + this.nodeUtils.getNodePortPosY(srcNode.layout.outputPortPositions[0], srcNode),
305
+ x2: trgNode.x_pos + trgX,
306
+ y2: trgNode.y_pos + this.nodeUtils.getNodePortPosY(trgNode.layout.inputPortPositions[0], trgNode)
307
+ };
312
308
  }
313
309
 
314
310
  getCommentLinkCoords(srcComment, trgNode) {
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2017-2023 Elyra Authors
2
+ * Copyright 2017-2024 Elyra Authors
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -339,20 +339,12 @@ export default class SvgCanvasNodes {
339
339
  return node.layout.errorHeight;
340
340
  }
341
341
 
342
- getNodeInputPortLeftPosX(node) {
343
- return this.getElementPosX(node.width, node.layout.inputPortLeftPosX, node.layout.inputPortLeftPosition);
342
+ getNodePortPosX(posInfo, node) {
343
+ return this.getElementPosX(node.width, posInfo.x_pos, posInfo.pos);
344
344
  }
345
345
 
346
- getNodeInputPortLeftPosY(node) {
347
- return this.getElementPosY(node.height, node.layout.inputPortLeftPosY, node.layout.inputPortLeftPosition);
348
- }
349
-
350
- getNodeOutputPortRightPosX(node) {
351
- return this.getElementPosX(node.width, node.layout.outputPortRightPosX, node.layout.outputPortRightPosition);
352
- }
353
-
354
- getNodeOutputPortRightPosY(node) {
355
- return this.getElementPosY(node.height, node.layout.outputPortRightPosY, node.layout.outputPortRightPosition);
346
+ getNodePortPosY(posInfo, node) {
347
+ return this.getElementPosY(node.height, posInfo.y_pos, posInfo.pos);
356
348
  }
357
349
 
358
350
  getElementPosX(width, xOffset = 0, position = "topLeft") {
@@ -51,5 +51,5 @@ svg.canvas-state-icon-info {
51
51
  }
52
52
 
53
53
  svg.canvas-state-icon-information-hollow {
54
- fill: $icon-01;
54
+ fill: $icon-02;
55
55
  }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2017-2023 Elyra Authors
2
+ * Copyright 2017-2024 Elyra Authors
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@ import { isMatch, isMatchWith, omit } from "lodash";
21
21
  import LayoutDimensions from "./layout-dimensions.js";
22
22
  import { ASSOC_STRAIGHT, LINK_SELECTION_NONE } from "../common-canvas/constants/canvas-constants";
23
23
 
24
- export default class CanvasUtils {
24
+ export default class ConfigUtils {
25
25
 
26
26
  // Returns a config object which is the result of merging config into
27
27
  // startConfig.