@eclipse-glsp-examples/workflow-glsp 0.9.0-rc-01 → 0.10.0-next.146a812.165

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.
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2022 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -15,46 +15,81 @@
15
15
  ********************************************************************************/
16
16
  import {
17
17
  angleOfPoint,
18
- GEdgeView,
19
- IView,
18
+ getSubType,
20
19
  Point,
20
+ PolylineEdgeViewWithGapsOnIntersections,
21
21
  RenderingContext,
22
22
  SEdge,
23
+ setAttr,
23
24
  toDegrees
24
25
  } from '@eclipse-glsp/client';
25
26
  import { injectable } from 'inversify';
26
- import * as snabbdom from 'snabbdom-jsx';
27
- import { VNode } from 'snabbdom/vnode';
28
-
29
- import { Icon } from './model';
27
+ import { VNode } from 'snabbdom';
28
+ import { findParentByFeature, ShapeView, svg } from 'sprotty';
29
+ import { Icon, isTaskNode } from './model';
30
30
 
31
31
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
- const JSX = { createElement: snabbdom.svg };
32
+ const JSX = { createElement: svg };
33
33
 
34
34
  @injectable()
35
- export class WorkflowEdgeView extends GEdgeView {
36
- protected renderAdditionals(edge: SEdge, segments: Point[], context: RenderingContext): VNode[] {
35
+ export class WorkflowEdgeView extends PolylineEdgeViewWithGapsOnIntersections {
36
+ protected override renderAdditionals(edge: SEdge, segments: Point[], context: RenderingContext): VNode[] {
37
37
  const additionals = super.renderAdditionals(edge, segments, context);
38
38
  const p1 = segments[segments.length - 2];
39
39
  const p2 = segments[segments.length - 1];
40
- const arrow = <path class-sprotty-edge={true} class-arrow={true} d='M 1.5,0 L 10,-4 L 10,4 Z'
41
- transform={`rotate(${toDegrees(angleOfPoint({ x: p1.x - p2.x, y: p1.y - p2.y }))} ${p2.x} ${p2.y}) translate(${p2.x} ${p2.y})`} />;
40
+ const arrow = (
41
+ <path
42
+ class-sprotty-edge={true}
43
+ class-arrow={true}
44
+ d='M 1,0 L 10,-4 L 10,4 Z'
45
+ transform={`rotate(${toDegrees(angleOfPoint({ x: p1.x - p2.x, y: p1.y - p2.y }))} ${p2.x} ${p2.y}) translate(${p2.x} ${
46
+ p2.y
47
+ })`}
48
+ />
49
+ );
42
50
  additionals.push(arrow);
43
51
  return additionals;
44
52
  }
45
53
  }
46
54
 
47
55
  @injectable()
48
- export class IconView implements IView {
49
- render(element: Icon, context: RenderingContext): VNode {
50
- const radius = this.getRadius();
51
- return <g>
52
- <circle class-sprotty-icon={true} r={radius} cx={radius} cy={radius}></circle>
53
- {context.renderChildren(element)}
54
- </g>;
55
- }
56
+ export class IconView extends ShapeView {
57
+ render(element: Icon, context: RenderingContext): VNode | undefined {
58
+ const taskNode = findParentByFeature(element, isTaskNode);
59
+ if (!taskNode || !this.isVisible(element, context)) {
60
+ return undefined;
61
+ }
62
+
63
+ let icon;
64
+ if (taskNode.type === 'task:manual') {
65
+ // From codicons: https://github.com/microsoft/vscode-codicons/blob/main/src/icons/account.svg?short_path=8135b2d
66
+ icon =
67
+ // eslint-disable-next-line max-len
68
+ 'M16 7.992C16 3.58 12.416 0 8 0S0 3.58 0 7.992c0 2.43 1.104 4.62 2.832 6.09.016.016.032.016.032.032.144.112.288.224.448.336.08.048.144.111.224.175A7.98 7.98 0 0 0 8.016 16a7.98 7.98 0 0 0 4.48-1.375c.08-.048.144-.111.224-.16.144-.111.304-.223.448-.335.016-.016.032-.016.032-.032 1.696-1.487 2.8-3.676 2.8-6.106zm-8 7.001c-1.504 0-2.88-.48-4.016-1.279.016-.128.048-.255.08-.383a4.17 4.17 0 0 1 .416-.991c.176-.304.384-.576.64-.816.24-.24.528-.463.816-.639.304-.176.624-.304.976-.4A4.15 4.15 0 0 1 8 10.342a4.185 4.185 0 0 1 2.928 1.166c.368.368.656.8.864 1.295.112.288.192.592.24.911A7.03 7.03 0 0 1 8 14.993zm-2.448-7.4a2.49 2.49 0 0 1-.208-1.024c0-.351.064-.703.208-1.023.144-.32.336-.607.576-.847.24-.24.528-.431.848-.575.32-.144.672-.208 1.024-.208.368 0 .704.064 1.024.208.32.144.608.336.848.575.24.24.432.528.576.847.144.32.208.672.208 1.023 0 .368-.064.704-.208 1.023a2.84 2.84 0 0 1-.576.848 2.84 2.84 0 0 1-.848.575 2.715 2.715 0 0 1-2.064 0 2.84 2.84 0 0 1-.848-.575 2.526 2.526 0 0 1-.56-.848zm7.424 5.306c0-.032-.016-.048-.016-.08a5.22 5.22 0 0 0-.688-1.406 4.883 4.883 0 0 0-1.088-1.135 5.207 5.207 0 0 0-1.04-.608 2.82 2.82 0 0 0 .464-.383 4.2 4.2 0 0 0 .624-.784 3.624 3.624 0 0 0 .528-1.934 3.71 3.71 0 0 0-.288-1.47 3.799 3.799 0 0 0-.816-1.199 3.845 3.845 0 0 0-1.2-.8 3.72 3.72 0 0 0-1.472-.287 3.72 3.72 0 0 0-1.472.288 3.631 3.631 0 0 0-1.2.815 3.84 3.84 0 0 0-.8 1.199 3.71 3.71 0 0 0-.288 1.47c0 .352.048.688.144 1.007.096.336.224.64.4.927.16.288.384.544.624.784.144.144.304.271.48.383a5.12 5.12 0 0 0-1.04.624c-.416.32-.784.703-1.088 1.119a4.999 4.999 0 0 0-.688 1.406c-.016.032-.016.064-.016.08C1.776 11.636.992 9.91.992 7.992.992 4.14 4.144.991 8 .991s7.008 3.149 7.008 7.001a6.96 6.96 0 0 1-2.032 4.907z';
69
+ } else {
70
+ // From codicons: https://github.com/microsoft/vscode-codicons/blob/main/src/icons/gear.svg?short_path=8ee3ec4
71
+ icon =
72
+ // eslint-disable-next-line max-len
73
+ 'M9.1 4.4L8.6 2H7.4l-.5 2.4-.7.3-2-1.3-.9.8 1.3 2-.2.7-2.4.5v1.2l2.4.5.3.8-1.3 2 .8.8 2-1.3.8.3.4 2.3h1.2l.5-2.4.8-.3 2 1.3.8-.8-1.3-2 .3-.8 2.3-.4V7.4l-2.4-.5-.3-.8 1.3-2-.8-.8-2 1.3-.7-.2zM9.4 1l.5 2.4L12 2.1l2 2-1.4 2.1 2.4.4v2.8l-2.4.5L14 12l-2 2-2.1-1.4-.5 2.4H6.6l-.5-2.4L4 13.9l-2-2 1.4-2.1L1 9.4V6.6l2.4-.5L2.1 4l2-2 2.1 1.4.4-2.4h2.8zm.6 7c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zM8 9c.6 0 1-.4 1-1s-.4-1-1-1-1 .4-1 1 .4 1 1 1z';
74
+ }
75
+
76
+ const vnode = (
77
+ <g>
78
+ <path
79
+ transform={'scale(1.15),translate(0.75,0.75)'}
80
+ // From codicons: https://github.com/microsoft/vscode-codicons/blob/main/src/icons/terminal.svg?short_path=2ffc08e
81
+ // eslint-disable-next-line max-len
82
+ d={icon}
83
+ />
84
+ <rect class-icon-background x={0} y={0} width={25} height={20} />
85
+ {context.renderChildren(element)}
86
+ </g>
87
+ );
56
88
 
57
- getRadius(): number {
58
- return 16;
89
+ const subType = getSubType(element);
90
+ if (subType) {
91
+ setAttr(vnode, 'class', subType);
92
+ }
93
+ return vnode;
59
94
  }
60
95
  }