@elyra/canvas 12.10.1 → 12.11.1

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 (207) hide show
  1. package/dist/canvas-constants-7f93e705.js +2 -0
  2. package/dist/canvas-constants-7f93e705.js.map +1 -0
  3. package/dist/canvas-constants-ac5daafb.js +2 -0
  4. package/dist/canvas-constants-ac5daafb.js.map +1 -0
  5. package/dist/canvas-controller-09d0c333.js +2 -0
  6. package/dist/canvas-controller-09d0c333.js.map +1 -0
  7. package/dist/canvas-controller-c2793ca2.js +2 -0
  8. package/dist/canvas-controller-c2793ca2.js.map +1 -0
  9. package/dist/canvas-logger-815781bb.js +2 -0
  10. package/dist/canvas-logger-815781bb.js.map +1 -0
  11. package/dist/canvas-logger-a0f1beaa.js +2 -0
  12. package/dist/canvas-logger-a0f1beaa.js.map +1 -0
  13. package/dist/common-canvas-5b046a86.js +2 -0
  14. package/dist/common-canvas-5b046a86.js.map +1 -0
  15. package/dist/common-canvas-985cc0a2.js +2 -0
  16. package/dist/common-canvas-985cc0a2.js.map +1 -0
  17. package/dist/common-canvas.es.js +1 -1
  18. package/dist/common-canvas.es.js.map +1 -1
  19. package/dist/common-canvas.js +1 -1
  20. package/dist/common-canvas.js.map +1 -1
  21. package/dist/common-properties-4f471b2b.js +2 -0
  22. package/dist/common-properties-4f471b2b.js.map +1 -0
  23. package/dist/common-properties-9161cd27.js +2 -0
  24. package/dist/common-properties-9161cd27.js.map +1 -0
  25. package/dist/datarecord-metadata-v3-schema-bda88f2e.js +2 -0
  26. package/dist/datarecord-metadata-v3-schema-bda88f2e.js.map +1 -0
  27. package/dist/datarecord-metadata-v3-schema-d7ad05cd.js +2 -0
  28. package/dist/datarecord-metadata-v3-schema-d7ad05cd.js.map +1 -0
  29. package/dist/en-2ed89528.js +2 -0
  30. package/dist/en-2ed89528.js.map +1 -0
  31. package/dist/en-e93855cc.js +2 -0
  32. package/dist/en-e93855cc.js.map +1 -0
  33. package/dist/extends-39f57612.js +7 -0
  34. package/dist/extends-39f57612.js.map +1 -0
  35. package/dist/extends-51d9ddcc.js +7 -0
  36. package/dist/extends-51d9ddcc.js.map +1 -0
  37. package/dist/flexible-table-154a3359.js +2 -0
  38. package/dist/flexible-table-154a3359.js.map +1 -0
  39. package/dist/flexible-table-5e4a1e6d.js +2 -0
  40. package/dist/flexible-table-5e4a1e6d.js.map +1 -0
  41. package/dist/icon-811ffddd.js +2 -0
  42. package/dist/icon-811ffddd.js.map +1 -0
  43. package/dist/icon-d6909a68.js +2 -0
  44. package/dist/icon-d6909a68.js.map +1 -0
  45. package/dist/index-4fd90a14.js +2 -0
  46. package/dist/index-4fd90a14.js.map +1 -0
  47. package/dist/index-6d138021.js +2 -0
  48. package/dist/index-6d138021.js.map +1 -0
  49. package/dist/isArrayLikeObject-31e5e646.js +2 -0
  50. package/dist/isArrayLikeObject-31e5e646.js.map +1 -0
  51. package/dist/isArrayLikeObject-7c33c7fd.js +2 -0
  52. package/dist/isArrayLikeObject-7c33c7fd.js.map +1 -0
  53. package/dist/lib/canvas-controller.es.js +1 -1
  54. package/dist/lib/canvas-controller.js +1 -1
  55. package/dist/lib/canvas.es.js +1 -1
  56. package/dist/lib/canvas.js +1 -1
  57. package/dist/lib/context-menu.es.js +1 -1
  58. package/dist/lib/context-menu.es.js.map +1 -1
  59. package/dist/lib/context-menu.js +1 -1
  60. package/dist/lib/context-menu.js.map +1 -1
  61. package/dist/lib/properties/field-picker.es.js +1 -1
  62. package/dist/lib/properties/field-picker.js +1 -1
  63. package/dist/lib/properties/flexible-table.es.js +1 -1
  64. package/dist/lib/properties/flexible-table.js +1 -1
  65. package/dist/lib/properties.es.js +1 -1
  66. package/dist/lib/properties.js +1 -1
  67. package/dist/lib/tooltip.es.js +1 -1
  68. package/dist/lib/tooltip.es.js.map +1 -1
  69. package/dist/lib/tooltip.js +1 -1
  70. package/dist/lib/tooltip.js.map +1 -1
  71. package/dist/styles/common-canvas.min.css +1 -1
  72. package/dist/styles/common-canvas.min.css.map +1 -1
  73. package/dist/toolbar-335252dd.js +2 -0
  74. package/dist/toolbar-335252dd.js.map +1 -0
  75. package/dist/toolbar-85e6c77b.js +2 -0
  76. package/dist/toolbar-85e6c77b.js.map +1 -0
  77. package/locales/command-actions/locales/en.json +7 -1
  78. package/locales/command-actions/locales/eo.json +7 -1
  79. package/locales/command-actions/locales/index.js +3 -1
  80. package/locales/command-actions/locales/ko.json +9 -0
  81. package/locales/common-canvas/locales/en.json +1 -0
  82. package/locales/common-canvas/locales/eo.json +1 -0
  83. package/locales/common-canvas/locales/index.js +3 -1
  84. package/locales/common-canvas/locales/ko.json +32 -0
  85. package/locales/common-properties/locales/index.js +3 -1
  86. package/locales/common-properties/locales/ko.json +93 -0
  87. package/locales/palette/locales/index.js +3 -1
  88. package/locales/palette/locales/ko.json +10 -0
  89. package/locales/toolbar/locales/index.js +3 -1
  90. package/locales/toolbar/locales/ko.json +8 -0
  91. package/package.json +2 -1
  92. package/src/color-picker/color-picker-panel.jsx +61 -0
  93. package/src/color-picker/color-picker.jsx +37 -0
  94. package/src/color-picker/color-picker.scss +46 -0
  95. package/src/command-actions/colorSelectedObjectsAction.js +72 -0
  96. package/src/command-actions/deleteObjectsAction.js +16 -11
  97. package/src/command-actions/pasteAction.js +50 -21
  98. package/src/common-canvas/canvas-controller.js +32 -5
  99. package/src/common-canvas/cc-bottom-panel.jsx +34 -37
  100. package/src/common-canvas/cc-contents.jsx +110 -8
  101. package/src/common-canvas/cc-toolbar.jsx +3 -2
  102. package/src/common-canvas/common-canvas-utils.js +73 -90
  103. package/src/common-canvas/common-canvas.scss +28 -14
  104. package/src/common-canvas/constants/canvas-constants.js +17 -16
  105. package/src/common-canvas/label-util.js +1 -1
  106. package/src/common-canvas/svg-canvas-d3.js +20 -107
  107. package/src/common-canvas/svg-canvas-d3.scss +67 -6
  108. package/src/common-canvas/svg-canvas-pipeline.js +201 -0
  109. package/src/common-canvas/svg-canvas-renderer.js +325 -339
  110. package/src/common-canvas/svg-canvas-utils-links.js +3 -3
  111. package/src/common-canvas/svg-canvas-utils-nodes.js +22 -44
  112. package/src/common-properties/actions.js +4 -0
  113. package/src/common-properties/components/field-picker/field-picker.jsx +33 -36
  114. package/src/common-properties/components/field-picker/field-picker.scss +20 -23
  115. package/src/common-properties/components/flexible-table/flexible-table.jsx +46 -31
  116. package/src/common-properties/components/flexible-table/flexible-table.scss +14 -17
  117. package/src/common-properties/components/properties-buttons/properties-buttons.jsx +28 -21
  118. package/src/common-properties/components/table-buttons/table-buttons.jsx +3 -1
  119. package/src/common-properties/components/table-buttons/table-buttons.scss +8 -8
  120. package/src/common-properties/components/title-editor/title-editor.jsx +31 -4
  121. package/src/common-properties/components/title-editor/title-editor.scss +30 -5
  122. package/src/common-properties/components/virtualized-table/virtualized-table.jsx +119 -27
  123. package/src/common-properties/components/virtualized-table/virtualized-table.scss +72 -8
  124. package/src/common-properties/constants/constants.js +5 -1
  125. package/src/common-properties/constants/form-constants.js +1 -0
  126. package/src/common-properties/controls/abstract-table.jsx +12 -11
  127. package/src/common-properties/controls/abstract-table.scss +6 -2
  128. package/src/common-properties/controls/dropdown/dropdown.scss +4 -0
  129. package/src/common-properties/controls/expression/expression-builder/expression-select-field-function.jsx +2 -2
  130. package/src/common-properties/controls/expression/expression.scss +1 -1
  131. package/src/common-properties/controls/passwordfield/passwordfield.jsx +2 -2
  132. package/src/common-properties/controls/readonlytable/readonlytable.jsx +4 -2
  133. package/src/common-properties/controls/selectcolumns/selectcolumns.scss +0 -19
  134. package/src/common-properties/controls/someofselect/someofselect.scss +2 -2
  135. package/src/common-properties/form/ControlInfo.js +8 -0
  136. package/src/common-properties/form/EditorForm.js +4 -0
  137. package/src/common-properties/form/ParameterInfo.js +4 -0
  138. package/src/common-properties/panels/sub-panel/cell.jsx +18 -23
  139. package/src/common-properties/panels/sub-panel/sub-panel.scss +5 -22
  140. package/src/common-properties/properties-controller.js +18 -0
  141. package/src/common-properties/properties-main/properties-main.jsx +15 -9
  142. package/src/common-properties/properties-main/properties-main.scss +9 -2
  143. package/src/common-properties/properties-store.js +27 -1
  144. package/src/common-properties/reducers/properties-settings.js +17 -1
  145. package/src/context-menu/common-context-menu.jsx +74 -29
  146. package/src/context-menu/context-menu-wrapper.jsx +2 -2
  147. package/src/icons/icon.jsx +5 -46
  148. package/src/index.scss +1 -0
  149. package/src/object-model/api-pipeline.js +26 -43
  150. package/src/object-model/object-model.js +27 -3
  151. package/src/object-model/redux/canvas-store.js +68 -0
  152. package/src/object-model/redux/reducers/canvasinfo.js +36 -0
  153. package/src/object-model/redux/reducers/comments.js +58 -10
  154. package/src/object-model/redux/reducers/externalpipelineflows.js +1 -0
  155. package/src/object-model/redux/reducers/links.js +9 -7
  156. package/src/object-model/redux/reducers/selectioninfo.js +2 -1
  157. package/src/palette/palette-content-list-item.jsx +8 -1
  158. package/src/palette/palette-dialog-content-grid-node.jsx +8 -1
  159. package/src/palette/palette-flyout-utils.js +3 -3
  160. package/src/toolbar/toolbar-action-item.jsx +75 -11
  161. package/src/toolbar/toolbar-overflow-item.jsx +2 -3
  162. package/src/tooltip/tooltip.jsx +4 -1
  163. package/stats.html +1 -1
  164. package/dist/canvas-constants-af93267a.js +0 -2
  165. package/dist/canvas-constants-af93267a.js.map +0 -1
  166. package/dist/canvas-constants-ffce3b78.js +0 -2
  167. package/dist/canvas-constants-ffce3b78.js.map +0 -1
  168. package/dist/canvas-controller-27101eb5.js +0 -2
  169. package/dist/canvas-controller-27101eb5.js.map +0 -1
  170. package/dist/canvas-controller-a57e3b7a.js +0 -2
  171. package/dist/canvas-controller-a57e3b7a.js.map +0 -1
  172. package/dist/common-canvas-f409dcd4.js +0 -2
  173. package/dist/common-canvas-f409dcd4.js.map +0 -1
  174. package/dist/common-canvas-f6fc2fff.js +0 -2
  175. package/dist/common-canvas-f6fc2fff.js.map +0 -1
  176. package/dist/common-properties-653e50e3.js +0 -2
  177. package/dist/common-properties-653e50e3.js.map +0 -1
  178. package/dist/common-properties-e2c6def7.js +0 -2
  179. package/dist/common-properties-e2c6def7.js.map +0 -1
  180. package/dist/datarecord-metadata-v3-schema-10ddafaf.js +0 -2
  181. package/dist/datarecord-metadata-v3-schema-10ddafaf.js.map +0 -1
  182. package/dist/datarecord-metadata-v3-schema-1504c843.js +0 -2
  183. package/dist/datarecord-metadata-v3-schema-1504c843.js.map +0 -1
  184. package/dist/en-517f38fc.js +0 -2
  185. package/dist/en-517f38fc.js.map +0 -1
  186. package/dist/en-dc6f2e9f.js +0 -2
  187. package/dist/en-dc6f2e9f.js.map +0 -1
  188. package/dist/extends-5a45f92e.js +0 -7
  189. package/dist/extends-5a45f92e.js.map +0 -1
  190. package/dist/extends-a52336ca.js +0 -8
  191. package/dist/extends-a52336ca.js.map +0 -1
  192. package/dist/flexible-table-e6ccbe58.js +0 -2
  193. package/dist/flexible-table-e6ccbe58.js.map +0 -1
  194. package/dist/flexible-table-f60c1680.js +0 -2
  195. package/dist/flexible-table-f60c1680.js.map +0 -1
  196. package/dist/index-567978da.js +0 -2
  197. package/dist/index-567978da.js.map +0 -1
  198. package/dist/index-59486e9a.js +0 -2
  199. package/dist/index-59486e9a.js.map +0 -1
  200. package/dist/isEmpty-def8f509.js +0 -2
  201. package/dist/isEmpty-def8f509.js.map +0 -1
  202. package/dist/isEmpty-e171b734.js +0 -2
  203. package/dist/isEmpty-e171b734.js.map +0 -1
  204. package/dist/toolbar-404bf690.js +0 -2
  205. package/dist/toolbar-404bf690.js.map +0 -1
  206. package/dist/toolbar-611d8ab9.js +0 -2
  207. package/dist/toolbar-611d8ab9.js.map +0 -1
