@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
@@ -0,0 +1,61 @@
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
+
17
+ import React from "react";
18
+ import PropTypes from "prop-types";
19
+ import Logger from "../logging/canvas-logger.js";
20
+
21
+
22
+ class ColorPickerPanel extends React.Component {
23
+ constructor(props) {
24
+ super(props);
25
+ this.logger = new Logger("CC-ContextMenu");
26
+
27
+ this.onClick = this.onClick.bind(this);
28
+ }
29
+
30
+ onClick(evt) {
31
+ const color = evt.target.dataset.color;
32
+ this.props.clickActionHandler(color);
33
+ }
34
+
35
+ render() {
36
+ this.logger.log("render");
37
+ return (
38
+ <div className="color-picker-panel" onClick={this.onClick}>
39
+ <div tabIndex="0" data-color={"bkg-col-white-0"} className="color-picker-item white-0" />
40
+ <div tabIndex="0" data-color={"bkg-col-yellow-20"} className="color-picker-item yellow-20" />
41
+ <div tabIndex="0" data-color={"bkg-col-gray-20"} className="color-picker-item gray-20" />
42
+ <div tabIndex="0" data-color={"bkg-col-green-20"} className="color-picker-item green-20" />
43
+ <div tabIndex="0" data-color={"bkg-col-teal-20"} className="color-picker-item teal-20" />
44
+ <div tabIndex="0" data-color={"bkg-col-cyan-20"} className="color-picker-item cyan-20" />
45
+
46
+ <div tabIndex="0" data-color={"bkg-col-red-50"} className="color-picker-item red-50" />
47
+ <div tabIndex="0" data-color={"bkg-col-orange-40"} className="color-picker-item orange-40" />
48
+ <div tabIndex="0" data-color={"bkg-col-gray-50"} className="color-picker-item gray-50" />
49
+ <div tabIndex="0" data-color={"bkg-col-green-50"} className="color-picker-item green-50" />
50
+ <div tabIndex="0" data-color={"bkg-col-teal-50"} className="color-picker-item teal-50" />
51
+ <div tabIndex="0" data-color={"bkg-col-cyan-50"} className="color-picker-item cyan-50" />
52
+ </div>);
53
+ }
54
+ }
55
+
56
+ ColorPickerPanel.propTypes = {
57
+ clickActionHandler: PropTypes.func.isRequired,
58
+ closeMenu: PropTypes.func
59
+ };
60
+
61
+ export default ColorPickerPanel;
@@ -0,0 +1,37 @@
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
+
17
+ import React from "react";
18
+ import PropTypes from "prop-types";
19
+ import { OverflowMenu } from "carbon-components-react";
20
+ import { ColorPalette32 } from "@carbon/icons-react";
21
+ import ColorPickerPanel from "./color-picker-panel";
22
+
23
+ class ColorPicker extends React.Component {
24
+ render() {
25
+ return (
26
+ <OverflowMenu renderIcon={ColorPalette32} className="color-menu">
27
+ <ColorPickerPanel clickActionHandler={this.props.clickActionHandler} />
28
+ </OverflowMenu>
29
+ );
30
+ }
31
+ }
32
+
33
+ ColorPicker.propTypes = {
34
+ clickActionHandler: PropTypes.func.isRequired
35
+ };
36
+
37
+ export default ColorPicker;
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright 2017-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
+
17
+ @import "carbon-components/scss/globals/scss/_vars";
18
+
19
+ .color-picker-panel {
20
+ width: 100%;
21
+ height: 55px;
22
+ display: flex;
23
+ flex-wrap: wrap;
24
+
25
+ .color-picker-item {
26
+ width: 20px;
27
+ height: 20px;
28
+ margin: 5px 0 0 5px;
29
+ cursor: pointer;
30
+ &.white-0 {
31
+ background-color: $white-0;
32
+ border: 1px solid $gray-50;
33
+ }
34
+ &.yellow-20 { background-color: $yellow-20; }
35
+ &.gray-20 { background-color: $gray-20; }
36
+ &.green-20 { background-color: $green-20; }
37
+ &.teal-20 { background-color: $teal-20; }
38
+ &.cyan-20 { background-color: $cyan-20; }
39
+ &.red-50 { background-color: $red-50; }
40
+ &.orange-40 { background-color: $orange-40; }
41
+ &.gray-50 { background-color: $gray-50; }
42
+ &.green-50 { background-color: $green-50; }
43
+ &.teal-50 { background-color: $teal-50; }
44
+ &.cyan-50 { background-color: $cyan-50; }
45
+ }
46
+ }
@@ -0,0 +1,72 @@
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
+ import Action from "../command-stack/action.js";
17
+ import CanvasUtils from "../common-canvas/common-canvas-utils.js";
18
+
19
+ export default class ColorSelectedObjectsAction extends Action {
20
+ constructor(data, objectModel, labelUtil) {
21
+ super(data);
22
+ this.data = data;
23
+ this.objectModel = objectModel;
24
+ this.labelUtil = labelUtil;
25
+ this.apiPipeline = this.objectModel.getAPIPipeline(data.pipelineId);
26
+ this.oldIds = this.data.selectedObjects.map((o) => o.id); // Copy the IDs
27
+ this.oldColors = this.getOldColors();
28
+ this.actionLabel = this.createActionLabel();
29
+ }
30
+
31
+ // Standard methods
32
+ do() {
33
+ this.apiPipeline.setObjectsColorClassName(this.oldIds, this.data.editParam.color);
34
+ }
35
+
36
+ undo() {
37
+ this.apiPipeline.setObjectsColorClassName(this.oldIds, this.oldColors);
38
+ }
39
+
40
+ redo() {
41
+ this.do();
42
+ }
43
+
44
+ getLabel() {
45
+ return this.actionLabel;
46
+ }
47
+
48
+ createActionLabel() {
49
+ return this.labelUtil.getActionLabel(this, "action.colorComments", {
50
+ comments_count: this.data.selectedObjectIds.length
51
+ });
52
+ }
53
+
54
+ getOldColors() {
55
+ const oldColors = [];
56
+ this.data.selectedObjects.forEach((o) => {
57
+ oldColors.push(this.getObjectColorClass(o));
58
+ });
59
+ return oldColors;
60
+ }
61
+
62
+ getObjectColorClass(o) {
63
+ if (o.class_name) {
64
+ const classes = o.class_name.split(" ");
65
+ if (classes) {
66
+ const colorClass = classes.find((c) => CanvasUtils.getBkgColorClass(c));
67
+ return colorClass;
68
+ }
69
+ }
70
+ return "";
71
+ }
72
+ }
@@ -172,16 +172,21 @@ export default class DeleteObjectsAction extends Action {
172
172
  }
