@node-projects/web-component-designer 0.0.148 → 0.0.149

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.
@@ -8,6 +8,10 @@ export declare class EditTextWithStyloExtension extends AbstractExtension implem
8
8
  private _blurBound;
9
9
  private static template;
10
10
  private _resizeObserver;
11
+ private _rect1;
12
+ private _rect2;
13
+ private _rect3;
14
+ private _rect4;
11
15
  private _foreignObject;
12
16
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
13
17
  extend(): void;
@@ -10,6 +10,10 @@ export class EditTextWithStyloExtension extends AbstractExtension {
10
10
  <stylo-editor></stylo-editor>
11
11
  `;
12
12
  _resizeObserver;
13
+ _rect1;
14
+ _rect2;
15
+ _rect3;
16
+ _rect4;
13
17
  _foreignObject;
14
18
  constructor(extensionManager, designerView, extendedItem) {
15
19
  super(extensionManager, designerView, extendedItem);
@@ -21,6 +25,7 @@ export class EditTextWithStyloExtension extends AbstractExtension {
21
25
  this.extendedItem.element.addEventListener('input', this._contentEditedBound);
22
26
  this.extendedItem.element.addEventListener('blur', this._blurBound);
23
27
  this.extendedItem.element.focus();
28
+ this.designerCanvas.eatEvents = this.extendedItem.element;
24
29
  this.designerCanvas.serviceContainer.globalContext.tool = new TextTool(true);
25
30
  const elements = EditTextWithStyloExtension.template.content.cloneNode(true);
26
31
  const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
@@ -33,6 +38,10 @@ export class EditTextWithStyloExtension extends AbstractExtension {
33
38
  this.overlayLayerView.addOverlay(foreignObject, OverlayLayer.Foregorund);
34
39
  this.overlays.push(foreignObject);
35
40
  this._drawClickOverlayRects();
41
+ this._rect1.addEventListener('pointerdown', (e) => this._clickOutside(e));
42
+ this._rect2.addEventListener('pointerdown', (e) => this._clickOutside(e));
43
+ this._rect3.addEventListener('pointerdown', (e) => this._clickOutside(e));
44
+ this._rect4.addEventListener('pointerdown', (e) => this._clickOutside(e));
36
45
  requestAnimationFrame(() => {
37
46
  const stylo = foreignObject.querySelector('stylo-editor');
38
47
  //@ts-ignore
@@ -46,7 +55,13 @@ export class EditTextWithStyloExtension extends AbstractExtension {
46
55
  this._resizeObserver = new ResizeObserver(() => this._drawClickOverlayRects());
47
56
  this._resizeObserver.observe(this.extendedItem.element);
48
57
  }
49
- _drawClickOverlayRects() { }
58
+ _drawClickOverlayRects() {
59
+ const normalized = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
60
+ this._rect1 = this._drawRect(0, 0, this.designerCanvas.containerBoundingRect.width, normalized.y, 'svg-transparent', this._rect1, OverlayLayer.Normal);
61
+ this._rect2 = this._drawRect(0, 0, normalized.x, this.designerCanvas.containerBoundingRect.height, 'svg-transparent', this._rect2, OverlayLayer.Normal);
62
+ this._rect3 = this._drawRect(normalized.x + normalized.width, 0, this.designerCanvas.containerBoundingRect.width, this.designerCanvas.containerBoundingRect.height, 'svg-transparent', this._rect3, OverlayLayer.Normal);
63
+ this._rect4 = this._drawRect(0, normalized.y + normalized.height, this.designerCanvas.containerBoundingRect.width, this.designerCanvas.containerBoundingRect.height, 'svg-transparent', this._rect4, OverlayLayer.Normal);
64
+ }
50
65
  handlesPointerEvent(designerCanvas, event, currentElement) {
51
66
  let p = event.composedPath();
52
67
  const stylo = this._foreignObject.querySelector('stylo-editor');
@@ -60,8 +75,6 @@ export class EditTextWithStyloExtension extends AbstractExtension {
60
75
  this._removeAllOverlays();
61
76
  this.extendedItem.element.removeAttribute('contenteditable');
62
77
  this.designerCanvas.eatEvents = null;
63
- this.extendedItem.element.querySelectorAll('[paragraph_id]').forEach(x => x.removeAttribute('paragraph_id'));
64
- this.extendedItem.element.querySelectorAll('[draggable]').forEach(x => x.removeAttribute('draggable'));
65
78
  this.extendedItem.updateChildrenFromNodesChildren();
66
79
  this.designerCanvas.clickOverlay.style.pointerEvents = 'auto';
67
80
  }
@@ -2,6 +2,7 @@ import { IDesignItem } from "../../../../item/IDesignItem";
2
2
  import { IDesignerCanvas } from "../../IDesignerCanvas";
3
3
  import { AbstractExtension } from "../AbstractExtension";
4
4
  import { IExtensionManager } from "../IExtensionManger";
5
+ import { IRect } from "../../../../../interfaces/IRect";
5
6
  export declare class EllipsisExtension extends AbstractExtension {
6
7
  private _parentRect;
7
8
  private _ellipseElement;
@@ -19,11 +20,22 @@ export declare class EllipsisExtension extends AbstractExtension {
19
20
  private _circle2;
20
21
  private _circle3;
21
22
  private _circle4;
23
+ private _parentCoordinates;
24
+ private _offsetSvg;
22
25
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
23
26
  extend(): void;
24
27
  pointerEvent(event: PointerEvent, circle: SVGCircleElement, e: SVGEllipseElement, index: number): void;
25
28
  _drawPathCircle(x: number, y: number, e: SVGEllipseElement, index: number): SVGCircleElement;
26
29
  _redrawPathCircle(x: number, y: number, oldCircle: SVGCircleElement): SVGCircleElement;
30
+ _getPointsFromEllipse(elementCoords: IRect): number[];
31
+ _getMinMaxValues(coords: any): {
32
+ xMin: number;
33
+ xMax: number;
34
+ yMin: number;
35
+ yMax: number;
36
+ };
37
+ _rearrangeSvgParent(newEllipseExtrema: any): void;
38
+ _rearrangePointsFromElement(oldParentCoords: IRect): void;
27
39
  refresh(): void;
28
40
  dispose(): void;
29
41
  }
@@ -17,6 +17,8 @@ export class EllipsisExtension extends AbstractExtension {
17
17
  _circle2;
18
18
  _circle3;
19
19
  _circle4;
20
+ _parentCoordinates;
21
+ _offsetSvg = 10.0;
20
22
  constructor(extensionManager, designerView, extendedItem) {
21
23
  super(extensionManager, designerView, extendedItem);
22
24
  }
@@ -41,6 +43,7 @@ export class EllipsisExtension extends AbstractExtension {
41
43
  this._startPos = cursorPos;
42
44
  this._circlePos = { x: parseFloat(circle.getAttribute("cx")), y: parseFloat(circle.getAttribute("cy")) };
43
45
  this._originalPoint = { x: this._rx, y: this._ry };
46
+ this._parentCoordinates = this.designerCanvas.getNormalizedElementCoordinates(this._ellipseElement.parentElement);
44
47
  break;
45
48
  case EventNames.PointerMove:
46
49
  if (this._startPos && event.buttons > 0) {
@@ -87,6 +90,15 @@ export class EllipsisExtension extends AbstractExtension {
87
90
  this._originalPoint = null;
88
91
  this.extendedItem.setAttribute("rx", this._newRx.toString());
89
92
  this.extendedItem.setAttribute("ry", this._newRy.toString());
93
+ if (getComputedStyle(this._ellipseElement.parentElement).position == "absolute") {
94
+ let group = this.extendedItem.openGroup('rearrangeSvg');
95
+ let newEllipseCoordinates = this.designerCanvas.getNormalizedElementCoordinates(this._ellipseElement);
96
+ let newEllipseCoordinatesCloud = this._getPointsFromEllipse(newEllipseCoordinates);
97
+ let newEllipseExtrema = this._getMinMaxValues(newEllipseCoordinatesCloud);
98
+ this._rearrangeSvgParent(newEllipseExtrema);
99
+ this._rearrangePointsFromElement(this._parentCoordinates);
100
+ group.commit();
101
+ }
90
102
  break;
91
103
  }
92
104
  }
@@ -103,6 +115,55 @@ export class EllipsisExtension extends AbstractExtension {
103
115
  circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
104
116
  return circle;
105
117
  }
118
+ _getPointsFromEllipse(elementCoords) {
119
+ let Coords = [];
120
+ Coords.push(elementCoords.x);
121
+ Coords.push(elementCoords.x + elementCoords.width);
122
+ Coords.push(elementCoords.x);
123
+ Coords.push(elementCoords.x + elementCoords.width);
124
+ Coords.push(elementCoords.y);
125
+ Coords.push(elementCoords.y);
126
+ Coords.push(elementCoords.y + elementCoords.height);
127
+ Coords.push(elementCoords.y + elementCoords.height);
128
+ Coords.push(elementCoords.height);
129
+ Coords.push(elementCoords.width);
130
+ return Coords;
131
+ }
132
+ _getMinMaxValues(coords) {
133
+ let extrema = { xMin: 0.0, xMax: 0.0, yMin: 0.0, yMax: 0.0 };
134
+ for (let i = 0; i < coords.length - 2; i++) {
135
+ if (coords[i] < coords[i + 1] && i <= 3) {
136
+ extrema.xMin = coords[i];
137
+ }
138
+ else if (coords[i] < coords[i + 1] && i > 3 && i <= 7) {
139
+ extrema.yMin = coords[i];
140
+ }
141
+ if (coords[i] > coords[i + 1] && i <= 3) {
142
+ extrema.xMax = coords[i];
143
+ }
144
+ else if (coords[i] > coords[i + 1] && i > 3 && i <= 7) {
145
+ extrema.yMax = coords[i];
146
+ }
147
+ }
148
+ return extrema;
149
+ }
150
+ _rearrangeSvgParent(newEllipseExtrema) {
151
+ let parentLeft = newEllipseExtrema.xMin - this._offsetSvg;
152
+ let parentTop = newEllipseExtrema.yMin - this._offsetSvg;
153
+ let widthEllipseElement = newEllipseExtrema.xMax - newEllipseExtrema.xMin + (2 * this._offsetSvg);
154
+ let heightEllipseElement = newEllipseExtrema.yMax - newEllipseExtrema.yMin + (2 * this._offsetSvg);
155
+ this.extendedItem.parent.setStyle("left", parentLeft.toString() + "px");
156
+ this.extendedItem.parent.setStyle("top", parentTop.toString() + "px");
157
+ this.extendedItem.parent.setStyle("height", heightEllipseElement.toString() + "px");
158
+ this.extendedItem.parent.setStyle("width", widthEllipseElement.toString() + "px");
159
+ }
160
+ _rearrangePointsFromElement(oldParentCoords) {
161
+ let newParentCoords = this.designerCanvas.getNormalizedElementCoordinates(this._ellipseElement.parentElement);
162
+ let diffX = oldParentCoords.x - newParentCoords.x;
163
+ let diffY = oldParentCoords.y - newParentCoords.y;
164
+ this.extendedItem.setAttribute('cx', (this._ellipseElement.cx.baseVal.value + diffX).toString());
165
+ this.extendedItem.setAttribute('cy', (this._ellipseElement.cy.baseVal.value + diffY).toString());
166
+ }
106
167
  refresh() {
107
168
  this._removeAllOverlays();
108
169
  this.extend();
@@ -2,6 +2,7 @@ import { IDesignItem } from "../../../../item/IDesignItem";
2
2
  import { IDesignerCanvas } from "../../IDesignerCanvas";
3
3
  import { AbstractExtension } from "../AbstractExtension";
4
4
  import { IExtensionManager } from "../IExtensionManger";
5
+ import { IRect } from "../../../../../interfaces/IRect";
5
6
  export declare class LineExtension extends AbstractExtension {
6
7
  private _parentRect;
7
8
  private _lineElement;
@@ -11,10 +12,21 @@ export declare class LineExtension extends AbstractExtension {
11
12
  private _originalPoint;
12
13
  private _newLinePoint;
13
14
  private _newCirclePoint;
15
+ private _parentCoordinates;
16
+ private _offsetSvg;
14
17
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
15
18
  extend(): void;
16
19
  pointerEvent(event: PointerEvent, circle: SVGCircleElement, l: SVGLineElement, index: number): void;
17
20
  _drawPathCircle(x: number, y: number, l: SVGLineElement, index: number): void;
21
+ _getPointsFromRect(elementCoords: IRect): number[];
22
+ _getMinMaxValues(coords: any): {
23
+ xMin: number;
24
+ xMax: number;
25
+ yMin: number;
26
+ yMax: number;
27
+ };
28
+ _rearrangeSvgParent(newLineExtrema: any): void;
29
+ _rearrangePointsFromElement(oldParentCoords: IRect): void;
18
30
  refresh(): void;
19
31
  dispose(): void;
20
32
  }
@@ -9,6 +9,8 @@ export class LineExtension extends AbstractExtension {
9
9
  _originalPoint;
10
10
  _newLinePoint;
11
11
  _newCirclePoint;
12
+ _parentCoordinates;
13
+ _offsetSvg = 10.0;
12
14
  constructor(extensionManager, designerView, extendedItem) {
13
15
  super(extensionManager, designerView, extendedItem);
14
16
  }
@@ -31,6 +33,7 @@ export class LineExtension extends AbstractExtension {
31
33
  this._startPos = cursorPos;
32
34
  this._circlePos = { x: parseFloat(circle.getAttribute("cx")), y: parseFloat(circle.getAttribute("cy")) };
33
35
  this._originalPoint = { x: parseFloat(l.getAttribute("x" + index)), y: parseFloat(l.getAttribute("y" + index)) };
36
+ this._parentCoordinates = this.designerCanvas.getNormalizedElementCoordinates(this._lineElement.parentElement);
34
37
  break;
35
38
  case EventNames.PointerMove:
36
39
  if (this._startPos && event.buttons > 0) {
@@ -68,6 +71,15 @@ export class LineExtension extends AbstractExtension {
68
71
  this._originalPoint = null;
69
72
  this.extendedItem.setAttribute('x' + index, this._newLinePoint.x.toString());
70
73
  this.extendedItem.setAttribute('y' + index, this._newLinePoint.y.toString());
74
+ if (getComputedStyle(this._lineElement.parentElement).position == "absolute") {
75
+ let group = this.extendedItem.openGroup('rearrangeSvg');
76
+ let newLineCoordinates = this.designerCanvas.getNormalizedElementCoordinates(this._lineElement);
77
+ let newLineCoordinatesCloud = this._getPointsFromRect(newLineCoordinates);
78
+ let newLineExtrema = this._getMinMaxValues(newLineCoordinatesCloud);
79
+ this._rearrangeSvgParent(newLineExtrema);
80
+ this._rearrangePointsFromElement(this._parentCoordinates);
81
+ group.commit();
82
+ }
71
83
  break;
72
84
  }
73
85
  }
@@ -78,6 +90,53 @@ export class LineExtension extends AbstractExtension {
78
90
  circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event, circle, l, index));
79
91
  circle.addEventListener(EventNames.PointerUp, event => this.pointerEvent(event, circle, l, index));
80
92
  }
93
+ _getPointsFromRect(elementCoords) {
94
+ let Coords = [];
95
+ Coords.push(elementCoords.x);
96
+ Coords.push(elementCoords.x + elementCoords.width);
97
+ Coords.push(elementCoords.y);
98
+ Coords.push(elementCoords.y + elementCoords.height);
99
+ Coords.push(elementCoords.height);
100
+ Coords.push(elementCoords.width);
101
+ return Coords;
102
+ }
103
+ _getMinMaxValues(coords) {
104
+ let extrema = { xMin: 0.0, xMax: 0.0, yMin: 0.0, yMax: 0.0 };
105
+ for (let i = 0; i < coords.length - 2; i++) {
106
+ if (coords[i] < coords[i + 1] && i <= 1) {
107
+ extrema.xMin = coords[i];
108
+ }
109
+ else if (coords[i] < coords[i + 1] && i > 1 && i <= 3) {
110
+ extrema.yMin = coords[i];
111
+ }
112
+ if (coords[i] > coords[i + 1] && i <= 1) {
113
+ extrema.xMax = coords[i];
114
+ }
115
+ else if (coords[i] > coords[i + 1] && i > 1 && i <= 3) {
116
+ extrema.yMax = coords[i];
117
+ }
118
+ }
119
+ return extrema;
120
+ }
121
+ _rearrangeSvgParent(newLineExtrema) {
122
+ let parentLeft = newLineExtrema.xMin - this._offsetSvg;
123
+ let parentTop = newLineExtrema.yMin - this._offsetSvg;
124
+ let widthLineElement = newLineExtrema.xMax - newLineExtrema.xMin + (2 * this._offsetSvg);
125
+ let heightLineElement = newLineExtrema.yMax - newLineExtrema.yMin + (2 * this._offsetSvg);
126
+ this.extendedItem.parent.setStyle("left", parentLeft.toString() + "px");
127
+ this.extendedItem.parent.setStyle("top", parentTop.toString() + "px");
128
+ this.extendedItem.parent.setStyle("height", heightLineElement.toString() + "px");
129
+ this.extendedItem.parent.setStyle("width", widthLineElement.toString() + "px");
130
+ }
131
+ _rearrangePointsFromElement(oldParentCoords) {
132
+ let newParentCoords = this.designerCanvas.getNormalizedElementCoordinates(this._lineElement.parentElement);
133
+ let diffX = oldParentCoords.x - newParentCoords.x;
134
+ let diffY = oldParentCoords.y - newParentCoords.y;
135
+ this.extendedItem.setAttribute('x1', (this._lineElement.x1.baseVal.value + diffX).toString());
136
+ this.extendedItem.setAttribute('y1', (this._lineElement.y1.baseVal.value + diffY).toString());
137
+ this.extendedItem.setAttribute('x2', (this._lineElement.x2.baseVal.value + diffX).toString());
138
+ this.extendedItem.setAttribute('y2', (this._lineElement.y2.baseVal.value + diffY).toString());
139
+ }
81
140
  refresh() {
82
141
  this._removeAllOverlays();
83
142
  this.extend();
@@ -5,6 +5,7 @@ import "../../../../helper/PathDataPolyfill";
5
5
  import { IPoint } from "../../../../../interfaces/IPoint";
6
6
  import { IExtensionManager } from "../IExtensionManger";
7
7
  import { PathData } from "../../../../helper/PathDataPolyfill";
8
+ import { IRect } from "../../../../../interfaces/IRect";
8
9
  export declare class PathExtension extends AbstractExtension {
9
10
  private _lastPos;
10
11
  private _parentRect;
@@ -12,12 +13,17 @@ export declare class PathExtension extends AbstractExtension {
12
13
  private _circlePos;
13
14
  private _originalPathPoint;
14
15
  private _pathdata;
16
+ private _offsetSvg;
17
+ private _pathElement;
18
+ private _parentCoordinates;
15
19
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
16
20
  extend(): void;
17
21
  pointerEvent(event: PointerEvent, circle: SVGCircleElement, p: PathData, index: number): void;
18
22
  _drawPathCircle(x: number, y: number, p: PathData, index: number): void;
19
23
  _drawPathLine(x1: number, y1: number, x2: number, y2: number): void;
20
24
  _checkCircleIndex(p: PathData, circlePos: IPoint): boolean;
25
+ _rearrangeSvgElement(): void;
26
+ _rearrangePointsFromElement(oldParentCoords: IRect, pathData: PathData[]): void;
21
27
  refresh(): void;
22
28
  dispose(): void;
23
29
  }
@@ -10,12 +10,16 @@ export class PathExtension extends AbstractExtension {
10
10
  _circlePos;
11
11
  _originalPathPoint;
12
12
  _pathdata;
13
+ _offsetSvg = 10.0;
14
+ _pathElement;
15
+ _parentCoordinates;
13
16
  constructor(extensionManager, designerView, extendedItem) {
14
17
  super(extensionManager, designerView, extendedItem);
15
18
  }
16
19
  extend() {
17
20
  this._parentRect = this.extendedItem.element.parentElement.getBoundingClientRect();
18
21
  this._pathdata = this.extendedItem.node.getPathData({ normalize: false });
22
+ this._pathElement = this.extendedItem.node;
19
23
  this._lastPos = { x: 0, y: 0 };
20
24
  for (let p of this._pathdata) {
21
25
  switch (p.type) {
@@ -111,6 +115,7 @@ export class PathExtension extends AbstractExtension {
111
115
  this._startPos = cursorPos;
112
116
  this._circlePos = { x: parseFloat(circle.getAttribute("cx")), y: parseFloat(circle.getAttribute("cy")) };
113
117
  this._originalPathPoint = { x: p.values[index], y: p.values[index + 1] };
118
+ this._parentCoordinates = this.extendedItem.element.parentElement.getBoundingClientRect();
114
119
  break;
115
120
  case EventNames.PointerMove:
116
121
  if (this._startPos && event.buttons > 0) {
@@ -158,6 +163,13 @@ export class PathExtension extends AbstractExtension {
158
163
  this._circlePos = null;
159
164
  this._lastPos = null;
160
165
  this.extendedItem.setAttribute('d', createPathD(this._pathdata));
166
+ if (getComputedStyle(this._pathElement.parentElement).position == "absolute") {
167
+ let group = this.extendedItem.openGroup('rearrangeSvg');
168
+ let dataPath = this._pathdata;
169
+ this._rearrangeSvgElement();
170
+ this._rearrangePointsFromElement(this._parentCoordinates, dataPath);
171
+ group.commit();
172
+ }
161
173
  break;
162
174
  }
163
175
  }
@@ -277,6 +289,27 @@ export class PathExtension extends AbstractExtension {
277
289
  }
278
290
  return false;
279
291
  }
292
+ _rearrangeSvgElement() {
293
+ let newElementCoords = this.extendedItem.element.getBoundingClientRect();
294
+ let parentLeft = (newElementCoords.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor - this._offsetSvg;
295
+ let parentTop = (newElementCoords.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - this._offsetSvg;
296
+ let heightSvgElement = newElementCoords.height + (2 * this._offsetSvg);
297
+ let widthSvgElement = newElementCoords.width + (2 * this._offsetSvg);
298
+ this.extendedItem.element.parentElement.style.setProperty("left", parentLeft.toString() + "px");
299
+ this.extendedItem.element.parentElement.style.setProperty("top", parentTop.toString() + "px");
300
+ this.extendedItem.element.parentElement.style.setProperty("height", heightSvgElement.toString() + "px");
301
+ this.extendedItem.element.parentElement.style.setProperty("width", widthSvgElement.toString() + "px");
302
+ }
303
+ _rearrangePointsFromElement(oldParentCoords, pathData) {
304
+ let newParentCoords = this.extendedItem.element.parentElement.getBoundingClientRect();
305
+ let diffX = oldParentCoords.x - newParentCoords.x;
306
+ let diffY = oldParentCoords.y - newParentCoords.y;
307
+ for (let i = 0; i < pathData.length; i++) {
308
+ pathData[i].values[0] = pathData[i].values[0] + diffX;
309
+ pathData[i].values[1] = pathData[i].values[1] + diffY;
310
+ }
311
+ this.extendedItem.element.setAttribute("d", createPathD(this._pathdata));
312
+ }
280
313
  refresh() {
281
314
  this._removeAllOverlays();
282
315
  this.extend();
@@ -1,3 +1,4 @@
1
+ import { IRect } from "../../../../../interfaces/IRect";
1
2
  import { IDesignItem } from "../../../../item/IDesignItem";
2
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
3
4
  import { AbstractExtension } from "../AbstractExtension";
@@ -18,6 +19,8 @@ export declare class RectExtension extends AbstractExtension {
18
19
  private _circle3;
19
20
  private _circle4;
20
21
  private _rect;
22
+ private _parentCoordinates;
23
+ private _offsetSvg;
21
24
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
22
25
  extend(): void;
23
26
  pointerEvent(event: PointerEvent, circle: SVGCircleElement, r: SVGRectElement, index: number): void;
@@ -29,6 +32,15 @@ export declare class RectExtension extends AbstractExtension {
29
32
  w: number;
30
33
  h: number;
31
34
  };
35
+ _getPointsFromRect(elementCoords: IRect): number[];
36
+ _getMinMaxValues(coords: any): {
37
+ xMin: number;
38
+ xMax: number;
39
+ yMin: number;
40
+ yMax: number;
41
+ };
42
+ _rearrangeSvgParent(newRectExtrema: any): void;
43
+ _rearrangePointsFromElement(oldParentCoords: IRect): void;
32
44
  refresh(): void;
33
45
  dispose(): void;
34
46
  }
@@ -16,6 +16,8 @@ export class RectExtension extends AbstractExtension {
16
16
  _circle3;
17
17
  _circle4;
18
18
  _rect = { x: 0, y: 0, w: 0, h: 0 };
19
+ _parentCoordinates;
20
+ _offsetSvg = 10.0;
19
21
  constructor(extensionManager, designerView, extendedItem) {
20
22
  super(extensionManager, designerView, extendedItem);
21
23
  }
@@ -40,6 +42,7 @@ export class RectExtension extends AbstractExtension {
40
42
  this._startPos = cursorPos;
41
43
  this._circlePos = { x: parseFloat(circle.getAttribute("cx")), y: parseFloat(circle.getAttribute("cy")) };
42
44
  this._originalPoint = { x: this._x, y: this._y };
45
+ this._parentCoordinates = this.designerCanvas.getNormalizedElementCoordinates(this._rectElement.parentElement);
43
46
  break;
44
47
  case EventNames.PointerMove:
45
48
  if (this._startPos && event.buttons > 0) {
@@ -92,6 +95,15 @@ export class RectExtension extends AbstractExtension {
92
95
  this.extendedItem.setAttribute("y", this._rect.y.toString());
93
96
  this.extendedItem.setAttribute("width", this._rect.w.toString());
94
97
  this.extendedItem.setAttribute("height", this._rect.h.toString());
98
+ if (getComputedStyle(this._rectElement.parentElement).position == "absolute") {
99
+ let group = this.extendedItem.openGroup('rearrangeSvg');
100
+ let newRectCoordinates = this.designerCanvas.getNormalizedElementCoordinates(this._rectElement);
101
+ let newRectCoordinatesCloud = this._getPointsFromRect(newRectCoordinates);
102
+ let newRectExtrema = this._getMinMaxValues(newRectCoordinatesCloud);
103
+ this._rearrangeSvgParent(newRectExtrema);
104
+ this._rearrangePointsFromElement(this._parentCoordinates);
105
+ group.commit();
106
+ }
95
107
  break;
96
108
  }
97
109
  }
@@ -128,6 +140,55 @@ export class RectExtension extends AbstractExtension {
128
140
  }
129
141
  return rect;
130
142
  }
143
+ _getPointsFromRect(elementCoords) {
144
+ let Coords = [];
145
+ Coords.push(elementCoords.x);
146
+ Coords.push(elementCoords.x + elementCoords.width);
147
+ Coords.push(elementCoords.x);
148
+ Coords.push(elementCoords.x + elementCoords.width);
149
+ Coords.push(elementCoords.y);
150
+ Coords.push(elementCoords.y);
151
+ Coords.push(elementCoords.y + elementCoords.height);
152
+ Coords.push(elementCoords.y + elementCoords.height);
153
+ Coords.push(elementCoords.height);
154
+ Coords.push(elementCoords.width);
155
+ return Coords;
156
+ }
157
+ _getMinMaxValues(coords) {
158
+ let extrema = { xMin: 0.0, xMax: 0.0, yMin: 0.0, yMax: 0.0 };
159
+ for (let i = 0; i < coords.length - 2; i++) {
160
+ if (coords[i] < coords[i + 1] && i <= 3) {
161
+ extrema.xMin = coords[i];
162
+ }
163
+ else if (coords[i] < coords[i + 1] && i > 3 && i <= 7) {
164
+ extrema.yMin = coords[i];
165
+ }
166
+ if (coords[i] > coords[i + 1] && i <= 3) {
167
+ extrema.xMax = coords[i];
168
+ }
169
+ else if (coords[i] > coords[i + 1] && i > 3 && i <= 8) {
170
+ extrema.yMax = coords[i];
171
+ }
172
+ }
173
+ return extrema;
174
+ }
175
+ _rearrangeSvgParent(newRectExtrema) {
176
+ let parentLeft = newRectExtrema.xMin - this._offsetSvg;
177
+ let parentTop = newRectExtrema.yMin - this._offsetSvg;
178
+ let widthRectElement = newRectExtrema.xMax - newRectExtrema.xMin + (2 * this._offsetSvg);
179
+ let heightRectElement = newRectExtrema.yMax - newRectExtrema.yMin + (2 * this._offsetSvg);
180
+ this.extendedItem.parent.setStyle("left", parentLeft.toString() + "px");
181
+ this.extendedItem.parent.setStyle("top", parentTop.toString() + "px");
182
+ this.extendedItem.parent.setStyle("height", heightRectElement.toString() + "px");
183
+ this.extendedItem.parent.setStyle("width", widthRectElement.toString() + "px");
184
+ }
185
+ _rearrangePointsFromElement(oldParentCoords) {
186
+ let newParentCoords = this.designerCanvas.getNormalizedElementCoordinates(this._rectElement.parentElement);
187
+ let diffX = oldParentCoords.x - newParentCoords.x;
188
+ let diffY = oldParentCoords.y - newParentCoords.y;
189
+ this.extendedItem.setAttribute('x', (this._rectElement.x.baseVal.value + diffX).toString());
190
+ this.extendedItem.setAttribute('y', (this._rectElement.y.baseVal.value + diffY).toString());
191
+ }
131
192
  refresh() {
132
193
  this._removeAllOverlays();
133
194
  this.extend();
@@ -35,13 +35,11 @@ export class TextTool {
35
35
  setTimeout(() => { span.focus(); }, 50);
36
36
  }
37
37
  else {
38
- if (this._textEditExtensions) {
39
- for (let e of this._textEditExtensions) {
40
- if (e.handlesPointerEvent) {
41
- const ret = e.handlesPointerEvent(designerCanvas, event, currentElement);
42
- if (!ret) {
43
- designerCanvas.serviceContainer.globalContext.finishedWithTool(this);
44
- }
38
+ for (let e of this._textEditExtensions) {
39
+ if (e.handlesPointerEvent) {
40
+ const ret = e.handlesPointerEvent(designerCanvas, event, currentElement);
41
+ if (!ret) {
42
+ designerCanvas.serviceContainer.globalContext.finishedWithTool(this);
45
43
  }
46
44
  }
47
45
  }
@@ -3,6 +3,7 @@ import { NodeType } from '../../item/NodeType';
3
3
  import { assetsPath } from '../../../Constants';
4
4
  import { ContextMenu } from '../../helper/contextMenu/ContextMenu';
5
5
  import { switchContainer } from '../../helper/SwitchContainerHelper';
6
+ import { DomConverter } from '../designerView/DomConverter';
6
7
  export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
7
8
  _treeDiv;
8
9
  _tree;
@@ -195,7 +196,8 @@ export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
195
196
  }
196
197
  }
197
198
  }
198
- return false;
199
+ const disableExpand = event.originalEvent.ctrlKey || event.originalEvent.shiftKey;
200
+ return !disableExpand;
199
201
  },
200
202
  createNode: (event, data) => {
201
203
  let node = data.node;
@@ -336,7 +338,7 @@ export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
336
338
  currentNode = this._tree.getRootNode();
337
339
  }
338
340
  const newNode = currentNode.addChildren({
339
- title: item.nodeType === NodeType.Element ? item.name + " " + (item.id ? ('#' + item.id) : '') : '<small><small><small>#' + (item.nodeType === NodeType.TextNode ? 'text' : 'comment') + '&nbsp;</small></small></small> ' + item.content,
341
+ title: item.nodeType === NodeType.Element ? item.name + " " + (item.id ? ('#' + item.id) : '') : '<small><small><small>#' + (item.nodeType === NodeType.TextNode ? 'text' : 'comment') + '&nbsp;</small></small></small> ' + DomConverter.normalizeContentValue(item.content),
340
342
  folder: item.children.length > 0 ? true : false,
341
343
  //@ts-ignore
342
344
  ref: item
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A UI designer for Polymer apps",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.0.148",
4
+ "version": "0.0.149",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",