@@ -19,42 +19,17 @@
19
19
  import * as d3 from "d3-selection";
20
20
  import { cloneDeep } from "lodash";
21
21
  import SVGCanvasRenderer from "./svg-canvas-renderer.js";
22
- import CanvasUtils from "./common-canvas-utils.js";
23
22
  import ConfigUtils from "../object-model/config-utils.js";
24
23
  import Logger from "../logging/canvas-logger.js";
25
24
 
26
- const BACKSPACE_KEY = 8;
27
- const DELETE_KEY = 46;
28
- const A_KEY = 65;
29
- const C_KEY = 67;
30
- const P_KEY = 80;
31
- const V_KEY = 86;
32
- const X_KEY = 88;
33
- const Y_KEY = 89;
34
- const Z_KEY = 90;
35
- // TODO - Implement nudge behavior for moving nodes and comments
36
- // const LEFT_ARROW_KEY = 37;
37
- // const UP_ARROW_KEY = 38;
38
- // const RIGHT_ARROW_KEY = 39;
39
- // const DOWN_ARROW_KEY = 40;
40
-
41
25
  export default class SVGCanvasD3 {
42
26
 
43
27
  constructor(canvasInfo, canvasDivSelector, config, canvasController) {
44
28
  this.logger = new Logger(["SVGCanvasD3", "FlowId", canvasInfo.id]);
45
29
  this.logger.logStartTimer("constructor");
46
- this.mousePos = {
47
- x: 0,
48
- y: 0
49
- };
50
30
  this.canvasController = canvasController;
51
- this.canvasDiv = this.initializeCanvasDiv(canvasDivSelector);
31
+ this.canvasDiv = d3.select(canvasDivSelector);
52
32
  this.logger.logEndTimer("constructor", true);
53
- document.addEventListener("mousemove", this.onMouseUpdate.bind(this), true);
54
- }
55
-
56
- close() {
57
- document.removeEventListener("mousemove", this.onMouseUpdate, true);
58
33
  }
59
34
 
60
35
  setCanvasInfo(canvasInfo, config) {
@@ -112,92 +87,30 @@ export default class SVGCanvasD3 {
112
87
  return cloneDeep(canvasInfo);
113
88
  }
114
89
 
115
- // Records in mousePos the mouse pointer position when the pointer is inside
116
- // the boundaries of the canvas or sets the mousePos to null. This position
117
- // info can be used with keyboard operations.
118
- onMouseUpdate(e) {
119
- if (e.target.className.baseVal === "svg-area" || e.target.className.baseVal === "d3-svg-background") {
120
- this.mousePos = {
121
- x: e.clientX,
122
- y: e.clientY
123
- };
124
- } else {
125
- this.mousePos = null;
126
- }
90
+ isEditingText() {
91
+ return this.renderer.isEditingText();
127
92
  }
128
93
 
129
- initializeCanvasDiv(canvasDivSelector) {
130
-
131
- // Add a listener to canvas div to catch key presses. The containing
132
- // canvas div must have tabindex set and the focus set on the div.
133
- const canvasDiv = d3.select(canvasDivSelector)
134
- .on("keydown", (d3Event) => {
135
- // Make sure no tip is displayed, because having one displayed
136
- // will interfere with drawing of the canvas as the result of any
137
- // keyboard action.
138
- this.canvasController.closeTip();
139
- const actions = this.canvasController.getKeyboardConfig().actions;
140
- // We don't handle key presses when:
141
- // 1. We are editng text, because the text area needs to receive key
142
- // presses for undo, redo, delete etc.
143
- // 2. Dragging objects
144
- if (this.renderer.isEditingText() ||
145
- this.renderer.isDragging()) {
146
- return;
147
- }
94
+ isDragging() {
95
+ return this.renderer.isDragging();
96
+ }
148
97
 
149
- // These actions alter the canvas objects so we need to check
150
- // this.config.enableEditingActions before calling them.
151
- if (this.config.enableEditingActions) {
152
- if ((d3Event.keyCode === BACKSPACE_KEY || d3Event.keyCode === DELETE_KEY) && actions.delete) {
153
- CanvasUtils.stopPropagationAndPreventDefault(d3Event); // Some browsers interpret Delete as 'Back to previous page'. So prevent that.
154
- this.canvasController.keyboardActionHandler("deleteSelectedObjects");
155
-
156
- } else if (CanvasUtils.isCmndCtrlPressed(d3Event) &&
157
- !d3Event.shiftKey && d3Event.keyCode === Z_KEY && actions.undo) {
158
- CanvasUtils.stopPropagationAndPreventDefault(d3Event);
159
- this.canvasController.keyboardActionHandler("undo");
160
-
161
- } else if (CanvasUtils.isCmndCtrlPressed(d3Event) &&
162
- ((d3Event.shiftKey && d3Event.keyCode === Z_KEY) || d3Event.keyCode === Y_KEY && actions.redo)) {
163
- CanvasUtils.stopPropagationAndPreventDefault(d3Event);
164
- this.canvasController.keyboardActionHandler("redo");
165
-
166
- } else if (CanvasUtils.isCmndCtrlPressed(d3Event) && d3Event.keyCode === C_KEY && actions.copyToClipboard) {
167
- CanvasUtils.stopPropagationAndPreventDefault(d3Event);
168
- this.canvasController.keyboardActionHandler("copy");
169
-
170
- } else if (CanvasUtils.isCmndCtrlPressed(d3Event) && d3Event.keyCode === X_KEY && actions.cutToClipboard) {
171
- CanvasUtils.stopPropagationAndPreventDefault(d3Event);
172
- this.canvasController.keyboardActionHandler("cut");
173
-
174
- } else if (CanvasUtils.isCmndCtrlPressed(d3Event) && d3Event.keyCode === V_KEY && actions.pasteFromClipboard) {
175
- CanvasUtils.stopPropagationAndPreventDefault(d3Event);
176
- if (this.mousePos) {
177
- this.mousePos = this.renderer.convertPageCoordsToCanvasCoords(this.mousePos.x, this.mousePos.y);
178
- this.mousePos = this.renderer.getMousePosSnapToGrid(this.mousePos);
179
- this.canvasController.keyboardActionHandler("paste", this.mousePos);
180
- } else {
181
- this.canvasController.keyboardActionHandler("paste");
182
- }
183
- }
184
- }
185
- // These last two keyboard actions do not alter the canvas objects so we
186
- // do not need to check this.config.enableEditingActions before calling them.
187
- if (CanvasUtils.isCmndCtrlPressed(d3Event) && d3Event.keyCode === A_KEY && actions.selectAll) {
188
- CanvasUtils.stopPropagationAndPreventDefault(d3Event);
189
- this.canvasController.keyboardActionHandler("selectAll");
190
-
191
- } else if (CanvasUtils.isCmndCtrlPressed(d3Event) && d3Event.shiftKey && d3Event.altKey && d3Event.keyCode === P_KEY) {
192
- CanvasUtils.stopPropagationAndPreventDefault(d3Event);
193
- Logger.switchLoggingState(); // Switch the logging on and off
194
- }
195
- });
196
- return canvasDiv;
98
+ convertPageCoordsToSnappedCanvasCoords(pos) {
99
+ let positon = this.renderer.convertPageCoordsToCanvasCoords(pos.x, pos.y);
100
+ positon = this.renderer.getMousePosSnapToGrid(positon);
101
+ return positon;
102
+ }
103
+
104
+ nodeTemplateDragStart(nodeTemplate) {
105
+ this.renderer.nodeTemplateDragStart(nodeTemplate);
106
+ }
107
+
108
+ nodeTemplateDragOver(nodeTemplate, x, y) {
109
+ this.renderer.nodeTemplateDragOver(nodeTemplate, x, y);
197
110
  }
198
111
 
199
- nodeTemplateDraggedOver(nodeTemplate, x, y) {
200
- this.renderer.nodeTemplateDraggedOver(nodeTemplate, x, y);
112
+ nodeTemplateDragEnd(nodeTemplate) {
113
+ this.renderer.nodeTemplateDragEnd(nodeTemplate);
201
114
  }
202
115
 
203
116
  nodeTemplateDropped(nodeTemplate, x, y) {
@@ -79,9 +79,10 @@ $node-port-input-arrow-connected-stroke-color: $inverse-02;
79
79
  $node-port-input-arrow-connected-fill-color: transparent;
80
80
 
81
81
  // Comment colors
82
- $comment-outline-color: $ui-04;
83
- $comment-fill-color: $ui-01;
84
- $comment-text-color: $text-02;
82
+ $comment-outline-color: $active-light-ui;
83
+ $comment-outline-hover-color: $inverse-hover-ui;
84
+ $comment-fill-color: $white-0;
85
+ $comment-text-color: $gray-100;
85
86
 
86
87
  // Comment properties
87
88
  $comment-text-font-size: 12px;
@@ -293,7 +294,6 @@ $link-highlight-color: $support-04;
293
294
  }
294
295
  }
295
296
 
296
-
297
297
  /* Node styles - Error indication */
298
298
 
299
299
  .d3-node-error-label {
@@ -473,7 +473,6 @@ $link-highlight-color: $support-04;
473
473
  }
474
474
  }
475
475
 
476
-
477
476
  /* Error indicator */
478
477
  .d3-error-circle {
479
478
  stroke: $canvas-background-color;
@@ -605,7 +604,14 @@ $link-highlight-color: $support-04;
605
604
 
606
605
  /* Comment styles */
607
606
 
608
- /* Style for comment background rectangle */
607
+ .d3-comment-group:hover {
608
+ .d3-comment-rect {
609
+ stroke: $comment-outline-hover-color
610
+ }
611
+ }
612
+
613
+
614
+ /* Style for default comment background rectangle */
609
615
  .d3-comment-rect {
610
616
  fill: $comment-fill-color;
611
617
  stroke: $comment-outline-color;
@@ -616,6 +622,59 @@ $link-highlight-color: $support-04;
616
622
  user-select: none;
617
623
  }
618
624
 
625
+ @mixin comment-color-overrides($background-color) {
626
+ .d3-comment-rect {
627
+ fill: $background-color;
628
+ }
629
+ .d3-comment-entry {
630
+ background-color: $background-color;
631
+ color: $gray-100;
632
+ }
633
+
634
+ }
635
+
636
+ /* Styles for comments colored by the user */
637
+ // We add g. at the front of each selector below to override any color set
638
+ // by a class provided for the comment by the host application. The
639
+ // assumption is, the user would prefer the color they set in the UI to
640
+ // override any color provided by the host app.
641
+ g.bkg-col-white-0 {
642
+ @include comment-color-overrides($white-0);
643
+ }
644
+ g.bkg-col-yellow-20 {
645
+ @include comment-color-overrides($yellow-20);
646
+ }
647
+ g.bkg-col-gray-20 {
648
+ @include comment-color-overrides($gray-20);
649
+ }
650
+ g.bkg-col-green-20 {
651
+ @include comment-color-overrides($green-20);
652
+ }
653
+ g.bkg-col-teal-20 {
654
+ @include comment-color-overrides($teal-20);
655
+ }
656
+ g.bkg-col-cyan-20 {
657
+ @include comment-color-overrides($cyan-20);
658
+ }
659
+ g.bkg-col-red-50 {
660
+ @include comment-color-overrides($red-50);
661
+ }
662
+ g.bkg-col-orange-40 {
663
+ @include comment-color-overrides($orange-40);
664
+ }
665
+ g.bkg-col-gray-50 {
666
+ @include comment-color-overrides($gray-50);
667
+ }
668
+ g.bkg-col-green-50 {
669
+ @include comment-color-overrides($green-50);
670
+ }
671
+ g.bkg-col-teal-50 {
672
+ @include comment-color-overrides($teal-50);
673
+ }
674
+ g.bkg-col-cyan-50 {
675
+ @include comment-color-overrides($cyan-50);
676
+ }
677
+
619
678
  .d3-comment-selection-highlight {
620
679
  stroke-width: 0;
621
680
  fill: transparent;
@@ -632,6 +691,7 @@ $link-highlight-color: $support-04;
632
691
 
633
692
  @mixin d3-comment-mixin {
634
693
  color: $comment-text-color;
694
+ background-color: transparent;
635
695
  font-size: $comment-text-font-size;
636
696
  font-weight: $comment-text-font-weight;
637
697
  font-family: $comment-text-font-family;
@@ -653,6 +713,7 @@ $link-highlight-color: $support-04;
653
713
  .d3-comment-text {
654
714
  @include d3-comment-mixin;
655
715
  border-width: $comment-text-display-border;
716
+ user-select: none;
656
717
  }
657
718
 
658
719
  /* Style for comment text entry when shown in an HTML textarea control. */
@@ -0,0 +1,201 @@
1
+ /*
2
+ * Copyright 2022 Elyra Authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /* eslint brace-style: "off" */
17
+
18
+ import { isEmpty } from "lodash";
19
+ import Logger from "../logging/canvas-logger.js";
20
+ import CanvasUtils from "./common-canvas-utils.js";
21
+ import { COMMENT_LINK } from "./constants/canvas-constants";
22
+
23
+
24
+ export default class SVGCanvasPipeline {
25
+ constructor(pipelineId, canvasInfo) {
26
+ this.logger = new Logger("SVGCanvasActivePipeline");
27
+ this.logger.logStartTimer("constructor");
28
+ this.canvasInfo = canvasInfo;
29
+ this.pipeline = this.getPipeline(pipelineId, canvasInfo);
30
+
31
+ // These variables are accessed directly by svg-canvas-renderer
32
+ this.id = this.pipeline.id;
33
+ this.zoom = this.pipeline.zoom;
34
+ this.nodes = this.pipeline.nodes;
35
+ this.comments = this.pipeline.comments;
36
+ this.links = this.pipeline.links;
37
+
38
+ // We create mapped arrays for quick lookup
39
+ this.mappedNodes = this.getMappedArray(this.pipeline.nodes);
40
+ this.mappedComments = this.getMappedArray(this.pipeline.comments);
41
+ this.mappedLinks = this.getMappedArray(this.pipeline.links);
42
+
43
+ // preProcessPipeline uses the mapped objects so this needs to be done
44
+ // after they have been created.
45
+ this.pipeline = this.preProcessPipeline(this.pipeline);
46
+
47
+ this.logger.logEndTimer("constructor");
48
+ }
49
+
50
+ getCanvasDimensions(gap) {
51
+ return CanvasUtils.getCanvasDimensions(
52
+ this.pipeline.nodes, this.pipeline.comments,
53
+ this.pipeline.links, gap);
54
+ }
55
+
56
+ // Returns the name of the type of object d.
57
+ getObjectTypeName(d) {
58
+ if (this.getComment(d.id)) {
59
+ return "comment";
60
+ } else if (this.getNode(d.id)) {
61
+ return "node";
62
+ }
63
+ return "link";
64
+ }
65
+
66
+ getNode(nodeId) {
67
+ const node = this.mappedNodes[nodeId];
68
+ return (typeof node === "undefined") ? null : node;
69
+ }
70
+
71
+ getNodes(nodeIds) {
72
+ const nodes = [];
73
+ nodeIds.forEach((nId) => {
74
+ const n = this.getNode(nId);
75
+ if (n) {
76
+ nodes.push(n);
77
+ }
78
+ });
79
+ return nodes;
80
+ }
81
+
82
+ getSupernodes() {
83
+ return this.pipeline.nodes.filter((node) => CanvasUtils.isSupernode(node));
84
+ }
85
+
86
+ // Returns true if the pipeline is empty except for any binding nodes.
87
+ isEmptyOrBindingsOnly() {
88
+ return (isEmpty(this.pipeline.nodes) || this.containsOnlyBindingNodes()) &&
89
+ isEmpty(this.pipeline.comments);
90
+ }
91
+
92
+ containsOnlyBindingNodes() {
93
+ return !this.pipeline.nodes.find((node) => !CanvasUtils.isSuperBindingNode(node));
94
+ }
95
+
96
+ getComment(commentId) {
97
+ const com = this.mappedComments[commentId];
98
+ return (typeof com === "undefined") ? null : com;
99
+ }
100
+
101
+ getNodesAndComments() {
102
+ return this.pipeline.nodes.concat(this.pipeline.comments);
103
+ }
104
+
105
+ getNodeOrComment(id) {
106
+ let obj = this.getNode(id);
107
+ if (obj === null) {
108
+ obj = this.getComment(id);
109
+ }
110
+ return obj;
111
+ }
112
+
113
+ getLink(linkId) {
114
+ const link = this.mappedLinks[linkId];
115
+ return (typeof link === "undefined") ? null : link;
116
+ }
117
+
118
+ // Replaces the link in the links array with the one passed in.
119
+ replaceLink(oldLink) {
120
+ const index = this.pipeline.links.findIndex((l) => l.id === oldLink.id);
121
+ this.pipeline.links.splice(index, 1, oldLink);
122
+ this.mappedLinks = this.getMappedArray(this.pipeline.links);
123
+ }
124
+
125
+ getPipeline(pipelineId, canvasInfo) {
126
+ const pipeline = canvasInfo.pipelines.find((p) => p.id === pipelineId);
127
+ if (pipeline) {
128
+ return pipeline;
129
+ }
130
+ return { id: pipelineId, nodes: [], comments: [], links: [] };
131
+ }
132
+
133
+ // Preprocesses the pipeline to set the connected attribute of the ports
134
+ // for each node. This is used when rendering the connection satus of ports.
135
+ preProcessPipeline(pipeline) {
136
+ this.setAllPortsDisconnected(pipeline);
137
+
138
+ pipeline.links.forEach((link) => {
139
+ if (link.type === COMMENT_LINK) {
140
+ link.srcObj = this.getComment(link.srcNodeId);
141
+ link.trgNode = this.getNode(link.trgNodeId);
142
+
143
+ } else {
144
+ link.srcObj = this.getNode(link.srcNodeId);
145
+ link.trgNode = this.getNode(link.trgNodeId);
146
+
147
+ if (link.srcObj) {
148
+ this.setOutputPortConnected(link.srcObj, link.srcNodePortId);
149
+ }
150
+ if (link.trgNode) {
151
+ this.setInputPortConnected(link.trgNode, link.trgNodePortId);
152
+ }
153
+ }
154
+ });
155
+ return pipeline;
156
+ }
157
+
158
+ // Sets the isConnected property of all ports in the pipeline to false.
159
+ setAllPortsDisconnected(pipeline) {
160
+ pipeline.nodes.forEach((n) => {
161
+ if (n.inputs) {
162
+ n.inputs.forEach((inp) => (inp.isConnected = false));
163
+ }
164
+ if (n.outputs) {
165
+ n.outputs.forEach((out) => (out.isConnected = false));
166
+ }
167
+ });
168
+ }
169
+
170
+ // Sets the isConnected property of the port, identified by inPortId,
171
+ // for the trgNode to true.
172
+ setInputPortConnected(trgNode, inPortId) {
173
+ const portId = inPortId || CanvasUtils.getDefaultInputPortId(trgNode);
174
+ if (trgNode.inputs) {
175
+ trgNode.inputs.forEach((inp) => {
176
+ if (inp.id === portId) {
177
+ inp.isConnected = true;
178
+ }
179
+ });
180
+ }
181
+ }
182
+
183
+ // Sets the isConnected property of the port, identified by outPortId,
184
+ // for the srcNode to true.
185
+ setOutputPortConnected(srcNode, outPortId) {
186
+ const portId = outPortId || CanvasUtils.getDefaultOutputPortId(srcNode);
187
+ if (srcNode.outputs) {
188
+ srcNode.outputs.forEach((out) => {
189
+ if (out.id === portId) {
190
+ out.isConnected = true;
191
+ }
192
+ });
193
+ }
194
+ }
195
+
196
+ // Returns an object where each element in the array provided is indexed by
197
+ // the id property of the element.
198
+ getMappedArray(array) {
199
+ return array.reduce((map, o) => { map[o.id] = o; return map; }, {});
200
+ }
201
+ }