173
173
 
174
174
  createActionLabel() {
175
- if (this.areDetachableLinksSupported) {
176
- return this.labelUtil.getActionLabel(this, "action.deleteNodesCommentsLinks",
177
- { nodes_count: this.nodesToDelete.length + this.supernodesToDelete.length,
178
- comments_count: this.commentsToDelete.length,
179
- links_count: this.linksToDelete.length
180
- });
181
- }
182
- return this.labelUtil.getActionLabel(this, "action.deleteNodesComments", {
183
- nodes_count: this.nodesToDelete.length + this.supernodesToDelete.length,
184
- comments_count: this.commentsToDelete.length
185
- });
175
+ const stringsList = [
176
+ { label: "Nodes", val: this.nodesToDelete.length + this.supernodesToDelete.length },
177
+ { label: "Comments", val: this.commentsToDelete.length },
178
+ { label: "Links", val: this.linksToDelete.length }
179
+ ];
180
+ const dynamicStringKey = "action.delete" + stringsList
181
+ .filter((v) => v.val)
182
+ .map((o) => o.label)
183
+ .join("");
184
+
185
+ return this.labelUtil.getActionLabel(this, dynamicStringKey,
186
+ {
187
+ nodes_count: this.nodesToDelete.length + this.supernodesToDelete.length,
188
+ comments_count: this.commentsToDelete.length,
189
+ links_count: this.linksToDelete.length
190
+ });
186
191
  }
187
192
  }
@@ -35,6 +35,14 @@ export default class PasteAction extends Action {
35
35
  // with IDs the same as those already on the canvas.
36
36
  this.clones = this.objectModel.cloneObjectsToPaste(
37
37
  data.objects.nodes, data.objects.comments, data.objects.links);
38
+
39
+ const { nodes, pipelines } = this.objectModel.extractAddDataPipelines(this.clones.clonedNodes);
40
+ this.clones.clonedNodes = nodes;
41
+ this.pipelines = pipelines;
42
+
43
+ // Get the IDs of the objects to be selected after they are pasted. We
44
+ // automatically select pasted objects so they are easy to move by the user.
45
+ this.selectionIds = this.getSelectionIds(this.clones);
38
46
  }
