@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.
- package/dist/canvas-constants-7f93e705.js +2 -0
- package/dist/canvas-constants-7f93e705.js.map +1 -0
- package/dist/canvas-constants-ac5daafb.js +2 -0
- package/dist/canvas-constants-ac5daafb.js.map +1 -0
- package/dist/canvas-controller-09d0c333.js +2 -0
- package/dist/canvas-controller-09d0c333.js.map +1 -0
- package/dist/canvas-controller-c2793ca2.js +2 -0
- package/dist/canvas-controller-c2793ca2.js.map +1 -0
- package/dist/canvas-logger-815781bb.js +2 -0
- package/dist/canvas-logger-815781bb.js.map +1 -0
- package/dist/canvas-logger-a0f1beaa.js +2 -0
- package/dist/canvas-logger-a0f1beaa.js.map +1 -0
- package/dist/common-canvas-5b046a86.js +2 -0
- package/dist/common-canvas-5b046a86.js.map +1 -0
- package/dist/common-canvas-985cc0a2.js +2 -0
- package/dist/common-canvas-985cc0a2.js.map +1 -0
- package/dist/common-canvas.es.js +1 -1
- package/dist/common-canvas.es.js.map +1 -1
- package/dist/common-canvas.js +1 -1
- package/dist/common-canvas.js.map +1 -1
- package/dist/common-properties-4f471b2b.js +2 -0
- package/dist/common-properties-4f471b2b.js.map +1 -0
- package/dist/common-properties-9161cd27.js +2 -0
- package/dist/common-properties-9161cd27.js.map +1 -0
- package/dist/datarecord-metadata-v3-schema-bda88f2e.js +2 -0
- package/dist/datarecord-metadata-v3-schema-bda88f2e.js.map +1 -0
- package/dist/datarecord-metadata-v3-schema-d7ad05cd.js +2 -0
- package/dist/datarecord-metadata-v3-schema-d7ad05cd.js.map +1 -0
- package/dist/en-2ed89528.js +2 -0
- package/dist/en-2ed89528.js.map +1 -0
- package/dist/en-e93855cc.js +2 -0
- package/dist/en-e93855cc.js.map +1 -0
- package/dist/extends-39f57612.js +7 -0
- package/dist/extends-39f57612.js.map +1 -0
- package/dist/extends-51d9ddcc.js +7 -0
- package/dist/extends-51d9ddcc.js.map +1 -0
- package/dist/flexible-table-154a3359.js +2 -0
- package/dist/flexible-table-154a3359.js.map +1 -0
- package/dist/flexible-table-5e4a1e6d.js +2 -0
- package/dist/flexible-table-5e4a1e6d.js.map +1 -0
- package/dist/icon-811ffddd.js +2 -0
- package/dist/icon-811ffddd.js.map +1 -0
- package/dist/icon-d6909a68.js +2 -0
- package/dist/icon-d6909a68.js.map +1 -0
- package/dist/index-4fd90a14.js +2 -0
- package/dist/index-4fd90a14.js.map +1 -0
- package/dist/index-6d138021.js +2 -0
- package/dist/index-6d138021.js.map +1 -0
- package/dist/isArrayLikeObject-31e5e646.js +2 -0
- package/dist/isArrayLikeObject-31e5e646.js.map +1 -0
- package/dist/isArrayLikeObject-7c33c7fd.js +2 -0
- package/dist/isArrayLikeObject-7c33c7fd.js.map +1 -0
- package/dist/lib/canvas-controller.es.js +1 -1
- package/dist/lib/canvas-controller.js +1 -1
- package/dist/lib/canvas.es.js +1 -1
- package/dist/lib/canvas.js +1 -1
- package/dist/lib/context-menu.es.js +1 -1
- package/dist/lib/context-menu.es.js.map +1 -1
- package/dist/lib/context-menu.js +1 -1
- package/dist/lib/context-menu.js.map +1 -1
- package/dist/lib/properties/field-picker.es.js +1 -1
- package/dist/lib/properties/field-picker.js +1 -1
- package/dist/lib/properties/flexible-table.es.js +1 -1
- package/dist/lib/properties/flexible-table.js +1 -1
- package/dist/lib/properties.es.js +1 -1
- package/dist/lib/properties.js +1 -1
- package/dist/lib/tooltip.es.js +1 -1
- package/dist/lib/tooltip.es.js.map +1 -1
- package/dist/lib/tooltip.js +1 -1
- package/dist/lib/tooltip.js.map +1 -1
- package/dist/styles/common-canvas.min.css +1 -1
- package/dist/styles/common-canvas.min.css.map +1 -1
- package/dist/toolbar-335252dd.js +2 -0
- package/dist/toolbar-335252dd.js.map +1 -0
- package/dist/toolbar-85e6c77b.js +2 -0
- package/dist/toolbar-85e6c77b.js.map +1 -0
- package/locales/command-actions/locales/en.json +7 -1
- package/locales/command-actions/locales/eo.json +7 -1
- package/locales/command-actions/locales/index.js +3 -1
- package/locales/command-actions/locales/ko.json +9 -0
- package/locales/common-canvas/locales/en.json +1 -0
- package/locales/common-canvas/locales/eo.json +1 -0
- package/locales/common-canvas/locales/index.js +3 -1
- package/locales/common-canvas/locales/ko.json +32 -0
- package/locales/common-properties/locales/index.js +3 -1
- package/locales/common-properties/locales/ko.json +93 -0
- package/locales/palette/locales/index.js +3 -1
- package/locales/palette/locales/ko.json +10 -0
- package/locales/toolbar/locales/index.js +3 -1
- package/locales/toolbar/locales/ko.json +8 -0
- package/package.json +2 -1
- package/src/color-picker/color-picker-panel.jsx +61 -0
- package/src/color-picker/color-picker.jsx +37 -0
- package/src/color-picker/color-picker.scss +46 -0
- package/src/command-actions/colorSelectedObjectsAction.js +72 -0
- package/src/command-actions/deleteObjectsAction.js +16 -11
- package/src/command-actions/pasteAction.js +50 -21
- package/src/common-canvas/canvas-controller.js +32 -5
- package/src/common-canvas/cc-bottom-panel.jsx +34 -37
- package/src/common-canvas/cc-contents.jsx +110 -8
- package/src/common-canvas/cc-toolbar.jsx +3 -2
- package/src/common-canvas/common-canvas-utils.js +73 -90
- package/src/common-canvas/common-canvas.scss +28 -14
- package/src/common-canvas/constants/canvas-constants.js +17 -16
- package/src/common-canvas/label-util.js +1 -1
- package/src/common-canvas/svg-canvas-d3.js +20 -107
- package/src/common-canvas/svg-canvas-d3.scss +67 -6
- package/src/common-canvas/svg-canvas-pipeline.js +201 -0
- package/src/common-canvas/svg-canvas-renderer.js +325 -339
- package/src/common-canvas/svg-canvas-utils-links.js +3 -3
- package/src/common-canvas/svg-canvas-utils-nodes.js +22 -44
- package/src/common-properties/actions.js +4 -0
- package/src/common-properties/components/field-picker/field-picker.jsx +33 -36
- package/src/common-properties/components/field-picker/field-picker.scss +20 -23
- package/src/common-properties/components/flexible-table/flexible-table.jsx +46 -31
- package/src/common-properties/components/flexible-table/flexible-table.scss +14 -17
- package/src/common-properties/components/properties-buttons/properties-buttons.jsx +28 -21
- package/src/common-properties/components/table-buttons/table-buttons.jsx +3 -1
- package/src/common-properties/components/table-buttons/table-buttons.scss +8 -8
- package/src/common-properties/components/title-editor/title-editor.jsx +31 -4
- package/src/common-properties/components/title-editor/title-editor.scss +30 -5
- package/src/common-properties/components/virtualized-table/virtualized-table.jsx +119 -27
- package/src/common-properties/components/virtualized-table/virtualized-table.scss +72 -8
- package/src/common-properties/constants/constants.js +5 -1
- package/src/common-properties/constants/form-constants.js +1 -0
- package/src/common-properties/controls/abstract-table.jsx +12 -11
- package/src/common-properties/controls/abstract-table.scss +6 -2
- package/src/common-properties/controls/dropdown/dropdown.scss +4 -0
- package/src/common-properties/controls/expression/expression-builder/expression-select-field-function.jsx +2 -2
- package/src/common-properties/controls/expression/expression.scss +1 -1
- package/src/common-properties/controls/passwordfield/passwordfield.jsx +2 -2
- package/src/common-properties/controls/readonlytable/readonlytable.jsx +4 -2
- package/src/common-properties/controls/selectcolumns/selectcolumns.scss +0 -19
- package/src/common-properties/controls/someofselect/someofselect.scss +2 -2
- package/src/common-properties/form/ControlInfo.js +8 -0
- package/src/common-properties/form/EditorForm.js +4 -0
- package/src/common-properties/form/ParameterInfo.js +4 -0
- package/src/common-properties/panels/sub-panel/cell.jsx +18 -23
- package/src/common-properties/panels/sub-panel/sub-panel.scss +5 -22
- package/src/common-properties/properties-controller.js +18 -0
- package/src/common-properties/properties-main/properties-main.jsx +15 -9
- package/src/common-properties/properties-main/properties-main.scss +9 -2
- package/src/common-properties/properties-store.js +27 -1
- package/src/common-properties/reducers/properties-settings.js +17 -1
- package/src/context-menu/common-context-menu.jsx +74 -29
- package/src/context-menu/context-menu-wrapper.jsx +2 -2
- package/src/icons/icon.jsx +5 -46
- package/src/index.scss +1 -0
- package/src/object-model/api-pipeline.js +26 -43
- package/src/object-model/object-model.js +27 -3
- package/src/object-model/redux/canvas-store.js +68 -0
- package/src/object-model/redux/reducers/canvasinfo.js +36 -0
- package/src/object-model/redux/reducers/comments.js +58 -10
- package/src/object-model/redux/reducers/externalpipelineflows.js +1 -0
- package/src/object-model/redux/reducers/links.js +9 -7
- package/src/object-model/redux/reducers/selectioninfo.js +2 -1
- package/src/palette/palette-content-list-item.jsx +8 -1
- package/src/palette/palette-dialog-content-grid-node.jsx +8 -1
- package/src/palette/palette-flyout-utils.js +3 -3
- package/src/toolbar/toolbar-action-item.jsx +75 -11
- package/src/toolbar/toolbar-overflow-item.jsx +2 -3
- package/src/tooltip/tooltip.jsx +4 -1
- package/stats.html +1 -1
- package/dist/canvas-constants-af93267a.js +0 -2
- package/dist/canvas-constants-af93267a.js.map +0 -1
- package/dist/canvas-constants-ffce3b78.js +0 -2
- package/dist/canvas-constants-ffce3b78.js.map +0 -1
- package/dist/canvas-controller-27101eb5.js +0 -2
- package/dist/canvas-controller-27101eb5.js.map +0 -1
- package/dist/canvas-controller-a57e3b7a.js +0 -2
- package/dist/canvas-controller-a57e3b7a.js.map +0 -1
- package/dist/common-canvas-f409dcd4.js +0 -2
- package/dist/common-canvas-f409dcd4.js.map +0 -1
- package/dist/common-canvas-f6fc2fff.js +0 -2
- package/dist/common-canvas-f6fc2fff.js.map +0 -1
- package/dist/common-properties-653e50e3.js +0 -2
- package/dist/common-properties-653e50e3.js.map +0 -1
- package/dist/common-properties-e2c6def7.js +0 -2
- package/dist/common-properties-e2c6def7.js.map +0 -1
- package/dist/datarecord-metadata-v3-schema-10ddafaf.js +0 -2
- package/dist/datarecord-metadata-v3-schema-10ddafaf.js.map +0 -1
- package/dist/datarecord-metadata-v3-schema-1504c843.js +0 -2
- package/dist/datarecord-metadata-v3-schema-1504c843.js.map +0 -1
- package/dist/en-517f38fc.js +0 -2
- package/dist/en-517f38fc.js.map +0 -1
- package/dist/en-dc6f2e9f.js +0 -2
- package/dist/en-dc6f2e9f.js.map +0 -1
- package/dist/extends-5a45f92e.js +0 -7
- package/dist/extends-5a45f92e.js.map +0 -1
- package/dist/extends-a52336ca.js +0 -8
- package/dist/extends-a52336ca.js.map +0 -1
- package/dist/flexible-table-e6ccbe58.js +0 -2
- package/dist/flexible-table-e6ccbe58.js.map +0 -1
- package/dist/flexible-table-f60c1680.js +0 -2
- package/dist/flexible-table-f60c1680.js.map +0 -1
- package/dist/index-567978da.js +0 -2
- package/dist/index-567978da.js.map +0 -1
- package/dist/index-59486e9a.js +0 -2
- package/dist/index-59486e9a.js.map +0 -1
- package/dist/isEmpty-def8f509.js +0 -2
- package/dist/isEmpty-def8f509.js.map +0 -1
- package/dist/isEmpty-e171b734.js +0 -2
- package/dist/isEmpty-e171b734.js.map +0 -1
- package/dist/toolbar-404bf690.js +0 -2
- package/dist/toolbar-404bf690.js.map +0 -1
- package/dist/toolbar-611d8ab9.js +0 -2
- 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 =
|
|
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
|
-
|
|
116
|
-
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
200
|
-
this.renderer.
|
|
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
|
|
83
|
-
$comment-
|
|
84
|
-
$comment-
|
|
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
|
-
|
|
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
|
+
}
|