39
47
 
40
48
  // Adjusts the positions of the cloned objects appropriately. If the data
@@ -121,6 +129,25 @@ export default class PasteAction extends Action {
121
129
  }
122
130
  }
123
131
 
132
+ // Return the IDs of the cloned objects to be selected after the
133
+ // paste is complete.
134
+ getSelectionIds(clones) {
135
+ const selectionIds = [];
136
+
137
+ clones.clonedNodes.forEach((cn) => {
138
+ selectionIds.push(cn.id);
139
+ });
140
+
141
+ clones.clonedComments.forEach((cc) => {
142
+ selectionIds.push(cc.id);
143
+ });
144
+
145
+ if (this.areDetachableLinksInUse) {
146
+ clones.clonedLinks.forEach((cl) => selectionIds.push(cl.id));
147
+ }
148
+ return selectionIds;
149
+ }
150
+
124
151
  // Return augmented command object which will be passed to the
125
152
  // client app.
126
153
  getData() {
@@ -132,31 +159,33 @@ export default class PasteAction extends Action {
132
159
 
133
160
  // Standard methods
134
161
  do() {
135
- const addedObjectIds = [];
136
-
137
- this.clones.clonedNodes.forEach((cn) => {
138
- this.apiPipeline.addNode(cn);
139
- addedObjectIds.push(cn.id);
162
+ this.apiPipeline.addPastedObjects({
163
+ nodesToAdd: this.clones.clonedNodes,
164
+ commentsToAdd: this.clones.clonedComments,
165
+ linksToAdd: this.clones.clonedLinks,
166
+ pipelinesToAdd: this.pipelines,
167
+ selections: this.selectionIds
140
168
  });
141
-
142
- this.clones.clonedComments.forEach((cc) => {
143
- this.apiPipeline.addComment(cc);
144
- addedObjectIds.push(cc.id);
145
- });
146
-
147
-
148
- this.apiPipeline.addLinks(this.clones.clonedLinks);
149
- if (this.areDetachableLinksInUse) {
150
- this.clones.clonedLinks.forEach((cl) => addedObjectIds.push(cl.id));
151
- }
152
-
153
- this.objectModel.setSelections(addedObjectIds, this.apiPipeline.pipelineId);
154
169
  }
155
170
 
156
171
  undo() {
157
- this.apiPipeline.deleteNodes(this.clones.clonedNodes);
158
- this.apiPipeline.deleteComments(this.clones.clonedComments);
159
- this.apiPipeline.deleteLinks(this.clones.clonedLinks);
172
+ // External pipelines may have been loaded in the do() function so we
173
+ // retrieve a full set of pipelines to delete from the object model.
174
+ const supernodes = CanvasUtils.filterSupernodes(this.clones.clonedNodes);
175
+ const pipelines = this.objectModel.getDescPipelinesToDelete(supernodes, this.data.pipelineId);
176
+
177
+ // We can also retrieve any external pipeline flows that might have been
178
+ // loaded while executing the do() method.
179
+ const oldExtPipelineFlows =
180
+ this.objectModel.getExternalPipelineFlowsForPipelines(pipelines);
181
+
182
+ this.apiPipeline.deletePastedObjects({
183
+ nodesToDelete: this.clones.clonedNodes,
184
+ commentsToDelete: this.clones.clonedComments,
185
+ linksToDelete: this.clones.clonedLinks,
186
+ pipelinesToDelete: pipelines,
187
+ extPipelineFlowsToDelete: oldExtPipelineFlows
188
+ });
160
189
  }
161
190
 
162
191
  redo() {
@@ -30,6 +30,7 @@ import CreateNodeOnLinkAction from "../command-actions/createNodeOnLinkAction.js
30
30
  import CreateNodeAttachLinksAction from "../command-actions/createNodeAttachLinksAction.js";
31
31
  import CreateSuperNodeAction from "../command-actions/createSuperNodeAction.js";
32
32
  import CollapseSuperNodeInPlaceAction from "../command-actions/collapseSuperNodeInPlaceAction.js";
33
+ import ColorSelectedObjectsAction from "../command-actions/colorSelectedObjectsAction.js";
33
34
  import DeconstructSuperNodeAction from "../command-actions/deconstructSuperNodeAction.js";
34
35
  import DeleteLinkAction from "../command-actions/deleteLinkAction.js";
35
36
  import DeleteObjectsAction from "../command-actions/deleteObjectsAction.js";
@@ -67,7 +68,8 @@ export default class CanvasController {
67
68
  defaultMenuEntries: {
68
69
  saveToPalette: false,
69
70
  createSupernode: true,
70
- displaySupernodeFullPage: true
71
+ displaySupernodeFullPage: true,
72
+ colorBackground: true
71
73
  }
72
74
  };
73
75
 
@@ -171,7 +173,10 @@ export default class CanvasController {
171
173
 
172
174
  setContextMenuConfig(contextMenuConfig) {
173
175
  this.logger.log("Setting Context Menu Config");
174
- this.contextMenuConfig = Object.assign(this.contextMenuConfig, contextMenuConfig);
176
+ if (contextMenuConfig) {
177
+ const defaultMenuEntries = Object.assign(this.contextMenuConfig.defaultMenuEntries, contextMenuConfig.defaultMenuEntries);
178
+ this.contextMenuConfig = Object.assign(this.contextMenuConfig, contextMenuConfig, { defaultMenuEntries });
179
+ }
175
180
  }
176
181
 
177
182
  setKeyboardConfig(keyboardConfig) {
@@ -1583,8 +1588,19 @@ export default class CanvasController {
1583
1588
  return null;
1584
1589
  }
1585
1590
 
1586
- setDragNodeTemplate(nodeTemplate) {
1591
+ nodeTemplateDragStart(nodeTemplate) {
1587
1592
  CanvasController.dragNodeTemplate = nodeTemplate;
1593
+
1594
+ if (this.canvasContents) {
1595
+ this.getSVGCanvasD3().nodeTemplateDragStart(CanvasController.dragNodeTemplate);
1596
+ }
1597
+ }
1598
+
1599
+ nodeTemplateDragEnd() {
1600
+ if (this.canvasContents && CanvasController.dragNodeTemplate) {
1601
+ this.getSVGCanvasD3().nodeTemplateDragEnd(CanvasController.dragNodeTemplate);
1602
+ }
1603
+ CanvasController.dragNodeTemplate = null;
1588
1604
  }
1589
1605
 
1590
1606
  getDragNodeTemplate() {
@@ -1897,6 +1913,12 @@ export default class CanvasController {
1897
1913
  menuDefinition = menuDefinition.concat({ divider: true });
1898
1914
  }
1899
1915
  }
1916
+ // Color objects
1917
+ if (source.type === "comment" &&
1918
+ get(this, "contextMenuConfig.defaultMenuEntries.colorBackground", true)) {
1919
+ menuDefinition = menuDefinition.concat({ submenu: true, menu: "colorPicker", label: this.labelUtil.getLabel("comment.colorBackground") });
1920
+ menuDefinition = menuDefinition.concat({ divider: true });
1921
+ }
1900
1922
  // Edit submenu (cut, copy, paste)
1901
1923
  if (source.type === "node" ||
1902
1924
  source.type === "comment" ||
@@ -2099,10 +2121,10 @@ export default class CanvasController {
2099
2121
  return { x: 0, y: 0 };
2100
2122
  }
2101
2123
 
2102
- contextMenuActionHandler(action) {
2124
+ contextMenuActionHandler(action, editParam) {
2103
2125
  this.logger.log("contextMenuActionHandler - action: " + action);
2104
2126
  this.logger.log(this.contextMenuSource);
2105
- const data = Object.assign({}, this.contextMenuSource, { "editType": action, "editSource": "contextmenu" });
2127
+ const data = Object.assign({}, this.contextMenuSource, { "editType": action, "editParam": editParam, "editSource": "contextmenu" });
2106
2128
  this.editActionHandler(data);
2107
2129
 
2108
2130
  this.canvasContents.focusOnCanvas(); // Set focus on canvas so keybord events go there.
@@ -2357,6 +2379,11 @@ export default class CanvasController {
2357
2379
  data = command.getData();
2358
2380
  break;
2359
2381
  }
2382
+ case "colorSelectedObjects": {
2383
+ command = new ColorSelectedObjectsAction(data, this.objectModel, this.labelUtil);
2384
+ this.commandStack.do(command);
2385
+ break;
2386
+ }
2360
2387
  case "deleteSelectedObjects": {
2361
2388
  command = new DeleteObjectsAction(data, this.objectModel, this.labelUtil, this.areDetachableLinksInUse());
2362
2389
  this.commandStack.do(command);
@@ -14,12 +14,9 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- /* eslint no-shadow: ["error", { "allow": ["Node", "Comment"] }] */
18
-
19
17
  import React from "react";
20
18
  import PropTypes from "prop-types";
21
19
  import { connect } from "react-redux";
22
- import { injectIntl } from "react-intl";
23
20
  import Logger from "../logging/canvas-logger.js";
24
21
 
25
22
  class CanvasBottomPanel extends React.Component {
@@ -30,50 +27,55 @@ class CanvasBottomPanel extends React.Component {
30
27
  panelHeight: 393
31
28
  };
32
29
 
33
- this.resizing = false;
34
30
  this.logger = new Logger("CC-Bottom-Panel");
35
31
 
36
- this.startResize = this.startResize.bind(this);
37
- this.stopResize = this.stopResize.bind(this);
38
- this.resize = this.resize.bind(this);
39
- }
40
-
41
- componentDidMount() {
42
- // document.addEventListener("mouseup", this.stopResize, true);
32
+ this.onMouseUp = this.onMouseUp.bind(this);
33
+ this.onMouseDown = this.onMouseDown.bind(this);
34
+ this.onMouseMoveY = this.onMouseMoveY.bind(this);
43
35
  }
44
36
 
45
- componentWillUnmount() {
46
- // document.removeEventListener("mouseup", this.stopResize, true);
47
- }
48
-
49
- startResize(evt) {
50
- this.resizing = true;
37
+ onMouseDown(e) {
38
+ if (e.button === 0) {
39
+ document.addEventListener("mousemove", this.onMouseMoveY, true);
40
+ document.addEventListener("mouseup", this.onMouseUp, true);
41
+ this.poseY = e.clientY;
42
+ }
51
43
  }
52
44
 
53
- stopResize(evt) {
54
- this.resizing = false;
45
+ onMouseUp(e) {
46
+ document.removeEventListener("mousemove", this.onMouseMoveY, true);
47
+ document.removeEventListener("mouseup", this.onMouseUp, true);
55
48
  }
56
49
 
57
- resize(evt) {
58
- if (this.resizing) {
59
- this.setState({ "panelHeight": this.state.panelHeight + evt.movementY });
50
+ onMouseMoveY(e) {
51
+ if (e.clientY) {
52
+ const diff = e.clientY - this.poseY;
53
+ this.setState({
54
+ panelHeight: this.state.panelHeight - diff
55
+ });
56
+ this.poseY = e.clientY;
60
57
  }
61
58
  }
62
-
63
59
  render() {
64
60
  this.logger.log("render");
65
-
66
61
  let bottomPanel = null;
67
62
 
68
- const styleObj = {
69
- height: this.state.panelHeight + "px"
70
- // transition: transitionVariable,
71
- };
72
-
73
63
  if (this.props.bottomPanelIsOpen) {
64
+ const canvasContainer = document.querySelector(".common-canvas-drop-div");
65
+ const rectHeight = canvasContainer
66
+ ? canvasContainer.getBoundingClientRect().height
67
+ : 0;
68
+ const marginTop = 60;
69
+ const height = this.state.panelHeight >= (rectHeight - marginTop)
70
+ ? (rectHeight - marginTop)
71
+ : this.state.panelHeight;
72
+
74
73
  bottomPanel = (
75
- <div className={"bottom-panel"} style={styleObj}>
76
- {this.props.bottomPanelContent}
74
+ <div className="bottom-panel" style={{ height }} >
75
+ <div className="bottom-panel-drag" onMouseDown={this.onMouseDown} />
76
+ <div className="bottom-panel-contents">
77
+ {this.props.bottomPanelContent}
78
+ </div>
77
79
  </div>
78
80
  );
79
81
  }
@@ -83,10 +85,6 @@ class CanvasBottomPanel extends React.Component {
83
85
  }
84
86
 
85
87
  CanvasBottomPanel.propTypes = {
86
- // Provided by CommonCanvas
87
- intl: PropTypes.object.isRequired,
88
- canvasController: PropTypes.object.isRequired,
89
-
90
88
  // Provided by Redux
91
89
  bottomPanelIsOpen: PropTypes.bool,
92
90
  bottomPanelContent: PropTypes.object
@@ -96,5 +94,4 @@ const mapStateToProps = (state, ownProps) => ({
96
94
  bottomPanelIsOpen: state.bottompanel.isOpen,
97
95
  bottomPanelContent: state.bottompanel.content
98
96
  });
99
-
100
- export default connect(mapStateToProps)(injectIntl(CanvasBottomPanel));
97
+ export default connect(mapStateToProps)(CanvasBottomPanel);